1 ----------------------------------------------------------------------------
3 -- Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
4 -- All rights reserved.
5 -- Contact: Nokia Corporation (qt-info@nokia.com)
7 -- This file is part of the QtScript module of the Qt Toolkit.
9 -- $QT_BEGIN_LICENSE:LGPL$
10 -- No Commercial Usage
11 -- This file contains pre-release code and may not be distributed.
12 -- You may use this file in accordance with the terms and conditions
13 -- contained in the Technology Preview License Agreement accompanying
16 -- GNU Lesser General Public License Usage
17 -- Alternatively, this file may be used under the terms of the GNU Lesser
18 -- General Public License version 2.1 as published by the Free Software
19 -- Foundation and appearing in the file LICENSE.LGPL included in the
20 -- packaging of this file. Please review the following information to
21 -- ensure the GNU Lesser General Public License version 2.1 requirements
22 -- will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
24 -- In addition, as a special exception, Nokia gives you certain additional
25 -- rights. These rights are described in the Nokia Qt LGPL Exception
26 -- version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
28 -- If you have questions regarding the use of this file, please contact
29 -- Nokia at qt-info@nokia.com.
40 ----------------------------------------------------------------------------
42 %parser QScriptGrammar
43 %decl qscriptparser_p.h
44 %impl qscriptparser.cpp
48 %token T_AND "&" T_AND_AND "&&" T_AND_EQ "&="
49 %token T_BREAK "break" T_CASE "case" T_CATCH "catch"
50 %token T_COLON ":" T_COMMA ";" T_CONTINUE "continue"
51 %token T_DEFAULT "default" T_DELETE "delete" T_DIVIDE_ "/"
52 %token T_DIVIDE_EQ "/=" T_DO "do" T_DOT "."
53 %token T_ELSE "else" T_EQ "=" T_EQ_EQ "=="
54 %token T_EQ_EQ_EQ "===" T_FINALLY "finally" T_FOR "for"
55 %token T_FUNCTION "function" T_GE ">=" T_GT ">"
56 %token T_GT_GT ">>" T_GT_GT_EQ ">>=" T_GT_GT_GT ">>>"
57 %token T_GT_GT_GT_EQ ">>>=" T_IDENTIFIER "identifier" T_IF "if"
58 %token T_IN "in" T_INSTANCEOF "instanceof" T_LBRACE "{"
59 %token T_LBRACKET "[" T_LE "<=" T_LPAREN "("
60 %token T_LT "<" T_LT_LT "<<" T_LT_LT_EQ "<<="
61 %token T_MINUS "-" T_MINUS_EQ "-=" T_MINUS_MINUS "--"
62 %token T_NEW "new" T_NOT "!" T_NOT_EQ "!="
63 %token T_NOT_EQ_EQ "!==" T_NUMERIC_LITERAL "numeric literal" T_OR "|"
64 %token T_OR_EQ "|=" T_OR_OR "||" T_PLUS "+"
65 %token T_PLUS_EQ "+=" T_PLUS_PLUS "++" T_QUESTION "?"
66 %token T_RBRACE "}" T_RBRACKET "]" T_REMAINDER "%"
67 %token T_REMAINDER_EQ "%=" T_RETURN "return" T_RPAREN ")"
68 %token T_SEMICOLON ";" T_AUTOMATIC_SEMICOLON T_STAR "*"
69 %token T_STAR_EQ "*=" T_STRING_LITERAL "string literal"
70 %token T_SWITCH "switch" T_THIS "this" T_THROW "throw"
71 %token T_TILDE "~" T_TRY "try" T_TYPEOF "typeof"
72 %token T_VAR "var" T_VOID "void" T_WHILE "while"
73 %token T_WITH "with" T_XOR "^" T_XOR_EQ "^="
74 %token T_NULL "null" T_TRUE "true" T_FALSE "false"
75 %token T_CONST "const"
76 %token T_DEBUGGER "debugger"
77 %token T_RESERVED_WORD "reserved word"
82 /****************************************************************************
84 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
85 ** All rights reserved.
86 ** Contact: Nokia Corporation (qt-info@nokia.com)
88 ** This file is part of the QtScript module of the Qt Toolkit.
90 ** contained in the Technology Preview License Agreement accompanying
92 ** In addition, as a special exception, Nokia gives you certain
93 ** additional rights. These rights are described in the Nokia Qt LGPL
94 ** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this
97 ** If you have questions regarding the use of this file, please contact
98 ** Nokia at qt-info@nokia.com.
109 ****************************************************************************/
111 #include <QtCore/QtDebug>
115 #include "qscriptengine.h"
116 #include "qscriptengine_p.h"
117 #include "qscriptvalueimpl_p.h"
118 #include "qscriptcontext_p.h"
119 #include "qscriptmember_p.h"
120 #include "qscriptobject_p.h"
121 #include "qscriptlexer_p.h"
122 #include "qscriptast_p.h"
123 #include "qscriptnodepool_p.h"
125 #define Q_SCRIPT_UPDATE_POSITION(node, startloc, endloc) do { \
126 node->startLine = startloc.startLine; \
127 node->startColumn = startloc.startColumn; \
128 node->endLine = endloc.endLine; \
129 node->endColumn = endloc.endColumn; \
135 /****************************************************************************
137 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
138 ** All rights reserved.
139 ** Contact: Nokia Corporation (qt-info@nokia.com)
141 ** This file is part of the QtScript module of the Qt Toolkit.
143 ** contained in the Technology Preview License Agreement accompanying
145 ** additional rights. These rights are described in the Nokia Qt LGPL
146 ** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this
147 ** If you have questions regarding the use of this file, please contact
148 ** Nokia at qt-info@nokia.com.
158 ****************************************************************************/
164 // This file is not part of the Qt API. It exists purely as an
165 // implementation detail. This header file may change from version to
166 // version without notice, or even be removed.
172 // This file is automatically generated from qscript.g.
173 // Changes will be lost.
176 #ifndef QSCRIPTPARSER_P_H
177 #define QSCRIPTPARSER_P_H
179 #include "qscriptgrammar_p.h"
181 #include "qscriptastfwd_p.h"
186 class QScriptEnginePrivate;
187 class QScriptNameIdImpl;
189 class QScriptParser: protected $table
195 QScriptNameIdImpl *sval;
196 QScript::AST::ArgumentList *ArgumentList;
197 QScript::AST::CaseBlock *CaseBlock;
198 QScript::AST::CaseClause *CaseClause;
199 QScript::AST::CaseClauses *CaseClauses;
200 QScript::AST::Catch *Catch;
201 QScript::AST::DefaultClause *DefaultClause;
202 QScript::AST::ElementList *ElementList;
203 QScript::AST::Elision *Elision;
204 QScript::AST::ExpressionNode *Expression;
205 QScript::AST::Finally *Finally;
206 QScript::AST::FormalParameterList *FormalParameterList;
207 QScript::AST::FunctionBody *FunctionBody;
208 QScript::AST::FunctionDeclaration *FunctionDeclaration;
209 QScript::AST::Node *Node;
210 QScript::AST::PropertyName *PropertyName;
211 QScript::AST::PropertyNameAndValueList *PropertyNameAndValueList;
212 QScript::AST::SourceElement *SourceElement;
213 QScript::AST::SourceElements *SourceElements;
214 QScript::AST::Statement *Statement;
215 QScript::AST::StatementList *StatementList;
216 QScript::AST::VariableDeclaration *VariableDeclaration;
217 QScript::AST::VariableDeclarationList *VariableDeclarationList;
231 bool parse(QScriptEnginePrivate *driver);
233 inline QString errorMessage() const
234 { return error_message; }
235 inline int errorLineNumber() const
236 { return error_lineno; }
237 inline int errorColumnNumber() const
238 { return error_column; }
241 inline void reallocateStack();
243 inline Value &sym(int index)
244 { return sym_stack [tos + index - 1]; }
246 inline Location &loc(int index)
247 { return location_stack [tos + index - 2]; }
254 Location *location_stack;
255 QString error_message;
260 inline void QScriptParser::reallocateStack()
267 sym_stack = reinterpret_cast<Value*> (qRealloc(sym_stack, stack_size * sizeof(Value)));
268 state_stack = reinterpret_cast<int*> (qRealloc(state_stack, stack_size * sizeof(int)));
269 location_stack = reinterpret_cast<Location*> (qRealloc(location_stack, stack_size * sizeof(Location)));
277 #include "qscriptparser_p.h"
280 // This file is automatically generated from qscript.g.
281 // Changes will be lost.
286 inline static bool automatic(QScriptEnginePrivate *driver, int token)
288 return token == $table::T_RBRACE
290 || driver->lexer()->prevTerminator();
294 QScriptParser::QScriptParser():
303 QScriptParser::~QScriptParser()
308 qFree(location_stack);
312 static inline QScriptParser::Location location(QScript::Lexer *lexer)
314 QScriptParser::Location loc;
315 loc.startLine = lexer->startLineNo();
316 loc.startColumn = lexer->startColumnNo();
317 loc.endLine = lexer->endLineNo();
318 loc.endColumn = lexer->endColumnNo();
322 bool QScriptParser::parse(QScriptEnginePrivate *driver)
324 const int INITIAL_STATE = 0;
325 QScript::Lexer *lexer = driver->lexer();
328 int saved_yytoken = -1;
333 state_stack[++tos] = INITIAL_STATE;
337 const int state = state_stack [tos];
338 if (yytoken == -1 && - TERMINAL_COUNT != action_index [state])
340 if (saved_yytoken == -1)
342 yytoken = lexer->lex();
343 location_stack [tos] = location(lexer);
347 yytoken = saved_yytoken;
352 int act = t_action (state, yytoken);
354 if (act == ACCEPT_STATE)
359 if (++tos == stack_size)
362 sym_stack [tos].dval = lexer->dval ();
363 state_stack [tos] = act;
364 location_stack [tos] = location(lexer);
373 act = state_stack [tos++];
378 PrimaryExpression: T_THIS ;
381 sym(1).Node = QScript::makeAstNode<QScript::AST::ThisExpression> (driver->nodePool());
382 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
386 PrimaryExpression: T_IDENTIFIER ;
389 sym(1).Node = QScript::makeAstNode<QScript::AST::IdentifierExpression> (driver->nodePool(), sym(1).sval);
390 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
394 PrimaryExpression: T_NULL ;
397 sym(1).Node = QScript::makeAstNode<QScript::AST::NullExpression> (driver->nodePool());
398 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
402 PrimaryExpression: T_TRUE ;
405 sym(1).Node = QScript::makeAstNode<QScript::AST::TrueLiteral> (driver->nodePool());
406 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
410 PrimaryExpression: T_FALSE ;
413 sym(1).Node = QScript::makeAstNode<QScript::AST::FalseLiteral> (driver->nodePool());
414 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
418 PrimaryExpression: T_NUMERIC_LITERAL ;
421 sym(1).Node = QScript::makeAstNode<QScript::AST::NumericLiteral> (driver->nodePool(), sym(1).dval);
422 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
426 PrimaryExpression: T_STRING_LITERAL ;
429 sym(1).Node = QScript::makeAstNode<QScript::AST::StringLiteral> (driver->nodePool(), sym(1).sval);
430 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
434 PrimaryExpression: T_DIVIDE_ ;
436 #define Q_SCRIPT_REGEXPLITERAL_RULE1 $rule_number
440 bool rx = lexer->scanRegExp(QScript::Lexer::NoPrefix);
442 error_message = lexer->errorMessage();
443 error_lineno = lexer->startLineNo();
444 error_column = lexer->startColumnNo();
447 sym(1).Node = QScript::makeAstNode<QScript::AST::RegExpLiteral> (driver->nodePool(), lexer->pattern, lexer->flags);
448 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
452 PrimaryExpression: T_DIVIDE_EQ ;
454 #define Q_SCRIPT_REGEXPLITERAL_RULE2 $rule_number
458 bool rx = lexer->scanRegExp(QScript::Lexer::EqualPrefix);
460 error_message = lexer->errorMessage();
461 error_lineno = lexer->startLineNo();
462 error_column = lexer->startColumnNo();
465 sym(1).Node = QScript::makeAstNode<QScript::AST::RegExpLiteral> (driver->nodePool(), lexer->pattern, lexer->flags);
466 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
470 PrimaryExpression: T_LBRACKET ElisionOpt T_RBRACKET ;
473 sym(1).Node = QScript::makeAstNode<QScript::AST::ArrayLiteral> (driver->nodePool(), sym(2).Elision);
474 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
478 PrimaryExpression: T_LBRACKET ElementList T_RBRACKET ;
481 sym(1).Node = QScript::makeAstNode<QScript::AST::ArrayLiteral> (driver->nodePool(), sym(2).ElementList->finish ());
482 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
486 PrimaryExpression: T_LBRACKET ElementList T_COMMA ElisionOpt T_RBRACKET ;
489 sym(1).Node = QScript::makeAstNode<QScript::AST::ArrayLiteral> (driver->nodePool(), sym(2).ElementList->finish (), sym(4).Elision);
490 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5));
494 -- PrimaryExpression: T_LBRACE T_RBRACE ;
496 -- case $rule_number: {
497 -- sym(1).Node = QScript::makeAstNode<QScript::AST::ObjectLiteral> (driver->nodePool());
498 -- Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
502 PrimaryExpression: T_LBRACE PropertyNameAndValueListOpt T_RBRACE ;
506 sym(1).Node = QScript::makeAstNode<QScript::AST::ObjectLiteral> (driver->nodePool(), sym(2).PropertyNameAndValueList->finish ());
508 sym(1).Node = QScript::makeAstNode<QScript::AST::ObjectLiteral> (driver->nodePool());
509 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
513 PrimaryExpression: T_LBRACE PropertyNameAndValueList T_COMMA T_RBRACE ;
516 sym(1).Node = QScript::makeAstNode<QScript::AST::ObjectLiteral> (driver->nodePool(), sym(2).PropertyNameAndValueList->finish ());
517 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4));
521 PrimaryExpression: T_LPAREN Expression T_RPAREN ;
525 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
529 ElementList: ElisionOpt AssignmentExpression ;
532 sym(1).Node = QScript::makeAstNode<QScript::AST::ElementList> (driver->nodePool(), sym(1).Elision, sym(2).Expression);
533 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
537 ElementList: ElementList T_COMMA ElisionOpt AssignmentExpression ;
540 sym(1).Node = QScript::makeAstNode<QScript::AST::ElementList> (driver->nodePool(), sym(1).ElementList, sym(3).Elision, sym(4).Expression);
541 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4));
548 sym(1).Node = QScript::makeAstNode<QScript::AST::Elision> (driver->nodePool());
549 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
553 Elision: Elision T_COMMA ;
556 sym(1).Node = QScript::makeAstNode<QScript::AST::Elision> (driver->nodePool(), sym(1).Elision);
557 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
568 ElisionOpt: Elision ;
571 sym(1).Elision = sym(1).Elision->finish ();
572 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
576 PropertyNameAndValueList: PropertyName T_COLON AssignmentExpression ;
579 sym(1).Node = QScript::makeAstNode<QScript::AST::PropertyNameAndValueList> (driver->nodePool(), sym(1).PropertyName, sym(3).Expression);
580 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
584 PropertyNameAndValueList: PropertyNameAndValueList T_COMMA PropertyName T_COLON AssignmentExpression ;
587 sym(1).Node = QScript::makeAstNode<QScript::AST::PropertyNameAndValueList> (driver->nodePool(), sym(1).PropertyNameAndValueList, sym(3).PropertyName, sym(5).Expression);
588 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5));
592 PropertyName: T_IDENTIFIER ;
595 sym(1).Node = QScript::makeAstNode<QScript::AST::IdentifierPropertyName> (driver->nodePool(), sym(1).sval);
596 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
600 PropertyName: T_STRING_LITERAL ;
603 sym(1).Node = QScript::makeAstNode<QScript::AST::StringLiteralPropertyName> (driver->nodePool(), sym(1).sval);
604 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
608 PropertyName: T_NUMERIC_LITERAL ;
611 sym(1).Node = QScript::makeAstNode<QScript::AST::NumericLiteralPropertyName> (driver->nodePool(), sym(1).dval);
612 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
616 PropertyName: ReservedIdentifier ;
619 sym(1).Node = QScript::makeAstNode<QScript::AST::IdentifierPropertyName> (driver->nodePool(), sym(1).sval);
620 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
624 ReservedIdentifier: T_BREAK ;
628 ReservedIdentifier: T_CASE ;
632 ReservedIdentifier: T_CATCH ;
636 ReservedIdentifier: T_CONTINUE ;
640 ReservedIdentifier: T_DEFAULT ;
644 ReservedIdentifier: T_DELETE ;
648 ReservedIdentifier: T_DO ;
652 ReservedIdentifier: T_ELSE ;
656 ReservedIdentifier: T_FALSE ;
660 ReservedIdentifier: T_FINALLY ;
664 ReservedIdentifier: T_FOR ;
668 ReservedIdentifier: T_FUNCTION ;
672 ReservedIdentifier: T_IF ;
676 ReservedIdentifier: T_IN ;
680 ReservedIdentifier: T_INSTANCEOF ;
684 ReservedIdentifier: T_NEW ;
688 ReservedIdentifier: T_NULL ;
692 ReservedIdentifier: T_RETURN ;
696 ReservedIdentifier: T_SWITCH ;
700 ReservedIdentifier: T_THIS ;
704 ReservedIdentifier: T_THROW ;
708 ReservedIdentifier: T_TRUE ;
712 ReservedIdentifier: T_TRY ;
716 ReservedIdentifier: T_TYPEOF ;
720 ReservedIdentifier: T_VAR ;
724 ReservedIdentifier: T_VOID ;
728 ReservedIdentifier: T_WHILE ;
732 ReservedIdentifier: T_CONST ;
736 ReservedIdentifier: T_DEBUGGER ;
740 ReservedIdentifier: T_RESERVED_WORD ;
744 ReservedIdentifier: T_WITH ;
748 sym(1).sval = driver->intern(lexer->characterBuffer(), lexer->characterCount());
752 PropertyIdentifier: T_IDENTIFIER ;
753 PropertyIdentifier: ReservedIdentifier ;
755 MemberExpression: PrimaryExpression ;
756 MemberExpression: FunctionExpression ;
758 MemberExpression: MemberExpression T_LBRACKET Expression T_RBRACKET ;
761 sym(1).Node = QScript::makeAstNode<QScript::AST::ArrayMemberExpression> (driver->nodePool(), sym(1).Expression, sym(3).Expression);
762 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4));
766 MemberExpression: MemberExpression T_DOT PropertyIdentifier ;
769 sym(1).Node = QScript::makeAstNode<QScript::AST::FieldMemberExpression> (driver->nodePool(), sym(1).Expression, sym(3).sval);
770 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4));
774 MemberExpression: T_NEW MemberExpression Arguments ;
777 sym(1).Node = QScript::makeAstNode<QScript::AST::NewMemberExpression> (driver->nodePool(), sym(2).Expression, sym(3).ArgumentList);
778 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
782 NewExpression: MemberExpression ;
784 NewExpression: T_NEW NewExpression ;
787 sym(1).Node = QScript::makeAstNode<QScript::AST::NewExpression> (driver->nodePool(), sym(2).Expression);
788 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
792 CallExpression: MemberExpression Arguments ;
795 sym(1).Node = QScript::makeAstNode<QScript::AST::CallExpression> (driver->nodePool(), sym(1).Expression, sym(2).ArgumentList);
796 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
800 CallExpression: CallExpression Arguments ;
803 sym(1).Node = QScript::makeAstNode<QScript::AST::CallExpression> (driver->nodePool(), sym(1).Expression, sym(2).ArgumentList);
804 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
808 CallExpression: CallExpression T_LBRACKET Expression T_RBRACKET ;
811 sym(1).Node = QScript::makeAstNode<QScript::AST::ArrayMemberExpression> (driver->nodePool(), sym(1).Expression, sym(3).Expression);
812 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4));
816 CallExpression: CallExpression T_DOT PropertyIdentifier ;
819 sym(1).Node = QScript::makeAstNode<QScript::AST::FieldMemberExpression> (driver->nodePool(), sym(1).Expression, sym(3).sval);
820 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
824 Arguments: T_LPAREN T_RPAREN ;
831 Arguments: T_LPAREN ArgumentList T_RPAREN ;
834 sym(1).Node = sym(2).ArgumentList->finish ();
835 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
839 ArgumentList: AssignmentExpression ;
842 sym(1).Node = QScript::makeAstNode<QScript::AST::ArgumentList> (driver->nodePool(), sym(1).Expression);
843 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
847 ArgumentList: ArgumentList T_COMMA AssignmentExpression ;
850 sym(1).Node = QScript::makeAstNode<QScript::AST::ArgumentList> (driver->nodePool(), sym(1).ArgumentList, sym(3).Expression);
851 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
855 LeftHandSideExpression: NewExpression ;
856 LeftHandSideExpression: CallExpression ;
857 PostfixExpression: LeftHandSideExpression ;
859 PostfixExpression: LeftHandSideExpression T_PLUS_PLUS ;
862 sym(1).Node = QScript::makeAstNode<QScript::AST::PostIncrementExpression> (driver->nodePool(), sym(1).Expression);
863 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
867 PostfixExpression: LeftHandSideExpression T_MINUS_MINUS ;
870 sym(1).Node = QScript::makeAstNode<QScript::AST::PostDecrementExpression> (driver->nodePool(), sym(1).Expression);
871 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
875 UnaryExpression: PostfixExpression ;
877 UnaryExpression: T_DELETE UnaryExpression ;
880 sym(1).Node = QScript::makeAstNode<QScript::AST::DeleteExpression> (driver->nodePool(), sym(2).Expression);
881 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
885 UnaryExpression: T_VOID UnaryExpression ;
888 sym(1).Node = QScript::makeAstNode<QScript::AST::VoidExpression> (driver->nodePool(), sym(2).Expression);
889 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
893 UnaryExpression: T_TYPEOF UnaryExpression ;
896 sym(1).Node = QScript::makeAstNode<QScript::AST::TypeOfExpression> (driver->nodePool(), sym(2).Expression);
897 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
901 UnaryExpression: T_PLUS_PLUS UnaryExpression ;
904 sym(1).Node = QScript::makeAstNode<QScript::AST::PreIncrementExpression> (driver->nodePool(), sym(2).Expression);
905 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
909 UnaryExpression: T_MINUS_MINUS UnaryExpression ;
912 sym(1).Node = QScript::makeAstNode<QScript::AST::PreDecrementExpression> (driver->nodePool(), sym(2).Expression);
913 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
917 UnaryExpression: T_PLUS UnaryExpression ;
920 sym(1).Node = QScript::makeAstNode<QScript::AST::UnaryPlusExpression> (driver->nodePool(), sym(2).Expression);
921 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
925 UnaryExpression: T_MINUS UnaryExpression ;
928 sym(1).Node = QScript::makeAstNode<QScript::AST::UnaryMinusExpression> (driver->nodePool(), sym(2).Expression);
929 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
933 UnaryExpression: T_TILDE UnaryExpression ;
936 sym(1).Node = QScript::makeAstNode<QScript::AST::TildeExpression> (driver->nodePool(), sym(2).Expression);
937 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
941 UnaryExpression: T_NOT UnaryExpression ;
944 sym(1).Node = QScript::makeAstNode<QScript::AST::NotExpression> (driver->nodePool(), sym(2).Expression);
945 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
949 MultiplicativeExpression: UnaryExpression ;
951 MultiplicativeExpression: MultiplicativeExpression T_STAR UnaryExpression ;
954 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Mul, sym(3).Expression);
955 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
959 MultiplicativeExpression: MultiplicativeExpression T_DIVIDE_ UnaryExpression ;
962 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Div, sym(3).Expression);
963 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
967 MultiplicativeExpression: MultiplicativeExpression T_REMAINDER UnaryExpression ;
970 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Mod, sym(3).Expression);
971 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
975 AdditiveExpression: MultiplicativeExpression ;
977 AdditiveExpression: AdditiveExpression T_PLUS MultiplicativeExpression ;
980 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Add, sym(3).Expression);
981 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
985 AdditiveExpression: AdditiveExpression T_MINUS MultiplicativeExpression ;
988 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Sub, sym(3).Expression);
989 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
993 ShiftExpression: AdditiveExpression ;
995 ShiftExpression: ShiftExpression T_LT_LT AdditiveExpression ;
998 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::LShift, sym(3).Expression);
999 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1003 ShiftExpression: ShiftExpression T_GT_GT AdditiveExpression ;
1005 case $rule_number: {
1006 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::RShift, sym(3).Expression);
1007 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1011 ShiftExpression: ShiftExpression T_GT_GT_GT AdditiveExpression ;
1013 case $rule_number: {
1014 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::URShift, sym(3).Expression);
1015 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1019 RelationalExpression: ShiftExpression ;
1021 RelationalExpression: RelationalExpression T_LT ShiftExpression ;
1023 case $rule_number: {
1024 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Lt, sym(3).Expression);
1025 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1029 RelationalExpression: RelationalExpression T_GT ShiftExpression ;
1031 case $rule_number: {
1032 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Gt, sym(3).Expression);
1033 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1037 RelationalExpression: RelationalExpression T_LE ShiftExpression ;
1039 case $rule_number: {
1040 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Le, sym(3).Expression);
1041 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1045 RelationalExpression: RelationalExpression T_GE ShiftExpression ;
1047 case $rule_number: {
1048 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Ge, sym(3).Expression);
1049 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1053 RelationalExpression: RelationalExpression T_INSTANCEOF ShiftExpression ;
1055 case $rule_number: {
1056 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::InstanceOf, sym(3).Expression);
1057 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1061 RelationalExpression: RelationalExpression T_IN ShiftExpression ;
1063 case $rule_number: {
1064 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::In, sym(3).Expression);
1065 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1069 RelationalExpressionNotIn: ShiftExpression ;
1071 RelationalExpressionNotIn: RelationalExpressionNotIn T_LT ShiftExpression ;
1073 case $rule_number: {
1074 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Lt, sym(3).Expression);
1075 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1079 RelationalExpressionNotIn: RelationalExpressionNotIn T_GT ShiftExpression ;
1081 case $rule_number: {
1082 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Gt, sym(3).Expression);
1083 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1087 RelationalExpressionNotIn: RelationalExpressionNotIn T_LE ShiftExpression ;
1089 case $rule_number: {
1090 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Le, sym(3).Expression);
1091 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1095 RelationalExpressionNotIn: RelationalExpressionNotIn T_GE ShiftExpression ;
1097 case $rule_number: {
1098 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Ge, sym(3).Expression);
1099 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1103 RelationalExpressionNotIn: RelationalExpressionNotIn T_INSTANCEOF ShiftExpression ;
1105 case $rule_number: {
1106 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::InstanceOf, sym(3).Expression);
1107 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1111 EqualityExpression: RelationalExpression ;
1113 EqualityExpression: EqualityExpression T_EQ_EQ RelationalExpression ;
1115 case $rule_number: {
1116 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Equal, sym(3).Expression);
1117 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1121 EqualityExpression: EqualityExpression T_NOT_EQ RelationalExpression ;
1123 case $rule_number: {
1124 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::NotEqual, sym(3).Expression);
1125 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1129 EqualityExpression: EqualityExpression T_EQ_EQ_EQ RelationalExpression ;
1131 case $rule_number: {
1132 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::StrictEqual, sym(3).Expression);
1133 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1137 EqualityExpression: EqualityExpression T_NOT_EQ_EQ RelationalExpression ;
1139 case $rule_number: {
1140 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::StrictNotEqual, sym(3).Expression);
1141 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1145 EqualityExpressionNotIn: RelationalExpressionNotIn ;
1147 EqualityExpressionNotIn: EqualityExpressionNotIn T_EQ_EQ RelationalExpressionNotIn ;
1149 case $rule_number: {
1150 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Equal, sym(3).Expression);
1151 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1155 EqualityExpressionNotIn: EqualityExpressionNotIn T_NOT_EQ RelationalExpressionNotIn;
1157 case $rule_number: {
1158 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::NotEqual, sym(3).Expression);
1159 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1163 EqualityExpressionNotIn: EqualityExpressionNotIn T_EQ_EQ_EQ RelationalExpressionNotIn ;
1165 case $rule_number: {
1166 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::StrictEqual, sym(3).Expression);
1167 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1171 EqualityExpressionNotIn: EqualityExpressionNotIn T_NOT_EQ_EQ RelationalExpressionNotIn ;
1173 case $rule_number: {
1174 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::StrictNotEqual, sym(3).Expression);
1175 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1179 BitwiseANDExpression: EqualityExpression ;
1181 BitwiseANDExpression: BitwiseANDExpression T_AND EqualityExpression ;
1183 case $rule_number: {
1184 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::BitAnd, sym(3).Expression);
1185 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1189 BitwiseANDExpressionNotIn: EqualityExpressionNotIn ;
1191 BitwiseANDExpressionNotIn: BitwiseANDExpressionNotIn T_AND EqualityExpressionNotIn ;
1193 case $rule_number: {
1194 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::BitAnd, sym(3).Expression);
1195 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1199 BitwiseXORExpression: BitwiseANDExpression ;
1201 BitwiseXORExpression: BitwiseXORExpression T_XOR BitwiseANDExpression ;
1203 case $rule_number: {
1204 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::BitXor, sym(3).Expression);
1205 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1209 BitwiseXORExpressionNotIn: BitwiseANDExpressionNotIn ;
1211 BitwiseXORExpressionNotIn: BitwiseXORExpressionNotIn T_XOR BitwiseANDExpressionNotIn ;
1213 case $rule_number: {
1214 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::BitXor, sym(3).Expression);
1215 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1219 BitwiseORExpression: BitwiseXORExpression ;
1221 BitwiseORExpression: BitwiseORExpression T_OR BitwiseXORExpression ;
1223 case $rule_number: {
1224 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::BitOr, sym(3).Expression);
1225 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1229 BitwiseORExpressionNotIn: BitwiseXORExpressionNotIn ;
1231 BitwiseORExpressionNotIn: BitwiseORExpressionNotIn T_OR BitwiseXORExpressionNotIn ;
1233 case $rule_number: {
1234 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::BitOr, sym(3).Expression);
1235 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1239 LogicalANDExpression: BitwiseORExpression ;
1241 LogicalANDExpression: LogicalANDExpression T_AND_AND BitwiseORExpression ;
1243 case $rule_number: {
1244 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::And, sym(3).Expression);
1245 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1249 LogicalANDExpressionNotIn: BitwiseORExpressionNotIn ;
1251 LogicalANDExpressionNotIn: LogicalANDExpressionNotIn T_AND_AND BitwiseORExpressionNotIn ;
1253 case $rule_number: {
1254 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::And, sym(3).Expression);
1255 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1259 LogicalORExpression: LogicalANDExpression ;
1261 LogicalORExpression: LogicalORExpression T_OR_OR LogicalANDExpression ;
1263 case $rule_number: {
1264 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Or, sym(3).Expression);
1265 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1269 LogicalORExpressionNotIn: LogicalANDExpressionNotIn ;
1271 LogicalORExpressionNotIn: LogicalORExpressionNotIn T_OR_OR LogicalANDExpressionNotIn ;
1273 case $rule_number: {
1274 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Or, sym(3).Expression);
1275 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1279 ConditionalExpression: LogicalORExpression ;
1281 ConditionalExpression: LogicalORExpression T_QUESTION AssignmentExpression T_COLON AssignmentExpression ;
1283 case $rule_number: {
1284 sym(1).Node = QScript::makeAstNode<QScript::AST::ConditionalExpression> (driver->nodePool(), sym(1).Expression, sym(3).Expression, sym(5).Expression);
1285 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1289 ConditionalExpressionNotIn: LogicalORExpressionNotIn ;
1291 ConditionalExpressionNotIn: LogicalORExpressionNotIn T_QUESTION AssignmentExpressionNotIn T_COLON AssignmentExpressionNotIn ;
1293 case $rule_number: {
1294 sym(1).Node = QScript::makeAstNode<QScript::AST::ConditionalExpression> (driver->nodePool(), sym(1).Expression, sym(3).Expression, sym(5).Expression);
1295 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1299 AssignmentExpression: ConditionalExpression ;
1301 AssignmentExpression: LeftHandSideExpression AssignmentOperator AssignmentExpression ;
1303 case $rule_number: {
1304 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, sym(2).ival, sym(3).Expression);
1305 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1309 AssignmentExpressionNotIn: ConditionalExpressionNotIn ;
1311 AssignmentExpressionNotIn: LeftHandSideExpression AssignmentOperator AssignmentExpressionNotIn ;
1313 case $rule_number: {
1314 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, sym(2).ival, sym(3).Expression);
1315 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1319 AssignmentOperator: T_EQ ;
1321 case $rule_number: {
1322 sym(1).ival = QSOperator::Assign;
1326 AssignmentOperator: T_STAR_EQ ;
1328 case $rule_number: {
1329 sym(1).ival = QSOperator::InplaceMul;
1333 AssignmentOperator: T_DIVIDE_EQ ;
1335 case $rule_number: {
1336 sym(1).ival = QSOperator::InplaceDiv;
1340 AssignmentOperator: T_REMAINDER_EQ ;
1342 case $rule_number: {
1343 sym(1).ival = QSOperator::InplaceMod;
1347 AssignmentOperator: T_PLUS_EQ ;
1349 case $rule_number: {
1350 sym(1).ival = QSOperator::InplaceAdd;
1354 AssignmentOperator: T_MINUS_EQ ;
1356 case $rule_number: {
1357 sym(1).ival = QSOperator::InplaceSub;
1361 AssignmentOperator: T_LT_LT_EQ ;
1363 case $rule_number: {
1364 sym(1).ival = QSOperator::InplaceLeftShift;
1368 AssignmentOperator: T_GT_GT_EQ ;
1370 case $rule_number: {
1371 sym(1).ival = QSOperator::InplaceRightShift;
1375 AssignmentOperator: T_GT_GT_GT_EQ ;
1377 case $rule_number: {
1378 sym(1).ival = QSOperator::InplaceURightShift;
1382 AssignmentOperator: T_AND_EQ ;
1384 case $rule_number: {
1385 sym(1).ival = QSOperator::InplaceAnd;
1389 AssignmentOperator: T_XOR_EQ ;
1391 case $rule_number: {
1392 sym(1).ival = QSOperator::InplaceXor;
1396 AssignmentOperator: T_OR_EQ ;
1398 case $rule_number: {
1399 sym(1).ival = QSOperator::InplaceOr;
1403 Expression: AssignmentExpression ;
1405 Expression: Expression T_COMMA AssignmentExpression ;
1407 case $rule_number: {
1408 sym(1).Node = QScript::makeAstNode<QScript::AST::Expression> (driver->nodePool(), sym(1).Expression, sym(3).Expression);
1409 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1415 case $rule_number: {
1420 ExpressionOpt: Expression ;
1422 ExpressionNotIn: AssignmentExpressionNotIn ;
1424 ExpressionNotIn: ExpressionNotIn T_COMMA AssignmentExpressionNotIn ;
1426 case $rule_number: {
1427 sym(1).Node = QScript::makeAstNode<QScript::AST::Expression> (driver->nodePool(), sym(1).Expression, sym(3).Expression);
1428 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1432 ExpressionNotInOpt: ;
1434 case $rule_number: {
1439 ExpressionNotInOpt: ExpressionNotIn ;
1442 Statement: VariableStatement ;
1443 Statement: EmptyStatement ;
1444 Statement: ExpressionStatement ;
1445 Statement: IfStatement ;
1446 Statement: IterationStatement ;
1447 Statement: ContinueStatement ;
1448 Statement: BreakStatement ;
1449 Statement: ReturnStatement ;
1450 Statement: WithStatement ;
1451 Statement: LabelledStatement ;
1452 Statement: SwitchStatement ;
1453 Statement: ThrowStatement ;
1454 Statement: TryStatement ;
1455 Statement: DebuggerStatement ;
1458 Block: T_LBRACE StatementListOpt T_RBRACE ;
1460 case $rule_number: {
1461 sym(1).Node = QScript::makeAstNode<QScript::AST::Block> (driver->nodePool(), sym(2).StatementList);
1462 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1466 StatementList: Statement ;
1468 case $rule_number: {
1469 sym(1).Node = QScript::makeAstNode<QScript::AST::StatementList> (driver->nodePool(), sym(1).Statement);
1470 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1474 StatementList: StatementList Statement ;
1476 case $rule_number: {
1477 sym(1).Node = QScript::makeAstNode<QScript::AST::StatementList> (driver->nodePool(), sym(1).StatementList, sym(2).Statement);
1478 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
1484 case $rule_number: {
1489 StatementListOpt: StatementList ;
1491 case $rule_number: {
1492 sym(1).Node = sym(1).StatementList->finish ();
1496 VariableStatement: VariableDeclarationKind VariableDeclarationList T_AUTOMATIC_SEMICOLON ; -- automatic semicolon
1497 VariableStatement: VariableDeclarationKind VariableDeclarationList T_SEMICOLON ;
1499 case $rule_number: {
1500 sym(1).Node = QScript::makeAstNode<QScript::AST::VariableStatement> (driver->nodePool(), sym(2).VariableDeclarationList->finish (/*readOnly=*/sym(1).ival == T_CONST));
1501 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1505 VariableDeclarationKind: T_CONST ;
1507 case $rule_number: {
1508 sym(1).ival = T_CONST;
1512 VariableDeclarationKind: T_VAR ;
1514 case $rule_number: {
1515 sym(1).ival = T_VAR;
1519 VariableDeclarationList: VariableDeclaration ;
1521 case $rule_number: {
1522 sym(1).Node = QScript::makeAstNode<QScript::AST::VariableDeclarationList> (driver->nodePool(), sym(1).VariableDeclaration);
1523 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1527 VariableDeclarationList: VariableDeclarationList T_COMMA VariableDeclaration ;
1529 case $rule_number: {
1530 sym(1).Node = QScript::makeAstNode<QScript::AST::VariableDeclarationList> (driver->nodePool(), sym(1).VariableDeclarationList, sym(3).VariableDeclaration);
1531 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1535 VariableDeclarationListNotIn: VariableDeclarationNotIn ;
1537 case $rule_number: {
1538 sym(1).Node = QScript::makeAstNode<QScript::AST::VariableDeclarationList> (driver->nodePool(), sym(1).VariableDeclaration);
1539 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1543 VariableDeclarationListNotIn: VariableDeclarationListNotIn T_COMMA VariableDeclarationNotIn ;
1545 case $rule_number: {
1546 sym(1).Node = QScript::makeAstNode<QScript::AST::VariableDeclarationList> (driver->nodePool(), sym(1).VariableDeclarationList, sym(3).VariableDeclaration);
1547 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1551 VariableDeclaration: T_IDENTIFIER InitialiserOpt ;
1553 case $rule_number: {
1554 sym(1).Node = QScript::makeAstNode<QScript::AST::VariableDeclaration> (driver->nodePool(), sym(1).sval, sym(2).Expression);
1555 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
1559 VariableDeclarationNotIn: T_IDENTIFIER InitialiserNotInOpt ;
1561 case $rule_number: {
1562 sym(1).Node = QScript::makeAstNode<QScript::AST::VariableDeclaration> (driver->nodePool(), sym(1).sval, sym(2).Expression);
1563 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
1567 Initialiser: T_EQ AssignmentExpression ;
1569 case $rule_number: {
1571 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
1577 case $rule_number: {
1582 InitialiserOpt: Initialiser ;
1584 InitialiserNotIn: T_EQ AssignmentExpressionNotIn ;
1586 case $rule_number: {
1588 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
1592 InitialiserNotInOpt: ;
1594 case $rule_number: {
1599 InitialiserNotInOpt: InitialiserNotIn ;
1601 EmptyStatement: T_SEMICOLON ;
1603 case $rule_number: {
1604 sym(1).Node = QScript::makeAstNode<QScript::AST::EmptyStatement> (driver->nodePool());
1605 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1609 ExpressionStatement: Expression T_AUTOMATIC_SEMICOLON ; -- automatic semicolon
1610 ExpressionStatement: Expression T_SEMICOLON ;
1612 case $rule_number: {
1613 sym(1).Node = QScript::makeAstNode<QScript::AST::ExpressionStatement> (driver->nodePool(), sym(1).Expression);
1614 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
1618 IfStatement: T_IF T_LPAREN Expression T_RPAREN Statement T_ELSE Statement ;
1620 case $rule_number: {
1621 sym(1).Node = QScript::makeAstNode<QScript::AST::IfStatement> (driver->nodePool(), sym(3).Expression, sym(5).Statement, sym(7).Statement);
1622 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(7));
1626 IfStatement: T_IF T_LPAREN Expression T_RPAREN Statement ;
1628 case $rule_number: {
1629 sym(1).Node = QScript::makeAstNode<QScript::AST::IfStatement> (driver->nodePool(), sym(3).Expression, sym(5).Statement);
1630 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5));
1635 IterationStatement: T_DO Statement T_WHILE T_LPAREN Expression T_RPAREN T_AUTOMATIC_SEMICOLON ; -- automatic semicolon
1636 IterationStatement: T_DO Statement T_WHILE T_LPAREN Expression T_RPAREN T_SEMICOLON ;
1638 case $rule_number: {
1639 sym(1).Node = QScript::makeAstNode<QScript::AST::DoWhileStatement> (driver->nodePool(), sym(2).Statement, sym(5).Expression);
1640 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(7));
1644 IterationStatement: T_WHILE T_LPAREN Expression T_RPAREN Statement ;
1646 case $rule_number: {
1647 sym(1).Node = QScript::makeAstNode<QScript::AST::WhileStatement> (driver->nodePool(), sym(3).Expression, sym(5).Statement);
1648 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5));
1652 IterationStatement: T_FOR T_LPAREN ExpressionNotInOpt T_SEMICOLON ExpressionOpt T_SEMICOLON ExpressionOpt T_RPAREN Statement ;
1654 case $rule_number: {
1655 sym(1).Node = QScript::makeAstNode<QScript::AST::ForStatement> (driver->nodePool(), sym(3).Expression, sym(5).Expression, sym(7).Expression, sym(9).Statement);
1656 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(9));
1660 IterationStatement: T_FOR T_LPAREN T_VAR VariableDeclarationListNotIn T_SEMICOLON ExpressionOpt T_SEMICOLON ExpressionOpt T_RPAREN Statement ;
1662 case $rule_number: {
1663 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);
1664 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(10));
1668 IterationStatement: T_FOR T_LPAREN LeftHandSideExpression T_IN Expression T_RPAREN Statement ;
1670 case $rule_number: {
1671 sym(1).Node = QScript::makeAstNode<QScript::AST::ForEachStatement> (driver->nodePool(), sym(3).Expression, sym(5).Expression, sym(7).Statement);
1672 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(7));
1676 IterationStatement: T_FOR T_LPAREN T_VAR VariableDeclarationNotIn T_IN Expression T_RPAREN Statement ;
1678 case $rule_number: {
1679 sym(1).Node = QScript::makeAstNode<QScript::AST::LocalForEachStatement> (driver->nodePool(), sym(4).VariableDeclaration, sym(6).Expression, sym(8).Statement);
1680 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(8));
1684 ContinueStatement: T_CONTINUE T_AUTOMATIC_SEMICOLON ; -- automatic semicolon
1685 ContinueStatement: T_CONTINUE T_SEMICOLON ;
1687 case $rule_number: {
1688 sym(1).Node = QScript::makeAstNode<QScript::AST::ContinueStatement> (driver->nodePool());
1689 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
1693 ContinueStatement: T_CONTINUE T_IDENTIFIER T_AUTOMATIC_SEMICOLON ; -- automatic semicolon
1694 ContinueStatement: T_CONTINUE T_IDENTIFIER T_SEMICOLON ;
1696 case $rule_number: {
1697 sym(1).Node = QScript::makeAstNode<QScript::AST::ContinueStatement> (driver->nodePool(), sym(2).sval);
1698 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1702 BreakStatement: T_BREAK T_AUTOMATIC_SEMICOLON ; -- automatic semicolon
1703 BreakStatement: T_BREAK T_SEMICOLON ;
1705 case $rule_number: {
1706 sym(1).Node = QScript::makeAstNode<QScript::AST::BreakStatement> (driver->nodePool());
1707 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
1711 BreakStatement: T_BREAK T_IDENTIFIER T_AUTOMATIC_SEMICOLON ; -- automatic semicolon
1712 BreakStatement: T_BREAK T_IDENTIFIER T_SEMICOLON ;
1714 case $rule_number: {
1715 sym(1).Node = QScript::makeAstNode<QScript::AST::BreakStatement> (driver->nodePool(), sym(2).sval);
1716 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1720 ReturnStatement: T_RETURN ExpressionOpt T_AUTOMATIC_SEMICOLON ; -- automatic semicolon
1721 ReturnStatement: T_RETURN ExpressionOpt T_SEMICOLON ;
1723 case $rule_number: {
1724 sym(1).Node = QScript::makeAstNode<QScript::AST::ReturnStatement> (driver->nodePool(), sym(2).Expression);
1725 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1729 WithStatement: T_WITH T_LPAREN Expression T_RPAREN Statement ;
1731 case $rule_number: {
1732 sym(1).Node = QScript::makeAstNode<QScript::AST::WithStatement> (driver->nodePool(), sym(3).Expression, sym(5).Statement);
1733 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5));
1737 SwitchStatement: T_SWITCH T_LPAREN Expression T_RPAREN CaseBlock ;
1739 case $rule_number: {
1740 sym(1).Node = QScript::makeAstNode<QScript::AST::SwitchStatement> (driver->nodePool(), sym(3).Expression, sym(5).CaseBlock);
1741 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5));
1745 CaseBlock: T_LBRACE CaseClausesOpt T_RBRACE ;
1747 case $rule_number: {
1748 sym(1).Node = QScript::makeAstNode<QScript::AST::CaseBlock> (driver->nodePool(), sym(2).CaseClauses);
1749 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1753 CaseBlock: T_LBRACE CaseClausesOpt DefaultClause CaseClausesOpt T_RBRACE ;
1755 case $rule_number: {
1756 sym(1).Node = QScript::makeAstNode<QScript::AST::CaseBlock> (driver->nodePool(), sym(2).CaseClauses, sym(3).DefaultClause, sym(4).CaseClauses);
1757 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5));
1761 CaseClauses: CaseClause ;
1763 case $rule_number: {
1764 sym(1).Node = QScript::makeAstNode<QScript::AST::CaseClauses> (driver->nodePool(), sym(1).CaseClause);
1765 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1769 CaseClauses: CaseClauses CaseClause ;
1771 case $rule_number: {
1772 sym(1).Node = QScript::makeAstNode<QScript::AST::CaseClauses> (driver->nodePool(), sym(1).CaseClauses, sym(2).CaseClause);
1773 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
1779 case $rule_number: {
1784 CaseClausesOpt: CaseClauses ;
1786 case $rule_number: {
1787 sym(1).Node = sym(1).CaseClauses->finish ();
1788 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1792 CaseClause: T_CASE Expression T_COLON StatementListOpt ;
1794 case $rule_number: {
1795 sym(1).Node = QScript::makeAstNode<QScript::AST::CaseClause> (driver->nodePool(), sym(2).Expression, sym(4).StatementList);
1796 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4));
1800 DefaultClause: T_DEFAULT T_COLON StatementListOpt ;
1802 case $rule_number: {
1803 sym(1).Node = QScript::makeAstNode<QScript::AST::DefaultClause> (driver->nodePool(), sym(3).StatementList);
1804 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1808 LabelledStatement: T_IDENTIFIER T_COLON Statement ;
1810 case $rule_number: {
1811 sym(1).Node = QScript::makeAstNode<QScript::AST::LabelledStatement> (driver->nodePool(), sym(1).sval, sym(3).Statement);
1812 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1816 ThrowStatement: T_THROW Expression T_AUTOMATIC_SEMICOLON ; -- automatic semicolon
1817 ThrowStatement: T_THROW Expression T_SEMICOLON ;
1819 case $rule_number: {
1820 sym(1).Node = QScript::makeAstNode<QScript::AST::ThrowStatement> (driver->nodePool(), sym(2).Expression);
1821 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1825 TryStatement: T_TRY Block Catch ;
1827 case $rule_number: {
1828 sym(1).Node = QScript::makeAstNode<QScript::AST::TryStatement> (driver->nodePool(), sym(2).Statement, sym(3).Catch);
1829 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1833 TryStatement: T_TRY Block Finally ;
1835 case $rule_number: {
1836 sym(1).Node = QScript::makeAstNode<QScript::AST::TryStatement> (driver->nodePool(), sym(2).Statement, sym(3).Finally);
1837 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1841 TryStatement: T_TRY Block Catch Finally ;
1843 case $rule_number: {
1844 sym(1).Node = QScript::makeAstNode<QScript::AST::TryStatement> (driver->nodePool(), sym(2).Statement, sym(3).Catch, sym(4).Finally);
1845 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4));
1849 Catch: T_CATCH T_LPAREN T_IDENTIFIER T_RPAREN Block ;
1851 case $rule_number: {
1852 sym(1).Node = QScript::makeAstNode<QScript::AST::Catch> (driver->nodePool(), sym(3).sval, sym(5).Statement);
1853 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5));
1857 Finally: T_FINALLY Block ;
1859 case $rule_number: {
1860 sym(1).Node = QScript::makeAstNode<QScript::AST::Finally> (driver->nodePool(), sym(2).Statement);
1861 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
1865 DebuggerStatement: T_DEBUGGER T_AUTOMATIC_SEMICOLON ; -- automatic semicolon
1866 DebuggerStatement: T_DEBUGGER T_SEMICOLON ;
1868 case $rule_number: {
1869 sym(1).Node = QScript::makeAstNode<QScript::AST::DebuggerStatement> (driver->nodePool());
1870 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1874 FunctionDeclaration: T_FUNCTION T_IDENTIFIER T_LPAREN FormalParameterListOpt T_RPAREN T_LBRACE FunctionBodyOpt T_RBRACE ;
1876 case $rule_number: {
1877 sym(1).Node = QScript::makeAstNode<QScript::AST::FunctionDeclaration> (driver->nodePool(), sym(2).sval, sym(4).FormalParameterList, sym(7).FunctionBody);
1878 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(8));
1882 FunctionExpression: T_FUNCTION IdentifierOpt T_LPAREN FormalParameterListOpt T_RPAREN T_LBRACE FunctionBodyOpt T_RBRACE ;
1884 case $rule_number: {
1885 sym(1).Node = QScript::makeAstNode<QScript::AST::FunctionExpression> (driver->nodePool(), sym(2).sval, sym(4).FormalParameterList, sym(7).FunctionBody);
1886 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(8));
1890 FormalParameterList: T_IDENTIFIER ;
1892 case $rule_number: {
1893 sym(1).Node = QScript::makeAstNode<QScript::AST::FormalParameterList> (driver->nodePool(), sym(1).sval);
1894 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1898 FormalParameterList: FormalParameterList T_COMMA T_IDENTIFIER ;
1900 case $rule_number: {
1901 sym(1).Node = QScript::makeAstNode<QScript::AST::FormalParameterList> (driver->nodePool(), sym(1).FormalParameterList, sym(3).sval);
1902 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1906 FormalParameterListOpt: ;
1908 case $rule_number: {
1913 FormalParameterListOpt: FormalParameterList ;
1915 case $rule_number: {
1916 sym(1).Node = sym(1).FormalParameterList->finish ();
1917 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1923 case $rule_number: {
1928 FunctionBodyOpt: FunctionBody ;
1930 FunctionBody: SourceElements ;
1932 case $rule_number: {
1933 sym(1).Node = QScript::makeAstNode<QScript::AST::FunctionBody> (driver->nodePool(), sym(1).SourceElements->finish ());
1934 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1938 Program: SourceElements ;
1940 case $rule_number: {
1941 sym(1).Node = QScript::makeAstNode<QScript::AST::Program> (driver->nodePool(), sym(1).SourceElements->finish ());
1942 driver->changeAbstractSyntaxTree(sym(1).Node);
1943 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1947 SourceElements: SourceElement ;
1949 case $rule_number: {
1950 sym(1).Node = QScript::makeAstNode<QScript::AST::SourceElements> (driver->nodePool(), sym(1).SourceElement);
1951 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1955 SourceElements: SourceElements SourceElement ;
1957 case $rule_number: {
1958 sym(1).Node = QScript::makeAstNode<QScript::AST::SourceElements> (driver->nodePool(), sym(1).SourceElements, sym(2).SourceElement);
1959 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
1963 SourceElement: Statement ;
1965 case $rule_number: {
1966 sym(1).Node = QScript::makeAstNode<QScript::AST::StatementSourceElement> (driver->nodePool(), sym(1).Statement);
1967 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1971 SourceElement: FunctionDeclaration ;
1973 case $rule_number: {
1974 sym(1).Node = QScript::makeAstNode<QScript::AST::FunctionSourceElement> (driver->nodePool(), sym(1).FunctionDeclaration);
1975 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1981 case $rule_number: {
1986 IdentifierOpt: T_IDENTIFIER ;
1988 PropertyNameAndValueListOpt: ;
1990 case $rule_number: {
1995 PropertyNameAndValueListOpt: PropertyNameAndValueList ;
2000 state_stack [tos] = nt_action (act, lhs [r] - TERMINAL_COUNT);
2003 location_stack[tos - 1].endLine = location_stack[tos + rhs[r] - 2].endLine;
2004 location_stack[tos - 1].endColumn = location_stack[tos + rhs[r] - 2].endColumn;
2005 location_stack[tos] = location_stack[tos + rhs[r] - 1];
2011 if (saved_yytoken == -1 && automatic (driver, yytoken) && t_action (state, T_AUTOMATIC_SEMICOLON) > 0)
2013 saved_yytoken = yytoken;
2014 yytoken = T_SEMICOLON;
2018 else if ((state == INITIAL_STATE) && (yytoken == 0)) {
2019 // accept empty input
2020 yytoken = T_SEMICOLON;
2027 int expected_tokens [3];
2028 for (int tk = 0; tk < TERMINAL_COUNT; ++tk)
2030 int k = t_action (ers, tk);
2036 else if (spell [tk])
2039 expected_tokens [shifts] = tk;
2044 error_message.clear ();
2045 if (shifts && shifts < 3)
2049 for (int s = 0; s < shifts; ++s)
2052 error_message += QLatin1String ("Expected ");
2054 error_message += QLatin1String (", ");
2057 error_message += QLatin1String("`");
2058 error_message += QLatin1String (spell [expected_tokens [s]]);
2059 error_message += QLatin1String("'");
2063 if (error_message.isEmpty())
2064 error_message = lexer->errorMessage();
2066 error_lineno = lexer->startLineNo();
2067 error_column = lexer->startColumnNo();
2081 #endif // QSCRIPTPARSER_P_H