bool ResolveOperator(BinaryExpression node)
{
MethodInvocationExpression mie = new MethodInvocationExpression(node.LexicalInfo);
mie.Arguments.Add(node.Left.CloneNode());
mie.Arguments.Add(node.Right.CloneNode());
string operatorName = AstUtil.GetMethodNameForOperator(node.Operator);
IType lhs = GetExpressionType(node.Left);
if (ResolveOperator(node, lhs, operatorName, mie))
{
return true;
}
IType rhs = GetExpressionType(node.Right);
if (ResolveOperator(node, rhs, operatorName, mie))
{
return true;
}
//pointer arithmetic
if (lhs.IsPointer && TypeSystemServices.IsIntegerNumber(rhs))
{
switch (node.Operator)
{
case BinaryOperatorType.Addition:
case BinaryOperatorType.Subtraction:
return true;
}
}
return ResolveRuntimeOperator(node, operatorName, mie);
}