Removing semi-colon at the end of namespace
[qt-netbsd.git] / src / script / parser / qscript.g
blobb0b0cdf9bacebc3197d565023859923d9990dfa8
1 ----------------------------------------------------------------------------
2 --
3 -- Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
4 -- All rights reserved.
5 -- Contact: Nokia Corporation (qt-info@nokia.com)
6 --
7 -- This file is part of the QtScript module of the Qt Toolkit.
8 --
9 -- $QT_BEGIN_LICENSE:LGPL$
10 -- No Commercial Usage
11 -- This file contains pre-release code and may not be distributed.
12 -- You may use this file in accordance with the terms and conditions
13 -- contained in the Technology Preview License Agreement accompanying
14 -- this package.
16 -- GNU Lesser General Public License Usage
17 -- Alternatively, this file may be used under the terms of the GNU Lesser
18 -- General Public License version 2.1 as published by the Free Software
19 -- Foundation and appearing in the file LICENSE.LGPL included in the
20 -- packaging of this file.  Please review the following information to
21 -- ensure the GNU Lesser General Public License version 2.1 requirements
22 -- will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
24 -- In addition, as a special exception, Nokia gives you certain additional
25 -- rights.  These rights are described in the Nokia Qt LGPL Exception
26 -- version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
28 -- If you have questions regarding the use of this file, please contact
29 -- Nokia at qt-info@nokia.com.
38 -- $QT_END_LICENSE$
40 ----------------------------------------------------------------------------
42 %parser         QScriptGrammar
43 %decl           qscriptparser_p.h
44 %impl           qscriptparser.cpp
45 %expect         3
46 %expect-rr      1
48 %token T_AND "&"                T_AND_AND "&&"              T_AND_EQ "&="
49 %token T_BREAK "break"          T_CASE "case"               T_CATCH "catch"
50 %token T_COLON ":"              T_COMMA ";"                 T_CONTINUE "continue"
51 %token T_DEFAULT "default"      T_DELETE "delete"           T_DIVIDE_ "/"
52 %token T_DIVIDE_EQ "/="         T_DO "do"                   T_DOT "."
53 %token T_ELSE "else"            T_EQ "="                    T_EQ_EQ "=="
54 %token T_EQ_EQ_EQ "==="         T_FINALLY "finally"         T_FOR "for"
55 %token T_FUNCTION "function"    T_GE ">="                   T_GT ">"
56 %token T_GT_GT ">>"             T_GT_GT_EQ ">>="            T_GT_GT_GT ">>>"
57 %token T_GT_GT_GT_EQ ">>>="     T_IDENTIFIER "identifier"   T_IF "if"
58 %token T_IN "in"                T_INSTANCEOF "instanceof"   T_LBRACE "{"
59 %token T_LBRACKET "["           T_LE "<="                   T_LPAREN "("
60 %token T_LT "<"                 T_LT_LT "<<"                T_LT_LT_EQ "<<="
61 %token T_MINUS "-"              T_MINUS_EQ "-="             T_MINUS_MINUS "--"
62 %token T_NEW "new"              T_NOT "!"                   T_NOT_EQ "!="
63 %token T_NOT_EQ_EQ "!=="        T_NUMERIC_LITERAL "numeric literal"     T_OR "|"
64 %token T_OR_EQ "|="             T_OR_OR "||"                T_PLUS "+"
65 %token T_PLUS_EQ "+="           T_PLUS_PLUS "++"            T_QUESTION "?"
66 %token T_RBRACE "}"             T_RBRACKET "]"              T_REMAINDER "%"
67 %token T_REMAINDER_EQ "%="      T_RETURN "return"           T_RPAREN ")"
68 %token T_SEMICOLON ";"          T_AUTOMATIC_SEMICOLON       T_STAR "*"
69 %token T_STAR_EQ "*="           T_STRING_LITERAL "string literal"
70 %token T_SWITCH "switch"        T_THIS "this"               T_THROW "throw"
71 %token T_TILDE "~"              T_TRY "try"                 T_TYPEOF "typeof"
72 %token T_VAR "var"              T_VOID "void"               T_WHILE "while"
73 %token T_WITH "with"            T_XOR "^"                   T_XOR_EQ "^="
74 %token T_NULL "null"            T_TRUE "true"               T_FALSE "false"
75 %token T_CONST "const"
76 %token T_DEBUGGER "debugger"
77 %token T_RESERVED_WORD "reserved word"
79 %start Program
82 /****************************************************************************
84 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
85 ** All rights reserved.
86 ** Contact: Nokia Corporation (qt-info@nokia.com)
88 ** This file is part of the QtScript module of the Qt Toolkit.
90 ** contained in the Technology Preview License Agreement accompanying
91 ** this package.
92 ** In addition, as a special exception, Nokia gives you certain
93 ** additional rights.  These rights are described in the Nokia Qt LGPL
94 ** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this
95 ** package.
97 ** If you have questions regarding the use of this file, please contact
98 ** Nokia at qt-info@nokia.com.
107 ** $QT_END_LICENSE$
109 ****************************************************************************/
111 #include <QtCore/QtDebug>
113 #include <string.h>
115 #include "qscriptengine.h"
116 #include "qscriptengine_p.h"
117 #include "qscriptvalueimpl_p.h"
118 #include "qscriptcontext_p.h"
119 #include "qscriptmember_p.h"
120 #include "qscriptobject_p.h"
121 #include "qscriptlexer_p.h"
122 #include "qscriptast_p.h"
123 #include "qscriptnodepool_p.h"
125 #define Q_SCRIPT_UPDATE_POSITION(node, startloc, endloc) do { \
126     node->startLine = startloc.startLine; \
127     node->startColumn = startloc.startColumn; \
128     node->endLine = endloc.endLine; \
129     node->endColumn = endloc.endColumn; \
130 } while (0)
135 /****************************************************************************
137 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
138 ** All rights reserved.
139 ** Contact: Nokia Corporation (qt-info@nokia.com)
141 ** This file is part of the QtScript module of the Qt Toolkit.
143 ** contained in the Technology Preview License Agreement accompanying
144 ** this package.
145 ** additional rights.  These rights are described in the Nokia Qt LGPL
146 ** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this
147 ** If you have questions regarding the use of this file, please contact
148 ** Nokia at qt-info@nokia.com.
156 ** $QT_END_LICENSE$
158 ****************************************************************************/
161 //  W A R N I N G
162 //  -------------
164 // This file is not part of the Qt API.  It exists purely as an
165 // implementation detail.  This header file may change from version to
166 // version without notice, or even be removed.
168 // We mean it.
172 // This file is automatically generated from qscript.g.
173 // Changes will be lost.
176 #ifndef QSCRIPTPARSER_P_H
177 #define QSCRIPTPARSER_P_H
179 #include "qscriptgrammar_p.h"
181 #include "qscriptastfwd_p.h"
183 QT_BEGIN_NAMESPACE
185 class QString;
186 class QScriptEnginePrivate;
187 class QScriptNameIdImpl;
189 class QScriptParser: protected $table
191 public:
192     union Value {
193       int ival;
194       double dval;
195       QScriptNameIdImpl *sval;
196       QScript::AST::ArgumentList *ArgumentList;
197       QScript::AST::CaseBlock *CaseBlock;
198       QScript::AST::CaseClause *CaseClause;
199       QScript::AST::CaseClauses *CaseClauses;
200       QScript::AST::Catch *Catch;
201       QScript::AST::DefaultClause *DefaultClause;
202       QScript::AST::ElementList *ElementList;
203       QScript::AST::Elision *Elision;
204       QScript::AST::ExpressionNode *Expression;
205       QScript::AST::Finally *Finally;
206       QScript::AST::FormalParameterList *FormalParameterList;
207       QScript::AST::FunctionBody *FunctionBody;
208       QScript::AST::FunctionDeclaration *FunctionDeclaration;
209       QScript::AST::Node *Node;
210       QScript::AST::PropertyName *PropertyName;
211       QScript::AST::PropertyNameAndValueList *PropertyNameAndValueList;
212       QScript::AST::SourceElement *SourceElement;
213       QScript::AST::SourceElements *SourceElements;
214       QScript::AST::Statement *Statement;
215       QScript::AST::StatementList *StatementList;
216       QScript::AST::VariableDeclaration *VariableDeclaration;
217       QScript::AST::VariableDeclarationList *VariableDeclarationList;
218     };
220     struct Location {
221       int startLine;
222       int startColumn;
223       int endLine;
224       int endColumn;
225     };
227 public:
228     QScriptParser();
229     ~QScriptParser();
231     bool parse(QScriptEnginePrivate *driver);
233     inline QString errorMessage() const
234     { return error_message; }
235     inline int errorLineNumber() const
236     { return error_lineno; }
237     inline int errorColumnNumber() const
238     { return error_column; }
240 protected:
241     inline void reallocateStack();
243     inline Value &sym(int index)
244     { return sym_stack [tos + index - 1]; }
246     inline Location &loc(int index)
247     { return location_stack [tos + index - 2]; }
249 protected:
250     int tos;
251     int stack_size;
252     Value *sym_stack;
253     int *state_stack;
254     Location *location_stack;
255     QString error_message;
256     int error_lineno;
257     int error_column;
260 inline void QScriptParser::reallocateStack()
262     if (! stack_size)
263         stack_size = 128;
264     else
265         stack_size <<= 1;
267     sym_stack = reinterpret_cast<Value*> (qRealloc(sym_stack, stack_size * sizeof(Value)));
268     state_stack = reinterpret_cast<int*> (qRealloc(state_stack, stack_size * sizeof(int)));
269     location_stack = reinterpret_cast<Location*> (qRealloc(location_stack, stack_size * sizeof(Location)));
277 #include "qscriptparser_p.h"
280 // This file is automatically generated from qscript.g.
281 // Changes will be lost.
284 QT_BEGIN_NAMESPACE
286 inline static bool automatic(QScriptEnginePrivate *driver, int token)
288     return token == $table::T_RBRACE
289         || token == 0
290         || driver->lexer()->prevTerminator();
294 QScriptParser::QScriptParser():
295     tos(0),
296     stack_size(0),
297     sym_stack(0),
298     state_stack(0),
299     location_stack(0)
303 QScriptParser::~QScriptParser()
305     if (stack_size) {
306         qFree(sym_stack);
307         qFree(state_stack);
308         qFree(location_stack);
309     }
312 static inline QScriptParser::Location location(QScript::Lexer *lexer)
314     QScriptParser::Location loc;
315     loc.startLine = lexer->startLineNo();
316     loc.startColumn = lexer->startColumnNo();
317     loc.endLine = lexer->endLineNo();
318     loc.endColumn = lexer->endColumnNo();
319     return loc;
322 bool QScriptParser::parse(QScriptEnginePrivate *driver)
324   const int INITIAL_STATE = 0;
325   QScript::Lexer *lexer = driver->lexer();
327   int yytoken = -1;
328   int saved_yytoken = -1;
330   reallocateStack();
332   tos = 0;
333   state_stack[++tos] = INITIAL_STATE;
335   while (true)
336     {
337       const int state = state_stack [tos];
338       if (yytoken == -1 && - TERMINAL_COUNT != action_index [state])
339         {
340           if (saved_yytoken == -1)
341             {
342               yytoken = lexer->lex();
343               location_stack [tos] = location(lexer);
344             }
345           else
346             {
347               yytoken = saved_yytoken;
348               saved_yytoken = -1;
349             }
350         }
352       int act = t_action (state, yytoken);
354       if (act == ACCEPT_STATE)
355         return true;
357       else if (act > 0)
358         {
359           if (++tos == stack_size)
360             reallocateStack();
362           sym_stack [tos].dval = lexer->dval ();
363           state_stack [tos] = act;
364           location_stack [tos] = location(lexer);
365           yytoken = -1;
366         }
368       else if (act < 0)
369         {
370           int r = - act - 1;
372           tos -= rhs [r];
373           act = state_stack [tos++];
375           switch (r) {
378 PrimaryExpression: T_THIS ;
380 case $rule_number: {
381   sym(1).Node = QScript::makeAstNode<QScript::AST::ThisExpression> (driver->nodePool());
382   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
383 } break;
386 PrimaryExpression: T_IDENTIFIER ;
388 case $rule_number: {
389   sym(1).Node = QScript::makeAstNode<QScript::AST::IdentifierExpression> (driver->nodePool(), sym(1).sval);
390   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
391 } break;
394 PrimaryExpression: T_NULL ;
396 case $rule_number: {
397   sym(1).Node = QScript::makeAstNode<QScript::AST::NullExpression> (driver->nodePool());
398   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
399 } break;
402 PrimaryExpression: T_TRUE ;
404 case $rule_number: {
405   sym(1).Node = QScript::makeAstNode<QScript::AST::TrueLiteral> (driver->nodePool());
406   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
407 } break;
410 PrimaryExpression: T_FALSE ;
412 case $rule_number: {
413   sym(1).Node = QScript::makeAstNode<QScript::AST::FalseLiteral> (driver->nodePool());
414   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
415 } break;
418 PrimaryExpression: T_NUMERIC_LITERAL ;
420 case $rule_number: {
421   sym(1).Node = QScript::makeAstNode<QScript::AST::NumericLiteral> (driver->nodePool(), sym(1).dval);
422   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
423 } break;
426 PrimaryExpression: T_STRING_LITERAL ;
428 case $rule_number: {
429   sym(1).Node = QScript::makeAstNode<QScript::AST::StringLiteral> (driver->nodePool(), sym(1).sval);
430   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
431 } break;
434 PrimaryExpression: T_DIVIDE_ ;
436 #define Q_SCRIPT_REGEXPLITERAL_RULE1 $rule_number
439 case $rule_number: {
440   bool rx = lexer->scanRegExp(QScript::Lexer::NoPrefix);
441   if (!rx) {
442       error_message = lexer->errorMessage();
443       error_lineno = lexer->startLineNo();
444       error_column = lexer->startColumnNo();
445       return false;
446   }
447   sym(1).Node = QScript::makeAstNode<QScript::AST::RegExpLiteral> (driver->nodePool(), lexer->pattern, lexer->flags);
448   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
449 } break;
452 PrimaryExpression: T_DIVIDE_EQ ;
454 #define Q_SCRIPT_REGEXPLITERAL_RULE2 $rule_number
457 case $rule_number: {
458   bool rx = lexer->scanRegExp(QScript::Lexer::EqualPrefix);
459   if (!rx) {
460       error_message = lexer->errorMessage();
461       error_lineno = lexer->startLineNo();
462       error_column = lexer->startColumnNo();
463       return false;
464   }
465   sym(1).Node = QScript::makeAstNode<QScript::AST::RegExpLiteral> (driver->nodePool(), lexer->pattern, lexer->flags);
466   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
467 } break;
470 PrimaryExpression: T_LBRACKET ElisionOpt T_RBRACKET ;
472 case $rule_number: {
473   sym(1).Node = QScript::makeAstNode<QScript::AST::ArrayLiteral> (driver->nodePool(), sym(2).Elision);
474   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
475 } break;
478 PrimaryExpression: T_LBRACKET ElementList T_RBRACKET ;
480 case $rule_number: {
481   sym(1).Node = QScript::makeAstNode<QScript::AST::ArrayLiteral> (driver->nodePool(), sym(2).ElementList->finish ());
482   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
483 } break;
486 PrimaryExpression: T_LBRACKET ElementList T_COMMA ElisionOpt T_RBRACKET ;
488 case $rule_number: {
489   sym(1).Node = QScript::makeAstNode<QScript::AST::ArrayLiteral> (driver->nodePool(), sym(2).ElementList->finish (), sym(4).Elision);
490   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5));
491 } break;
494 -- PrimaryExpression: T_LBRACE T_RBRACE ;
495 -- /.
496 -- case $rule_number: {
497 --   sym(1).Node = QScript::makeAstNode<QScript::AST::ObjectLiteral> (driver->nodePool());
498 --   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
499 -- } break;
500 -- ./
502 PrimaryExpression: T_LBRACE PropertyNameAndValueListOpt T_RBRACE ;
504 case $rule_number: {
505   if (sym(2).Node)
506     sym(1).Node = QScript::makeAstNode<QScript::AST::ObjectLiteral> (driver->nodePool(), sym(2).PropertyNameAndValueList->finish ());
507   else
508     sym(1).Node = QScript::makeAstNode<QScript::AST::ObjectLiteral> (driver->nodePool());
509   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
510 } break;
513 PrimaryExpression: T_LBRACE PropertyNameAndValueList T_COMMA T_RBRACE ;
515 case $rule_number: {
516   sym(1).Node = QScript::makeAstNode<QScript::AST::ObjectLiteral> (driver->nodePool(), sym(2).PropertyNameAndValueList->finish ());
517   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4));
518 } break;
521 PrimaryExpression: T_LPAREN Expression T_RPAREN ;
523 case $rule_number: {
524   sym(1) = sym(2);
525   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
526 } break;
529 ElementList: ElisionOpt AssignmentExpression ;
531 case $rule_number: {
532   sym(1).Node = QScript::makeAstNode<QScript::AST::ElementList> (driver->nodePool(), sym(1).Elision, sym(2).Expression);
533   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
534 } break;
537 ElementList: ElementList T_COMMA ElisionOpt AssignmentExpression ;
539 case $rule_number: {
540   sym(1).Node = QScript::makeAstNode<QScript::AST::ElementList> (driver->nodePool(), sym(1).ElementList, sym(3).Elision, sym(4).Expression);
541   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4));
542 } break;
545 Elision: T_COMMA ;
547 case $rule_number: {
548   sym(1).Node = QScript::makeAstNode<QScript::AST::Elision> (driver->nodePool());
549   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
550 } break;
553 Elision: Elision T_COMMA ;
555 case $rule_number: {
556   sym(1).Node = QScript::makeAstNode<QScript::AST::Elision> (driver->nodePool(), sym(1).Elision);
557   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
558 } break;
561 ElisionOpt: ;
563 case $rule_number: {
564   sym(1).Node = 0;
565 } break;
568 ElisionOpt: Elision ;
570 case $rule_number: {
571   sym(1).Elision = sym(1).Elision->finish ();
572   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
573 } break;
576 PropertyNameAndValueList: PropertyName T_COLON AssignmentExpression ;
578 case $rule_number: {
579   sym(1).Node = QScript::makeAstNode<QScript::AST::PropertyNameAndValueList> (driver->nodePool(), sym(1).PropertyName, sym(3).Expression);
580   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
581 } break;
584 PropertyNameAndValueList: PropertyNameAndValueList T_COMMA PropertyName T_COLON AssignmentExpression ;
586 case $rule_number: {
587   sym(1).Node = QScript::makeAstNode<QScript::AST::PropertyNameAndValueList> (driver->nodePool(), sym(1).PropertyNameAndValueList, sym(3).PropertyName, sym(5).Expression);
588   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5));
589 } break;
592 PropertyName: T_IDENTIFIER ;
594 case $rule_number: {
595   sym(1).Node = QScript::makeAstNode<QScript::AST::IdentifierPropertyName> (driver->nodePool(), sym(1).sval);
596   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
597 } break;
600 PropertyName: T_STRING_LITERAL ;
602 case $rule_number: {
603   sym(1).Node = QScript::makeAstNode<QScript::AST::StringLiteralPropertyName> (driver->nodePool(), sym(1).sval);
604   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
605 } break;
608 PropertyName: T_NUMERIC_LITERAL ;
610 case $rule_number: {
611   sym(1).Node = QScript::makeAstNode<QScript::AST::NumericLiteralPropertyName> (driver->nodePool(), sym(1).dval);
612   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
613 } break;
616 PropertyName: ReservedIdentifier ;
618 case $rule_number: {
619   sym(1).Node = QScript::makeAstNode<QScript::AST::IdentifierPropertyName> (driver->nodePool(), sym(1).sval);
620   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
621 } break;
624 ReservedIdentifier: T_BREAK ;
626 case $rule_number:
628 ReservedIdentifier: T_CASE ;
630 case $rule_number:
632 ReservedIdentifier: T_CATCH ;
634 case $rule_number:
636 ReservedIdentifier: T_CONTINUE ;
638 case $rule_number:
640 ReservedIdentifier: T_DEFAULT ;
642 case $rule_number:
644 ReservedIdentifier: T_DELETE ;
646 case $rule_number:
648 ReservedIdentifier: T_DO ;
650 case $rule_number:
652 ReservedIdentifier: T_ELSE ;
654 case $rule_number:
656 ReservedIdentifier: T_FALSE ;
658 case $rule_number:
660 ReservedIdentifier: T_FINALLY ;
662 case $rule_number:
664 ReservedIdentifier: T_FOR ;
666 case $rule_number:
668 ReservedIdentifier: T_FUNCTION ;
670 case $rule_number:
672 ReservedIdentifier: T_IF ;
674 case $rule_number:
676 ReservedIdentifier: T_IN ;
678 case $rule_number:
680 ReservedIdentifier: T_INSTANCEOF ;
682 case $rule_number:
684 ReservedIdentifier: T_NEW ;
686 case $rule_number:
688 ReservedIdentifier: T_NULL ;
690 case $rule_number:
692 ReservedIdentifier: T_RETURN ;
694 case $rule_number:
696 ReservedIdentifier: T_SWITCH ;
698 case $rule_number:
700 ReservedIdentifier: T_THIS ;
702 case $rule_number:
704 ReservedIdentifier: T_THROW ;
706 case $rule_number:
708 ReservedIdentifier: T_TRUE ;
710 case $rule_number:
712 ReservedIdentifier: T_TRY ;
714 case $rule_number:
716 ReservedIdentifier: T_TYPEOF ;
718 case $rule_number:
720 ReservedIdentifier: T_VAR ;
722 case $rule_number:
724 ReservedIdentifier: T_VOID ;
726 case $rule_number:
728 ReservedIdentifier: T_WHILE ;
730 case $rule_number:
732 ReservedIdentifier: T_CONST ;
734 case $rule_number:
736 ReservedIdentifier: T_DEBUGGER ;
738 case $rule_number:
740 ReservedIdentifier: T_RESERVED_WORD ;
742 case $rule_number:
744 ReservedIdentifier: T_WITH ;
746 case $rule_number:
748   sym(1).sval = driver->intern(lexer->characterBuffer(), lexer->characterCount());
749 } break;
752 PropertyIdentifier: T_IDENTIFIER ;
753 PropertyIdentifier: ReservedIdentifier ;
755 MemberExpression: PrimaryExpression ;
756 MemberExpression: FunctionExpression ;
758 MemberExpression: MemberExpression T_LBRACKET Expression T_RBRACKET ;
760 case $rule_number: {
761   sym(1).Node = QScript::makeAstNode<QScript::AST::ArrayMemberExpression> (driver->nodePool(), sym(1).Expression, sym(3).Expression);
762   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4));
763 } break;
766 MemberExpression: MemberExpression T_DOT PropertyIdentifier ;
768 case $rule_number: {
769   sym(1).Node = QScript::makeAstNode<QScript::AST::FieldMemberExpression> (driver->nodePool(), sym(1).Expression, sym(3).sval);
770   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4));
771 } break;
774 MemberExpression: T_NEW MemberExpression Arguments ;
776 case $rule_number: {
777   sym(1).Node = QScript::makeAstNode<QScript::AST::NewMemberExpression> (driver->nodePool(), sym(2).Expression, sym(3).ArgumentList);
778   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
779 } break;
782 NewExpression: MemberExpression ;
784 NewExpression: T_NEW NewExpression ;
786 case $rule_number: {
787   sym(1).Node = QScript::makeAstNode<QScript::AST::NewExpression> (driver->nodePool(), sym(2).Expression);
788   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
789 } break;
792 CallExpression: MemberExpression Arguments ;
794 case $rule_number: {
795   sym(1).Node = QScript::makeAstNode<QScript::AST::CallExpression> (driver->nodePool(), sym(1).Expression, sym(2).ArgumentList);
796   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
797 } break;
800 CallExpression: CallExpression Arguments ;
802 case $rule_number: {
803   sym(1).Node = QScript::makeAstNode<QScript::AST::CallExpression> (driver->nodePool(), sym(1).Expression, sym(2).ArgumentList);
804   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
805 } break;
808 CallExpression: CallExpression T_LBRACKET Expression T_RBRACKET ;
810 case $rule_number: {
811   sym(1).Node = QScript::makeAstNode<QScript::AST::ArrayMemberExpression> (driver->nodePool(), sym(1).Expression, sym(3).Expression);
812   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4));
813 } break;
816 CallExpression: CallExpression T_DOT PropertyIdentifier ;
818 case $rule_number: {
819   sym(1).Node = QScript::makeAstNode<QScript::AST::FieldMemberExpression> (driver->nodePool(), sym(1).Expression, sym(3).sval);
820   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
821 } break;
824 Arguments: T_LPAREN T_RPAREN ;
826 case $rule_number: {
827   sym(1).Node = 0;
828 } break;
831 Arguments: T_LPAREN ArgumentList T_RPAREN ;
833 case $rule_number: {
834   sym(1).Node = sym(2).ArgumentList->finish ();
835   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
836 } break;
839 ArgumentList: AssignmentExpression ;
841 case $rule_number: {
842   sym(1).Node = QScript::makeAstNode<QScript::AST::ArgumentList> (driver->nodePool(), sym(1).Expression);
843   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
844 } break;
847 ArgumentList: ArgumentList T_COMMA AssignmentExpression ;
849 case $rule_number: {
850   sym(1).Node = QScript::makeAstNode<QScript::AST::ArgumentList> (driver->nodePool(), sym(1).ArgumentList, sym(3).Expression);
851   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
852 } break;
855 LeftHandSideExpression: NewExpression ;
856 LeftHandSideExpression: CallExpression ;
857 PostfixExpression: LeftHandSideExpression ;
859 PostfixExpression: LeftHandSideExpression T_PLUS_PLUS ;
861 case $rule_number: {
862   sym(1).Node = QScript::makeAstNode<QScript::AST::PostIncrementExpression> (driver->nodePool(), sym(1).Expression);
863   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
864 } break;
867 PostfixExpression: LeftHandSideExpression T_MINUS_MINUS ;
869 case $rule_number: {
870   sym(1).Node = QScript::makeAstNode<QScript::AST::PostDecrementExpression> (driver->nodePool(), sym(1).Expression);
871   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
872 } break;
875 UnaryExpression: PostfixExpression ;
877 UnaryExpression: T_DELETE UnaryExpression ;
879 case $rule_number: {
880   sym(1).Node = QScript::makeAstNode<QScript::AST::DeleteExpression> (driver->nodePool(), sym(2).Expression);
881   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
882 } break;
885 UnaryExpression: T_VOID UnaryExpression ;
887 case $rule_number: {
888   sym(1).Node = QScript::makeAstNode<QScript::AST::VoidExpression> (driver->nodePool(), sym(2).Expression);
889   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
890 } break;
893 UnaryExpression: T_TYPEOF UnaryExpression ;
895 case $rule_number: {
896   sym(1).Node = QScript::makeAstNode<QScript::AST::TypeOfExpression> (driver->nodePool(), sym(2).Expression);
897   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
898 } break;
901 UnaryExpression: T_PLUS_PLUS UnaryExpression ;
903 case $rule_number: {
904   sym(1).Node = QScript::makeAstNode<QScript::AST::PreIncrementExpression> (driver->nodePool(), sym(2).Expression);
905   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
906 } break;
909 UnaryExpression: T_MINUS_MINUS UnaryExpression ;
911 case $rule_number: {
912   sym(1).Node = QScript::makeAstNode<QScript::AST::PreDecrementExpression> (driver->nodePool(), sym(2).Expression);
913   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
914 } break;
917 UnaryExpression: T_PLUS UnaryExpression ;
919 case $rule_number: {
920   sym(1).Node = QScript::makeAstNode<QScript::AST::UnaryPlusExpression> (driver->nodePool(), sym(2).Expression);
921   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
922 } break;
925 UnaryExpression: T_MINUS UnaryExpression ;
927 case $rule_number: {
928   sym(1).Node = QScript::makeAstNode<QScript::AST::UnaryMinusExpression> (driver->nodePool(), sym(2).Expression);
929   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
930 } break;
933 UnaryExpression: T_TILDE UnaryExpression ;
935 case $rule_number: {
936   sym(1).Node = QScript::makeAstNode<QScript::AST::TildeExpression> (driver->nodePool(), sym(2).Expression);
937   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
938 } break;
941 UnaryExpression: T_NOT UnaryExpression ;
943 case $rule_number: {
944   sym(1).Node = QScript::makeAstNode<QScript::AST::NotExpression> (driver->nodePool(), sym(2).Expression);
945   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
946 } break;
949 MultiplicativeExpression: UnaryExpression ;
951 MultiplicativeExpression: MultiplicativeExpression T_STAR UnaryExpression ;
953 case $rule_number: {
954   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Mul, sym(3).Expression);
955   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
956 } break;
959 MultiplicativeExpression: MultiplicativeExpression T_DIVIDE_ UnaryExpression ;
961 case $rule_number: {
962   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Div, sym(3).Expression);
963   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
964 } break;
967 MultiplicativeExpression: MultiplicativeExpression T_REMAINDER UnaryExpression ;
969 case $rule_number: {
970   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Mod, sym(3).Expression);
971   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
972 } break;
975 AdditiveExpression: MultiplicativeExpression ;
977 AdditiveExpression: AdditiveExpression T_PLUS MultiplicativeExpression ;
979 case $rule_number: {
980   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Add, sym(3).Expression);
981   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
982 } break;
985 AdditiveExpression: AdditiveExpression T_MINUS MultiplicativeExpression ;
987 case $rule_number: {
988   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Sub, sym(3).Expression);
989   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
990 } break;
993 ShiftExpression: AdditiveExpression ;
995 ShiftExpression: ShiftExpression T_LT_LT AdditiveExpression ;
997 case $rule_number: {
998   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::LShift, sym(3).Expression);
999   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1000 } break;
1003 ShiftExpression: ShiftExpression T_GT_GT AdditiveExpression ;
1005 case $rule_number: {
1006   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::RShift, sym(3).Expression);
1007   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1008 } break;
1011 ShiftExpression: ShiftExpression T_GT_GT_GT AdditiveExpression ;
1013 case $rule_number: {
1014   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::URShift, sym(3).Expression);
1015   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1016 } break;
1019 RelationalExpression: ShiftExpression ;
1021 RelationalExpression: RelationalExpression T_LT ShiftExpression ;
1023 case $rule_number: {
1024   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Lt, sym(3).Expression);
1025   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1026 } break;
1029 RelationalExpression: RelationalExpression T_GT ShiftExpression ;
1031 case $rule_number: {
1032   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Gt, sym(3).Expression);
1033   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1034 } break;
1037 RelationalExpression: RelationalExpression T_LE ShiftExpression ;
1039 case $rule_number: {
1040   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Le, sym(3).Expression);
1041   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1042 } break;
1045 RelationalExpression: RelationalExpression T_GE ShiftExpression ;
1047 case $rule_number: {
1048   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Ge, sym(3).Expression);
1049   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1050 } break;
1053 RelationalExpression: RelationalExpression T_INSTANCEOF ShiftExpression ;
1055 case $rule_number: {
1056   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::InstanceOf, sym(3).Expression);
1057   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1058 } break;
1061 RelationalExpression: RelationalExpression T_IN ShiftExpression ;
1063 case $rule_number: {
1064   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::In, sym(3).Expression);
1065   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1066 } break;
1069 RelationalExpressionNotIn: ShiftExpression ;
1071 RelationalExpressionNotIn: RelationalExpressionNotIn T_LT ShiftExpression ;
1073 case $rule_number: {
1074   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Lt, sym(3).Expression);
1075   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1076 } break;
1079 RelationalExpressionNotIn: RelationalExpressionNotIn T_GT ShiftExpression ;
1081 case $rule_number: {
1082   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Gt, sym(3).Expression);
1083   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1084 } break;
1087 RelationalExpressionNotIn: RelationalExpressionNotIn T_LE ShiftExpression ;
1089 case $rule_number: {
1090   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Le, sym(3).Expression);
1091   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1092 } break;
1095 RelationalExpressionNotIn: RelationalExpressionNotIn T_GE ShiftExpression ;
1097 case $rule_number: {
1098   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Ge, sym(3).Expression);
1099   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1100 } break;
1103 RelationalExpressionNotIn: RelationalExpressionNotIn T_INSTANCEOF ShiftExpression ;
1105 case $rule_number: {
1106   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::InstanceOf, sym(3).Expression);
1107   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1108 } break;
1111 EqualityExpression: RelationalExpression ;
1113 EqualityExpression: EqualityExpression T_EQ_EQ RelationalExpression ;
1115 case $rule_number: {
1116   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Equal, sym(3).Expression);
1117   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1118 } break;
1121 EqualityExpression: EqualityExpression T_NOT_EQ RelationalExpression ;
1123 case $rule_number: {
1124   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::NotEqual, sym(3).Expression);
1125   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1126 } break;
1129 EqualityExpression: EqualityExpression T_EQ_EQ_EQ RelationalExpression ;
1131 case $rule_number: {
1132   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::StrictEqual, sym(3).Expression);
1133   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1134 } break;
1137 EqualityExpression: EqualityExpression T_NOT_EQ_EQ RelationalExpression ;
1139 case $rule_number: {
1140   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::StrictNotEqual, sym(3).Expression);
1141   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1142 } break;
1145 EqualityExpressionNotIn: RelationalExpressionNotIn ;
1147 EqualityExpressionNotIn: EqualityExpressionNotIn T_EQ_EQ RelationalExpressionNotIn ;
1149 case $rule_number: {
1150   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Equal, sym(3).Expression);
1151   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1152 } break;
1155 EqualityExpressionNotIn: EqualityExpressionNotIn T_NOT_EQ RelationalExpressionNotIn;
1157 case $rule_number: {
1158   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::NotEqual, sym(3).Expression);
1159   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1160 } break;
1163 EqualityExpressionNotIn: EqualityExpressionNotIn T_EQ_EQ_EQ RelationalExpressionNotIn ;
1165 case $rule_number: {
1166   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::StrictEqual, sym(3).Expression);
1167   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1168 } break;
1171 EqualityExpressionNotIn: EqualityExpressionNotIn T_NOT_EQ_EQ RelationalExpressionNotIn ;
1173 case $rule_number: {
1174   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::StrictNotEqual, sym(3).Expression);
1175   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1176 } break;
1179 BitwiseANDExpression: EqualityExpression ;
1181 BitwiseANDExpression: BitwiseANDExpression T_AND EqualityExpression ;
1183 case $rule_number: {
1184   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::BitAnd, sym(3).Expression);
1185   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1186 } break;
1189 BitwiseANDExpressionNotIn: EqualityExpressionNotIn ;
1191 BitwiseANDExpressionNotIn: BitwiseANDExpressionNotIn T_AND EqualityExpressionNotIn ;
1193 case $rule_number: {
1194   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::BitAnd, sym(3).Expression);
1195   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1196 } break;
1199 BitwiseXORExpression: BitwiseANDExpression ;
1201 BitwiseXORExpression: BitwiseXORExpression T_XOR BitwiseANDExpression ;
1203 case $rule_number: {
1204   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::BitXor, sym(3).Expression);
1205   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1206 } break;
1209 BitwiseXORExpressionNotIn: BitwiseANDExpressionNotIn ;
1211 BitwiseXORExpressionNotIn: BitwiseXORExpressionNotIn T_XOR BitwiseANDExpressionNotIn ;
1213 case $rule_number: {
1214   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::BitXor, sym(3).Expression);
1215   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1216 } break;
1219 BitwiseORExpression: BitwiseXORExpression ;
1221 BitwiseORExpression: BitwiseORExpression T_OR BitwiseXORExpression ;
1223 case $rule_number: {
1224   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::BitOr, sym(3).Expression);
1225   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1226 } break;
1229 BitwiseORExpressionNotIn: BitwiseXORExpressionNotIn ;
1231 BitwiseORExpressionNotIn: BitwiseORExpressionNotIn T_OR BitwiseXORExpressionNotIn ;
1233 case $rule_number: {
1234   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::BitOr, sym(3).Expression);
1235   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1236 } break;
1239 LogicalANDExpression: BitwiseORExpression ;
1241 LogicalANDExpression: LogicalANDExpression T_AND_AND BitwiseORExpression ;
1243 case $rule_number: {
1244   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::And, sym(3).Expression);
1245   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1246 } break;
1249 LogicalANDExpressionNotIn: BitwiseORExpressionNotIn ;
1251 LogicalANDExpressionNotIn: LogicalANDExpressionNotIn T_AND_AND BitwiseORExpressionNotIn ;
1253 case $rule_number: {
1254   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::And, sym(3).Expression);
1255   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1256 } break;
1259 LogicalORExpression: LogicalANDExpression ;
1261 LogicalORExpression: LogicalORExpression T_OR_OR LogicalANDExpression ;
1263 case $rule_number: {
1264   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Or, sym(3).Expression);
1265   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1266 } break;
1269 LogicalORExpressionNotIn: LogicalANDExpressionNotIn ;
1271 LogicalORExpressionNotIn: LogicalORExpressionNotIn T_OR_OR LogicalANDExpressionNotIn ;
1273 case $rule_number: {
1274   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Or, sym(3).Expression);
1275   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1276 } break;
1279 ConditionalExpression: LogicalORExpression ;
1281 ConditionalExpression: LogicalORExpression T_QUESTION AssignmentExpression T_COLON AssignmentExpression ;
1283 case $rule_number: {
1284   sym(1).Node = QScript::makeAstNode<QScript::AST::ConditionalExpression> (driver->nodePool(), sym(1).Expression, sym(3).Expression, sym(5).Expression);
1285   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1286 } break;
1289 ConditionalExpressionNotIn: LogicalORExpressionNotIn ;
1291 ConditionalExpressionNotIn: LogicalORExpressionNotIn T_QUESTION AssignmentExpressionNotIn T_COLON AssignmentExpressionNotIn ;
1293 case $rule_number: {
1294   sym(1).Node = QScript::makeAstNode<QScript::AST::ConditionalExpression> (driver->nodePool(), sym(1).Expression, sym(3).Expression, sym(5).Expression);
1295   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1296 } break;
1299 AssignmentExpression: ConditionalExpression ;
1301 AssignmentExpression: LeftHandSideExpression AssignmentOperator AssignmentExpression ;
1303 case $rule_number: {
1304   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, sym(2).ival, sym(3).Expression);
1305   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1306 } break;
1309 AssignmentExpressionNotIn: ConditionalExpressionNotIn ;
1311 AssignmentExpressionNotIn: LeftHandSideExpression AssignmentOperator AssignmentExpressionNotIn ;
1313 case $rule_number: {
1314   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, sym(2).ival, sym(3).Expression);
1315   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1316 } break;
1319 AssignmentOperator: T_EQ ;
1321 case $rule_number: {
1322   sym(1).ival = QSOperator::Assign;
1323 } break;
1326 AssignmentOperator: T_STAR_EQ ;
1328 case $rule_number: {
1329   sym(1).ival = QSOperator::InplaceMul;
1330 } break;
1333 AssignmentOperator: T_DIVIDE_EQ ;
1335 case $rule_number: {
1336   sym(1).ival = QSOperator::InplaceDiv;
1337 } break;
1340 AssignmentOperator: T_REMAINDER_EQ ;
1342 case $rule_number: {
1343   sym(1).ival = QSOperator::InplaceMod;
1344 } break;
1347 AssignmentOperator: T_PLUS_EQ ;
1349 case $rule_number: {
1350   sym(1).ival = QSOperator::InplaceAdd;
1351 } break;
1354 AssignmentOperator: T_MINUS_EQ ;
1356 case $rule_number: {
1357   sym(1).ival = QSOperator::InplaceSub;
1358 } break;
1361 AssignmentOperator: T_LT_LT_EQ ;
1363 case $rule_number: {
1364   sym(1).ival = QSOperator::InplaceLeftShift;
1365 } break;
1368 AssignmentOperator: T_GT_GT_EQ ;
1370 case $rule_number: {
1371   sym(1).ival = QSOperator::InplaceRightShift;
1372 } break;
1375 AssignmentOperator: T_GT_GT_GT_EQ ;
1377 case $rule_number: {
1378   sym(1).ival = QSOperator::InplaceURightShift;
1379 } break;
1382 AssignmentOperator: T_AND_EQ ;
1384 case $rule_number: {
1385   sym(1).ival = QSOperator::InplaceAnd;
1386 } break;
1389 AssignmentOperator: T_XOR_EQ ;
1391 case $rule_number: {
1392   sym(1).ival = QSOperator::InplaceXor;
1393 } break;
1396 AssignmentOperator: T_OR_EQ ;
1398 case $rule_number: {
1399   sym(1).ival = QSOperator::InplaceOr;
1400 } break;
1403 Expression: AssignmentExpression ;
1405 Expression: Expression T_COMMA AssignmentExpression ;
1407 case $rule_number: {
1408   sym(1).Node = QScript::makeAstNode<QScript::AST::Expression> (driver->nodePool(), sym(1).Expression, sym(3).Expression);
1409   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1410 } break;
1413 ExpressionOpt: ;
1415 case $rule_number: {
1416   sym(1).Node = 0;
1417 } break;
1420 ExpressionOpt: Expression ;
1422 ExpressionNotIn: AssignmentExpressionNotIn ;
1424 ExpressionNotIn: ExpressionNotIn T_COMMA AssignmentExpressionNotIn ;
1426 case $rule_number: {
1427   sym(1).Node = QScript::makeAstNode<QScript::AST::Expression> (driver->nodePool(), sym(1).Expression, sym(3).Expression);
1428   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1429 } break;
1432 ExpressionNotInOpt: ;
1434 case $rule_number: {
1435   sym(1).Node = 0;
1436 } break;
1439 ExpressionNotInOpt: ExpressionNotIn ;
1441 Statement: Block ;
1442 Statement: VariableStatement ;
1443 Statement: EmptyStatement ;
1444 Statement: ExpressionStatement ;
1445 Statement: IfStatement ;
1446 Statement: IterationStatement ;
1447 Statement: ContinueStatement ;
1448 Statement: BreakStatement ;
1449 Statement: ReturnStatement ;
1450 Statement: WithStatement ;
1451 Statement: LabelledStatement ;
1452 Statement: SwitchStatement ;
1453 Statement: ThrowStatement ;
1454 Statement: TryStatement ;
1455 Statement: DebuggerStatement ;
1458 Block: T_LBRACE StatementListOpt T_RBRACE ;
1460 case $rule_number: {
1461   sym(1).Node = QScript::makeAstNode<QScript::AST::Block> (driver->nodePool(), sym(2).StatementList);
1462   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1463 } break;
1466 StatementList: Statement ;
1468 case $rule_number: {
1469   sym(1).Node = QScript::makeAstNode<QScript::AST::StatementList> (driver->nodePool(), sym(1).Statement);
1470   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1471 } break;
1474 StatementList: StatementList Statement ;
1476 case $rule_number: {
1477   sym(1).Node = QScript::makeAstNode<QScript::AST::StatementList> (driver->nodePool(), sym(1).StatementList, sym(2).Statement);
1478   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
1479 } break;
1482 StatementListOpt: ;
1484 case $rule_number: {
1485   sym(1).Node = 0;
1486 } break;
1489 StatementListOpt: StatementList ;
1491 case $rule_number: {
1492   sym(1).Node = sym(1).StatementList->finish ();
1493 } break;
1496 VariableStatement: VariableDeclarationKind VariableDeclarationList T_AUTOMATIC_SEMICOLON ;  -- automatic semicolon
1497 VariableStatement: VariableDeclarationKind VariableDeclarationList T_SEMICOLON ;
1499 case $rule_number: {
1500   sym(1).Node = QScript::makeAstNode<QScript::AST::VariableStatement> (driver->nodePool(), sym(2).VariableDeclarationList->finish (/*readOnly=*/sym(1).ival == T_CONST));
1501   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1502 } break;
1505 VariableDeclarationKind: T_CONST ;
1507 case $rule_number: {
1508   sym(1).ival = T_CONST;
1509 } break;
1512 VariableDeclarationKind: T_VAR ;
1514 case $rule_number: {
1515   sym(1).ival = T_VAR;
1516 } break;
1519 VariableDeclarationList: VariableDeclaration ;
1521 case $rule_number: {
1522   sym(1).Node = QScript::makeAstNode<QScript::AST::VariableDeclarationList> (driver->nodePool(), sym(1).VariableDeclaration);
1523   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1524 } break;
1527 VariableDeclarationList: VariableDeclarationList T_COMMA VariableDeclaration ;
1529 case $rule_number: {
1530   sym(1).Node = QScript::makeAstNode<QScript::AST::VariableDeclarationList> (driver->nodePool(), sym(1).VariableDeclarationList, sym(3).VariableDeclaration);
1531   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1532 } break;
1535 VariableDeclarationListNotIn: VariableDeclarationNotIn ;
1537 case $rule_number: {
1538   sym(1).Node = QScript::makeAstNode<QScript::AST::VariableDeclarationList> (driver->nodePool(), sym(1).VariableDeclaration);
1539   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1540 } break;
1543 VariableDeclarationListNotIn: VariableDeclarationListNotIn T_COMMA VariableDeclarationNotIn ;
1545 case $rule_number: {
1546   sym(1).Node = QScript::makeAstNode<QScript::AST::VariableDeclarationList> (driver->nodePool(), sym(1).VariableDeclarationList, sym(3).VariableDeclaration);
1547   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1548 } break;
1551 VariableDeclaration: T_IDENTIFIER InitialiserOpt ;
1553 case $rule_number: {
1554   sym(1).Node = QScript::makeAstNode<QScript::AST::VariableDeclaration> (driver->nodePool(), sym(1).sval, sym(2).Expression);
1555   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
1556 } break;
1559 VariableDeclarationNotIn: T_IDENTIFIER InitialiserNotInOpt ;
1561 case $rule_number: {
1562   sym(1).Node = QScript::makeAstNode<QScript::AST::VariableDeclaration> (driver->nodePool(), sym(1).sval, sym(2).Expression);
1563   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
1564 } break;
1567 Initialiser: T_EQ AssignmentExpression ;
1569 case $rule_number: {
1570   sym(1) = sym(2);
1571   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
1572 } break;
1575 InitialiserOpt: ;
1577 case $rule_number: {
1578   sym(1).Node = 0;
1579 } break;
1582 InitialiserOpt: Initialiser ;
1584 InitialiserNotIn: T_EQ AssignmentExpressionNotIn ;
1586 case $rule_number: {
1587   sym(1) = sym(2);
1588   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
1589 } break;
1592 InitialiserNotInOpt: ;
1594 case $rule_number: {
1595   sym(1).Node = 0;
1596 } break;
1599 InitialiserNotInOpt: InitialiserNotIn ;
1601 EmptyStatement: T_SEMICOLON ;
1603 case $rule_number: {
1604   sym(1).Node = QScript::makeAstNode<QScript::AST::EmptyStatement> (driver->nodePool());
1605   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1606 } break;
1609 ExpressionStatement: Expression T_AUTOMATIC_SEMICOLON ;  -- automatic semicolon
1610 ExpressionStatement: Expression T_SEMICOLON ;
1612 case $rule_number: {
1613   sym(1).Node = QScript::makeAstNode<QScript::AST::ExpressionStatement> (driver->nodePool(), sym(1).Expression);
1614   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
1615 } break;
1618 IfStatement: T_IF T_LPAREN Expression T_RPAREN Statement T_ELSE Statement ;
1620 case $rule_number: {
1621   sym(1).Node = QScript::makeAstNode<QScript::AST::IfStatement> (driver->nodePool(), sym(3).Expression, sym(5).Statement, sym(7).Statement);
1622   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(7));
1623 } break;
1626 IfStatement: T_IF T_LPAREN Expression T_RPAREN Statement ;
1628 case $rule_number: {
1629   sym(1).Node = QScript::makeAstNode<QScript::AST::IfStatement> (driver->nodePool(), sym(3).Expression, sym(5).Statement);
1630   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5));
1631 } break;
1635 IterationStatement: T_DO Statement T_WHILE T_LPAREN Expression T_RPAREN T_AUTOMATIC_SEMICOLON ;  -- automatic semicolon
1636 IterationStatement: T_DO Statement T_WHILE T_LPAREN Expression T_RPAREN T_SEMICOLON ;
1638 case $rule_number: {
1639   sym(1).Node = QScript::makeAstNode<QScript::AST::DoWhileStatement> (driver->nodePool(), sym(2).Statement, sym(5).Expression);
1640   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(7));
1641 } break;
1644 IterationStatement: T_WHILE T_LPAREN Expression T_RPAREN Statement ;
1646 case $rule_number: {
1647   sym(1).Node = QScript::makeAstNode<QScript::AST::WhileStatement> (driver->nodePool(), sym(3).Expression, sym(5).Statement);
1648   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5));
1649 } break;
1652 IterationStatement: T_FOR T_LPAREN ExpressionNotInOpt T_SEMICOLON ExpressionOpt T_SEMICOLON ExpressionOpt T_RPAREN Statement ;
1654 case $rule_number: {
1655   sym(1).Node = QScript::makeAstNode<QScript::AST::ForStatement> (driver->nodePool(), sym(3).Expression, sym(5).Expression, sym(7).Expression, sym(9).Statement);
1656   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(9));
1657 } break;
1660 IterationStatement: T_FOR T_LPAREN T_VAR VariableDeclarationListNotIn T_SEMICOLON ExpressionOpt T_SEMICOLON ExpressionOpt T_RPAREN Statement ;
1662 case $rule_number: {
1663   sym(1).Node = QScript::makeAstNode<QScript::AST::LocalForStatement> (driver->nodePool(), sym(4).VariableDeclarationList->finish (/*readOnly=*/false), sym(6).Expression, sym(8).Expression, sym(10).Statement);
1664   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(10));
1665 } break;
1668 IterationStatement: T_FOR T_LPAREN LeftHandSideExpression T_IN Expression T_RPAREN Statement ;
1670 case $rule_number: {
1671   sym(1).Node = QScript::makeAstNode<QScript::AST::ForEachStatement> (driver->nodePool(), sym(3).Expression, sym(5).Expression, sym(7).Statement);
1672   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(7));
1673 } break;
1676 IterationStatement: T_FOR T_LPAREN T_VAR VariableDeclarationNotIn T_IN Expression T_RPAREN Statement ;
1678 case $rule_number: {
1679   sym(1).Node = QScript::makeAstNode<QScript::AST::LocalForEachStatement> (driver->nodePool(), sym(4).VariableDeclaration, sym(6).Expression, sym(8).Statement);
1680   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(8));
1681 } break;
1684 ContinueStatement: T_CONTINUE T_AUTOMATIC_SEMICOLON ;  -- automatic semicolon
1685 ContinueStatement: T_CONTINUE T_SEMICOLON ;
1687 case $rule_number: {
1688   sym(1).Node = QScript::makeAstNode<QScript::AST::ContinueStatement> (driver->nodePool());
1689   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
1690 } break;
1693 ContinueStatement: T_CONTINUE T_IDENTIFIER T_AUTOMATIC_SEMICOLON ;  -- automatic semicolon
1694 ContinueStatement: T_CONTINUE T_IDENTIFIER T_SEMICOLON ;
1696 case $rule_number: {
1697   sym(1).Node = QScript::makeAstNode<QScript::AST::ContinueStatement> (driver->nodePool(), sym(2).sval);
1698   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1699 } break;
1702 BreakStatement: T_BREAK T_AUTOMATIC_SEMICOLON ;  -- automatic semicolon
1703 BreakStatement: T_BREAK T_SEMICOLON ;
1705 case $rule_number: {
1706   sym(1).Node = QScript::makeAstNode<QScript::AST::BreakStatement> (driver->nodePool());
1707   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
1708 } break;
1711 BreakStatement: T_BREAK T_IDENTIFIER T_AUTOMATIC_SEMICOLON ;  -- automatic semicolon
1712 BreakStatement: T_BREAK T_IDENTIFIER T_SEMICOLON ;
1714 case $rule_number: {
1715   sym(1).Node = QScript::makeAstNode<QScript::AST::BreakStatement> (driver->nodePool(), sym(2).sval);
1716   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1717 } break;
1720 ReturnStatement: T_RETURN ExpressionOpt T_AUTOMATIC_SEMICOLON ;  -- automatic semicolon
1721 ReturnStatement: T_RETURN ExpressionOpt T_SEMICOLON ;
1723 case $rule_number: {
1724   sym(1).Node = QScript::makeAstNode<QScript::AST::ReturnStatement> (driver->nodePool(), sym(2).Expression);
1725   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1726 } break;
1729 WithStatement: T_WITH T_LPAREN Expression T_RPAREN Statement ;
1731 case $rule_number: {
1732   sym(1).Node = QScript::makeAstNode<QScript::AST::WithStatement> (driver->nodePool(), sym(3).Expression, sym(5).Statement);
1733   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5));
1734 } break;
1737 SwitchStatement: T_SWITCH T_LPAREN Expression T_RPAREN CaseBlock ;
1739 case $rule_number: {
1740   sym(1).Node = QScript::makeAstNode<QScript::AST::SwitchStatement> (driver->nodePool(), sym(3).Expression, sym(5).CaseBlock);
1741   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5));
1742 } break;
1745 CaseBlock: T_LBRACE CaseClausesOpt T_RBRACE ;
1747 case $rule_number: {
1748   sym(1).Node = QScript::makeAstNode<QScript::AST::CaseBlock> (driver->nodePool(), sym(2).CaseClauses);
1749   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1750 } break;
1753 CaseBlock: T_LBRACE CaseClausesOpt DefaultClause CaseClausesOpt T_RBRACE ;
1755 case $rule_number: {
1756   sym(1).Node = QScript::makeAstNode<QScript::AST::CaseBlock> (driver->nodePool(), sym(2).CaseClauses, sym(3).DefaultClause, sym(4).CaseClauses);
1757   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5));
1758 } break;
1761 CaseClauses: CaseClause ;
1763 case $rule_number: {
1764   sym(1).Node = QScript::makeAstNode<QScript::AST::CaseClauses> (driver->nodePool(), sym(1).CaseClause);
1765   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1766 } break;
1769 CaseClauses: CaseClauses CaseClause ;
1771 case $rule_number: {
1772   sym(1).Node = QScript::makeAstNode<QScript::AST::CaseClauses> (driver->nodePool(), sym(1).CaseClauses, sym(2).CaseClause);
1773   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
1774 } break;
1777 CaseClausesOpt: ;
1779 case $rule_number: {
1780   sym(1).Node = 0;
1781 } break;
1784 CaseClausesOpt: CaseClauses ;
1786 case $rule_number: {
1787   sym(1).Node = sym(1).CaseClauses->finish ();
1788   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1789 } break;
1792 CaseClause: T_CASE Expression T_COLON StatementListOpt ;
1794 case $rule_number: {
1795   sym(1).Node = QScript::makeAstNode<QScript::AST::CaseClause> (driver->nodePool(), sym(2).Expression, sym(4).StatementList);
1796   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4));
1797 } break;
1800 DefaultClause: T_DEFAULT T_COLON StatementListOpt ;
1802 case $rule_number: {
1803   sym(1).Node = QScript::makeAstNode<QScript::AST::DefaultClause> (driver->nodePool(), sym(3).StatementList);
1804   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1805 } break;
1808 LabelledStatement: T_IDENTIFIER T_COLON Statement ;
1810 case $rule_number: {
1811   sym(1).Node = QScript::makeAstNode<QScript::AST::LabelledStatement> (driver->nodePool(), sym(1).sval, sym(3).Statement);
1812   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1813 } break;
1816 ThrowStatement: T_THROW Expression T_AUTOMATIC_SEMICOLON ;  -- automatic semicolon
1817 ThrowStatement: T_THROW Expression T_SEMICOLON ;
1819 case $rule_number: {
1820   sym(1).Node = QScript::makeAstNode<QScript::AST::ThrowStatement> (driver->nodePool(), sym(2).Expression);
1821   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1822 } break;
1825 TryStatement: T_TRY Block Catch ;
1827 case $rule_number: {
1828   sym(1).Node = QScript::makeAstNode<QScript::AST::TryStatement> (driver->nodePool(), sym(2).Statement, sym(3).Catch);
1829   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1830 } break;
1833 TryStatement: T_TRY Block Finally ;
1835 case $rule_number: {
1836   sym(1).Node = QScript::makeAstNode<QScript::AST::TryStatement> (driver->nodePool(), sym(2).Statement, sym(3).Finally);
1837   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1838 } break;
1841 TryStatement: T_TRY Block Catch Finally ;
1843 case $rule_number: {
1844   sym(1).Node = QScript::makeAstNode<QScript::AST::TryStatement> (driver->nodePool(), sym(2).Statement, sym(3).Catch, sym(4).Finally);
1845   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4));
1846 } break;
1849 Catch: T_CATCH T_LPAREN T_IDENTIFIER T_RPAREN Block ;
1851 case $rule_number: {
1852   sym(1).Node = QScript::makeAstNode<QScript::AST::Catch> (driver->nodePool(), sym(3).sval, sym(5).Statement);
1853   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5));
1854 } break;
1857 Finally: T_FINALLY Block ;
1859 case $rule_number: {
1860   sym(1).Node = QScript::makeAstNode<QScript::AST::Finally> (driver->nodePool(), sym(2).Statement);
1861   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
1862 } break;
1865 DebuggerStatement: T_DEBUGGER T_AUTOMATIC_SEMICOLON ; -- automatic semicolon
1866 DebuggerStatement: T_DEBUGGER T_SEMICOLON ;
1868 case $rule_number: {
1869   sym(1).Node = QScript::makeAstNode<QScript::AST::DebuggerStatement> (driver->nodePool());
1870   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1871 } break;
1874 FunctionDeclaration: T_FUNCTION T_IDENTIFIER T_LPAREN FormalParameterListOpt T_RPAREN T_LBRACE FunctionBodyOpt T_RBRACE ;
1876 case $rule_number: {
1877   sym(1).Node = QScript::makeAstNode<QScript::AST::FunctionDeclaration> (driver->nodePool(), sym(2).sval, sym(4).FormalParameterList, sym(7).FunctionBody);
1878   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(8));
1879 } break;
1882 FunctionExpression: T_FUNCTION IdentifierOpt T_LPAREN FormalParameterListOpt T_RPAREN T_LBRACE FunctionBodyOpt T_RBRACE ;
1884 case $rule_number: {
1885   sym(1).Node = QScript::makeAstNode<QScript::AST::FunctionExpression> (driver->nodePool(), sym(2).sval, sym(4).FormalParameterList, sym(7).FunctionBody);
1886   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(8));
1887 } break;
1890 FormalParameterList: T_IDENTIFIER ;
1892 case $rule_number: {
1893   sym(1).Node = QScript::makeAstNode<QScript::AST::FormalParameterList> (driver->nodePool(), sym(1).sval);
1894   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1895 } break;
1898 FormalParameterList: FormalParameterList T_COMMA T_IDENTIFIER ;
1900 case $rule_number: {
1901   sym(1).Node = QScript::makeAstNode<QScript::AST::FormalParameterList> (driver->nodePool(), sym(1).FormalParameterList, sym(3).sval);
1902   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1903 } break;
1906 FormalParameterListOpt: ;
1908 case $rule_number: {
1909   sym(1).Node = 0;
1910 } break;
1913 FormalParameterListOpt: FormalParameterList ;
1915 case $rule_number: {
1916   sym(1).Node = sym(1).FormalParameterList->finish ();
1917   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1918 } break;
1921 FunctionBodyOpt: ;
1923 case $rule_number: {
1924   sym(1).Node = 0;
1925 } break;
1928 FunctionBodyOpt: FunctionBody ;
1930 FunctionBody: SourceElements ;
1932 case $rule_number: {
1933   sym(1).Node = QScript::makeAstNode<QScript::AST::FunctionBody> (driver->nodePool(), sym(1).SourceElements->finish ());
1934   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1935 } break;
1938 Program: SourceElements ;
1940 case $rule_number: {
1941   sym(1).Node = QScript::makeAstNode<QScript::AST::Program> (driver->nodePool(), sym(1).SourceElements->finish ());
1942   driver->changeAbstractSyntaxTree(sym(1).Node);
1943   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1944 } break;
1947 SourceElements: SourceElement ;
1949 case $rule_number: {
1950   sym(1).Node = QScript::makeAstNode<QScript::AST::SourceElements> (driver->nodePool(), sym(1).SourceElement);
1951   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1952 } break;
1955 SourceElements: SourceElements SourceElement ;
1957 case $rule_number: {
1958   sym(1).Node = QScript::makeAstNode<QScript::AST::SourceElements> (driver->nodePool(), sym(1).SourceElements, sym(2).SourceElement);
1959   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
1960 } break;
1963 SourceElement: Statement ;
1965 case $rule_number: {
1966   sym(1).Node = QScript::makeAstNode<QScript::AST::StatementSourceElement> (driver->nodePool(), sym(1).Statement);
1967   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1968 } break;
1971 SourceElement: FunctionDeclaration ;
1973 case $rule_number: {
1974   sym(1).Node = QScript::makeAstNode<QScript::AST::FunctionSourceElement> (driver->nodePool(), sym(1).FunctionDeclaration);
1975   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1976 } break;
1979 IdentifierOpt: ;
1981 case $rule_number: {
1982   sym(1).sval = 0;
1983 } break;
1986 IdentifierOpt: T_IDENTIFIER ;
1988 PropertyNameAndValueListOpt: ;
1990 case $rule_number: {
1991   sym(1).Node = 0;
1992 } break;
1995 PropertyNameAndValueListOpt: PropertyNameAndValueList ;
1998           } // switch
2000           state_stack [tos] = nt_action (act, lhs [r] - TERMINAL_COUNT);
2002           if (rhs[r] > 1) {
2003               location_stack[tos - 1].endLine = location_stack[tos + rhs[r] - 2].endLine;
2004               location_stack[tos - 1].endColumn = location_stack[tos + rhs[r] - 2].endColumn;
2005               location_stack[tos] = location_stack[tos + rhs[r] - 1];
2006           }
2007         }
2009       else
2010         {
2011           if (saved_yytoken == -1 && automatic (driver, yytoken) && t_action (state, T_AUTOMATIC_SEMICOLON) > 0)
2012             {
2013               saved_yytoken = yytoken;
2014               yytoken = T_SEMICOLON;
2015               continue;
2016             }
2018           else if ((state == INITIAL_STATE) && (yytoken == 0)) {
2019               // accept empty input
2020               yytoken = T_SEMICOLON;
2021               continue;
2022           }
2024           int ers = state;
2025           int shifts = 0;
2026           int reduces = 0;
2027           int expected_tokens [3];
2028           for (int tk = 0; tk < TERMINAL_COUNT; ++tk)
2029             {
2030               int k = t_action (ers, tk);
2032               if (! k)
2033                 continue;
2034               else if (k < 0)
2035                 ++reduces;
2036               else if (spell [tk])
2037                 {
2038                   if (shifts < 3)
2039                     expected_tokens [shifts] = tk;
2040                   ++shifts;
2041                 }
2042             }
2044           error_message.clear ();
2045           if (shifts && shifts < 3)
2046             {
2047               bool first = true;
2049               for (int s = 0; s < shifts; ++s)
2050                 {
2051                   if (first)
2052                     error_message += QLatin1String ("Expected ");
2053                   else
2054                     error_message += QLatin1String (", ");
2056                   first = false;
2057                   error_message += QLatin1String("`");
2058                   error_message += QLatin1String (spell [expected_tokens [s]]);
2059                   error_message += QLatin1String("'");
2060                 }
2061             }
2063           if (error_message.isEmpty())
2064               error_message = lexer->errorMessage();
2066           error_lineno = lexer->startLineNo();
2067           error_column = lexer->startColumnNo();
2069           return false;
2070         }
2071     }
2073     return false;
2076 QT_END_NAMESPACE
2079 QT_END_NAMESPACE
2081 #endif // QSCRIPTPARSER_P_H