public virtual object Walk(SelfExpression node) { if (Enter(node)) { // Insert code here } Exit(node); return(null); }
private SelfExpression ParseSelfExpression() { var exp = new SelfExpression { Token = Next() }; Match(TokenType.This); return(exp); }
private IExpression ParseCallExpression(IExpression receiver) { CallExpression exp; if (CurTokenIs(TokenType.LParen)) { var m = ((Identifier)receiver).Value; var selftok = new Token { Type = TokenType.Self, Literal = "self", Line = CurToken.Line }; var self = new SelfExpression { Token = selftok }; receiver = self; exp = new CallExpression { Token = CurToken, Receiver = receiver, Method = m }; exp.Arguments = ParseCallArguments(); } else { exp = new CallExpression { Token = CurToken, Receiver = receiver }; if (!ExpectPeek(TokenType.Ident)) { return(null); } exp.Method = CurToken.Literal; if (PeekTokenIs(TokenType.LParen)) { NextToken(); exp.Arguments = ParseCallArguments(); } else { exp.Arguments = new List <IExpression>(); } } if (PeekTokenIs(TokenType.Assign)) { exp.Method = exp.Method + "="; NextToken(); NextToken(); exp.Arguments.Add(ParseExpression(LOWEST)); } if (PeekTokenIs(TokenType.Do)) { ParseBlockParameters(exp); } return(exp); }
public void Evaluate() { Machine machine = new Machine(); SelfExpression expr = new SelfExpression(); var result = expr.Evaluate(machine.RootContext); Assert.IsNotNull(result); Assert.AreSame(machine.RootContext.Self, result); }
public void ParseSelfExpression() { Parser parser = new Parser("self"); var expected = new SelfExpression(); var result = parser.ParseExpression(); Assert.IsNotNull(result); Assert.AreEqual(expected, result); Assert.IsNull(parser.ParseCommand()); }
public void Equals() { SelfExpression expr1 = new SelfExpression(); SelfExpression expr2 = new SelfExpression(); Assert.IsFalse(expr1.Equals(null)); Assert.IsFalse(expr1.Equals(123)); Assert.IsFalse(expr1.Equals("foo")); Assert.IsTrue(expr1.Equals(expr2)); Assert.IsTrue(expr2.Equals(expr1)); Assert.AreEqual(expr1.GetHashCode(), expr2.GetHashCode()); }
private IExpression ParseDefExpression() { string name = this.ParseName(); INamedExpression named = null; if (name == "self") { named = new SelfExpression(); } else { named = new NameExpression(name); } while (true) { if (this.TryParseToken(TokenType.Separator, ".")) { string newname = this.ParseName(); named = new DotExpression(named, newname, new IExpression[0]); continue; } if (this.TryParseToken(TokenType.Separator, "::")) { string newname = this.ParseName(); named = new DoubleColonExpression(named, newname); continue; } break; } IList <string> parameters = this.ParseParameterList(); IExpression body = this.ParseCommandList(); return(new DefExpression(named, parameters, body)); }
private ClassExpression ParseClassExpression() { string name = this.ParseName(); INamedExpression named = null; if (name == "self") { named = new SelfExpression(); } else { named = new NameExpression(name); } while (true) { if (this.TryParseToken(TokenType.Separator, "::")) { string newname = this.ParseName(); named = new DoubleColonExpression(named, newname); continue; } break; } this.ParseEndOfCommand(); IExpression body = this.ParseCommandList(); if (!Predicates.IsConstantName(named.Name)) { throw new SyntaxError("class/module name must be a CONSTANT"); } return(new ClassExpression(named, body)); }
private SelfExpression ParseSelfExpression() { var exp = new SelfExpression {Token = Next()}; Match(TokenType.This); return exp; }
public virtual object Walk(SelfExpression node) { if (Enter(node)) { // Insert code here } Exit(node); return null; }
public override bool Enter(SelfExpression node) { Print("SelfExpression"); level++; return true; }
public override void Exit(SelfExpression node) { level--; }
public virtual bool Enter(SelfExpression node) { return true; }
public virtual void Exit(SelfExpression node) { }
public virtual bool Enter(SelfExpression node) { return(true); }
public virtual void Accept(SelfExpression self) { }
public override object Walk(SelfExpression node) { return Context.CurrentFrame.Resolve("this"); }
public override bool Enter(SelfExpression node) { Print("SelfExpression"); level++; return(true); }
public override object Walk(SelfExpression node) { return(Context.CurrentFrame.Resolve("this")); }