1
// This file was generated by qlalr - DO NOT EDIT!
3
/****************************************************************************
5
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
6
** Contact: Nokia Corporation (qt-info@nokia.com)
8
** This file is part of the QtScript module of the Qt Toolkit.
10
** $QT_BEGIN_LICENSE:LGPL$
12
** Licensees holding valid Qt Commercial licenses may use this file in
13
** accordance with the Qt Commercial License Agreement provided with the
14
** Software or, alternatively, in accordance with the terms contained in
15
** a written agreement between you and Nokia.
17
** GNU Lesser General Public License Usage
18
** Alternatively, this file may be used under the terms of the GNU Lesser
19
** General Public License version 2.1 as published by the Free Software
20
** Foundation and appearing in the file LICENSE.LGPL included in the
21
** packaging of this file. Please review the following information to
22
** ensure the GNU Lesser General Public License version 2.1 requirements
23
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
25
** In addition, as a special exception, Nokia gives you certain
26
** additional rights. These rights are described in the Nokia Qt LGPL
27
** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
30
** GNU General Public License Usage
31
** Alternatively, this file may be used under the terms of the GNU
32
** General Public License version 3.0 as published by the Free Software
33
** Foundation and appearing in the file LICENSE.GPL included in the
34
** packaging of this file. Please review the following information to
35
** ensure the GNU General Public License version 3.0 requirements will be
36
** met: http://www.gnu.org/copyleft/gpl.html.
38
** If you are unsure which license is appropriate for your use, please
39
** contact the sales department at http://www.qtsoftware.com/contact.
42
****************************************************************************/
44
#include <QtCore/QtDebug>
50
#include "qscriptengine.h"
51
#include "qscriptengine_p.h"
52
#include "qscriptvalueimpl_p.h"
53
#include "qscriptcontext_p.h"
54
#include "qscriptmember_p.h"
55
#include "qscriptobject_p.h"
56
#include "qscriptlexer_p.h"
57
#include "qscriptast_p.h"
58
#include "qscriptnodepool_p.h"
60
#define Q_SCRIPT_UPDATE_POSITION(node, startloc, endloc) do { \
61
node->startLine = startloc.startLine; \
62
node->startColumn = startloc.startColumn; \
63
node->endLine = endloc.endLine; \
64
node->endColumn = endloc.endColumn; \
69
#include "qscriptparser_p.h"
72
// This file is automatically generated from qscript.g.
73
// Changes will be lost.
78
inline static bool automatic(QScriptEnginePrivate *driver, int token)
80
return token == QScriptGrammar::T_RBRACE
82
|| driver->lexer()->prevTerminator();
86
QScriptParser::QScriptParser():
97
QScriptParser::~QScriptParser()
102
qFree(location_stack);
106
static inline QScriptParser::Location location(QScript::Lexer *lexer)
108
QScriptParser::Location loc;
109
loc.startLine = lexer->startLineNo();
110
loc.startColumn = lexer->startColumnNo();
111
loc.endLine = lexer->endLineNo();
112
loc.endColumn = lexer->endColumnNo();
116
bool QScriptParser::parse(QScriptEnginePrivate *driver)
118
const int INITIAL_STATE = 0;
119
QScript::Lexer *lexer = driver->lexer();
122
int saved_yytoken = -1;
127
state_stack[++tos] = INITIAL_STATE;
131
const int state = state_stack [tos];
132
if (yytoken == -1 && - TERMINAL_COUNT != action_index [state])
134
if (saved_yytoken == -1)
136
yytoken = lexer->lex();
137
location_stack [tos] = location(lexer);
141
yytoken = saved_yytoken;
146
int act = t_action (state, yytoken);
148
if (act == ACCEPT_STATE)
153
if (++tos == stack_size)
156
sym_stack [tos].dval = lexer->dval ();
157
state_stack [tos] = act;
158
location_stack [tos] = location(lexer);
167
act = state_stack [tos++];
172
sym(1).Node = QScript::makeAstNode<QScript::AST::ThisExpression> (driver->nodePool());
173
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
177
sym(1).Node = QScript::makeAstNode<QScript::AST::IdentifierExpression> (driver->nodePool(), sym(1).sval);
178
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
182
sym(1).Node = QScript::makeAstNode<QScript::AST::NullExpression> (driver->nodePool());
183
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
187
sym(1).Node = QScript::makeAstNode<QScript::AST::TrueLiteral> (driver->nodePool());
188
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
192
sym(1).Node = QScript::makeAstNode<QScript::AST::FalseLiteral> (driver->nodePool());
193
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
197
sym(1).Node = QScript::makeAstNode<QScript::AST::NumericLiteral> (driver->nodePool(), sym(1).dval);
198
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
202
sym(1).Node = QScript::makeAstNode<QScript::AST::StringLiteral> (driver->nodePool(), sym(1).sval);
203
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
207
bool rx = lexer->scanRegExp(QScript::Lexer::NoPrefix);
209
error_message = lexer->errorMessage();
210
error_lineno = lexer->startLineNo();
211
error_column = lexer->startColumnNo();
214
sym(1).Node = QScript::makeAstNode<QScript::AST::RegExpLiteral> (driver->nodePool(), lexer->pattern, lexer->flags);
215
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
219
bool rx = lexer->scanRegExp(QScript::Lexer::EqualPrefix);
221
error_message = lexer->errorMessage();
222
error_lineno = lexer->startLineNo();
223
error_column = lexer->startColumnNo();
226
sym(1).Node = QScript::makeAstNode<QScript::AST::RegExpLiteral> (driver->nodePool(), lexer->pattern, lexer->flags);
227
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
231
sym(1).Node = QScript::makeAstNode<QScript::AST::ArrayLiteral> (driver->nodePool(), sym(2).Elision);
232
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
236
sym(1).Node = QScript::makeAstNode<QScript::AST::ArrayLiteral> (driver->nodePool(), sym(2).ElementList->finish ());
237
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
241
sym(1).Node = QScript::makeAstNode<QScript::AST::ArrayLiteral> (driver->nodePool(), sym(2).ElementList->finish (), sym(4).Elision);
242
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5));
247
sym(1).Node = QScript::makeAstNode<QScript::AST::ObjectLiteral> (driver->nodePool(), sym(2).PropertyNameAndValueList->finish ());
249
sym(1).Node = QScript::makeAstNode<QScript::AST::ObjectLiteral> (driver->nodePool());
250
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
254
sym(1).Node = QScript::makeAstNode<QScript::AST::ObjectLiteral> (driver->nodePool(), sym(2).PropertyNameAndValueList->finish ());
255
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4));
260
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
264
sym(1).Node = QScript::makeAstNode<QScript::AST::ElementList> (driver->nodePool(), sym(1).Elision, sym(2).Expression);
265
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
269
sym(1).Node = QScript::makeAstNode<QScript::AST::ElementList> (driver->nodePool(), sym(1).ElementList, sym(3).Elision, sym(4).Expression);
270
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4));
274
sym(1).Node = QScript::makeAstNode<QScript::AST::Elision> (driver->nodePool());
275
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
279
sym(1).Node = QScript::makeAstNode<QScript::AST::Elision> (driver->nodePool(), sym(1).Elision);
280
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
288
sym(1).Elision = sym(1).Elision->finish ();
289
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
293
sym(1).Node = QScript::makeAstNode<QScript::AST::PropertyNameAndValueList> (driver->nodePool(), sym(1).PropertyName, sym(3).Expression);
294
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
298
sym(1).Node = QScript::makeAstNode<QScript::AST::PropertyNameAndValueList> (driver->nodePool(), sym(1).PropertyNameAndValueList, sym(3).PropertyName, sym(5).Expression);
299
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5));
303
sym(1).Node = QScript::makeAstNode<QScript::AST::IdentifierPropertyName> (driver->nodePool(), sym(1).sval);
304
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
308
sym(1).Node = QScript::makeAstNode<QScript::AST::StringLiteralPropertyName> (driver->nodePool(), sym(1).sval);
309
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
313
sym(1).Node = QScript::makeAstNode<QScript::AST::NumericLiteralPropertyName> (driver->nodePool(), sym(1).dval);
314
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
318
sym(1).Node = QScript::makeAstNode<QScript::AST::IdentifierPropertyName> (driver->nodePool(), sym(1).sval);
319
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
384
sym(1).sval = driver->intern(lexer->characterBuffer(), lexer->characterCount());
388
sym(1).Node = QScript::makeAstNode<QScript::AST::ArrayMemberExpression> (driver->nodePool(), sym(1).Expression, sym(3).Expression);
389
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4));
393
sym(1).Node = QScript::makeAstNode<QScript::AST::FieldMemberExpression> (driver->nodePool(), sym(1).Expression, sym(3).sval);
394
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4));
398
sym(1).Node = QScript::makeAstNode<QScript::AST::NewMemberExpression> (driver->nodePool(), sym(2).Expression, sym(3).ArgumentList);
399
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
403
sym(1).Node = QScript::makeAstNode<QScript::AST::NewExpression> (driver->nodePool(), sym(2).Expression);
404
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
408
sym(1).Node = QScript::makeAstNode<QScript::AST::CallExpression> (driver->nodePool(), sym(1).Expression, sym(2).ArgumentList);
409
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
413
sym(1).Node = QScript::makeAstNode<QScript::AST::CallExpression> (driver->nodePool(), sym(1).Expression, sym(2).ArgumentList);
414
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
418
sym(1).Node = QScript::makeAstNode<QScript::AST::ArrayMemberExpression> (driver->nodePool(), sym(1).Expression, sym(3).Expression);
419
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4));
423
sym(1).Node = QScript::makeAstNode<QScript::AST::FieldMemberExpression> (driver->nodePool(), sym(1).Expression, sym(3).sval);
424
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
432
sym(1).Node = sym(2).ArgumentList->finish ();
433
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
437
sym(1).Node = QScript::makeAstNode<QScript::AST::ArgumentList> (driver->nodePool(), sym(1).Expression);
438
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
442
sym(1).Node = QScript::makeAstNode<QScript::AST::ArgumentList> (driver->nodePool(), sym(1).ArgumentList, sym(3).Expression);
443
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
447
sym(1).Node = QScript::makeAstNode<QScript::AST::PostIncrementExpression> (driver->nodePool(), sym(1).Expression);
448
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
452
sym(1).Node = QScript::makeAstNode<QScript::AST::PostDecrementExpression> (driver->nodePool(), sym(1).Expression);
453
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
457
sym(1).Node = QScript::makeAstNode<QScript::AST::DeleteExpression> (driver->nodePool(), sym(2).Expression);
458
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
462
sym(1).Node = QScript::makeAstNode<QScript::AST::VoidExpression> (driver->nodePool(), sym(2).Expression);
463
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
467
sym(1).Node = QScript::makeAstNode<QScript::AST::TypeOfExpression> (driver->nodePool(), sym(2).Expression);
468
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
472
sym(1).Node = QScript::makeAstNode<QScript::AST::PreIncrementExpression> (driver->nodePool(), sym(2).Expression);
473
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
477
sym(1).Node = QScript::makeAstNode<QScript::AST::PreDecrementExpression> (driver->nodePool(), sym(2).Expression);
478
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
482
sym(1).Node = QScript::makeAstNode<QScript::AST::UnaryPlusExpression> (driver->nodePool(), sym(2).Expression);
483
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
487
sym(1).Node = QScript::makeAstNode<QScript::AST::UnaryMinusExpression> (driver->nodePool(), sym(2).Expression);
488
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
492
sym(1).Node = QScript::makeAstNode<QScript::AST::TildeExpression> (driver->nodePool(), sym(2).Expression);
493
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
497
sym(1).Node = QScript::makeAstNode<QScript::AST::NotExpression> (driver->nodePool(), sym(2).Expression);
498
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
502
sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Mul, sym(3).Expression);
503
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
507
sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Div, sym(3).Expression);
508
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
512
sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Mod, sym(3).Expression);
513
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
517
sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Add, sym(3).Expression);
518
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
522
sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Sub, sym(3).Expression);
523
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
527
sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::LShift, sym(3).Expression);
528
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
532
sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::RShift, sym(3).Expression);
533
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
537
sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::URShift, sym(3).Expression);
538
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
542
sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Lt, sym(3).Expression);
543
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
547
sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Gt, sym(3).Expression);
548
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
552
sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Le, sym(3).Expression);
553
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
557
sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Ge, sym(3).Expression);
558
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
562
sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::InstanceOf, sym(3).Expression);
563
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
567
sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::In, sym(3).Expression);
568
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
572
sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Lt, sym(3).Expression);
573
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
577
sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Gt, sym(3).Expression);
578
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
582
sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Le, sym(3).Expression);
583
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
587
sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Ge, sym(3).Expression);
588
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
592
sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::InstanceOf, sym(3).Expression);
593
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
597
sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Equal, sym(3).Expression);
598
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
602
sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::NotEqual, sym(3).Expression);
603
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
607
sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::StrictEqual, sym(3).Expression);
608
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
612
sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::StrictNotEqual, sym(3).Expression);
613
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
617
sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Equal, sym(3).Expression);
618
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
622
sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::NotEqual, sym(3).Expression);
623
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
627
sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::StrictEqual, sym(3).Expression);
628
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
632
sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::StrictNotEqual, sym(3).Expression);
633
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
637
sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::BitAnd, sym(3).Expression);
638
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
642
sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::BitAnd, sym(3).Expression);
643
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
647
sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::BitXor, sym(3).Expression);
648
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
652
sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::BitXor, sym(3).Expression);
653
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
657
sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::BitOr, sym(3).Expression);
658
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
662
sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::BitOr, sym(3).Expression);
663
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
667
sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::And, sym(3).Expression);
668
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
672
sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::And, sym(3).Expression);
673
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
677
sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Or, sym(3).Expression);
678
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
682
sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Or, sym(3).Expression);
683
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
687
sym(1).Node = QScript::makeAstNode<QScript::AST::ConditionalExpression> (driver->nodePool(), sym(1).Expression, sym(3).Expression, sym(5).Expression);
688
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
692
sym(1).Node = QScript::makeAstNode<QScript::AST::ConditionalExpression> (driver->nodePool(), sym(1).Expression, sym(3).Expression, sym(5).Expression);
693
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
697
sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, sym(2).ival, sym(3).Expression);
698
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
702
sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, sym(2).ival, sym(3).Expression);
703
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
707
sym(1).ival = QSOperator::Assign;
711
sym(1).ival = QSOperator::InplaceMul;
715
sym(1).ival = QSOperator::InplaceDiv;
719
sym(1).ival = QSOperator::InplaceMod;
723
sym(1).ival = QSOperator::InplaceAdd;
727
sym(1).ival = QSOperator::InplaceSub;
731
sym(1).ival = QSOperator::InplaceLeftShift;
735
sym(1).ival = QSOperator::InplaceRightShift;
739
sym(1).ival = QSOperator::InplaceURightShift;
743
sym(1).ival = QSOperator::InplaceAnd;
747
sym(1).ival = QSOperator::InplaceXor;
751
sym(1).ival = QSOperator::InplaceOr;
755
sym(1).Node = QScript::makeAstNode<QScript::AST::Expression> (driver->nodePool(), sym(1).Expression, sym(3).Expression);
756
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
764
sym(1).Node = QScript::makeAstNode<QScript::AST::Expression> (driver->nodePool(), sym(1).Expression, sym(3).Expression);
765
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
773
sym(1).Node = QScript::makeAstNode<QScript::AST::Block> (driver->nodePool(), sym(2).StatementList);
774
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
778
sym(1).Node = QScript::makeAstNode<QScript::AST::StatementList> (driver->nodePool(), sym(1).Statement);
779
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
783
sym(1).Node = QScript::makeAstNode<QScript::AST::StatementList> (driver->nodePool(), sym(1).StatementList, sym(2).Statement);
784
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
792
sym(1).Node = sym(1).StatementList->finish ();
796
sym(1).Node = QScript::makeAstNode<QScript::AST::VariableStatement> (driver->nodePool(), sym(2).VariableDeclarationList->finish (/*readOnly=*/sym(1).ival == T_CONST));
797
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
801
sym(1).ival = T_CONST;
809
sym(1).Node = QScript::makeAstNode<QScript::AST::VariableDeclarationList> (driver->nodePool(), sym(1).VariableDeclaration);
810
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
814
sym(1).Node = QScript::makeAstNode<QScript::AST::VariableDeclarationList> (driver->nodePool(), sym(1).VariableDeclarationList, sym(3).VariableDeclaration);
815
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
819
sym(1).Node = QScript::makeAstNode<QScript::AST::VariableDeclarationList> (driver->nodePool(), sym(1).VariableDeclaration);
820
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
824
sym(1).Node = QScript::makeAstNode<QScript::AST::VariableDeclarationList> (driver->nodePool(), sym(1).VariableDeclarationList, sym(3).VariableDeclaration);
825
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
829
sym(1).Node = QScript::makeAstNode<QScript::AST::VariableDeclaration> (driver->nodePool(), sym(1).sval, sym(2).Expression);
830
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
834
sym(1).Node = QScript::makeAstNode<QScript::AST::VariableDeclaration> (driver->nodePool(), sym(1).sval, sym(2).Expression);
835
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
840
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
849
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
857
sym(1).Node = QScript::makeAstNode<QScript::AST::EmptyStatement> (driver->nodePool());
858
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
862
sym(1).Node = QScript::makeAstNode<QScript::AST::ExpressionStatement> (driver->nodePool(), sym(1).Expression);
863
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
867
sym(1).Node = QScript::makeAstNode<QScript::AST::IfStatement> (driver->nodePool(), sym(3).Expression, sym(5).Statement, sym(7).Statement);
868
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(7));
872
sym(1).Node = QScript::makeAstNode<QScript::AST::IfStatement> (driver->nodePool(), sym(3).Expression, sym(5).Statement);
873
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5));
877
sym(1).Node = QScript::makeAstNode<QScript::AST::DoWhileStatement> (driver->nodePool(), sym(2).Statement, sym(5).Expression);
878
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(7));
882
sym(1).Node = QScript::makeAstNode<QScript::AST::WhileStatement> (driver->nodePool(), sym(3).Expression, sym(5).Statement);
883
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5));
887
sym(1).Node = QScript::makeAstNode<QScript::AST::ForStatement> (driver->nodePool(), sym(3).Expression, sym(5).Expression, sym(7).Expression, sym(9).Statement);
888
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(9));
892
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);
893
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(10));
897
sym(1).Node = QScript::makeAstNode<QScript::AST::ForEachStatement> (driver->nodePool(), sym(3).Expression, sym(5).Expression, sym(7).Statement);
898
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(7));
902
sym(1).Node = QScript::makeAstNode<QScript::AST::LocalForEachStatement> (driver->nodePool(), sym(4).VariableDeclaration, sym(6).Expression, sym(8).Statement);
903
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(8));
907
sym(1).Node = QScript::makeAstNode<QScript::AST::ContinueStatement> (driver->nodePool());
908
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
912
sym(1).Node = QScript::makeAstNode<QScript::AST::ContinueStatement> (driver->nodePool(), sym(2).sval);
913
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
917
sym(1).Node = QScript::makeAstNode<QScript::AST::BreakStatement> (driver->nodePool());
918
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
922
sym(1).Node = QScript::makeAstNode<QScript::AST::BreakStatement> (driver->nodePool(), sym(2).sval);
923
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
927
sym(1).Node = QScript::makeAstNode<QScript::AST::ReturnStatement> (driver->nodePool(), sym(2).Expression);
928
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
932
sym(1).Node = QScript::makeAstNode<QScript::AST::WithStatement> (driver->nodePool(), sym(3).Expression, sym(5).Statement);
933
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5));
937
sym(1).Node = QScript::makeAstNode<QScript::AST::SwitchStatement> (driver->nodePool(), sym(3).Expression, sym(5).CaseBlock);
938
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5));
942
sym(1).Node = QScript::makeAstNode<QScript::AST::CaseBlock> (driver->nodePool(), sym(2).CaseClauses);
943
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
947
sym(1).Node = QScript::makeAstNode<QScript::AST::CaseBlock> (driver->nodePool(), sym(2).CaseClauses, sym(3).DefaultClause, sym(4).CaseClauses);
948
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5));
952
sym(1).Node = QScript::makeAstNode<QScript::AST::CaseClauses> (driver->nodePool(), sym(1).CaseClause);
953
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
957
sym(1).Node = QScript::makeAstNode<QScript::AST::CaseClauses> (driver->nodePool(), sym(1).CaseClauses, sym(2).CaseClause);
958
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
966
sym(1).Node = sym(1).CaseClauses->finish ();
967
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
971
sym(1).Node = QScript::makeAstNode<QScript::AST::CaseClause> (driver->nodePool(), sym(2).Expression, sym(4).StatementList);
972
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4));
976
sym(1).Node = QScript::makeAstNode<QScript::AST::DefaultClause> (driver->nodePool(), sym(3).StatementList);
977
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
981
sym(1).Node = QScript::makeAstNode<QScript::AST::LabelledStatement> (driver->nodePool(), sym(1).sval, sym(3).Statement);
982
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
986
sym(1).Node = QScript::makeAstNode<QScript::AST::ThrowStatement> (driver->nodePool(), sym(2).Expression);
987
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
991
sym(1).Node = QScript::makeAstNode<QScript::AST::TryStatement> (driver->nodePool(), sym(2).Statement, sym(3).Catch);
992
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
996
sym(1).Node = QScript::makeAstNode<QScript::AST::TryStatement> (driver->nodePool(), sym(2).Statement, sym(3).Finally);
997
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1001
sym(1).Node = QScript::makeAstNode<QScript::AST::TryStatement> (driver->nodePool(), sym(2).Statement, sym(3).Catch, sym(4).Finally);
1002
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4));
1006
sym(1).Node = QScript::makeAstNode<QScript::AST::Catch> (driver->nodePool(), sym(3).sval, sym(5).Statement);
1007
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5));
1011
sym(1).Node = QScript::makeAstNode<QScript::AST::Finally> (driver->nodePool(), sym(2).Statement);
1012
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
1016
sym(1).Node = QScript::makeAstNode<QScript::AST::DebuggerStatement> (driver->nodePool());
1017
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1021
sym(1).Node = QScript::makeAstNode<QScript::AST::FunctionDeclaration> (driver->nodePool(), sym(2).sval, sym(4).FormalParameterList, sym(7).FunctionBody);
1022
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(8));
1026
sym(1).Node = QScript::makeAstNode<QScript::AST::FunctionExpression> (driver->nodePool(), sym(2).sval, sym(4).FormalParameterList, sym(7).FunctionBody);
1027
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(8));
1031
sym(1).Node = QScript::makeAstNode<QScript::AST::FormalParameterList> (driver->nodePool(), sym(1).sval);
1032
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1036
sym(1).Node = QScript::makeAstNode<QScript::AST::FormalParameterList> (driver->nodePool(), sym(1).FormalParameterList, sym(3).sval);
1037
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1045
sym(1).Node = sym(1).FormalParameterList->finish ();
1046
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1054
sym(1).Node = QScript::makeAstNode<QScript::AST::FunctionBody> (driver->nodePool(), sym(1).SourceElements->finish ());
1055
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1059
sym(1).Node = QScript::makeAstNode<QScript::AST::Program> (driver->nodePool(), sym(1).SourceElements->finish ());
1060
driver->changeAbstractSyntaxTree(sym(1).Node);
1061
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1065
sym(1).Node = QScript::makeAstNode<QScript::AST::SourceElements> (driver->nodePool(), sym(1).SourceElement);
1066
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1070
sym(1).Node = QScript::makeAstNode<QScript::AST::SourceElements> (driver->nodePool(), sym(1).SourceElements, sym(2).SourceElement);
1071
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
1075
sym(1).Node = QScript::makeAstNode<QScript::AST::StatementSourceElement> (driver->nodePool(), sym(1).Statement);
1076
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1080
sym(1).Node = QScript::makeAstNode<QScript::AST::FunctionSourceElement> (driver->nodePool(), sym(1).FunctionDeclaration);
1081
Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1094
state_stack [tos] = nt_action (act, lhs [r] - TERMINAL_COUNT);
1097
location_stack[tos - 1].endLine = location_stack[tos + rhs[r] - 2].endLine;
1098
location_stack[tos - 1].endColumn = location_stack[tos + rhs[r] - 2].endColumn;
1099
location_stack[tos] = location_stack[tos + rhs[r] - 1];
1105
if (saved_yytoken == -1 && automatic (driver, yytoken) && t_action (state, T_AUTOMATIC_SEMICOLON) > 0)
1107
saved_yytoken = yytoken;
1108
yytoken = T_SEMICOLON;
1112
else if ((state == INITIAL_STATE) && (yytoken == 0)) {
1113
// accept empty input
1114
yytoken = T_SEMICOLON;
1121
int expected_tokens [3];
1122
for (int tk = 0; tk < TERMINAL_COUNT; ++tk)
1124
int k = t_action (ers, tk);
1130
else if (spell [tk])
1133
expected_tokens [shifts] = tk;
1138
error_message.clear ();
1139
if (shifts && shifts < 3)
1143
for (int s = 0; s < shifts; ++s)
1146
error_message += QLatin1String ("Expected ");
1148
error_message += QLatin1String (", ");
1151
error_message += QLatin1String("`");
1152
error_message += QLatin1String (spell [expected_tokens [s]]);
1153
error_message += QLatin1String("'");
1157
if (error_message.isEmpty())
1158
error_message = lexer->errorMessage();
1160
error_lineno = lexer->startLineNo();
1161
error_column = lexer->startColumnNo();
1172
#endif // QT_NO_SCRIPT