public override void BeforeVisitCatchAll(AstNodeBase node) { base.BeforeVisitCatchAll(node); ScopeAstNodeBase scopeNode = node as ScopeAstNodeBase; if(scopeNode != null) _scopeStack.Push(scopeNode.GetExtension<ScopeExtension>().SymbolTable); }
public override void AfterVisitCatchAll(AstNodeBase node) { ScopeAstNodeBase scopeNode = node as ScopeAstNodeBase; if (scopeNode != null) _scopeStack.Pop(); base.AfterVisitCatchAll(node); }
public override void AfterVisitCatchAll(AstNodeBase node) { var loopStatement = node as LoopStatementBase; if (loopStatement != null) { DebugAssert.AreSameObject(loopStatement, _loopStack.Peek(), "top of loop stack is not current loop statement"); _loopStack.Pop(); } base.AfterVisitCatchAll(node); }
public virtual void BeforeVisitCatchAll(AstNodeBase node) { }
public virtual void AfterVisitCatchAll(AstNodeBase node) { }
public void Push(AstNodeBase node, Expression expr) { _stack.Push(new DebugExpression { Location = node.Location, Expression = expr }); }
public override void BeforeVisitCatchAll(AstNodeBase node) { base.BeforeVisitCatchAll(node); var loopStatement = node as LoopStatementBase; if(loopStatement != null) _loopStack.Push(loopStatement); }
/// <summary> /// Seems a little silly, sure, but I like the pattern of calling this /// better than the alternative... /// </summary> /// <param name="node"></param> public void Write(AstNodeBase node) { node.WriteString(this); }
public StatementBlock(HappySourceLocation startsAt, HappySourceLocation endsAt, AstNodeBase[] stmts) : base(startsAt, endsAt) { this.Statements = stmts; }