1---------------------------------------------------------------------------- 2-- 3-- Copyright (C) 2015 The Qt Company Ltd. 4-- Contact: http://www.qt.io/licensing/ 5-- 6-- This file is part of the QtScript module of the Qt Toolkit. 7-- 8-- $QT_BEGIN_LICENSE:LGPL-ONLY$ 9-- GNU Lesser General Public License Usage 10-- This file may be used under the terms of the GNU Lesser 11-- General Public License version 2.1 as published by the Free Software 12-- Foundation and appearing in the file LICENSE.LGPL included in the 13-- packaging of this file. Please review the following information to 14-- ensure the GNU Lesser General Public License version 2.1 requirements 15-- will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. 16-- 17-- If you have questions regarding the use of this file, please contact 18-- us via http://www.qt.io/contact-us/. 19-- 20-- $QT_END_LICENSE$ 21-- 22---------------------------------------------------------------------------- 23 24%parser QScriptGrammar 25%decl qscriptparser_p.h 26%impl qscriptparser.cpp 27%expect 3 28%expect-rr 1 29 30%token T_AND "&" T_AND_AND "&&" T_AND_EQ "&=" 31%token T_BREAK "break" T_CASE "case" T_CATCH "catch" 32%token T_COLON ":" T_COMMA ";" T_CONTINUE "continue" 33%token T_DEFAULT "default" T_DELETE "delete" T_DIVIDE_ "/" 34%token T_DIVIDE_EQ "/=" T_DO "do" T_DOT "." 35%token T_ELSE "else" T_EQ "=" T_EQ_EQ "==" 36%token T_EQ_EQ_EQ "===" T_FINALLY "finally" T_FOR "for" 37%token T_FUNCTION "function" T_GE ">=" T_GT ">" 38%token T_GT_GT ">>" T_GT_GT_EQ ">>=" T_GT_GT_GT ">>>" 39%token T_GT_GT_GT_EQ ">>>=" T_IDENTIFIER "identifier" T_IF "if" 40%token T_IN "in" T_INSTANCEOF "instanceof" T_LBRACE "{" 41%token T_LBRACKET "[" T_LE "<=" T_LPAREN "(" 42%token T_LT "<" T_LT_LT "<<" T_LT_LT_EQ "<<=" 43%token T_MINUS "-" T_MINUS_EQ "-=" T_MINUS_MINUS "--" 44%token T_NEW "new" T_NOT "!" T_NOT_EQ "!=" 45%token T_NOT_EQ_EQ "!==" T_NUMERIC_LITERAL "numeric literal" T_OR "|" 46%token T_OR_EQ "|=" T_OR_OR "||" T_PLUS "+" 47%token T_PLUS_EQ "+=" T_PLUS_PLUS "++" T_QUESTION "?" 48%token T_RBRACE "}" T_RBRACKET "]" T_REMAINDER "%" 49%token T_REMAINDER_EQ "%=" T_RETURN "return" T_RPAREN ")" 50%token T_SEMICOLON ";" T_AUTOMATIC_SEMICOLON T_STAR "*" 51%token T_STAR_EQ "*=" T_STRING_LITERAL "string literal" 52%token T_SWITCH "switch" T_THIS "this" T_THROW "throw" 53%token T_TILDE "~" T_TRY "try" T_TYPEOF "typeof" 54%token T_VAR "var" T_VOID "void" T_WHILE "while" 55%token T_WITH "with" T_XOR "^" T_XOR_EQ "^=" 56%token T_NULL "null" T_TRUE "true" T_FALSE "false" 57%token T_CONST "const" 58%token T_DEBUGGER "debugger" 59%token T_RESERVED_WORD "reserved word" 60 61%start Program 62 63/./**************************************************************************** 64** 65** Copyright (C) 2015 The Qt Company Ltd. 66** Contact: http://www.qt.io/licensing/ 67** 68** This file is part of the QtScript module of the Qt Toolkit. 69** 70** $QT_BEGIN_LICENSE:LGPL$ 71** Commercial License Usage 72** Licensees holding valid commercial Qt licenses may use this file in 73** accordance with the commercial license agreement provided with the 74** Software or, alternatively, in accordance with the terms contained in 75** a written agreement between you and The Qt Company. For licensing terms 76** and conditions see http://www.qt.io/terms-conditions. For further 77** information use the contact form at http://www.qt.io/contact-us. 78** 79** GNU Lesser General Public License Usage 80** Alternatively, this file may be used under the terms of the GNU Lesser 81** General Public License version 2.1 or version 3 as published by the Free 82** Software Foundation and appearing in the file LICENSE.LGPLv21 and 83** LICENSE.LGPLv3 included in the packaging of this file. Please review the 84** following information to ensure the GNU Lesser General Public License 85** requirements will be met: https://www.gnu.org/licenses/lgpl.html and 86** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. 87** 88** As a special exception, The Qt Company gives you certain additional 89** rights. These rights are described in The Qt Company LGPL Exception 90** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. 91** 92** GNU General Public License Usage 93** Alternatively, this file may be used under the terms of the GNU 94** General Public License version 3.0 as published by the Free Software 95** Foundation and appearing in the file LICENSE.GPL included in the 96** packaging of this file. Please review the following information to 97** ensure the GNU General Public License version 3.0 requirements will be 98** met: http://www.gnu.org/copyleft/gpl.html. 99** 100** $QT_END_LICENSE$ 101** 102****************************************************************************/ 103 104// This file was generated by qlalr - DO NOT EDIT! 105 106 107#include <QtCore/QtDebug> 108 109#include <string.h> 110 111#define Q_SCRIPT_UPDATE_POSITION(node, startloc, endloc) do { \ 112 node->startLine = startloc.startLine; \ 113 node->startColumn = startloc.startColumn; \ 114 node->endLine = endloc.endLine; \ 115 node->endColumn = endloc.endColumn; \ 116} while (0) 117 118./ 119 120/:/**************************************************************************** 121** 122** Copyright (C) 2015 The Qt Company Ltd. 123** Contact: http://www.qt.io/licensing/ 124** 125** This file is part of the QtScript module of the Qt Toolkit. 126** 127** $QT_BEGIN_LICENSE:LGPL$ 128** Commercial License Usage 129** Licensees holding valid commercial Qt licenses may use this file in 130** accordance with the commercial license agreement provided with the 131** Software or, alternatively, in accordance with the terms contained in 132** a written agreement between you and The Qt Company. For licensing terms 133** and conditions see http://www.qt.io/terms-conditions. For further 134** information use the contact form at http://www.qt.io/contact-us. 135** 136** GNU Lesser General Public License Usage 137** Alternatively, this file may be used under the terms of the GNU Lesser 138** General Public License version 2.1 or version 3 as published by the Free 139** Software Foundation and appearing in the file LICENSE.LGPLv21 and 140** LICENSE.LGPLv3 included in the packaging of this file. Please review the 141** following information to ensure the GNU Lesser General Public License 142** requirements will be met: https://www.gnu.org/licenses/lgpl.html and 143** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. 144** 145** As a special exception, The Qt Company gives you certain additional 146** rights. These rights are described in The Qt Company LGPL Exception 147** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. 148** 149** GNU General Public License Usage 150** Alternatively, this file may be used under the terms of the GNU 151** General Public License version 3.0 as published by the Free Software 152** Foundation and appearing in the file LICENSE.GPL included in the 153** packaging of this file. Please review the following information to 154** ensure the GNU General Public License version 3.0 requirements will be 155** met: http://www.gnu.org/copyleft/gpl.html. 156** 157** $QT_END_LICENSE$ 158** 159****************************************************************************/ 160 161// This file was generated by qlalr - DO NOT EDIT! 162 163 164// 165// W A R N I N G 166// ------------- 167// 168// This file is not part of the Qt API. It exists purely as an 169// implementation detail. This header file may change from version to 170// version without notice, or even be removed. 171// 172// We mean it. 173// 174 175// 176// This file is automatically generated from qscript.g. 177// Changes will be lost. 178// 179 180#ifndef QSCRIPTPARSER_P_H 181#define QSCRIPTPARSER_P_H 182 183#include "qscriptgrammar_p.h" 184 185#include "qscriptastfwd_p.h" 186 187QT_BEGIN_NAMESPACE 188 189class QString; 190class QScriptEnginePrivate; 191class QScriptNameIdImpl; 192 193class QScriptParser: protected $table 194{ 195public: 196 union Value { 197 int ival; 198 double dval; 199 QScriptNameIdImpl *sval; 200 QScript::AST::ArgumentList *ArgumentList; 201 QScript::AST::CaseBlock *CaseBlock; 202 QScript::AST::CaseClause *CaseClause; 203 QScript::AST::CaseClauses *CaseClauses; 204 QScript::AST::Catch *Catch; 205 QScript::AST::DefaultClause *DefaultClause; 206 QScript::AST::ElementList *ElementList; 207 QScript::AST::Elision *Elision; 208 QScript::AST::ExpressionNode *Expression; 209 QScript::AST::Finally *Finally; 210 QScript::AST::FormalParameterList *FormalParameterList; 211 QScript::AST::FunctionBody *FunctionBody; 212 QScript::AST::FunctionDeclaration *FunctionDeclaration; 213 QScript::AST::Node *Node; 214 QScript::AST::PropertyName *PropertyName; 215 QScript::AST::PropertyNameAndValueList *PropertyNameAndValueList; 216 QScript::AST::SourceElement *SourceElement; 217 QScript::AST::SourceElements *SourceElements; 218 QScript::AST::Statement *Statement; 219 QScript::AST::StatementList *StatementList; 220 QScript::AST::VariableDeclaration *VariableDeclaration; 221 QScript::AST::VariableDeclarationList *VariableDeclarationList; 222 }; 223 224 struct Location { 225 int startLine; 226 int startColumn; 227 int endLine; 228 int endColumn; 229 }; 230 231public: 232 QScriptParser(); 233 ~QScriptParser(); 234 235 bool parse(QScriptEnginePrivate *driver); 236 237 inline QString errorMessage() const 238 { return error_message; } 239 inline int errorLineNumber() const 240 { return error_lineno; } 241 inline int errorColumnNumber() const 242 { return error_column; } 243 244protected: 245 inline void reallocateStack(); 246 247 inline Value &sym(int index) 248 { return sym_stack [tos + index - 1]; } 249 250 inline Location &loc(int index) 251 { return location_stack [tos + index - 2]; } 252 253protected: 254 int tos; 255 int stack_size; 256 Value *sym_stack; 257 int *state_stack; 258 Location *location_stack; 259 QString error_message; 260 int error_lineno; 261 int error_column; 262}; 263 264inline void QScriptParser::reallocateStack() 265{ 266 if (! stack_size) 267 stack_size = 128; 268 else 269 stack_size <<= 1; 270 271 sym_stack = reinterpret_cast<Value*> (qRealloc(sym_stack, stack_size * sizeof(Value))); 272 state_stack = reinterpret_cast<int*> (qRealloc(state_stack, stack_size * sizeof(int))); 273 location_stack = reinterpret_cast<Location*> (qRealloc(location_stack, stack_size * sizeof(Location))); 274} 275 276:/ 277 278 279/. 280 281#include "qscriptparser_p.h" 282 283// 284// This file is automatically generated from qscript.g. 285// Changes will be lost. 286// 287 288QT_BEGIN_NAMESPACE 289 290inline static bool automatic(QScriptEnginePrivate *driver, int token) 291{ 292 return token == $table::T_RBRACE 293 || token == 0 294 || driver->lexer()->prevTerminator(); 295} 296 297 298QScriptParser::QScriptParser(): 299 tos(0), 300 stack_size(0), 301 sym_stack(0), 302 state_stack(0), 303 location_stack(0) 304{ 305} 306 307QScriptParser::~QScriptParser() 308{ 309 if (stack_size) { 310 qFree(sym_stack); 311 qFree(state_stack); 312 qFree(location_stack); 313 } 314} 315 316static inline QScriptParser::Location location(QScript::Lexer *lexer) 317{ 318 QScriptParser::Location loc; 319 loc.startLine = lexer->startLineNo(); 320 loc.startColumn = lexer->startColumnNo(); 321 loc.endLine = lexer->endLineNo(); 322 loc.endColumn = lexer->endColumnNo(); 323 return loc; 324} 325 326bool QScriptParser::parse(QScriptEnginePrivate *driver) 327{ 328 const int INITIAL_STATE = 0; 329 QScript::Lexer *lexer = driver->lexer(); 330 331 int yytoken = -1; 332 int saved_yytoken = -1; 333 334 reallocateStack(); 335 336 tos = 0; 337 state_stack[++tos] = INITIAL_STATE; 338 339 while (true) 340 { 341 const int state = state_stack [tos]; 342 if (yytoken == -1 && - TERMINAL_COUNT != action_index [state]) 343 { 344 if (saved_yytoken == -1) 345 { 346 yytoken = lexer->lex(); 347 location_stack [tos] = location(lexer); 348 } 349 else 350 { 351 yytoken = saved_yytoken; 352 saved_yytoken = -1; 353 } 354 } 355 356 int act = t_action (state, yytoken); 357 358 if (act == ACCEPT_STATE) 359 return true; 360 361 else if (act > 0) 362 { 363 if (++tos == stack_size) 364 reallocateStack(); 365 366 sym_stack [tos].dval = lexer->dval (); 367 state_stack [tos] = act; 368 location_stack [tos] = location(lexer); 369 yytoken = -1; 370 } 371 372 else if (act < 0) 373 { 374 int r = - act - 1; 375 376 tos -= rhs [r]; 377 act = state_stack [tos++]; 378 379 switch (r) { 380./ 381 382PrimaryExpression: T_THIS ; 383/. 384case $rule_number: { 385 sym(1).Node = QScript::makeAstNode<QScript::AST::ThisExpression> (driver->nodePool()); 386 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); 387} break; 388./ 389 390PrimaryExpression: T_IDENTIFIER ; 391/. 392case $rule_number: { 393 sym(1).Node = QScript::makeAstNode<QScript::AST::IdentifierExpression> (driver->nodePool(), sym(1).sval); 394 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); 395} break; 396./ 397 398PrimaryExpression: T_NULL ; 399/. 400case $rule_number: { 401 sym(1).Node = QScript::makeAstNode<QScript::AST::NullExpression> (driver->nodePool()); 402 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); 403} break; 404./ 405 406PrimaryExpression: T_TRUE ; 407/. 408case $rule_number: { 409 sym(1).Node = QScript::makeAstNode<QScript::AST::TrueLiteral> (driver->nodePool()); 410 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); 411} break; 412./ 413 414PrimaryExpression: T_FALSE ; 415/. 416case $rule_number: { 417 sym(1).Node = QScript::makeAstNode<QScript::AST::FalseLiteral> (driver->nodePool()); 418 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); 419} break; 420./ 421 422PrimaryExpression: T_NUMERIC_LITERAL ; 423/. 424case $rule_number: { 425 sym(1).Node = QScript::makeAstNode<QScript::AST::NumericLiteral> (driver->nodePool(), sym(1).dval); 426 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); 427} break; 428./ 429 430PrimaryExpression: T_STRING_LITERAL ; 431/. 432case $rule_number: { 433 sym(1).Node = QScript::makeAstNode<QScript::AST::StringLiteral> (driver->nodePool(), sym(1).sval); 434 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); 435} break; 436./ 437 438PrimaryExpression: T_DIVIDE_ ; 439/: 440#define Q_SCRIPT_REGEXPLITERAL_RULE1 $rule_number 441:/ 442/. 443case $rule_number: { 444 bool rx = lexer->scanRegExp(QScript::Lexer::NoPrefix); 445 if (!rx) { 446 error_message = lexer->errorMessage(); 447 error_lineno = lexer->startLineNo(); 448 error_column = lexer->startColumnNo(); 449 return false; 450 } 451 sym(1).Node = QScript::makeAstNode<QScript::AST::RegExpLiteral> (driver->nodePool(), lexer->pattern, lexer->flags); 452 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); 453} break; 454./ 455 456PrimaryExpression: T_DIVIDE_EQ ; 457/: 458#define Q_SCRIPT_REGEXPLITERAL_RULE2 $rule_number 459:/ 460/. 461case $rule_number: { 462 bool rx = lexer->scanRegExp(QScript::Lexer::EqualPrefix); 463 if (!rx) { 464 error_message = lexer->errorMessage(); 465 error_lineno = lexer->startLineNo(); 466 error_column = lexer->startColumnNo(); 467 return false; 468 } 469 sym(1).Node = QScript::makeAstNode<QScript::AST::RegExpLiteral> (driver->nodePool(), lexer->pattern, lexer->flags); 470 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); 471} break; 472./ 473 474PrimaryExpression: T_LBRACKET ElisionOpt T_RBRACKET ; 475/. 476case $rule_number: { 477 sym(1).Node = QScript::makeAstNode<QScript::AST::ArrayLiteral> (driver->nodePool(), sym(2).Elision); 478 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 479} break; 480./ 481 482PrimaryExpression: T_LBRACKET ElementList T_RBRACKET ; 483/. 484case $rule_number: { 485 sym(1).Node = QScript::makeAstNode<QScript::AST::ArrayLiteral> (driver->nodePool(), sym(2).ElementList->finish ()); 486 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 487} break; 488./ 489 490PrimaryExpression: T_LBRACKET ElementList T_COMMA ElisionOpt T_RBRACKET ; 491/. 492case $rule_number: { 493 sym(1).Node = QScript::makeAstNode<QScript::AST::ArrayLiteral> (driver->nodePool(), sym(2).ElementList->finish (), sym(4).Elision); 494 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5)); 495} break; 496./ 497 498-- PrimaryExpression: T_LBRACE T_RBRACE ; 499-- /. 500-- case $rule_number: { 501-- sym(1).Node = QScript::makeAstNode<QScript::AST::ObjectLiteral> (driver->nodePool()); 502-- Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); 503-- } break; 504-- ./ 505 506PrimaryExpression: T_LBRACE PropertyNameAndValueListOpt T_RBRACE ; 507/. 508case $rule_number: { 509 if (sym(2).Node) 510 sym(1).Node = QScript::makeAstNode<QScript::AST::ObjectLiteral> (driver->nodePool(), sym(2).PropertyNameAndValueList->finish ()); 511 else 512 sym(1).Node = QScript::makeAstNode<QScript::AST::ObjectLiteral> (driver->nodePool()); 513 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 514} break; 515./ 516 517PrimaryExpression: T_LBRACE PropertyNameAndValueList T_COMMA T_RBRACE ; 518/. 519case $rule_number: { 520 sym(1).Node = QScript::makeAstNode<QScript::AST::ObjectLiteral> (driver->nodePool(), sym(2).PropertyNameAndValueList->finish ()); 521 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4)); 522} break; 523./ 524 525PrimaryExpression: T_LPAREN Expression T_RPAREN ; 526/. 527case $rule_number: { 528 sym(1) = sym(2); 529 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 530} break; 531./ 532 533ElementList: ElisionOpt AssignmentExpression ; 534/. 535case $rule_number: { 536 sym(1).Node = QScript::makeAstNode<QScript::AST::ElementList> (driver->nodePool(), sym(1).Elision, sym(2).Expression); 537 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); 538} break; 539./ 540 541ElementList: ElementList T_COMMA ElisionOpt AssignmentExpression ; 542/. 543case $rule_number: { 544 sym(1).Node = QScript::makeAstNode<QScript::AST::ElementList> (driver->nodePool(), sym(1).ElementList, sym(3).Elision, sym(4).Expression); 545 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4)); 546} break; 547./ 548 549Elision: T_COMMA ; 550/. 551case $rule_number: { 552 sym(1).Node = QScript::makeAstNode<QScript::AST::Elision> (driver->nodePool()); 553 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); 554} break; 555./ 556 557Elision: Elision T_COMMA ; 558/. 559case $rule_number: { 560 sym(1).Node = QScript::makeAstNode<QScript::AST::Elision> (driver->nodePool(), sym(1).Elision); 561 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); 562} break; 563./ 564 565ElisionOpt: ; 566/. 567case $rule_number: { 568 sym(1).Node = 0; 569} break; 570./ 571 572ElisionOpt: Elision ; 573/. 574case $rule_number: { 575 sym(1).Elision = sym(1).Elision->finish (); 576 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); 577} break; 578./ 579 580PropertyNameAndValueList: PropertyName T_COLON AssignmentExpression ; 581/. 582case $rule_number: { 583 sym(1).Node = QScript::makeAstNode<QScript::AST::PropertyNameAndValueList> (driver->nodePool(), sym(1).PropertyName, sym(3).Expression); 584 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 585} break; 586./ 587 588PropertyNameAndValueList: PropertyNameAndValueList T_COMMA PropertyName T_COLON AssignmentExpression ; 589/. 590case $rule_number: { 591 sym(1).Node = QScript::makeAstNode<QScript::AST::PropertyNameAndValueList> (driver->nodePool(), sym(1).PropertyNameAndValueList, sym(3).PropertyName, sym(5).Expression); 592 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5)); 593} break; 594./ 595 596PropertyName: T_IDENTIFIER ; 597/. 598case $rule_number: { 599 sym(1).Node = QScript::makeAstNode<QScript::AST::IdentifierPropertyName> (driver->nodePool(), sym(1).sval); 600 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); 601} break; 602./ 603 604PropertyName: T_STRING_LITERAL ; 605/. 606case $rule_number: { 607 sym(1).Node = QScript::makeAstNode<QScript::AST::StringLiteralPropertyName> (driver->nodePool(), sym(1).sval); 608 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); 609} break; 610./ 611 612PropertyName: T_NUMERIC_LITERAL ; 613/. 614case $rule_number: { 615 sym(1).Node = QScript::makeAstNode<QScript::AST::NumericLiteralPropertyName> (driver->nodePool(), sym(1).dval); 616 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); 617} break; 618./ 619 620PropertyName: ReservedIdentifier ; 621/. 622case $rule_number: { 623 sym(1).Node = QScript::makeAstNode<QScript::AST::IdentifierPropertyName> (driver->nodePool(), sym(1).sval); 624 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); 625} break; 626./ 627 628ReservedIdentifier: T_BREAK ; 629/. 630case $rule_number: 631./ 632ReservedIdentifier: T_CASE ; 633/. 634case $rule_number: 635./ 636ReservedIdentifier: T_CATCH ; 637/. 638case $rule_number: 639./ 640ReservedIdentifier: T_CONTINUE ; 641/. 642case $rule_number: 643./ 644ReservedIdentifier: T_DEFAULT ; 645/. 646case $rule_number: 647./ 648ReservedIdentifier: T_DELETE ; 649/. 650case $rule_number: 651./ 652ReservedIdentifier: T_DO ; 653/. 654case $rule_number: 655./ 656ReservedIdentifier: T_ELSE ; 657/. 658case $rule_number: 659./ 660ReservedIdentifier: T_FALSE ; 661/. 662case $rule_number: 663./ 664ReservedIdentifier: T_FINALLY ; 665/. 666case $rule_number: 667./ 668ReservedIdentifier: T_FOR ; 669/. 670case $rule_number: 671./ 672ReservedIdentifier: T_FUNCTION ; 673/. 674case $rule_number: 675./ 676ReservedIdentifier: T_IF ; 677/. 678case $rule_number: 679./ 680ReservedIdentifier: T_IN ; 681/. 682case $rule_number: 683./ 684ReservedIdentifier: T_INSTANCEOF ; 685/. 686case $rule_number: 687./ 688ReservedIdentifier: T_NEW ; 689/. 690case $rule_number: 691./ 692ReservedIdentifier: T_NULL ; 693/. 694case $rule_number: 695./ 696ReservedIdentifier: T_RETURN ; 697/. 698case $rule_number: 699./ 700ReservedIdentifier: T_SWITCH ; 701/. 702case $rule_number: 703./ 704ReservedIdentifier: T_THIS ; 705/. 706case $rule_number: 707./ 708ReservedIdentifier: T_THROW ; 709/. 710case $rule_number: 711./ 712ReservedIdentifier: T_TRUE ; 713/. 714case $rule_number: 715./ 716ReservedIdentifier: T_TRY ; 717/. 718case $rule_number: 719./ 720ReservedIdentifier: T_TYPEOF ; 721/. 722case $rule_number: 723./ 724ReservedIdentifier: T_VAR ; 725/. 726case $rule_number: 727./ 728ReservedIdentifier: T_VOID ; 729/. 730case $rule_number: 731./ 732ReservedIdentifier: T_WHILE ; 733/. 734case $rule_number: 735./ 736ReservedIdentifier: T_CONST ; 737/. 738case $rule_number: 739./ 740ReservedIdentifier: T_DEBUGGER ; 741/. 742case $rule_number: 743./ 744ReservedIdentifier: T_RESERVED_WORD ; 745/. 746case $rule_number: 747./ 748ReservedIdentifier: T_WITH ; 749/. 750case $rule_number: 751{ 752 sym(1).sval = driver->intern(lexer->characterBuffer(), lexer->characterCount()); 753} break; 754./ 755 756PropertyIdentifier: T_IDENTIFIER ; 757PropertyIdentifier: ReservedIdentifier ; 758 759MemberExpression: PrimaryExpression ; 760MemberExpression: FunctionExpression ; 761 762MemberExpression: MemberExpression T_LBRACKET Expression T_RBRACKET ; 763/. 764case $rule_number: { 765 sym(1).Node = QScript::makeAstNode<QScript::AST::ArrayMemberExpression> (driver->nodePool(), sym(1).Expression, sym(3).Expression); 766 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4)); 767} break; 768./ 769 770MemberExpression: MemberExpression T_DOT PropertyIdentifier ; 771/. 772case $rule_number: { 773 sym(1).Node = QScript::makeAstNode<QScript::AST::FieldMemberExpression> (driver->nodePool(), sym(1).Expression, sym(3).sval); 774 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4)); 775} break; 776./ 777 778MemberExpression: T_NEW MemberExpression Arguments ; 779/. 780case $rule_number: { 781 sym(1).Node = QScript::makeAstNode<QScript::AST::NewMemberExpression> (driver->nodePool(), sym(2).Expression, sym(3).ArgumentList); 782 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 783} break; 784./ 785 786NewExpression: MemberExpression ; 787 788NewExpression: T_NEW NewExpression ; 789/. 790case $rule_number: { 791 sym(1).Node = QScript::makeAstNode<QScript::AST::NewExpression> (driver->nodePool(), sym(2).Expression); 792 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); 793} break; 794./ 795 796CallExpression: MemberExpression Arguments ; 797/. 798case $rule_number: { 799 sym(1).Node = QScript::makeAstNode<QScript::AST::CallExpression> (driver->nodePool(), sym(1).Expression, sym(2).ArgumentList); 800 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); 801} break; 802./ 803 804CallExpression: CallExpression Arguments ; 805/. 806case $rule_number: { 807 sym(1).Node = QScript::makeAstNode<QScript::AST::CallExpression> (driver->nodePool(), sym(1).Expression, sym(2).ArgumentList); 808 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); 809} break; 810./ 811 812CallExpression: CallExpression T_LBRACKET Expression T_RBRACKET ; 813/. 814case $rule_number: { 815 sym(1).Node = QScript::makeAstNode<QScript::AST::ArrayMemberExpression> (driver->nodePool(), sym(1).Expression, sym(3).Expression); 816 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4)); 817} break; 818./ 819 820CallExpression: CallExpression T_DOT PropertyIdentifier ; 821/. 822case $rule_number: { 823 sym(1).Node = QScript::makeAstNode<QScript::AST::FieldMemberExpression> (driver->nodePool(), sym(1).Expression, sym(3).sval); 824 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 825} break; 826./ 827 828Arguments: T_LPAREN T_RPAREN ; 829/. 830case $rule_number: { 831 sym(1).Node = 0; 832} break; 833./ 834 835Arguments: T_LPAREN ArgumentList T_RPAREN ; 836/. 837case $rule_number: { 838 sym(1).Node = sym(2).ArgumentList->finish (); 839 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 840} break; 841./ 842 843ArgumentList: AssignmentExpression ; 844/. 845case $rule_number: { 846 sym(1).Node = QScript::makeAstNode<QScript::AST::ArgumentList> (driver->nodePool(), sym(1).Expression); 847 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); 848} break; 849./ 850 851ArgumentList: ArgumentList T_COMMA AssignmentExpression ; 852/. 853case $rule_number: { 854 sym(1).Node = QScript::makeAstNode<QScript::AST::ArgumentList> (driver->nodePool(), sym(1).ArgumentList, sym(3).Expression); 855 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 856} break; 857./ 858 859LeftHandSideExpression: NewExpression ; 860LeftHandSideExpression: CallExpression ; 861PostfixExpression: LeftHandSideExpression ; 862 863PostfixExpression: LeftHandSideExpression T_PLUS_PLUS ; 864/. 865case $rule_number: { 866 sym(1).Node = QScript::makeAstNode<QScript::AST::PostIncrementExpression> (driver->nodePool(), sym(1).Expression); 867 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); 868} break; 869./ 870 871PostfixExpression: LeftHandSideExpression T_MINUS_MINUS ; 872/. 873case $rule_number: { 874 sym(1).Node = QScript::makeAstNode<QScript::AST::PostDecrementExpression> (driver->nodePool(), sym(1).Expression); 875 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); 876} break; 877./ 878 879UnaryExpression: PostfixExpression ; 880 881UnaryExpression: T_DELETE UnaryExpression ; 882/. 883case $rule_number: { 884 sym(1).Node = QScript::makeAstNode<QScript::AST::DeleteExpression> (driver->nodePool(), sym(2).Expression); 885 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); 886} break; 887./ 888 889UnaryExpression: T_VOID UnaryExpression ; 890/. 891case $rule_number: { 892 sym(1).Node = QScript::makeAstNode<QScript::AST::VoidExpression> (driver->nodePool(), sym(2).Expression); 893 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); 894} break; 895./ 896 897UnaryExpression: T_TYPEOF UnaryExpression ; 898/. 899case $rule_number: { 900 sym(1).Node = QScript::makeAstNode<QScript::AST::TypeOfExpression> (driver->nodePool(), sym(2).Expression); 901 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); 902} break; 903./ 904 905UnaryExpression: T_PLUS_PLUS UnaryExpression ; 906/. 907case $rule_number: { 908 sym(1).Node = QScript::makeAstNode<QScript::AST::PreIncrementExpression> (driver->nodePool(), sym(2).Expression); 909 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); 910} break; 911./ 912 913UnaryExpression: T_MINUS_MINUS UnaryExpression ; 914/. 915case $rule_number: { 916 sym(1).Node = QScript::makeAstNode<QScript::AST::PreDecrementExpression> (driver->nodePool(), sym(2).Expression); 917 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); 918} break; 919./ 920 921UnaryExpression: T_PLUS UnaryExpression ; 922/. 923case $rule_number: { 924 sym(1).Node = QScript::makeAstNode<QScript::AST::UnaryPlusExpression> (driver->nodePool(), sym(2).Expression); 925 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); 926} break; 927./ 928 929UnaryExpression: T_MINUS UnaryExpression ; 930/. 931case $rule_number: { 932 sym(1).Node = QScript::makeAstNode<QScript::AST::UnaryMinusExpression> (driver->nodePool(), sym(2).Expression); 933 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); 934} break; 935./ 936 937UnaryExpression: T_TILDE UnaryExpression ; 938/. 939case $rule_number: { 940 sym(1).Node = QScript::makeAstNode<QScript::AST::TildeExpression> (driver->nodePool(), sym(2).Expression); 941 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); 942} break; 943./ 944 945UnaryExpression: T_NOT UnaryExpression ; 946/. 947case $rule_number: { 948 sym(1).Node = QScript::makeAstNode<QScript::AST::NotExpression> (driver->nodePool(), sym(2).Expression); 949 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); 950} break; 951./ 952 953MultiplicativeExpression: UnaryExpression ; 954 955MultiplicativeExpression: MultiplicativeExpression T_STAR UnaryExpression ; 956/. 957case $rule_number: { 958 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Mul, sym(3).Expression); 959 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 960} break; 961./ 962 963MultiplicativeExpression: MultiplicativeExpression T_DIVIDE_ UnaryExpression ; 964/. 965case $rule_number: { 966 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Div, sym(3).Expression); 967 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 968} break; 969./ 970 971MultiplicativeExpression: MultiplicativeExpression T_REMAINDER UnaryExpression ; 972/. 973case $rule_number: { 974 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Mod, sym(3).Expression); 975 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 976} break; 977./ 978 979AdditiveExpression: MultiplicativeExpression ; 980 981AdditiveExpression: AdditiveExpression T_PLUS MultiplicativeExpression ; 982/. 983case $rule_number: { 984 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Add, sym(3).Expression); 985 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 986} break; 987./ 988 989AdditiveExpression: AdditiveExpression T_MINUS MultiplicativeExpression ; 990/. 991case $rule_number: { 992 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Sub, sym(3).Expression); 993 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 994} break; 995./ 996 997ShiftExpression: AdditiveExpression ; 998 999ShiftExpression: ShiftExpression T_LT_LT AdditiveExpression ; 1000/. 1001case $rule_number: { 1002 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::LShift, sym(3).Expression); 1003 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 1004} break; 1005./ 1006 1007ShiftExpression: ShiftExpression T_GT_GT AdditiveExpression ; 1008/. 1009case $rule_number: { 1010 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::RShift, sym(3).Expression); 1011 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 1012} break; 1013./ 1014 1015ShiftExpression: ShiftExpression T_GT_GT_GT AdditiveExpression ; 1016/. 1017case $rule_number: { 1018 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::URShift, sym(3).Expression); 1019 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 1020} break; 1021./ 1022 1023RelationalExpression: ShiftExpression ; 1024 1025RelationalExpression: RelationalExpression T_LT ShiftExpression ; 1026/. 1027case $rule_number: { 1028 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Lt, sym(3).Expression); 1029 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 1030} break; 1031./ 1032 1033RelationalExpression: RelationalExpression T_GT ShiftExpression ; 1034/. 1035case $rule_number: { 1036 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Gt, sym(3).Expression); 1037 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 1038} break; 1039./ 1040 1041RelationalExpression: RelationalExpression T_LE ShiftExpression ; 1042/. 1043case $rule_number: { 1044 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Le, sym(3).Expression); 1045 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 1046} break; 1047./ 1048 1049RelationalExpression: RelationalExpression T_GE ShiftExpression ; 1050/. 1051case $rule_number: { 1052 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Ge, sym(3).Expression); 1053 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 1054} break; 1055./ 1056 1057RelationalExpression: RelationalExpression T_INSTANCEOF ShiftExpression ; 1058/. 1059case $rule_number: { 1060 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::InstanceOf, sym(3).Expression); 1061 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 1062} break; 1063./ 1064 1065RelationalExpression: RelationalExpression T_IN ShiftExpression ; 1066/. 1067case $rule_number: { 1068 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::In, sym(3).Expression); 1069 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 1070} break; 1071./ 1072 1073RelationalExpressionNotIn: ShiftExpression ; 1074 1075RelationalExpressionNotIn: RelationalExpressionNotIn T_LT ShiftExpression ; 1076/. 1077case $rule_number: { 1078 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Lt, sym(3).Expression); 1079 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 1080} break; 1081./ 1082 1083RelationalExpressionNotIn: RelationalExpressionNotIn T_GT ShiftExpression ; 1084/. 1085case $rule_number: { 1086 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Gt, sym(3).Expression); 1087 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 1088} break; 1089./ 1090 1091RelationalExpressionNotIn: RelationalExpressionNotIn T_LE ShiftExpression ; 1092/. 1093case $rule_number: { 1094 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Le, sym(3).Expression); 1095 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 1096} break; 1097./ 1098 1099RelationalExpressionNotIn: RelationalExpressionNotIn T_GE ShiftExpression ; 1100/. 1101case $rule_number: { 1102 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Ge, sym(3).Expression); 1103 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 1104} break; 1105./ 1106 1107RelationalExpressionNotIn: RelationalExpressionNotIn T_INSTANCEOF ShiftExpression ; 1108/. 1109case $rule_number: { 1110 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::InstanceOf, sym(3).Expression); 1111 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 1112} break; 1113./ 1114 1115EqualityExpression: RelationalExpression ; 1116 1117EqualityExpression: EqualityExpression T_EQ_EQ RelationalExpression ; 1118/. 1119case $rule_number: { 1120 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Equal, sym(3).Expression); 1121 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 1122} break; 1123./ 1124 1125EqualityExpression: EqualityExpression T_NOT_EQ RelationalExpression ; 1126/. 1127case $rule_number: { 1128 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::NotEqual, sym(3).Expression); 1129 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 1130} break; 1131./ 1132 1133EqualityExpression: EqualityExpression T_EQ_EQ_EQ RelationalExpression ; 1134/. 1135case $rule_number: { 1136 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::StrictEqual, sym(3).Expression); 1137 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 1138} break; 1139./ 1140 1141EqualityExpression: EqualityExpression T_NOT_EQ_EQ RelationalExpression ; 1142/. 1143case $rule_number: { 1144 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::StrictNotEqual, sym(3).Expression); 1145 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 1146} break; 1147./ 1148 1149EqualityExpressionNotIn: RelationalExpressionNotIn ; 1150 1151EqualityExpressionNotIn: EqualityExpressionNotIn T_EQ_EQ RelationalExpressionNotIn ; 1152/. 1153case $rule_number: { 1154 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Equal, sym(3).Expression); 1155 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 1156} break; 1157./ 1158 1159EqualityExpressionNotIn: EqualityExpressionNotIn T_NOT_EQ RelationalExpressionNotIn; 1160/. 1161case $rule_number: { 1162 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::NotEqual, sym(3).Expression); 1163 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 1164} break; 1165./ 1166 1167EqualityExpressionNotIn: EqualityExpressionNotIn T_EQ_EQ_EQ RelationalExpressionNotIn ; 1168/. 1169case $rule_number: { 1170 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::StrictEqual, sym(3).Expression); 1171 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 1172} break; 1173./ 1174 1175EqualityExpressionNotIn: EqualityExpressionNotIn T_NOT_EQ_EQ RelationalExpressionNotIn ; 1176/. 1177case $rule_number: { 1178 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::StrictNotEqual, sym(3).Expression); 1179 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 1180} break; 1181./ 1182 1183BitwiseANDExpression: EqualityExpression ; 1184 1185BitwiseANDExpression: BitwiseANDExpression T_AND EqualityExpression ; 1186/. 1187case $rule_number: { 1188 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::BitAnd, sym(3).Expression); 1189 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 1190} break; 1191./ 1192 1193BitwiseANDExpressionNotIn: EqualityExpressionNotIn ; 1194 1195BitwiseANDExpressionNotIn: BitwiseANDExpressionNotIn T_AND EqualityExpressionNotIn ; 1196/. 1197case $rule_number: { 1198 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::BitAnd, sym(3).Expression); 1199 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 1200} break; 1201./ 1202 1203BitwiseXORExpression: BitwiseANDExpression ; 1204 1205BitwiseXORExpression: BitwiseXORExpression T_XOR BitwiseANDExpression ; 1206/. 1207case $rule_number: { 1208 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::BitXor, sym(3).Expression); 1209 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 1210} break; 1211./ 1212 1213BitwiseXORExpressionNotIn: BitwiseANDExpressionNotIn ; 1214 1215BitwiseXORExpressionNotIn: BitwiseXORExpressionNotIn T_XOR BitwiseANDExpressionNotIn ; 1216/. 1217case $rule_number: { 1218 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::BitXor, sym(3).Expression); 1219 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 1220} break; 1221./ 1222 1223BitwiseORExpression: BitwiseXORExpression ; 1224 1225BitwiseORExpression: BitwiseORExpression T_OR BitwiseXORExpression ; 1226/. 1227case $rule_number: { 1228 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::BitOr, sym(3).Expression); 1229 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 1230} break; 1231./ 1232 1233BitwiseORExpressionNotIn: BitwiseXORExpressionNotIn ; 1234 1235BitwiseORExpressionNotIn: BitwiseORExpressionNotIn T_OR BitwiseXORExpressionNotIn ; 1236/. 1237case $rule_number: { 1238 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::BitOr, sym(3).Expression); 1239 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 1240} break; 1241./ 1242 1243LogicalANDExpression: BitwiseORExpression ; 1244 1245LogicalANDExpression: LogicalANDExpression T_AND_AND BitwiseORExpression ; 1246/. 1247case $rule_number: { 1248 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::And, sym(3).Expression); 1249 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 1250} break; 1251./ 1252 1253LogicalANDExpressionNotIn: BitwiseORExpressionNotIn ; 1254 1255LogicalANDExpressionNotIn: LogicalANDExpressionNotIn T_AND_AND BitwiseORExpressionNotIn ; 1256/. 1257case $rule_number: { 1258 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::And, sym(3).Expression); 1259 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 1260} break; 1261./ 1262 1263LogicalORExpression: LogicalANDExpression ; 1264 1265LogicalORExpression: LogicalORExpression T_OR_OR LogicalANDExpression ; 1266/. 1267case $rule_number: { 1268 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Or, sym(3).Expression); 1269 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 1270} break; 1271./ 1272 1273LogicalORExpressionNotIn: LogicalANDExpressionNotIn ; 1274 1275LogicalORExpressionNotIn: LogicalORExpressionNotIn T_OR_OR LogicalANDExpressionNotIn ; 1276/. 1277case $rule_number: { 1278 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Or, sym(3).Expression); 1279 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 1280} break; 1281./ 1282 1283ConditionalExpression: LogicalORExpression ; 1284 1285ConditionalExpression: LogicalORExpression T_QUESTION AssignmentExpression T_COLON AssignmentExpression ; 1286/. 1287case $rule_number: { 1288 sym(1).Node = QScript::makeAstNode<QScript::AST::ConditionalExpression> (driver->nodePool(), sym(1).Expression, sym(3).Expression, sym(5).Expression); 1289 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 1290} break; 1291./ 1292 1293ConditionalExpressionNotIn: LogicalORExpressionNotIn ; 1294 1295ConditionalExpressionNotIn: LogicalORExpressionNotIn T_QUESTION AssignmentExpressionNotIn T_COLON AssignmentExpressionNotIn ; 1296/. 1297case $rule_number: { 1298 sym(1).Node = QScript::makeAstNode<QScript::AST::ConditionalExpression> (driver->nodePool(), sym(1).Expression, sym(3).Expression, sym(5).Expression); 1299 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 1300} break; 1301./ 1302 1303AssignmentExpression: ConditionalExpression ; 1304 1305AssignmentExpression: LeftHandSideExpression AssignmentOperator AssignmentExpression ; 1306/. 1307case $rule_number: { 1308 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, sym(2).ival, sym(3).Expression); 1309 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 1310} break; 1311./ 1312 1313AssignmentExpressionNotIn: ConditionalExpressionNotIn ; 1314 1315AssignmentExpressionNotIn: LeftHandSideExpression AssignmentOperator AssignmentExpressionNotIn ; 1316/. 1317case $rule_number: { 1318 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, sym(2).ival, sym(3).Expression); 1319 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 1320} break; 1321./ 1322 1323AssignmentOperator: T_EQ ; 1324/. 1325case $rule_number: { 1326 sym(1).ival = QSOperator::Assign; 1327} break; 1328./ 1329 1330AssignmentOperator: T_STAR_EQ ; 1331/. 1332case $rule_number: { 1333 sym(1).ival = QSOperator::InplaceMul; 1334} break; 1335./ 1336 1337AssignmentOperator: T_DIVIDE_EQ ; 1338/. 1339case $rule_number: { 1340 sym(1).ival = QSOperator::InplaceDiv; 1341} break; 1342./ 1343 1344AssignmentOperator: T_REMAINDER_EQ ; 1345/. 1346case $rule_number: { 1347 sym(1).ival = QSOperator::InplaceMod; 1348} break; 1349./ 1350 1351AssignmentOperator: T_PLUS_EQ ; 1352/. 1353case $rule_number: { 1354 sym(1).ival = QSOperator::InplaceAdd; 1355} break; 1356./ 1357 1358AssignmentOperator: T_MINUS_EQ ; 1359/. 1360case $rule_number: { 1361 sym(1).ival = QSOperator::InplaceSub; 1362} break; 1363./ 1364 1365AssignmentOperator: T_LT_LT_EQ ; 1366/. 1367case $rule_number: { 1368 sym(1).ival = QSOperator::InplaceLeftShift; 1369} break; 1370./ 1371 1372AssignmentOperator: T_GT_GT_EQ ; 1373/. 1374case $rule_number: { 1375 sym(1).ival = QSOperator::InplaceRightShift; 1376} break; 1377./ 1378 1379AssignmentOperator: T_GT_GT_GT_EQ ; 1380/. 1381case $rule_number: { 1382 sym(1).ival = QSOperator::InplaceURightShift; 1383} break; 1384./ 1385 1386AssignmentOperator: T_AND_EQ ; 1387/. 1388case $rule_number: { 1389 sym(1).ival = QSOperator::InplaceAnd; 1390} break; 1391./ 1392 1393AssignmentOperator: T_XOR_EQ ; 1394/. 1395case $rule_number: { 1396 sym(1).ival = QSOperator::InplaceXor; 1397} break; 1398./ 1399 1400AssignmentOperator: T_OR_EQ ; 1401/. 1402case $rule_number: { 1403 sym(1).ival = QSOperator::InplaceOr; 1404} break; 1405./ 1406 1407Expression: AssignmentExpression ; 1408 1409Expression: Expression T_COMMA AssignmentExpression ; 1410/. 1411case $rule_number: { 1412 sym(1).Node = QScript::makeAstNode<QScript::AST::Expression> (driver->nodePool(), sym(1).Expression, sym(3).Expression); 1413 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 1414} break; 1415./ 1416 1417ExpressionOpt: ; 1418/. 1419case $rule_number: { 1420 sym(1).Node = 0; 1421} break; 1422./ 1423 1424ExpressionOpt: Expression ; 1425 1426ExpressionNotIn: AssignmentExpressionNotIn ; 1427 1428ExpressionNotIn: ExpressionNotIn T_COMMA AssignmentExpressionNotIn ; 1429/. 1430case $rule_number: { 1431 sym(1).Node = QScript::makeAstNode<QScript::AST::Expression> (driver->nodePool(), sym(1).Expression, sym(3).Expression); 1432 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 1433} break; 1434./ 1435 1436ExpressionNotInOpt: ; 1437/. 1438case $rule_number: { 1439 sym(1).Node = 0; 1440} break; 1441./ 1442 1443ExpressionNotInOpt: ExpressionNotIn ; 1444 1445Statement: Block ; 1446Statement: VariableStatement ; 1447Statement: EmptyStatement ; 1448Statement: ExpressionStatement ; 1449Statement: IfStatement ; 1450Statement: IterationStatement ; 1451Statement: ContinueStatement ; 1452Statement: BreakStatement ; 1453Statement: ReturnStatement ; 1454Statement: WithStatement ; 1455Statement: LabelledStatement ; 1456Statement: SwitchStatement ; 1457Statement: ThrowStatement ; 1458Statement: TryStatement ; 1459Statement: DebuggerStatement ; 1460 1461 1462Block: T_LBRACE StatementListOpt T_RBRACE ; 1463/. 1464case $rule_number: { 1465 sym(1).Node = QScript::makeAstNode<QScript::AST::Block> (driver->nodePool(), sym(2).StatementList); 1466 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 1467} break; 1468./ 1469 1470StatementList: Statement ; 1471/. 1472case $rule_number: { 1473 sym(1).Node = QScript::makeAstNode<QScript::AST::StatementList> (driver->nodePool(), sym(1).Statement); 1474 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); 1475} break; 1476./ 1477 1478StatementList: StatementList Statement ; 1479/. 1480case $rule_number: { 1481 sym(1).Node = QScript::makeAstNode<QScript::AST::StatementList> (driver->nodePool(), sym(1).StatementList, sym(2).Statement); 1482 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); 1483} break; 1484./ 1485 1486StatementListOpt: ; 1487/. 1488case $rule_number: { 1489 sym(1).Node = 0; 1490} break; 1491./ 1492 1493StatementListOpt: StatementList ; 1494/. 1495case $rule_number: { 1496 sym(1).Node = sym(1).StatementList->finish (); 1497} break; 1498./ 1499 1500VariableStatement: VariableDeclarationKind VariableDeclarationList T_AUTOMATIC_SEMICOLON ; -- automatic semicolon 1501VariableStatement: VariableDeclarationKind VariableDeclarationList T_SEMICOLON ; 1502/. 1503case $rule_number: { 1504 sym(1).Node = QScript::makeAstNode<QScript::AST::VariableStatement> (driver->nodePool(), sym(2).VariableDeclarationList->finish (/*readOnly=*/sym(1).ival == T_CONST)); 1505 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 1506} break; 1507./ 1508 1509VariableDeclarationKind: T_CONST ; 1510/. 1511case $rule_number: { 1512 sym(1).ival = T_CONST; 1513} break; 1514./ 1515 1516VariableDeclarationKind: T_VAR ; 1517/. 1518case $rule_number: { 1519 sym(1).ival = T_VAR; 1520} break; 1521./ 1522 1523VariableDeclarationList: VariableDeclaration ; 1524/. 1525case $rule_number: { 1526 sym(1).Node = QScript::makeAstNode<QScript::AST::VariableDeclarationList> (driver->nodePool(), sym(1).VariableDeclaration); 1527 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); 1528} break; 1529./ 1530 1531VariableDeclarationList: VariableDeclarationList T_COMMA VariableDeclaration ; 1532/. 1533case $rule_number: { 1534 sym(1).Node = QScript::makeAstNode<QScript::AST::VariableDeclarationList> (driver->nodePool(), sym(1).VariableDeclarationList, sym(3).VariableDeclaration); 1535 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 1536} break; 1537./ 1538 1539VariableDeclarationListNotIn: VariableDeclarationNotIn ; 1540/. 1541case $rule_number: { 1542 sym(1).Node = QScript::makeAstNode<QScript::AST::VariableDeclarationList> (driver->nodePool(), sym(1).VariableDeclaration); 1543 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); 1544} break; 1545./ 1546 1547VariableDeclarationListNotIn: VariableDeclarationListNotIn T_COMMA VariableDeclarationNotIn ; 1548/. 1549case $rule_number: { 1550 sym(1).Node = QScript::makeAstNode<QScript::AST::VariableDeclarationList> (driver->nodePool(), sym(1).VariableDeclarationList, sym(3).VariableDeclaration); 1551 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 1552} break; 1553./ 1554 1555VariableDeclaration: T_IDENTIFIER InitialiserOpt ; 1556/. 1557case $rule_number: { 1558 sym(1).Node = QScript::makeAstNode<QScript::AST::VariableDeclaration> (driver->nodePool(), sym(1).sval, sym(2).Expression); 1559 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); 1560} break; 1561./ 1562 1563VariableDeclarationNotIn: T_IDENTIFIER InitialiserNotInOpt ; 1564/. 1565case $rule_number: { 1566 sym(1).Node = QScript::makeAstNode<QScript::AST::VariableDeclaration> (driver->nodePool(), sym(1).sval, sym(2).Expression); 1567 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); 1568} break; 1569./ 1570 1571Initialiser: T_EQ AssignmentExpression ; 1572/. 1573case $rule_number: { 1574 sym(1) = sym(2); 1575 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); 1576} break; 1577./ 1578 1579InitialiserOpt: ; 1580/. 1581case $rule_number: { 1582 sym(1).Node = 0; 1583} break; 1584./ 1585 1586InitialiserOpt: Initialiser ; 1587 1588InitialiserNotIn: T_EQ AssignmentExpressionNotIn ; 1589/. 1590case $rule_number: { 1591 sym(1) = sym(2); 1592 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); 1593} break; 1594./ 1595 1596InitialiserNotInOpt: ; 1597/. 1598case $rule_number: { 1599 sym(1).Node = 0; 1600} break; 1601./ 1602 1603InitialiserNotInOpt: InitialiserNotIn ; 1604 1605EmptyStatement: T_SEMICOLON ; 1606/. 1607case $rule_number: { 1608 sym(1).Node = QScript::makeAstNode<QScript::AST::EmptyStatement> (driver->nodePool()); 1609 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); 1610} break; 1611./ 1612 1613ExpressionStatement: Expression T_AUTOMATIC_SEMICOLON ; -- automatic semicolon 1614ExpressionStatement: Expression T_SEMICOLON ; 1615/. 1616case $rule_number: { 1617 sym(1).Node = QScript::makeAstNode<QScript::AST::ExpressionStatement> (driver->nodePool(), sym(1).Expression); 1618 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); 1619} break; 1620./ 1621 1622IfStatement: T_IF T_LPAREN Expression T_RPAREN Statement T_ELSE Statement ; 1623/. 1624case $rule_number: { 1625 sym(1).Node = QScript::makeAstNode<QScript::AST::IfStatement> (driver->nodePool(), sym(3).Expression, sym(5).Statement, sym(7).Statement); 1626 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(7)); 1627} break; 1628./ 1629 1630IfStatement: T_IF T_LPAREN Expression T_RPAREN Statement ; 1631/. 1632case $rule_number: { 1633 sym(1).Node = QScript::makeAstNode<QScript::AST::IfStatement> (driver->nodePool(), sym(3).Expression, sym(5).Statement); 1634 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5)); 1635} break; 1636./ 1637 1638 1639IterationStatement: T_DO Statement T_WHILE T_LPAREN Expression T_RPAREN T_AUTOMATIC_SEMICOLON ; -- automatic semicolon 1640IterationStatement: T_DO Statement T_WHILE T_LPAREN Expression T_RPAREN T_SEMICOLON ; 1641/. 1642case $rule_number: { 1643 sym(1).Node = QScript::makeAstNode<QScript::AST::DoWhileStatement> (driver->nodePool(), sym(2).Statement, sym(5).Expression); 1644 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(7)); 1645} break; 1646./ 1647 1648IterationStatement: T_WHILE T_LPAREN Expression T_RPAREN Statement ; 1649/. 1650case $rule_number: { 1651 sym(1).Node = QScript::makeAstNode<QScript::AST::WhileStatement> (driver->nodePool(), sym(3).Expression, sym(5).Statement); 1652 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5)); 1653} break; 1654./ 1655 1656IterationStatement: T_FOR T_LPAREN ExpressionNotInOpt T_SEMICOLON ExpressionOpt T_SEMICOLON ExpressionOpt T_RPAREN Statement ; 1657/. 1658case $rule_number: { 1659 sym(1).Node = QScript::makeAstNode<QScript::AST::ForStatement> (driver->nodePool(), sym(3).Expression, sym(5).Expression, sym(7).Expression, sym(9).Statement); 1660 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(9)); 1661} break; 1662./ 1663 1664IterationStatement: T_FOR T_LPAREN T_VAR VariableDeclarationListNotIn T_SEMICOLON ExpressionOpt T_SEMICOLON ExpressionOpt T_RPAREN Statement ; 1665/. 1666case $rule_number: { 1667 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); 1668 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(10)); 1669} break; 1670./ 1671 1672IterationStatement: T_FOR T_LPAREN LeftHandSideExpression T_IN Expression T_RPAREN Statement ; 1673/. 1674case $rule_number: { 1675 sym(1).Node = QScript::makeAstNode<QScript::AST::ForEachStatement> (driver->nodePool(), sym(3).Expression, sym(5).Expression, sym(7).Statement); 1676 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(7)); 1677} break; 1678./ 1679 1680IterationStatement: T_FOR T_LPAREN T_VAR VariableDeclarationNotIn T_IN Expression T_RPAREN Statement ; 1681/. 1682case $rule_number: { 1683 sym(1).Node = QScript::makeAstNode<QScript::AST::LocalForEachStatement> (driver->nodePool(), sym(4).VariableDeclaration, sym(6).Expression, sym(8).Statement); 1684 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(8)); 1685} break; 1686./ 1687 1688ContinueStatement: T_CONTINUE T_AUTOMATIC_SEMICOLON ; -- automatic semicolon 1689ContinueStatement: T_CONTINUE T_SEMICOLON ; 1690/. 1691case $rule_number: { 1692 sym(1).Node = QScript::makeAstNode<QScript::AST::ContinueStatement> (driver->nodePool()); 1693 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); 1694} break; 1695./ 1696 1697ContinueStatement: T_CONTINUE T_IDENTIFIER T_AUTOMATIC_SEMICOLON ; -- automatic semicolon 1698ContinueStatement: T_CONTINUE T_IDENTIFIER T_SEMICOLON ; 1699/. 1700case $rule_number: { 1701 sym(1).Node = QScript::makeAstNode<QScript::AST::ContinueStatement> (driver->nodePool(), sym(2).sval); 1702 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 1703} break; 1704./ 1705 1706BreakStatement: T_BREAK T_AUTOMATIC_SEMICOLON ; -- automatic semicolon 1707BreakStatement: T_BREAK T_SEMICOLON ; 1708/. 1709case $rule_number: { 1710 sym(1).Node = QScript::makeAstNode<QScript::AST::BreakStatement> (driver->nodePool()); 1711 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); 1712} break; 1713./ 1714 1715BreakStatement: T_BREAK T_IDENTIFIER T_AUTOMATIC_SEMICOLON ; -- automatic semicolon 1716BreakStatement: T_BREAK T_IDENTIFIER T_SEMICOLON ; 1717/. 1718case $rule_number: { 1719 sym(1).Node = QScript::makeAstNode<QScript::AST::BreakStatement> (driver->nodePool(), sym(2).sval); 1720 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 1721} break; 1722./ 1723 1724ReturnStatement: T_RETURN ExpressionOpt T_AUTOMATIC_SEMICOLON ; -- automatic semicolon 1725ReturnStatement: T_RETURN ExpressionOpt T_SEMICOLON ; 1726/. 1727case $rule_number: { 1728 sym(1).Node = QScript::makeAstNode<QScript::AST::ReturnStatement> (driver->nodePool(), sym(2).Expression); 1729 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 1730} break; 1731./ 1732 1733WithStatement: T_WITH T_LPAREN Expression T_RPAREN Statement ; 1734/. 1735case $rule_number: { 1736 sym(1).Node = QScript::makeAstNode<QScript::AST::WithStatement> (driver->nodePool(), sym(3).Expression, sym(5).Statement); 1737 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5)); 1738} break; 1739./ 1740 1741SwitchStatement: T_SWITCH T_LPAREN Expression T_RPAREN CaseBlock ; 1742/. 1743case $rule_number: { 1744 sym(1).Node = QScript::makeAstNode<QScript::AST::SwitchStatement> (driver->nodePool(), sym(3).Expression, sym(5).CaseBlock); 1745 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5)); 1746} break; 1747./ 1748 1749CaseBlock: T_LBRACE CaseClausesOpt T_RBRACE ; 1750/. 1751case $rule_number: { 1752 sym(1).Node = QScript::makeAstNode<QScript::AST::CaseBlock> (driver->nodePool(), sym(2).CaseClauses); 1753 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 1754} break; 1755./ 1756 1757CaseBlock: T_LBRACE CaseClausesOpt DefaultClause CaseClausesOpt T_RBRACE ; 1758/. 1759case $rule_number: { 1760 sym(1).Node = QScript::makeAstNode<QScript::AST::CaseBlock> (driver->nodePool(), sym(2).CaseClauses, sym(3).DefaultClause, sym(4).CaseClauses); 1761 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5)); 1762} break; 1763./ 1764 1765CaseClauses: CaseClause ; 1766/. 1767case $rule_number: { 1768 sym(1).Node = QScript::makeAstNode<QScript::AST::CaseClauses> (driver->nodePool(), sym(1).CaseClause); 1769 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); 1770} break; 1771./ 1772 1773CaseClauses: CaseClauses CaseClause ; 1774/. 1775case $rule_number: { 1776 sym(1).Node = QScript::makeAstNode<QScript::AST::CaseClauses> (driver->nodePool(), sym(1).CaseClauses, sym(2).CaseClause); 1777 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); 1778} break; 1779./ 1780 1781CaseClausesOpt: ; 1782/. 1783case $rule_number: { 1784 sym(1).Node = 0; 1785} break; 1786./ 1787 1788CaseClausesOpt: CaseClauses ; 1789/. 1790case $rule_number: { 1791 sym(1).Node = sym(1).CaseClauses->finish (); 1792 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); 1793} break; 1794./ 1795 1796CaseClause: T_CASE Expression T_COLON StatementListOpt ; 1797/. 1798case $rule_number: { 1799 sym(1).Node = QScript::makeAstNode<QScript::AST::CaseClause> (driver->nodePool(), sym(2).Expression, sym(4).StatementList); 1800 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4)); 1801} break; 1802./ 1803 1804DefaultClause: T_DEFAULT T_COLON StatementListOpt ; 1805/. 1806case $rule_number: { 1807 sym(1).Node = QScript::makeAstNode<QScript::AST::DefaultClause> (driver->nodePool(), sym(3).StatementList); 1808 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 1809} break; 1810./ 1811 1812LabelledStatement: T_IDENTIFIER T_COLON Statement ; 1813/. 1814case $rule_number: { 1815 sym(1).Node = QScript::makeAstNode<QScript::AST::LabelledStatement> (driver->nodePool(), sym(1).sval, sym(3).Statement); 1816 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 1817} break; 1818./ 1819 1820ThrowStatement: T_THROW Expression T_AUTOMATIC_SEMICOLON ; -- automatic semicolon 1821ThrowStatement: T_THROW Expression T_SEMICOLON ; 1822/. 1823case $rule_number: { 1824 sym(1).Node = QScript::makeAstNode<QScript::AST::ThrowStatement> (driver->nodePool(), sym(2).Expression); 1825 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 1826} break; 1827./ 1828 1829TryStatement: T_TRY Block Catch ; 1830/. 1831case $rule_number: { 1832 sym(1).Node = QScript::makeAstNode<QScript::AST::TryStatement> (driver->nodePool(), sym(2).Statement, sym(3).Catch); 1833 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 1834} break; 1835./ 1836 1837TryStatement: T_TRY Block Finally ; 1838/. 1839case $rule_number: { 1840 sym(1).Node = QScript::makeAstNode<QScript::AST::TryStatement> (driver->nodePool(), sym(2).Statement, sym(3).Finally); 1841 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 1842} break; 1843./ 1844 1845TryStatement: T_TRY Block Catch Finally ; 1846/. 1847case $rule_number: { 1848 sym(1).Node = QScript::makeAstNode<QScript::AST::TryStatement> (driver->nodePool(), sym(2).Statement, sym(3).Catch, sym(4).Finally); 1849 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4)); 1850} break; 1851./ 1852 1853Catch: T_CATCH T_LPAREN T_IDENTIFIER T_RPAREN Block ; 1854/. 1855case $rule_number: { 1856 sym(1).Node = QScript::makeAstNode<QScript::AST::Catch> (driver->nodePool(), sym(3).sval, sym(5).Statement); 1857 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5)); 1858} break; 1859./ 1860 1861Finally: T_FINALLY Block ; 1862/. 1863case $rule_number: { 1864 sym(1).Node = QScript::makeAstNode<QScript::AST::Finally> (driver->nodePool(), sym(2).Statement); 1865 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); 1866} break; 1867./ 1868 1869DebuggerStatement: T_DEBUGGER T_AUTOMATIC_SEMICOLON ; -- automatic semicolon 1870DebuggerStatement: T_DEBUGGER T_SEMICOLON ; 1871/. 1872case $rule_number: { 1873 sym(1).Node = QScript::makeAstNode<QScript::AST::DebuggerStatement> (driver->nodePool()); 1874 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); 1875} break; 1876./ 1877 1878FunctionDeclaration: T_FUNCTION T_IDENTIFIER T_LPAREN FormalParameterListOpt T_RPAREN T_LBRACE FunctionBodyOpt T_RBRACE ; 1879/. 1880case $rule_number: { 1881 sym(1).Node = QScript::makeAstNode<QScript::AST::FunctionDeclaration> (driver->nodePool(), sym(2).sval, sym(4).FormalParameterList, sym(7).FunctionBody); 1882 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(8)); 1883} break; 1884./ 1885 1886FunctionExpression: T_FUNCTION IdentifierOpt T_LPAREN FormalParameterListOpt T_RPAREN T_LBRACE FunctionBodyOpt T_RBRACE ; 1887/. 1888case $rule_number: { 1889 sym(1).Node = QScript::makeAstNode<QScript::AST::FunctionExpression> (driver->nodePool(), sym(2).sval, sym(4).FormalParameterList, sym(7).FunctionBody); 1890 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(8)); 1891} break; 1892./ 1893 1894FormalParameterList: T_IDENTIFIER ; 1895/. 1896case $rule_number: { 1897 sym(1).Node = QScript::makeAstNode<QScript::AST::FormalParameterList> (driver->nodePool(), sym(1).sval); 1898 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); 1899} break; 1900./ 1901 1902FormalParameterList: FormalParameterList T_COMMA T_IDENTIFIER ; 1903/. 1904case $rule_number: { 1905 sym(1).Node = QScript::makeAstNode<QScript::AST::FormalParameterList> (driver->nodePool(), sym(1).FormalParameterList, sym(3).sval); 1906 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3)); 1907} break; 1908./ 1909 1910FormalParameterListOpt: ; 1911/. 1912case $rule_number: { 1913 sym(1).Node = 0; 1914} break; 1915./ 1916 1917FormalParameterListOpt: FormalParameterList ; 1918/. 1919case $rule_number: { 1920 sym(1).Node = sym(1).FormalParameterList->finish (); 1921 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); 1922} break; 1923./ 1924 1925FunctionBodyOpt: ; 1926/. 1927case $rule_number: { 1928 sym(1).Node = 0; 1929} break; 1930./ 1931 1932FunctionBodyOpt: FunctionBody ; 1933 1934FunctionBody: SourceElements ; 1935/. 1936case $rule_number: { 1937 sym(1).Node = QScript::makeAstNode<QScript::AST::FunctionBody> (driver->nodePool(), sym(1).SourceElements->finish ()); 1938 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); 1939} break; 1940./ 1941 1942Program: SourceElements ; 1943/. 1944case $rule_number: { 1945 sym(1).Node = QScript::makeAstNode<QScript::AST::Program> (driver->nodePool(), sym(1).SourceElements->finish ()); 1946 driver->changeAbstractSyntaxTree(sym(1).Node); 1947 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); 1948} break; 1949./ 1950 1951SourceElements: SourceElement ; 1952/. 1953case $rule_number: { 1954 sym(1).Node = QScript::makeAstNode<QScript::AST::SourceElements> (driver->nodePool(), sym(1).SourceElement); 1955 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); 1956} break; 1957./ 1958 1959SourceElements: SourceElements SourceElement ; 1960/. 1961case $rule_number: { 1962 sym(1).Node = QScript::makeAstNode<QScript::AST::SourceElements> (driver->nodePool(), sym(1).SourceElements, sym(2).SourceElement); 1963 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2)); 1964} break; 1965./ 1966 1967SourceElement: Statement ; 1968/. 1969case $rule_number: { 1970 sym(1).Node = QScript::makeAstNode<QScript::AST::StatementSourceElement> (driver->nodePool(), sym(1).Statement); 1971 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); 1972} break; 1973./ 1974 1975SourceElement: FunctionDeclaration ; 1976/. 1977case $rule_number: { 1978 sym(1).Node = QScript::makeAstNode<QScript::AST::FunctionSourceElement> (driver->nodePool(), sym(1).FunctionDeclaration); 1979 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1)); 1980} break; 1981./ 1982 1983IdentifierOpt: ; 1984/. 1985case $rule_number: { 1986 sym(1).sval = 0; 1987} break; 1988./ 1989 1990IdentifierOpt: T_IDENTIFIER ; 1991 1992PropertyNameAndValueListOpt: ; 1993/. 1994case $rule_number: { 1995 sym(1).Node = 0; 1996} break; 1997./ 1998 1999PropertyNameAndValueListOpt: PropertyNameAndValueList ; 2000 2001/. 2002 } // switch 2003 2004 state_stack [tos] = nt_action (act, lhs [r] - TERMINAL_COUNT); 2005 2006 if (rhs[r] > 1) { 2007 location_stack[tos - 1].endLine = location_stack[tos + rhs[r] - 2].endLine; 2008 location_stack[tos - 1].endColumn = location_stack[tos + rhs[r] - 2].endColumn; 2009 location_stack[tos] = location_stack[tos + rhs[r] - 1]; 2010 } 2011 } 2012 2013 else 2014 { 2015 if (saved_yytoken == -1 && automatic (driver, yytoken) && t_action (state, T_AUTOMATIC_SEMICOLON) > 0) 2016 { 2017 saved_yytoken = yytoken; 2018 yytoken = T_SEMICOLON; 2019 continue; 2020 } 2021 2022 else if ((state == INITIAL_STATE) && (yytoken == 0)) { 2023 // accept empty input 2024 yytoken = T_SEMICOLON; 2025 continue; 2026 } 2027 2028 int ers = state; 2029 int shifts = 0; 2030 int reduces = 0; 2031 int expected_tokens [3]; 2032 for (int tk = 0; tk < TERMINAL_COUNT; ++tk) 2033 { 2034 int k = t_action (ers, tk); 2035 2036 if (! k) 2037 continue; 2038 else if (k < 0) 2039 ++reduces; 2040 else if (spell [tk]) 2041 { 2042 if (shifts < 3) 2043 expected_tokens [shifts] = tk; 2044 ++shifts; 2045 } 2046 } 2047 2048 error_message.clear (); 2049 if (shifts && shifts < 3) 2050 { 2051 bool first = true; 2052 2053 for (int s = 0; s < shifts; ++s) 2054 { 2055 if (first) 2056 error_message += QLatin1String ("Expected "); 2057 else 2058 error_message += QLatin1String (", "); 2059 2060 first = false; 2061 error_message += QLatin1String("`"); 2062 error_message += QLatin1String (spell [expected_tokens [s]]); 2063 error_message += QLatin1String("'"); 2064 } 2065 } 2066 2067 if (error_message.isEmpty()) 2068 error_message = lexer->errorMessage(); 2069 2070 error_lineno = lexer->startLineNo(); 2071 error_column = lexer->startColumnNo(); 2072 2073 return false; 2074 } 2075 } 2076 2077 return false; 2078} 2079 2080QT_END_NAMESPACE 2081./ 2082/: 2083QT_END_NAMESPACE 2084 2085#endif // QSCRIPTPARSER_P_H 2086:/ 2087