void Parser::onTry(Token *out, Token *tryStmt, Token *className, Token *var, Token *catchStmt, Token *catches) { StatementPtr stmtList; if (catches->stmt) { stmtList = catches->stmt; } else { stmtList = NEW_STMT0(StatementList); } stmtList->insertElement(NEW_STMT(CatchStatement, className->text(), var->text(), catchStmt->stmt)); out->stmt = NEW_STMT(TryStatement, tryStmt->stmt, dynamic_pointer_cast<StatementList>(stmtList)); }
void Parser::onIf(Token *out, Token *cond, Token *stmt, Token *elseifs, Token *elseStmt) { StatementPtr stmtList; if (!elseifs->stmt) { stmtList = NEW_STMT0(StatementList); } else { stmtList = elseifs->stmt; } if (stmt->stmt && stmt->stmt->is(Statement::KindOfStatementList)) { stmt->stmt = NEW_STMT(BlockStatement, dynamic_pointer_cast<StatementList>(stmt->stmt)); } stmtList->insertElement(NEW_STMT(IfBranchStatement, cond->exp, stmt->stmt)); if (elseStmt->stmt) { if (elseStmt->stmt->is(Statement::KindOfStatementList)) { elseStmt->stmt = NEW_STMT (BlockStatement, dynamic_pointer_cast<StatementList>(elseStmt->stmt)); } stmtList->addElement(NEW_STMT(IfBranchStatement, ExpressionPtr(), elseStmt->stmt)); } out->stmt = NEW_STMT(IfStatement, dynamic_pointer_cast<StatementList>(stmtList)); }