public static Expression MakeOperator(string @operator, FunctionExpression function) { var token = new Token(function.Token, TokenType.Global, "global", TokenSubType.Keyword); var global = new GlobalExpression(token); token = new Token(function.Token, TokenType.Identifier, "__ops", TokenSubType.None); var opsField = new FieldExpression(token, global); token = new Token(function.Token, TokenType.String, @operator, TokenSubType.Operator); var opField = new FieldExpression(token, opsField); token = new Token(function.Token, TokenType.Assign, "=", TokenSubType.Operator); return new BinaryOperatorExpression(token, opField, function); }
public Expression Parse(Parser parser, Token token) { string name; List<string> arguments; string otherArgs; ScopeExpression body; bool isOperator; bool trailingSemicolon; ParseFunction(parser, token, false, out trailingSemicolon, out name, out arguments, out otherArgs, out isOperator, out body); var function = new FunctionExpression(token, name, arguments, otherArgs, isOperator, body); return isOperator ? MakeOperator(name, function) : function; }