void TreeWalker::parseStatement(StatementAST *node) { switch (node->nodeType()) { case NodeType_ExpressionStatement: parseExpressionStatement(static_cast<ExpressionStatementAST*>(node)); break; case NodeType_IfStatement: parseIfStatement(static_cast<IfStatementAST*>(node)); break; case NodeType_WhileStatement: parseWhileStatement(static_cast<WhileStatementAST*>(node)); return; case NodeType_DoStatement: parseDoStatement(static_cast<DoStatementAST*>(node)); break; case NodeType_ForStatement: parseForStatement(static_cast<ForStatementAST*>(node)); break; case NodeType_SwitchStatement: parseSwitchStatement(static_cast<SwitchStatementAST*>(node)); break; case NodeType_LabeledStatement: parseLabeledStatement(static_cast<LabeledStatementAST*>(node)); break; case NodeType_StatementList: parseStatementList(static_cast<StatementListAST*>(node)); break; case NodeType_DeclarationStatement: parseDeclarationStatement(static_cast<DeclarationStatementAST*>(node)); break; case NodeType_ReturnStatement: parseReturnStatement(static_cast<ReturnStatementAST*>(node)); break; default: break; } }
Symbol parseStatement(CharacterSource* source) { Symbol s = parseExpressionStatement(source); if (s.valid()) return s; s = parseFunctionDefinitionStatement(source); if (s.valid()) return s; s = parseVariableDefinitionStatement(source); if (s.valid()) return s; s = parseAssignmentStatement(source); if (s.valid()) return s; s = parseCompoundStatement(source); if (s.valid()) return s; s = parseTypeConstructorDefinitionStatement(source); if (s.valid()) return s; s = parseNothingStatement(source); if (s.valid()) return s; s = parseIncrementDecrementStatement(source); if (s.valid()) return s; s = parseConditionalStatement(source); if (s.valid()) return s; s = parseSwitchStatement(source); if (s.valid()) return s; s = parseReturnStatement(source); if (s.valid()) return s; s = parseIncludeStatement(source); if (s.valid()) return s; s = parseBreakOrContinueStatement(source); if (s.valid()) return s; s = parseForeverStatement(source); if (s.valid()) return s; s = parseWhileStatement(source); if (s.valid()) return s; s = parseForStatement(source); if (s.valid()) return s; s = parseEmitStatement(source); if (s.valid()) return s; s = parseLabelStatement(source); if (s.valid()) return s; s = parseGotoStatement(source); if (s.valid()) return s; return Symbol(); }