final ValueType secondType =
getValueTypeForBinaryOperation(tracker.getType(), (SimpleNode) node.jjtGetChild(child));
if (curType != null && secondType != null)
{
final BinaryOperator operator =
BinaryOperator.getBinaryOperator((Token)node.getOperatorTokens().get(child-1), _diagnosticFactory, _context);
final Diagnostic diagnostic = operator.validate(curType, secondType);
if (diagnostic.getSeverity() != Diagnostic.OK)
{
final Token firstToken = node.getFirstToken();
final int offset = _context.getDocumentPosition() + firstToken.beginColumn - 1;
final int length = node.getLastToken().endColumn - firstToken.beginColumn+1;
_reporter.report(diagnostic, offset, length);
}
curType = operator.performOperation(curType, secondType);
}
}
tracker.setType(curType);
}