blob: 15aaef6629363ade370b29ed73e6838bad9d01d9 [file] [log] [blame]
/****************************************************************************
**
** Copyright (C) 2011 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 <QtCore/QtDebug>
#include <string.h>
#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<QScript::AST::ThisExpression> (driver->nodePool());
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
} break;
case 1: {
sym(1).Node = QScript::makeAstNode<QScript::AST::IdentifierExpression> (driver->nodePool(), sym(1).sval);
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
} break;
case 2: {
sym(1).Node = QScript::makeAstNode<QScript::AST::NullExpression> (driver->nodePool());
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
} break;
case 3: {
sym(1).Node = QScript::makeAstNode<QScript::AST::TrueLiteral> (driver->nodePool());
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
} break;
case 4: {
sym(1).Node = QScript::makeAstNode<QScript::AST::FalseLiteral> (driver->nodePool());
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
} break;
case 5: {
sym(1).Node = QScript::makeAstNode<QScript::AST::NumericLiteral> (driver->nodePool(), sym(1).dval);
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
} break;
case 6: {
sym(1).Node = QScript::makeAstNode<QScript::AST::StringLiteral> (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<QScript::AST::RegExpLiteral> (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<QScript::AST::RegExpLiteral> (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<QScript::AST::ArrayLiteral> (driver->nodePool(), sym(2).Elision);
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
} break;
case 10: {
sym(1).Node = QScript::makeAstNode<QScript::AST::ArrayLiteral> (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<QScript::AST::ArrayLiteral> (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<QScript::AST::ObjectLiteral> (driver->nodePool(), sym(2).PropertyNameAndValueList->finish ());
else
sym(1).Node = QScript::makeAstNode<QScript::AST::ObjectLiteral> (driver->nodePool());
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
} break;
case 13: {
sym(1).Node = QScript::makeAstNode<QScript::AST::ObjectLiteral> (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<QScript::AST::ElementList> (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<QScript::AST::ElementList> (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<QScript::AST::Elision> (driver->nodePool());
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
} break;
case 18: {
sym(1).Node = QScript::makeAstNode<QScript::AST::Elision> (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<QScript::AST::PropertyNameAndValueList> (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<QScript::AST::PropertyNameAndValueList> (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<QScript::AST::IdentifierPropertyName> (driver->nodePool(), sym(1).sval);
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
} break;
case 24: {
sym(1).Node = QScript::makeAstNode<QScript::AST::StringLiteralPropertyName> (driver->nodePool(), sym(1).sval);
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
} break;
case 25: {
sym(1).Node = QScript::makeAstNode<QScript::AST::NumericLiteralPropertyName> (driver->nodePool(), sym(1).dval);
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
} break;
case 26: {
sym(1).Node = QScript::makeAstNode<QScript::AST::IdentifierPropertyName> (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<QScript::AST::ArrayMemberExpression> (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<QScript::AST::FieldMemberExpression> (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<QScript::AST::NewMemberExpression> (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<QScript::AST::NewExpression> (driver->nodePool(), sym(2).Expression);
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
} break;
case 67: {
sym(1).Node = QScript::makeAstNode<QScript::AST::CallExpression> (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<QScript::AST::CallExpression> (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<QScript::AST::ArrayMemberExpression> (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<QScript::AST::FieldMemberExpression> (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<QScript::AST::ArgumentList> (driver->nodePool(), sym(1).Expression);
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
} break;
case 74: {
sym(1).Node = QScript::makeAstNode<QScript::AST::ArgumentList> (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<QScript::AST::PostIncrementExpression> (driver->nodePool(), sym(1).Expression);
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
} break;
case 79: {
sym(1).Node = QScript::makeAstNode<QScript::AST::PostDecrementExpression> (driver->nodePool(), sym(1).Expression);
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
} break;
case 81: {
sym(1).Node = QScript::makeAstNode<QScript::AST::DeleteExpression> (driver->nodePool(), sym(2).Expression);
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
} break;
case 82: {
sym(1).Node = QScript::makeAstNode<QScript::AST::VoidExpression> (driver->nodePool(), sym(2).Expression);
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
} break;
case 83: {
sym(1).Node = QScript::makeAstNode<QScript::AST::TypeOfExpression> (driver->nodePool(), sym(2).Expression);
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
} break;
case 84: {
sym(1).Node = QScript::makeAstNode<QScript::AST::PreIncrementExpression> (driver->nodePool(), sym(2).Expression);
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
} break;
case 85: {
sym(1).Node = QScript::makeAstNode<QScript::AST::PreDecrementExpression> (driver->nodePool(), sym(2).Expression);
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
} break;
case 86: {
sym(1).Node = QScript::makeAstNode<QScript::AST::UnaryPlusExpression> (driver->nodePool(), sym(2).Expression);
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
} break;
case 87: {
sym(1).Node = QScript::makeAstNode<QScript::AST::UnaryMinusExpression> (driver->nodePool(), sym(2).Expression);
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
} break;
case 88: {
sym(1).Node = QScript::makeAstNode<QScript::AST::TildeExpression> (driver->nodePool(), sym(2).Expression);
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
} break;
case 89: {
sym(1).Node = QScript::makeAstNode<QScript::AST::NotExpression> (driver->nodePool(), sym(2).Expression);
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
} break;
case 91: {
sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (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<QScript::AST::BinaryExpression> (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<QScript::AST::BinaryExpression> (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<QScript::AST::BinaryExpression> (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<QScript::AST::BinaryExpression> (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<QScript::AST::BinaryExpression> (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<QScript::AST::BinaryExpression> (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<QScript::AST::BinaryExpression> (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<QScript::AST::BinaryExpression> (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<QScript::AST::BinaryExpression> (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<QScript::AST::BinaryExpression> (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<QScript::AST::BinaryExpression> (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<QScript::AST::BinaryExpression> (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<QScript::AST::BinaryExpression> (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<QScript::AST::BinaryExpression> (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<QScript::AST::BinaryExpression> (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<QScript::AST::BinaryExpression> (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<QScript::AST::BinaryExpression> (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<QScript::AST::BinaryExpression> (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<QScript::AST::BinaryExpression> (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<QScript::AST::BinaryExpression> (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<QScript::AST::BinaryExpression> (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<QScript::AST::BinaryExpression> (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<QScript::AST::BinaryExpression> (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<QScript::AST::BinaryExpression> (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<QScript::AST::BinaryExpression> (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<QScript::AST::BinaryExpression> (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<QScript::AST::BinaryExpression> (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<QScript::AST::BinaryExpression> (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<QScript::AST::BinaryExpression> (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<QScript::AST::BinaryExpression> (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<QScript::AST::BinaryExpression> (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<QScript::AST::BinaryExpression> (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<QScript::AST::BinaryExpression> (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<QScript::AST::BinaryExpression> (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<QScript::AST::BinaryExpression> (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<QScript::AST::BinaryExpression> (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<QScript::AST::ConditionalExpression> (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<QScript::AST::ConditionalExpression> (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<QScript::AST::BinaryExpression> (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<QScript::AST::BinaryExpression> (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<QScript::AST::Expression> (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<QScript::AST::Expression> (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<QScript::AST::Block> (driver->nodePool(), sym(2).StatementList);
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
} break;
case 188: {
sym(1).Node = QScript::makeAstNode<QScript::AST::StatementList> (driver->nodePool(), sym(1).Statement);
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
} break;
case 189: {
sym(1).Node = QScript::makeAstNode<QScript::AST::StatementList> (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<QScript::AST::VariableStatement> (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<QScript::AST::VariableDeclarationList> (driver->nodePool(), sym(1).VariableDeclaration);
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
} break;
case 197: {
sym(1).Node = QScript::makeAstNode<QScript::AST::VariableDeclarationList> (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<QScript::AST::VariableDeclarationList> (driver->nodePool(), sym(1).VariableDeclaration);
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
} break;
case 199: {
sym(1).Node = QScript::makeAstNode<QScript::AST::VariableDeclarationList> (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<QScript::AST::VariableDeclaration> (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<QScript::AST::VariableDeclaration> (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<QScript::AST::EmptyStatement> (driver->nodePool());
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
} break;
case 210: {
sym(1).Node = QScript::makeAstNode<QScript::AST::ExpressionStatement> (driver->nodePool(), sym(1).Expression);
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
} break;
case 211: {
sym(1).Node = QScript::makeAstNode<QScript::AST::IfStatement> (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<QScript::AST::IfStatement> (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<QScript::AST::DoWhileStatement> (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<QScript::AST::WhileStatement> (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<QScript::AST::ForStatement> (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<QScript::AST::LocalForStatement> (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<QScript::AST::ForEachStatement> (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<QScript::AST::LocalForEachStatement> (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<QScript::AST::ContinueStatement> (driver->nodePool());
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
} break;
case 223: {
sym(1).Node = QScript::makeAstNode<QScript::AST::ContinueStatement> (driver->nodePool(), sym(2).sval);
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
} break;
case 225: {
sym(1).Node = QScript::makeAstNode<QScript::AST::BreakStatement> (driver->nodePool());
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
} break;
case 227: {
sym(1).Node = QScript::makeAstNode<QScript::AST::BreakStatement> (driver->nodePool(), sym(2).sval);
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
} break;
case 229: {
sym(1).Node = QScript::makeAstNode<QScript::AST::ReturnStatement> (driver->nodePool(), sym(2).Expression);
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
} break;
case 230: {
sym(1).Node = QScript::makeAstNode<QScript::AST::WithStatement> (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<QScript::AST::SwitchStatement> (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<QScript::AST::CaseBlock> (driver->nodePool(), sym(2).CaseClauses);
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
} break;
case 233: {
sym(1).Node = QScript::makeAstNode<QScript::AST::CaseBlock> (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<QScript::AST::CaseClauses> (driver->nodePool(), sym(1).CaseClause);
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
} break;
case 235: {
sym(1).Node = QScript::makeAstNode<QScript::AST::CaseClauses> (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<QScript::AST::CaseClause> (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<QScript::AST::DefaultClause> (driver->nodePool(), sym(3).StatementList);
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
} break;
case 240: {
sym(1).Node = QScript::makeAstNode<QScript::AST::LabelledStatement> (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<QScript::AST::ThrowStatement> (driver->nodePool(), sym(2).Expression);
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
} break;
case 243: {
sym(1).Node = QScript::makeAstNode<QScript::AST::TryStatement> (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<QScript::AST::TryStatement> (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<QScript::AST::TryStatement> (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<QScript::AST::Catch> (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<QScript::AST::Finally> (driver->nodePool(), sym(2).Statement);
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
} break;
case 249: {
sym(1).Node = QScript::makeAstNode<QScript::AST::DebuggerStatement> (driver->nodePool());
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
} break;
case 250: {
sym(1).Node = QScript::makeAstNode<QScript::AST::FunctionDeclaration> (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<QScript::AST::FunctionExpression> (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<QScript::AST::FormalParameterList> (driver->nodePool(), sym(1).sval);
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
} break;
case 253: {
sym(1).Node = QScript::makeAstNode<QScript::AST::FormalParameterList> (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<QScript::AST::FunctionBody> (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<QScript::AST::Program> (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<QScript::AST::SourceElements> (driver->nodePool(), sym(1).SourceElement);
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
} break;
case 261: {
sym(1).Node = QScript::makeAstNode<QScript::AST::SourceElements> (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<QScript::AST::StatementSourceElement> (driver->nodePool(), sym(1).Statement);
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
} break;
case 263: {
sym(1).Node = QScript::makeAstNode<QScript::AST::FunctionSourceElement> (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