1 ----------------------------------------------------------------------------
3 -- Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
4 -- Contact: Nokia Corporation (qt-info@nokia.com)
6 -- This file is part of the QtScript module of the Qt Toolkit.
8 -- $QT_BEGIN_LICENSE:LGPL$
10 -- This file contains pre-release code and may not be distributed.
11 -- You may use this file in accordance with the terms and conditions
12 -- contained in the either Technology Preview License Agreement or the
13 -- Beta Release License Agreement.
15 -- GNU Lesser General Public License Usage
16 -- Alternatively, this file may be used under the terms of the GNU Lesser
17 -- General Public License version 2.1 as published by the Free Software
18 -- Foundation and appearing in the file LICENSE.LGPL included in the
19 -- packaging of this file. Please review the following information to
20 -- ensure the GNU Lesser General Public License version 2.1 requirements
21 -- will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
23 -- In addition, as a special exception, Nokia gives you certain
24 -- additional rights. These rights are described in the Nokia Qt LGPL
25 -- Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
28 -- GNU General Public License Usage
29 -- Alternatively, this file may be used under the terms of the GNU
30 -- General Public License version 3.0 as published by the Free Software
31 -- Foundation and appearing in the file LICENSE.GPL included in the
32 -- packaging of this file. Please review the following information to
33 -- ensure the GNU General Public License version 3.0 requirements will be
34 -- met: http://www.gnu.org/copyleft/gpl.html.
36 -- If you are unsure which license is appropriate for your use, please
37 -- contact the sales department at http://www.qtsoftware.com/contact.
40 -- This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
41 -- WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
43 ----------------------------------------------------------------------------
45 %parser QScriptGrammar
46 %decl qscriptparser_p.h
47 %impl qscriptparser.cpp
51 %token T_AND "&" T_AND_AND "&&" T_AND_EQ "&="
52 %token T_BREAK "break" T_CASE "case" T_CATCH "catch"
53 %token T_COLON ":" T_COMMA ";" T_CONTINUE "continue"
54 %token T_DEFAULT "default" T_DELETE "delete" T_DIVIDE_ "/"
55 %token T_DIVIDE_EQ "/=" T_DO "do" T_DOT "."
56 %token T_ELSE "else" T_EQ "=" T_EQ_EQ "=="
57 %token T_EQ_EQ_EQ "===" T_FINALLY "finally" T_FOR "for"
58 %token T_FUNCTION "function" T_GE ">=" T_GT ">"
59 %token T_GT_GT ">>" T_GT_GT_EQ ">>=" T_GT_GT_GT ">>>"
60 %token T_GT_GT_GT_EQ ">>>=" T_IDENTIFIER "identifier" T_IF "if"
61 %token T_IN "in" T_INSTANCEOF "instanceof" T_LBRACE "{"
62 %token T_LBRACKET "[" T_LE "<=" T_LPAREN "("
63 %token T_LT "<" T_LT_LT "<<" T_LT_LT_EQ "<<="
64 %token T_MINUS "-" T_MINUS_EQ "-=" T_MINUS_MINUS "--"
65 %token T_NEW "new" T_NOT "!" T_NOT_EQ "!="
66 %token T_NOT_EQ_EQ "!==" T_NUMERIC_LITERAL "numeric literal" T_OR "|"
67 %token T_OR_EQ "|=" T_OR_OR "||" T_PLUS "+"
68 %token T_PLUS_EQ "+=" T_PLUS_PLUS "++" T_QUESTION "?"
69 %token T_RBRACE "}" T_RBRACKET "]" T_REMAINDER "%"
70 %token T_REMAINDER_EQ "%=" T_RETURN "return" T_RPAREN ")"
71 %token T_SEMICOLON ";" T_AUTOMATIC_SEMICOLON T_STAR "*"
72 %token T_STAR_EQ "*=" T_STRING_LITERAL "string literal"
73 %token T_SWITCH "switch" T_THIS "this" T_THROW "throw"
74 %token T_TILDE "~" T_TRY "try" T_TYPEOF "typeof"
75 %token T_VAR "var" T_VOID "void" T_WHILE "while"
76 %token T_WITH "with" T_XOR "^" T_XOR_EQ "^="
77 %token T_NULL "null" T_TRUE "true" T_FALSE "false"
78 %token T_CONST "const"
79 %token T_DEBUGGER "debugger"
80 %token T_RESERVED_WORD "reserved word"
85 /****************************************************************************
87 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
88 ** Contact: Nokia Corporation (qt-info@nokia.com)
90 ** This file is part of the QtScript module of the Qt Toolkit.
92 ** $QT_BEGIN_LICENSE:LGPL$
93 ** No Commercial Usage
94 ** This file contains pre-release code and may not be distributed.
95 ** You may use this file in accordance with the terms and conditions
96 ** contained in the either Technology Preview License Agreement or the
97 ** Beta Release License Agreement.
99 ** GNU Lesser General Public License Usage
100 ** Alternatively, this file may be used under the terms of the GNU Lesser
101 ** General Public License version 2.1 as published by the Free Software
102 ** Foundation and appearing in the file LICENSE.LGPL included in the
103 ** packaging of this file. Please review the following information to
104 ** ensure the GNU Lesser General Public License version 2.1 requirements
105 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
107 ** In addition, as a special exception, Nokia gives you certain
108 ** additional rights. These rights are described in the Nokia Qt LGPL
109 ** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
112 ** GNU General Public License Usage
113 ** Alternatively, this file may be used under the terms of the GNU
114 ** General Public License version 3.0 as published by the Free Software
115 ** Foundation and appearing in the file LICENSE.GPL included in the
116 ** packaging of this file. Please review the following information to
117 ** ensure the GNU General Public License version 3.0 requirements will be
118 ** met: http://www.gnu.org/copyleft/gpl.html.
120 ** If you are unsure which license is appropriate for your use, please
121 ** contact the sales department at http://www.qtsoftware.com/contact.
124 ****************************************************************************/
126 #include <QtCore/QtDebug>
132 #include "qscriptengine.h"
133 #include "qscriptengine_p.h"
134 #include "qscriptvalueimpl_p.h"
135 #include "qscriptcontext_p.h"
136 #include "qscriptmember_p.h"
137 #include "qscriptobject_p.h"
138 #include "qscriptlexer_p.h"
139 #include "qscriptast_p.h"
140 #include "qscriptnodepool_p.h"
142 #define Q_SCRIPT_UPDATE_POSITION(node, startloc, endloc) do { \
143 node->startLine = startloc.startLine; \
144 node->startColumn = startloc.startColumn; \
145 node->endLine = endloc.endLine; \
146 node->endColumn = endloc.endColumn; \
152 /****************************************************************************
154 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
155 ** Contact: Nokia Corporation (qt-info@nokia.com)
157 ** This file is part of the QtScript module of the Qt Toolkit.
159 ** $QT_BEGIN_LICENSE:LGPL$
160 ** No Commercial Usage
161 ** This file contains pre-release code and may not be distributed.
162 ** You may use this file in accordance with the terms and conditions
163 ** contained in the either Technology Preview License Agreement or the
164 ** Beta Release License Agreement.
166 ** GNU Lesser General Public License Usage
167 ** Alternatively, this file may be used under the terms of the GNU Lesser
168 ** General Public License version 2.1 as published by the Free Software
169 ** Foundation and appearing in the file LICENSE.LGPL included in the
170 ** packaging of this file. Please review the following information to
171 ** ensure the GNU Lesser General Public License version 2.1 requirements
172 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
174 ** In addition, as a special exception, Nokia gives you certain
175 ** additional rights. These rights are described in the Nokia Qt LGPL
176 ** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
179 ** GNU General Public License Usage
180 ** Alternatively, this file may be used under the terms of the GNU
181 ** General Public License version 3.0 as published by the Free Software
182 ** Foundation and appearing in the file LICENSE.GPL included in the
183 ** packaging of this file. Please review the following information to
184 ** ensure the GNU General Public License version 3.0 requirements will be
185 ** met: http://www.gnu.org/copyleft/gpl.html.
187 ** If you are unsure which license is appropriate for your use, please
188 ** contact the sales department at http://www.qtsoftware.com/contact.
191 ****************************************************************************/
197 // This file is not part of the Qt API. It exists purely as an
198 // implementation detail. This header file may change from version to
199 // version without notice, or even be removed.
205 // This file is automatically generated from qscript.g.
206 // Changes will be lost.
209 #ifndef QSCRIPTPARSER_P_H
210 #define QSCRIPTPARSER_P_H
212 #include "qscriptgrammar_p.h"
216 #include "qscriptastfwd_p.h"
221 class QScriptEnginePrivate;
222 class QScriptNameIdImpl;
224 class QScriptParser: protected $table
230 QScriptNameIdImpl *sval;
231 QScript::AST::ArgumentList *ArgumentList;
232 QScript::AST::CaseBlock *CaseBlock;
233 QScript::AST::CaseClause *CaseClause;
234 QScript::AST::CaseClauses *CaseClauses;
235 QScript::AST::Catch *Catch;
236 QScript::AST::DefaultClause *DefaultClause;
237 QScript::AST::ElementList *ElementList;
238 QScript::AST::Elision *Elision;
239 QScript::AST::ExpressionNode *Expression;
240 QScript::AST::Finally *Finally;
241 QScript::AST::FormalParameterList *FormalParameterList;
242 QScript::AST::FunctionBody *FunctionBody;
243 QScript::AST::FunctionDeclaration *FunctionDeclaration;
244 QScript::AST::Node *Node;
245 QScript::AST::PropertyName *PropertyName;
246 QScript::AST::PropertyNameAndValueList *PropertyNameAndValueList;
247 QScript::AST::SourceElement *SourceElement;
248 QScript::AST::SourceElements *SourceElements;
249 QScript::AST::Statement *Statement;
250 QScript::AST::StatementList *StatementList;
251 QScript::AST::VariableDeclaration *VariableDeclaration;
252 QScript::AST::VariableDeclarationList *VariableDeclarationList;
266 bool parse(QScriptEnginePrivate *driver);
268 inline QString errorMessage() const
269 { return error_message; }
270 inline int errorLineNumber() const
271 { return error_lineno; }
272 inline int errorColumnNumber() const
273 { return error_column; }
276 inline void reallocateStack();
278 inline Value &sym(int index)
279 { return sym_stack [tos + index - 1]; }
281 inline Location &loc(int index)
282 { return location_stack [tos + index - 2]; }
289 Location *location_stack;
290 QString error_message;
295 inline void QScriptParser::reallocateStack()
302 sym_stack = reinterpret_cast<Value*> (qRealloc(sym_stack, stack_size * sizeof(Value)));
303 state_stack = reinterpret_cast<int*> (qRealloc(state_stack, stack_size * sizeof(int)));
304 location_stack = reinterpret_cast<Location*> (qRealloc(location_stack, stack_size * sizeof(Location)));
312 #include "qscriptparser_p.h"
315 // This file is automatically generated from qscript.g.
316 // Changes will be lost.
321 inline static bool automatic(QScriptEnginePrivate *driver, int token)
323 return token == $table::T_RBRACE
325 || driver->lexer()->prevTerminator();
329 QScriptParser::QScriptParser():
340 QScriptParser::~QScriptParser()
345 qFree(location_stack);
349 static inline QScriptParser::Location location(QScript::Lexer *lexer)
351 QScriptParser::Location loc;
352 loc.startLine = lexer->startLineNo();
353 loc.startColumn = lexer->startColumnNo();
354 loc.endLine = lexer->endLineNo();
355 loc.endColumn = lexer->endColumnNo();
359 bool QScriptParser::parse(QScriptEnginePrivate *driver)
361 const int INITIAL_STATE = 0;
362 QScript::Lexer *lexer = driver->lexer();
365 int saved_yytoken = -1;
370 state_stack[++tos] = INITIAL_STATE;
374 const int state = state_stack [tos];
375 if (yytoken == -1 && - TERMINAL_COUNT != action_index [state])
377 if (saved_yytoken == -1)
379 yytoken = lexer->lex();
380 location_stack [tos] = location(lexer);
384 yytoken = saved_yytoken;
389 int act = t_action (state, yytoken);
391 if (act == ACCEPT_STATE)
396 if (++tos == stack_size)
399 sym_stack [tos].dval = lexer->dval ();
400 state_stack [tos] = act;
401 location_stack [tos] = location(lexer);
410 act = state_stack [tos++];
415 PrimaryExpression: T_THIS ;
418 sym(1).Node = QScript::makeAstNode<QScript::AST::ThisExpression> (driver->nodePool());
419 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
423 PrimaryExpression: T_IDENTIFIER ;
426 sym(1).Node = QScript::makeAstNode<QScript::AST::IdentifierExpression> (driver->nodePool(), sym(1).sval);
427 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
431 PrimaryExpression: T_NULL ;
434 sym(1).Node = QScript::makeAstNode<QScript::AST::NullExpression> (driver->nodePool());
435 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
439 PrimaryExpression: T_TRUE ;
442 sym(1).Node = QScript::makeAstNode<QScript::AST::TrueLiteral> (driver->nodePool());
443 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
447 PrimaryExpression: T_FALSE ;
450 sym(1).Node = QScript::makeAstNode<QScript::AST::FalseLiteral> (driver->nodePool());
451 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
455 PrimaryExpression: T_NUMERIC_LITERAL ;
458 sym(1).Node = QScript::makeAstNode<QScript::AST::NumericLiteral> (driver->nodePool(), sym(1).dval);
459 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
463 PrimaryExpression: T_STRING_LITERAL ;
466 sym(1).Node = QScript::makeAstNode<QScript::AST::StringLiteral> (driver->nodePool(), sym(1).sval);
467 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
471 PrimaryExpression: T_DIVIDE_ ;
473 #define Q_SCRIPT_REGEXPLITERAL_RULE1 $rule_number
477 bool rx = lexer->scanRegExp(QScript::Lexer::NoPrefix);
479 error_message = lexer->errorMessage();
480 error_lineno = lexer->startLineNo();
481 error_column = lexer->startColumnNo();
484 sym(1).Node = QScript::makeAstNode<QScript::AST::RegExpLiteral> (driver->nodePool(), lexer->pattern, lexer->flags);
485 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
489 PrimaryExpression: T_DIVIDE_EQ ;
491 #define Q_SCRIPT_REGEXPLITERAL_RULE2 $rule_number
495 bool rx = lexer->scanRegExp(QScript::Lexer::EqualPrefix);
497 error_message = lexer->errorMessage();
498 error_lineno = lexer->startLineNo();
499 error_column = lexer->startColumnNo();
502 sym(1).Node = QScript::makeAstNode<QScript::AST::RegExpLiteral> (driver->nodePool(), lexer->pattern, lexer->flags);
503 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
507 PrimaryExpression: T_LBRACKET ElisionOpt T_RBRACKET ;
510 sym(1).Node = QScript::makeAstNode<QScript::AST::ArrayLiteral> (driver->nodePool(), sym(2).Elision);
511 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
515 PrimaryExpression: T_LBRACKET ElementList T_RBRACKET ;
518 sym(1).Node = QScript::makeAstNode<QScript::AST::ArrayLiteral> (driver->nodePool(), sym(2).ElementList->finish ());
519 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
523 PrimaryExpression: T_LBRACKET ElementList T_COMMA ElisionOpt T_RBRACKET ;
526 sym(1).Node = QScript::makeAstNode<QScript::AST::ArrayLiteral> (driver->nodePool(), sym(2).ElementList->finish (), sym(4).Elision);
527 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5));
531 -- PrimaryExpression: T_LBRACE T_RBRACE ;
533 -- case $rule_number: {
534 -- sym(1).Node = QScript::makeAstNode<QScript::AST::ObjectLiteral> (driver->nodePool());
535 -- Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
539 PrimaryExpression: T_LBRACE PropertyNameAndValueListOpt T_RBRACE ;
543 sym(1).Node = QScript::makeAstNode<QScript::AST::ObjectLiteral> (driver->nodePool(), sym(2).PropertyNameAndValueList->finish ());
545 sym(1).Node = QScript::makeAstNode<QScript::AST::ObjectLiteral> (driver->nodePool());
546 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
550 PrimaryExpression: T_LBRACE PropertyNameAndValueList T_COMMA T_RBRACE ;
553 sym(1).Node = QScript::makeAstNode<QScript::AST::ObjectLiteral> (driver->nodePool(), sym(2).PropertyNameAndValueList->finish ());
554 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4));
558 PrimaryExpression: T_LPAREN Expression T_RPAREN ;
562 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
566 ElementList: ElisionOpt AssignmentExpression ;
569 sym(1).Node = QScript::makeAstNode<QScript::AST::ElementList> (driver->nodePool(), sym(1).Elision, sym(2).Expression);
570 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
574 ElementList: ElementList T_COMMA ElisionOpt AssignmentExpression ;
577 sym(1).Node = QScript::makeAstNode<QScript::AST::ElementList> (driver->nodePool(), sym(1).ElementList, sym(3).Elision, sym(4).Expression);
578 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4));
585 sym(1).Node = QScript::makeAstNode<QScript::AST::Elision> (driver->nodePool());
586 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
590 Elision: Elision T_COMMA ;
593 sym(1).Node = QScript::makeAstNode<QScript::AST::Elision> (driver->nodePool(), sym(1).Elision);
594 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
605 ElisionOpt: Elision ;
608 sym(1).Elision = sym(1).Elision->finish ();
609 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
613 PropertyNameAndValueList: PropertyName T_COLON AssignmentExpression ;
616 sym(1).Node = QScript::makeAstNode<QScript::AST::PropertyNameAndValueList> (driver->nodePool(), sym(1).PropertyName, sym(3).Expression);
617 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
621 PropertyNameAndValueList: PropertyNameAndValueList T_COMMA PropertyName T_COLON AssignmentExpression ;
624 sym(1).Node = QScript::makeAstNode<QScript::AST::PropertyNameAndValueList> (driver->nodePool(), sym(1).PropertyNameAndValueList, sym(3).PropertyName, sym(5).Expression);
625 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5));
629 PropertyName: T_IDENTIFIER ;
632 sym(1).Node = QScript::makeAstNode<QScript::AST::IdentifierPropertyName> (driver->nodePool(), sym(1).sval);
633 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
637 PropertyName: T_STRING_LITERAL ;
640 sym(1).Node = QScript::makeAstNode<QScript::AST::StringLiteralPropertyName> (driver->nodePool(), sym(1).sval);
641 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
645 PropertyName: T_NUMERIC_LITERAL ;
648 sym(1).Node = QScript::makeAstNode<QScript::AST::NumericLiteralPropertyName> (driver->nodePool(), sym(1).dval);
649 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
653 PropertyName: ReservedIdentifier ;
656 sym(1).Node = QScript::makeAstNode<QScript::AST::IdentifierPropertyName> (driver->nodePool(), sym(1).sval);
657 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
661 ReservedIdentifier: T_BREAK ;
665 ReservedIdentifier: T_CASE ;
669 ReservedIdentifier: T_CATCH ;
673 ReservedIdentifier: T_CONTINUE ;
677 ReservedIdentifier: T_DEFAULT ;
681 ReservedIdentifier: T_DELETE ;
685 ReservedIdentifier: T_DO ;
689 ReservedIdentifier: T_ELSE ;
693 ReservedIdentifier: T_FALSE ;
697 ReservedIdentifier: T_FINALLY ;
701 ReservedIdentifier: T_FOR ;
705 ReservedIdentifier: T_FUNCTION ;
709 ReservedIdentifier: T_IF ;
713 ReservedIdentifier: T_IN ;
717 ReservedIdentifier: T_INSTANCEOF ;
721 ReservedIdentifier: T_NEW ;
725 ReservedIdentifier: T_NULL ;
729 ReservedIdentifier: T_RETURN ;
733 ReservedIdentifier: T_SWITCH ;
737 ReservedIdentifier: T_THIS ;
741 ReservedIdentifier: T_THROW ;
745 ReservedIdentifier: T_TRUE ;
749 ReservedIdentifier: T_TRY ;
753 ReservedIdentifier: T_TYPEOF ;
757 ReservedIdentifier: T_VAR ;
761 ReservedIdentifier: T_VOID ;
765 ReservedIdentifier: T_WHILE ;
769 ReservedIdentifier: T_CONST ;
773 ReservedIdentifier: T_DEBUGGER ;
777 ReservedIdentifier: T_RESERVED_WORD ;
781 ReservedIdentifier: T_WITH ;
785 sym(1).sval = driver->intern(lexer->characterBuffer(), lexer->characterCount());
789 PropertyIdentifier: T_IDENTIFIER ;
790 PropertyIdentifier: ReservedIdentifier ;
792 MemberExpression: PrimaryExpression ;
793 MemberExpression: FunctionExpression ;
795 MemberExpression: MemberExpression T_LBRACKET Expression T_RBRACKET ;
798 sym(1).Node = QScript::makeAstNode<QScript::AST::ArrayMemberExpression> (driver->nodePool(), sym(1).Expression, sym(3).Expression);
799 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4));
803 MemberExpression: MemberExpression T_DOT PropertyIdentifier ;
806 sym(1).Node = QScript::makeAstNode<QScript::AST::FieldMemberExpression> (driver->nodePool(), sym(1).Expression, sym(3).sval);
807 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4));
811 MemberExpression: T_NEW MemberExpression Arguments ;
814 sym(1).Node = QScript::makeAstNode<QScript::AST::NewMemberExpression> (driver->nodePool(), sym(2).Expression, sym(3).ArgumentList);
815 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
819 NewExpression: MemberExpression ;
821 NewExpression: T_NEW NewExpression ;
824 sym(1).Node = QScript::makeAstNode<QScript::AST::NewExpression> (driver->nodePool(), sym(2).Expression);
825 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
829 CallExpression: MemberExpression Arguments ;
832 sym(1).Node = QScript::makeAstNode<QScript::AST::CallExpression> (driver->nodePool(), sym(1).Expression, sym(2).ArgumentList);
833 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
837 CallExpression: CallExpression Arguments ;
840 sym(1).Node = QScript::makeAstNode<QScript::AST::CallExpression> (driver->nodePool(), sym(1).Expression, sym(2).ArgumentList);
841 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
845 CallExpression: CallExpression T_LBRACKET Expression T_RBRACKET ;
848 sym(1).Node = QScript::makeAstNode<QScript::AST::ArrayMemberExpression> (driver->nodePool(), sym(1).Expression, sym(3).Expression);
849 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4));
853 CallExpression: CallExpression T_DOT PropertyIdentifier ;
856 sym(1).Node = QScript::makeAstNode<QScript::AST::FieldMemberExpression> (driver->nodePool(), sym(1).Expression, sym(3).sval);
857 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
861 Arguments: T_LPAREN T_RPAREN ;
868 Arguments: T_LPAREN ArgumentList T_RPAREN ;
871 sym(1).Node = sym(2).ArgumentList->finish ();
872 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
876 ArgumentList: AssignmentExpression ;
879 sym(1).Node = QScript::makeAstNode<QScript::AST::ArgumentList> (driver->nodePool(), sym(1).Expression);
880 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
884 ArgumentList: ArgumentList T_COMMA AssignmentExpression ;
887 sym(1).Node = QScript::makeAstNode<QScript::AST::ArgumentList> (driver->nodePool(), sym(1).ArgumentList, sym(3).Expression);
888 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
892 LeftHandSideExpression: NewExpression ;
893 LeftHandSideExpression: CallExpression ;
894 PostfixExpression: LeftHandSideExpression ;
896 PostfixExpression: LeftHandSideExpression T_PLUS_PLUS ;
899 sym(1).Node = QScript::makeAstNode<QScript::AST::PostIncrementExpression> (driver->nodePool(), sym(1).Expression);
900 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
904 PostfixExpression: LeftHandSideExpression T_MINUS_MINUS ;
907 sym(1).Node = QScript::makeAstNode<QScript::AST::PostDecrementExpression> (driver->nodePool(), sym(1).Expression);
908 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
912 UnaryExpression: PostfixExpression ;
914 UnaryExpression: T_DELETE UnaryExpression ;
917 sym(1).Node = QScript::makeAstNode<QScript::AST::DeleteExpression> (driver->nodePool(), sym(2).Expression);
918 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
922 UnaryExpression: T_VOID UnaryExpression ;
925 sym(1).Node = QScript::makeAstNode<QScript::AST::VoidExpression> (driver->nodePool(), sym(2).Expression);
926 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
930 UnaryExpression: T_TYPEOF UnaryExpression ;
933 sym(1).Node = QScript::makeAstNode<QScript::AST::TypeOfExpression> (driver->nodePool(), sym(2).Expression);
934 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
938 UnaryExpression: T_PLUS_PLUS UnaryExpression ;
941 sym(1).Node = QScript::makeAstNode<QScript::AST::PreIncrementExpression> (driver->nodePool(), sym(2).Expression);
942 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
946 UnaryExpression: T_MINUS_MINUS UnaryExpression ;
949 sym(1).Node = QScript::makeAstNode<QScript::AST::PreDecrementExpression> (driver->nodePool(), sym(2).Expression);
950 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
954 UnaryExpression: T_PLUS UnaryExpression ;
957 sym(1).Node = QScript::makeAstNode<QScript::AST::UnaryPlusExpression> (driver->nodePool(), sym(2).Expression);
958 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
962 UnaryExpression: T_MINUS UnaryExpression ;
965 sym(1).Node = QScript::makeAstNode<QScript::AST::UnaryMinusExpression> (driver->nodePool(), sym(2).Expression);
966 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
970 UnaryExpression: T_TILDE UnaryExpression ;
973 sym(1).Node = QScript::makeAstNode<QScript::AST::TildeExpression> (driver->nodePool(), sym(2).Expression);
974 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
978 UnaryExpression: T_NOT UnaryExpression ;
981 sym(1).Node = QScript::makeAstNode<QScript::AST::NotExpression> (driver->nodePool(), sym(2).Expression);
982 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
986 MultiplicativeExpression: UnaryExpression ;
988 MultiplicativeExpression: MultiplicativeExpression T_STAR UnaryExpression ;
991 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Mul, sym(3).Expression);
992 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
996 MultiplicativeExpression: MultiplicativeExpression T_DIVIDE_ UnaryExpression ;
999 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Div, sym(3).Expression);
1000 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1004 MultiplicativeExpression: MultiplicativeExpression T_REMAINDER UnaryExpression ;
1006 case $rule_number: {
1007 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Mod, sym(3).Expression);
1008 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1012 AdditiveExpression: MultiplicativeExpression ;
1014 AdditiveExpression: AdditiveExpression T_PLUS MultiplicativeExpression ;
1016 case $rule_number: {
1017 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Add, sym(3).Expression);
1018 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1022 AdditiveExpression: AdditiveExpression T_MINUS MultiplicativeExpression ;
1024 case $rule_number: {
1025 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Sub, sym(3).Expression);
1026 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1030 ShiftExpression: AdditiveExpression ;
1032 ShiftExpression: ShiftExpression T_LT_LT AdditiveExpression ;
1034 case $rule_number: {
1035 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::LShift, sym(3).Expression);
1036 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1040 ShiftExpression: ShiftExpression T_GT_GT AdditiveExpression ;
1042 case $rule_number: {
1043 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::RShift, sym(3).Expression);
1044 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1048 ShiftExpression: ShiftExpression T_GT_GT_GT AdditiveExpression ;
1050 case $rule_number: {
1051 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::URShift, sym(3).Expression);
1052 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1056 RelationalExpression: ShiftExpression ;
1058 RelationalExpression: RelationalExpression T_LT ShiftExpression ;
1060 case $rule_number: {
1061 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Lt, sym(3).Expression);
1062 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1066 RelationalExpression: RelationalExpression T_GT ShiftExpression ;
1068 case $rule_number: {
1069 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Gt, sym(3).Expression);
1070 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1074 RelationalExpression: RelationalExpression T_LE ShiftExpression ;
1076 case $rule_number: {
1077 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Le, sym(3).Expression);
1078 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1082 RelationalExpression: RelationalExpression T_GE ShiftExpression ;
1084 case $rule_number: {
1085 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Ge, sym(3).Expression);
1086 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1090 RelationalExpression: RelationalExpression T_INSTANCEOF ShiftExpression ;
1092 case $rule_number: {
1093 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::InstanceOf, sym(3).Expression);
1094 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1098 RelationalExpression: RelationalExpression T_IN ShiftExpression ;
1100 case $rule_number: {
1101 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::In, sym(3).Expression);
1102 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1106 RelationalExpressionNotIn: ShiftExpression ;
1108 RelationalExpressionNotIn: RelationalExpressionNotIn T_LT ShiftExpression ;
1110 case $rule_number: {
1111 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Lt, sym(3).Expression);
1112 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1116 RelationalExpressionNotIn: RelationalExpressionNotIn T_GT ShiftExpression ;
1118 case $rule_number: {
1119 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Gt, sym(3).Expression);
1120 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1124 RelationalExpressionNotIn: RelationalExpressionNotIn T_LE ShiftExpression ;
1126 case $rule_number: {
1127 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Le, sym(3).Expression);
1128 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1132 RelationalExpressionNotIn: RelationalExpressionNotIn T_GE ShiftExpression ;
1134 case $rule_number: {
1135 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Ge, sym(3).Expression);
1136 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1140 RelationalExpressionNotIn: RelationalExpressionNotIn T_INSTANCEOF ShiftExpression ;
1142 case $rule_number: {
1143 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::InstanceOf, sym(3).Expression);
1144 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1148 EqualityExpression: RelationalExpression ;
1150 EqualityExpression: EqualityExpression T_EQ_EQ RelationalExpression ;
1152 case $rule_number: {
1153 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Equal, sym(3).Expression);
1154 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1158 EqualityExpression: EqualityExpression T_NOT_EQ RelationalExpression ;
1160 case $rule_number: {
1161 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::NotEqual, sym(3).Expression);
1162 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1166 EqualityExpression: EqualityExpression T_EQ_EQ_EQ RelationalExpression ;
1168 case $rule_number: {
1169 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::StrictEqual, sym(3).Expression);
1170 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1174 EqualityExpression: EqualityExpression T_NOT_EQ_EQ RelationalExpression ;
1176 case $rule_number: {
1177 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::StrictNotEqual, sym(3).Expression);
1178 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1182 EqualityExpressionNotIn: RelationalExpressionNotIn ;
1184 EqualityExpressionNotIn: EqualityExpressionNotIn T_EQ_EQ RelationalExpressionNotIn ;
1186 case $rule_number: {
1187 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Equal, sym(3).Expression);
1188 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1192 EqualityExpressionNotIn: EqualityExpressionNotIn T_NOT_EQ RelationalExpressionNotIn;
1194 case $rule_number: {
1195 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::NotEqual, sym(3).Expression);
1196 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1200 EqualityExpressionNotIn: EqualityExpressionNotIn T_EQ_EQ_EQ RelationalExpressionNotIn ;
1202 case $rule_number: {
1203 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::StrictEqual, sym(3).Expression);
1204 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1208 EqualityExpressionNotIn: EqualityExpressionNotIn T_NOT_EQ_EQ RelationalExpressionNotIn ;
1210 case $rule_number: {
1211 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::StrictNotEqual, sym(3).Expression);
1212 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1216 BitwiseANDExpression: EqualityExpression ;
1218 BitwiseANDExpression: BitwiseANDExpression T_AND EqualityExpression ;
1220 case $rule_number: {
1221 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::BitAnd, sym(3).Expression);
1222 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1226 BitwiseANDExpressionNotIn: EqualityExpressionNotIn ;
1228 BitwiseANDExpressionNotIn: BitwiseANDExpressionNotIn T_AND EqualityExpressionNotIn ;
1230 case $rule_number: {
1231 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::BitAnd, sym(3).Expression);
1232 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1236 BitwiseXORExpression: BitwiseANDExpression ;
1238 BitwiseXORExpression: BitwiseXORExpression T_XOR BitwiseANDExpression ;
1240 case $rule_number: {
1241 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::BitXor, sym(3).Expression);
1242 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1246 BitwiseXORExpressionNotIn: BitwiseANDExpressionNotIn ;
1248 BitwiseXORExpressionNotIn: BitwiseXORExpressionNotIn T_XOR BitwiseANDExpressionNotIn ;
1250 case $rule_number: {
1251 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::BitXor, sym(3).Expression);
1252 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1256 BitwiseORExpression: BitwiseXORExpression ;
1258 BitwiseORExpression: BitwiseORExpression T_OR BitwiseXORExpression ;
1260 case $rule_number: {
1261 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::BitOr, sym(3).Expression);
1262 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1266 BitwiseORExpressionNotIn: BitwiseXORExpressionNotIn ;
1268 BitwiseORExpressionNotIn: BitwiseORExpressionNotIn T_OR BitwiseXORExpressionNotIn ;
1270 case $rule_number: {
1271 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::BitOr, sym(3).Expression);
1272 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1276 LogicalANDExpression: BitwiseORExpression ;
1278 LogicalANDExpression: LogicalANDExpression T_AND_AND BitwiseORExpression ;
1280 case $rule_number: {
1281 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::And, sym(3).Expression);
1282 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1286 LogicalANDExpressionNotIn: BitwiseORExpressionNotIn ;
1288 LogicalANDExpressionNotIn: LogicalANDExpressionNotIn T_AND_AND BitwiseORExpressionNotIn ;
1290 case $rule_number: {
1291 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::And, sym(3).Expression);
1292 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1296 LogicalORExpression: LogicalANDExpression ;
1298 LogicalORExpression: LogicalORExpression T_OR_OR LogicalANDExpression ;
1300 case $rule_number: {
1301 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Or, sym(3).Expression);
1302 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1306 LogicalORExpressionNotIn: LogicalANDExpressionNotIn ;
1308 LogicalORExpressionNotIn: LogicalORExpressionNotIn T_OR_OR LogicalANDExpressionNotIn ;
1310 case $rule_number: {
1311 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Or, sym(3).Expression);
1312 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1316 ConditionalExpression: LogicalORExpression ;
1318 ConditionalExpression: LogicalORExpression T_QUESTION AssignmentExpression T_COLON AssignmentExpression ;
1320 case $rule_number: {
1321 sym(1).Node = QScript::makeAstNode<QScript::AST::ConditionalExpression> (driver->nodePool(), sym(1).Expression, sym(3).Expression, sym(5).Expression);
1322 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1326 ConditionalExpressionNotIn: LogicalORExpressionNotIn ;
1328 ConditionalExpressionNotIn: LogicalORExpressionNotIn T_QUESTION AssignmentExpressionNotIn T_COLON AssignmentExpressionNotIn ;
1330 case $rule_number: {
1331 sym(1).Node = QScript::makeAstNode<QScript::AST::ConditionalExpression> (driver->nodePool(), sym(1).Expression, sym(3).Expression, sym(5).Expression);
1332 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1336 AssignmentExpression: ConditionalExpression ;
1338 AssignmentExpression: LeftHandSideExpression AssignmentOperator AssignmentExpression ;
1340 case $rule_number: {
1341 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, sym(2).ival, sym(3).Expression);
1342 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1346 AssignmentExpressionNotIn: ConditionalExpressionNotIn ;
1348 AssignmentExpressionNotIn: LeftHandSideExpression AssignmentOperator AssignmentExpressionNotIn ;
1350 case $rule_number: {
1351 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, sym(2).ival, sym(3).Expression);
1352 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1356 AssignmentOperator: T_EQ ;
1358 case $rule_number: {
1359 sym(1).ival = QSOperator::Assign;
1363 AssignmentOperator: T_STAR_EQ ;
1365 case $rule_number: {
1366 sym(1).ival = QSOperator::InplaceMul;
1370 AssignmentOperator: T_DIVIDE_EQ ;
1372 case $rule_number: {
1373 sym(1).ival = QSOperator::InplaceDiv;
1377 AssignmentOperator: T_REMAINDER_EQ ;
1379 case $rule_number: {
1380 sym(1).ival = QSOperator::InplaceMod;
1384 AssignmentOperator: T_PLUS_EQ ;
1386 case $rule_number: {
1387 sym(1).ival = QSOperator::InplaceAdd;
1391 AssignmentOperator: T_MINUS_EQ ;
1393 case $rule_number: {
1394 sym(1).ival = QSOperator::InplaceSub;
1398 AssignmentOperator: T_LT_LT_EQ ;
1400 case $rule_number: {
1401 sym(1).ival = QSOperator::InplaceLeftShift;
1405 AssignmentOperator: T_GT_GT_EQ ;
1407 case $rule_number: {
1408 sym(1).ival = QSOperator::InplaceRightShift;
1412 AssignmentOperator: T_GT_GT_GT_EQ ;
1414 case $rule_number: {
1415 sym(1).ival = QSOperator::InplaceURightShift;
1419 AssignmentOperator: T_AND_EQ ;
1421 case $rule_number: {
1422 sym(1).ival = QSOperator::InplaceAnd;
1426 AssignmentOperator: T_XOR_EQ ;
1428 case $rule_number: {
1429 sym(1).ival = QSOperator::InplaceXor;
1433 AssignmentOperator: T_OR_EQ ;
1435 case $rule_number: {
1436 sym(1).ival = QSOperator::InplaceOr;
1440 Expression: AssignmentExpression ;
1442 Expression: Expression T_COMMA AssignmentExpression ;
1444 case $rule_number: {
1445 sym(1).Node = QScript::makeAstNode<QScript::AST::Expression> (driver->nodePool(), sym(1).Expression, sym(3).Expression);
1446 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1452 case $rule_number: {
1457 ExpressionOpt: Expression ;
1459 ExpressionNotIn: AssignmentExpressionNotIn ;
1461 ExpressionNotIn: ExpressionNotIn T_COMMA AssignmentExpressionNotIn ;
1463 case $rule_number: {
1464 sym(1).Node = QScript::makeAstNode<QScript::AST::Expression> (driver->nodePool(), sym(1).Expression, sym(3).Expression);
1465 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1469 ExpressionNotInOpt: ;
1471 case $rule_number: {
1476 ExpressionNotInOpt: ExpressionNotIn ;
1479 Statement: VariableStatement ;
1480 Statement: EmptyStatement ;
1481 Statement: ExpressionStatement ;
1482 Statement: IfStatement ;
1483 Statement: IterationStatement ;
1484 Statement: ContinueStatement ;
1485 Statement: BreakStatement ;
1486 Statement: ReturnStatement ;
1487 Statement: WithStatement ;
1488 Statement: LabelledStatement ;
1489 Statement: SwitchStatement ;
1490 Statement: ThrowStatement ;
1491 Statement: TryStatement ;
1492 Statement: DebuggerStatement ;
1495 Block: T_LBRACE StatementListOpt T_RBRACE ;
1497 case $rule_number: {
1498 sym(1).Node = QScript::makeAstNode<QScript::AST::Block> (driver->nodePool(), sym(2).StatementList);
1499 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1503 StatementList: Statement ;
1505 case $rule_number: {
1506 sym(1).Node = QScript::makeAstNode<QScript::AST::StatementList> (driver->nodePool(), sym(1).Statement);
1507 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1511 StatementList: StatementList Statement ;
1513 case $rule_number: {
1514 sym(1).Node = QScript::makeAstNode<QScript::AST::StatementList> (driver->nodePool(), sym(1).StatementList, sym(2).Statement);
1515 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
1521 case $rule_number: {
1526 StatementListOpt: StatementList ;
1528 case $rule_number: {
1529 sym(1).Node = sym(1).StatementList->finish ();
1533 VariableStatement: VariableDeclarationKind VariableDeclarationList T_AUTOMATIC_SEMICOLON ; -- automatic semicolon
1534 VariableStatement: VariableDeclarationKind VariableDeclarationList T_SEMICOLON ;
1536 case $rule_number: {
1537 sym(1).Node = QScript::makeAstNode<QScript::AST::VariableStatement> (driver->nodePool(), sym(2).VariableDeclarationList->finish (/*readOnly=*/sym(1).ival == T_CONST));
1538 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1542 VariableDeclarationKind: T_CONST ;
1544 case $rule_number: {
1545 sym(1).ival = T_CONST;
1549 VariableDeclarationKind: T_VAR ;
1551 case $rule_number: {
1552 sym(1).ival = T_VAR;
1556 VariableDeclarationList: VariableDeclaration ;
1558 case $rule_number: {
1559 sym(1).Node = QScript::makeAstNode<QScript::AST::VariableDeclarationList> (driver->nodePool(), sym(1).VariableDeclaration);
1560 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1564 VariableDeclarationList: VariableDeclarationList T_COMMA VariableDeclaration ;
1566 case $rule_number: {
1567 sym(1).Node = QScript::makeAstNode<QScript::AST::VariableDeclarationList> (driver->nodePool(), sym(1).VariableDeclarationList, sym(3).VariableDeclaration);
1568 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1572 VariableDeclarationListNotIn: VariableDeclarationNotIn ;
1574 case $rule_number: {
1575 sym(1).Node = QScript::makeAstNode<QScript::AST::VariableDeclarationList> (driver->nodePool(), sym(1).VariableDeclaration);
1576 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1580 VariableDeclarationListNotIn: VariableDeclarationListNotIn T_COMMA VariableDeclarationNotIn ;
1582 case $rule_number: {
1583 sym(1).Node = QScript::makeAstNode<QScript::AST::VariableDeclarationList> (driver->nodePool(), sym(1).VariableDeclarationList, sym(3).VariableDeclaration);
1584 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1588 VariableDeclaration: T_IDENTIFIER InitialiserOpt ;
1590 case $rule_number: {
1591 sym(1).Node = QScript::makeAstNode<QScript::AST::VariableDeclaration> (driver->nodePool(), sym(1).sval, sym(2).Expression);
1592 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
1596 VariableDeclarationNotIn: T_IDENTIFIER InitialiserNotInOpt ;
1598 case $rule_number: {
1599 sym(1).Node = QScript::makeAstNode<QScript::AST::VariableDeclaration> (driver->nodePool(), sym(1).sval, sym(2).Expression);
1600 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
1604 Initialiser: T_EQ AssignmentExpression ;
1606 case $rule_number: {
1608 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
1614 case $rule_number: {
1619 InitialiserOpt: Initialiser ;
1621 InitialiserNotIn: T_EQ AssignmentExpressionNotIn ;
1623 case $rule_number: {
1625 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
1629 InitialiserNotInOpt: ;
1631 case $rule_number: {
1636 InitialiserNotInOpt: InitialiserNotIn ;
1638 EmptyStatement: T_SEMICOLON ;
1640 case $rule_number: {
1641 sym(1).Node = QScript::makeAstNode<QScript::AST::EmptyStatement> (driver->nodePool());
1642 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1646 ExpressionStatement: Expression T_AUTOMATIC_SEMICOLON ; -- automatic semicolon
1647 ExpressionStatement: Expression T_SEMICOLON ;
1649 case $rule_number: {
1650 sym(1).Node = QScript::makeAstNode<QScript::AST::ExpressionStatement> (driver->nodePool(), sym(1).Expression);
1651 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
1655 IfStatement: T_IF T_LPAREN Expression T_RPAREN Statement T_ELSE Statement ;
1657 case $rule_number: {
1658 sym(1).Node = QScript::makeAstNode<QScript::AST::IfStatement> (driver->nodePool(), sym(3).Expression, sym(5).Statement, sym(7).Statement);
1659 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(7));
1663 IfStatement: T_IF T_LPAREN Expression T_RPAREN Statement ;
1665 case $rule_number: {
1666 sym(1).Node = QScript::makeAstNode<QScript::AST::IfStatement> (driver->nodePool(), sym(3).Expression, sym(5).Statement);
1667 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5));
1672 IterationStatement: T_DO Statement T_WHILE T_LPAREN Expression T_RPAREN T_AUTOMATIC_SEMICOLON ; -- automatic semicolon
1673 IterationStatement: T_DO Statement T_WHILE T_LPAREN Expression T_RPAREN T_SEMICOLON ;
1675 case $rule_number: {
1676 sym(1).Node = QScript::makeAstNode<QScript::AST::DoWhileStatement> (driver->nodePool(), sym(2).Statement, sym(5).Expression);
1677 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(7));
1681 IterationStatement: T_WHILE T_LPAREN Expression T_RPAREN Statement ;
1683 case $rule_number: {
1684 sym(1).Node = QScript::makeAstNode<QScript::AST::WhileStatement> (driver->nodePool(), sym(3).Expression, sym(5).Statement);
1685 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5));
1689 IterationStatement: T_FOR T_LPAREN ExpressionNotInOpt T_SEMICOLON ExpressionOpt T_SEMICOLON ExpressionOpt T_RPAREN Statement ;
1691 case $rule_number: {
1692 sym(1).Node = QScript::makeAstNode<QScript::AST::ForStatement> (driver->nodePool(), sym(3).Expression, sym(5).Expression, sym(7).Expression, sym(9).Statement);
1693 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(9));
1697 IterationStatement: T_FOR T_LPAREN T_VAR VariableDeclarationListNotIn T_SEMICOLON ExpressionOpt T_SEMICOLON ExpressionOpt T_RPAREN Statement ;
1699 case $rule_number: {
1700 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);
1701 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(10));
1705 IterationStatement: T_FOR T_LPAREN LeftHandSideExpression T_IN Expression T_RPAREN Statement ;
1707 case $rule_number: {
1708 sym(1).Node = QScript::makeAstNode<QScript::AST::ForEachStatement> (driver->nodePool(), sym(3).Expression, sym(5).Expression, sym(7).Statement);
1709 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(7));
1713 IterationStatement: T_FOR T_LPAREN T_VAR VariableDeclarationNotIn T_IN Expression T_RPAREN Statement ;
1715 case $rule_number: {
1716 sym(1).Node = QScript::makeAstNode<QScript::AST::LocalForEachStatement> (driver->nodePool(), sym(4).VariableDeclaration, sym(6).Expression, sym(8).Statement);
1717 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(8));
1721 ContinueStatement: T_CONTINUE T_AUTOMATIC_SEMICOLON ; -- automatic semicolon
1722 ContinueStatement: T_CONTINUE T_SEMICOLON ;
1724 case $rule_number: {
1725 sym(1).Node = QScript::makeAstNode<QScript::AST::ContinueStatement> (driver->nodePool());
1726 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
1730 ContinueStatement: T_CONTINUE T_IDENTIFIER T_AUTOMATIC_SEMICOLON ; -- automatic semicolon
1731 ContinueStatement: T_CONTINUE T_IDENTIFIER T_SEMICOLON ;
1733 case $rule_number: {
1734 sym(1).Node = QScript::makeAstNode<QScript::AST::ContinueStatement> (driver->nodePool(), sym(2).sval);
1735 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1739 BreakStatement: T_BREAK T_AUTOMATIC_SEMICOLON ; -- automatic semicolon
1740 BreakStatement: T_BREAK T_SEMICOLON ;
1742 case $rule_number: {
1743 sym(1).Node = QScript::makeAstNode<QScript::AST::BreakStatement> (driver->nodePool());
1744 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
1748 BreakStatement: T_BREAK T_IDENTIFIER T_AUTOMATIC_SEMICOLON ; -- automatic semicolon
1749 BreakStatement: T_BREAK T_IDENTIFIER T_SEMICOLON ;
1751 case $rule_number: {
1752 sym(1).Node = QScript::makeAstNode<QScript::AST::BreakStatement> (driver->nodePool(), sym(2).sval);
1753 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1757 ReturnStatement: T_RETURN ExpressionOpt T_AUTOMATIC_SEMICOLON ; -- automatic semicolon
1758 ReturnStatement: T_RETURN ExpressionOpt T_SEMICOLON ;
1760 case $rule_number: {
1761 sym(1).Node = QScript::makeAstNode<QScript::AST::ReturnStatement> (driver->nodePool(), sym(2).Expression);
1762 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1766 WithStatement: T_WITH T_LPAREN Expression T_RPAREN Statement ;
1768 case $rule_number: {
1769 sym(1).Node = QScript::makeAstNode<QScript::AST::WithStatement> (driver->nodePool(), sym(3).Expression, sym(5).Statement);
1770 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5));
1774 SwitchStatement: T_SWITCH T_LPAREN Expression T_RPAREN CaseBlock ;
1776 case $rule_number: {
1777 sym(1).Node = QScript::makeAstNode<QScript::AST::SwitchStatement> (driver->nodePool(), sym(3).Expression, sym(5).CaseBlock);
1778 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5));
1782 CaseBlock: T_LBRACE CaseClausesOpt T_RBRACE ;
1784 case $rule_number: {
1785 sym(1).Node = QScript::makeAstNode<QScript::AST::CaseBlock> (driver->nodePool(), sym(2).CaseClauses);
1786 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1790 CaseBlock: T_LBRACE CaseClausesOpt DefaultClause CaseClausesOpt T_RBRACE ;
1792 case $rule_number: {
1793 sym(1).Node = QScript::makeAstNode<QScript::AST::CaseBlock> (driver->nodePool(), sym(2).CaseClauses, sym(3).DefaultClause, sym(4).CaseClauses);
1794 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5));
1798 CaseClauses: CaseClause ;
1800 case $rule_number: {
1801 sym(1).Node = QScript::makeAstNode<QScript::AST::CaseClauses> (driver->nodePool(), sym(1).CaseClause);
1802 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1806 CaseClauses: CaseClauses CaseClause ;
1808 case $rule_number: {
1809 sym(1).Node = QScript::makeAstNode<QScript::AST::CaseClauses> (driver->nodePool(), sym(1).CaseClauses, sym(2).CaseClause);
1810 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
1816 case $rule_number: {
1821 CaseClausesOpt: CaseClauses ;
1823 case $rule_number: {
1824 sym(1).Node = sym(1).CaseClauses->finish ();
1825 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1829 CaseClause: T_CASE Expression T_COLON StatementListOpt ;
1831 case $rule_number: {
1832 sym(1).Node = QScript::makeAstNode<QScript::AST::CaseClause> (driver->nodePool(), sym(2).Expression, sym(4).StatementList);
1833 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4));
1837 DefaultClause: T_DEFAULT T_COLON StatementListOpt ;
1839 case $rule_number: {
1840 sym(1).Node = QScript::makeAstNode<QScript::AST::DefaultClause> (driver->nodePool(), sym(3).StatementList);
1841 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1845 LabelledStatement: T_IDENTIFIER T_COLON Statement ;
1847 case $rule_number: {
1848 sym(1).Node = QScript::makeAstNode<QScript::AST::LabelledStatement> (driver->nodePool(), sym(1).sval, sym(3).Statement);
1849 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1853 ThrowStatement: T_THROW Expression T_AUTOMATIC_SEMICOLON ; -- automatic semicolon
1854 ThrowStatement: T_THROW Expression T_SEMICOLON ;
1856 case $rule_number: {
1857 sym(1).Node = QScript::makeAstNode<QScript::AST::ThrowStatement> (driver->nodePool(), sym(2).Expression);
1858 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1862 TryStatement: T_TRY Block Catch ;
1864 case $rule_number: {
1865 sym(1).Node = QScript::makeAstNode<QScript::AST::TryStatement> (driver->nodePool(), sym(2).Statement, sym(3).Catch);
1866 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1870 TryStatement: T_TRY Block Finally ;
1872 case $rule_number: {
1873 sym(1).Node = QScript::makeAstNode<QScript::AST::TryStatement> (driver->nodePool(), sym(2).Statement, sym(3).Finally);
1874 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1878 TryStatement: T_TRY Block Catch Finally ;
1880 case $rule_number: {
1881 sym(1).Node = QScript::makeAstNode<QScript::AST::TryStatement> (driver->nodePool(), sym(2).Statement, sym(3).Catch, sym(4).Finally);
1882 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4));
1886 Catch: T_CATCH T_LPAREN T_IDENTIFIER T_RPAREN Block ;
1888 case $rule_number: {
1889 sym(1).Node = QScript::makeAstNode<QScript::AST::Catch> (driver->nodePool(), sym(3).sval, sym(5).Statement);
1890 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5));
1894 Finally: T_FINALLY Block ;
1896 case $rule_number: {
1897 sym(1).Node = QScript::makeAstNode<QScript::AST::Finally> (driver->nodePool(), sym(2).Statement);
1898 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
1902 DebuggerStatement: T_DEBUGGER T_AUTOMATIC_SEMICOLON ; -- automatic semicolon
1903 DebuggerStatement: T_DEBUGGER T_SEMICOLON ;
1905 case $rule_number: {
1906 sym(1).Node = QScript::makeAstNode<QScript::AST::DebuggerStatement> (driver->nodePool());
1907 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1911 FunctionDeclaration: T_FUNCTION T_IDENTIFIER T_LPAREN FormalParameterListOpt T_RPAREN T_LBRACE FunctionBodyOpt T_RBRACE ;
1913 case $rule_number: {
1914 sym(1).Node = QScript::makeAstNode<QScript::AST::FunctionDeclaration> (driver->nodePool(), sym(2).sval, sym(4).FormalParameterList, sym(7).FunctionBody);
1915 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(8));
1919 FunctionExpression: T_FUNCTION IdentifierOpt T_LPAREN FormalParameterListOpt T_RPAREN T_LBRACE FunctionBodyOpt T_RBRACE ;
1921 case $rule_number: {
1922 sym(1).Node = QScript::makeAstNode<QScript::AST::FunctionExpression> (driver->nodePool(), sym(2).sval, sym(4).FormalParameterList, sym(7).FunctionBody);
1923 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(8));
1927 FormalParameterList: T_IDENTIFIER ;
1929 case $rule_number: {
1930 sym(1).Node = QScript::makeAstNode<QScript::AST::FormalParameterList> (driver->nodePool(), sym(1).sval);
1931 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1935 FormalParameterList: FormalParameterList T_COMMA T_IDENTIFIER ;
1937 case $rule_number: {
1938 sym(1).Node = QScript::makeAstNode<QScript::AST::FormalParameterList> (driver->nodePool(), sym(1).FormalParameterList, sym(3).sval);
1939 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1943 FormalParameterListOpt: ;
1945 case $rule_number: {
1950 FormalParameterListOpt: FormalParameterList ;
1952 case $rule_number: {
1953 sym(1).Node = sym(1).FormalParameterList->finish ();
1954 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1960 case $rule_number: {
1965 FunctionBodyOpt: FunctionBody ;
1967 FunctionBody: SourceElements ;
1969 case $rule_number: {
1970 sym(1).Node = QScript::makeAstNode<QScript::AST::FunctionBody> (driver->nodePool(), sym(1).SourceElements->finish ());
1971 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1975 Program: SourceElements ;
1977 case $rule_number: {
1978 sym(1).Node = QScript::makeAstNode<QScript::AST::Program> (driver->nodePool(), sym(1).SourceElements->finish ());
1979 driver->changeAbstractSyntaxTree(sym(1).Node);
1980 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1984 SourceElements: SourceElement ;
1986 case $rule_number: {
1987 sym(1).Node = QScript::makeAstNode<QScript::AST::SourceElements> (driver->nodePool(), sym(1).SourceElement);
1988 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1992 SourceElements: SourceElements SourceElement ;
1994 case $rule_number: {
1995 sym(1).Node = QScript::makeAstNode<QScript::AST::SourceElements> (driver->nodePool(), sym(1).SourceElements, sym(2).SourceElement);
1996 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
2000 SourceElement: Statement ;
2002 case $rule_number: {
2003 sym(1).Node = QScript::makeAstNode<QScript::AST::StatementSourceElement> (driver->nodePool(), sym(1).Statement);
2004 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
2008 SourceElement: FunctionDeclaration ;
2010 case $rule_number: {
2011 sym(1).Node = QScript::makeAstNode<QScript::AST::FunctionSourceElement> (driver->nodePool(), sym(1).FunctionDeclaration);
2012 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
2018 case $rule_number: {
2023 IdentifierOpt: T_IDENTIFIER ;
2025 PropertyNameAndValueListOpt: ;
2027 case $rule_number: {
2032 PropertyNameAndValueListOpt: PropertyNameAndValueList ;
2037 state_stack [tos] = nt_action (act, lhs [r] - TERMINAL_COUNT);
2040 location_stack[tos - 1].endLine = location_stack[tos + rhs[r] - 2].endLine;
2041 location_stack[tos - 1].endColumn = location_stack[tos + rhs[r] - 2].endColumn;
2042 location_stack[tos] = location_stack[tos + rhs[r] - 1];
2048 if (saved_yytoken == -1 && automatic (driver, yytoken) && t_action (state, T_AUTOMATIC_SEMICOLON) > 0)
2050 saved_yytoken = yytoken;
2051 yytoken = T_SEMICOLON;
2055 else if ((state == INITIAL_STATE) && (yytoken == 0)) {
2056 // accept empty input
2057 yytoken = T_SEMICOLON;
2064 int expected_tokens [3];
2065 for (int tk = 0; tk < TERMINAL_COUNT; ++tk)
2067 int k = t_action (ers, tk);
2073 else if (spell [tk])
2076 expected_tokens [shifts] = tk;
2081 error_message.clear ();
2082 if (shifts && shifts < 3)
2086 for (int s = 0; s < shifts; ++s)
2089 error_message += QLatin1String ("Expected ");
2091 error_message += QLatin1String (", ");
2094 error_message += QLatin1String("`");
2095 error_message += QLatin1String (spell [expected_tokens [s]]);
2096 error_message += QLatin1String("'");
2100 if (error_message.isEmpty())
2101 error_message = lexer->errorMessage();
2103 error_lineno = lexer->startLineNo();
2104 error_column = lexer->startColumnNo();
2115 #endif // QT_NO_SCRIPT
2120 #endif // QT_NO_SCRIPT
2122 #endif // QSCRIPTPARSER_P_H