public override void EnterSubStatement([NotNull] SBP.SubStatementContext context) { if (m_enteredLoopStatement) { m_scopeStack.Peek().SetupForLoop(); m_enteredLoopStatement = false; } m_scopeStack.Push(new ProcedureParsingScope(m_scopeStack.Peek(), "sub", ProcedureParsingScope.ScopeType.SubStatement)); }
public override void ExitSubStatement([NotNull] SBP.SubStatementContext context) { var sub = m_scopeStack.Pop(); if (sub.StatementCount == 1) // Just a single statement (not block) { // Add the sub-statement scope (containing the single statement) m_scopeStack.Peek().AddSubStatement(sub); } else if (sub.StatementCount == 0) // Must be a block statement then. { // Add the block scope saved as a sub-expression in the sub-statement scope. m_scopeStack.Peek().AddSubStatement(sub.GetSubExpressions()[0]); } }