OpenCoverage

qqmljs.g #1

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/qtdeclarative/src/qtdeclarative/src/qml/parser/qqmljs.g
Source codeSwitch to Preprocessed file
LineSourceCount
1-----------------------------------------------------------------------------
2---
3-- Copyright (C) 2016 The Qt Company Ltd.-
4-- Contact: http://www.qt.io/licensing/-
5---
6-- This file is part of the QtQml module of the Qt Toolkit.-
7---
8-- $QT_BEGIN_LICENSE:LGPL$-
9-- Commercial License Usage-
10-- Licensees holding valid commercial Qt licenses may use this file in-
11-- accordance with the commercial license agreement provided with the-
12-- Software or, alternatively, in accordance with the terms contained in-
13-- a written agreement between you and The Qt Company. For licensing terms-
14-- and conditions see https://www.qt.io/terms-conditions. For further-
15-- information use the contact form at https://www.qt.io/contact-us.-
16---
17-- GNU Lesser General Public License Usage-
18-- Alternatively, this file may be used under the terms of the GNU Lesser-
19-- General Public License version 3 as published by the Free Software-
20-- Foundation and appearing in the file LICENSE.LGPL3 included in the-
21-- packaging of this file. Please review the following information to-
22-- ensure the GNU Lesser General Public License version 3 requirements-
23-- will be met: https://www.gnu.org/licenses/lgpl-3.0.html.-
24---
25-- GNU General Public License Usage-
26-- Alternatively, this file may be used under the terms of the GNU-
27-- General Public License version 2.0 or (at your option) the GNU General-
28-- Public license version 3 or any later version approved by the KDE Free-
29-- Qt Foundation. The licenses are as published by the Free Software-
30-- Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3-
31-- included in the packaging of this file. Please review the following-
32-- information to ensure the GNU General Public License requirements will-
33-- be met: https://www.gnu.org/licenses/gpl-2.0.html and-
34-- https://www.gnu.org/licenses/gpl-3.0.html.-
35---
36-- $QT_END_LICENSE$-
37---
38-----------------------------------------------------------------------------
39-
40%parser QQmlJSGrammar-
41%decl qqmljsparser_p.h-
42%impl qqmljsparser.cpp-
43%expect 1-
44-
45%token T_AND "&" T_AND_AND "&&" T_AND_EQ "&="-
46%token T_BREAK "break" T_CASE "case" T_CATCH "catch"-
47%token T_COLON ":" T_COMMA "," T_CONTINUE "continue"-
48%token T_DEFAULT "default" T_DELETE "delete" T_DIVIDE_ "/"-
49%token T_DIVIDE_EQ "/=" T_DO "do" T_DOT "."-
50%token T_ELSE "else" T_EQ "=" T_EQ_EQ "=="-
51%token T_EQ_EQ_EQ "===" T_FINALLY "finally" T_FOR "for"-
52%token T_FUNCTION "function" T_GE ">=" T_GT ">"-
53%token T_GT_GT ">>" T_GT_GT_EQ ">>=" T_GT_GT_GT ">>>"-
54%token T_GT_GT_GT_EQ ">>>=" T_IDENTIFIER "identifier" T_IF "if"-
55%token T_IN "in" T_INSTANCEOF "instanceof" T_LBRACE "{"-
56%token T_LBRACKET "[" T_LE "<=" T_LPAREN "("-
57%token T_LT "<" T_LT_LT "<<" T_LT_LT_EQ "<<="-
58%token T_MINUS "-" T_MINUS_EQ "-=" T_MINUS_MINUS "--"-
59%token T_NEW "new" T_NOT "!" T_NOT_EQ "!="-
60%token T_NOT_EQ_EQ "!==" T_NUMERIC_LITERAL "numeric literal" T_OR "|"-
61%token T_OR_EQ "|=" T_OR_OR "||" T_PLUS "+"-
62%token T_PLUS_EQ "+=" T_PLUS_PLUS "++" T_QUESTION "?"-
63%token T_RBRACE "}" T_RBRACKET "]" T_REMAINDER "%"-
64%token T_REMAINDER_EQ "%=" T_RETURN "return" T_RPAREN ")"-
65%token T_SEMICOLON ";" T_AUTOMATIC_SEMICOLON T_STAR "*"-
66%token T_STAR_STAR "**" T_STAR_STAR_EQ "**=" T_STAR_EQ "*="-
67%token T_STRING_LITERAL "string literal"-
68%token T_PROPERTY "property" T_SIGNAL "signal" T_READONLY "readonly"-
69%token T_SWITCH "switch" T_THIS "this" T_THROW "throw"-
70%token T_TILDE "~" T_TRY "try" T_TYPEOF "typeof"-
71%token T_VAR "var" T_VOID "void" T_WHILE "while"-
72%token T_WITH "with" T_XOR "^" T_XOR_EQ "^="-
73%token T_NULL "null" T_TRUE "true" T_FALSE "false"-
74%token T_CONST "const" T_LET "let"-
75%token T_DEBUGGER "debugger"-
76%token T_RESERVED_WORD "reserved word"-
77%token T_MULTILINE_STRING_LITERAL "multiline string literal"-
78%token T_COMMENT "comment"-
79%token T_COMPATIBILITY_SEMICOLON-
80%token T_ARROW "=>"-
81%token T_ENUM "enum"-
82%token T_ELLIPSIS "..."-
83%token T_YIELD "yield"-
84%token T_SUPER "super"-
85%token T_CLASS "class"-
86%token T_EXTENDS "extends"-
87%token T_STATIC "static"-
88%token T_EXPORT "export"-
89%token T_FROM "from"-
90-
91--- template strings-
92%token T_NO_SUBSTITUTION_TEMPLATE"(no subst template)"-
93%token T_TEMPLATE_HEAD "(template head)"-
94%token T_TEMPLATE_MIDDLE "(template middle)"-
95%token T_TEMPLATE_TAIL "(template tail)"-
96-
97--- context keywords.-
98%token T_PUBLIC "public"-
99%token T_IMPORT "import"-
100%token T_PRAGMA "pragma"-
101%token T_AS "as"-
102%token T_OF "of"-
103%token T_GET "get"-
104%token T_SET "set"-
105-
106%token T_ERROR-
107-
108--- feed tokens-
109%token T_FEED_UI_PROGRAM-
110%token T_FEED_UI_OBJECT_MEMBER-
111%token T_FEED_JS_STATEMENT-
112%token T_FEED_JS_EXPRESSION-
113%token T_FEED_JS_SCRIPT-
114%token T_FEED_JS_MODULE-
115-
116--- Lookahead handling-
117%token T_FORCE_DECLARATION "(force decl)"-
118%token T_FORCE_BLOCK "(force block)"-
119%token T_FOR_LOOKAHEAD_OK "(for lookahead ok)"-
120-
121--%left T_PLUS T_MINUS-
122%nonassoc T_IDENTIFIER T_COLON T_SIGNAL T_PROPERTY T_READONLY T_ON T_SET T_GET T_OF T_STATIC T_FROM-
123%nonassoc REDUCE_HERE-
124-
125%start TopLevel-
126-
127/./****************************************************************************-
128**-
129** Copyright (C) 2016 The Qt Company Ltd.-
130** Contact: https://www.qt.io/licensing/-
131**-
132** This file is part of the QtQml module of the Qt Toolkit.-
133**-
134** $QT_BEGIN_LICENSE:LGPL$-
135** Commercial License Usage-
136** Licensees holding valid commercial Qt licenses may use this file in-
137** accordance with the commercial license agreement provided with the-
138** Software or, alternatively, in accordance with the terms contained in-
139** a written agreement between you and The Qt Company. For licensing terms-
140** and conditions see https://www.qt.io/terms-conditions. For further-
141** information use the contact form at https://www.qt.io/contact-us.-
142**-
143** GNU Lesser General Public License Usage-
144** Alternatively, this file may be used under the terms of the GNU Lesser-
145** General Public License version 3 as published by the Free Software-
146** Foundation and appearing in the file LICENSE.LGPL3 included in the-
147** packaging of this file. Please review the following information to-
148** ensure the GNU Lesser General Public License version 3 requirements-
149** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.-
150**-
151** GNU General Public License Usage-
152** Alternatively, this file may be used under the terms of the GNU-
153** General Public License version 2.0 or (at your option) the GNU General-
154** Public license version 3 or any later version approved by the KDE Free-
155** Qt Foundation. The licenses are as published by the Free Software-
156** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3-
157** included in the packaging of this file. Please review the following-
158** information to ensure the GNU General Public License requirements will-
159** be met: https://www.gnu.org/licenses/gpl-2.0.html and-
160** https://www.gnu.org/licenses/gpl-3.0.html.-
161**-
162** $QT_END_LICENSE$-
163**-
164****************************************************************************/-
165-
166#include <private/qqmljsengine_p.h>-
167#include <private/qqmljslexer_p.h>-
168#include <private/qqmljsast_p.h>-
169#include <private/qqmljsmemorypool_p.h>-
170-
171#include <QtCore/qdebug.h>-
172#include <QtCore/qcoreapplication.h>-
173-
174#include <string.h>-
175-
176./-
177-
178/:/****************************************************************************-
179**-
180** Copyright (C) 2016 The Qt Company Ltd.-
181** Contact: https://www.qt.io/licensing/-
182**-
183** This file is part of the QtQml module of the Qt Toolkit.-
184**-
185** $QT_BEGIN_LICENSE:LGPL$-
186** Commercial License Usage-
187** Licensees holding valid commercial Qt licenses may use this file in-
188** accordance with the commercial license agreement provided with the-
189** Software or, alternatively, in accordance with the terms contained in-
190** a written agreement between you and The Qt Company. For licensing terms-
191** and conditions see https://www.qt.io/terms-conditions. For further-
192** information use the contact form at https://www.qt.io/contact-us.-
193**-
194** GNU Lesser General Public License Usage-
195** Alternatively, this file may be used under the terms of the GNU Lesser-
196** General Public License version 3 as published by the Free Software-
197** Foundation and appearing in the file LICENSE.LGPL3 included in the-
198** packaging of this file. Please review the following information to-
199** ensure the GNU Lesser General Public License version 3 requirements-
200** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.-
201**-
202** GNU General Public License Usage-
203** Alternatively, this file may be used under the terms of the GNU-
204** General Public License version 2.0 or (at your option) the GNU General-
205** Public license version 3 or any later version approved by the KDE Free-
206** Qt Foundation. The licenses are as published by the Free Software-
207** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3-
208** included in the packaging of this file. Please review the following-
209** information to ensure the GNU General Public License requirements will-
210** be met: https://www.gnu.org/licenses/gpl-2.0.html and-
211** https://www.gnu.org/licenses/gpl-3.0.html.-
212**-
213** $QT_END_LICENSE$-
214**-
215****************************************************************************/-
216-
217-
218//-
219// W A R N I N G-
220// --------------
221//-
222// This file is not part of the Qt API. It exists purely as an-
223// implementation detail. This header file may change from version to-
224// version without notice, or even be removed.-
225//-
226// We mean it.-
227//-
228-
229//-
230// W A R N I N G-
231// --------------
232//-
233// This file is automatically generated from qqmljs.g.-
234// Changes should be made to that file, not here. Any change to this file will-
235// be lost!-
236//-
237// To regenerate this file, run:-
238// qlalr --no-debug --no-lines --qt qqmljs.g-
239//-
240-
241#ifndef QQMLJSPARSER_P_H-
242#define QQMLJSPARSER_P_H-
243-
244#include <private/qqmljsglobal_p.h>-
245#include <private/qqmljsgrammar_p.h>-
246#include <private/qqmljsast_p.h>-
247#include <private/qqmljsengine_p.h>-
248-
249#include <QtCore/qlist.h>-
250#include <QtCore/qstring.h>-
251-
252QT_QML_BEGIN_NAMESPACE-
253-
254namespace QQmlJS {-
255-
256class Engine;-
257-
258class QML_PARSER_EXPORT Parser: protected $table-
259{-
260public:-
261 union Value {-
262 int ival;-
263 double dval;-
264 AST::VariableScope scope;-
265 AST::ForEachType forEachType;-
266 AST::ArgumentList *ArgumentList;-
267 AST::CaseBlock *CaseBlock;-
268 AST::CaseClause *CaseClause;-
269 AST::CaseClauses *CaseClauses;-
270 AST::Catch *Catch;-
271 AST::DefaultClause *DefaultClause;-
272 AST::Elision *Elision;-
273 AST::ExpressionNode *Expression;-
274 AST::TemplateLiteral *Template;-
275 AST::Finally *Finally;-
276 AST::FormalParameterList *FormalParameterList;-
277 AST::FunctionDeclaration *FunctionDeclaration;-
278 AST::Node *Node;-
279 AST::PropertyName *PropertyName;-
280 AST::Statement *Statement;-
281 AST::StatementList *StatementList;-
282 AST::Block *Block;-
283 AST::VariableDeclarationList *VariableDeclarationList;-
284 AST::Pattern *Pattern;-
285 AST::PatternElement *PatternElement;-
286 AST::PatternElementList *PatternElementList;-
287 AST::PatternProperty *PatternProperty;-
288 AST::PatternPropertyList *PatternPropertyList;-
289 AST::ClassElementList *ClassElementList;-
290-
291 AST::UiProgram *UiProgram;-
292 AST::UiHeaderItemList *UiHeaderItemList;-
293 AST::UiPragma *UiPragma;-
294 AST::UiImport *UiImport;-
295 AST::UiParameterList *UiParameterList;-
296 AST::UiPublicMember *UiPublicMember;-
297 AST::UiObjectDefinition *UiObjectDefinition;-
298 AST::UiObjectInitializer *UiObjectInitializer;-
299 AST::UiObjectBinding *UiObjectBinding;-
300 AST::UiScriptBinding *UiScriptBinding;-
301 AST::UiArrayBinding *UiArrayBinding;-
302 AST::UiObjectMember *UiObjectMember;-
303 AST::UiObjectMemberList *UiObjectMemberList;-
304 AST::UiArrayMemberList *UiArrayMemberList;-
305 AST::UiQualifiedId *UiQualifiedId;-
306 AST::UiQualifiedPragmaId *UiQualifiedPragmaId;-
307 AST::UiEnumMemberList *UiEnumMemberList;-
308 };-
309-
310public:-
311 Parser(Engine *engine);-
312 ~Parser();-
313-
314 // parse a UI program-
315 bool parse() { ++functionNestingLevel; bool r = parse(T_FEED_UI_PROGRAM); --functionNestingLevel; return r; }
never executed: return r;
0
316 bool parseStatement() { return parse(T_FEED_JS_STATEMENT); }
never executed: return parse(T_FEED_JS_STATEMENT);
0
317 bool parseExpression() { return parse(T_FEED_JS_EXPRESSION); }
executed 985 times by 2 tests: return parse(T_FEED_JS_EXPRESSION);
Executed by:
  • tst_ecmascripttests
  • tst_qqmlecmascript
985
318 bool parseUiObjectMember() { ++functionNestingLevel; bool r = parse(T_FEED_UI_OBJECT_MEMBER); --functionNestingLevel; return r; }
never executed: return r;
0
319 bool parseProgram() { return parse(T_FEED_JS_SCRIPT); }
executed 2818020 times by 40 tests: return parse(T_FEED_JS_SCRIPT);
Executed by:
  • tst_ecmascripttests
  • tst_examples
  • tst_qjsengine
  • tst_qjsonbinding
  • tst_qjsvalue
  • tst_qjsvalueiterator
  • tst_qmlcachegen
  • tst_qqmlcontext
  • tst_qqmldebugjs
  • tst_qqmlecmascript
  • tst_qqmlenginedebugservice
  • tst_qqmlexpression
  • tst_qqmlincubator
  • tst_qqmllistmodel
  • tst_qqmllistmodelworkerscript
  • tst_qqmlmetatype
  • tst_qqmlproperty
  • tst_qqmlqt
  • tst_qqmlsqldatabase
  • tst_qqmltranslation
  • tst_qqmlvaluetypes
  • tst_qqmlxmlhttprequest
  • tst_qquickanimationcontroller
  • tst_qquickdesignersupport
  • tst_qquickdrag
  • ...
2818020
320 bool parseScript() { return parse(T_FEED_JS_SCRIPT); }
never executed: return parse(T_FEED_JS_SCRIPT);
0
321 bool parseModule() { return parse(T_FEED_JS_MODULE); }
never executed: return parse(T_FEED_JS_MODULE);
0
322-
323 AST::UiProgram *ast() const-
324 { return AST::cast<AST::UiProgram *>(program); }
never executed: return AST::cast<AST::UiProgram *>(program);
0
325-
326 AST::Statement *statement() const-
327 {-
328 if (! program)
! programDescription
TRUEnever evaluated
FALSEnever evaluated
0
329 return 0;
never executed: return 0;
0
330-
331 return program->statementCast();
never executed: return program->statementCast();
0
332 }-
333-
334 AST::ExpressionNode *expression() const-
335 {-
336 if (! program)
! programDescription
TRUEnever evaluated
FALSEnever evaluated
0
337 return 0;
never executed: return 0;
0
338-
339 return program->expressionCast();
never executed: return program->expressionCast();
0
340 }-
341-
342 AST::UiObjectMember *uiObjectMember() const-
343 {-
344 if (! program)
! programDescription
TRUEnever evaluated
FALSEnever evaluated
0
345 return 0;
never executed: return 0;
0
346-
347 return program->uiObjectMemberCast();
never executed: return program->uiObjectMemberCast();
0
348 }-
349-
350 AST::Node *rootNode() const-
351 { return program; }
executed 2813969 times by 40 tests: return program;
Executed by:
  • tst_ecmascripttests
  • tst_examples
  • tst_qjsengine
  • tst_qjsonbinding
  • tst_qjsvalue
  • tst_qjsvalueiterator
  • tst_qmlcachegen
  • tst_qqmlcontext
  • tst_qqmldebugjs
  • tst_qqmlecmascript
  • tst_qqmlenginedebugservice
  • tst_qqmlexpression
  • tst_qqmlincubator
  • tst_qqmllistmodel
  • tst_qqmllistmodelworkerscript
  • tst_qqmlmetatype
  • tst_qqmlproperty
  • tst_qqmlqt
  • tst_qqmlsqldatabase
  • tst_qqmltranslation
  • tst_qqmlvaluetypes
  • tst_qqmlxmlhttprequest
  • tst_qquickanimationcontroller
  • tst_qquickdesignersupport
  • tst_qquickdrag
  • ...
2813969
352-
353 QList<DiagnosticMessage> diagnosticMessages() const-
354 { return diagnostic_messages; }
executed 2816740 times by 40 tests: return diagnostic_messages;
Executed by:
  • tst_ecmascripttests
  • tst_examples
  • tst_qjsengine
  • tst_qjsonbinding
  • tst_qjsvalue
  • tst_qjsvalueiterator
  • tst_qmlcachegen
  • tst_qqmlcontext
  • tst_qqmldebugjs
  • tst_qqmlecmascript
  • tst_qqmlenginedebugservice
  • tst_qqmlexpression
  • tst_qqmlincubator
  • tst_qqmllistmodel
  • tst_qqmllistmodelworkerscript
  • tst_qqmlmetatype
  • tst_qqmlproperty
  • tst_qqmlqt
  • tst_qqmlsqldatabase
  • tst_qqmltranslation
  • tst_qqmlvaluetypes
  • tst_qqmlxmlhttprequest
  • tst_qquickanimationcontroller
  • tst_qquickdesignersupport
  • tst_qquickdrag
  • ...
2816740
355-
356 inline DiagnosticMessage diagnosticMessage() const-
357 {-
358 for (const DiagnosticMessage &d : diagnostic_messages) {-
359 if (d.kind != DiagnosticMessage::Warning)
d.kind != Diag...ssage::WarningDescription
TRUEnever evaluated
FALSEnever evaluated
0
360 return d;
never executed: return d;
0
361 }
never executed: end of block
0
362-
363 return DiagnosticMessage();
never executed: return DiagnosticMessage();
0
364 }-
365-
366 inline QString errorMessage() const-
367 { return diagnosticMessage().message; }
never executed: return diagnosticMessage().message;
0
368-
369 inline int errorLineNumber() const-
370 { return diagnosticMessage().loc.startLine; }
never executed: return diagnosticMessage().loc.startLine;
0
371-
372 inline int errorColumnNumber() const-
373 { return diagnosticMessage().loc.startColumn; }
never executed: return diagnosticMessage().loc.startColumn;
0
374-
375protected:-
376 bool parse(int startToken);-
377-
378 void reallocateStack();-
379-
380 inline Value &sym(int index)-
381 { return sym_stack [tos + index - 1]; }
executed 297713653 times by 147 tests: return sym_stack [tos + index - 1];
Executed by:
  • tst_bindingdependencyapi
  • tst_drawingmodes
  • tst_ecmascripttests
  • tst_examples
  • tst_flickableinterop
  • tst_multipointtoucharea_interop
  • tst_parserstress
  • tst_qjsengine
  • tst_qjsonbinding
  • tst_qjsvalue
  • tst_qjsvalueiterator
  • tst_qmlcachegen
  • tst_qmldiskcache
  • tst_qqmlapplicationengine
  • tst_qqmlbinding
  • tst_qqmlcomponent
  • tst_qqmlconnections
  • tst_qqmlconsole
  • tst_qqmlcontext
  • tst_qqmldebugjs
  • tst_qqmlecmascript
  • tst_qqmlenginecleanup
  • tst_qqmlenginedebugservice
  • tst_qqmlexpression
  • tst_qqmlfileselector
  • ...
297713653
382-
383 inline QStringRef &stringRef(int index)-
384 { return string_stack [tos + index - 1]; }
executed 103079572 times by 147 tests: return string_stack [tos + index - 1];
Executed by:
  • tst_bindingdependencyapi
  • tst_drawingmodes
  • tst_ecmascripttests
  • tst_examples
  • tst_flickableinterop
  • tst_multipointtoucharea_interop
  • tst_parserstress
  • tst_qjsengine
  • tst_qjsonbinding
  • tst_qjsvalue
  • tst_qjsvalueiterator
  • tst_qmlcachegen
  • tst_qmldiskcache
  • tst_qqmlapplicationengine
  • tst_qqmlbinding
  • tst_qqmlcomponent
  • tst_qqmlconnections
  • tst_qqmlconsole
  • tst_qqmlcontext
  • tst_qqmldebugjs
  • tst_qqmlecmascript
  • tst_qqmlenginecleanup
  • tst_qqmlenginedebugservice
  • tst_qqmlexpression
  • tst_qqmlfileselector
  • ...
103079572
385-
386 inline AST::SourceLocation &loc(int index)-
387 { return location_stack [tos + index - 1]; }
executed 153093373 times by 147 tests: return location_stack [tos + index - 1];
Executed by:
  • tst_bindingdependencyapi
  • tst_drawingmodes
  • tst_ecmascripttests
  • tst_examples
  • tst_flickableinterop
  • tst_multipointtoucharea_interop
  • tst_parserstress
  • tst_qjsengine
  • tst_qjsonbinding
  • tst_qjsvalue
  • tst_qjsvalueiterator
  • tst_qmlcachegen
  • tst_qmldiskcache
  • tst_qqmlapplicationengine
  • tst_qqmlbinding
  • tst_qqmlcomponent
  • tst_qqmlconnections
  • tst_qqmlconsole
  • tst_qqmlcontext
  • tst_qqmldebugjs
  • tst_qqmlecmascript
  • tst_qqmlenginecleanup
  • tst_qqmlenginedebugservice
  • tst_qqmlexpression
  • tst_qqmlfileselector
  • ...
153093373
388-
389 AST::UiQualifiedId *reparseAsQualifiedId(AST::ExpressionNode *expr);-
390 AST::UiQualifiedPragmaId *reparseAsQualifiedPragmaId(AST::ExpressionNode *expr);-
391-
392 void pushToken(int token);-
393 int lookaheadToken(Lexer *lexer);-
394-
395 void syntaxError(const AST::SourceLocation &location, const char *message) {-
396 diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, location, QLatin1String(message)));-
397 }
executed 272 times by 3 tests: end of block
Executed by:
  • tst_ecmascripttests
  • tst_qjsengine
  • tst_qqmlparser
