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$
11 ** No Commercial Usage
12 ** This file contains pre-release code and may not be distributed.
13 ** You may use this file in accordance with the terms and conditions
14 ** contained in the either Technology Preview License Agreement or the
15 ** Beta Release License Agreement.
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
+= QLatin1Char('`');
1152 error_message
+= QLatin1String (spell
[expected_tokens
[s
]]);
1153 error_message
+= QLatin1Char('\'');
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