Expression overloadBinary(Expression e)
{
return callOpOverload("opBinary", [e.op], [e.lhs, e.rhs]);
}
Expression overloadEquals(Expression e)
{
return callOpOverload("opEquals", [], [e.lhs, e.rhs]);
}
Expression callOpOverload(string name, Expression[] tiArgs, Expression[] args)
{
auto result = new CallExpression(name);
result.addTemplateArgs(tiArgs);
result.addArg(args);
return result;
}