/**************************************************************************** ** ** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the QtScript module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage ** This file may be used under the terms of the GNU Lesser ** General Public License version 2.1 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. ** $QT_END_LICENSE$ ** ****************************************************************************/ // This file was generated by qlalr - DO NOT EDIT! #include #include #define Q_SCRIPT_UPDATE_POSITION(node, startloc, endloc) do { \ node->startLine = startloc.startLine; \ node->startColumn = startloc.startColumn; \ node->endLine = endloc.endLine; \ node->endColumn = endloc.endColumn; \ } while (0) #include "qscriptparser_p.h" // // This file is automatically generated from qscript.g. // Changes will be lost. // QT_BEGIN_NAMESPACE inline static bool automatic(QScriptEnginePrivate *driver, int token) { return token == QScriptGrammar::T_RBRACE || token == 0 || driver->lexer()->prevTerminator(); } QScriptParser::QScriptParser(): tos(0), stack_size(0), sym_stack(0), state_stack(0), location_stack(0) { } QScriptParser::~QScriptParser() { if (stack_size) { qFree(sym_stack); qFree(state_stack); qFree(location_stack); } } static inline QScriptParser::Location location(QScript::Lexer *lexer) { QScriptParser::Location loc; loc.startLine = lexer->startLineNo(); loc.startColumn = lexer->startColumnNo(); loc.endLine = lexer->endLineNo(); loc.endColumn = lexer->endColumnNo(); return loc; } bool QScriptParser::parse(QScriptEnginePrivate *driver) { const int INITIAL_STATE = 0; QScript::Lexer *lexer = driver->lexer(); int yytoken = -1; int saved_yytoken = -1; reallocateStack(); tos = 0; state_stack[++tos] = INITIAL_STATE; while (true) { const int state = state_stack [tos]; if (yytoken == -1 && - TERMINAL_COUNT != action_index [state]) { if (saved_yytoken == -1) { yytoken = lexer->lex(); location_stack [tos] = location(lexer); } else { yytoken = saved_yytoken; saved_yytoken = -1; } } int act = t_action (state, yytoken); if (act == ACCEPT_STATE) return true; else if (act > 0) { if (++tos == stack_size) reallocateStack(); sym_stack [tos].dval = lexer->dval (); state_stack [tos] = act; location_stack [tos] = location(lexer); yytoken = -1; } else if (act < 0) { int r = - act - 1; tos -= rhs [r]; act = state_stack [tos++]; switch (r) { case 0: { sym(1).Node = QScript::makeAstNode (driver->nodePool()); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); } break; case 1: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).sval); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); } break; case 2: { sym(1).Node = QScript::makeAstNode (driver->nodePool()); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); } break; case 3: { sym(1).Node = QScript::makeAstNode (driver->nodePool()); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); } break; case 4: { sym(1).Node = QScript::makeAstNode (driver->nodePool()); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); } break; case 5: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).dval); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); } break; case 6: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).sval); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); } break; case 7: { bool rx = lexer->scanRegExp(QScript::Lexer::NoPrefix); if (!rx) { error_message = lexer->errorMessage(); error_lineno = lexer->startLineNo(); error_column = lexer->startColumnNo(); return false; } sym(1).Node = QScript::makeAstNode (driver->nodePool(), lexer->pattern, lexer->flags); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); } break; case 8: { bool rx = lexer->scanRegExp(QScript::Lexer::EqualPrefix); if (!rx) { error_message = lexer->errorMessage(); error_lineno = lexer->startLineNo(); error_column = lexer->startColumnNo(); return false; } sym(1).Node = QScript::makeAstNode (driver->nodePool(), lexer->pattern, lexer->flags); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); } break; case 9: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(2).Elision); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 10: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(2).ElementList->finish ()); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 11: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(2).ElementList->finish (), sym(4).Elision); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5)); } break; case 12: { if (sym(2).Node) sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(2).PropertyNameAndValueList->finish ()); else sym(1).Node = QScript::makeAstNode (driver->nodePool()); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 13: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(2).PropertyNameAndValueList->finish ()); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4)); } break; case 14: { sym(1) = sym(2); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 15: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Elision, sym(2).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); } break; case 16: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).ElementList, sym(3).Elision, sym(4).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4)); } break; case 17: { sym(1).Node = QScript::makeAstNode (driver->nodePool()); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); } break; case 18: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Elision); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); } break; case 19: { sym(1).Node = 0; } break; case 20: { sym(1).Elision = sym(1).Elision->finish (); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); } break; case 21: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).PropertyName, sym(3).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 22: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).PropertyNameAndValueList, sym(3).PropertyName, sym(5).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5)); } break; case 23: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).sval); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); } break; case 24: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).sval); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); } break; case 25: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).dval); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); } break; case 26: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).sval); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); } break; case 27: case 28: case 29: case 30: case 31: case 32: case 33: case 34: case 35: case 36: case 37: case 38: case 39: case 40: case 41: case 42: case 43: case 44: case 45: case 46: case 47: case 48: case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57: { sym(1).sval = driver->intern(lexer->characterBuffer(), lexer->characterCount()); } break; case 62: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression, sym(3).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4)); } break; case 63: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression, sym(3).sval); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4)); } break; case 64: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(2).Expression, sym(3).ArgumentList); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 66: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(2).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); } break; case 67: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression, sym(2).ArgumentList); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); } break; case 68: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression, sym(2).ArgumentList); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); } break; case 69: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression, sym(3).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4)); } break; case 70: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression, sym(3).sval); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 71: { sym(1).Node = 0; } break; case 72: { sym(1).Node = sym(2).ArgumentList->finish (); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 73: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); } break; case 74: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).ArgumentList, sym(3).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 78: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); } break; case 79: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); } break; case 81: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(2).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); } break; case 82: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(2).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); } break; case 83: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(2).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); } break; case 84: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(2).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); } break; case 85: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(2).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); } break; case 86: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(2).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); } break; case 87: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(2).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); } break; case 88: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(2).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); } break; case 89: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(2).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); } break; case 91: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression, QSOperator::Mul, sym(3).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 92: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression, QSOperator::Div, sym(3).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 93: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression, QSOperator::Mod, sym(3).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 95: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression, QSOperator::Add, sym(3).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 96: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression, QSOperator::Sub, sym(3).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 98: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression, QSOperator::LShift, sym(3).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 99: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression, QSOperator::RShift, sym(3).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 100: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression, QSOperator::URShift, sym(3).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 102: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression, QSOperator::Lt, sym(3).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 103: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression, QSOperator::Gt, sym(3).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 104: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression, QSOperator::Le, sym(3).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 105: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression, QSOperator::Ge, sym(3).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 106: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression, QSOperator::InstanceOf, sym(3).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 107: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression, QSOperator::In, sym(3).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 109: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression, QSOperator::Lt, sym(3).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 110: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression, QSOperator::Gt, sym(3).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 111: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression, QSOperator::Le, sym(3).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 112: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression, QSOperator::Ge, sym(3).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 113: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression, QSOperator::InstanceOf, sym(3).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 115: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression, QSOperator::Equal, sym(3).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 116: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression, QSOperator::NotEqual, sym(3).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 117: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression, QSOperator::StrictEqual, sym(3).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 118: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression, QSOperator::StrictNotEqual, sym(3).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 120: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression, QSOperator::Equal, sym(3).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 121: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression, QSOperator::NotEqual, sym(3).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 122: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression, QSOperator::StrictEqual, sym(3).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 123: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression, QSOperator::StrictNotEqual, sym(3).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 125: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression, QSOperator::BitAnd, sym(3).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 127: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression, QSOperator::BitAnd, sym(3).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 129: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression, QSOperator::BitXor, sym(3).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 131: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression, QSOperator::BitXor, sym(3).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 133: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression, QSOperator::BitOr, sym(3).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 135: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression, QSOperator::BitOr, sym(3).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 137: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression, QSOperator::And, sym(3).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 139: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression, QSOperator::And, sym(3).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 141: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression, QSOperator::Or, sym(3).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 143: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression, QSOperator::Or, sym(3).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 145: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression, sym(3).Expression, sym(5).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 147: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression, sym(3).Expression, sym(5).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 149: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression, sym(2).ival, sym(3).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 151: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression, sym(2).ival, sym(3).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 152: { sym(1).ival = QSOperator::Assign; } break; case 153: { sym(1).ival = QSOperator::InplaceMul; } break; case 154: { sym(1).ival = QSOperator::InplaceDiv; } break; case 155: { sym(1).ival = QSOperator::InplaceMod; } break; case 156: { sym(1).ival = QSOperator::InplaceAdd; } break; case 157: { sym(1).ival = QSOperator::InplaceSub; } break; case 158: { sym(1).ival = QSOperator::InplaceLeftShift; } break; case 159: { sym(1).ival = QSOperator::InplaceRightShift; } break; case 160: { sym(1).ival = QSOperator::InplaceURightShift; } break; case 161: { sym(1).ival = QSOperator::InplaceAnd; } break; case 162: { sym(1).ival = QSOperator::InplaceXor; } break; case 163: { sym(1).ival = QSOperator::InplaceOr; } break; case 165: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression, sym(3).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 166: { sym(1).Node = 0; } break; case 169: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression, sym(3).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 170: { sym(1).Node = 0; } break; case 187: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(2).StatementList); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 188: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Statement); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); } break; case 189: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).StatementList, sym(2).Statement); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); } break; case 190: { sym(1).Node = 0; } break; case 191: { sym(1).Node = sym(1).StatementList->finish (); } break; case 193: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(2).VariableDeclarationList->finish (/*readOnly=*/sym(1).ival == T_CONST)); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 194: { sym(1).ival = T_CONST; } break; case 195: { sym(1).ival = T_VAR; } break; case 196: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).VariableDeclaration); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); } break; case 197: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).VariableDeclarationList, sym(3).VariableDeclaration); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 198: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).VariableDeclaration); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); } break; case 199: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).VariableDeclarationList, sym(3).VariableDeclaration); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 200: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).sval, sym(2).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); } break; case 201: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).sval, sym(2).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); } break; case 202: { sym(1) = sym(2); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); } break; case 203: { sym(1).Node = 0; } break; case 205: { sym(1) = sym(2); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); } break; case 206: { sym(1).Node = 0; } break; case 208: { sym(1).Node = QScript::makeAstNode (driver->nodePool()); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); } break; case 210: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); } break; case 211: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(3).Expression, sym(5).Statement, sym(7).Statement); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(7)); } break; case 212: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(3).Expression, sym(5).Statement); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5)); } break; case 214: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(2).Statement, sym(5).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(7)); } break; case 215: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(3).Expression, sym(5).Statement); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5)); } break; case 216: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(3).Expression, sym(5).Expression, sym(7).Expression, sym(9).Statement); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(9)); } break; case 217: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(4).VariableDeclarationList->finish (/*readOnly=*/false), sym(6).Expression, sym(8).Expression, sym(10).Statement); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(10)); } break; case 218: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(3).Expression, sym(5).Expression, sym(7).Statement); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(7)); } break; case 219: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(4).VariableDeclaration, sym(6).Expression, sym(8).Statement); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(8)); } break; case 221: { sym(1).Node = QScript::makeAstNode (driver->nodePool()); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); } break; case 223: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(2).sval); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 225: { sym(1).Node = QScript::makeAstNode (driver->nodePool()); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); } break; case 227: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(2).sval); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 229: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(2).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 230: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(3).Expression, sym(5).Statement); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5)); } break; case 231: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(3).Expression, sym(5).CaseBlock); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5)); } break; case 232: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(2).CaseClauses); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 233: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(2).CaseClauses, sym(3).DefaultClause, sym(4).CaseClauses); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5)); } break; case 234: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).CaseClause); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); } break; case 235: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).CaseClauses, sym(2).CaseClause); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); } break; case 236: { sym(1).Node = 0; } break; case 237: { sym(1).Node = sym(1).CaseClauses->finish (); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); } break; case 238: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(2).Expression, sym(4).StatementList); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4)); } break; case 239: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(3).StatementList); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 240: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).sval, sym(3).Statement); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 242: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(2).Expression); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 243: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(2).Statement, sym(3).Catch); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 244: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(2).Statement, sym(3).Finally); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 245: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(2).Statement, sym(3).Catch, sym(4).Finally); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4)); } break; case 246: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(3).sval, sym(5).Statement); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5)); } break; case 247: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(2).Statement); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); } break; case 249: { sym(1).Node = QScript::makeAstNode (driver->nodePool()); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); } break; case 250: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(2).sval, sym(4).FormalParameterList, sym(7).FunctionBody); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(8)); } break; case 251: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(2).sval, sym(4).FormalParameterList, sym(7).FunctionBody); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(8)); } break; case 252: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).sval); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); } break; case 253: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).FormalParameterList, sym(3).sval); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); } break; case 254: { sym(1).Node = 0; } break; case 255: { sym(1).Node = sym(1).FormalParameterList->finish (); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); } break; case 256: { sym(1).Node = 0; } break; case 258: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).SourceElements->finish ()); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); } break; case 259: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).SourceElements->finish ()); driver->changeAbstractSyntaxTree(sym(1).Node); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); } break; case 260: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).SourceElement); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); } break; case 261: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).SourceElements, sym(2).SourceElement); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); } break; case 262: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).Statement); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); } break; case 263: { sym(1).Node = QScript::makeAstNode (driver->nodePool(), sym(1).FunctionDeclaration); Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); } break; case 264: { sym(1).sval = 0; } break; case 266: { sym(1).Node = 0; } break; } // switch state_stack [tos] = nt_action (act, lhs [r] - TERMINAL_COUNT); if (rhs[r] > 1) { location_stack[tos - 1].endLine = location_stack[tos + rhs[r] - 2].endLine; location_stack[tos - 1].endColumn = location_stack[tos + rhs[r] - 2].endColumn; location_stack[tos] = location_stack[tos + rhs[r] - 1]; } } else { if (saved_yytoken == -1 && automatic (driver, yytoken) && t_action (state, T_AUTOMATIC_SEMICOLON) > 0) { saved_yytoken = yytoken; yytoken = T_SEMICOLON; continue; } else if ((state == INITIAL_STATE) && (yytoken == 0)) { // accept empty input yytoken = T_SEMICOLON; continue; } int ers = state; int shifts = 0; int reduces = 0; int expected_tokens [3]; for (int tk = 0; tk < TERMINAL_COUNT; ++tk) { int k = t_action (ers, tk); if (! k) continue; else if (k < 0) ++reduces; else if (spell [tk]) { if (shifts < 3) expected_tokens [shifts] = tk; ++shifts; } } error_message.clear (); if (shifts && shifts < 3) { bool first = true; for (int s = 0; s < shifts; ++s) { if (first) error_message += QLatin1String ("Expected "); else error_message += QLatin1String (", "); first = false; error_message += QLatin1String("`"); error_message += QLatin1String (spell [expected_tokens [s]]); error_message += QLatin1String("'"); } } if (error_message.isEmpty()) error_message = lexer->errorMessage(); error_lineno = lexer->startLineNo(); error_column = lexer->startColumnNo(); return false; } } return false; } QT_END_NAMESPACE