QDirIterator refactoring
[qt-netbsd.git] / src / script / qscript.g
blob6023d393e22ec9e19b05414685178f50ebec6c18
1 ----------------------------------------------------------------------------
2 --
3 -- Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
4 -- Contact: Nokia Corporation (qt-info@nokia.com)
5 --
6 -- This file is part of the QtScript module of the Qt Toolkit.
7 --
8 -- $QT_BEGIN_LICENSE:LGPL$
9 -- No Commercial Usage
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
26 -- package.
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.
38 -- $QT_END_LICENSE$
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
48 %expect         3
49 %expect-rr      1
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"
82 %start Program
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
110 ** package.
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.
122 ** $QT_END_LICENSE$
124 ****************************************************************************/
126 #include <QtCore/QtDebug>
128 #ifndef QT_NO_SCRIPT
130 #include <string.h>
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; \
147 } while (0)
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
177 ** package.
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.
189 ** $QT_END_LICENSE$
191 ****************************************************************************/
194 //  W A R N I N G
195 //  -------------
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.
201 // We mean it.
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"
214 #ifndef QT_NO_SCRIPT
216 #include "qscriptastfwd_p.h"
218 QT_BEGIN_NAMESPACE
220 class QString;
221 class QScriptEnginePrivate;
222 class QScriptNameIdImpl;
224 class QScriptParser: protected $table
226 public:
227     union Value {
228       int ival;
229       double dval;
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;
253     };
255     struct Location {
256       int startLine;
257       int startColumn;
258       int endLine;
259       int endColumn;
260     };
262 public:
263     QScriptParser();
264     ~QScriptParser();
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; }
275 protected:
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]; }
284 protected:
285     int tos;
286     int stack_size;
287     Value *sym_stack;
288     int *state_stack;
289     Location *location_stack;
290     QString error_message;
291     int error_lineno;
292     int error_column;
295 inline void QScriptParser::reallocateStack()
297     if (! stack_size)
298         stack_size = 128;
299     else
300         stack_size <<= 1;
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.
319 QT_BEGIN_NAMESPACE
321 inline static bool automatic(QScriptEnginePrivate *driver, int token)
323     return token == $table::T_RBRACE
324         || token == 0
325         || driver->lexer()->prevTerminator();
329 QScriptParser::QScriptParser():
330     tos(0),
331     stack_size(0),
332     sym_stack(0),
333     state_stack(0),
334     location_stack(0),
335     error_lineno(0),
336     error_column(0)
340 QScriptParser::~QScriptParser()
342     if (stack_size) {
343         qFree(sym_stack);
344         qFree(state_stack);
345         qFree(location_stack);
346     }
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();
356     return loc;
359 bool QScriptParser::parse(QScriptEnginePrivate *driver)
361   const int INITIAL_STATE = 0;
362   QScript::Lexer *lexer = driver->lexer();
364   int yytoken = -1;
365   int saved_yytoken = -1;
367   reallocateStack();
369   tos = 0;
370   state_stack[++tos] = INITIAL_STATE;
372   while (true)
373     {
374       const int state = state_stack [tos];
375       if (yytoken == -1 && - TERMINAL_COUNT != action_index [state])
376         {
377           if (saved_yytoken == -1)
378             {
379               yytoken = lexer->lex();
380               location_stack [tos] = location(lexer);
381             }
382           else
383             {
384               yytoken = saved_yytoken;
385               saved_yytoken = -1;
386             }
387         }
389       int act = t_action (state, yytoken);
391       if (act == ACCEPT_STATE)
392         return true;
394       else if (act > 0)
395         {
396           if (++tos == stack_size)
397             reallocateStack();
399           sym_stack [tos].dval = lexer->dval ();
400           state_stack [tos] = act;
401           location_stack [tos] = location(lexer);
402           yytoken = -1;
403         }
405       else if (act < 0)
406         {
407           int r = - act - 1;
409           tos -= rhs [r];
410           act = state_stack [tos++];
412           switch (r) {
415 PrimaryExpression: T_THIS ;
417 case $rule_number: {
418   sym(1).Node = QScript::makeAstNode<QScript::AST::ThisExpression> (driver->nodePool());
419   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
420 } break;
423 PrimaryExpression: T_IDENTIFIER ;
425 case $rule_number: {
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));
428 } break;
431 PrimaryExpression: T_NULL ;
433 case $rule_number: {
434   sym(1).Node = QScript::makeAstNode<QScript::AST::NullExpression> (driver->nodePool());
435   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
436 } break;
439 PrimaryExpression: T_TRUE ;
441 case $rule_number: {
442   sym(1).Node = QScript::makeAstNode<QScript::AST::TrueLiteral> (driver->nodePool());
443   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
444 } break;
447 PrimaryExpression: T_FALSE ;
449 case $rule_number: {
450   sym(1).Node = QScript::makeAstNode<QScript::AST::FalseLiteral> (driver->nodePool());
451   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
452 } break;
455 PrimaryExpression: T_NUMERIC_LITERAL ;
457 case $rule_number: {
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));
460 } break;
463 PrimaryExpression: T_STRING_LITERAL ;
465 case $rule_number: {
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));
468 } break;
471 PrimaryExpression: T_DIVIDE_ ;
473 #define Q_SCRIPT_REGEXPLITERAL_RULE1 $rule_number
476 case $rule_number: {
477   bool rx = lexer->scanRegExp(QScript::Lexer::NoPrefix);
478   if (!rx) {
479       error_message = lexer->errorMessage();
480       error_lineno = lexer->startLineNo();
481       error_column = lexer->startColumnNo();
482       return false;
483   }
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));
486 } break;
489 PrimaryExpression: T_DIVIDE_EQ ;
491 #define Q_SCRIPT_REGEXPLITERAL_RULE2 $rule_number
494 case $rule_number: {
495   bool rx = lexer->scanRegExp(QScript::Lexer::EqualPrefix);
496   if (!rx) {
497       error_message = lexer->errorMessage();
498       error_lineno = lexer->startLineNo();
499       error_column = lexer->startColumnNo();
500       return false;
501   }
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));
504 } break;
507 PrimaryExpression: T_LBRACKET ElisionOpt T_RBRACKET ;
509 case $rule_number: {
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));
512 } break;
515 PrimaryExpression: T_LBRACKET ElementList T_RBRACKET ;
517 case $rule_number: {
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));
520 } break;
523 PrimaryExpression: T_LBRACKET ElementList T_COMMA ElisionOpt T_RBRACKET ;
525 case $rule_number: {
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));
528 } break;
531 -- PrimaryExpression: T_LBRACE T_RBRACE ;
532 -- /.
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));
536 -- } break;
537 -- ./
539 PrimaryExpression: T_LBRACE PropertyNameAndValueListOpt T_RBRACE ;
541 case $rule_number: {
542   if (sym(2).Node)
543     sym(1).Node = QScript::makeAstNode<QScript::AST::ObjectLiteral> (driver->nodePool(), sym(2).PropertyNameAndValueList->finish ());
544   else
545     sym(1).Node = QScript::makeAstNode<QScript::AST::ObjectLiteral> (driver->nodePool());
546   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
547 } break;
550 PrimaryExpression: T_LBRACE PropertyNameAndValueList T_COMMA T_RBRACE ;
552 case $rule_number: {
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));
555 } break;
558 PrimaryExpression: T_LPAREN Expression T_RPAREN ;
560 case $rule_number: {
561   sym(1) = sym(2);
562   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
563 } break;
566 ElementList: ElisionOpt AssignmentExpression ;
568 case $rule_number: {
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));
571 } break;
574 ElementList: ElementList T_COMMA ElisionOpt AssignmentExpression ;
576 case $rule_number: {
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));
579 } break;
582 Elision: T_COMMA ;
584 case $rule_number: {
585   sym(1).Node = QScript::makeAstNode<QScript::AST::Elision> (driver->nodePool());
586   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
587 } break;
590 Elision: Elision T_COMMA ;
592 case $rule_number: {
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));
595 } break;
598 ElisionOpt: ;
600 case $rule_number: {
601   sym(1).Node = 0;
602 } break;
605 ElisionOpt: Elision ;
607 case $rule_number: {
608   sym(1).Elision = sym(1).Elision->finish ();
609   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
610 } break;
613 PropertyNameAndValueList: PropertyName T_COLON AssignmentExpression ;
615 case $rule_number: {
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));
618 } break;
621 PropertyNameAndValueList: PropertyNameAndValueList T_COMMA PropertyName T_COLON AssignmentExpression ;
623 case $rule_number: {
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));
626 } break;
629 PropertyName: T_IDENTIFIER ;
631 case $rule_number: {
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));
634 } break;
637 PropertyName: T_STRING_LITERAL ;
639 case $rule_number: {
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));
642 } break;
645 PropertyName: T_NUMERIC_LITERAL ;
647 case $rule_number: {
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));
650 } break;
653 PropertyName: ReservedIdentifier ;
655 case $rule_number: {
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));
658 } break;
661 ReservedIdentifier: T_BREAK ;
663 case $rule_number:
665 ReservedIdentifier: T_CASE ;
667 case $rule_number:
669 ReservedIdentifier: T_CATCH ;
671 case $rule_number:
673 ReservedIdentifier: T_CONTINUE ;
675 case $rule_number:
677 ReservedIdentifier: T_DEFAULT ;
679 case $rule_number:
681 ReservedIdentifier: T_DELETE ;
683 case $rule_number:
685 ReservedIdentifier: T_DO ;
687 case $rule_number:
689 ReservedIdentifier: T_ELSE ;
691 case $rule_number:
693 ReservedIdentifier: T_FALSE ;
695 case $rule_number:
697 ReservedIdentifier: T_FINALLY ;
699 case $rule_number:
701 ReservedIdentifier: T_FOR ;
703 case $rule_number:
705 ReservedIdentifier: T_FUNCTION ;
707 case $rule_number:
709 ReservedIdentifier: T_IF ;
711 case $rule_number:
713 ReservedIdentifier: T_IN ;
715 case $rule_number:
717 ReservedIdentifier: T_INSTANCEOF ;
719 case $rule_number:
721 ReservedIdentifier: T_NEW ;
723 case $rule_number:
725 ReservedIdentifier: T_NULL ;
727 case $rule_number:
729 ReservedIdentifier: T_RETURN ;
731 case $rule_number:
733 ReservedIdentifier: T_SWITCH ;
735 case $rule_number:
737 ReservedIdentifier: T_THIS ;
739 case $rule_number:
741 ReservedIdentifier: T_THROW ;
743 case $rule_number:
745 ReservedIdentifier: T_TRUE ;
747 case $rule_number:
749 ReservedIdentifier: T_TRY ;
751 case $rule_number:
753 ReservedIdentifier: T_TYPEOF ;
755 case $rule_number:
757 ReservedIdentifier: T_VAR ;
759 case $rule_number:
761 ReservedIdentifier: T_VOID ;
763 case $rule_number:
765 ReservedIdentifier: T_WHILE ;
767 case $rule_number:
769 ReservedIdentifier: T_CONST ;
771 case $rule_number:
773 ReservedIdentifier: T_DEBUGGER ;
775 case $rule_number:
777 ReservedIdentifier: T_RESERVED_WORD ;
779 case $rule_number:
781 ReservedIdentifier: T_WITH ;
783 case $rule_number:
785   sym(1).sval = driver->intern(lexer->characterBuffer(), lexer->characterCount());
786 } break;
789 PropertyIdentifier: T_IDENTIFIER ;
790 PropertyIdentifier: ReservedIdentifier ;
792 MemberExpression: PrimaryExpression ;
793 MemberExpression: FunctionExpression ;
795 MemberExpression: MemberExpression T_LBRACKET Expression T_RBRACKET ;
797 case $rule_number: {
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));
800 } break;
803 MemberExpression: MemberExpression T_DOT PropertyIdentifier ;
805 case $rule_number: {
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));
808 } break;
811 MemberExpression: T_NEW MemberExpression Arguments ;
813 case $rule_number: {
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));
816 } break;
819 NewExpression: MemberExpression ;
821 NewExpression: T_NEW NewExpression ;
823 case $rule_number: {
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));
826 } break;
829 CallExpression: MemberExpression Arguments ;
831 case $rule_number: {
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));
834 } break;
837 CallExpression: CallExpression Arguments ;
839 case $rule_number: {
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));
842 } break;
845 CallExpression: CallExpression T_LBRACKET Expression T_RBRACKET ;
847 case $rule_number: {
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));
850 } break;
853 CallExpression: CallExpression T_DOT PropertyIdentifier ;
855 case $rule_number: {
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));
858 } break;
861 Arguments: T_LPAREN T_RPAREN ;
863 case $rule_number: {
864   sym(1).Node = 0;
865 } break;
868 Arguments: T_LPAREN ArgumentList T_RPAREN ;
870 case $rule_number: {
871   sym(1).Node = sym(2).ArgumentList->finish ();
872   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
873 } break;
876 ArgumentList: AssignmentExpression ;
878 case $rule_number: {
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));
881 } break;
884 ArgumentList: ArgumentList T_COMMA AssignmentExpression ;
886 case $rule_number: {
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));
889 } break;
892 LeftHandSideExpression: NewExpression ;
893 LeftHandSideExpression: CallExpression ;
894 PostfixExpression: LeftHandSideExpression ;
896 PostfixExpression: LeftHandSideExpression T_PLUS_PLUS ;
898 case $rule_number: {
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));
901 } break;
904 PostfixExpression: LeftHandSideExpression T_MINUS_MINUS ;
906 case $rule_number: {
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));
909 } break;
912 UnaryExpression: PostfixExpression ;
914 UnaryExpression: T_DELETE UnaryExpression ;
916 case $rule_number: {
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));
919 } break;
922 UnaryExpression: T_VOID UnaryExpression ;
924 case $rule_number: {
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));
927 } break;
930 UnaryExpression: T_TYPEOF UnaryExpression ;
932 case $rule_number: {
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));
935 } break;
938 UnaryExpression: T_PLUS_PLUS UnaryExpression ;
940 case $rule_number: {
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));
943 } break;
946 UnaryExpression: T_MINUS_MINUS UnaryExpression ;
948 case $rule_number: {
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));
951 } break;
954 UnaryExpression: T_PLUS UnaryExpression ;
956 case $rule_number: {
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));
959 } break;
962 UnaryExpression: T_MINUS UnaryExpression ;
964 case $rule_number: {
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));
967 } break;
970 UnaryExpression: T_TILDE UnaryExpression ;
972 case $rule_number: {
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));
975 } break;
978 UnaryExpression: T_NOT UnaryExpression ;
980 case $rule_number: {
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));
983 } break;
986 MultiplicativeExpression: UnaryExpression ;
988 MultiplicativeExpression: MultiplicativeExpression T_STAR UnaryExpression ;
990 case $rule_number: {
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));
993 } break;
996 MultiplicativeExpression: MultiplicativeExpression T_DIVIDE_ UnaryExpression ;
998 case $rule_number: {
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));
1001 } break;
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));
1009 } break;
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));
1019 } break;
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));
1027 } break;
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));
1037 } break;
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));
1045 } break;
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));
1053 } break;
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));
1063 } break;
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));
1071 } break;
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));
1079 } break;
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));
1087 } break;
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));
1095 } break;
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));
1103 } break;
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));
1113 } break;
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));
1121 } break;
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));
1129 } break;
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));
1137 } break;
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));
1145 } break;
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));
1155 } break;
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));
1163 } break;
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));
1171 } break;
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));
1179 } break;
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));
1189 } break;
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));
1197 } break;
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));
1205 } break;
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));
1213 } break;
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));
1223 } break;
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));
1233 } break;
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));
1243 } break;
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));
1253 } break;
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));
1263 } break;
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));
1273 } break;
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));
1283 } break;
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));
1293 } break;
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));
1303 } break;
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));
1313 } break;
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));
1323 } break;
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));
1333 } break;
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));
1343 } break;
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));
1353 } break;
1356 AssignmentOperator: T_EQ ;
1358 case $rule_number: {
1359   sym(1).ival = QSOperator::Assign;
1360 } break;
1363 AssignmentOperator: T_STAR_EQ ;
1365 case $rule_number: {
1366   sym(1).ival = QSOperator::InplaceMul;
1367 } break;
1370 AssignmentOperator: T_DIVIDE_EQ ;
1372 case $rule_number: {
1373   sym(1).ival = QSOperator::InplaceDiv;
1374 } break;
1377 AssignmentOperator: T_REMAINDER_EQ ;
1379 case $rule_number: {
1380   sym(1).ival = QSOperator::InplaceMod;
1381 } break;
1384 AssignmentOperator: T_PLUS_EQ ;
1386 case $rule_number: {
1387   sym(1).ival = QSOperator::InplaceAdd;
1388 } break;
1391 AssignmentOperator: T_MINUS_EQ ;
1393 case $rule_number: {
1394   sym(1).ival = QSOperator::InplaceSub;
1395 } break;
1398 AssignmentOperator: T_LT_LT_EQ ;
1400 case $rule_number: {
1401   sym(1).ival = QSOperator::InplaceLeftShift;
1402 } break;
1405 AssignmentOperator: T_GT_GT_EQ ;
1407 case $rule_number: {
1408   sym(1).ival = QSOperator::InplaceRightShift;
1409 } break;
1412 AssignmentOperator: T_GT_GT_GT_EQ ;
1414 case $rule_number: {
1415   sym(1).ival = QSOperator::InplaceURightShift;
1416 } break;
1419 AssignmentOperator: T_AND_EQ ;
1421 case $rule_number: {
1422   sym(1).ival = QSOperator::InplaceAnd;
1423 } break;
1426 AssignmentOperator: T_XOR_EQ ;
1428 case $rule_number: {
1429   sym(1).ival = QSOperator::InplaceXor;
1430 } break;
1433 AssignmentOperator: T_OR_EQ ;
1435 case $rule_number: {
1436   sym(1).ival = QSOperator::InplaceOr;
1437 } break;
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));
1447 } break;
1450 ExpressionOpt: ;
1452 case $rule_number: {
1453   sym(1).Node = 0;
1454 } break;
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));
1466 } break;
1469 ExpressionNotInOpt: ;
1471 case $rule_number: {
1472   sym(1).Node = 0;
1473 } break;
1476 ExpressionNotInOpt: ExpressionNotIn ;
1478 Statement: Block ;
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));
1500 } break;
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));
1508 } break;
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));
1516 } break;
1519 StatementListOpt: ;
1521 case $rule_number: {
1522   sym(1).Node = 0;
1523 } break;
1526 StatementListOpt: StatementList ;
1528 case $rule_number: {
1529   sym(1).Node = sym(1).StatementList->finish ();
1530 } break;
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));
1539 } break;
1542 VariableDeclarationKind: T_CONST ;
1544 case $rule_number: {
1545   sym(1).ival = T_CONST;
1546 } break;
1549 VariableDeclarationKind: T_VAR ;
1551 case $rule_number: {
1552   sym(1).ival = T_VAR;
1553 } break;
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));
1561 } break;
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));
1569 } break;
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));
1577 } break;
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));
1585 } break;
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));
1593 } break;
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));
1601 } break;
1604 Initialiser: T_EQ AssignmentExpression ;
1606 case $rule_number: {
1607   sym(1) = sym(2);
1608   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
1609 } break;
1612 InitialiserOpt: ;
1614 case $rule_number: {
1615   sym(1).Node = 0;
1616 } break;
1619 InitialiserOpt: Initialiser ;
1621 InitialiserNotIn: T_EQ AssignmentExpressionNotIn ;
1623 case $rule_number: {
1624   sym(1) = sym(2);
1625   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
1626 } break;
1629 InitialiserNotInOpt: ;
1631 case $rule_number: {
1632   sym(1).Node = 0;
1633 } break;
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));
1643 } break;
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));
1652 } break;
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));
1660 } break;
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));
1668 } break;
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));
1678 } break;
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));
1686 } break;
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));
1694 } break;
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));
1702 } break;
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));
1710 } break;
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));
1718 } break;
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));
1727 } break;
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));
1736 } break;
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));
1745 } break;
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));
1754 } break;
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));
1763 } break;
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));
1771 } break;
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));
1779 } break;
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));
1787 } break;
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));
1795 } break;
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));
1803 } break;
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));
1811 } break;
1814 CaseClausesOpt: ;
1816 case $rule_number: {
1817   sym(1).Node = 0;
1818 } break;
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));
1826 } break;
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));
1834 } break;
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));
1842 } break;
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));
1850 } break;
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));
1859 } break;
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));
1867 } break;
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));
1875 } break;
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));
1883 } break;
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));
1891 } break;
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));
1899 } break;
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));
1908 } break;
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));
1916 } break;
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));
1924 } break;
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));
1932 } break;
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));
1940 } break;
1943 FormalParameterListOpt: ;
1945 case $rule_number: {
1946   sym(1).Node = 0;
1947 } break;
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));
1955 } break;
1958 FunctionBodyOpt: ;
1960 case $rule_number: {
1961   sym(1).Node = 0;
1962 } break;
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));
1972 } break;
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));
1981 } break;
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));
1989 } break;
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));
1997 } break;
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));
2005 } break;
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));
2013 } break;
2016 IdentifierOpt: ;
2018 case $rule_number: {
2019   sym(1).sval = 0;
2020 } break;
2023 IdentifierOpt: T_IDENTIFIER ;
2025 PropertyNameAndValueListOpt: ;
2027 case $rule_number: {
2028   sym(1).Node = 0;
2029 } break;
2032 PropertyNameAndValueListOpt: PropertyNameAndValueList ;
2035           } // switch
2037           state_stack [tos] = nt_action (act, lhs [r] - TERMINAL_COUNT);
2039           if (rhs[r] > 1) {
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];
2043           }
2044         }
2046       else
2047         {
2048           if (saved_yytoken == -1 && automatic (driver, yytoken) && t_action (state, T_AUTOMATIC_SEMICOLON) > 0)
2049             {
2050               saved_yytoken = yytoken;
2051               yytoken = T_SEMICOLON;
2052               continue;
2053             }
2055           else if ((state == INITIAL_STATE) && (yytoken == 0)) {
2056               // accept empty input
2057               yytoken = T_SEMICOLON;
2058               continue;
2059           }
2061           int ers = state;
2062           int shifts = 0;
2063           int reduces = 0;
2064           int expected_tokens [3];
2065           for (int tk = 0; tk < TERMINAL_COUNT; ++tk)
2066             {
2067               int k = t_action (ers, tk);
2069               if (! k)
2070                 continue;
2071               else if (k < 0)
2072                 ++reduces;
2073               else if (spell [tk])
2074                 {
2075                   if (shifts < 3)
2076                     expected_tokens [shifts] = tk;
2077                   ++shifts;
2078                 }
2079             }
2081           error_message.clear ();
2082           if (shifts && shifts < 3)
2083             {
2084               bool first = true;
2086               for (int s = 0; s < shifts; ++s)
2087                 {
2088                   if (first)
2089                     error_message += QLatin1String ("Expected ");
2090                   else
2091                     error_message += QLatin1String (", ");
2093                   first = false;
2094                   error_message += QLatin1String("`");
2095                   error_message += QLatin1String (spell [expected_tokens [s]]);
2096                   error_message += QLatin1String("'");
2097                 }
2098             }
2100           if (error_message.isEmpty())
2101               error_message = lexer->errorMessage();
2103           error_lineno = lexer->startLineNo();
2104           error_column = lexer->startColumnNo();
2106           return false;
2107         }
2108     }
2110     return false;
2113 QT_END_NAMESPACE
2115 #endif // QT_NO_SCRIPT
2118 QT_END_NAMESPACE
2120 #endif // QT_NO_SCRIPT
2122 #endif // QSCRIPTPARSER_P_H