1 // This file was generated by qlalr - DO NOT EDIT!
3 /****************************************************************************
5 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
6 ** All rights reserved.
7 ** Contact: Nokia Corporation (qt-info@nokia.com)
9 ** This file is part of the QtScript module of the Qt Toolkit.
11 ** $QT_BEGIN_LICENSE:LGPL$
12 ** No Commercial Usage
13 ** This file contains pre-release code and may not be distributed.
14 ** You may use this file in accordance with the terms and conditions
15 ** contained in the Technology Preview License Agreement accompanying
18 ** GNU Lesser General Public License Usage
19 ** Alternatively, this file may be used under the terms of the GNU Lesser
20 ** General Public License version 2.1 as published by the Free Software
21 ** Foundation and appearing in the file LICENSE.LGPL included in the
22 ** packaging of this file. Please review the following information to
23 ** ensure the GNU Lesser General Public License version 2.1 requirements
24 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
26 ** In addition, as a special exception, Nokia gives you certain additional
27 ** rights. These rights are described in the Nokia Qt LGPL Exception
28 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
30 ** If you have questions regarding the use of this file, please contact
31 ** Nokia at qt-info@nokia.com.
42 ****************************************************************************/
44 #include <QtCore/QtDebug>
48 #include "qscriptast_p.h"
50 #define Q_SCRIPT_UPDATE_POSITION(node, startloc, endloc) do { \
51 node->startLine = startloc.startLine; \
52 node->startColumn = startloc.startColumn; \
53 node->endLine = endloc.endLine; \
54 node->endColumn = endloc.endColumn; \
59 #include "qscriptparser_p.h"
62 // This file is automatically generated from qscript.g.
63 // Changes will be lost.
68 inline static bool automatic(QScriptEnginePrivate
*driver
, int token
)
70 return token
== QScriptGrammar::T_RBRACE
72 || driver
->lexer()->prevTerminator();
76 QScriptParser::QScriptParser():
85 QScriptParser::~QScriptParser()
90 qFree(location_stack
);
94 static inline QScriptParser::Location
location(QScript::Lexer
*lexer
)
96 QScriptParser::Location loc
;
97 loc
.startLine
= lexer
->startLineNo();
98 loc
.startColumn
= lexer
->startColumnNo();
99 loc
.endLine
= lexer
->endLineNo();
100 loc
.endColumn
= lexer
->endColumnNo();
104 bool QScriptParser::parse(QScriptEnginePrivate
*driver
)
106 const int INITIAL_STATE
= 0;
107 QScript::Lexer
*lexer
= driver
->lexer();
110 int saved_yytoken
= -1;
115 state_stack
[++tos
] = INITIAL_STATE
;
119 const int state
= state_stack
[tos
];
120 if (yytoken
== -1 && - TERMINAL_COUNT
!= action_index
[state
])
122 if (saved_yytoken
== -1)
124 yytoken
= lexer
->lex();
125 location_stack
[tos
] = location(lexer
);
129 yytoken
= saved_yytoken
;
134 int act
= t_action (state
, yytoken
);
136 if (act
== ACCEPT_STATE
)
141 if (++tos
== stack_size
)
144 sym_stack
[tos
].dval
= lexer
->dval ();
145 state_stack
[tos
] = act
;
146 location_stack
[tos
] = location(lexer
);
155 act
= state_stack
[tos
++];
160 sym(1).Node
= QScript::makeAstNode
<QScript::AST::ThisExpression
> (driver
->nodePool());
161 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(1));
165 sym(1).Node
= QScript::makeAstNode
<QScript::AST::IdentifierExpression
> (driver
->nodePool(), sym(1).sval
);
166 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(1));
170 sym(1).Node
= QScript::makeAstNode
<QScript::AST::NullExpression
> (driver
->nodePool());
171 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(1));
175 sym(1).Node
= QScript::makeAstNode
<QScript::AST::TrueLiteral
> (driver
->nodePool());
176 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(1));
180 sym(1).Node
= QScript::makeAstNode
<QScript::AST::FalseLiteral
> (driver
->nodePool());
181 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(1));
185 sym(1).Node
= QScript::makeAstNode
<QScript::AST::NumericLiteral
> (driver
->nodePool(), sym(1).dval
);
186 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(1));
190 sym(1).Node
= QScript::makeAstNode
<QScript::AST::StringLiteral
> (driver
->nodePool(), sym(1).sval
);
191 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(1));
195 bool rx
= lexer
->scanRegExp(QScript::Lexer::NoPrefix
);
197 error_message
= lexer
->errorMessage();
198 error_lineno
= lexer
->startLineNo();
199 error_column
= lexer
->startColumnNo();
202 sym(1).Node
= QScript::makeAstNode
<QScript::AST::RegExpLiteral
> (driver
->nodePool(), lexer
->pattern
, lexer
->flags
);
203 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(1));
207 bool rx
= lexer
->scanRegExp(QScript::Lexer::EqualPrefix
);
209 error_message
= lexer
->errorMessage();
210 error_lineno
= lexer
->startLineNo();
211 error_column
= lexer
->startColumnNo();
214 sym(1).Node
= QScript::makeAstNode
<QScript::AST::RegExpLiteral
> (driver
->nodePool(), lexer
->pattern
, lexer
->flags
);
215 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(1));
219 sym(1).Node
= QScript::makeAstNode
<QScript::AST::ArrayLiteral
> (driver
->nodePool(), sym(2).Elision
);
220 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
224 sym(1).Node
= QScript::makeAstNode
<QScript::AST::ArrayLiteral
> (driver
->nodePool(), sym(2).ElementList
->finish ());
225 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
229 sym(1).Node
= QScript::makeAstNode
<QScript::AST::ArrayLiteral
> (driver
->nodePool(), sym(2).ElementList
->finish (), sym(4).Elision
);
230 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(5));
235 sym(1).Node
= QScript::makeAstNode
<QScript::AST::ObjectLiteral
> (driver
->nodePool(), sym(2).PropertyNameAndValueList
->finish ());
237 sym(1).Node
= QScript::makeAstNode
<QScript::AST::ObjectLiteral
> (driver
->nodePool());
238 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
242 sym(1).Node
= QScript::makeAstNode
<QScript::AST::ObjectLiteral
> (driver
->nodePool(), sym(2).PropertyNameAndValueList
->finish ());
243 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(4));
248 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
252 sym(1).Node
= QScript::makeAstNode
<QScript::AST::ElementList
> (driver
->nodePool(), sym(1).Elision
, sym(2).Expression
);
253 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(2));
257 sym(1).Node
= QScript::makeAstNode
<QScript::AST::ElementList
> (driver
->nodePool(), sym(1).ElementList
, sym(3).Elision
, sym(4).Expression
);
258 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(4));
262 sym(1).Node
= QScript::makeAstNode
<QScript::AST::Elision
> (driver
->nodePool());
263 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(1));
267 sym(1).Node
= QScript::makeAstNode
<QScript::AST::Elision
> (driver
->nodePool(), sym(1).Elision
);
268 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(2));
276 sym(1).Elision
= sym(1).Elision
->finish ();
277 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(1));
281 sym(1).Node
= QScript::makeAstNode
<QScript::AST::PropertyNameAndValueList
> (driver
->nodePool(), sym(1).PropertyName
, sym(3).Expression
);
282 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
286 sym(1).Node
= QScript::makeAstNode
<QScript::AST::PropertyNameAndValueList
> (driver
->nodePool(), sym(1).PropertyNameAndValueList
, sym(3).PropertyName
, sym(5).Expression
);
287 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(5));
291 sym(1).Node
= QScript::makeAstNode
<QScript::AST::IdentifierPropertyName
> (driver
->nodePool(), sym(1).sval
);
292 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(1));
296 sym(1).Node
= QScript::makeAstNode
<QScript::AST::StringLiteralPropertyName
> (driver
->nodePool(), sym(1).sval
);
297 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(1));
301 sym(1).Node
= QScript::makeAstNode
<QScript::AST::NumericLiteralPropertyName
> (driver
->nodePool(), sym(1).dval
);
302 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(1));
306 sym(1).Node
= QScript::makeAstNode
<QScript::AST::IdentifierPropertyName
> (driver
->nodePool(), sym(1).sval
);
307 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(1));
372 sym(1).sval
= driver
->intern(lexer
->characterBuffer(), lexer
->characterCount());
376 sym(1).Node
= QScript::makeAstNode
<QScript::AST::ArrayMemberExpression
> (driver
->nodePool(), sym(1).Expression
, sym(3).Expression
);
377 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(4));
381 sym(1).Node
= QScript::makeAstNode
<QScript::AST::FieldMemberExpression
> (driver
->nodePool(), sym(1).Expression
, sym(3).sval
);
382 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(4));
386 sym(1).Node
= QScript::makeAstNode
<QScript::AST::NewMemberExpression
> (driver
->nodePool(), sym(2).Expression
, sym(3).ArgumentList
);
387 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
391 sym(1).Node
= QScript::makeAstNode
<QScript::AST::NewExpression
> (driver
->nodePool(), sym(2).Expression
);
392 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(2));
396 sym(1).Node
= QScript::makeAstNode
<QScript::AST::CallExpression
> (driver
->nodePool(), sym(1).Expression
, sym(2).ArgumentList
);
397 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(2));
401 sym(1).Node
= QScript::makeAstNode
<QScript::AST::CallExpression
> (driver
->nodePool(), sym(1).Expression
, sym(2).ArgumentList
);
402 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(2));
406 sym(1).Node
= QScript::makeAstNode
<QScript::AST::ArrayMemberExpression
> (driver
->nodePool(), sym(1).Expression
, sym(3).Expression
);
407 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(4));
411 sym(1).Node
= QScript::makeAstNode
<QScript::AST::FieldMemberExpression
> (driver
->nodePool(), sym(1).Expression
, sym(3).sval
);
412 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
420 sym(1).Node
= sym(2).ArgumentList
->finish ();
421 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
425 sym(1).Node
= QScript::makeAstNode
<QScript::AST::ArgumentList
> (driver
->nodePool(), sym(1).Expression
);
426 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(1));
430 sym(1).Node
= QScript::makeAstNode
<QScript::AST::ArgumentList
> (driver
->nodePool(), sym(1).ArgumentList
, sym(3).Expression
);
431 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
435 sym(1).Node
= QScript::makeAstNode
<QScript::AST::PostIncrementExpression
> (driver
->nodePool(), sym(1).Expression
);
436 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(2));
440 sym(1).Node
= QScript::makeAstNode
<QScript::AST::PostDecrementExpression
> (driver
->nodePool(), sym(1).Expression
);
441 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(2));
445 sym(1).Node
= QScript::makeAstNode
<QScript::AST::DeleteExpression
> (driver
->nodePool(), sym(2).Expression
);
446 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(2));
450 sym(1).Node
= QScript::makeAstNode
<QScript::AST::VoidExpression
> (driver
->nodePool(), sym(2).Expression
);
451 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(2));
455 sym(1).Node
= QScript::makeAstNode
<QScript::AST::TypeOfExpression
> (driver
->nodePool(), sym(2).Expression
);
456 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(2));
460 sym(1).Node
= QScript::makeAstNode
<QScript::AST::PreIncrementExpression
> (driver
->nodePool(), sym(2).Expression
);
461 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(2));
465 sym(1).Node
= QScript::makeAstNode
<QScript::AST::PreDecrementExpression
> (driver
->nodePool(), sym(2).Expression
);
466 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(2));
470 sym(1).Node
= QScript::makeAstNode
<QScript::AST::UnaryPlusExpression
> (driver
->nodePool(), sym(2).Expression
);
471 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(2));
475 sym(1).Node
= QScript::makeAstNode
<QScript::AST::UnaryMinusExpression
> (driver
->nodePool(), sym(2).Expression
);
476 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(2));
480 sym(1).Node
= QScript::makeAstNode
<QScript::AST::TildeExpression
> (driver
->nodePool(), sym(2).Expression
);
481 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(2));
485 sym(1).Node
= QScript::makeAstNode
<QScript::AST::NotExpression
> (driver
->nodePool(), sym(2).Expression
);
486 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(2));
490 sym(1).Node
= QScript::makeAstNode
<QScript::AST::BinaryExpression
> (driver
->nodePool(), sym(1).Expression
, QSOperator::Mul
, sym(3).Expression
);
491 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
495 sym(1).Node
= QScript::makeAstNode
<QScript::AST::BinaryExpression
> (driver
->nodePool(), sym(1).Expression
, QSOperator::Div
, sym(3).Expression
);
496 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
500 sym(1).Node
= QScript::makeAstNode
<QScript::AST::BinaryExpression
> (driver
->nodePool(), sym(1).Expression
, QSOperator::Mod
, sym(3).Expression
);
501 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
505 sym(1).Node
= QScript::makeAstNode
<QScript::AST::BinaryExpression
> (driver
->nodePool(), sym(1).Expression
, QSOperator::Add
, sym(3).Expression
);
506 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
510 sym(1).Node
= QScript::makeAstNode
<QScript::AST::BinaryExpression
> (driver
->nodePool(), sym(1).Expression
, QSOperator::Sub
, sym(3).Expression
);
511 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
515 sym(1).Node
= QScript::makeAstNode
<QScript::AST::BinaryExpression
> (driver
->nodePool(), sym(1).Expression
, QSOperator::LShift
, sym(3).Expression
);
516 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
520 sym(1).Node
= QScript::makeAstNode
<QScript::AST::BinaryExpression
> (driver
->nodePool(), sym(1).Expression
, QSOperator::RShift
, sym(3).Expression
);
521 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
525 sym(1).Node
= QScript::makeAstNode
<QScript::AST::BinaryExpression
> (driver
->nodePool(), sym(1).Expression
, QSOperator::URShift
, sym(3).Expression
);
526 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
530 sym(1).Node
= QScript::makeAstNode
<QScript::AST::BinaryExpression
> (driver
->nodePool(), sym(1).Expression
, QSOperator::Lt
, sym(3).Expression
);
531 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
535 sym(1).Node
= QScript::makeAstNode
<QScript::AST::BinaryExpression
> (driver
->nodePool(), sym(1).Expression
, QSOperator::Gt
, sym(3).Expression
);
536 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
540 sym(1).Node
= QScript::makeAstNode
<QScript::AST::BinaryExpression
> (driver
->nodePool(), sym(1).Expression
, QSOperator::Le
, sym(3).Expression
);
541 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
545 sym(1).Node
= QScript::makeAstNode
<QScript::AST::BinaryExpression
> (driver
->nodePool(), sym(1).Expression
, QSOperator::Ge
, sym(3).Expression
);
546 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
550 sym(1).Node
= QScript::makeAstNode
<QScript::AST::BinaryExpression
> (driver
->nodePool(), sym(1).Expression
, QSOperator::InstanceOf
, sym(3).Expression
);
551 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
555 sym(1).Node
= QScript::makeAstNode
<QScript::AST::BinaryExpression
> (driver
->nodePool(), sym(1).Expression
, QSOperator::In
, sym(3).Expression
);
556 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
560 sym(1).Node
= QScript::makeAstNode
<QScript::AST::BinaryExpression
> (driver
->nodePool(), sym(1).Expression
, QSOperator::Lt
, sym(3).Expression
);
561 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
565 sym(1).Node
= QScript::makeAstNode
<QScript::AST::BinaryExpression
> (driver
->nodePool(), sym(1).Expression
, QSOperator::Gt
, sym(3).Expression
);
566 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
570 sym(1).Node
= QScript::makeAstNode
<QScript::AST::BinaryExpression
> (driver
->nodePool(), sym(1).Expression
, QSOperator::Le
, sym(3).Expression
);
571 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
575 sym(1).Node
= QScript::makeAstNode
<QScript::AST::BinaryExpression
> (driver
->nodePool(), sym(1).Expression
, QSOperator::Ge
, sym(3).Expression
);
576 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
580 sym(1).Node
= QScript::makeAstNode
<QScript::AST::BinaryExpression
> (driver
->nodePool(), sym(1).Expression
, QSOperator::InstanceOf
, sym(3).Expression
);
581 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
585 sym(1).Node
= QScript::makeAstNode
<QScript::AST::BinaryExpression
> (driver
->nodePool(), sym(1).Expression
, QSOperator::Equal
, sym(3).Expression
);
586 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
590 sym(1).Node
= QScript::makeAstNode
<QScript::AST::BinaryExpression
> (driver
->nodePool(), sym(1).Expression
, QSOperator::NotEqual
, sym(3).Expression
);
591 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
595 sym(1).Node
= QScript::makeAstNode
<QScript::AST::BinaryExpression
> (driver
->nodePool(), sym(1).Expression
, QSOperator::StrictEqual
, sym(3).Expression
);
596 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
600 sym(1).Node
= QScript::makeAstNode
<QScript::AST::BinaryExpression
> (driver
->nodePool(), sym(1).Expression
, QSOperator::StrictNotEqual
, sym(3).Expression
);
601 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
605 sym(1).Node
= QScript::makeAstNode
<QScript::AST::BinaryExpression
> (driver
->nodePool(), sym(1).Expression
, QSOperator::Equal
, sym(3).Expression
);
606 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
610 sym(1).Node
= QScript::makeAstNode
<QScript::AST::BinaryExpression
> (driver
->nodePool(), sym(1).Expression
, QSOperator::NotEqual
, sym(3).Expression
);
611 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
615 sym(1).Node
= QScript::makeAstNode
<QScript::AST::BinaryExpression
> (driver
->nodePool(), sym(1).Expression
, QSOperator::StrictEqual
, sym(3).Expression
);
616 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
620 sym(1).Node
= QScript::makeAstNode
<QScript::AST::BinaryExpression
> (driver
->nodePool(), sym(1).Expression
, QSOperator::StrictNotEqual
, sym(3).Expression
);
621 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
625 sym(1).Node
= QScript::makeAstNode
<QScript::AST::BinaryExpression
> (driver
->nodePool(), sym(1).Expression
, QSOperator::BitAnd
, sym(3).Expression
);
626 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
630 sym(1).Node
= QScript::makeAstNode
<QScript::AST::BinaryExpression
> (driver
->nodePool(), sym(1).Expression
, QSOperator::BitAnd
, sym(3).Expression
);
631 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
635 sym(1).Node
= QScript::makeAstNode
<QScript::AST::BinaryExpression
> (driver
->nodePool(), sym(1).Expression
, QSOperator::BitXor
, sym(3).Expression
);
636 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
640 sym(1).Node
= QScript::makeAstNode
<QScript::AST::BinaryExpression
> (driver
->nodePool(), sym(1).Expression
, QSOperator::BitXor
, sym(3).Expression
);
641 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
645 sym(1).Node
= QScript::makeAstNode
<QScript::AST::BinaryExpression
> (driver
->nodePool(), sym(1).Expression
, QSOperator::BitOr
, sym(3).Expression
);
646 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
650 sym(1).Node
= QScript::makeAstNode
<QScript::AST::BinaryExpression
> (driver
->nodePool(), sym(1).Expression
, QSOperator::BitOr
, sym(3).Expression
);
651 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
655 sym(1).Node
= QScript::makeAstNode
<QScript::AST::BinaryExpression
> (driver
->nodePool(), sym(1).Expression
, QSOperator::And
, sym(3).Expression
);
656 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
660 sym(1).Node
= QScript::makeAstNode
<QScript::AST::BinaryExpression
> (driver
->nodePool(), sym(1).Expression
, QSOperator::And
, sym(3).Expression
);
661 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
665 sym(1).Node
= QScript::makeAstNode
<QScript::AST::BinaryExpression
> (driver
->nodePool(), sym(1).Expression
, QSOperator::Or
, sym(3).Expression
);
666 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
670 sym(1).Node
= QScript::makeAstNode
<QScript::AST::BinaryExpression
> (driver
->nodePool(), sym(1).Expression
, QSOperator::Or
, sym(3).Expression
);
671 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
675 sym(1).Node
= QScript::makeAstNode
<QScript::AST::ConditionalExpression
> (driver
->nodePool(), sym(1).Expression
, sym(3).Expression
, sym(5).Expression
);
676 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
680 sym(1).Node
= QScript::makeAstNode
<QScript::AST::ConditionalExpression
> (driver
->nodePool(), sym(1).Expression
, sym(3).Expression
, sym(5).Expression
);
681 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
685 sym(1).Node
= QScript::makeAstNode
<QScript::AST::BinaryExpression
> (driver
->nodePool(), sym(1).Expression
, sym(2).ival
, sym(3).Expression
);
686 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
690 sym(1).Node
= QScript::makeAstNode
<QScript::AST::BinaryExpression
> (driver
->nodePool(), sym(1).Expression
, sym(2).ival
, sym(3).Expression
);
691 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
695 sym(1).ival
= QSOperator::Assign
;
699 sym(1).ival
= QSOperator::InplaceMul
;
703 sym(1).ival
= QSOperator::InplaceDiv
;
707 sym(1).ival
= QSOperator::InplaceMod
;
711 sym(1).ival
= QSOperator::InplaceAdd
;
715 sym(1).ival
= QSOperator::InplaceSub
;
719 sym(1).ival
= QSOperator::InplaceLeftShift
;
723 sym(1).ival
= QSOperator::InplaceRightShift
;
727 sym(1).ival
= QSOperator::InplaceURightShift
;
731 sym(1).ival
= QSOperator::InplaceAnd
;
735 sym(1).ival
= QSOperator::InplaceXor
;
739 sym(1).ival
= QSOperator::InplaceOr
;
743 sym(1).Node
= QScript::makeAstNode
<QScript::AST::Expression
> (driver
->nodePool(), sym(1).Expression
, sym(3).Expression
);
744 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
752 sym(1).Node
= QScript::makeAstNode
<QScript::AST::Expression
> (driver
->nodePool(), sym(1).Expression
, sym(3).Expression
);
753 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
761 sym(1).Node
= QScript::makeAstNode
<QScript::AST::Block
> (driver
->nodePool(), sym(2).StatementList
);
762 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
766 sym(1).Node
= QScript::makeAstNode
<QScript::AST::StatementList
> (driver
->nodePool(), sym(1).Statement
);
767 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(1));
771 sym(1).Node
= QScript::makeAstNode
<QScript::AST::StatementList
> (driver
->nodePool(), sym(1).StatementList
, sym(2).Statement
);
772 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(2));
780 sym(1).Node
= sym(1).StatementList
->finish ();
784 sym(1).Node
= QScript::makeAstNode
<QScript::AST::VariableStatement
> (driver
->nodePool(), sym(2).VariableDeclarationList
->finish (/*readOnly=*/sym(1).ival
== T_CONST
));
785 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
789 sym(1).ival
= T_CONST
;
797 sym(1).Node
= QScript::makeAstNode
<QScript::AST::VariableDeclarationList
> (driver
->nodePool(), sym(1).VariableDeclaration
);
798 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(1));
802 sym(1).Node
= QScript::makeAstNode
<QScript::AST::VariableDeclarationList
> (driver
->nodePool(), sym(1).VariableDeclarationList
, sym(3).VariableDeclaration
);
803 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
807 sym(1).Node
= QScript::makeAstNode
<QScript::AST::VariableDeclarationList
> (driver
->nodePool(), sym(1).VariableDeclaration
);
808 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(1));
812 sym(1).Node
= QScript::makeAstNode
<QScript::AST::VariableDeclarationList
> (driver
->nodePool(), sym(1).VariableDeclarationList
, sym(3).VariableDeclaration
);
813 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
817 sym(1).Node
= QScript::makeAstNode
<QScript::AST::VariableDeclaration
> (driver
->nodePool(), sym(1).sval
, sym(2).Expression
);
818 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(2));
822 sym(1).Node
= QScript::makeAstNode
<QScript::AST::VariableDeclaration
> (driver
->nodePool(), sym(1).sval
, sym(2).Expression
);
823 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(2));
828 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(2));
837 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(2));
845 sym(1).Node
= QScript::makeAstNode
<QScript::AST::EmptyStatement
> (driver
->nodePool());
846 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(1));
850 sym(1).Node
= QScript::makeAstNode
<QScript::AST::ExpressionStatement
> (driver
->nodePool(), sym(1).Expression
);
851 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(2));
855 sym(1).Node
= QScript::makeAstNode
<QScript::AST::IfStatement
> (driver
->nodePool(), sym(3).Expression
, sym(5).Statement
, sym(7).Statement
);
856 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(7));
860 sym(1).Node
= QScript::makeAstNode
<QScript::AST::IfStatement
> (driver
->nodePool(), sym(3).Expression
, sym(5).Statement
);
861 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(5));
865 sym(1).Node
= QScript::makeAstNode
<QScript::AST::DoWhileStatement
> (driver
->nodePool(), sym(2).Statement
, sym(5).Expression
);
866 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(7));
870 sym(1).Node
= QScript::makeAstNode
<QScript::AST::WhileStatement
> (driver
->nodePool(), sym(3).Expression
, sym(5).Statement
);
871 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(5));
875 sym(1).Node
= QScript::makeAstNode
<QScript::AST::ForStatement
> (driver
->nodePool(), sym(3).Expression
, sym(5).Expression
, sym(7).Expression
, sym(9).Statement
);
876 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(9));
880 sym(1).Node
= QScript::makeAstNode
<QScript::AST::LocalForStatement
> (driver
->nodePool(), sym(4).VariableDeclarationList
->finish (/*readOnly=*/false), sym(6).Expression
, sym(8).Expression
, sym(10).Statement
);
881 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(10));
885 sym(1).Node
= QScript::makeAstNode
<QScript::AST::ForEachStatement
> (driver
->nodePool(), sym(3).Expression
, sym(5).Expression
, sym(7).Statement
);
886 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(7));
890 sym(1).Node
= QScript::makeAstNode
<QScript::AST::LocalForEachStatement
> (driver
->nodePool(), sym(4).VariableDeclaration
, sym(6).Expression
, sym(8).Statement
);
891 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(8));
895 sym(1).Node
= QScript::makeAstNode
<QScript::AST::ContinueStatement
> (driver
->nodePool());
896 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(2));
900 sym(1).Node
= QScript::makeAstNode
<QScript::AST::ContinueStatement
> (driver
->nodePool(), sym(2).sval
);
901 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
905 sym(1).Node
= QScript::makeAstNode
<QScript::AST::BreakStatement
> (driver
->nodePool());
906 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(2));
910 sym(1).Node
= QScript::makeAstNode
<QScript::AST::BreakStatement
> (driver
->nodePool(), sym(2).sval
);
911 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
915 sym(1).Node
= QScript::makeAstNode
<QScript::AST::ReturnStatement
> (driver
->nodePool(), sym(2).Expression
);
916 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
920 sym(1).Node
= QScript::makeAstNode
<QScript::AST::WithStatement
> (driver
->nodePool(), sym(3).Expression
, sym(5).Statement
);
921 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(5));
925 sym(1).Node
= QScript::makeAstNode
<QScript::AST::SwitchStatement
> (driver
->nodePool(), sym(3).Expression
, sym(5).CaseBlock
);
926 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(5));
930 sym(1).Node
= QScript::makeAstNode
<QScript::AST::CaseBlock
> (driver
->nodePool(), sym(2).CaseClauses
);
931 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
935 sym(1).Node
= QScript::makeAstNode
<QScript::AST::CaseBlock
> (driver
->nodePool(), sym(2).CaseClauses
, sym(3).DefaultClause
, sym(4).CaseClauses
);
936 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(5));
940 sym(1).Node
= QScript::makeAstNode
<QScript::AST::CaseClauses
> (driver
->nodePool(), sym(1).CaseClause
);
941 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(1));
945 sym(1).Node
= QScript::makeAstNode
<QScript::AST::CaseClauses
> (driver
->nodePool(), sym(1).CaseClauses
, sym(2).CaseClause
);
946 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(2));
954 sym(1).Node
= sym(1).CaseClauses
->finish ();
955 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(1));
959 sym(1).Node
= QScript::makeAstNode
<QScript::AST::CaseClause
> (driver
->nodePool(), sym(2).Expression
, sym(4).StatementList
);
960 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(4));
964 sym(1).Node
= QScript::makeAstNode
<QScript::AST::DefaultClause
> (driver
->nodePool(), sym(3).StatementList
);
965 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
969 sym(1).Node
= QScript::makeAstNode
<QScript::AST::LabelledStatement
> (driver
->nodePool(), sym(1).sval
, sym(3).Statement
);
970 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
974 sym(1).Node
= QScript::makeAstNode
<QScript::AST::ThrowStatement
> (driver
->nodePool(), sym(2).Expression
);
975 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
979 sym(1).Node
= QScript::makeAstNode
<QScript::AST::TryStatement
> (driver
->nodePool(), sym(2).Statement
, sym(3).Catch
);
980 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
984 sym(1).Node
= QScript::makeAstNode
<QScript::AST::TryStatement
> (driver
->nodePool(), sym(2).Statement
, sym(3).Finally
);
985 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
989 sym(1).Node
= QScript::makeAstNode
<QScript::AST::TryStatement
> (driver
->nodePool(), sym(2).Statement
, sym(3).Catch
, sym(4).Finally
);
990 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(4));
994 sym(1).Node
= QScript::makeAstNode
<QScript::AST::Catch
> (driver
->nodePool(), sym(3).sval
, sym(5).Statement
);
995 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(5));
999 sym(1).Node
= QScript::makeAstNode
<QScript::AST::Finally
> (driver
->nodePool(), sym(2).Statement
);
1000 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(2));
1004 sym(1).Node
= QScript::makeAstNode
<QScript::AST::DebuggerStatement
> (driver
->nodePool());
1005 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(1));
1009 sym(1).Node
= QScript::makeAstNode
<QScript::AST::FunctionDeclaration
> (driver
->nodePool(), sym(2).sval
, sym(4).FormalParameterList
, sym(7).FunctionBody
);
1010 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(8));
1014 sym(1).Node
= QScript::makeAstNode
<QScript::AST::FunctionExpression
> (driver
->nodePool(), sym(2).sval
, sym(4).FormalParameterList
, sym(7).FunctionBody
);
1015 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(8));
1019 sym(1).Node
= QScript::makeAstNode
<QScript::AST::FormalParameterList
> (driver
->nodePool(), sym(1).sval
);
1020 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(1));
1024 sym(1).Node
= QScript::makeAstNode
<QScript::AST::FormalParameterList
> (driver
->nodePool(), sym(1).FormalParameterList
, sym(3).sval
);
1025 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(3));
1033 sym(1).Node
= sym(1).FormalParameterList
->finish ();
1034 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(1));
1042 sym(1).Node
= QScript::makeAstNode
<QScript::AST::FunctionBody
> (driver
->nodePool(), sym(1).SourceElements
->finish ());
1043 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(1));
1047 sym(1).Node
= QScript::makeAstNode
<QScript::AST::Program
> (driver
->nodePool(), sym(1).SourceElements
->finish ());
1048 driver
->changeAbstractSyntaxTree(sym(1).Node
);
1049 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(1));
1053 sym(1).Node
= QScript::makeAstNode
<QScript::AST::SourceElements
> (driver
->nodePool(), sym(1).SourceElement
);
1054 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(1));
1058 sym(1).Node
= QScript::makeAstNode
<QScript::AST::SourceElements
> (driver
->nodePool(), sym(1).SourceElements
, sym(2).SourceElement
);
1059 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(2));
1063 sym(1).Node
= QScript::makeAstNode
<QScript::AST::StatementSourceElement
> (driver
->nodePool(), sym(1).Statement
);
1064 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(1));
1068 sym(1).Node
= QScript::makeAstNode
<QScript::AST::FunctionSourceElement
> (driver
->nodePool(), sym(1).FunctionDeclaration
);
1069 Q_SCRIPT_UPDATE_POSITION(sym(1).Node
, loc(1), loc(1));
1082 state_stack
[tos
] = nt_action (act
, lhs
[r
] - TERMINAL_COUNT
);
1085 location_stack
[tos
- 1].endLine
= location_stack
[tos
+ rhs
[r
] - 2].endLine
;
1086 location_stack
[tos
- 1].endColumn
= location_stack
[tos
+ rhs
[r
] - 2].endColumn
;
1087 location_stack
[tos
] = location_stack
[tos
+ rhs
[r
] - 1];
1093 if (saved_yytoken
== -1 && automatic (driver
, yytoken
) && t_action (state
, T_AUTOMATIC_SEMICOLON
) > 0)
1095 saved_yytoken
= yytoken
;
1096 yytoken
= T_SEMICOLON
;
1100 else if ((state
== INITIAL_STATE
) && (yytoken
== 0)) {
1101 // accept empty input
1102 yytoken
= T_SEMICOLON
;
1109 int expected_tokens
[3];
1110 for (int tk
= 0; tk
< TERMINAL_COUNT
; ++tk
)
1112 int k
= t_action (ers
, tk
);
1118 else if (spell
[tk
])
1121 expected_tokens
[shifts
] = tk
;
1126 error_message
.clear ();
1127 if (shifts
&& shifts
< 3)
1131 for (int s
= 0; s
< shifts
; ++s
)
1134 error_message
+= QLatin1String ("Expected ");
1136 error_message
+= QLatin1String (", ");
1139 error_message
+= QLatin1Char('`');
1140 error_message
+= QLatin1String (spell
[expected_tokens
[s
]]);
1141 error_message
+= QLatin1Char('\'');
1145 if (error_message
.isEmpty())
1146 error_message
= lexer
->errorMessage();
1148 error_lineno
= lexer
->startLineNo();
1149 error_column
= lexer
->startColumnNo();