private static void InfixOp(Compiler c, bool allowAssignment) { GrammarRule rule = c.GetRule(c._parser.Previous.Type); // An infix operator cannot end an expression. c.IgnoreNewlines(); // Compile the right-hand side. c.ParsePrecedence(false, rule.Precedence + 1); // Call the operator method on the left-hand side. Signature signature = new Signature { Type = SignatureType.Method, Arity = 1, Name = rule.Name, Length = rule.Name.Length }; c.CallSignature(Instruction.Call0, signature); }
// Unary operators like `-foo`. private static void UnaryOp(Compiler c, bool allowAssignment) { GrammarRule rule = c.GetRule(c._parser.Previous.Type); c.IgnoreNewlines(); // Compile the argument. c.ParsePrecedence(false, Precedence.Unary + 1); // Call the operator method on the left-hand side. c.CallMethod(0, rule.Name); }