272
398 void syntaxError(const AST::SourceLocation &location, const QString &message) {-
399 diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, location, message));-
400 }
executed 158 times by 2 tests: end of block
Executed by:
  • tst_ecmascripttests
  • tst_qqmlparser
158
401-
402protected:-
403 Engine *driver;-
404 MemoryPool *pool;-
405 int tos = 0;-
406 int stack_size = 0;-
407 Value *sym_stack = nullptr;-
408 int *state_stack = nullptr;-
409 AST::SourceLocation *location_stack = nullptr;-
410 QVector<QStringRef> string_stack;-
411-
412 AST::Node *program = nullptr;-
413-
414 // error recovery and lookahead handling-
415 enum { TOKEN_BUFFER_SIZE = 5 };-
416-
417 struct SavedToken {-
418 int token;-
419 double dval;-
420 AST::SourceLocation loc;-
421 QStringRef spell;-
422 };-
423-
424 int yytoken = -1;-
425 double yylval = 0.;-
426 QStringRef yytokenspell;-
427 AST::SourceLocation yylloc;-
428 AST::SourceLocation yyprevlloc;-
429-
430 SavedToken token_buffer[TOKEN_BUFFER_SIZE];-
431 SavedToken *first_token = nullptr;-
432 SavedToken *last_token = nullptr;-
433-
434 int functionNestingLevel = 0;-
435-
436 enum CoverExpressionType {-
437 CE_Invalid,-
438 CE_ParenthesizedExpression,-
439 CE_FormalParameterList-
440 };-
441 AST::SourceLocation coverExpressionErrorLocation;-
442 CoverExpressionType coverExpressionType = CE_Invalid;-
443-
444 QList<DiagnosticMessage> diagnostic_messages;-
445};-
446-
447} // end of namespace QQmlJS-
448-
449-
450:/-
451-
452-
453/.-
454-
455#include "qqmljsparser_p.h"-
456-
457#include <QtCore/qvarlengtharray.h>-
458-
459//-
460// W A R N I N G-
461// --------------
462//-
463// This file is automatically generated from qqmljs.g.-
464// Changes should be made to that file, not here. Any change to this file will-
465// be lost!-
466//-
467// To regenerate this file, run:-
468// qlalr --no-debug --no-lines --qt qqmljs.g-
469//-
470-
471#define UNIMPLEMENTED syntaxError(loc(1), "Unimplemented"); return false-
472-
473using namespace QQmlJS;-
474-
475QT_QML_BEGIN_NAMESPACE-
476-
477void Parser::reallocateStack()-
478{-
479 if (! stack_size)-
480 stack_size = 128;-
481 else-
482 stack_size <<= 1;-
483-
484 sym_stack = reinterpret_cast<Value*> (realloc(sym_stack, stack_size * sizeof(Value)));-
485 state_stack = reinterpret_cast<int*> (realloc(state_stack, stack_size * sizeof(int)));-
486 location_stack = reinterpret_cast<AST::SourceLocation*> (realloc(location_stack, stack_size * sizeof(AST::SourceLocation)));-
487 string_stack.resize(stack_size);-
488}-
489-
490Parser::Parser(Engine *engine):-
491 driver(engine),-
492 pool(engine->pool())-
493{-
494}-
495-
496Parser::~Parser()-
497{-
498 if (stack_size) {-
499 free(sym_stack);-
500 free(state_stack);-
501 free(location_stack);-
502 }-
503}-
504-
505static inline AST::SourceLocation location(Lexer *lexer)-
506{-
507 AST::SourceLocation loc;-
508 loc.offset = lexer->tokenOffset();-
509 loc.length = lexer->tokenLength();-
510 loc.startLine = lexer->tokenStartLine();-
511 loc.startColumn = lexer->tokenStartColumn();-
512 return loc;-
513}-
514-
515AST::UiQualifiedId *Parser::reparseAsQualifiedId(AST::ExpressionNode *expr)-
516{-
517 QVarLengthArray<QStringRef, 4> nameIds;-
518 QVarLengthArray<AST::SourceLocation, 4> locations;-
519-
520 AST::ExpressionNode *it = expr;-
521 while (AST::FieldMemberExpression *m = AST::cast<AST::FieldMemberExpression *>(it)) {-
522 nameIds.append(m->name);-
523 locations.append(m->identifierToken);-
524 it = m->base;-
525 }-
526-
527 if (AST::IdentifierExpression *idExpr = AST::cast<AST::IdentifierExpression *>(it)) {-
528 AST::UiQualifiedId *q = new (pool) AST::UiQualifiedId(idExpr->name);-
529 q->identifierToken = idExpr->identifierToken;-
530-
531 AST::UiQualifiedId *currentId = q;-
532 for (int i = nameIds.size() - 1; i != -1; --i) {-
533 currentId = new (pool) AST::UiQualifiedId(currentId, nameIds[i]);-
534 currentId->identifierToken = locations[i];-
535 }-
536-
537 return currentId->finish();-
538 }-
539-
540 return 0;-
541}-
542-
543AST::UiQualifiedPragmaId *Parser::reparseAsQualifiedPragmaId(AST::ExpressionNode *expr)-
544{-
545 if (AST::IdentifierExpression *idExpr = AST::cast<AST::IdentifierExpression *>(expr)) {-
546 AST::UiQualifiedPragmaId *q = new (pool) AST::UiQualifiedPragmaId(idExpr->name);-
547 q->identifierToken = idExpr->identifierToken;-
548-
549 return q->finish();-
550 }-
551-
552 return 0;-
553}-
554-
555void Parser::pushToken(int token)-
556{-
557 last_token->token = yytoken;-
558 last_token->dval = yylval;-
559 last_token->spell = yytokenspell;-
560 last_token->loc = yylloc;-
561 ++last_token;-
562 yytoken = token;-
563}-
564-
565int Parser::lookaheadToken(Lexer *lexer)-
566{-
567 if (yytoken < 0) {-
568 yytoken = lexer->lex();-
569 yylval = lexer->tokenValue();-
570 yytokenspell = lexer->tokenSpell();-
571 yylloc = location(lexer);-
572 }-
573 return yytoken;-
574}-
575-
576//#define PARSER_DEBUG-
577-
578bool Parser::parse(int startToken)-
579{-
580 Lexer *lexer = driver->lexer();-
581 bool hadErrors = false;-
582 yytoken = -1;-
583 int action = 0;-
584-
585 token_buffer[0].token = startToken;-
586 first_token = &token_buffer[0];-
587 if (startToken == T_FEED_JS_SCRIPT && !lexer->qmlMode()) {-
588 Directives ignoreDirectives;-
589 Directives *directives = driver->directives();-
590 if (!directives)-
591 directives = &ignoreDirectives;-
592 DiagnosticMessage error;-
593 if (!lexer->scanDirectives(directives, &error)) {-
594 diagnostic_messages.append(error);-
595 return false;-
596 }-
597 token_buffer[1].token = lexer->tokenKind();-
598 token_buffer[1].dval = lexer->tokenValue();-
599 token_buffer[1].loc = location(lexer);-
600 token_buffer[1].spell = lexer->tokenSpell();-
601 last_token = &token_buffer[2];-
602 } else {-
603 last_token = &token_buffer[1];-
604 }-
605-
606 tos = -1;-
607 program = 0;-
608-
609 do {-
610 if (++tos == stack_size)-
611 reallocateStack();-
612-
613 state_stack[tos] = action;-
614-
615 _Lcheck_token:-
616 if (yytoken == -1 && -TERMINAL_COUNT != action_index[action]) {-
617 yyprevlloc = yylloc;-
618-
619 if (first_token == last_token) {-
620 yytoken = lexer->lex();-
621 yylval = lexer->tokenValue();-
622 yytokenspell = lexer->tokenSpell();-
623 yylloc = location(lexer);-
624 } else {-
625 yytoken = first_token->token;-
626 yylval = first_token->dval;-
627 yytokenspell = first_token->spell;-
628 yylloc = first_token->loc;-
629 ++first_token;-
630 if (first_token == last_token)-
631 first_token = last_token = &token_buffer[0];-
632 }-
633 }-
634-
635#ifdef PARSER_DEBUG-
636 qDebug() << " in state" << action;-
637#endif-
638-
639 action = t_action(action, yytoken);-
640#ifdef PARSER_DEBUG-
641 qDebug() << " current token" << yytoken << (yytoken >= 0 ? spell[yytoken] : "(null)") << "new state" << action;-
642#endif-
643 if (action > 0) {-
644 if (action != ACCEPT_STATE) {-
645 yytoken = -1;-
646 sym(1).dval = yylval;-
647 stringRef(1) = yytokenspell;-
648 loc(1) = yylloc;-
649 } else {-
650 --tos;-
651 return ! hadErrors;-
652 }-
653 } else if (action < 0) {-
654 const int r = -action - 1;-
655 tos -= rhs[r];-
656-
657#ifdef PARSER_DEBUG-
658 qDebug() << " reducing through rule " << -action;-
659#endif-
660-
661 switch (r) {-
662./-
663-
664---------------------------------------------------------------------------------------------------------
665-- Declarative UI-
666---------------------------------------------------------------------------------------------------------
667-
668TopLevel: T_FEED_UI_PROGRAM UiProgram;-
669/.-
670 case $rule_number: {-
671 sym(1).Node = sym(2).Node;-
672 program = sym(1).Node;-
673 } break;-
674./-
675-
676TopLevel: T_FEED_JS_STATEMENT Statement;-
677/.-
678 case $rule_number: {-
679 sym(1).Node = sym(2).Node;-
680 program = sym(1).Node;-
681 } break;-
682./-
683-
684TopLevel: T_FEED_JS_EXPRESSION Expression;-
685/.-
686 case $rule_number: {-
687 sym(1).Node = sym(2).Node;-
688 program = sym(1).Node;-
689 } break;-
690./-
691-
692TopLevel: T_FEED_UI_OBJECT_MEMBER UiObjectMember;-
693/.-
694 case $rule_number: {-
695 sym(1).Node = sym(2).Node;-
696 program = sym(1).Node;-
697 } break;-
698./-
699-
700TopLevel: T_FEED_JS_SCRIPT Script;-
701/.-
702 case $rule_number: {-
703 sym(1).Node = sym(2).Node;-
704 program = sym(1).Node;-
705 } break;-
706./-
707-
708TopLevel: T_FEED_JS_MODULE Module;-
709/.-
710 case $rule_number: {-
711 sym(1).Node = sym(2).Node;-
712 program = sym(1).Node;-
713 } break;-
714./-
715-
716-
717UiProgram: UiHeaderItemListOpt UiRootMember;-
718/.-
719 case $rule_number: {-
720 sym(1).UiProgram = new (pool) AST::UiProgram(sym(1).UiHeaderItemList, sym(2).UiObjectMemberList->finish());-
721 } break;-
722./-
723-
724UiHeaderItemListOpt: Empty;-
725UiHeaderItemListOpt: UiHeaderItemList;-
726/.-
727 case $rule_number: {-
728 sym(1).Node = sym(1).UiHeaderItemList->finish();-
729 } break;-
730./-
731-
732UiHeaderItemList: UiPragma;-
733/.-
734 case $rule_number: {-
735 sym(1).Node = new (pool) AST::UiHeaderItemList(sym(1).UiPragma);-
736 } break;-
737./-
738-
739UiHeaderItemList: UiImport;-
740/.-
741 case $rule_number: {-
742 sym(1).Node = new (pool) AST::UiHeaderItemList(sym(1).UiImport);-
743 } break;-
744./-
745-
746UiHeaderItemList: UiHeaderItemList UiPragma;-
747/.-
748 case $rule_number: {-
749 sym(1).Node = new (pool) AST::UiHeaderItemList(sym(1).UiHeaderItemList, sym(2).UiPragma);-
750 } break;-
751./-
752-
753UiHeaderItemList: UiHeaderItemList UiImport;-
754/.-
755 case $rule_number: {-
756 sym(1).Node = new (pool) AST::UiHeaderItemList(sym(1).UiHeaderItemList, sym(2).UiImport);-
757 } break;-
758./-
759-
760PragmaId: MemberExpression;-
761-
762ImportId: MemberExpression;-
763-
764UiPragma: UiPragmaHead T_AUTOMATIC_SEMICOLON;-
765UiPragma: UiPragmaHead T_SEMICOLON;-
766/.-
767 case $rule_number: {-
768 sym(1).UiPragma->semicolonToken = loc(2);-
769 } break;-
770./-
771-
772UiImport: UiImportHead T_AUTOMATIC_SEMICOLON;-
773UiImport: UiImportHead T_SEMICOLON;-
774/.-
775 case $rule_number: {-
776 sym(1).UiImport->semicolonToken = loc(2);-
777 } break;-
778./-
779-
780UiImport: UiImportHead T_NUMERIC_LITERAL T_AUTOMATIC_SEMICOLON;-
781UiImport: UiImportHead T_NUMERIC_LITERAL T_SEMICOLON;-
782/.-
783 case $rule_number: {-
784 sym(1).UiImport->versionToken = loc(2);-
785 sym(1).UiImport->semicolonToken = loc(3);-
786 } break;-
787./-
788-
789UiImport: UiImportHead T_NUMERIC_LITERAL T_AS QmlIdentifier T_AUTOMATIC_SEMICOLON;-
790UiImport: UiImportHead T_NUMERIC_LITERAL T_AS QmlIdentifier T_SEMICOLON;-
791/.-
792 case $rule_number: {-
793 sym(1).UiImport->versionToken = loc(2);-
794 sym(1).UiImport->asToken = loc(3);-
795 sym(1).UiImport->importIdToken = loc(4);-
796 sym(1).UiImport->importId = stringRef(4);-
797 sym(1).UiImport->semicolonToken = loc(5);-
798 } break;-
799./-
800-
801UiImport: UiImportHead T_AS QmlIdentifier T_AUTOMATIC_SEMICOLON;-
802UiImport: UiImportHead T_AS QmlIdentifier T_SEMICOLON;-
803/.-
804 case $rule_number: {-
805 sym(1).UiImport->asToken = loc(2);-
806 sym(1).UiImport->importIdToken = loc(3);-
807 sym(1).UiImport->importId = stringRef(3);-
808 sym(1).UiImport->semicolonToken = loc(4);-
809 } break;-
810./-
811-
812UiPragmaHead: T_PRAGMA PragmaId;-
813/.-
814 case $rule_number: {-
815 AST::UiPragma *node = 0;-
816-
817 if (AST::UiQualifiedPragmaId *qualifiedId = reparseAsQualifiedPragmaId(sym(2).Expression))-
818 node = new (pool) AST::UiPragma(qualifiedId);-
819-
820 sym(1).Node = node;-
821-
822 if (node) {-
823 node->pragmaToken = loc(1);-
824 } else {-
825 diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, loc(1),-
826 QLatin1String("Expected a qualified name id")));-
827-
828 return false; // ### remove me-
829 }-
830 } break;-
831./-
832-
833-
834UiImportHead: T_IMPORT ImportId;-
835/.-
836 case $rule_number: {-
837 AST::UiImport *node = 0;-
838-
839 if (AST::StringLiteral *importIdLiteral = AST::cast<AST::StringLiteral *>(sym(2).Expression)) {-
840 node = new (pool) AST::UiImport(importIdLiteral->value);-
841 node->fileNameToken = loc(2);-
842 } else if (AST::UiQualifiedId *qualifiedId = reparseAsQualifiedId(sym(2).Expression)) {-
843 node = new (pool) AST::UiImport(qualifiedId);-
844 node->fileNameToken = loc(2);-
845 }-
846-
847 sym(1).Node = node;-
848-
849 if (node) {-
850 node->importToken = loc(1);-
851 } else {-
852 diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, loc(1),-
853 QLatin1String("Expected a qualified name id or a string literal")));-
854-
855 return false; // ### remove me-
856 }-
857 } break;-
858./-
859-
860Empty: ;-
861/.-
862 case $rule_number: {-
863 sym(1).Node = nullptr;-
864 } break;-
865./-
866-
867UiRootMember: UiObjectDefinition;-
868/.-
869 case $rule_number: {-
870 sym(1).Node = new (pool) AST::UiObjectMemberList(sym(1).UiObjectMember);-
871 } break;-
872./-
873-
874UiObjectMemberList: UiObjectMember;-
875/.-
876 case $rule_number: {-
877 sym(1).Node = new (pool) AST::UiObjectMemberList(sym(1).UiObjectMember);-
878 } break;-
879./-
880-
881UiObjectMemberList: UiObjectMemberList UiObjectMember;-
882/.-
883 case $rule_number: {-
884 AST::UiObjectMemberList *node = new (pool) AST:: UiObjectMemberList(sym(1).UiObjectMemberList, sym(2).UiObjectMember);-
885 sym(1).Node = node;-
886 } break;-
887./-
888-
889UiArrayMemberList: UiObjectDefinition;-
890/.-
891 case $rule_number: {-
892 sym(1).Node = new (pool) AST::UiArrayMemberList(sym(1).UiObjectMember);-
893 } break;-
894./-
895-
896UiArrayMemberList: UiArrayMemberList T_COMMA UiObjectDefinition;-
897/.-
898 case $rule_number: {-
899 AST::UiArrayMemberList *node = new (pool) AST::UiArrayMemberList(sym(1).UiArrayMemberList, sym(3).UiObjectMember);-
900 node->commaToken = loc(2);-
901 sym(1).Node = node;-
902 } break;-
903./-
904-
905UiObjectInitializer: T_LBRACE T_RBRACE;-
906/.-
907 case $rule_number: {-
908 AST::UiObjectInitializer *node = new (pool) AST::UiObjectInitializer((AST::UiObjectMemberList*)0);-
909 node->lbraceToken = loc(1);-
910 node->rbraceToken = loc(2);-
911 sym(1).Node = node;-
912 } break;-
913./-
914-
915UiObjectInitializer: T_LBRACE UiObjectMemberList T_RBRACE;-
916/.-
917 case $rule_number: {-
918 AST::UiObjectInitializer *node = new (pool) AST::UiObjectInitializer(sym(2).UiObjectMemberList->finish());-
919 node->lbraceToken = loc(1);-
920 node->rbraceToken = loc(3);-
921 sym(1).Node = node;-
922 } break;-
923./-
924-
925UiObjectDefinition: UiQualifiedId UiObjectInitializer;-
926/.-
927 case $rule_number: {-
928 AST::UiObjectDefinition *node = new (pool) AST::UiObjectDefinition(sym(1).UiQualifiedId, sym(2).UiObjectInitializer);-
929 sym(1).Node = node;-
930 } break;-
931./-
932-
933UiObjectMember: UiObjectDefinition;-
934-
935UiObjectMember: UiQualifiedId T_COLON ExpressionStatementLookahead T_LBRACKET UiArrayMemberList T_RBRACKET;-
936/.-
937 case $rule_number: {-
938 AST::UiArrayBinding *node = new (pool) AST::UiArrayBinding(sym(1).UiQualifiedId, sym(5).UiArrayMemberList->finish());-
939 node->colonToken = loc(2);-
940 node->lbracketToken = loc(4);-
941 node->rbracketToken = loc(6);-
942 sym(1).Node = node;-
943 } break;-
944./-
945-
946UiObjectMember: UiQualifiedId T_COLON ExpressionStatementLookahead UiQualifiedId UiObjectInitializer;-
947/.-
948 case $rule_number: {-
949 AST::UiObjectBinding *node = new (pool) AST::UiObjectBinding(-
950 sym(1).UiQualifiedId, sym(4).UiQualifiedId, sym(5).UiObjectInitializer);-
951 node->colonToken = loc(2);-
952 sym(1).Node = node;-
953 } break;-
954./-
955-
956UiObjectMember: UiQualifiedId T_ON UiQualifiedId UiObjectInitializer;-
957/.-
958 case $rule_number: {-
959 AST::UiObjectBinding *node = new (pool) AST::UiObjectBinding(-
960 sym(3).UiQualifiedId, sym(1).UiQualifiedId, sym(4).UiObjectInitializer);-
961 node->colonToken = loc(2);-
962 node->hasOnToken = true;-
963 sym(1).Node = node;-
964 } break;-
965./-
966-
967-
968UiObjectLiteral: T_LBRACE ExpressionStatementLookahead UiPropertyDefinitionList T_RBRACE;-
969/. case $rule_number: Q_FALLTHROUGH(); ./-
970UiObjectLiteral: T_LBRACE ExpressionStatementLookahead UiPropertyDefinitionList T_COMMA T_RBRACE;-
971/.-
972 case $rule_number: {-
973 AST::ObjectPattern *l = new (pool) AST::ObjectPattern(sym(3).PatternPropertyList->finish());-
974 l->lbraceToken = loc(1);-
975 l->rbraceToken = loc(4);-
976 AST::ExpressionStatement *node = new (pool) AST::ExpressionStatement(l);-
977 sym(1).Node = node;-
978 } break;-
979./-
980-
981-
982UiScriptStatement: ExpressionStatementLookahead T_FORCE_DECLARATION ExpressionStatement;-
983/. case $rule_number: Q_FALLTHROUGH(); ./-
984UiScriptStatement: ExpressionStatementLookahead T_FORCE_BLOCK Block;-
985/. case $rule_number: Q_FALLTHROUGH(); ./-
986UiScriptStatement: ExpressionStatementLookahead T_FORCE_BLOCK UiObjectLiteral;-
987/.-
988 case $rule_number: {-
989 sym(1).Node = sym(3).Node;-
990 } break;-
991./-
992-
993-
994UiScriptStatement: ExpressionStatementLookahead EmptyStatement;-
995/. case $rule_number: Q_FALLTHROUGH(); ./-
996UiScriptStatement: ExpressionStatementLookahead ExpressionStatement;-
997/. case $rule_number: Q_FALLTHROUGH(); ./-
998UiScriptStatement: ExpressionStatementLookahead IfStatement;-
999/. case $rule_number: Q_FALLTHROUGH(); ./-
1000UiScriptStatement: ExpressionStatementLookahead WithStatement;-
1001/. case $rule_number: Q_FALLTHROUGH(); ./-
1002UiScriptStatement: ExpressionStatementLookahead SwitchStatement;-
1003/. case $rule_number: Q_FALLTHROUGH(); ./-
1004UiScriptStatement: ExpressionStatementLookahead TryStatement;-
1005/.-
1006 case $rule_number: {-
1007 sym(1).Node = sym(2).Node;-
1008 } break;-
1009./-
1010-
1011UiObjectMember: UiQualifiedId T_COLON UiScriptStatement;-
1012/.-
1013case $rule_number:-
1014{-
1015 AST::UiScriptBinding *node = new (pool) AST::UiScriptBinding(sym(1).UiQualifiedId, sym(3).Statement);-
1016 node->colonToken = loc(2);-
1017 sym(1).Node = node;-
1018 } break;-
1019./-
1020-
1021UiPropertyType: T_VAR;-
1022/.-
1023 case $rule_number: {-
1024 AST::UiQualifiedId *node = new (pool) AST::UiQualifiedId(stringRef(1));-
1025 node->identifierToken = loc(1);-
1026 sym(1).Node = node;-
1027 } break;-
1028./-
1029-
1030UiPropertyType: T_RESERVED_WORD;-
1031/.-
1032 case $rule_number: {-
1033 AST::UiQualifiedId *node = new (pool) AST::UiQualifiedId(stringRef(1));-
1034 node->identifierToken = loc(1);-
1035 sym(1).Node = node;-
1036 } break;-
1037./-
1038-
1039UiPropertyType: T_IDENTIFIER;-
1040/.-
1041 case $rule_number: {-
1042 AST::UiQualifiedId *node = new (pool) AST::UiQualifiedId(stringRef(1));-
1043 node->identifierToken = loc(1);-
1044 sym(1).Node = node;-
1045 } break;-
1046./-
1047-
1048UiPropertyType: UiPropertyType T_DOT T_IDENTIFIER;-
1049/.-
1050 case $rule_number: {-
1051 AST::UiQualifiedId *node = new (pool) AST::UiQualifiedId(sym(1).UiQualifiedId, stringRef(3));-
1052 node->identifierToken = loc(3);-
1053 sym(1).Node = node;-
1054 } break;-
1055./-
1056-
1057UiParameterListOpt: ;-
1058/.-
1059 case $rule_number: {-
1060 sym(1).Node = nullptr;-
1061 } break;-
1062./-
1063-
1064UiParameterListOpt: UiParameterList;-
1065/.-
1066 case $rule_number: {-
1067 sym(1).Node = sym(1).UiParameterList->finish();-
1068 } break;-
1069./-
1070-
1071UiParameterList: UiPropertyType QmlIdentifier;-
1072/.-
1073 case $rule_number: {-
1074 AST::UiParameterList *node = new (pool) AST::UiParameterList(sym(1).UiQualifiedId->finish(), stringRef(2));-
1075 node->propertyTypeToken = loc(1);-
1076 node->identifierToken = loc(2);-
1077 sym(1).Node = node;-
1078 } break;-
1079./-
1080-
1081UiParameterList: UiParameterList T_COMMA UiPropertyType QmlIdentifier;-
1082/.-
1083 case $rule_number: {-
1084 AST::UiParameterList *node = new (pool) AST::UiParameterList(sym(1).UiParameterList, sym(3).UiQualifiedId->finish(), stringRef(4));-
1085 node->propertyTypeToken = loc(3);-
1086 node->commaToken = loc(2);-
1087 node->identifierToken = loc(4);-
1088 sym(1).Node = node;-
1089 } break;-
1090./-
1091-
1092UiObjectMember: T_SIGNAL T_IDENTIFIER T_LPAREN UiParameterListOpt T_RPAREN T_AUTOMATIC_SEMICOLON;-
1093UiObjectMember: T_SIGNAL T_IDENTIFIER T_LPAREN UiParameterListOpt T_RPAREN T_SEMICOLON;-
1094/.-
1095 case $rule_number: {-
1096 AST::UiPublicMember *node = new (pool) AST::UiPublicMember(nullptr, stringRef(2));-
1097 node->type = AST::UiPublicMember::Signal;-
1098 node->propertyToken = loc(1);-
1099 node->typeToken = loc(2);-
1100 node->identifierToken = loc(2);-
1101 node->parameters = sym(4).UiParameterList;-
1102 node->semicolonToken = loc(6);-
1103 sym(1).Node = node;-
1104 } break;-
1105./-
1106-
1107UiObjectMember: T_SIGNAL T_IDENTIFIER T_AUTOMATIC_SEMICOLON;-
1108UiObjectMember: T_SIGNAL T_IDENTIFIER T_SEMICOLON;-
1109/.-
1110 case $rule_number: {-
1111 AST::UiPublicMember *node = new (pool) AST::UiPublicMember(nullptr, stringRef(2));-
1112 node->type = AST::UiPublicMember::Signal;-
1113 node->propertyToken = loc(1);-
1114 node->typeToken = loc(2);-
1115 node->identifierToken = loc(2);-
1116 node->semicolonToken = loc(3);-
1117 sym(1).Node = node;-
1118 } break;-
1119./-
1120-
1121UiObjectMember: T_PROPERTY T_IDENTIFIER T_LT UiPropertyType T_GT QmlIdentifier T_AUTOMATIC_SEMICOLON;-
1122UiObjectMember: T_PROPERTY T_IDENTIFIER T_LT UiPropertyType T_GT QmlIdentifier T_SEMICOLON;-
1123/.-
1124 case $rule_number: {-
1125 AST::UiPublicMember *node = new (pool) AST::UiPublicMember(sym(4).UiQualifiedId->finish(), stringRef(6));-
1126 node->typeModifier = stringRef(2);-
1127 node->propertyToken = loc(1);-
1128 node->typeModifierToken = loc(2);-
1129 node->typeToken = loc(4);-
1130 node->identifierToken = loc(6);-
1131 node->semicolonToken = loc(7);-
1132 sym(1).Node = node;-
1133 } break;-
1134./-
1135-
1136UiObjectMember: T_PROPERTY UiPropertyType QmlIdentifier T_AUTOMATIC_SEMICOLON;-
1137UiObjectMember: T_PROPERTY UiPropertyType QmlIdentifier T_SEMICOLON;-
1138/.-
1139 case $rule_number: {-
1140 AST::UiPublicMember *node = new (pool) AST::UiPublicMember(sym(2).UiQualifiedId->finish(), stringRef(3));-
1141 node->propertyToken = loc(1);-
1142 node->typeToken = loc(2);-
1143 node->identifierToken = loc(3);-
1144 node->semicolonToken = loc(4);-
1145 sym(1).Node = node;-
1146 } break;-
1147./-
1148-
1149UiObjectMember: T_DEFAULT T_PROPERTY UiPropertyType QmlIdentifier T_AUTOMATIC_SEMICOLON;-
1150UiObjectMember: T_DEFAULT T_PROPERTY UiPropertyType QmlIdentifier T_SEMICOLON;-
1151/.-
1152 case $rule_number: {-
1153 AST::UiPublicMember *node = new (pool) AST::UiPublicMember(sym(3).UiQualifiedId->finish(), stringRef(4));-
1154 node->isDefaultMember = true;-
1155 node->defaultToken = loc(1);-
1156 node->propertyToken = loc(2);-
1157 node->typeToken = loc(3);-
1158 node->identifierToken = loc(4);-
1159 node->semicolonToken = loc(5);-
1160 sym(1).Node = node;-
1161 } break;-
1162./-
1163-
1164UiObjectMember: T_DEFAULT T_PROPERTY T_IDENTIFIER T_LT UiPropertyType T_GT QmlIdentifier T_AUTOMATIC_SEMICOLON;-
1165UiObjectMember: T_DEFAULT T_PROPERTY T_IDENTIFIER T_LT UiPropertyType T_GT QmlIdentifier T_SEMICOLON;-
1166/.-
1167 case $rule_number: {-
1168 AST::UiPublicMember *node = new (pool) AST::UiPublicMember(sym(5).UiQualifiedId->finish(), stringRef(7));-
1169 node->isDefaultMember = true;-
1170 node->defaultToken = loc(1);-
1171 node->typeModifier = stringRef(3);-
1172 node->propertyToken = loc(2);-
1173 node->typeModifierToken = loc(2);-
1174 node->typeToken = loc(4);-
1175 node->identifierToken = loc(7);-
1176 node->semicolonToken = loc(8);-
1177 sym(1).Node = node;-
1178 } break;-
1179./-
1180-
1181UiObjectMember: T_PROPERTY UiPropertyType QmlIdentifier T_COLON UiScriptStatement;-
1182/.-
1183 case $rule_number: {-
1184 AST::UiPublicMember *node = new (pool) AST::UiPublicMember(sym(2).UiQualifiedId->finish(), stringRef(3), sym(5).Statement);-
1185 node->propertyToken = loc(1);-
1186 node->typeToken = loc(2);-
1187 node->identifierToken = loc(3);-
1188 node->colonToken = loc(4);-
1189 sym(1).Node = node;-
1190 } break;-
1191./-
1192-
1193UiObjectMember: T_READONLY T_PROPERTY UiPropertyType QmlIdentifier T_COLON UiScriptStatement;-
1194/.-
1195 case $rule_number: {-
1196 AST::UiPublicMember *node = new (pool) AST::UiPublicMember(sym(3).UiQualifiedId->finish(), stringRef(4), sym(6).Statement);-
1197 node->isReadonlyMember = true;-
1198 node->readonlyToken = loc(1);-
1199 node->propertyToken = loc(2);-
1200 node->typeToken = loc(3);-
1201 node->identifierToken = loc(4);-
1202 node->colonToken = loc(5);-
1203 sym(1).Node = node;-
1204 } break;-
1205./-
1206-
1207UiObjectMember: T_DEFAULT T_PROPERTY UiPropertyType QmlIdentifier T_COLON UiScriptStatement;-
1208/.-
1209 case $rule_number: {-
1210 AST::UiPublicMember *node = new (pool) AST::UiPublicMember(sym(3).UiQualifiedId->finish(), stringRef(4), sym(6).Statement);-
1211 node->isDefaultMember = true;-
1212 node->defaultToken = loc(1);-
1213 node->propertyToken = loc(2);-
1214 node->typeToken = loc(3);-
1215 node->identifierToken = loc(4);-
1216 node->colonToken = loc(5);-
1217 sym(1).Node = node;-
1218 } break;-
1219./-
1220-
1221UiObjectMember: T_PROPERTY T_IDENTIFIER T_LT UiPropertyType T_GT QmlIdentifier T_COLON T_LBRACKET UiArrayMemberList T_RBRACKET;-
1222/.-
1223 case $rule_number: {-
1224 AST::UiPublicMember *node = new (pool) AST::UiPublicMember(sym(4).UiQualifiedId->finish(), stringRef(6));-
1225 node->typeModifier = stringRef(2);-
1226 node->propertyToken = loc(1);-
1227 node->typeModifierToken = loc(2);-
1228 node->typeToken = loc(4);-
1229 node->identifierToken = loc(6);-
1230 node->semicolonToken = loc(7); // insert a fake ';' before ':'-
1231-
1232 AST::UiQualifiedId *propertyName = new (pool) AST::UiQualifiedId(stringRef(6));-
1233 propertyName->identifierToken = loc(6);-
1234 propertyName->next = 0;-
1235-
1236 AST::UiArrayBinding *binding = new (pool) AST::UiArrayBinding(propertyName, sym(9).UiArrayMemberList->finish());-
1237 binding->colonToken = loc(7);-
1238 binding->lbracketToken = loc(8);-
1239 binding->rbracketToken = loc(10);-
1240-
1241 node->binding = binding;-
1242-
1243 sym(1).Node = node;-
1244 } break;-
1245./-
1246-
1247UiObjectMember: T_PROPERTY UiPropertyType QmlIdentifier T_COLON ExpressionStatementLookahead UiQualifiedId UiObjectInitializer;-
1248/.-
1249 case $rule_number: {-
1250 AST::UiPublicMember *node = new (pool) AST::UiPublicMember(sym(2).UiQualifiedId->finish(), stringRef(3));-
1251 node->propertyToken = loc(1);-
1252 node->typeToken = loc(2);-
1253 node->identifierToken = loc(3);-
1254 node->semicolonToken = loc(4); // insert a fake ';' before ':'-
1255-
1256 AST::UiQualifiedId *propertyName = new (pool) AST::UiQualifiedId(stringRef(3));-
1257 propertyName->identifierToken = loc(3);-
1258 propertyName->next = 0;-
1259-
1260 AST::UiObjectBinding *binding = new (pool) AST::UiObjectBinding(-
1261 propertyName, sym(6).UiQualifiedId, sym(7).UiObjectInitializer);-
1262 binding->colonToken = loc(4);-
1263-
1264 node->binding = binding;-
1265-
1266 sym(1).Node = node;-
1267 } break;-
1268./-
1269-
1270UiObjectMember: T_READONLY T_PROPERTY UiPropertyType QmlIdentifier T_COLON ExpressionStatementLookahead UiQualifiedId UiObjectInitializer;-
1271/.-
1272 case $rule_number: {-
1273 AST::UiPublicMember *node = new (pool) AST::UiPublicMember(sym(3).UiQualifiedId->finish(), stringRef(4));-
1274 node->isReadonlyMember = true;-
1275 node->readonlyToken = loc(1);-
1276 node->propertyToken = loc(2);-
1277 node->typeToken = loc(3);-
1278 node->identifierToken = loc(4);-
1279 node->semicolonToken = loc(5); // insert a fake ';' before ':'-
1280-
1281 AST::UiQualifiedId *propertyName = new (pool) AST::UiQualifiedId(stringRef(4));-
1282 propertyName->identifierToken = loc(4);-
1283 propertyName->next = 0;-
1284-
1285 AST::UiObjectBinding *binding = new (pool) AST::UiObjectBinding(-
1286 propertyName, sym(7).UiQualifiedId, sym(8).UiObjectInitializer);-
1287 binding->colonToken = loc(5);-
1288-
1289 node->binding = binding;-
1290-
1291 sym(1).Node = node;-
1292 } break;-
1293./-
1294-
1295UiObjectMember: FunctionDeclaration;-
1296/.-
1297 case $rule_number: {-
1298 sym(1).Node = new (pool) AST::UiSourceElement(sym(1).Node);-
1299 } break;-
1300./-
1301-
1302UiObjectMember: VariableStatement;-
1303/.-
1304 case $rule_number: {-
1305 sym(1).Node = new (pool) AST::UiSourceElement(sym(1).Node);-
1306 } break;-
1307./-
1308-
1309UiQualifiedId: MemberExpression;-
1310/.-
1311 case $rule_number: {-
1312 if (AST::ArrayMemberExpression *mem = AST::cast<AST::ArrayMemberExpression *>(sym(1).Expression)) {-
1313 diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Warning, mem->lbracketToken,-
1314 QLatin1String("Ignored annotation")));-
1315-
1316 sym(1).Expression = mem->base;-
1317 }-
1318-
1319 if (AST::UiQualifiedId *qualifiedId = reparseAsQualifiedId(sym(1).Expression)) {-
1320 sym(1).UiQualifiedId = qualifiedId;-
1321 } else {-
1322 sym(1).UiQualifiedId = 0;-
1323-
1324 diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, loc(1),-
1325 QLatin1String("Expected a qualified name id")));-
1326-
1327 return false; // ### recover-
1328 }-
1329 } break;-
1330./-
1331-
1332UiObjectMember: T_ENUM T_IDENTIFIER T_LBRACE EnumMemberList T_RBRACE;-
1333/.-
1334 case $rule_number: {-
1335 AST::UiEnumDeclaration *enumDeclaration = new (pool) AST::UiEnumDeclaration(stringRef(2), sym(4).UiEnumMemberList->finish());-
1336 enumDeclaration->enumToken = loc(1);-
1337 enumDeclaration->rbraceToken = loc(5);-
1338 sym(1).Node = enumDeclaration;-
1339 break;-
1340 }-
1341./-
1342-
1343EnumMemberList: T_IDENTIFIER;-
1344/.-
1345 case $rule_number: {-
1346 AST::UiEnumMemberList *node = new (pool) AST::UiEnumMemberList(stringRef(1));-
1347 node->memberToken = loc(1);-
1348 sym(1).Node = node;-
1349 break;-
1350 }-
1351./-
1352-
1353EnumMemberList: T_IDENTIFIER T_EQ T_NUMERIC_LITERAL;-
1354/.-
1355 case $rule_number: {-
1356 AST::UiEnumMemberList *node = new (pool) AST::UiEnumMemberList(stringRef(1), sym(3).dval);-
1357 node->memberToken = loc(1);-
1358 node->valueToken = loc(3);-
1359 sym(1).Node = node;-
1360 break;-
1361 }-
1362./-
1363-
1364EnumMemberList: EnumMemberList T_COMMA T_IDENTIFIER;-
1365/.-
1366 case $rule_number: {-
1367 AST::UiEnumMemberList *node = new (pool) AST::UiEnumMemberList(sym(1).UiEnumMemberList, stringRef(3));-
1368 node->memberToken = loc(3);-
1369 sym(1).Node = node;-
1370 break;-
1371 }-
1372./-
1373-
1374EnumMemberList: EnumMemberList T_COMMA T_IDENTIFIER T_EQ T_NUMERIC_LITERAL;-
1375/.-
1376 case $rule_number: {-
1377 AST::UiEnumMemberList *node = new (pool) AST::UiEnumMemberList(sym(1).UiEnumMemberList, stringRef(3), sym(5).dval);-
1378 node->memberToken = loc(3);-
1379 node->valueToken = loc(5);-
1380 sym(1).Node = node;-
1381 break;-
1382 }-
1383./-
1384-
1385QmlIdentifier: T_IDENTIFIER;-
1386QmlIdentifier: T_PROPERTY;-
1387QmlIdentifier: T_SIGNAL;-
1388QmlIdentifier: T_READONLY;-
1389QmlIdentifier: T_ON;-
1390QmlIdentifier: T_GET;-
1391QmlIdentifier: T_SET;-
1392QmlIdentifier: T_FROM;-
1393QmlIdentifier: T_OF;-
1394-
1395JsIdentifier: T_IDENTIFIER;-
1396JsIdentifier: T_PROPERTY;-
1397JsIdentifier: T_SIGNAL;-
1398JsIdentifier: T_READONLY;-
1399JsIdentifier: T_ON;-
1400JsIdentifier: T_GET;-
1401JsIdentifier: T_SET;-
1402JsIdentifier: T_FROM;-
1403JsIdentifier: T_STATIC;-
1404JsIdentifier: T_OF;-
1405-
1406IdentifierReference: JsIdentifier;-
1407BindingIdentifier: IdentifierReference;-
1408-
1409---------------------------------------------------------------------------------------------------------
1410-- Expressions-
1411---------------------------------------------------------------------------------------------------------
1412-
1413PrimaryExpression: T_THIS;-
1414/.-
1415 case $rule_number: {-
1416 AST::ThisExpression *node = new (pool) AST::ThisExpression();-
1417 node->thisToken = loc(1);-
1418 sym(1).Node = node;-
1419 } break;-
1420./-
1421-
1422PrimaryExpression: IdentifierReference;-
1423/.-
1424 case $rule_number: {-
1425 AST::IdentifierExpression *node = new (pool) AST::IdentifierExpression(stringRef(1));-
1426 node->identifierToken = loc(1);-
1427 sym(1).Node = node;-
1428 } break;-
1429./-
1430-
1431PrimaryExpression: Literal;-
1432PrimaryExpression: ArrayLiteral;-
1433PrimaryExpression: ObjectLiteral;-
1434PrimaryExpression: FunctionExpression;-
1435PrimaryExpression: ClassExpression;-
1436PrimaryExpression: GeneratorExpression;-
1437PrimaryExpression: RegularExpressionLiteral;-
1438PrimaryExpression: TemplateLiteral;-
1439-
1440PrimaryExpression: CoverParenthesizedExpressionAndArrowParameterList;-
1441/.-
1442 case $rule_number: {-
1443 if (coverExpressionType != CE_ParenthesizedExpression) {-
1444 syntaxError(coverExpressionErrorLocation, "Expected token ')'.");-
1445 return false;-
1446 }-
1447 } break;-
1448./-
1449-
1450-- Parsing of the CoverParenthesizedExpressionAndArrowParameterList is restricted to the one rule below when this is parsed as a primary expression-
1451CoverParenthesizedExpressionAndArrowParameterList: T_LPAREN Expression_In T_RPAREN;-
1452/.-
1453 case $rule_number: {-
1454 AST::NestedExpression *node = new (pool) AST::NestedExpression(sym(2).Expression);-
1455 node->lparenToken = loc(1);-
1456 node->rparenToken = loc(3);-
1457 sym(1).Node = node;-
1458 coverExpressionType = CE_ParenthesizedExpression;-
1459 } break;-
1460./-
1461-
1462CoverParenthesizedExpressionAndArrowParameterList: T_LPAREN T_RPAREN;-
1463/.-
1464 case $rule_number: {-
1465 sym(1).Node = nullptr;-
1466 coverExpressionErrorLocation = loc(2);-
1467 coverExpressionType = CE_FormalParameterList;-
1468 } break;-
1469./-
1470-
1471CoverParenthesizedExpressionAndArrowParameterList: T_LPAREN BindingRestElement T_RPAREN;-
1472/.-
1473 case $rule_number: {-
1474 AST::FormalParameterList *node = (new (pool) AST::FormalParameterList(nullptr, sym(2).PatternElement))->finish(pool);-
1475 sym(1).Node = node;-
1476 coverExpressionErrorLocation = loc(2);-
1477 coverExpressionType = CE_FormalParameterList;-
1478 } break;-
1479./-
1480-
1481CoverParenthesizedExpressionAndArrowParameterList: T_LPAREN Expression_In T_COMMA BindingRestElementOpt T_RPAREN;-
1482/.-
1483 case $rule_number: {-
1484 AST::FormalParameterList *list = sym(2).Expression->reparseAsFormalParameterList(pool);-
1485 if (!list) {-
1486 syntaxError(loc(1), "Invalid Arrow parameter list.");-
1487 return false;-
1488 }-
1489 if (sym(4).Node) {-
1490 list = new (pool) AST::FormalParameterList(list, sym(4).PatternElement);-
1491 }-
1492 coverExpressionErrorLocation = loc(4);-
1493 coverExpressionType = CE_FormalParameterList;-
1494 sym(1).Node = list->finish(pool);-
1495 } break;-
1496./-
1497-
1498Literal: T_NULL;-
1499/.-
1500 case $rule_number: {-
1501 AST::NullExpression *node = new (pool) AST::NullExpression();-
1502 node->nullToken = loc(1);-
1503 sym(1).Node = node;-
1504 } break;-
1505./-
1506-
1507Literal: T_TRUE;-
1508/.-
1509 case $rule_number: {-
1510 AST::TrueLiteral *node = new (pool) AST::TrueLiteral();-
1511 node->trueToken = loc(1);-
1512 sym(1).Node = node;-
1513 } break;-
1514./-
1515-
1516Literal: T_FALSE;-
1517/.-
1518 case $rule_number: {-
1519 AST::FalseLiteral *node = new (pool) AST::FalseLiteral();-
1520 node->falseToken = loc(1);-
1521 sym(1).Node = node;-
1522 } break;-
1523./-
1524-
1525Literal: T_NUMERIC_LITERAL;-
1526/.-
1527 case $rule_number: {-
1528 AST::NumericLiteral *node = new (pool) AST::NumericLiteral(sym(1).dval);-
1529 node->literalToken = loc(1);-
1530 sym(1).Node = node;-
1531 } break;-
1532./-
1533-
1534Literal: T_MULTILINE_STRING_LITERAL;-
1535/. case $rule_number: Q_FALLTHROUGH(); ./-
1536-
1537Literal: T_STRING_LITERAL;-
1538/.-
1539 case $rule_number: {-
1540 AST::StringLiteral *node = new (pool) AST::StringLiteral(stringRef(1));-
1541 node->literalToken = loc(1);-
1542 sym(1).Node = node;-
1543 } break;-
1544./-
1545-
1546RegularExpressionLiteral: T_DIVIDE_;-
1547/:-
1548#define J_SCRIPT_REGEXPLITERAL_RULE1 $rule_number-
1549:/-
1550/.-
1551{-
1552 Lexer::RegExpBodyPrefix prefix;-
1553 case $rule_number:-
1554 prefix = Lexer::NoPrefix;-
1555 goto scan_regexp;-
1556./-
1557-
1558RegularExpressionLiteral: T_DIVIDE_EQ;-
1559/:-
1560#define J_SCRIPT_REGEXPLITERAL_RULE2 $rule_number-
1561:/-
1562/.-
1563 case $rule_number:-
1564 prefix = Lexer::EqualPrefix;-
1565 goto scan_regexp;-
1566-
1567 scan_regexp: {-
1568 bool rx = lexer->scanRegExp(prefix);-
1569 if (!rx) {-
1570 diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, location(lexer), lexer->errorMessage()));-
1571 return false;-
1572 }-
1573-
1574 loc(1).length = lexer->tokenLength();-
1575 yylloc = loc(1); // adjust the location of the current token-
1576-
1577 AST::RegExpLiteral *node = new (pool) AST::RegExpLiteral(driver->newStringRef(lexer->regExpPattern()), lexer->regExpFlags());-
1578 node->literalToken = loc(1);-
1579 sym(1).Node = node;-
1580 } break;-
1581}-
1582./-
1583-
1584-
1585ArrayLiteral: T_LBRACKET ElisionOpt T_RBRACKET;-
1586/.-
1587 case $rule_number: {-
1588 AST::PatternElementList *list = nullptr;-
1589 if (sym(2).Elision)-
1590 list = (new (pool) AST::PatternElementList(sym(2).Elision, nullptr))->finish();-
1591 AST::ArrayPattern *node = new (pool) AST::ArrayPattern(list);-
1592 node->lbracketToken = loc(1);-
1593 node->rbracketToken = loc(3);-
1594 sym(1).Node = node;-
1595 } break;-
1596./-
1597-
1598ArrayLiteral: T_LBRACKET ElementList T_RBRACKET;-
1599/.-
1600 case $rule_number: {-
1601 AST::ArrayPattern *node = new (pool) AST::ArrayPattern(sym(2).PatternElementList->finish());-
1602 node->lbracketToken = loc(1);-
1603 node->rbracketToken = loc(3);-
1604 sym(1).Node = node;-
1605 } break;-
1606./-
1607-
1608ArrayLiteral: T_LBRACKET ElementList T_COMMA ElisionOpt T_RBRACKET;-
1609/.-
1610 case $rule_number: {-
1611 auto *list = sym(2).PatternElementList;-
1612 if (sym(4).Elision) {-
1613 AST::PatternElementList *l = new (pool) AST::PatternElementList(sym(4).Elision, nullptr);-
1614 list = list->append(l);-
1615 }-
1616 AST::ArrayPattern *node = new (pool) AST::ArrayPattern(list->finish());-
1617 node->lbracketToken = loc(1);-
1618 node->commaToken = loc(3);-
1619 node->rbracketToken = loc(5);-
1620 sym(1).Node = node;-
1621 Q_ASSERT(node->isValidArrayLiteral());-
1622 } break;-
1623./-
1624-
1625ElementList: AssignmentExpression_In;-
1626/.-
1627 case $rule_number: {-
1628 AST::PatternElement *e = new (pool) AST::PatternElement(sym(1).Expression);-
1629 sym(1).Node = new (pool) AST::PatternElementList(nullptr, e);-
1630 } break;-
1631./-
1632-
1633ElementList: Elision AssignmentExpression_In;-
1634/.-
1635 case $rule_number: {-
1636 AST::PatternElement *e = new (pool) AST::PatternElement(sym(2).Expression);-
1637 sym(1).Node = new (pool) AST::PatternElementList(sym(1).Elision->finish(), e);-
1638 } break;-
1639./-
1640-
1641ElementList: ElisionOpt SpreadElement;-
1642/.-
1643 case $rule_number: {-
1644 AST::PatternElementList *node = new (pool) AST::PatternElementList(sym(1).Elision, sym(2).PatternElement);-
1645 sym(1).Node = node;-
1646 } break;-
1647./-
1648-
1649ElementList: ElementList T_COMMA ElisionOpt AssignmentExpression_In;-
1650/.-
1651 case $rule_number: {-
1652 AST::PatternElement *e = new (pool) AST::PatternElement(sym(4).Expression);-
1653 AST::PatternElementList *node = new (pool) AST::PatternElementList(sym(3).Elision, e);-
1654 sym(1).Node = sym(1).PatternElementList->append(node);-
1655 } break;-
1656./-
1657-
1658ElementList: ElementList T_COMMA ElisionOpt SpreadElement;-
1659/.-
1660 case $rule_number: {-
1661 AST::PatternElementList *node = new (pool) AST::PatternElementList(sym(3).Elision, sym(4).PatternElement);-
1662 sym(1).Node = sym(1).PatternElementList->append(node);-
1663 } break;-
1664./-
1665-
1666Elision: T_COMMA;-
1667/.-
1668 case $rule_number: {-
1669 AST::Elision *node = new (pool) AST::Elision();-
1670 node->commaToken = loc(1);-
1671 sym(1).Node = node;-
1672 } break;-
1673./-
1674-
1675Elision: Elision T_COMMA;-
1676/.-
1677 case $rule_number: {-
1678 AST::Elision *node = new (pool) AST::Elision(sym(1).Elision);-
1679 node->commaToken = loc(2);-
1680 sym(1).Node = node;-
1681 } break;-
1682./-
1683-
1684ElisionOpt: ;-
1685/.-
1686 case $rule_number: {-
1687 sym(1).Node = nullptr;-
1688 } break;-
1689./-
1690-
1691ElisionOpt: Elision;-
1692/.-
1693 case $rule_number: {-
1694 sym(1).Node = sym(1).Elision->finish();-
1695 } break;-
1696./-
1697-
1698SpreadElement: T_ELLIPSIS AssignmentExpression;-
1699/.-
1700 case $rule_number: {-
1701 AST::PatternElement *node = new (pool) AST::PatternElement(sym(2).Expression, AST::PatternElement::SpreadElement);-
1702 sym(1).Node = node;-
1703 } break;-
1704./-
1705-
1706ObjectLiteral: T_LBRACE T_RBRACE;-
1707/.-
1708 case $rule_number: {-
1709 AST::ObjectPattern *node = new (pool) AST::ObjectPattern();-
1710 node->lbraceToken = loc(1);-
1711 node->rbraceToken = loc(2);-
1712 sym(1).Node = node;-
1713 } break;-
1714./-
1715-
1716ObjectLiteral: T_LBRACE PropertyDefinitionList T_RBRACE;-
1717/.-
1718 case $rule_number: {-
1719 AST::ObjectPattern *node = new (pool) AST::ObjectPattern(sym(2).PatternPropertyList->finish());-
1720 node->lbraceToken = loc(1);-
1721 node->rbraceToken = loc(3);-
1722 sym(1).Node = node;-
1723 } break;-
1724./-
1725-
1726ObjectLiteral: T_LBRACE PropertyDefinitionList T_COMMA T_RBRACE;-
1727/.-
1728 case $rule_number: {-
1729 AST::ObjectPattern *node = new (pool) AST::ObjectPattern(sym(2).PatternPropertyList->finish());-
1730 node->lbraceToken = loc(1);-
1731 node->rbraceToken = loc(4);-
1732 sym(1).Node = node;-
1733 } break;-
1734./-
1735-
1736-
1737UiPropertyDefinitionList: UiPropertyDefinition;-
1738/. case $rule_number: Q_FALLTHROUGH(); ./-
1739PropertyDefinitionList: PropertyDefinition;-
1740/.-
1741 case $rule_number: {-
1742 sym(1).Node = new (pool) AST::PatternPropertyList(sym(1).PatternProperty);-
1743 } break;-
1744./-
1745-
1746UiPropertyDefinitionList: UiPropertyDefinitionList T_COMMA UiPropertyDefinition;-
1747/. case $rule_number: Q_FALLTHROUGH(); ./-
1748PropertyDefinitionList: PropertyDefinitionList T_COMMA PropertyDefinition;-
1749/.-
1750 case $rule_number: {-
1751 AST::PatternPropertyList *node = new (pool) AST::PatternPropertyList(sym(1).PatternPropertyList, sym(3).PatternProperty);-
1752 sym(1).Node = node;-
1753 } break;-
1754./-
1755-
1756PropertyDefinition: IdentifierReference;-
1757/.-
1758 case $rule_number: {-
1759 AST::IdentifierPropertyName *name = new (pool) AST::IdentifierPropertyName(stringRef(1));-
1760 name->propertyNameToken = loc(1);-
1761 AST::IdentifierExpression *expr = new (pool) AST::IdentifierExpression(stringRef(1));-
1762 expr->identifierToken = loc(1);-
1763 AST::PatternProperty *node = new (pool) AST::PatternProperty(name, expr);-
1764 node->colonToken = loc(2);-
1765 sym(1).Node = node;-
1766 } break;-
1767./-
1768-
1769-- Using this production should result in a syntax error when used in an ObjectLiteral-
1770PropertyDefinition: CoverInitializedName;-
1771-
1772CoverInitializedName: IdentifierReference Initializer_In;-
1773/.-
1774 case $rule_number: {-
1775 AST::IdentifierPropertyName *name = new (pool) AST::IdentifierPropertyName(stringRef(1));-
1776 name->propertyNameToken = loc(1);-
1777 AST::IdentifierExpression *left = new (pool) AST::IdentifierExpression(stringRef(1));-
1778 left->identifierToken = loc(1);-
1779 // if initializer is an anonymous function expression, we need to assign identifierref as it's name-
1780 if (auto *f = asAnonymousFunctionDefinition(sym(2).Expression))-
1781 f->name = stringRef(1);-
1782 if (auto *c = asAnonymousClassDefinition(sym(2).Expression))-
1783 c->name = stringRef(1);-
1784 AST::BinaryExpression *assignment = new (pool) AST::BinaryExpression(left, QSOperator::Assign, sym(2).Expression);-
1785 AST::PatternProperty *node = new (pool) AST::PatternProperty(name, assignment);-
1786 node->colonToken = loc(1);-
1787 sym(1).Node = node;-
1788-
1789 } break;-
1790./-
1791-
1792UiPropertyDefinition: UiPropertyName T_COLON AssignmentExpression_In;-
1793/. case $rule_number: Q_FALLTHROUGH(); ./-
1794PropertyDefinition: PropertyName T_COLON AssignmentExpression_In;-
1795/.-
1796 case $rule_number: {-
1797 AST::PatternProperty *node = new (pool) AST::PatternProperty(sym(1).PropertyName, sym(3).Expression);-
1798 if (auto *f = asAnonymousFunctionDefinition(sym(3).Expression)) {-
1799 if (!AST::cast<AST::ComputedPropertyName *>(sym(1).PropertyName))-
1800 f->name = driver->newStringRef(sym(1).PropertyName->asString());-
1801 }-
1802 if (auto *c = asAnonymousClassDefinition(sym(3).Expression)) {-
1803 if (!AST::cast<AST::ComputedPropertyName *>(sym(1).PropertyName))-
1804 c->name = driver->newStringRef(sym(1).PropertyName->asString());-
1805 }-
1806 node->colonToken = loc(2);-
1807 sym(1).Node = node;-
1808 } break;-
1809./-
1810-
1811PropertyDefinition: MethodDefinition;-
1812-
1813PropertyName: LiteralPropertyName;-
1814PropertyName: ComputedPropertyName;-
1815-
1816LiteralPropertyName: IdentifierName;-
1817/.-
1818 case $rule_number: {-
1819 AST::IdentifierPropertyName *node = new (pool) AST::IdentifierPropertyName(stringRef(1));-
1820 node->propertyNameToken = loc(1);-
1821 sym(1).Node = node;-
1822 } break;-
1823./-
1824-
1825UiPropertyName: T_STRING_LITERAL;-
1826/. case $rule_number: Q_FALLTHROUGH(); ./-
1827LiteralPropertyName: T_STRING_LITERAL;-
1828/.-
1829 case $rule_number: {-
1830 AST::StringLiteralPropertyName *node = new (pool) AST::StringLiteralPropertyName(stringRef(1));-
1831 node->propertyNameToken = loc(1);-
1832 sym(1).Node = node;-
1833 } break;-
1834./-
1835-
1836UiPropertyName: T_NUMERIC_LITERAL;-
1837/. case $rule_number: Q_FALLTHROUGH(); ./-
1838LiteralPropertyName: T_NUMERIC_LITERAL;-
1839/.-
1840 case $rule_number: {-
1841 AST::NumericLiteralPropertyName *node = new (pool) AST::NumericLiteralPropertyName(sym(1).dval);-
1842 node->propertyNameToken = loc(1);-
1843 sym(1).Node = node;-
1844 } break;-
1845./-
1846-
1847IdentifierName: IdentifierReference;-
1848IdentifierName: ReservedIdentifier;-
1849-
1850ReservedIdentifier: T_BREAK;-
1851ReservedIdentifier: T_CASE;-
1852ReservedIdentifier: T_CATCH;-
1853ReservedIdentifier: T_CONTINUE;-
1854ReservedIdentifier: T_DEFAULT;-
1855ReservedIdentifier: T_DELETE;-
1856ReservedIdentifier: T_DO;-
1857ReservedIdentifier: T_ELSE;-
1858ReservedIdentifier: T_ENUM;-
1859ReservedIdentifier: T_FALSE;-
1860ReservedIdentifier: T_FINALLY;-
1861ReservedIdentifier: T_FOR;-
1862ReservedIdentifier: T_FUNCTION;-
1863ReservedIdentifier: T_IF;-
1864ReservedIdentifier: T_IN;-
1865ReservedIdentifier: T_INSTANCEOF;-
1866ReservedIdentifier: T_NEW;-
1867ReservedIdentifier: T_NULL;-
1868ReservedIdentifier: T_RETURN;-
1869ReservedIdentifier: T_SWITCH;-
1870ReservedIdentifier: T_THIS;-
1871ReservedIdentifier: T_THROW;-
1872ReservedIdentifier: T_TRUE;-
1873ReservedIdentifier: T_TRY;-
1874ReservedIdentifier: T_TYPEOF;-
1875ReservedIdentifier: T_VAR;-
1876ReservedIdentifier: T_VOID;-
1877ReservedIdentifier: T_WHILE;-
1878ReservedIdentifier: T_CONST;-
1879ReservedIdentifier: T_LET;-
1880ReservedIdentifier: T_DEBUGGER;-
1881ReservedIdentifier: T_RESERVED_WORD;-
1882ReservedIdentifier: T_SUPER;-
1883ReservedIdentifier: T_WITH;-
1884ReservedIdentifier: T_CLASS;-
1885ReservedIdentifier: T_EXTENDS;-
1886ReservedIdentifier: T_EXPORT;-
1887-
1888ComputedPropertyName: T_LBRACKET AssignmentExpression_In T_RBRACKET;-
1889/.-
1890 case $rule_number: {-
1891 AST::ComputedPropertyName *node = new (pool) AST::ComputedPropertyName(sym(2).Expression);-
1892 node->propertyNameToken = loc(1);-
1893 sym(1).Node = node;-
1894 } break;-
1895./-
1896-
1897Initializer: T_EQ AssignmentExpression;-
1898/. case $rule_number: Q_FALLTHROUGH(); ./-
1899Initializer_In: T_EQ AssignmentExpression_In;-
1900/.-
1901case $rule_number: {-
1902 sym(1) = sym(2);-
1903} break;-
1904./-
1905-
1906-
1907InitializerOpt: ;-
1908/. case $rule_number: Q_FALLTHROUGH(); ./-
1909InitializerOpt_In: ;-
1910/.-
1911 case $rule_number: {-
1912 sym(1).Node = nullptr;-
1913 } break;-
1914./-
1915-
1916InitializerOpt: Initializer;-
1917InitializerOpt_In: Initializer_In;-
1918-
1919TemplateLiteral: T_NO_SUBSTITUTION_TEMPLATE;-
1920/. case $rule_number: Q_FALLTHROUGH(); ./-
1921-
1922TemplateSpans: T_TEMPLATE_TAIL;-
1923/.-
1924 case $rule_number: {-
1925 AST::TemplateLiteral *node = new (pool) AST::TemplateLiteral(stringRef(1), nullptr);-
1926 node->literalToken = loc(1);-
1927 sym(1).Node = node;-
1928 } break;-
1929./-
1930-
1931TemplateSpans: T_TEMPLATE_MIDDLE Expression TemplateSpans;-
1932/. case $rule_number: Q_FALLTHROUGH(); ./-
1933-
1934TemplateLiteral: T_TEMPLATE_HEAD Expression TemplateSpans;-
1935/.-
1936 case $rule_number: {-
1937 AST::TemplateLiteral *node = new (pool) AST::TemplateLiteral(stringRef(1), sym(2).Expression);-
1938 node->next = sym(3).Template;-
1939 node->literalToken = loc(1);-
1940 sym(1).Node = node;-
1941 } break;-
1942./-
1943-
1944-
1945MemberExpression: PrimaryExpression;-
1946-
1947Super: T_SUPER;-
1948/.-
1949 case $rule_number: {-
1950 AST::SuperLiteral *node = new (pool) AST::SuperLiteral();-
1951 node->superToken = loc(1);-
1952 sym(1).Node = node;-
1953 } break;-
1954./-
1955-
1956-
1957MemberExpression: Super T_LBRACKET Expression_In T_RBRACKET;-
1958/. case $rule_number: Q_FALLTHROUGH(); ./-
1959MemberExpression: MemberExpression T_LBRACKET Expression_In T_RBRACKET;-
1960/.-
1961 case $rule_number: {-
1962 AST::ArrayMemberExpression *node = new (pool) AST::ArrayMemberExpression(sym(1).Expression, sym(3).Expression);-
1963 node->lbracketToken = loc(2);-
1964 node->rbracketToken = loc(4);-
1965 sym(1).Node = node;-
1966 } break;-
1967./-
1968-
1969-
1970-- the identifier has to be "target", catched at codegen time-
1971NewTarget: T_NEW T_DOT T_IDENTIFIER;-
1972/. case $rule_number:-
1973 {-
1974 AST::IdentifierExpression *node = new (pool) AST::IdentifierExpression(stringRef(1));-
1975 node->identifierToken= loc(1);-
1976 sym(1).Node = node;-
1977 } Q_FALLTHROUGH();-
1978./-
1979MemberExpression: Super T_DOT IdentifierName;-
1980/. case $rule_number: Q_FALLTHROUGH(); ./-
1981MemberExpression: MemberExpression T_DOT IdentifierName;-
1982/.-
1983 case $rule_number: {-
1984 AST::FieldMemberExpression *node = new (pool) AST::FieldMemberExpression(sym(1).Expression, stringRef(3));-
1985 node->dotToken = loc(2);-
1986 node->identifierToken = loc(3);-
1987 sym(1).Node = node;-
1988 } break;-
1989./-
1990-
1991MemberExpression: MetaProperty;-
1992-
1993MemberExpression: T_NEW MemberExpression T_LPAREN Arguments T_RPAREN;-
1994/.-
1995 case $rule_number: {-
1996 AST::NewMemberExpression *node = new (pool) AST::NewMemberExpression(sym(2).Expression, sym(4).ArgumentList);-
1997 node->newToken = loc(1);-
1998 node->lparenToken = loc(3);-
1999 node->rparenToken = loc(5);-
2000 sym(1).Node = node;-
2001 } break;-
2002./-
2003-
2004MetaProperty: NewTarget;-
2005-
2006-
2007NewExpression: MemberExpression;-
2008-
2009NewExpression: T_NEW NewExpression;-
2010/.-
2011 case $rule_number: {-
2012 AST::NewExpression *node = new (pool) AST::NewExpression(sym(2).Expression);-
2013 node->newToken = loc(1);-
2014 sym(1).Node = node;-
2015 } break;-
2016./-
2017-
2018-
2019CallExpression: CallExpression TemplateLiteral;-
2020/. case $rule_number: Q_FALLTHROUGH(); ./-
2021MemberExpression: MemberExpression TemplateLiteral;-
2022/.-
2023 case $rule_number: {-
2024 AST::TaggedTemplate *node = new (pool) AST::TaggedTemplate(sym(1).Expression, sym(2).Template);-
2025 sym(1).Node = node;-
2026 } break;-
2027./-
2028-
2029CallExpression: MemberExpression T_LPAREN Arguments T_RPAREN;-
2030/.-
2031 case $rule_number: {-
2032 AST::CallExpression *node = new (pool) AST::CallExpression(sym(1).Expression, sym(3).ArgumentList);-
2033 node->lparenToken = loc(2);-
2034 node->rparenToken = loc(4);-
2035 sym(1).Node = node;-
2036 } break;-
2037./-
2038-
2039CallExpression: Super T_LPAREN Arguments T_RPAREN;-
2040/. case $rule_number: Q_FALLTHROUGH(); ./-
2041CallExpression: CallExpression T_LPAREN Arguments T_RPAREN;-
2042/.-
2043 case $rule_number: {-
2044 AST::CallExpression *node = new (pool) AST::CallExpression(sym(1).Expression, sym(3).ArgumentList);-
2045 node->lparenToken = loc(2);-
2046 node->rparenToken = loc(4);-
2047 sym(1).Node = node;-
2048 } break;-
2049./-
2050-
2051CallExpression: CallExpression T_LBRACKET Expression_In T_RBRACKET;-
2052/.-
2053 case $rule_number: {-
2054 AST::ArrayMemberExpression *node = new (pool) AST::ArrayMemberExpression(sym(1).Expression, sym(3).Expression);-
2055 node->lbracketToken = loc(2);-
2056 node->rbracketToken = loc(4);-
2057 sym(1).Node = node;-
2058 } break;-
2059./-
2060-
2061CallExpression: CallExpression T_DOT IdentifierName;-
2062/.-
2063 case $rule_number: {-
2064 AST::FieldMemberExpression *node = new (pool) AST::FieldMemberExpression(sym(1).Expression, stringRef(3));-
2065 node->dotToken = loc(2);-
2066 node->identifierToken = loc(3);-
2067 sym(1).Node = node;-
2068 } break;-
2069./-
2070-
2071Arguments: ;-
2072/.-
2073 case $rule_number: {-
2074 sym(1).Node = nullptr;-
2075 } break;-
2076./-
2077-
2078Arguments: ArgumentList;-
2079/. case $rule_number: Q_FALLTHROUGH(); ./-
2080Arguments: ArgumentList T_COMMA;-
2081/.-
2082 case $rule_number: {-
2083 sym(1).Node = sym(1).ArgumentList->finish();-
2084 } break;-
2085./-
2086-
2087ArgumentList: AssignmentExpression_In;-
2088/.-
2089 case $rule_number: {-
2090 sym(1).Node = new (pool) AST::ArgumentList(sym(1).Expression);-
2091 } break;-
2092./-
2093-
2094ArgumentList: T_ELLIPSIS AssignmentExpression_In;-
2095/.-
2096 case $rule_number: {-
2097 AST::ArgumentList *node = new (pool) AST::ArgumentList(sym(2).Expression);-
2098 node->isSpreadElement = true;-
2099 sym(1).Node = node;-
2100 } break;-
2101./-
2102-
2103ArgumentList: ArgumentList T_COMMA AssignmentExpression_In;-
2104/.-
2105 case $rule_number: {-
2106 AST::ArgumentList *node = new (pool) AST::ArgumentList(sym(1).ArgumentList, sym(3).Expression);-
2107 node->commaToken = loc(2);-
2108 sym(1).Node = node;-
2109 } break;-
2110./-
2111-
2112ArgumentList: ArgumentList T_COMMA T_ELLIPSIS AssignmentExpression_In;-
2113/.-
2114 case $rule_number: {-
2115 AST::ArgumentList *node = new (pool) AST::ArgumentList(sym(1).ArgumentList, sym(4).Expression);-
2116 node->commaToken = loc(2);-
2117 node->isSpreadElement = true;-
2118 sym(1).Node = node;-
2119 } break;-
2120./-
2121-
2122LeftHandSideExpression: NewExpression;-
2123LeftHandSideExpression: CallExpression;-
2124-
2125UpdateExpression: LeftHandSideExpression;-
2126-
2127UpdateExpression: LeftHandSideExpression T_PLUS_PLUS;-
2128/.-
2129 case $rule_number: {-
2130 AST::PostIncrementExpression *node = new (pool) AST::PostIncrementExpression(sym(1).Expression);-
2131 node->incrementToken = loc(2);-
2132 sym(1).Node = node;-
2133 } break;-
2134./-
2135-
2136UpdateExpression: LeftHandSideExpression T_MINUS_MINUS;-
2137/.-
2138 case $rule_number: {-
2139 AST::PostDecrementExpression *node = new (pool) AST::PostDecrementExpression(sym(1).Expression);-
2140 node->decrementToken = loc(2);-
2141 sym(1).Node = node;-
2142 } break;-
2143./-
2144-
2145UpdateExpression: T_PLUS_PLUS UnaryExpression;-
2146/.-
2147 case $rule_number: {-
2148 AST::PreIncrementExpression *node = new (pool) AST::PreIncrementExpression(sym(2).Expression);-
2149 node->incrementToken = loc(1);-
2150 sym(1).Node = node;-
2151 } break;-
2152./-
2153-
2154UpdateExpression: T_MINUS_MINUS UnaryExpression;-
2155/.-
2156 case $rule_number: {-
2157 AST::PreDecrementExpression *node = new (pool) AST::PreDecrementExpression(sym(2).Expression);-
2158 node->decrementToken = loc(1);-
2159 sym(1).Node = node;-
2160 } break;-
2161./-
2162-
2163UnaryExpression: UpdateExpression;-
2164-
2165UnaryExpression: T_DELETE UnaryExpression;-
2166/.-
2167 case $rule_number: {-
2168 AST::DeleteExpression *node = new (pool) AST::DeleteExpression(sym(2).Expression);-
2169 node->deleteToken = loc(1);-
2170 sym(1).Node = node;-
2171 } break;-
2172./-
2173-
2174UnaryExpression: T_VOID UnaryExpression;-
2175/.-
2176 case $rule_number: {-
2177 AST::VoidExpression *node = new (pool) AST::VoidExpression(sym(2).Expression);-
2178 node->voidToken = loc(1);-
2179 sym(1).Node = node;-
2180 } break;-
2181./-
2182-
2183UnaryExpression: T_TYPEOF UnaryExpression;-
2184/.-
2185 case $rule_number: {-
2186 AST::TypeOfExpression *node = new (pool) AST::TypeOfExpression(sym(2).Expression);-
2187 node->typeofToken = loc(1);-
2188 sym(1).Node = node;-
2189 } break;-
2190./-
2191-
2192UnaryExpression: T_PLUS UnaryExpression;-
2193/.-
2194 case $rule_number: {-
2195 AST::UnaryPlusExpression *node = new (pool) AST::UnaryPlusExpression(sym(2).Expression);-
2196 node->plusToken = loc(1);-
2197 sym(1).Node = node;-
2198 } break;-
2199./-
2200-
2201UnaryExpression: T_MINUS UnaryExpression;-
2202/.-
2203 case $rule_number: {-
2204 AST::UnaryMinusExpression *node = new (pool) AST::UnaryMinusExpression(sym(2).Expression);-
2205 node->minusToken = loc(1);-
2206 sym(1).Node = node;-
2207 } break;-
2208./-
2209-
2210UnaryExpression: T_TILDE UnaryExpression;-
2211/.-
2212 case $rule_number: {-
2213 AST::TildeExpression *node = new (pool) AST::TildeExpression(sym(2).Expression);-
2214 node->tildeToken = loc(1);-
2215 sym(1).Node = node;-
2216 } break;-
2217./-
2218-
2219UnaryExpression: T_NOT UnaryExpression;-
2220/.-
2221 case $rule_number: {-
2222 AST::NotExpression *node = new (pool) AST::NotExpression(sym(2).Expression);-
2223 node->notToken = loc(1);-
2224 sym(1).Node = node;-
2225 } break;-
2226./-
2227-
2228ExponentiationExpression: UnaryExpression;-
2229-
2230ExponentiationExpression: UpdateExpression T_STAR_STAR ExponentiationExpression;-
2231/.-
2232 case $rule_number: {-
2233 AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::Exp, sym(3).Expression);-
2234 node->operatorToken = loc(2);-
2235 sym(1).Node = node;-
2236 } break;-
2237./-
2238-
2239MultiplicativeExpression: ExponentiationExpression;-
2240-
2241MultiplicativeExpression: MultiplicativeExpression MultiplicativeOperator ExponentiationExpression;-
2242/.-
2243 case $rule_number: {-
2244 AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, sym(2).ival, sym(3).Expression);-
2245 node->operatorToken = loc(2);-
2246 sym(1).Node = node;-
2247 } break;-
2248./-
2249-
2250MultiplicativeOperator: T_STAR;-
2251/.-
2252 case $rule_number: {-
2253 sym(1).ival = QSOperator::Mul;-
2254 } break;-
2255./-
2256-
2257MultiplicativeOperator: T_DIVIDE_;-
2258/.-
2259 case $rule_number: {-
2260 sym(1).ival = QSOperator::Div;-
2261 } break;-
2262./-
2263-
2264MultiplicativeOperator: T_REMAINDER;-
2265/.-
2266 case $rule_number: {-
2267 sym(1).ival = QSOperator::Mod;-
2268 } break;-
2269./-
2270-
2271AdditiveExpression: MultiplicativeExpression;-
2272-
2273AdditiveExpression: AdditiveExpression T_PLUS MultiplicativeExpression;-
2274/.-
2275 case $rule_number: {-
2276 AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::Add, sym(3).Expression);-
2277 node->operatorToken = loc(2);-
2278 sym(1).Node = node;-
2279 } break;-
2280./-
2281-
2282AdditiveExpression: AdditiveExpression T_MINUS MultiplicativeExpression;-
2283/.-
2284 case $rule_number: {-
2285 AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::Sub, sym(3).Expression);-
2286 node->operatorToken = loc(2);-
2287 sym(1).Node = node;-
2288 } break;-
2289./-
2290-
2291ShiftExpression: AdditiveExpression;-
2292-
2293ShiftExpression: ShiftExpression T_LT_LT AdditiveExpression;-
2294/.-
2295 case $rule_number: {-
2296 AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::LShift, sym(3).Expression);-
2297 node->operatorToken = loc(2);-
2298 sym(1).Node = node;-
2299 } break;-
2300./-
2301-
2302ShiftExpression: ShiftExpression T_GT_GT AdditiveExpression;-
2303/.-
2304 case $rule_number: {-
2305 AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::RShift, sym(3).Expression);-
2306 node->operatorToken = loc(2);-
2307 sym(1).Node = node;-
2308 } break;-
2309./-
2310-
2311ShiftExpression: ShiftExpression T_GT_GT_GT AdditiveExpression;-
2312/.-
2313 case $rule_number: {-
2314 AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::URShift, sym(3).Expression);-
2315 node->operatorToken = loc(2);-
2316 sym(1).Node = node;-
2317 } break;-
2318./-
2319-
2320RelationalExpression_In: ShiftExpression;-
2321RelationalExpression: ShiftExpression;-
2322-
2323RelationalExpression_In: RelationalExpression_In RelationalOperator ShiftExpression;-
2324/. case $rule_number: Q_FALLTHROUGH(); ./-
2325RelationalExpression: RelationalExpression RelationalOperator ShiftExpression;-
2326/.-
2327 case $rule_number: {-
2328 AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, sym(2).ival, sym(3).Expression);-
2329 node->operatorToken = loc(2);-
2330 sym(1).Node = node;-
2331 } break;-
2332./-
2333-
2334RelationalOperator: T_LT;-
2335/.-
2336 case $rule_number: {-
2337 sym(1).ival = QSOperator::Lt;-
2338 } break;-
2339./-
2340RelationalOperator: T_GT;-
2341/.-
2342 case $rule_number: {-
2343 sym(1).ival = QSOperator::Gt;-
2344 } break;-
2345./-
2346RelationalOperator: T_LE;-
2347/.-
2348 case $rule_number: {-
2349 sym(1).ival = QSOperator::Le;-
2350 } break;-
2351./-
2352RelationalOperator: T_GE;-
2353/.-
2354 case $rule_number: {-
2355 sym(1).ival = QSOperator::Ge;-
2356 } break;-
2357./-
2358RelationalOperator: T_INSTANCEOF;-
2359/.-
2360 case $rule_number: {-
2361 sym(1).ival = QSOperator::InstanceOf;-
2362 } break;-
2363./-
2364-
2365RelationalExpression_In: RelationalExpression_In T_IN ShiftExpression;-
2366/.-
2367 case $rule_number: {-
2368 AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::In, sym(3).Expression);-
2369 node->operatorToken = loc(2);-
2370 sym(1).Node = node;-
2371 } break;-
2372./-
2373-
2374EqualityExpression_In: RelationalExpression_In;-
2375EqualityExpression: RelationalExpression;-
2376-
2377EqualityExpression_In: EqualityExpression_In EqualityOperator RelationalExpression_In;-
2378/. case $rule_number: Q_FALLTHROUGH(); ./-
2379EqualityExpression: EqualityExpression EqualityOperator RelationalExpression;-
2380/.-
2381 case $rule_number: {-
2382 AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, sym(2).ival, sym(3).Expression);-
2383 node->operatorToken = loc(2);-
2384 sym(1).Node = node;-
2385 } break;-
2386./-
2387-
2388EqualityOperator: T_EQ_EQ;-
2389/.-
2390 case $rule_number: {-
2391 sym(1).ival = QSOperator::Equal;-
2392 } break;-
2393./-
2394EqualityOperator: T_NOT_EQ;-
2395/.-
2396 case $rule_number: {-
2397 sym(1).ival = QSOperator::NotEqual;-
2398 } break;-
2399./-
2400EqualityOperator: T_EQ_EQ_EQ;-
2401/.-
2402 case $rule_number: {-
2403 sym(1).ival = QSOperator::StrictEqual;-
2404 } break;-
2405./-
2406EqualityOperator: T_NOT_EQ_EQ;-
2407/.-
2408 case $rule_number: {-
2409 sym(1).ival = QSOperator::StrictNotEqual;-
2410 } break;-
2411./-
2412-
2413-
2414BitwiseANDExpression: EqualityExpression;-
2415XitwiseANDExpression_In: EqualityExpression_In;-
2416-
2417BitwiseANDExpression: BitwiseANDExpression T_AND EqualityExpression;-
2418/. case $rule_number: Q_FALLTHROUGH(); ./-
2419XitwiseANDExpression_In: XitwiseANDExpression_In T_AND EqualityExpression_In;-
2420/.-
2421 case $rule_number: {-
2422 AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::BitAnd, sym(3).Expression);-
2423 node->operatorToken = loc(2);-
2424 sym(1).Node = node;-
2425 } break;-
2426./-
2427-
2428-
2429BitwiseXORExpression: BitwiseANDExpression;-
2430BitwiseXORExpression_In: XitwiseANDExpression_In;-
2431-
2432BitwiseXORExpression: BitwiseXORExpression T_XOR BitwiseANDExpression;-
2433/. case $rule_number: Q_FALLTHROUGH(); ./-
2434BitwiseXORExpression_In: BitwiseXORExpression_In T_XOR XitwiseANDExpression_In;-
2435/.-
2436 case $rule_number: {-
2437 AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::BitXor, sym(3).Expression);-
2438 node->operatorToken = loc(2);-
2439 sym(1).Node = node;-
2440 } break;-
2441./-
2442-
2443BitwiseORExpression: BitwiseXORExpression;-
2444BitwiseORExpression_In: BitwiseXORExpression_In;-
2445-
2446BitwiseORExpression: BitwiseORExpression T_OR BitwiseXORExpression;-
2447/. case $rule_number: Q_FALLTHROUGH(); ./-
2448BitwiseORExpression_In: BitwiseORExpression_In T_OR BitwiseXORExpression_In;-
2449/.-
2450 case $rule_number: {-
2451 AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::BitOr, sym(3).Expression);-
2452 node->operatorToken = loc(2);-
2453 sym(1).Node = node;-
2454 } break;-
2455./-
2456-
2457LogicalANDExpression: BitwiseORExpression;-
2458LogicalANDExpression_In: BitwiseORExpression_In;-
2459-
2460LogicalANDExpression: LogicalANDExpression T_AND_AND BitwiseORExpression;-
2461/. case $rule_number: Q_FALLTHROUGH(); ./-
2462LogicalANDExpression_In: LogicalANDExpression_In T_AND_AND BitwiseORExpression_In;-
2463/.-
2464 case $rule_number: {-
2465 AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::And, sym(3).Expression);-
2466 node->operatorToken = loc(2);-
2467 sym(1).Node = node;-
2468 } break;-
2469./-
2470-
2471LogicalORExpression: LogicalANDExpression;-
2472LogicalORExpression_In: LogicalANDExpression_In;-
2473-
2474LogicalORExpression: LogicalORExpression T_OR_OR LogicalANDExpression;-
2475/. case $rule_number: Q_FALLTHROUGH(); ./-
2476LogicalORExpression_In: LogicalORExpression_In T_OR_OR LogicalANDExpression_In;-
2477/.-
2478 case $rule_number: {-
2479 AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::Or, sym(3).Expression);-
2480 node->operatorToken = loc(2);-
2481 sym(1).Node = node;-
2482 } break;-
2483./-
2484-
2485-
2486ConditionalExpression: LogicalORExpression;-
2487ConditionalExpression_In: LogicalORExpression_In;-
2488-
2489ConditionalExpression: LogicalORExpression T_QUESTION AssignmentExpression_In T_COLON AssignmentExpression;-
2490/. case $rule_number: Q_FALLTHROUGH(); ./-
2491ConditionalExpression_In: LogicalORExpression_In T_QUESTION AssignmentExpression_In T_COLON AssignmentExpression_In;-
2492/.-
2493 case $rule_number: {-
2494 AST::ConditionalExpression *node = new (pool) AST::ConditionalExpression(sym(1).Expression, sym(3).Expression, sym(5).Expression);-
2495 node->questionToken = loc(2);-
2496 node->colonToken = loc(4);-
2497 sym(1).Node = node;-
2498 } break;-
2499./-
2500-
2501AssignmentExpression: ConditionalExpression;-
2502AssignmentExpression_In: ConditionalExpression_In;-
2503-
2504AssignmentExpression: YieldExpression;-
2505AssignmentExpression_In: YieldExpression_In;-
2506-
2507AssignmentExpression: ArrowFunction;-
2508AssignmentExpression_In: ArrowFunction_In;-
2509-
2510AssignmentExpression: LeftHandSideExpression T_EQ AssignmentExpression;-
2511/. case $rule_number: Q_FALLTHROUGH(); ./-
2512AssignmentExpression_In: LeftHandSideExpression T_EQ AssignmentExpression_In;-
2513/.-
2514 case $rule_number: {-
2515 // need to convert the LHS to an AssignmentPattern if it was an Array/ObjectLiteral-
2516 if (AST::Pattern *p = sym(1).Expression->patternCast()) {-
2517 AST::SourceLocation errorLoc;-
2518 QString errorMsg;-
2519 if (!p->convertLiteralToAssignmentPattern(pool, &errorLoc, &errorMsg)) {-
2520 syntaxError(errorLoc, errorMsg);-
2521 return false;-
2522 }-
2523 }-
2524 // if lhs is an identifier expression and rhs is an anonymous function expression, we need to assign the name of lhs to the function-
2525 if (auto *f = asAnonymousFunctionDefinition(sym(3).Expression)) {-
2526 if (auto *id = AST::cast<AST::IdentifierExpression *>(sym(1).Expression))-
2527 f->name = id->name;-
2528 }-
2529 if (auto *c = asAnonymousClassDefinition(sym(3).Expression)) {-
2530 if (auto *id = AST::cast<AST::IdentifierExpression *>(sym(1).Expression))-
2531 c->name = id->name;-
2532 }-
2533-
2534 AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::Assign, sym(3).Expression);-
2535 node->operatorToken = loc(2);-
2536 sym(1).Node = node;-
2537 } break;-
2538./-
2539-
2540AssignmentExpression: LeftHandSideExpression AssignmentOperator AssignmentExpression;-
2541/. case $rule_number: Q_FALLTHROUGH(); ./-
2542AssignmentExpression_In: LeftHandSideExpression AssignmentOperator AssignmentExpression_In;-
2543/.-
2544 case $rule_number: {-
2545 AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, sym(2).ival, sym(3).Expression);-
2546 node->operatorToken = loc(2);-
2547 sym(1).Node = node;-
2548 } break;-
2549./-
2550-
2551AssignmentOperator: T_STAR_EQ;-
2552/.-
2553 case $rule_number: {-
2554 sym(1).ival = QSOperator::InplaceMul;-
2555 } break;-
2556./-
2557-
2558AssignmentOperator: T_STAR_STAR_EQ;-
2559/.-
2560 case $rule_number: {-
2561 sym(1).ival = QSOperator::InplaceExp;-
2562 } break;-
2563./-
2564-
2565AssignmentOperator: T_DIVIDE_EQ;-
2566/.-
2567 case $rule_number: {-
2568 sym(1).ival = QSOperator::InplaceDiv;-
2569 } break;-
2570./-
2571-
2572AssignmentOperator: T_REMAINDER_EQ;-
2573/.-
2574 case $rule_number: {-
2575 sym(1).ival = QSOperator::InplaceMod;-
2576 } break;-
2577./-
2578-
2579AssignmentOperator: T_PLUS_EQ;-
2580/.-
2581 case $rule_number: {-
2582 sym(1).ival = QSOperator::InplaceAdd;-
2583 } break;-
2584./-
2585-
2586AssignmentOperator: T_MINUS_EQ;-
2587/.-
2588 case $rule_number: {-
2589 sym(1).ival = QSOperator::InplaceSub;-
2590 } break;-
2591./-
2592-
2593AssignmentOperator: T_LT_LT_EQ;-
2594/.-
2595 case $rule_number: {-
2596 sym(1).ival = QSOperator::InplaceLeftShift;-
2597 } break;-
2598./-
2599-
2600AssignmentOperator: T_GT_GT_EQ;-
2601/.-
2602 case $rule_number: {-
2603 sym(1).ival = QSOperator::InplaceRightShift;-
2604 } break;-
2605./-
2606-
2607AssignmentOperator: T_GT_GT_GT_EQ;-
2608/.-
2609 case $rule_number: {-
2610 sym(1).ival = QSOperator::InplaceURightShift;-
2611 } break;-
2612./-
2613-
2614AssignmentOperator: T_AND_EQ;-
2615/.-
2616 case $rule_number: {-
2617 sym(1).ival = QSOperator::InplaceAnd;-
2618 } break;-
2619./-
2620-
2621AssignmentOperator: T_XOR_EQ;-
2622/.-
2623 case $rule_number: {-
2624 sym(1).ival = QSOperator::InplaceXor;-
2625 } break;-
2626./-
2627-
2628AssignmentOperator: T_OR_EQ;-
2629/.-
2630 case $rule_number: {-
2631 sym(1).ival = QSOperator::InplaceOr;-
2632 } break;-
2633./-
2634-
2635Expression: AssignmentExpression;-
2636Expression_In: AssignmentExpression_In;-
2637-
2638Expression: Expression T_COMMA AssignmentExpression;-
2639/. case $rule_number: Q_FALLTHROUGH(); ./-
2640Expression_In: Expression_In T_COMMA AssignmentExpression_In;-
2641/.-
2642 case $rule_number: {-
2643 AST::Expression *node = new (pool) AST::Expression(sym(1).Expression, sym(3).Expression);-
2644 node->commaToken = loc(2);-
2645 sym(1).Node = node;-
2646 } break;-
2647./-
2648-
2649ExpressionOpt: ;-
2650/. case $rule_number: Q_FALLTHROUGH(); ./-
2651ExpressionOpt_In: ;-
2652/.-
2653 case $rule_number: {-
2654 sym(1).Node = nullptr;-
2655 } break;-
2656./-
2657-
2658ExpressionOpt: Expression;-
2659ExpressionOpt_In: Expression_In;-
2660-
2661-- Statements-
2662-
2663Statement: ExpressionStatementLookahead T_FORCE_BLOCK BlockStatement;-
2664/.-
2665 case $rule_number: {-
2666 sym(1).Node = sym(3).Node;-
2667 } break;-
2668./-
2669-
2670Statement: ExpressionStatementLookahead VariableStatement;-
2671/. case $rule_number: Q_FALLTHROUGH(); ./-
2672Statement: ExpressionStatementLookahead EmptyStatement;-
2673/. case $rule_number: Q_FALLTHROUGH(); ./-
2674Statement: ExpressionStatementLookahead ExpressionStatement;-
2675/. case $rule_number: Q_FALLTHROUGH(); ./-
2676Statement: ExpressionStatementLookahead IfStatement;-
2677/. case $rule_number: Q_FALLTHROUGH(); ./-
2678Statement: ExpressionStatementLookahead BreakableStatement;-
2679/. case $rule_number: Q_FALLTHROUGH(); ./-
2680Statement: ExpressionStatementLookahead ContinueStatement;-
2681/. case $rule_number: Q_FALLTHROUGH(); ./-
2682Statement: ExpressionStatementLookahead BreakStatement;-
2683/. case $rule_number: Q_FALLTHROUGH(); ./-
2684Statement: ExpressionStatementLookahead ReturnStatement;-
2685/. case $rule_number: Q_FALLTHROUGH(); ./-
2686Statement: ExpressionStatementLookahead WithStatement;-
2687/. case $rule_number: Q_FALLTHROUGH(); ./-
2688Statement: ExpressionStatementLookahead LabelledStatement;-
2689/. case $rule_number: Q_FALLTHROUGH(); ./-
2690Statement: ExpressionStatementLookahead ThrowStatement;-
2691/. case $rule_number: Q_FALLTHROUGH(); ./-
2692Statement: ExpressionStatementLookahead TryStatement;-
2693/. case $rule_number: Q_FALLTHROUGH(); ./-
2694Statement: ExpressionStatementLookahead DebuggerStatement;-
2695/.-
2696 case $rule_number: {-
2697 sym(1).Node = sym(2).Node;-
2698 } break;-
2699./-
2700-
2701Declaration: HoistableDeclaration;-
2702Declaration: ClassDeclaration;-
2703Declaration: LexicalDeclaration_In;-
2704-
2705HoistableDeclaration: FunctionDeclaration;-
2706HoistableDeclaration: GeneratorDeclaration;-
2707-
2708HoistableDeclaration_Default: FunctionDeclaration_Default;-
2709HoistableDeclaration_Default: GeneratorDeclaration_Default;-
2710-
2711BreakableStatement: IterationStatement;-
2712BreakableStatement: SwitchStatement;-
2713-
2714BlockStatement: Block;-
2715-
2716Block: T_LBRACE StatementListOpt T_RBRACE;-
2717/.-
2718 case $rule_number: {-
2719 AST::Block *node = new (pool) AST::Block(sym(2).StatementList);-
2720 node->lbraceToken = loc(1);-
2721 node->rbraceToken = loc(3);-
2722 sym(1).Node = node;-
2723 } break;-
2724./-
2725-
2726StatementList: StatementListItem;-
2727-
2728StatementList: StatementList StatementListItem;-
2729/.-
2730 case $rule_number: {-
2731 sym(1).StatementList = sym(1).StatementList->append(sym(2).StatementList);-
2732 } break;-
2733./-
2734-
2735StatementListItem: Statement;-
2736/.-
2737 case $rule_number: {-
2738 sym(1).StatementList = new (pool) AST::StatementList(sym(1).Statement);-
2739 } break;-
2740./-
2741-
2742StatementListItem: ExpressionStatementLookahead T_FORCE_DECLARATION Declaration T_AUTOMATIC_SEMICOLON;-
2743StatementListItem: ExpressionStatementLookahead T_FORCE_DECLARATION Declaration T_SEMICOLON;-
2744/.-
2745 case $rule_number: {-
2746 sym(1).Node = new (pool) AST::StatementList(sym(3).FunctionDeclaration);-
2747 } break;-
2748./-
2749-
2750StatementListOpt: ExpressionStatementLookahead;-
2751/.-
2752 case $rule_number: {-
2753 sym(1).Node = nullptr;-
2754 } break;-
2755./-
2756-
2757StatementListOpt: StatementList;-
2758/.-
2759 case $rule_number: {-
2760 sym(1).Node = sym(1).StatementList->finish();-
2761 } break;-
2762./-
2763-
2764LetOrConst: T_LET;-
2765/.-
2766 case $rule_number: {-
2767 sym(1).scope = AST::VariableScope::Let;-
2768 } break;-
2769./-
2770LetOrConst: T_CONST;-
2771/.-
2772 case $rule_number: {-
2773 sym(1).scope = AST::VariableScope::Const;-
2774 } break;-
2775./-
2776-
2777Var: T_VAR;-
2778/.-
2779 case $rule_number: {-
2780 sym(1).scope = AST::VariableScope::Var;-
2781 } break;-
2782./-
2783-
2784LexicalDeclaration: LetOrConst BindingList;-
2785/. case $rule_number: Q_FALLTHROUGH(); ./-
2786LexicalDeclaration_In: LetOrConst BindingList_In;-
2787/. case $rule_number: Q_FALLTHROUGH(); ./-
2788VarDeclaration: Var VariableDeclarationList;-
2789/. case $rule_number: Q_FALLTHROUGH(); ./-
2790VarDeclaration_In: Var VariableDeclarationList_In;-
2791/.-
2792 case $rule_number: {-
2793 AST::VariableStatement *node = new (pool) AST::VariableStatement(sym(2).VariableDeclarationList->finish(sym(1).scope));-
2794 node->declarationKindToken = loc(1);-
2795 sym(1).Node = node;-
2796 } break;-
2797./-
2798-
2799VariableStatement: VarDeclaration_In T_AUTOMATIC_SEMICOLON;-
2800VariableStatement: VarDeclaration_In T_SEMICOLON;-
2801-
2802BindingList: LexicalBinding_In;-
2803/. case $rule_number: Q_FALLTHROUGH(); ./-
2804BindingList_In: LexicalBinding_In;-
2805/. case $rule_number: Q_FALLTHROUGH(); ./-
2806VariableDeclarationList: VariableDeclaration;-
2807/. case $rule_number: Q_FALLTHROUGH(); ./-
2808VariableDeclarationList_In: VariableDeclaration_In;-
2809/.-
2810 case $rule_number: {-
2811 sym(1).Node = new (pool) AST::VariableDeclarationList(sym(1).PatternElement);-
2812 } break;-
2813./-
2814-
2815BindingList: BindingList T_COMMA LexicalBinding;-
2816/. case $rule_number: Q_FALLTHROUGH(); ./-
2817BindingList_In: BindingList_In T_COMMA LexicalBinding_In;-
2818/. case $rule_number: Q_FALLTHROUGH(); ./-
2819VariableDeclarationList: VariableDeclarationList T_COMMA VariableDeclaration;-
2820/. case $rule_number: Q_FALLTHROUGH(); ./-
2821VariableDeclarationList_In: VariableDeclarationList_In T_COMMA VariableDeclaration_In;-
2822/.-
2823 case $rule_number: {-
2824 AST::VariableDeclarationList *node = new (pool) AST::VariableDeclarationList(sym(1).VariableDeclarationList, sym(3).PatternElement);-
2825 node->commaToken = loc(2);-
2826 sym(1).Node = node;-
2827 } break;-
2828./-
2829-
2830LexicalBinding: BindingIdentifier InitializerOpt;-
2831/. case $rule_number: Q_FALLTHROUGH(); ./-
2832LexicalBinding_In: BindingIdentifier InitializerOpt_In;-
2833/. case $rule_number: Q_FALLTHROUGH(); ./-
2834VariableDeclaration: BindingIdentifier InitializerOpt;-
2835/. case $rule_number: Q_FALLTHROUGH(); ./-
2836VariableDeclaration_In: BindingIdentifier InitializerOpt_In;-
2837/.-
2838 case $rule_number: {-
2839 auto *node = new (pool) AST::PatternElement(stringRef(1), sym(2).Expression);-
2840 node->identifierToken = loc(1);-
2841 sym(1).Node = node;-
2842 // if initializer is an anonymous function expression, we need to assign identifierref as it's name-
2843 if (auto *f = asAnonymousFunctionDefinition(sym(2).Expression))-
2844 f->name = stringRef(1);-
2845 if (auto *c = asAnonymousClassDefinition(sym(2).Expression))-
2846 c->name = stringRef(1);-
2847 } break;-
2848./-
2849-
2850LexicalBinding: BindingPattern Initializer;-
2851/. case $rule_number: Q_FALLTHROUGH(); ./-
2852LexicalBinding_In: BindingPattern Initializer_In;-
2853/. case $rule_number: Q_FALLTHROUGH(); ./-
2854VariableDeclaration: BindingPattern Initializer;-
2855/. case $rule_number: Q_FALLTHROUGH(); ./-
2856VariableDeclaration_In: BindingPattern Initializer_In;-
2857/.-
2858 case $rule_number: {-
2859 auto *node = new (pool) AST::PatternElement(sym(1).Pattern, sym(2).Expression);-
2860 node->identifierToken = loc(1);-
2861 sym(1).Node = node;-
2862 } break;-
2863./-
2864-
2865BindingPattern: T_LBRACE ObjectBindingPattern T_RBRACE;-
2866/.-
2867 case $rule_number: {-
2868 auto *node = new (pool) AST::ObjectPattern(sym(2).PatternPropertyList);-
2869 node->lbraceToken = loc(1);-
2870 node->rbraceToken = loc(3);-
2871 node->parseMode = AST::Pattern::Binding;-
2872 sym(1).Node = node;-
2873 } break;-
2874./-
2875-
2876BindingPattern: T_LBRACKET ArrayBindingPattern T_RBRACKET;-
2877/.-
2878 case $rule_number: {-
2879 auto *node = new (pool) AST::ArrayPattern(sym(2).PatternElementList);-
2880 node->lbracketToken = loc(1);-
2881 node->rbracketToken = loc(3);-
2882 node->parseMode = AST::Pattern::Binding;-
2883 sym(1).Node = node;-
2884 } break;-
2885./-
2886-
2887ObjectBindingPattern: ;-
2888/.-
2889 case $rule_number: {-
2890 sym(1).Node = nullptr;-
2891 } break;-
2892./-
2893-
2894ObjectBindingPattern: BindingPropertyList;-
2895/. case $rule_number: ./-
2896ObjectBindingPattern: BindingPropertyList T_COMMA;-
2897/.-
2898 case $rule_number: {-
2899 sym(1).Node = sym(1).PatternPropertyList->finish();-
2900 } break;-
2901./-
2902-
2903ArrayBindingPattern: ElisionOpt BindingRestElementOpt;-
2904/.-
2905 case $rule_number: {-
2906 if (sym(1).Elision || sym(2).Node) {-
2907 auto *l = new (pool) AST::PatternElementList(sym(1).Elision, sym(2).PatternElement);-
2908 sym(1).Node = l->finish();-
2909 } else {-
2910 sym(1).Node = nullptr;-
2911 }-
2912 } break;-
2913./-
2914-
2915ArrayBindingPattern: BindingElementList;-
2916/.-
2917 case $rule_number: {-
2918 sym(1).Node = sym(1).PatternElementList->finish();-
2919 } break;-
2920./-
2921-
2922ArrayBindingPattern: BindingElementList T_COMMA ElisionOpt BindingRestElementOpt;-
2923/.-
2924 case $rule_number: {-
2925 if (sym(3).Elision || sym(4).Node) {-
2926 auto *l = new (pool) AST::PatternElementList(sym(3).Elision, sym(4).PatternElement);-
2927 l = sym(1).PatternElementList->append(l);-
2928 sym(1).Node = l;-
2929 }-
2930 sym(1).Node = sym(1).PatternElementList->finish();-
2931 } break;-
2932./-
2933-
2934BindingPropertyList: BindingProperty;-
2935/.-
2936 case $rule_number: {-
2937 sym(1).Node = new (pool) AST::PatternPropertyList(sym(1).PatternProperty);-
2938 } break;-
2939./-
2940-
2941BindingPropertyList: BindingPropertyList T_COMMA BindingProperty;-
2942/.-
2943 case $rule_number: {-
2944 sym(1).Node = new (pool) AST::PatternPropertyList(sym(1).PatternPropertyList, sym(3).PatternProperty);-
2945 } break;-
2946./-
2947-
2948BindingElementList: BindingElisionElement;-
2949-
2950BindingElementList: BindingElementList T_COMMA BindingElisionElement;-
2951/.-
2952 case $rule_number: {-
2953 sym(1).PatternElementList = sym(1).PatternElementList->append(sym(3).PatternElementList);-
2954 } break;-
2955./-
2956-
2957BindingElisionElement: ElisionOpt BindingElement;-
2958/.-
2959 case $rule_number: {-
2960 sym(1).Node = new (pool) AST::PatternElementList(sym(1).Elision, sym(2).PatternElement);-
2961 } break;-
2962./-
2963-
2964-
2965BindingProperty: BindingIdentifier InitializerOpt_In;-
2966/.-
2967 case $rule_number: {-
2968 AST::StringLiteralPropertyName *name = new (pool) AST::StringLiteralPropertyName(stringRef(1));-
2969 name->propertyNameToken = loc(1);-
2970 // if initializer is an anonymous function expression, we need to assign identifierref as it's name-
2971 if (auto *f = asAnonymousFunctionDefinition(sym(2).Expression))-
2972 f->name = stringRef(1);-
2973 if (auto *c = asAnonymousClassDefinition(sym(2).Expression))-
2974 c->name = stringRef(1);-
2975 sym(1).Node = new (pool) AST::PatternProperty(name, stringRef(1), sym(2).Expression);-
2976 } break;-
2977./-
2978-
2979BindingProperty: PropertyName T_COLON BindingIdentifier InitializerOpt_In;-
2980/.-
2981 case $rule_number: {-
2982 AST::PatternProperty *node = new (pool) AST::PatternProperty(sym(1).PropertyName, stringRef(3), sym(4).Expression);-
2983 sym(1).Node = node;-
2984 } break;-
2985./-
2986-
2987BindingProperty: PropertyName T_COLON BindingPattern InitializerOpt_In;-
2988/.-
2989 case $rule_number: {-
2990 AST::PatternProperty *node = new (pool) AST::PatternProperty(sym(1).PropertyName, sym(3).Pattern, sym(4).Expression);-
2991 sym(1).Node = node;-
2992 } break;-
2993./-
2994-
2995BindingElement: BindingIdentifier InitializerOpt_In;-
2996/.-
2997 case $rule_number: {-
2998 AST::PatternElement *node = new (pool) AST::PatternElement(stringRef(1), sym(2).Expression);-
2999 node->identifierToken = loc(1);-
3000 // if initializer is an anonymous function expression, we need to assign identifierref as it's name-
3001 if (auto *f = asAnonymousFunctionDefinition(sym(2).Expression))-
3002 f->name = stringRef(1);-
3003 if (auto *c = asAnonymousClassDefinition(sym(2).Expression))-
3004 c->name = stringRef(1);-
3005 sym(1).Node = node;-
3006 } break;-
3007./-
3008-
3009BindingElement: BindingPattern InitializerOpt_In;-
3010/.-
3011 case $rule_number: {-
3012 AST::PatternElement *node = new (pool) AST::PatternElement(sym(1).Pattern, sym(2).Expression);-
3013 sym(1).Node = node;-
3014 } break;-
3015./-
3016-
3017BindingRestElement: T_ELLIPSIS BindingIdentifier;-
3018/.-
3019 case $rule_number: {-
3020 AST::PatternElement *node = new (pool) AST::PatternElement(stringRef(2), nullptr, AST::PatternElement::RestElement);-
3021 node->identifierToken = loc(2);-
3022 sym(1).Node = node;-
3023 } break;-
3024./-
3025-
3026BindingRestElement: T_ELLIPSIS BindingPattern;-
3027/.-
3028 case $rule_number: {-
3029 AST::PatternElement *node = new (pool) AST::PatternElement(sym(2).Pattern, nullptr, AST::PatternElement::RestElement);-
3030 sym(1).Node = node;-
3031 } break;-
3032./-
3033-
3034BindingRestElementOpt: ;-
3035/.-
3036 case $rule_number: {-
3037 sym(1).Node = nullptr;-
3038 } break;-
3039./-
3040-
3041BindingRestElementOpt: BindingRestElement;-
3042-
3043-
3044EmptyStatement: T_SEMICOLON;-
3045/.-
3046 case $rule_number: {-
3047 AST::EmptyStatement *node = new (pool) AST::EmptyStatement();-
3048 node->semicolonToken = loc(1);-
3049 sym(1).Node = node;-
3050 } break;-
3051./-
3052-
3053-- Spec says it should have a "[lookahead ∉ { {, function, class, let [ }]" before the Expression statement.-
3054-- This is implemented with the rule below that is run before any statement and inserts a T_EXPRESSION_STATEMENT_OK-
3055-- token if it's ok to parse as an expression statement.-
3056ExpressionStatementLookahead: ;-
3057/:-
3058#define J_SCRIPT_EXPRESSIONSTATEMENTLOOKAHEAD_RULE $rule_number-
3059:/-
3060/.-
3061 case $rule_number: {-
3062 int token = lookaheadToken(lexer);-
3063 if (token == T_LBRACE)-
3064 pushToken(T_FORCE_BLOCK);-
3065 else if (token == T_FUNCTION || token == T_CLASS || token == T_LET || token == T_CONST)-
3066 pushToken(T_FORCE_DECLARATION);-
3067 } break;-
3068./-
3069-
3070ExpressionStatement: Expression_In T_AUTOMATIC_SEMICOLON;-
3071ExpressionStatement: Expression_In T_SEMICOLON;-
3072/.-
3073 case $rule_number: {-
3074 AST::ExpressionStatement *node = new (pool) AST::ExpressionStatement(sym(1).Expression);-
3075 node->semicolonToken = loc(2);-
3076 sym(1).Node = node;-
3077 } break;-
3078./-
3079-
3080IfStatement: T_IF T_LPAREN Expression_In T_RPAREN Statement T_ELSE Statement;-
3081/.-
3082 case $rule_number: {-
3083 AST::IfStatement *node = new (pool) AST::IfStatement(sym(3).Expression, sym(5).Statement, sym(7).Statement);-
3084 node->ifToken = loc(1);-
3085 node->lparenToken = loc(2);-
3086 node->rparenToken = loc(4);-
3087 node->elseToken = loc(6);-
3088 sym(1).Node = node;-
3089 } break;-
3090./-
3091-
3092IfStatement: T_IF T_LPAREN Expression_In T_RPAREN Statement;-
3093/.-
3094 case $rule_number: {-
3095 AST::IfStatement *node = new (pool) AST::IfStatement(sym(3).Expression, sym(5).Statement);-
3096 node->ifToken = loc(1);-
3097 node->lparenToken = loc(2);-
3098 node->rparenToken = loc(4);-
3099 sym(1).Node = node;-
3100 } break;-
3101./-
3102-
3103-
3104IterationStatement: T_DO Statement T_WHILE T_LPAREN Expression_In T_RPAREN T_AUTOMATIC_SEMICOLON;-
3105IterationStatement: T_DO Statement T_WHILE T_LPAREN Expression_In T_RPAREN T_COMPATIBILITY_SEMICOLON; -- for JSC/V8 compatibility-
3106IterationStatement: T_DO Statement T_WHILE T_LPAREN Expression_In T_RPAREN T_SEMICOLON;-
3107/.-
3108 case $rule_number: {-
3109 AST::DoWhileStatement *node = new (pool) AST::DoWhileStatement(sym(2).Statement, sym(5).Expression);-
3110 node->doToken = loc(1);-
3111 node->whileToken = loc(3);-
3112 node->lparenToken = loc(4);-
3113 node->rparenToken = loc(6);-
3114 node->semicolonToken = loc(7);-
3115 sym(1).Node = node;-
3116 } break;-
3117./-
3118-
3119IterationStatement: T_WHILE T_LPAREN Expression_In T_RPAREN Statement;-
3120/.-
3121 case $rule_number: {-
3122 AST::WhileStatement *node = new (pool) AST::WhileStatement(sym(3).Expression, sym(5).Statement);-
3123 node->whileToken = loc(1);-
3124 node->lparenToken = loc(2);-
3125 node->rparenToken = loc(4);-
3126 sym(1).Node = node;-
3127 } break;-
3128./-
3129-
3130IterationStatement: T_FOR T_LPAREN ExpressionOpt T_SEMICOLON ExpressionOpt_In T_SEMICOLON ExpressionOpt_In T_RPAREN Statement; -- [lookahead != { let [ }]-
3131/.-
3132 case $rule_number: {-
3133 AST::ForStatement *node = new (pool) AST::ForStatement(sym(3).Expression, sym(5).Expression, sym(7).Expression, sym(9).Statement);-
3134 node->forToken = loc(1);-
3135 node->lparenToken = loc(2);-
3136 node->firstSemicolonToken = loc(4);-
3137 node->secondSemicolonToken = loc(6);-
3138 node->rparenToken = loc(8);-
3139 sym(1).Node = node;-
3140 } break;-
3141./-
3142-
3143IterationStatement: T_FOR T_LPAREN VarDeclaration T_SEMICOLON ExpressionOpt_In T_SEMICOLON ExpressionOpt_In T_RPAREN Statement;-
3144/. case $rule_number: Q_FALLTHROUGH(); ./-
3145IterationStatement: T_FOR T_LPAREN LexicalDeclaration T_SEMICOLON ExpressionOpt_In T_SEMICOLON ExpressionOpt_In T_RPAREN Statement;-
3146/.-
3147 case $rule_number: {-
3148 // ### get rid of the static_cast!-
3149 AST::ForStatement *node = new (pool) AST::ForStatement(-
3150 static_cast<AST::VariableStatement *>(sym(3).Node)->declarations, sym(5).Expression,-
3151 sym(7).Expression, sym(9).Statement);-
3152 node->forToken = loc(1);-
3153 node->lparenToken = loc(2);-
3154 node->firstSemicolonToken = loc(4);-
3155 node->secondSemicolonToken = loc(6);-
3156 node->rparenToken = loc(8);-
3157 sym(1).Node = node;-
3158 } break;-
3159./-
3160-
3161InOrOf: T_IN;-
3162/.-
3163 case $rule_number: {-
3164 sym(1).forEachType = AST::ForEachType::In;-
3165 } break;-
3166./-
3167-
3168InOrOf: T_OF;-
3169/.-
3170 case $rule_number: {-
3171 sym(1).forEachType = AST::ForEachType::Of;-
3172 } break;-
3173./-
3174-
3175IterationStatement: T_FOR T_LPAREN LeftHandSideExpression InOrOf Expression_In T_RPAREN Statement;-
3176/.-
3177 case $rule_number: {-
3178 // need to convert the LHS to an AssignmentPattern if it was an Array/ObjectLiteral-
3179 if (AST::Pattern *p = sym(3).Expression->patternCast()) {-
3180 AST::SourceLocation errorLoc;-
3181 QString errorMsg;-
3182 if (!p->convertLiteralToAssignmentPattern(pool, &errorLoc, &errorMsg)) {-
3183 syntaxError(errorLoc, errorMsg);-
3184 return false;-
3185 }-
3186 }-
3187 AST::ForEachStatement *node = new (pool) AST::ForEachStatement(sym(3).Expression, sym(5).Expression, sym(7).Statement);-
3188 node->forToken = loc(1);-
3189 node->lparenToken = loc(2);-
3190 node->inOfToken = loc(4);-
3191 node->rparenToken = loc(6);-
3192 node->type = sym(4).forEachType;-
3193 sym(1).Node = node;-
3194 } break;-
3195./-
3196-
3197IterationStatement: T_FOR T_LPAREN ForDeclaration InOrOf Expression_In T_RPAREN Statement;-
3198/.-
3199 case $rule_number: {-
3200 AST::ForEachStatement *node = new (pool) AST::ForEachStatement(sym(3).PatternElement, sym(5).Expression, sym(7).Statement);-
3201 node->forToken = loc(1);-
3202 node->lparenToken = loc(2);-
3203 node->inOfToken = loc(4);-
3204 node->rparenToken = loc(6);-
3205 node->type = sym(4).forEachType;-
3206 sym(1).Node = node;-
3207 } break;-
3208./-
3209-
3210ForDeclaration: LetOrConst BindingIdentifier;-
3211/. case $rule_number: Q_FALLTHROUGH(); ./-
3212ForDeclaration: Var BindingIdentifier;-
3213/.-
3214 case $rule_number: {-
3215 auto *node = new (pool) AST::PatternElement(stringRef(2), nullptr);-
3216 node->identifierToken = loc(2);-
3217 node->scope = sym(1).scope;-
3218 sym(1).Node = node;-
3219 } break;-
3220./-
3221-
3222ForDeclaration: LetOrConst BindingPattern;-
3223/. case $rule_number: Q_FALLTHROUGH(); ./-
3224ForDeclaration: Var BindingPattern;-
3225/.-
3226 case $rule_number: {-
3227 auto *node = new (pool) AST::PatternElement(sym(2).Pattern, nullptr);-
3228 node->scope = sym(1).scope;-
3229 sym(1).Node = node;-
3230 } break;-
3231./-
3232-
3233ContinueStatement: T_CONTINUE T_AUTOMATIC_SEMICOLON;-
3234ContinueStatement: T_CONTINUE T_SEMICOLON;-
3235/.-
3236 case $rule_number: {-
3237 AST::ContinueStatement *node = new (pool) AST::ContinueStatement();-
3238 node->continueToken = loc(1);-
3239 node->semicolonToken = loc(2);-
3240 sym(1).Node = node;-
3241 } break;-
3242./-
3243-
3244ContinueStatement: T_CONTINUE IdentifierReference T_AUTOMATIC_SEMICOLON;-
3245ContinueStatement: T_CONTINUE IdentifierReference T_SEMICOLON;-
3246/.-
3247 case $rule_number: {-
3248 AST::ContinueStatement *node = new (pool) AST::ContinueStatement(stringRef(2));-
3249 node->continueToken = loc(1);-
3250 node->identifierToken = loc(2);-
3251 node->semicolonToken = loc(3);-
3252 sym(1).Node = node;-
3253 } break;-
3254./-
3255-
3256BreakStatement: T_BREAK T_AUTOMATIC_SEMICOLON;-
3257BreakStatement: T_BREAK T_SEMICOLON;-
3258/.-
3259 case $rule_number: {-
3260 AST::BreakStatement *node = new (pool) AST::BreakStatement(QStringRef());-
3261 node->breakToken = loc(1);-
3262 node->semicolonToken = loc(2);-
3263 sym(1).Node = node;-
3264 } break;-
3265./-
3266-
3267BreakStatement: T_BREAK IdentifierReference T_AUTOMATIC_SEMICOLON;-
3268BreakStatement: T_BREAK IdentifierReference T_SEMICOLON;-
3269/.-
3270 case $rule_number: {-
3271 AST::BreakStatement *node = new (pool) AST::BreakStatement(stringRef(2));-
3272 node->breakToken = loc(1);-
3273 node->identifierToken = loc(2);-
3274 node->semicolonToken = loc(3);-
3275 sym(1).Node = node;-
3276 } break;-
3277./-
3278-
3279ReturnStatement: T_RETURN ExpressionOpt_In T_AUTOMATIC_SEMICOLON;-
3280ReturnStatement: T_RETURN ExpressionOpt_In T_SEMICOLON;-
3281/.-
3282 case $rule_number: {-
3283 if (!functionNestingLevel) {-
3284 syntaxError(loc(1), "Return statement not allowed outside of Function declaration.");-
3285 return false;-
3286 }-
3287 AST::ReturnStatement *node = new (pool) AST::ReturnStatement(sym(2).Expression);-
3288 node->returnToken = loc(1);-
3289 node->semicolonToken = loc(3);-
3290 sym(1).Node = node;-
3291 } break;-
3292./-
3293-
3294WithStatement: T_WITH T_LPAREN Expression_In T_RPAREN Statement;-
3295/.-
3296 case $rule_number: {-
3297 AST::WithStatement *node = new (pool) AST::WithStatement(sym(3).Expression, sym(5).Statement);-
3298 node->withToken = loc(1);-
3299 node->lparenToken = loc(2);-
3300 node->rparenToken = loc(4);-
3301 sym(1).Node = node;-
3302 } break;-
3303./-
3304-
3305SwitchStatement: T_SWITCH T_LPAREN Expression_In T_RPAREN CaseBlock;-
3306/.-
3307 case $rule_number: {-
3308 AST::SwitchStatement *node = new (pool) AST::SwitchStatement(sym(3).Expression, sym(5).CaseBlock);-
3309 node->switchToken = loc(1);-
3310 node->lparenToken = loc(2);-
3311 node->rparenToken = loc(4);-
3312 sym(1).Node = node;-
3313 } break;-
3314./-
3315-
3316CaseBlock: T_LBRACE CaseClausesOpt T_RBRACE;-
3317/.-
3318 case $rule_number: {-
3319 AST::CaseBlock *node = new (pool) AST::CaseBlock(sym(2).CaseClauses);-
3320 node->lbraceToken = loc(1);-
3321 node->rbraceToken = loc(3);-
3322 sym(1).Node = node;-
3323 } break;-
3324./-
3325-
3326CaseBlock: T_LBRACE CaseClausesOpt DefaultClause CaseClausesOpt T_RBRACE;-
3327/.-
3328 case $rule_number: {-
3329 AST::CaseBlock *node = new (pool) AST::CaseBlock(sym(2).CaseClauses, sym(3).DefaultClause, sym(4).CaseClauses);-
3330 node->lbraceToken = loc(1);-
3331 node->rbraceToken = loc(5);-
3332 sym(1).Node = node;-
3333 } break;-
3334./-
3335-
3336CaseClauses: CaseClause;-
3337/.-
3338 case $rule_number: {-
3339 sym(1).Node = new (pool) AST::CaseClauses(sym(1).CaseClause);-
3340 } break;-
3341./-
3342-
3343CaseClauses: CaseClauses CaseClause;-
3344/.-
3345 case $rule_number: {-
3346 sym(1).Node = new (pool) AST::CaseClauses(sym(1).CaseClauses, sym(2).CaseClause);-
3347 } break;-
3348./-
3349-
3350CaseClausesOpt: ;-
3351/.-
3352 case $rule_number: {-
3353 sym(1).Node = nullptr;-
3354 } break;-
3355./-
3356-
3357CaseClausesOpt: CaseClauses;-
3358/.-
3359 case $rule_number: {-
3360 sym(1).Node = sym(1).CaseClauses->finish();-
3361 } break;-
3362./-
3363-
3364CaseClause: T_CASE Expression_In T_COLON StatementListOpt;-
3365/.-
3366 case $rule_number: {-
3367 AST::CaseClause *node = new (pool) AST::CaseClause(sym(2).Expression, sym(4).StatementList);-
3368 node->caseToken = loc(1);-
3369 node->colonToken = loc(3);-
3370 sym(1).Node = node;-
3371 } break;-
3372./-
3373-
3374DefaultClause: T_DEFAULT T_COLON StatementListOpt;-
3375/.-
3376 case $rule_number: {-
3377 AST::DefaultClause *node = new (pool) AST::DefaultClause(sym(3).StatementList);-
3378 node->defaultToken = loc(1);-
3379 node->colonToken = loc(2);-
3380 sym(1).Node = node;-
3381 } break;-
3382./-
3383-
3384LabelledStatement: IdentifierReference T_COLON LabelledItem;-
3385/.-
3386 case $rule_number: {-
3387 AST::LabelledStatement *node = new (pool) AST::LabelledStatement(stringRef(1), sym(3).Statement);-
3388 node->identifierToken = loc(1);-
3389 node->colonToken = loc(2);-
3390 sym(1).Node = node;-
3391 } break;-
3392./-
3393-
3394LabelledItem: Statement;-
3395-
3396LabelledItem: ExpressionStatementLookahead T_FORCE_DECLARATION FunctionDeclaration;-
3397/.-
3398 case $rule_number: {-
3399 syntaxError(loc(3), "FunctionDeclarations are not allowed after a label.");-
3400 return false;-
3401 } break;-
3402./-
3403-
3404ThrowStatement: T_THROW Expression_In T_AUTOMATIC_SEMICOLON;-
3405ThrowStatement: T_THROW Expression_In T_SEMICOLON;-
3406/.-
3407 case $rule_number: {-
3408 AST::ThrowStatement *node = new (pool) AST::ThrowStatement(sym(2).Expression);-
3409 node->throwToken = loc(1);-
3410 node->semicolonToken = loc(3);-
3411 sym(1).Node = node;-
3412 } break;-
3413./-
3414-
3415TryStatement: T_TRY Block Catch;-
3416/.-
3417 case $rule_number: {-
3418 AST::TryStatement *node = new (pool) AST::TryStatement(sym(2).Statement, sym(3).Catch);-
3419 node->tryToken = loc(1);-
3420 sym(1).Node = node;-
3421 } break;-
3422./-
3423-
3424TryStatement: T_TRY Block Finally;-
3425/.-
3426 case $rule_number: {-
3427 AST::TryStatement *node = new (pool) AST::TryStatement(sym(2).Statement, sym(3).Finally);-
3428 node->tryToken = loc(1);-
3429 sym(1).Node = node;-
3430 } break;-
3431./-
3432-
3433TryStatement: T_TRY Block Catch Finally;-
3434/.-
3435 case $rule_number: {-
3436 AST::TryStatement *node = new (pool) AST::TryStatement(sym(2).Statement, sym(3).Catch, sym(4).Finally);-
3437 node->tryToken = loc(1);-
3438 sym(1).Node = node;-
3439 } break;-
3440./-
3441-
3442Catch: T_CATCH T_LPAREN CatchParameter T_RPAREN Block;-
3443/.-
3444 case $rule_number: {-
3445 AST::Catch *node = new (pool) AST::Catch(sym(3).PatternElement, sym(5).Block);-
3446 node->catchToken = loc(1);-
3447 node->lparenToken = loc(2);-
3448 node->identifierToken = loc(3);-
3449 node->rparenToken = loc(4);-
3450 sym(1).Node = node;-
3451 } break;-
3452./-
3453-
3454Finally: T_FINALLY Block;-
3455/.-
3456 case $rule_number: {-
3457 AST::Finally *node = new (pool) AST::Finally(sym(2).Block);-
3458 node->finallyToken = loc(1);-
3459 sym(1).Node = node;-
3460 } break;-
3461./-
3462-
3463CatchParameter: BindingIdentifier;-
3464/.-
3465 case $rule_number: {-
3466 AST::PatternElement *node = new (pool) AST::PatternElement(stringRef(1));-
3467 node->identifierToken = loc(1);-
3468 node->scope = AST::VariableScope::Let;-
3469 sym(1).Node = node;-
3470 } break;-
3471./-
3472-
3473CatchParameter: BindingPattern;-
3474/.-
3475 case $rule_number: {-
3476 AST::PatternElement *node = new (pool) AST::PatternElement(sym(1).Pattern);-
3477 node->scope = AST::VariableScope::Let;-
3478 sym(1).Node = node;-
3479 } break;-
3480./-
3481-
3482DebuggerStatement: T_DEBUGGER T_AUTOMATIC_SEMICOLON; -- automatic semicolon-
3483DebuggerStatement: T_DEBUGGER T_SEMICOLON;-
3484/.-
3485 case $rule_number: {-
3486 AST::DebuggerStatement *node = new (pool) AST::DebuggerStatement();-
3487 node->debuggerToken = loc(1);-
3488 node->semicolonToken = loc(2);-
3489 sym(1).Node = node;-
3490 } break;-
3491./-
3492-
3493-- tell the parser to prefer function declarations to function expressions.-
3494-- That is, the `Function' symbol is used to mark the start of a function-
3495-- declaration.-
3496-- This is still required for parsing QML, where MemberExpression and FunctionDeclaration would-
3497-- otherwise conflict.-
3498Function: T_FUNCTION %prec REDUCE_HERE;-
3499-
3500FunctionDeclaration: Function BindingIdentifier T_LPAREN FormalParameters T_RPAREN FunctionLBrace FunctionBody FunctionRBrace;-
3501/.-
3502 case $rule_number: {-
3503 AST::FunctionDeclaration *node = new (pool) AST::FunctionDeclaration(stringRef(2), sym(4).FormalParameterList, sym(7).StatementList);-
3504 node->functionToken = loc(1);-
3505 node->identifierToken = loc(2);-
3506 node->lparenToken = loc(3);-
3507 node->rparenToken = loc(5);-
3508 node->lbraceToken = loc(6);-
3509 node->rbraceToken = loc(8);-
3510 sym(1).Node = node;-
3511 } break;-
3512./-
3513-
3514-
3515FunctionDeclaration_Default: FunctionDeclaration;-
3516FunctionDeclaration_Default: Function T_LPAREN FormalParameters T_RPAREN FunctionLBrace FunctionBody FunctionRBrace;-
3517/.-
3518 case $rule_number: {-
3519 AST::FunctionDeclaration *node = new (pool) AST::FunctionDeclaration(stringRef(1), sym(3).FormalParameterList, sym(6).StatementList);-
3520 node->functionToken = loc(1);-
3521 node->identifierToken = loc(1);-
3522 node->lparenToken = loc(2);-
3523 node->rparenToken = loc(4);-
3524 node->lbraceToken = loc(5);-
3525 node->rbraceToken = loc(7);-
3526 sym(1).Node = node;-
3527 } break;-
3528./-
3529-
3530FunctionExpression: T_FUNCTION BindingIdentifier T_LPAREN FormalParameters T_RPAREN FunctionLBrace FunctionBody FunctionRBrace;-
3531/.-
3532 case $rule_number: {-
3533 AST::FunctionExpression *node = new (pool) AST::FunctionExpression(stringRef(2), sym(4).FormalParameterList, sym(7).StatementList);-
3534 node->functionToken = loc(1);-
3535 if (! stringRef(2).isNull())-
3536 node->identifierToken = loc(2);-
3537 node->lparenToken = loc(3);-
3538 node->rparenToken = loc(5);-
3539 node->lbraceToken = loc(6);-
3540 node->rbraceToken = loc(8);-
3541 sym(1).Node = node;-
3542 } break;-
3543./-
3544-
3545FunctionExpression: T_FUNCTION T_LPAREN FormalParameters T_RPAREN FunctionLBrace FunctionBody FunctionRBrace;-
3546/.-
3547 case $rule_number: {-
3548 AST::FunctionExpression *node = new (pool) AST::FunctionExpression(QStringRef(), sym(3).FormalParameterList, sym(6).StatementList);-
3549 node->functionToken = loc(1);-
3550 node->lparenToken = loc(2);-
3551 node->rparenToken = loc(4);-
3552 node->lbraceToken = loc(5);-
3553 node->rbraceToken = loc(7);-
3554 sym(1).Node = node;-
3555 } break;-
3556./-
3557-
3558StrictFormalParameters: FormalParameters;-
3559-
3560FormalParameters: ;-
3561/.-
3562 case $rule_number: {-
3563 sym(1).Node = nullptr;-
3564 } break;-
3565./-
3566-
3567FormalParameters: BindingRestElement;-
3568/.-
3569 case $rule_number: {-
3570 AST::FormalParameterList *node = (new (pool) AST::FormalParameterList(nullptr, sym(1).PatternElement))->finish(pool);-
3571 sym(1).Node = node;-
3572 } break;-
3573./-
3574-
3575FormalParameters: FormalParameterList;-
3576/. case $rule_number: ./-
3577FormalParameters: FormalParameterList T_COMMA;-
3578/.-
3579 case $rule_number: {-
3580 sym(1).Node = sym(1).FormalParameterList->finish(pool);-
3581 } break;-
3582./-
3583-
3584FormalParameters: FormalParameterList T_COMMA BindingRestElement;-
3585/.-
3586 case $rule_number: {-
3587 AST::FormalParameterList *node = (new (pool) AST::FormalParameterList(sym(1).FormalParameterList, sym(3).PatternElement))->finish(pool);-
3588 sym(1).Node = node;-
3589 } break;-
3590./-
3591-
3592FormalParameterList: BindingElement;-
3593/.-
3594 case $rule_number: {-
3595 AST::FormalParameterList *node = new (pool) AST::FormalParameterList(nullptr, sym(1).PatternElement);-
3596 sym(1).Node = node;-
3597 } break;-
3598./-
3599-
3600-
3601FormalParameterList: FormalParameterList T_COMMA BindingElement;-
3602/.-
3603 case $rule_number: {-
3604 AST::FormalParameterList *node = new (pool) AST::FormalParameterList(sym(1).FormalParameterList, sym(3).PatternElement);-
3605 sym(1).Node = node;-
3606 } break;-
3607./-
3608-
3609FormalParameter: BindingElement;-
3610-
3611FunctionLBrace: T_LBRACE;-
3612/.-
3613 case $rule_number: {-
3614 ++functionNestingLevel;-
3615 } break;-
3616./-
3617-
3618FunctionRBrace: T_RBRACE;-
3619/.-
3620 case $rule_number: {-
3621 --functionNestingLevel;-
3622 } break;-
3623./-
3624-
3625-
3626FunctionBody: StatementListOpt;-
3627-
3628ArrowFunction: ArrowParameters T_ARROW ConciseBodyLookahead AssignmentExpression; -- [lookahead ≠ {]-
3629/. case $rule_number: Q_FALLTHROUGH(); ./-
3630ArrowFunction_In: ArrowParameters T_ARROW ConciseBodyLookahead AssignmentExpression_In; -- [lookahead ≠ {]-
3631/.-
3632 case $rule_number: {-
3633 AST::ReturnStatement *ret = new (pool) AST::ReturnStatement(sym(4).Expression);-
3634 ret->returnToken = sym(4).Node->firstSourceLocation();-
3635 ret->semicolonToken = sym(4).Node->lastSourceLocation();-
3636 AST::StatementList *statements = (new (pool) AST::StatementList(ret))->finish();-
3637 AST::FunctionExpression *f = new (pool) AST::FunctionExpression(QStringRef(), sym(1).FormalParameterList, statements);-
3638 f->isArrowFunction = true;-
3639 f->functionToken = sym(1).Node ? sym(1).Node->firstSourceLocation() : loc(1);-
3640 f->lbraceToken = sym(4).Node->firstSourceLocation();-
3641 f->rbraceToken = sym(4).Node->lastSourceLocation();-
3642 sym(1).Node = f;-
3643 } break;-
3644./-
3645-
3646ArrowFunction: ArrowParameters T_ARROW ConciseBodyLookahead T_FORCE_BLOCK FunctionLBrace FunctionBody FunctionRBrace;-
3647/. case $rule_number: Q_FALLTHROUGH(); ./-
3648ArrowFunction_In: ArrowParameters T_ARROW ConciseBodyLookahead T_FORCE_BLOCK FunctionLBrace FunctionBody FunctionRBrace;-
3649/.-
3650 case $rule_number: {-
3651 AST::FunctionExpression *f = new (pool) AST::FunctionExpression(QStringRef(), sym(1).FormalParameterList, sym(6).StatementList);-
3652 f->isArrowFunction = true;-
3653 f->functionToken = sym(1).Node ? sym(1).Node->firstSourceLocation() : loc(1);-
3654 f->lbraceToken = loc(6);-
3655 f->rbraceToken = loc(7);-
3656 sym(1).Node = f;-
3657 } break;-
3658./-
3659-
3660ArrowParameters: BindingIdentifier;-
3661/.-
3662 case $rule_number: {-
3663 AST::PatternElement *e = new (pool) AST::PatternElement(stringRef(1), nullptr, AST::PatternElement::Binding);-
3664 e->identifierToken = loc(1);-
3665 sym(1).FormalParameterList = (new (pool) AST::FormalParameterList(nullptr, e))->finish(pool);-
3666 } break;-
3667./-
3668-
3669-- CoverParenthesizedExpressionAndArrowParameterList for ArrowParameters i being refined to:-
3670-- ArrowFormalParameters: T_LPAREN StrictFormalParameters T_RPAREN-
3671ArrowParameters: CoverParenthesizedExpressionAndArrowParameterList;-
3672/.-
3673 case $rule_number: {-
3674 if (coverExpressionType != CE_FormalParameterList) {-
3675 AST::NestedExpression *ne = static_cast<AST::NestedExpression *>(sym(1).Node);-
3676 AST::FormalParameterList *list = ne->expression->reparseAsFormalParameterList(pool);-
3677 if (!list) {-
3678 syntaxError(loc(1), "Invalid Arrow parameter list.");-
3679 return false;-
3680 }-
3681 sym(1).Node = list->finish(pool);-
3682 }-
3683 } break;-
3684./-
3685-
3686ConciseBodyLookahead: ;-
3687/:-
3688#define J_SCRIPT_CONCISEBODYLOOKAHEAD_RULE $rule_number-
3689:/-
3690/.-
3691 case $rule_number: {-
3692 if (lookaheadToken(lexer) == T_LBRACE)-
3693 pushToken(T_FORCE_BLOCK);-
3694 } break;-
3695./-
3696-
3697MethodDefinition: PropertyName T_LPAREN StrictFormalParameters T_RPAREN FunctionLBrace FunctionBody FunctionRBrace;-
3698/.-
3699 case $rule_number: {-
3700 AST::FunctionExpression *f = new (pool) AST::FunctionExpression(stringRef(1), sym(3).FormalParameterList, sym(6).StatementList);-
3701 f->functionToken = sym(1).PropertyName->firstSourceLocation();-
3702 f->lparenToken = loc(2);-
3703 f->rparenToken = loc(4);-
3704 f->lbraceToken = loc(5);-
3705 f->rbraceToken = loc(7);-
3706 AST::PatternProperty *node = new (pool) AST::PatternProperty(sym(1).PropertyName, f);-
3707 node->colonToken = loc(2);-
3708 sym(1).Node = node;-
3709 } break;-
3710./-
3711-
3712MethodDefinition: T_STAR PropertyName GeneratorLParen StrictFormalParameters T_RPAREN FunctionLBrace GeneratorBody GeneratorRBrace;-
3713/.-
3714 case $rule_number: {-
3715 AST::FunctionExpression *f = new (pool) AST::FunctionExpression(stringRef(2), sym(4).FormalParameterList, sym(7).StatementList);-
3716 f->functionToken = sym(2).PropertyName->firstSourceLocation();-
3717 f->lparenToken = loc(3);-
3718 f->rparenToken = loc(5);-
3719 f->lbraceToken = loc(6);-
3720 f->rbraceToken = loc(8);-
3721 f->isGenerator = true;-
3722 AST::PatternProperty *node = new (pool) AST::PatternProperty(sym(2).PropertyName, f);-
3723 node->colonToken = loc(2);-
3724 sym(1).Node = node;-
3725 } break;-
3726./-
3727-
3728-
3729MethodDefinition: T_GET PropertyName T_LPAREN T_RPAREN FunctionLBrace FunctionBody FunctionRBrace;-
3730/.-
3731 case $rule_number: {-
3732 AST::FunctionExpression *f = new (pool) AST::FunctionExpression(stringRef(2), nullptr, sym(6).StatementList);-
3733 f->functionToken = sym(2).PropertyName->firstSourceLocation();-
3734 f->lparenToken = loc(3);-
3735 f->rparenToken = loc(4);-
3736 f->lbraceToken = loc(5);-
3737 f->rbraceToken = loc(7);-
3738 AST::PatternProperty *node = new (pool) AST::PatternProperty(sym(2).PropertyName, f, AST::PatternProperty::Getter);-
3739 node->colonToken = loc(2);-
3740 sym(1).Node = node;-
3741 } break;-
3742./-
3743-
3744MethodDefinition: T_SET PropertyName T_LPAREN PropertySetParameterList T_RPAREN FunctionLBrace FunctionBody FunctionRBrace;-
3745/.-
3746 case $rule_number: {-
3747 AST::FunctionExpression *f = new (pool) AST::FunctionExpression(stringRef(2), sym(4).FormalParameterList, sym(7).StatementList);-
3748 f->functionToken = sym(2).PropertyName->firstSourceLocation();-
3749 f->lparenToken = loc(3);-
3750 f->rparenToken = loc(5);-
3751 f->lbraceToken = loc(6);-
3752 f->rbraceToken = loc(8);-
3753 AST::PatternProperty *node = new (pool) AST::PatternProperty(sym(2).PropertyName, f, AST::PatternProperty::Setter);-
3754 node->colonToken = loc(2);-
3755 sym(1).Node = node;-
3756 } break;-
3757./-
3758-
3759-
3760PropertySetParameterList: FormalParameter;-
3761/.-
3762 case $rule_number: {-
3763 AST::FormalParameterList *node = (new (pool) AST::FormalParameterList(nullptr, sym(1).PatternElement))->finish(pool);-
3764 sym(1).Node = node;-
3765 } break;-
3766./-
3767-
3768GeneratorLParen: T_LPAREN;-
3769/.-
3770 case $rule_number: {-
3771 lexer->enterGeneratorBody();-
3772 } break;-
3773./-
3774-
3775GeneratorRBrace: T_RBRACE;-
3776/.-
3777 case $rule_number: {-
3778 --functionNestingLevel;-
3779 lexer->leaveGeneratorBody();-
3780 } break;-
3781./-
3782-
3783GeneratorDeclaration: Function T_STAR BindingIdentifier GeneratorLParen FormalParameters T_RPAREN FunctionLBrace GeneratorBody GeneratorRBrace;-
3784/.-
3785 case $rule_number: {-
3786 AST::FunctionDeclaration *node = new (pool) AST::FunctionDeclaration(stringRef(3), sym(5).FormalParameterList, sym(8).StatementList);-
3787 node->functionToken = loc(1);-
3788 node->identifierToken = loc(3);-
3789 node->lparenToken = loc(4);-
3790 node->rparenToken = loc(6);-
3791 node->lbraceToken = loc(7);-
3792 node->rbraceToken = loc(9);-
3793 node->isGenerator = true;-
3794 sym(1).Node = node;-
3795 } break;-
3796./-
3797-
3798GeneratorDeclaration_Default: GeneratorDeclaration;-
3799GeneratorDeclaration_Default: Function T_STAR GeneratorLParen FormalParameters T_RPAREN FunctionLBrace GeneratorBody GeneratorRBrace;-
3800/.-
3801 case $rule_number: {-
3802 AST::FunctionDeclaration *node = new (pool) AST::FunctionDeclaration(stringRef(1), sym(4).FormalParameterList, sym(7).StatementList);-
3803 node->functionToken = loc(1);-
3804 node->identifierToken = loc(1);-
3805 node->lparenToken = loc(3);-
3806 node->rparenToken = loc(5);-
3807 node->lbraceToken = loc(6);-
3808 node->rbraceToken = loc(8);-
3809 node->isGenerator = true;-
3810 sym(1).Node = node;-
3811 } break;-
3812./-
3813-
3814GeneratorExpression: T_FUNCTION T_STAR BindingIdentifier GeneratorLParen FormalParameters T_RPAREN FunctionLBrace GeneratorBody GeneratorRBrace;-
3815/.-
3816 case $rule_number: {-
3817 AST::FunctionExpression *node = new (pool) AST::FunctionExpression(stringRef(3), sym(5).FormalParameterList, sym(8).StatementList);-
3818 node->functionToken = loc(1);-
3819 if (!stringRef(3).isNull())-
3820 node->identifierToken = loc(3);-
3821 node->lparenToken = loc(4);-
3822 node->rparenToken = loc(6);-
3823 node->lbraceToken = loc(7);-
3824 node->rbraceToken = loc(9);-
3825 node->isGenerator = true;-
3826 sym(1).Node = node;-
3827 } break;-
3828./-
3829-
3830GeneratorExpression: T_FUNCTION T_STAR GeneratorLParen FormalParameters T_RPAREN FunctionLBrace GeneratorBody GeneratorRBrace;-
3831/.-
3832 case $rule_number: {-
3833 AST::FunctionExpression *node = new (pool) AST::FunctionExpression(QStringRef(), sym(4).FormalParameterList, sym(7).StatementList);-
3834 node->functionToken = loc(1);-
3835 node->lparenToken = loc(3);-
3836 node->rparenToken = loc(5);-
3837 node->lbraceToken = loc(6);-
3838 node->rbraceToken = loc(8);-
3839 node->isGenerator = true;-
3840 sym(1).Node = node;-
3841 } break;-
3842./-
3843-
3844GeneratorBody: FunctionBody;-
3845-
3846YieldExpression: T_YIELD;-
3847/. case $rule_number: Q_FALLTHROUGH(); ./-
3848YieldExpression_In: T_YIELD;-
3849/.-
3850 case $rule_number: {-
3851 AST::YieldExpression *node = new (pool) AST::YieldExpression();-
3852 node->yieldToken = loc(1);-
3853 sym(1).Node = node;-
3854 } break;-
3855./-
3856-
3857YieldExpression: T_YIELD T_STAR AssignmentExpression;-
3858/. case $rule_number: Q_FALLTHROUGH(); ./-
3859YieldExpression_In: T_YIELD T_STAR AssignmentExpression_In;-
3860/.-
3861 case $rule_number: {-
3862 AST::YieldExpression *node = new (pool) AST::YieldExpression(sym(3).Expression);-
3863 node->yieldToken = loc(1);-
3864 node->isYieldStar = true;-
3865 sym(1).Node = node;-
3866 } break;-
3867./-
3868-
3869YieldExpression: T_YIELD AssignmentExpression;-
3870/. case $rule_number: Q_FALLTHROUGH(); ./-
3871YieldExpression_In: T_YIELD AssignmentExpression_In;-
3872/.-
3873 case $rule_number: {-
3874 AST::YieldExpression *node = new (pool) AST::YieldExpression(sym(2).Expression);-
3875 node->yieldToken = loc(1);-
3876 sym(1).Node = node;-
3877 } break;-
3878./-
3879-
3880-
3881ClassDeclaration: T_CLASS BindingIdentifier ClassHeritageOpt ClassLBrace ClassBodyOpt ClassRBrace;-
3882/.-
3883 case $rule_number: {-
3884 AST::ClassDeclaration *node = new (pool) AST::ClassDeclaration(stringRef(2), sym(3).Expression, sym(5).ClassElementList);-
3885 node->classToken = loc(1);-
3886 node->identifierToken = loc(2);-
3887 node->lbraceToken = loc(4);-
3888 node->rbraceToken = loc(6);-
3889 sym(1).Node = node;-
3890 } break;-
3891./-
3892-
3893ClassExpression: T_CLASS BindingIdentifier ClassHeritageOpt ClassLBrace ClassBodyOpt ClassRBrace;-
3894/.-
3895 case $rule_number: {-
3896 AST::ClassExpression *node = new (pool) AST::ClassExpression(stringRef(2), sym(3).Expression, sym(5).ClassElementList);-
3897 node->classToken = loc(1);-
3898 node->identifierToken = loc(2);-
3899 node->lbraceToken = loc(4);-
3900 node->rbraceToken = loc(6);-
3901 sym(1).Node = node;-
3902 } break;-
3903./-
3904-
3905ClassDeclaration_Default: T_CLASS ClassHeritageOpt ClassLBrace ClassBodyOpt ClassRBrace;-
3906/.-
3907 case $rule_number: {-
3908 AST::ClassDeclaration *node = new (pool) AST::ClassDeclaration(QStringRef(), sym(2).Expression, sym(4).ClassElementList);-
3909 node->classToken = loc(1);-
3910 node->lbraceToken = loc(3);-
3911 node->rbraceToken = loc(5);-
3912 sym(1).Node = node;-
3913 } break;-
3914./-
3915-
3916ClassExpression: T_CLASS ClassHeritageOpt ClassLBrace ClassBodyOpt ClassRBrace;-
3917/.-
3918 case $rule_number: {-
3919 AST::ClassExpression *node = new (pool) AST::ClassExpression(QStringRef(), sym(2).Expression, sym(4).ClassElementList);-
3920 node->classToken = loc(1);-
3921 node->lbraceToken = loc(3);-
3922 node->rbraceToken = loc(5);-
3923 sym(1).Node = node;-
3924 } break;-
3925./-
3926-
3927ClassDeclaration_Default: ClassDeclaration;-
3928-
3929ClassLBrace: T_LBRACE;-
3930/.-
3931 case $rule_number: {-
3932 lexer->setStaticIsKeyword(true);-
3933 } break;-
3934./-
3935-
3936ClassRBrace: T_RBRACE;-
3937/. case $rule_number: ./-
3938ClassStaticQualifier: T_STATIC;-
3939/.-
3940 case $rule_number: {-
3941 lexer->setStaticIsKeyword(false);-
3942 } break;-
3943./-
3944-
3945ClassHeritageOpt: ;-
3946/.-
3947 case $rule_number: {-
3948 sym(1).Node = nullptr;-
3949 } break;-
3950./-
3951-
3952ClassHeritageOpt: T_EXTENDS LeftHandSideExpression;-
3953/.-
3954 case $rule_number: {-
3955 sym(1).Node = sym(2).Node;-
3956 } break;-
3957./-
3958-
3959ClassBodyOpt: ;-
3960/.-
3961 case $rule_number: {-
3962 sym(1).Node = nullptr;-
3963 } break;-
3964./-
3965-
3966ClassBodyOpt: ClassElementList;-
3967/.-
3968 case $rule_number: {-
3969 if (sym(1).Node)-
3970 sym(1).Node = sym(1).ClassElementList->finish();-
3971 } break;-
3972./-
3973-
3974ClassElementList: ClassElement;-
3975-
3976ClassElementList: ClassElementList ClassElement;-
3977/.-
3978 case $rule_number: {-
3979 if (sym(2).Node)-
3980 sym(1).ClassElementList = sym(1).ClassElementList->append(sym(2).ClassElementList);-
3981 } break;-
3982./-
3983-
3984ClassElement: MethodDefinition;-
3985/.-
3986 case $rule_number: {-
3987 AST::ClassElementList *node = new (pool) AST::ClassElementList(sym(1).PatternProperty, false);-
3988 sym(1).Node = node;-
3989 } break;-
3990./-
3991-
3992ClassElement: ClassStaticQualifier MethodDefinition;-
3993/.-
3994 case $rule_number: {-
3995 lexer->setStaticIsKeyword(true);-
3996 AST::ClassElementList *node = new (pool) AST::ClassElementList(sym(2).PatternProperty, true);-
3997 sym(1).Node = node;-
3998 } break;-
3999./-
4000-
4001ClassElement: T_SEMICOLON;-
4002/.-
4003 case $rule_number: {-
4004 sym(1).Node = nullptr;-
4005 } break;-
4006./-
4007-
4008-- Scripts and Modules-
4009-
4010Script: ;-
4011/.-
4012 case $rule_number: {-
4013 sym(1).Node = nullptr;-
4014 } break;-
4015./-
4016-
4017Script: ScriptBody;-
4018-
4019ScriptBody: StatementList;-
4020/.-
4021 case $rule_number: {-
4022 sym(1).Node = new (pool) AST::Program(sym(1).StatementList->finish());-
4023 } break;-
4024./-
4025-
4026Module: ModuleBodyOpt;-
4027/. case $rule_number: { UNIMPLEMENTED; } ./-
4028-
4029ModuleBody: ModuleItemList;-
4030-
4031ModuleBodyOpt: ;-
4032ModuleBodyOpt: ModuleBody;-
4033-
4034ModuleItemList: ModuleItem;-
4035ModuleItemList: ModuleItemList ModuleItem;-
4036-
4037ModuleItem: ImportDeclaration T_AUTOMATIC_SEMICOLON;-
4038ModuleItem: ImportDeclaration T_SEMICOLON;-
4039ModuleItem: ExportDeclaration T_AUTOMATIC_SEMICOLON;-
4040ModuleItem: ExportDeclaration T_SEMICOLON;-
4041ModuleItem: StatementListItem;-
4042-
4043ImportDeclaration: T_IMPORT ImportClause FromClause;-
4044ImportDeclaration: T_IMPORT ModuleSpecifier;-
4045-
4046ImportClause: ImportedDefaultBinding;-
4047ImportClause: NameSpaceImport;-
4048ImportClause: NamedImports;-
4049ImportClause: ImportedDefaultBinding T_COMMA NameSpaceImport;-
4050ImportClause: ImportedDefaultBinding T_COMMA NamedImports;-
4051-
4052ImportedDefaultBinding: ImportedBinding;-
4053-
4054NameSpaceImport: T_STAR T_AS ImportedBinding;-
4055-
4056NamedImports: T_LBRACE T_RBRACE;-
4057NamedImports: T_LBRACE ImportsList T_RBRACE;-
4058NamedImports: T_LBRACE ImportsList T_COMMA T_RBRACE;-
4059-
4060FromClause: T_FROM ModuleSpecifier;-
4061-
4062ImportsList: ImportSpecifier;-
4063ImportsList: ImportsList T_COMMA ImportSpecifier;-
4064-
4065ImportSpecifier: ImportedBinding;-
4066ImportSpecifier: IdentifierName T_AS ImportedBinding;-
4067-
4068ModuleSpecifier: T_STRING_LITERAL;-
4069-
4070ImportedBinding: BindingIdentifier;-
4071-
4072ExportDeclarationLookahead: ;-
4073/:-
4074#define J_SCRIPT_EXPORTDECLARATIONLOOKAHEAD_RULE $rule_number-
4075:/-
4076/.-
4077 case $rule_number: {-
4078 int token = lookaheadToken(lexer);-
4079 if (token == T_FUNCTION || token == T_CLASS)-
4080 pushToken(T_FORCE_DECLARATION);-
4081 } break;-
4082./-
4083-
4084ExportDeclaration: T_EXPORT T_STAR FromClause;-
4085ExportDeclaration: T_EXPORT ExportClause FromClause;-
4086ExportDeclaration: T_EXPORT ExportClause;-
4087ExportDeclaration: T_EXPORT VariableStatement;-
4088ExportDeclaration: T_EXPORT Declaration;-
4089ExportDeclaration: T_EXPORT T_DEFAULT ExportDeclarationLookahead T_FORCE_DECLARATION HoistableDeclaration_Default;-
4090ExportDeclaration: T_EXPORT T_DEFAULT ExportDeclarationLookahead T_FORCE_DECLARATION ClassDeclaration_Default;-
4091ExportDeclaration: T_EXPORT T_DEFAULT ExportDeclarationLookahead AssignmentExpression_In; -- [lookahead ∉ { function, class }]-
4092-
4093ExportClause: T_LBRACE T_RBRACE;-
4094ExportClause: T_LBRACE ExportsList T_RBRACE;-
4095ExportClause: T_LBRACE ExportsList T_COMMA T_RBRACE;-
4096-
4097ExportsList: ExportSpecifier;-
4098ExportsList: ExportsList T_COMMA ExportSpecifier;-
4099-
4100ExportSpecifier: IdentifierName;-
4101ExportSpecifier: IdentifierName T_AS IdentifierName;-
4102-
4103-- Old top level code-
4104-
4105/.-
4106 // ------------ end of switch statement-
4107 } // switch-
4108 action = nt_action(state_stack[tos], lhs[r] - TERMINAL_COUNT);-
4109 } // if-
4110 } while (action != 0);-
4111-
4112#ifdef PARSER_DEBUG-
4113 qDebug() << "Done or error.";-
4114#endif-
4115-
4116 if (first_token == last_token) {-
4117 const int errorState = state_stack[tos];-
4118-
4119 // automatic insertion of `;'-
4120 if (yytoken != -1 && ((t_action(errorState, T_AUTOMATIC_SEMICOLON) && lexer->canInsertAutomaticSemicolon(yytoken))-
4121 || t_action(errorState, T_COMPATIBILITY_SEMICOLON))) {-
4122#ifdef PARSER_DEBUG-
4123 qDebug() << "Inserting automatic semicolon.";-
4124#endif-
4125 SavedToken &tk = token_buffer[0];-
4126 tk.token = yytoken;-
4127 tk.dval = yylval;-
4128 tk.spell = yytokenspell;-
4129 tk.loc = yylloc;-
4130-
4131 yylloc = yyprevlloc;-
4132 yylloc.offset += yylloc.length;-
4133 yylloc.startColumn += yylloc.length;-
4134 yylloc.length = 0;-
4135-
4136 //const QString msg = QCoreApplication::translate("QQmlParser", "Missing `;'");-
4137 //diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Warning, yylloc, msg));-
4138-
4139 first_token = &token_buffer[0];-
4140 last_token = &token_buffer[1];-
4141-
4142 yytoken = T_SEMICOLON;-
4143 yylval = 0;-
4144-
4145 action = errorState;-
4146-
4147 goto _Lcheck_token;-
4148 }-
4149-
4150 hadErrors = true;-
4151-
4152 token_buffer[0].token = yytoken;-
4153 token_buffer[0].dval = yylval;-
4154 token_buffer[0].spell = yytokenspell;-
4155 token_buffer[0].loc = yylloc;-
4156-
4157 token_buffer[1].token = yytoken = lexer->lex();-
4158 token_buffer[1].dval = yylval = lexer->tokenValue();-
4159 token_buffer[1].spell = yytokenspell = lexer->tokenSpell();-
4160 token_buffer[1].loc = yylloc = location(lexer);-
4161-
4162 if (t_action(errorState, yytoken)) {-
4163 QString msg;-
4164 int token = token_buffer[0].token;-
4165 if (token < 0 || token >= TERMINAL_COUNT)-
4166 msg = QCoreApplication::translate("QQmlParser", "Syntax error");-
4167 else-
4168 msg = QCoreApplication::translate("QQmlParser", "Unexpected token `%1'").arg(QLatin1String(spell[token]));-
4169 diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, token_buffer[0].loc, msg));-
4170-
4171 action = errorState;-
4172 goto _Lcheck_token;-
4173 }-
4174-
4175 static int tokens[] = {-
4176 T_PLUS,-
4177 T_EQ,-
4178-
4179 T_COMMA,-
4180 T_COLON,-
4181 T_SEMICOLON,-
4182-
4183 T_RPAREN, T_RBRACKET, T_RBRACE,-
4184-
4185 T_NUMERIC_LITERAL,-
4186 T_IDENTIFIER,-
4187-
4188 T_LPAREN, T_LBRACKET, T_LBRACE,-
4189-
4190 EOF_SYMBOL-
4191 };-
4192-
4193 for (int *tk = tokens; *tk != EOF_SYMBOL; ++tk) {-
4194 int a = t_action(errorState, *tk);-
4195 if (a > 0 && t_action(a, yytoken)) {-
4196 const QString msg = QCoreApplication::translate("QQmlParser", "Expected token `%1'").arg(QLatin1String(spell[*tk]));-
4197 diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, token_buffer[0].loc, msg));-
4198-
4199 yytoken = *tk;-
4200 yylval = 0;-
4201 yylloc = token_buffer[0].loc;-
4202 yylloc.length = 0;-
4203-
4204 first_token = &token_buffer[0];-
4205 last_token = &token_buffer[2];-
4206-
4207 action = errorState;-
4208 goto _Lcheck_token;-
4209 }-
4210 }-
4211-
4212 for (int tk = 1; tk < TERMINAL_COUNT; ++tk) {-
4213 if (tk == T_AUTOMATIC_SEMICOLON || tk == T_FEED_UI_PROGRAM ||-
4214 tk == T_FEED_JS_STATEMENT || tk == T_FEED_JS_EXPRESSION)-
4215 continue;-
4216-
4217 int a = t_action(errorState, tk);-
4218 if (a > 0 && t_action(a, yytoken)) {-
4219 const QString msg = QCoreApplication::translate("QQmlParser", "Expected token `%1'").arg(QLatin1String(spell[tk]));-
4220 diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, token_buffer[0].loc, msg));-
4221-
4222 yytoken = tk;-
4223 yylval = 0;-
4224 yylloc = token_buffer[0].loc;-
4225 yylloc.length = 0;-
4226-
4227 action = errorState;-
4228 goto _Lcheck_token;-
4229 }-
4230 }-
4231-
4232 const QString msg = QCoreApplication::translate("QQmlParser", "Syntax error");-
4233 diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, token_buffer[0].loc, msg));-
4234 }-
4235-
4236 return false;-
4237}-
4238-
4239QT_QML_END_NAMESPACE-
4240-
4241-
4242./-
4243/:-
4244QT_QML_END_NAMESPACE-
4245-
4246-
4247-
4248#endif // QQMLJSPARSER_P_H-
4249:/-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.0