1 /****************************************************************************
3 ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
4 ** All rights reserved.
5 ** Contact: Nokia Corporation (qt-info@nokia.com)
7 ** This file is part of the QtDeclarative module of the Qt Toolkit.
9 ** $QT_BEGIN_LICENSE:LGPL$
10 ** No Commercial Usage
11 ** This file contains pre-release code and may not be distributed.
12 ** You may use this file in accordance with the terms and conditions
13 ** contained in the Technology Preview License Agreement accompanying
16 ** GNU Lesser General Public License Usage
17 ** Alternatively, this file may be used under the terms of the GNU Lesser
18 ** General Public License version 2.1 as published by the Free Software
19 ** Foundation and appearing in the file LICENSE.LGPL included in the
20 ** packaging of this file. Please review the following information to
21 ** ensure the GNU Lesser General Public License version 2.1 requirements
22 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
24 ** In addition, as a special exception, Nokia gives you certain additional
25 ** rights. These rights are described in the Nokia Qt LGPL Exception
26 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
28 ** If you have questions regarding the use of this file, please contact
29 ** Nokia at qt-info@nokia.com.
40 ****************************************************************************/
42 #include <QtCore/QtDebug>
43 #include <QtGui/QApplication>
47 #include "private/qdeclarativejsengine_p.h"
48 #include "private/qdeclarativejslexer_p.h"
49 #include "private/qdeclarativejsast_p.h"
50 #include "private/qdeclarativejsnodepool_p.h"
54 #include "private/qdeclarativejsparser_p.h"
55 #include <QVarLengthArray>
58 // This file is automatically generated from qmljs.g.
59 // Changes will be lost.
62 using namespace QDeclarativeJS;
64 QT_QML_BEGIN_NAMESPACE
66 void Parser::reallocateStack()
73 sym_stack = reinterpret_cast<Value*> (qRealloc(sym_stack, stack_size * sizeof(Value)));
74 state_stack = reinterpret_cast<int*> (qRealloc(state_stack, stack_size * sizeof(int)));
75 location_stack = reinterpret_cast<AST::SourceLocation*> (qRealloc(location_stack, stack_size * sizeof(AST::SourceLocation)));
78 inline static bool automatic(Engine *driver, int token)
80 return token == QDeclarativeJSGrammar::T_RBRACE
82 || driver->lexer()->prevTerminator();
86 Parser::Parser(Engine *engine):
103 qFree(location_stack);
107 static inline AST::SourceLocation location(Lexer *lexer)
109 AST::SourceLocation loc;
110 loc.offset = lexer->tokenOffset();
111 loc.length = lexer->tokenLength();
112 loc.startLine = lexer->startLineNo();
113 loc.startColumn = lexer->startColumnNo();
117 AST::UiQualifiedId *Parser::reparseAsQualifiedId(AST::ExpressionNode *expr)
119 QVarLengthArray<NameId *, 4> nameIds;
120 QVarLengthArray<AST::SourceLocation, 4> locations;
122 AST::ExpressionNode *it = expr;
123 while (AST::FieldMemberExpression *m = AST::cast<AST::FieldMemberExpression *>(it)) {
124 nameIds.append(m->name);
125 locations.append(m->identifierToken);
129 if (AST::IdentifierExpression *idExpr = AST::cast<AST::IdentifierExpression *>(it)) {
130 AST::UiQualifiedId *q = makeAstNode<AST::UiQualifiedId>(driver->nodePool(), idExpr->name);
131 q->identifierToken = idExpr->identifierToken;
133 AST::UiQualifiedId *currentId = q;
134 for (int i = nameIds.size() - 1; i != -1; --i) {
135 currentId = makeAstNode<AST::UiQualifiedId>(driver->nodePool(), currentId, nameIds[i]);
136 currentId->identifierToken = locations[i];
139 return currentId->finish();
145 bool Parser::parse(int startToken)
147 Lexer *lexer = driver->lexer();
148 bool hadErrors = false;
152 token_buffer[0].token = startToken;
153 first_token = &token_buffer[0];
154 last_token = &token_buffer[1];
160 if (++tos == stack_size)
163 state_stack[tos] = action;
166 if (yytoken == -1 && -TERMINAL_COUNT != action_index[action]) {
169 if (first_token == last_token) {
170 yytoken = lexer->lex();
171 yylval = lexer->dval();
172 yylloc = location(lexer);
174 yytoken = first_token->token;
175 yylval = first_token->dval;
176 yylloc = first_token->loc;
181 action = t_action(action, yytoken);
183 if (action != ACCEPT_STATE) {
185 sym(1).dval = yylval;
191 } else if (action < 0) {
192 const int r = -action - 1;
198 sym(1).Node = sym(2).Node;
199 program = sym(1).Node;
203 sym(1).Node = sym(2).Node;
204 program = sym(1).Node;
208 sym(1).Node = sym(2).Node;
209 program = sym(1).Node;
213 sym(1).Node = sym(2).Node;
214 program = sym(1).Node;
218 sym(1).Node = sym(2).Node;
219 program = sym(1).Node;
223 sym(1).Node = sym(2).Node;
224 program = sym(1).Node;
228 sym(1).UiProgram = makeAstNode<AST::UiProgram> (driver->nodePool(), sym(1).UiImportList,
229 sym(2).UiObjectMemberList->finish());
233 sym(1).Node = sym(1).UiImportList->finish();
237 sym(1).Node = makeAstNode<AST::UiImportList> (driver->nodePool(), sym(1).UiImport);
241 sym(1).Node = makeAstNode<AST::UiImportList> (driver->nodePool(),
242 sym(1).UiImportList, sym(2).UiImport);
246 sym(1).UiImport->semicolonToken = loc(2);
250 sym(1).UiImport->versionToken = loc(2);
251 sym(1).UiImport->semicolonToken = loc(3);
255 sym(1).UiImport->versionToken = loc(2);
256 sym(1).UiImport->asToken = loc(3);
257 sym(1).UiImport->importIdToken = loc(4);
258 sym(1).UiImport->importId = sym(4).sval;
259 sym(1).UiImport->semicolonToken = loc(5);
263 sym(1).UiImport->asToken = loc(2);
264 sym(1).UiImport->importIdToken = loc(3);
265 sym(1).UiImport->importId = sym(3).sval;
266 sym(1).UiImport->semicolonToken = loc(4);
270 AST::UiImport *node = 0;
272 if (AST::StringLiteral *importIdLiteral = AST::cast<AST::StringLiteral *>(sym(2).Expression)) {
273 node = makeAstNode<AST::UiImport>(driver->nodePool(), importIdLiteral->value);
274 node->fileNameToken = loc(2);
275 } else if (AST::UiQualifiedId *qualifiedId = reparseAsQualifiedId(sym(2).Expression)) {
276 node = makeAstNode<AST::UiImport>(driver->nodePool(), qualifiedId);
277 node->fileNameToken = loc(2);
283 node->importToken = loc(1);
285 diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, loc(1),
286 QLatin1String("Expected a qualified name id or a string literal")));
288 return false; // ### remove me
297 sym(1).Node = makeAstNode<AST::UiObjectMemberList> (driver->nodePool(), sym(1).UiObjectMember);
301 sym(1).Node = makeAstNode<AST::UiObjectMemberList> (driver->nodePool(), sym(1).UiObjectMember);
305 AST::UiObjectMemberList *node = makeAstNode<AST:: UiObjectMemberList> (driver->nodePool(),
306 sym(1).UiObjectMemberList, sym(2).UiObjectMember);
311 sym(1).Node = makeAstNode<AST::UiArrayMemberList> (driver->nodePool(), sym(1).UiObjectMember);
315 AST::UiArrayMemberList *node = makeAstNode<AST::UiArrayMemberList> (driver->nodePool(),
316 sym(1).UiArrayMemberList, sym(3).UiObjectMember);
317 node->commaToken = loc(2);
322 AST::UiObjectInitializer *node = makeAstNode<AST::UiObjectInitializer> (driver->nodePool(), (AST::UiObjectMemberList*)0);
323 node->lbraceToken = loc(1);
324 node->rbraceToken = loc(2);
329 AST::UiObjectInitializer *node = makeAstNode<AST::UiObjectInitializer> (driver->nodePool(), sym(2).UiObjectMemberList->finish());
330 node->lbraceToken = loc(1);
331 node->rbraceToken = loc(3);
336 AST::UiObjectDefinition *node = makeAstNode<AST::UiObjectDefinition> (driver->nodePool(), sym(1).UiQualifiedId,
337 sym(2).UiObjectInitializer);
342 AST::UiArrayBinding *node = makeAstNode<AST::UiArrayBinding> (driver->nodePool(),
343 sym(1).UiQualifiedId, sym(4).UiArrayMemberList->finish());
344 node->colonToken = loc(2);
345 node->lbracketToken = loc(3);
346 node->rbracketToken = loc(5);
351 AST::UiObjectBinding *node = makeAstNode<AST::UiObjectBinding> (driver->nodePool(),
352 sym(1).UiQualifiedId, sym(3).UiQualifiedId, sym(4).UiObjectInitializer);
353 node->colonToken = loc(2);
358 AST::UiObjectBinding *node = makeAstNode<AST::UiObjectBinding> (driver->nodePool(),
359 sym(3).UiQualifiedId, sym(1).UiQualifiedId, sym(4).UiObjectInitializer);
360 node->colonToken = loc(2);
361 node->hasOnToken = true;
364 case 34:case 35:case 36:case 37:
366 AST::UiScriptBinding *node = makeAstNode<AST::UiScriptBinding> (driver->nodePool(),
367 sym(1).UiQualifiedId, sym(3).Statement);
368 node->colonToken = loc(2);
375 sym(1).sval = driver->intern(lexer->characterBuffer(), lexer->characterCount());
384 sym(1).Node = sym(1).UiParameterList->finish ();
388 AST::UiParameterList *node = makeAstNode<AST::UiParameterList> (driver->nodePool(), sym(1).sval, sym(2).sval);
389 node->identifierToken = loc(2);
394 AST::UiParameterList *node = makeAstNode<AST::UiParameterList> (driver->nodePool(), sym(1).UiParameterList, sym(3).sval, sym(4).sval);
395 node->commaToken = loc(2);
396 node->identifierToken = loc(4);
401 AST::UiPublicMember *node = makeAstNode<AST::UiPublicMember> (driver->nodePool(), (NameId *)0, sym(2).sval);
402 node->type = AST::UiPublicMember::Signal;
403 node->propertyToken = loc(1);
404 node->typeToken = loc(2);
405 node->identifierToken = loc(2);
406 node->parameters = sym(4).UiParameterList;
407 node->semicolonToken = loc(6);
412 AST::UiPublicMember *node = makeAstNode<AST::UiPublicMember> (driver->nodePool(), (NameId *)0, sym(2).sval);
413 node->type = AST::UiPublicMember::Signal;
414 node->propertyToken = loc(1);
415 node->typeToken = loc(2);
416 node->identifierToken = loc(2);
417 node->semicolonToken = loc(3);
422 AST::UiPublicMember *node = makeAstNode<AST::UiPublicMember> (driver->nodePool(), sym(4).sval, sym(6).sval);
423 node->typeModifier = sym(2).sval;
424 node->propertyToken = loc(1);
425 node->typeModifierToken = loc(2);
426 node->typeToken = loc(4);
427 node->identifierToken = loc(6);
428 node->semicolonToken = loc(7);
433 AST::UiPublicMember *node = makeAstNode<AST::UiPublicMember> (driver->nodePool(), sym(2).sval, sym(3).sval);
434 node->propertyToken = loc(1);
435 node->typeToken = loc(2);
436 node->identifierToken = loc(3);
437 node->semicolonToken = loc(4);
442 AST::UiPublicMember *node = makeAstNode<AST::UiPublicMember> (driver->nodePool(), sym(3).sval, sym(4).sval);
443 node->isDefaultMember = true;
444 node->defaultToken = loc(1);
445 node->propertyToken = loc(2);
446 node->typeToken = loc(3);
447 node->identifierToken = loc(4);
448 node->semicolonToken = loc(5);
453 AST::UiPublicMember *node = makeAstNode<AST::UiPublicMember> (driver->nodePool(), sym(2).sval, sym(3).sval,
455 node->propertyToken = loc(1);
456 node->typeToken = loc(2);
457 node->identifierToken = loc(3);
458 node->colonToken = loc(4);
459 node->semicolonToken = loc(6);
464 AST::UiPublicMember *node = makeAstNode<AST::UiPublicMember> (driver->nodePool(), sym(3).sval, sym(4).sval,
466 node->isReadonlyMember = true;
467 node->readonlyToken = loc(1);
468 node->propertyToken = loc(2);
469 node->typeToken = loc(3);
470 node->identifierToken = loc(4);
471 node->colonToken = loc(5);
472 node->semicolonToken = loc(7);
477 AST::UiPublicMember *node = makeAstNode<AST::UiPublicMember> (driver->nodePool(), sym(3).sval, sym(4).sval,
479 node->isDefaultMember = true;
480 node->defaultToken = loc(1);
481 node->propertyToken = loc(2);
482 node->typeToken = loc(3);
483 node->identifierToken = loc(4);
484 node->colonToken = loc(5);
485 node->semicolonToken = loc(7);
490 AST::UiPublicMember *node = makeAstNode<AST::UiPublicMember> (driver->nodePool(), sym(4).sval, sym(6).sval);
491 node->typeModifier = sym(2).sval;
492 node->propertyToken = loc(1);
493 node->typeModifierToken = loc(2);
494 node->typeToken = loc(4);
495 node->identifierToken = loc(6);
496 node->semicolonToken = loc(7); // insert a fake ';' before ':'
498 AST::UiQualifiedId *propertyName = makeAstNode<AST::UiQualifiedId>(driver->nodePool(), sym(6).sval);
499 propertyName->identifierToken = loc(6);
500 propertyName->next = 0;
502 AST::UiArrayBinding *binding = makeAstNode<AST::UiArrayBinding> (driver->nodePool(),
503 propertyName, sym(9).UiArrayMemberList->finish());
504 binding->colonToken = loc(7);
505 binding->lbracketToken = loc(8);
506 binding->rbracketToken = loc(10);
508 node->binding = binding;
514 AST::UiPublicMember *node = makeAstNode<AST::UiPublicMember> (driver->nodePool(), sym(2).sval, sym(3).sval);
515 node->propertyToken = loc(1);
516 node->typeToken = loc(2);
517 node->identifierToken = loc(3);
518 node->semicolonToken = loc(4); // insert a fake ';' before ':'
520 AST::UiQualifiedId *propertyName = makeAstNode<AST::UiQualifiedId>(driver->nodePool(), sym(3).sval);
521 propertyName->identifierToken = loc(3);
522 propertyName->next = 0;
524 AST::UiObjectBinding *binding = makeAstNode<AST::UiObjectBinding> (driver->nodePool(),
525 propertyName, sym(5).UiQualifiedId, sym(6).UiObjectInitializer);
526 binding->colonToken = loc(4);
528 node->binding = binding;
534 sym(1).Node = makeAstNode<AST::UiSourceElement>(driver->nodePool(), sym(1).Node);
538 sym(1).Node = makeAstNode<AST::UiSourceElement>(driver->nodePool(), sym(1).Node);
542 QString s = QLatin1String(QDeclarativeJSGrammar::spell[T_PROPERTY]);
543 sym(1).sval = driver->intern(s.constData(), s.length());
548 QString s = QLatin1String(QDeclarativeJSGrammar::spell[T_SIGNAL]);
549 sym(1).sval = driver->intern(s.constData(), s.length());
554 QString s = QLatin1String(QDeclarativeJSGrammar::spell[T_READONLY]);
555 sym(1).sval = driver->intern(s.constData(), s.length());
560 QString s = QLatin1String(QDeclarativeJSGrammar::spell[T_ON]);
561 sym(1).sval = driver->intern(s.constData(), s.length());
566 AST::ThisExpression *node = makeAstNode<AST::ThisExpression> (driver->nodePool());
567 node->thisToken = loc(1);
572 AST::IdentifierExpression *node = makeAstNode<AST::IdentifierExpression> (driver->nodePool(), sym(1).sval);
573 node->identifierToken = loc(1);
578 AST::NullExpression *node = makeAstNode<AST::NullExpression> (driver->nodePool());
579 node->nullToken = loc(1);
584 AST::TrueLiteral *node = makeAstNode<AST::TrueLiteral> (driver->nodePool());
585 node->trueToken = loc(1);
590 AST::FalseLiteral *node = makeAstNode<AST::FalseLiteral> (driver->nodePool());
591 node->falseToken = loc(1);
596 AST::NumericLiteral *node = makeAstNode<AST::NumericLiteral> (driver->nodePool(), sym(1).dval);
597 node->literalToken = loc(1);
602 AST::StringLiteral *node = makeAstNode<AST::StringLiteral> (driver->nodePool(), sym(1).sval);
603 node->literalToken = loc(1);
608 bool rx = lexer->scanRegExp(Lexer::NoPrefix);
610 diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, location(lexer), lexer->errorMessage()));
611 return false; // ### remove me
614 loc(1).length = lexer->tokenLength();
616 AST::RegExpLiteral *node = makeAstNode<AST::RegExpLiteral> (driver->nodePool(), lexer->pattern, lexer->flags);
617 node->literalToken = loc(1);
622 bool rx = lexer->scanRegExp(Lexer::EqualPrefix);
624 diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, location(lexer), lexer->errorMessage()));
628 loc(1).length = lexer->tokenLength();
630 AST::RegExpLiteral *node = makeAstNode<AST::RegExpLiteral> (driver->nodePool(), lexer->pattern, lexer->flags);
631 node->literalToken = loc(1);
636 AST::ArrayLiteral *node = makeAstNode<AST::ArrayLiteral> (driver->nodePool(), (AST::Elision *) 0);
637 node->lbracketToken = loc(1);
638 node->rbracketToken = loc(2);
643 AST::ArrayLiteral *node = makeAstNode<AST::ArrayLiteral> (driver->nodePool(), sym(2).Elision->finish());
644 node->lbracketToken = loc(1);
645 node->rbracketToken = loc(3);
650 AST::ArrayLiteral *node = makeAstNode<AST::ArrayLiteral> (driver->nodePool(), sym(2).ElementList->finish ());
651 node->lbracketToken = loc(1);
652 node->rbracketToken = loc(3);
657 AST::ArrayLiteral *node = makeAstNode<AST::ArrayLiteral> (driver->nodePool(), sym(2).ElementList->finish (),
659 node->lbracketToken = loc(1);
660 node->commaToken = loc(3);
661 node->rbracketToken = loc(4);
666 AST::ArrayLiteral *node = makeAstNode<AST::ArrayLiteral> (driver->nodePool(), sym(2).ElementList->finish (),
667 sym(4).Elision->finish());
668 node->lbracketToken = loc(1);
669 node->commaToken = loc(3);
670 node->rbracketToken = loc(5);
675 AST::ObjectLiteral *node = 0;
677 node = makeAstNode<AST::ObjectLiteral> (driver->nodePool(),
678 sym(2).PropertyNameAndValueList->finish ());
680 node = makeAstNode<AST::ObjectLiteral> (driver->nodePool());
681 node->lbraceToken = loc(1);
682 node->rbraceToken = loc(3);
687 AST::ObjectLiteral *node = makeAstNode<AST::ObjectLiteral> (driver->nodePool(),
688 sym(2).PropertyNameAndValueList->finish ());
689 node->lbraceToken = loc(1);
690 node->rbraceToken = loc(4);
695 AST::NestedExpression *node = makeAstNode<AST::NestedExpression>(driver->nodePool(), sym(2).Expression);
696 node->lparenToken = loc(1);
697 node->rparenToken = loc(3);
702 if (AST::ArrayMemberExpression *mem = AST::cast<AST::ArrayMemberExpression *>(sym(1).Expression)) {
703 diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Warning, mem->lbracketToken,
704 QLatin1String("Ignored annotation")));
706 sym(1).Expression = mem->base;
709 if (AST::UiQualifiedId *qualifiedId = reparseAsQualifiedId(sym(1).Expression)) {
710 sym(1).UiQualifiedId = qualifiedId;
712 sym(1).UiQualifiedId = 0;
714 diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, loc(1),
715 QLatin1String("Expected a qualified name id")));
717 return false; // ### recover
722 sym(1).Node = makeAstNode<AST::ElementList> (driver->nodePool(), (AST::Elision *) 0, sym(1).Expression);
726 sym(1).Node = makeAstNode<AST::ElementList> (driver->nodePool(), sym(1).Elision->finish(), sym(2).Expression);
730 AST::ElementList *node = makeAstNode<AST::ElementList> (driver->nodePool(), sym(1).ElementList,
731 (AST::Elision *) 0, sym(3).Expression);
732 node->commaToken = loc(2);
737 AST::ElementList *node = makeAstNode<AST::ElementList> (driver->nodePool(), sym(1).ElementList, sym(3).Elision->finish(),
739 node->commaToken = loc(2);
744 AST::Elision *node = makeAstNode<AST::Elision> (driver->nodePool());
745 node->commaToken = loc(1);
750 AST::Elision *node = makeAstNode<AST::Elision> (driver->nodePool(), sym(1).Elision);
751 node->commaToken = loc(2);
756 AST::PropertyNameAndValueList *node = makeAstNode<AST::PropertyNameAndValueList> (driver->nodePool(),
757 sym(1).PropertyName, sym(3).Expression);
758 node->colonToken = loc(2);
763 AST::PropertyNameAndValueList *node = makeAstNode<AST::PropertyNameAndValueList> (driver->nodePool(),
764 sym(1).PropertyNameAndValueList, sym(3).PropertyName, sym(5).Expression);
765 node->commaToken = loc(2);
766 node->colonToken = loc(4);
771 AST::IdentifierPropertyName *node = makeAstNode<AST::IdentifierPropertyName> (driver->nodePool(), sym(1).sval);
772 node->propertyNameToken = loc(1);
777 AST::IdentifierPropertyName *node = makeAstNode<AST::IdentifierPropertyName> (driver->nodePool(), driver->intern(lexer->characterBuffer(), lexer->characterCount()));
778 node->propertyNameToken = loc(1);
783 AST::StringLiteralPropertyName *node = makeAstNode<AST::StringLiteralPropertyName> (driver->nodePool(), sym(1).sval);
784 node->propertyNameToken = loc(1);
789 AST::NumericLiteralPropertyName *node = makeAstNode<AST::NumericLiteralPropertyName> (driver->nodePool(), sym(1).dval);
790 node->propertyNameToken = loc(1);
795 AST::IdentifierPropertyName *node = makeAstNode<AST::IdentifierPropertyName> (driver->nodePool(), sym(1).sval);
796 node->propertyNameToken = loc(1);
862 sym(1).sval = driver->intern(lexer->characterBuffer(), lexer->characterCount());
866 AST::ArrayMemberExpression *node = makeAstNode<AST::ArrayMemberExpression> (driver->nodePool(), sym(1).Expression, sym(3).Expression);
867 node->lbracketToken = loc(2);
868 node->rbracketToken = loc(4);
873 AST::FieldMemberExpression *node = makeAstNode<AST::FieldMemberExpression> (driver->nodePool(), sym(1).Expression, sym(3).sval);
874 node->dotToken = loc(2);
875 node->identifierToken = loc(3);
880 AST::NewMemberExpression *node = makeAstNode<AST::NewMemberExpression> (driver->nodePool(), sym(2).Expression, sym(4).ArgumentList);
881 node->newToken = loc(1);
882 node->lparenToken = loc(3);
883 node->rparenToken = loc(5);
888 AST::NewExpression *node = makeAstNode<AST::NewExpression> (driver->nodePool(), sym(2).Expression);
889 node->newToken = loc(1);
894 AST::CallExpression *node = makeAstNode<AST::CallExpression> (driver->nodePool(), sym(1).Expression, sym(3).ArgumentList);
895 node->lparenToken = loc(2);
896 node->rparenToken = loc(4);
901 AST::CallExpression *node = makeAstNode<AST::CallExpression> (driver->nodePool(), sym(1).Expression, sym(3).ArgumentList);
902 node->lparenToken = loc(2);
903 node->rparenToken = loc(4);
908 AST::ArrayMemberExpression *node = makeAstNode<AST::ArrayMemberExpression> (driver->nodePool(), sym(1).Expression, sym(3).Expression);
909 node->lbracketToken = loc(2);
910 node->rbracketToken = loc(4);
915 AST::FieldMemberExpression *node = makeAstNode<AST::FieldMemberExpression> (driver->nodePool(), sym(1).Expression, sym(3).sval);
916 node->dotToken = loc(2);
917 node->identifierToken = loc(3);
926 sym(1).Node = sym(1).ArgumentList->finish();
930 sym(1).Node = makeAstNode<AST::ArgumentList> (driver->nodePool(), sym(1).Expression);
934 AST::ArgumentList *node = makeAstNode<AST::ArgumentList> (driver->nodePool(), sym(1).ArgumentList, sym(3).Expression);
935 node->commaToken = loc(2);
940 AST::PostIncrementExpression *node = makeAstNode<AST::PostIncrementExpression> (driver->nodePool(), sym(1).Expression);
941 node->incrementToken = loc(2);
946 AST::PostDecrementExpression *node = makeAstNode<AST::PostDecrementExpression> (driver->nodePool(), sym(1).Expression);
947 node->decrementToken = loc(2);
952 AST::DeleteExpression *node = makeAstNode<AST::DeleteExpression> (driver->nodePool(), sym(2).Expression);
953 node->deleteToken = loc(1);
958 AST::VoidExpression *node = makeAstNode<AST::VoidExpression> (driver->nodePool(), sym(2).Expression);
959 node->voidToken = loc(1);
964 AST::TypeOfExpression *node = makeAstNode<AST::TypeOfExpression> (driver->nodePool(), sym(2).Expression);
965 node->typeofToken = loc(1);
970 AST::PreIncrementExpression *node = makeAstNode<AST::PreIncrementExpression> (driver->nodePool(), sym(2).Expression);
971 node->incrementToken = loc(1);
976 AST::PreDecrementExpression *node = makeAstNode<AST::PreDecrementExpression> (driver->nodePool(), sym(2).Expression);
977 node->decrementToken = loc(1);
982 AST::UnaryPlusExpression *node = makeAstNode<AST::UnaryPlusExpression> (driver->nodePool(), sym(2).Expression);
983 node->plusToken = loc(1);
988 AST::UnaryMinusExpression *node = makeAstNode<AST::UnaryMinusExpression> (driver->nodePool(), sym(2).Expression);
989 node->minusToken = loc(1);
994 AST::TildeExpression *node = makeAstNode<AST::TildeExpression> (driver->nodePool(), sym(2).Expression);
995 node->tildeToken = loc(1);
1000 AST::NotExpression *node = makeAstNode<AST::NotExpression> (driver->nodePool(), sym(2).Expression);
1001 node->notToken = loc(1);
1006 AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression,
1007 QSOperator::Mul, sym(3).Expression);
1008 node->operatorToken = loc(2);
1013 AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression,
1014 QSOperator::Div, sym(3).Expression);
1015 node->operatorToken = loc(2);
1020 AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression,
1021 QSOperator::Mod, sym(3).Expression);
1022 node->operatorToken = loc(2);
1027 AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression,
1028 QSOperator::Add, sym(3).Expression);
1029 node->operatorToken = loc(2);
1034 AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression,
1035 QSOperator::Sub, sym(3).Expression);
1036 node->operatorToken = loc(2);
1041 AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression,
1042 QSOperator::LShift, sym(3).Expression);
1043 node->operatorToken = loc(2);
1048 AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression,
1049 QSOperator::RShift, sym(3).Expression);
1050 node->operatorToken = loc(2);
1055 AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression,
1056 QSOperator::URShift, sym(3).Expression);
1057 node->operatorToken = loc(2);
1062 AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression,
1063 QSOperator::Lt, sym(3).Expression);
1064 node->operatorToken = loc(2);
1069 AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression,
1070 QSOperator::Gt, sym(3).Expression);
1071 node->operatorToken = loc(2);
1076 AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression,
1077 QSOperator::Le, sym(3).Expression);
1078 node->operatorToken = loc(2);
1083 AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression,
1084 QSOperator::Ge, sym(3).Expression);
1085 node->operatorToken = loc(2);
1090 AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression,
1091 QSOperator::InstanceOf, sym(3).Expression);
1092 node->operatorToken = loc(2);
1097 AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression,
1098 QSOperator::In, sym(3).Expression);
1099 node->operatorToken = loc(2);
1104 AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression,
1105 QSOperator::Lt, sym(3).Expression);
1106 node->operatorToken = loc(2);
1111 AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression,
1112 QSOperator::Gt, sym(3).Expression);
1113 node->operatorToken = loc(2);
1118 AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression,
1119 QSOperator::Le, sym(3).Expression);
1120 node->operatorToken = loc(2);
1125 AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression,
1126 QSOperator::Ge, sym(3).Expression);
1127 node->operatorToken = loc(2);
1132 AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression,
1133 QSOperator::InstanceOf, sym(3).Expression);
1134 node->operatorToken = loc(2);
1139 AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression,
1140 QSOperator::Equal, sym(3).Expression);
1141 node->operatorToken = loc(2);
1146 AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression,
1147 QSOperator::NotEqual, sym(3).Expression);
1148 node->operatorToken = loc(2);
1153 AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression,
1154 QSOperator::StrictEqual, sym(3).Expression);
1155 node->operatorToken = loc(2);
1160 AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression,
1161 QSOperator::StrictNotEqual, sym(3).Expression);
1162 node->operatorToken = loc(2);
1167 AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression,
1168 QSOperator::Equal, sym(3).Expression);
1169 node->operatorToken = loc(2);
1174 AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression,
1175 QSOperator::NotEqual, sym(3).Expression);
1176 node->operatorToken = loc(2);
1181 AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression,
1182 QSOperator::StrictEqual, sym(3).Expression);
1183 node->operatorToken = loc(2);
1188 AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression,
1189 QSOperator::StrictNotEqual, sym(3).Expression);
1190 node->operatorToken = loc(2);
1195 AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression,
1196 QSOperator::BitAnd, sym(3).Expression);
1197 node->operatorToken = loc(2);
1202 AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression,
1203 QSOperator::BitAnd, sym(3).Expression);
1204 node->operatorToken = loc(2);
1209 AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression,
1210 QSOperator::BitXor, sym(3).Expression);
1211 node->operatorToken = loc(2);
1216 AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression,
1217 QSOperator::BitXor, sym(3).Expression);
1218 node->operatorToken = loc(2);
1223 AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression,
1224 QSOperator::BitOr, sym(3).Expression);
1225 node->operatorToken = loc(2);
1230 AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression,
1231 QSOperator::BitOr, sym(3).Expression);
1232 node->operatorToken = loc(2);
1237 AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression,
1238 QSOperator::And, sym(3).Expression);
1239 node->operatorToken = loc(2);
1244 AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression,
1245 QSOperator::And, sym(3).Expression);
1246 node->operatorToken = loc(2);
1251 AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression,
1252 QSOperator::Or, sym(3).Expression);
1253 node->operatorToken = loc(2);
1258 AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression,
1259 QSOperator::Or, sym(3).Expression);
1260 node->operatorToken = loc(2);
1265 AST::ConditionalExpression *node = makeAstNode<AST::ConditionalExpression> (driver->nodePool(), sym(1).Expression,
1266 sym(3).Expression, sym(5).Expression);
1267 node->questionToken = loc(2);
1268 node->colonToken = loc(4);
1273 AST::ConditionalExpression *node = makeAstNode<AST::ConditionalExpression> (driver->nodePool(), sym(1).Expression,
1274 sym(3).Expression, sym(5).Expression);
1275 node->questionToken = loc(2);
1276 node->colonToken = loc(4);
1281 AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression,
1282 sym(2).ival, sym(3).Expression);
1283 node->operatorToken = loc(2);
1288 AST::BinaryExpression *node = makeAstNode<AST::BinaryExpression> (driver->nodePool(), sym(1).Expression,
1289 sym(2).ival, sym(3).Expression);
1290 node->operatorToken = loc(2);
1295 sym(1).ival = QSOperator::Assign;
1299 sym(1).ival = QSOperator::InplaceMul;
1303 sym(1).ival = QSOperator::InplaceDiv;
1307 sym(1).ival = QSOperator::InplaceMod;
1311 sym(1).ival = QSOperator::InplaceAdd;
1315 sym(1).ival = QSOperator::InplaceSub;
1319 sym(1).ival = QSOperator::InplaceLeftShift;
1323 sym(1).ival = QSOperator::InplaceRightShift;
1327 sym(1).ival = QSOperator::InplaceURightShift;
1331 sym(1).ival = QSOperator::InplaceAnd;
1335 sym(1).ival = QSOperator::InplaceXor;
1339 sym(1).ival = QSOperator::InplaceOr;
1343 AST::Expression *node = makeAstNode<AST::Expression> (driver->nodePool(), sym(1).Expression, sym(3).Expression);
1344 node->commaToken = loc(2);
1353 AST::Expression *node = makeAstNode<AST::Expression> (driver->nodePool(), sym(1).Expression, sym(3).Expression);
1354 node->commaToken = loc(2);
1363 AST::Block *node = makeAstNode<AST::Block> (driver->nodePool(), sym(2).StatementList);
1364 node->lbraceToken = loc(1);
1365 node->rbraceToken = loc(3);
1370 sym(1).Node = makeAstNode<AST::StatementList> (driver->nodePool(), sym(1).Statement);
1374 sym(1).Node = makeAstNode<AST::StatementList> (driver->nodePool(), sym(1).StatementList, sym(2).Statement);
1382 sym(1).Node = sym(1).StatementList->finish ();
1386 AST::VariableStatement *node = makeAstNode<AST::VariableStatement> (driver->nodePool(),
1387 sym(2).VariableDeclarationList->finish (/*readOnly=*/sym(1).ival == T_CONST));
1388 node->declarationKindToken = loc(1);
1389 node->semicolonToken = loc(3);
1394 sym(1).ival = T_CONST;
1398 sym(1).ival = T_VAR;
1402 sym(1).Node = makeAstNode<AST::VariableDeclarationList> (driver->nodePool(), sym(1).VariableDeclaration);
1406 AST::VariableDeclarationList *node = makeAstNode<AST::VariableDeclarationList> (driver->nodePool(),
1407 sym(1).VariableDeclarationList, sym(3).VariableDeclaration);
1408 node->commaToken = loc(2);
1413 sym(1).Node = makeAstNode<AST::VariableDeclarationList> (driver->nodePool(), sym(1).VariableDeclaration);
1417 sym(1).Node = makeAstNode<AST::VariableDeclarationList> (driver->nodePool(), sym(1).VariableDeclarationList, sym(3).VariableDeclaration);
1421 AST::VariableDeclaration *node = makeAstNode<AST::VariableDeclaration> (driver->nodePool(), sym(1).sval, sym(2).Expression);
1422 node->identifierToken = loc(1);
1427 AST::VariableDeclaration *node = makeAstNode<AST::VariableDeclaration> (driver->nodePool(), sym(1).sval, sym(2).Expression);
1428 node->identifierToken = loc(1);
1433 // ### TODO: AST for initializer
1442 // ### TODO: AST for initializer
1451 AST::EmptyStatement *node = makeAstNode<AST::EmptyStatement> (driver->nodePool());
1452 node->semicolonToken = loc(1);
1457 AST::ExpressionStatement *node = makeAstNode<AST::ExpressionStatement> (driver->nodePool(), sym(1).Expression);
1458 node->semicolonToken = loc(2);
1463 AST::IfStatement *node = makeAstNode<AST::IfStatement> (driver->nodePool(), sym(3).Expression, sym(5).Statement, sym(7).Statement);
1464 node->ifToken = loc(1);
1465 node->lparenToken = loc(2);
1466 node->rparenToken = loc(4);
1467 node->elseToken = loc(5);
1472 AST::IfStatement *node = makeAstNode<AST::IfStatement> (driver->nodePool(), sym(3).Expression, sym(5).Statement);
1473 node->ifToken = loc(1);
1474 node->lparenToken = loc(2);
1475 node->rparenToken = loc(4);
1480 AST::DoWhileStatement *node = makeAstNode<AST::DoWhileStatement> (driver->nodePool(), sym(2).Statement, sym(5).Expression);
1481 node->doToken = loc(1);
1482 node->whileToken = loc(3);
1483 node->lparenToken = loc(4);
1484 node->rparenToken = loc(6);
1485 node->semicolonToken = loc(7);
1490 AST::WhileStatement *node = makeAstNode<AST::WhileStatement> (driver->nodePool(), sym(3).Expression, sym(5).Statement);
1491 node->whileToken = loc(1);
1492 node->lparenToken = loc(2);
1493 node->rparenToken = loc(4);
1498 AST::ForStatement *node = makeAstNode<AST::ForStatement> (driver->nodePool(), sym(3).Expression,
1499 sym(5).Expression, sym(7).Expression, sym(9).Statement);
1500 node->forToken = loc(1);
1501 node->lparenToken = loc(2);
1502 node->firstSemicolonToken = loc(4);
1503 node->secondSemicolonToken = loc(6);
1504 node->rparenToken = loc(8);
1509 AST::LocalForStatement *node = makeAstNode<AST::LocalForStatement> (driver->nodePool(),
1510 sym(4).VariableDeclarationList->finish (/*readOnly=*/false), sym(6).Expression,
1511 sym(8).Expression, sym(10).Statement);
1512 node->forToken = loc(1);
1513 node->lparenToken = loc(2);
1514 node->varToken = loc(3);
1515 node->firstSemicolonToken = loc(5);
1516 node->secondSemicolonToken = loc(7);
1517 node->rparenToken = loc(9);
1522 AST:: ForEachStatement *node = makeAstNode<AST::ForEachStatement> (driver->nodePool(), sym(3).Expression,
1523 sym(5).Expression, sym(7).Statement);
1524 node->forToken = loc(1);
1525 node->lparenToken = loc(2);
1526 node->inToken = loc(4);
1527 node->rparenToken = loc(6);
1532 AST::LocalForEachStatement *node = makeAstNode<AST::LocalForEachStatement> (driver->nodePool(),
1533 sym(4).VariableDeclaration, sym(6).Expression, sym(8).Statement);
1534 node->forToken = loc(1);
1535 node->lparenToken = loc(2);
1536 node->varToken = loc(3);
1537 node->inToken = loc(5);
1538 node->rparenToken = loc(7);
1543 AST::ContinueStatement *node = makeAstNode<AST::ContinueStatement> (driver->nodePool());
1544 node->continueToken = loc(1);
1545 node->semicolonToken = loc(2);
1550 AST::ContinueStatement *node = makeAstNode<AST::ContinueStatement> (driver->nodePool(), sym(2).sval);
1551 node->continueToken = loc(1);
1552 node->identifierToken = loc(2);
1553 node->semicolonToken = loc(3);
1558 AST::BreakStatement *node = makeAstNode<AST::BreakStatement> (driver->nodePool());
1559 node->breakToken = loc(1);
1560 node->semicolonToken = loc(2);
1565 AST::BreakStatement *node = makeAstNode<AST::BreakStatement> (driver->nodePool(), sym(2).sval);
1566 node->breakToken = loc(1);
1567 node->identifierToken = loc(2);
1568 node->semicolonToken = loc(3);
1573 AST::ReturnStatement *node = makeAstNode<AST::ReturnStatement> (driver->nodePool(), sym(2).Expression);
1574 node->returnToken = loc(1);
1575 node->semicolonToken = loc(3);
1580 AST::WithStatement *node = makeAstNode<AST::WithStatement> (driver->nodePool(), sym(3).Expression, sym(5).Statement);
1581 node->withToken = loc(1);
1582 node->lparenToken = loc(2);
1583 node->rparenToken = loc(4);
1588 AST::SwitchStatement *node = makeAstNode<AST::SwitchStatement> (driver->nodePool(), sym(3).Expression, sym(5).CaseBlock);
1589 node->switchToken = loc(1);
1590 node->lparenToken = loc(2);
1591 node->rparenToken = loc(4);
1596 AST::CaseBlock *node = makeAstNode<AST::CaseBlock> (driver->nodePool(), sym(2).CaseClauses);
1597 node->lbraceToken = loc(1);
1598 node->rbraceToken = loc(3);
1603 AST::CaseBlock *node = makeAstNode<AST::CaseBlock> (driver->nodePool(), sym(2).CaseClauses, sym(3).DefaultClause, sym(4).CaseClauses);
1604 node->lbraceToken = loc(1);
1605 node->rbraceToken = loc(5);
1610 sym(1).Node = makeAstNode<AST::CaseClauses> (driver->nodePool(), sym(1).CaseClause);
1614 sym(1).Node = makeAstNode<AST::CaseClauses> (driver->nodePool(), sym(1).CaseClauses, sym(2).CaseClause);
1622 sym(1).Node = sym(1).CaseClauses->finish ();
1626 AST::CaseClause *node = makeAstNode<AST::CaseClause> (driver->nodePool(), sym(2).Expression, sym(4).StatementList);
1627 node->caseToken = loc(1);
1628 node->colonToken = loc(3);
1633 AST::DefaultClause *node = makeAstNode<AST::DefaultClause> (driver->nodePool(), sym(3).StatementList);
1634 node->defaultToken = loc(1);
1635 node->colonToken = loc(2);
1640 AST::LabelledStatement *node = makeAstNode<AST::LabelledStatement> (driver->nodePool(), driver->intern(lexer->characterBuffer(), lexer->characterCount()), sym(3).Statement);
1641 node->identifierToken = loc(1);
1642 node->colonToken = loc(2);
1647 AST::LabelledStatement *node = makeAstNode<AST::LabelledStatement> (driver->nodePool(), sym(1).sval, sym(3).Statement);
1648 node->identifierToken = loc(1);
1649 node->colonToken = loc(2);
1654 AST::ThrowStatement *node = makeAstNode<AST::ThrowStatement> (driver->nodePool(), sym(2).Expression);
1655 node->throwToken = loc(1);
1656 node->semicolonToken = loc(3);
1661 AST::TryStatement *node = makeAstNode<AST::TryStatement> (driver->nodePool(), sym(2).Statement, sym(3).Catch);
1662 node->tryToken = loc(1);
1667 AST::TryStatement *node = makeAstNode<AST::TryStatement> (driver->nodePool(), sym(2).Statement, sym(3).Finally);
1668 node->tryToken = loc(1);
1673 AST::TryStatement *node = makeAstNode<AST::TryStatement> (driver->nodePool(), sym(2).Statement, sym(3).Catch, sym(4).Finally);
1674 node->tryToken = loc(1);
1679 AST::Catch *node = makeAstNode<AST::Catch> (driver->nodePool(), sym(3).sval, sym(5).Block);
1680 node->catchToken = loc(1);
1681 node->lparenToken = loc(2);
1682 node->identifierToken = loc(3);
1683 node->rparenToken = loc(4);
1688 AST::Finally *node = makeAstNode<AST::Finally> (driver->nodePool(), sym(2).Block);
1689 node->finallyToken = loc(1);
1694 AST::DebuggerStatement *node = makeAstNode<AST::DebuggerStatement> (driver->nodePool());
1695 node->debuggerToken = loc(1);
1696 node->semicolonToken = loc(2);
1701 AST::FunctionDeclaration *node = makeAstNode<AST::FunctionDeclaration> (driver->nodePool(), sym(2).sval, sym(4).FormalParameterList, sym(7).FunctionBody);
1702 node->functionToken = loc(1);
1703 node->identifierToken = loc(2);
1704 node->lparenToken = loc(3);
1705 node->rparenToken = loc(5);
1706 node->lbraceToken = loc(6);
1707 node->rbraceToken = loc(8);
1712 AST::FunctionExpression *node = makeAstNode<AST::FunctionExpression> (driver->nodePool(), sym(2).sval, sym(4).FormalParameterList, sym(7).FunctionBody);
1713 node->functionToken = loc(1);
1715 node->identifierToken = loc(2);
1716 node->lparenToken = loc(3);
1717 node->rparenToken = loc(5);
1718 node->lbraceToken = loc(6);
1719 node->rbraceToken = loc(8);
1724 AST::FormalParameterList *node = makeAstNode<AST::FormalParameterList> (driver->nodePool(), sym(1).sval);
1725 node->identifierToken = loc(1);
1730 AST::FormalParameterList *node = makeAstNode<AST::FormalParameterList> (driver->nodePool(), sym(1).FormalParameterList, sym(3).sval);
1731 node->commaToken = loc(2);
1732 node->identifierToken = loc(3);
1741 sym(1).Node = sym(1).FormalParameterList->finish ();
1749 sym(1).Node = makeAstNode<AST::FunctionBody> (driver->nodePool(), sym(1).SourceElements->finish ());
1753 sym(1).Node = makeAstNode<AST::Program> (driver->nodePool(), sym(1).SourceElements->finish ());
1757 sym(1).Node = makeAstNode<AST::SourceElements> (driver->nodePool(), sym(1).SourceElement);
1761 sym(1).Node = makeAstNode<AST::SourceElements> (driver->nodePool(), sym(1).SourceElements, sym(2).SourceElement);
1765 sym(1).Node = makeAstNode<AST::StatementSourceElement> (driver->nodePool(), sym(1).Statement);
1769 sym(1).Node = makeAstNode<AST::FunctionSourceElement> (driver->nodePool(), sym(1).FunctionDeclaration);
1781 action = nt_action(state_stack[tos], lhs[r] - TERMINAL_COUNT);
1783 } while (action != 0);
1785 if (first_token == last_token) {
1786 const int errorState = state_stack[tos];
1788 // automatic insertion of `;'
1789 if (yytoken != -1 && t_action(errorState, T_AUTOMATIC_SEMICOLON) && automatic(driver, yytoken)) {
1790 SavedToken &tk = token_buffer[0];
1795 yylloc = yyprevlloc;
1796 yylloc.offset += yylloc.length;
1797 yylloc.startColumn += yylloc.length;
1800 //const QString msg = qApp->translate("QDeclarativeParser", "Missing `;'");
1801 //diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Warning, yylloc, msg));
1803 first_token = &token_buffer[0];
1804 last_token = &token_buffer[1];
1806 yytoken = T_SEMICOLON;
1809 action = errorState;
1816 token_buffer[0].token = yytoken;
1817 token_buffer[0].dval = yylval;
1818 token_buffer[0].loc = yylloc;
1820 token_buffer[1].token = yytoken = lexer->lex();
1821 token_buffer[1].dval = yylval = lexer->dval();
1822 token_buffer[1].loc = yylloc = location(lexer);
1824 if (t_action(errorState, yytoken)) {
1826 int token = token_buffer[0].token;
1827 if (token < 0 || token >= TERMINAL_COUNT)
1828 msg = qApp->translate("QDeclarativeParser", "Syntax error");
1830 msg = qApp->translate("QDeclarativeParser", "Unexpected token `%1'").arg(QLatin1String(spell[token]));
1831 diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, token_buffer[0].loc, msg));
1833 action = errorState;
1837 static int tokens[] = {
1845 T_RPAREN, T_RBRACKET, T_RBRACE,
1850 T_LPAREN, T_LBRACKET, T_LBRACE,
1855 for (int *tk = tokens; *tk != EOF_SYMBOL; ++tk) {
1856 int a = t_action(errorState, *tk);
1857 if (a > 0 && t_action(a, yytoken)) {
1858 const QString msg = qApp->translate("QDeclarativeParser", "Expected token `%1'").arg(QLatin1String(spell[*tk]));
1859 diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, token_buffer[0].loc, msg));
1863 yylloc = token_buffer[0].loc;
1866 first_token = &token_buffer[0];
1867 last_token = &token_buffer[2];
1869 action = errorState;
1874 for (int tk = 1; tk < TERMINAL_COUNT; ++tk) {
1875 if (tk == T_AUTOMATIC_SEMICOLON || tk == T_FEED_UI_PROGRAM ||
1876 tk == T_FEED_JS_STATEMENT || tk == T_FEED_JS_EXPRESSION ||
1877 tk == T_FEED_JS_SOURCE_ELEMENT)
1880 int a = t_action(errorState, tk);
1881 if (a > 0 && t_action(a, yytoken)) {
1882 const QString msg = qApp->translate("QDeclarativeParser", "Expected token `%1'").arg(QLatin1String(spell[tk]));
1883 diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, token_buffer[0].loc, msg));
1887 yylloc = token_buffer[0].loc;
1890 action = errorState;
1895 const QString msg = qApp->translate("QDeclarativeParser", "Syntax error");
1896 diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, token_buffer[0].loc, msg));
1902 QT_QML_END_NAMESPACE