1 /****************************************************************************
2 **
3 ** Copyright (C) 2015 The Qt Company Ltd.
4 ** Contact: http://www.qt.io/licensing/
5 **
6 ** This file is part of the QtScript module of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL-ONLY$
9 ** GNU Lesser General Public License Usage
10 ** This file may be used under the terms of the GNU Lesser
11 ** General Public License version 2.1 as published by the Free Software
12 ** Foundation and appearing in the file LICENSE.LGPL included in the
13 ** packaging of this file.  Please review the following information to
14 ** ensure the GNU Lesser General Public License version 2.1 requirements
15 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
16 **
17 ** If you have questions regarding the use of this file, please contact
18 ** us via http://www.qt.io/contact-us/.
19 **
20 ** $QT_END_LICENSE$
21 **
22 ****************************************************************************/
23 
24 // This file was generated by qlalr - DO NOT EDIT!
25 
26 
27 #include <QtCore/QtDebug>
28 
29 #include <string.h>
30 
31 #define Q_SCRIPT_UPDATE_POSITION(node, startloc, endloc) do { \
32     node->startLine = startloc.startLine; \
33     node->startColumn = startloc.startColumn; \
34     node->endLine = endloc.endLine; \
35     node->endColumn = endloc.endColumn; \
36 } while (0)
37 
38 
39 
40 #include "qscriptparser_p.h"
41 
42 //
43 // This file is automatically generated from qscript.g.
44 // Changes will be lost.
45 //
46 
47 QT_BEGIN_NAMESPACE
48 
automatic(QScriptEnginePrivate * driver,int token)49 inline static bool automatic(QScriptEnginePrivate *driver, int token)
50 {
51     return token == QScriptGrammar::T_RBRACE
52         || token == 0
53         || driver->lexer()->prevTerminator();
54 }
55 
56 
QScriptParser()57 QScriptParser::QScriptParser():
58     tos(0),
59     stack_size(0),
60     sym_stack(0),
61     state_stack(0),
62     location_stack(0)
63 {
64 }
65 
~QScriptParser()66 QScriptParser::~QScriptParser()
67 {
68     if (stack_size) {
69         qFree(sym_stack);
70         qFree(state_stack);
71         qFree(location_stack);
72     }
73 }
74 
location(QScript::Lexer * lexer)75 static inline QScriptParser::Location location(QScript::Lexer *lexer)
76 {
77     QScriptParser::Location loc;
78     loc.startLine = lexer->startLineNo();
79     loc.startColumn = lexer->startColumnNo();
80     loc.endLine = lexer->endLineNo();
81     loc.endColumn = lexer->endColumnNo();
82     return loc;
83 }
84 
parse(QScriptEnginePrivate * driver)85 bool QScriptParser::parse(QScriptEnginePrivate *driver)
86 {
87   const int INITIAL_STATE = 0;
88   QScript::Lexer *lexer = driver->lexer();
89 
90   int yytoken = -1;
91   int saved_yytoken = -1;
92 
93   reallocateStack();
94 
95   tos = 0;
96   state_stack[++tos] = INITIAL_STATE;
97 
98   while (true)
99     {
100       const int state = state_stack [tos];
101       if (yytoken == -1 && - TERMINAL_COUNT != action_index [state])
102         {
103           if (saved_yytoken == -1)
104             {
105               yytoken = lexer->lex();
106               location_stack [tos] = location(lexer);
107             }
108           else
109             {
110               yytoken = saved_yytoken;
111               saved_yytoken = -1;
112             }
113         }
114 
115       int act = t_action (state, yytoken);
116 
117       if (act == ACCEPT_STATE)
118         return true;
119 
120       else if (act > 0)
121         {
122           if (++tos == stack_size)
123             reallocateStack();
124 
125           sym_stack [tos].dval = lexer->dval ();
126           state_stack [tos] = act;
127           location_stack [tos] = location(lexer);
128           yytoken = -1;
129         }
130 
131       else if (act < 0)
132         {
133           int r = - act - 1;
134 
135           tos -= rhs [r];
136           act = state_stack [tos++];
137 
138           switch (r) {
139 
140 case 0: {
141   sym(1).Node = QScript::makeAstNode<QScript::AST::ThisExpression> (driver->nodePool());
142   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
143 } break;
144 
145 case 1: {
146   sym(1).Node = QScript::makeAstNode<QScript::AST::IdentifierExpression> (driver->nodePool(), sym(1).sval);
147   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
148 } break;
149 
150 case 2: {
151   sym(1).Node = QScript::makeAstNode<QScript::AST::NullExpression> (driver->nodePool());
152   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
153 } break;
154 
155 case 3: {
156   sym(1).Node = QScript::makeAstNode<QScript::AST::TrueLiteral> (driver->nodePool());
157   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
158 } break;
159 
160 case 4: {
161   sym(1).Node = QScript::makeAstNode<QScript::AST::FalseLiteral> (driver->nodePool());
162   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
163 } break;
164 
165 case 5: {
166   sym(1).Node = QScript::makeAstNode<QScript::AST::NumericLiteral> (driver->nodePool(), sym(1).dval);
167   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
168 } break;
169 
170 case 6: {
171   sym(1).Node = QScript::makeAstNode<QScript::AST::StringLiteral> (driver->nodePool(), sym(1).sval);
172   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
173 } break;
174 
175 case 7: {
176   bool rx = lexer->scanRegExp(QScript::Lexer::NoPrefix);
177   if (!rx) {
178       error_message = lexer->errorMessage();
179       error_lineno = lexer->startLineNo();
180       error_column = lexer->startColumnNo();
181       return false;
182   }
183   sym(1).Node = QScript::makeAstNode<QScript::AST::RegExpLiteral> (driver->nodePool(), lexer->pattern, lexer->flags);
184   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
185 } break;
186 
187 case 8: {
188   bool rx = lexer->scanRegExp(QScript::Lexer::EqualPrefix);
189   if (!rx) {
190       error_message = lexer->errorMessage();
191       error_lineno = lexer->startLineNo();
192       error_column = lexer->startColumnNo();
193       return false;
194   }
195   sym(1).Node = QScript::makeAstNode<QScript::AST::RegExpLiteral> (driver->nodePool(), lexer->pattern, lexer->flags);
196   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
197 } break;
198 
199 case 9: {
200   sym(1).Node = QScript::makeAstNode<QScript::AST::ArrayLiteral> (driver->nodePool(), sym(2).Elision);
201   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
202 } break;
203 
204 case 10: {
205   sym(1).Node = QScript::makeAstNode<QScript::AST::ArrayLiteral> (driver->nodePool(), sym(2).ElementList->finish ());
206   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
207 } break;
208 
209 case 11: {
210   sym(1).Node = QScript::makeAstNode<QScript::AST::ArrayLiteral> (driver->nodePool(), sym(2).ElementList->finish (), sym(4).Elision);
211   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5));
212 } break;
213 
214 case 12: {
215   if (sym(2).Node)
216     sym(1).Node = QScript::makeAstNode<QScript::AST::ObjectLiteral> (driver->nodePool(), sym(2).PropertyNameAndValueList->finish ());
217   else
218     sym(1).Node = QScript::makeAstNode<QScript::AST::ObjectLiteral> (driver->nodePool());
219   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
220 } break;
221 
222 case 13: {
223   sym(1).Node = QScript::makeAstNode<QScript::AST::ObjectLiteral> (driver->nodePool(), sym(2).PropertyNameAndValueList->finish ());
224   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4));
225 } break;
226 
227 case 14: {
228   sym(1) = sym(2);
229   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
230 } break;
231 
232 case 15: {
233   sym(1).Node = QScript::makeAstNode<QScript::AST::ElementList> (driver->nodePool(), sym(1).Elision, sym(2).Expression);
234   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
235 } break;
236 
237 case 16: {
238   sym(1).Node = QScript::makeAstNode<QScript::AST::ElementList> (driver->nodePool(), sym(1).ElementList, sym(3).Elision, sym(4).Expression);
239   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4));
240 } break;
241 
242 case 17: {
243   sym(1).Node = QScript::makeAstNode<QScript::AST::Elision> (driver->nodePool());
244   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
245 } break;
246 
247 case 18: {
248   sym(1).Node = QScript::makeAstNode<QScript::AST::Elision> (driver->nodePool(), sym(1).Elision);
249   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
250 } break;
251 
252 case 19: {
253   sym(1).Node = 0;
254 } break;
255 
256 case 20: {
257   sym(1).Elision = sym(1).Elision->finish ();
258   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
259 } break;
260 
261 case 21: {
262   sym(1).Node = QScript::makeAstNode<QScript::AST::PropertyNameAndValueList> (driver->nodePool(), sym(1).PropertyName, sym(3).Expression);
263   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
264 } break;
265 
266 case 22: {
267   sym(1).Node = QScript::makeAstNode<QScript::AST::PropertyNameAndValueList> (driver->nodePool(), sym(1).PropertyNameAndValueList, sym(3).PropertyName, sym(5).Expression);
268   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5));
269 } break;
270 
271 case 23: {
272   sym(1).Node = QScript::makeAstNode<QScript::AST::IdentifierPropertyName> (driver->nodePool(), sym(1).sval);
273   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
274 } break;
275 
276 case 24: {
277   sym(1).Node = QScript::makeAstNode<QScript::AST::StringLiteralPropertyName> (driver->nodePool(), sym(1).sval);
278   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
279 } break;
280 
281 case 25: {
282   sym(1).Node = QScript::makeAstNode<QScript::AST::NumericLiteralPropertyName> (driver->nodePool(), sym(1).dval);
283   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
284 } break;
285 
286 case 26: {
287   sym(1).Node = QScript::makeAstNode<QScript::AST::IdentifierPropertyName> (driver->nodePool(), sym(1).sval);
288   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
289 } break;
290 
291 case 27:
292 
293 case 28:
294 
295 case 29:
296 
297 case 30:
298 
299 case 31:
300 
301 case 32:
302 
303 case 33:
304 
305 case 34:
306 
307 case 35:
308 
309 case 36:
310 
311 case 37:
312 
313 case 38:
314 
315 case 39:
316 
317 case 40:
318 
319 case 41:
320 
321 case 42:
322 
323 case 43:
324 
325 case 44:
326 
327 case 45:
328 
329 case 46:
330 
331 case 47:
332 
333 case 48:
334 
335 case 49:
336 
337 case 50:
338 
339 case 51:
340 
341 case 52:
342 
343 case 53:
344 
345 case 54:
346 
347 case 55:
348 
349 case 56:
350 
351 case 57:
352 {
353   sym(1).sval = driver->intern(lexer->characterBuffer(), lexer->characterCount());
354 } break;
355 
356 case 62: {
357   sym(1).Node = QScript::makeAstNode<QScript::AST::ArrayMemberExpression> (driver->nodePool(), sym(1).Expression, sym(3).Expression);
358   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4));
359 } break;
360 
361 case 63: {
362   sym(1).Node = QScript::makeAstNode<QScript::AST::FieldMemberExpression> (driver->nodePool(), sym(1).Expression, sym(3).sval);
363   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4));
364 } break;
365 
366 case 64: {
367   sym(1).Node = QScript::makeAstNode<QScript::AST::NewMemberExpression> (driver->nodePool(), sym(2).Expression, sym(3).ArgumentList);
368   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
369 } break;
370 
371 case 66: {
372   sym(1).Node = QScript::makeAstNode<QScript::AST::NewExpression> (driver->nodePool(), sym(2).Expression);
373   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
374 } break;
375 
376 case 67: {
377   sym(1).Node = QScript::makeAstNode<QScript::AST::CallExpression> (driver->nodePool(), sym(1).Expression, sym(2).ArgumentList);
378   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
379 } break;
380 
381 case 68: {
382   sym(1).Node = QScript::makeAstNode<QScript::AST::CallExpression> (driver->nodePool(), sym(1).Expression, sym(2).ArgumentList);
383   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
384 } break;
385 
386 case 69: {
387   sym(1).Node = QScript::makeAstNode<QScript::AST::ArrayMemberExpression> (driver->nodePool(), sym(1).Expression, sym(3).Expression);
388   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4));
389 } break;
390 
391 case 70: {
392   sym(1).Node = QScript::makeAstNode<QScript::AST::FieldMemberExpression> (driver->nodePool(), sym(1).Expression, sym(3).sval);
393   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
394 } break;
395 
396 case 71: {
397   sym(1).Node = 0;
398 } break;
399 
400 case 72: {
401   sym(1).Node = sym(2).ArgumentList->finish ();
402   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
403 } break;
404 
405 case 73: {
406   sym(1).Node = QScript::makeAstNode<QScript::AST::ArgumentList> (driver->nodePool(), sym(1).Expression);
407   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
408 } break;
409 
410 case 74: {
411   sym(1).Node = QScript::makeAstNode<QScript::AST::ArgumentList> (driver->nodePool(), sym(1).ArgumentList, sym(3).Expression);
412   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
413 } break;
414 
415 case 78: {
416   sym(1).Node = QScript::makeAstNode<QScript::AST::PostIncrementExpression> (driver->nodePool(), sym(1).Expression);
417   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
418 } break;
419 
420 case 79: {
421   sym(1).Node = QScript::makeAstNode<QScript::AST::PostDecrementExpression> (driver->nodePool(), sym(1).Expression);
422   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
423 } break;
424 
425 case 81: {
426   sym(1).Node = QScript::makeAstNode<QScript::AST::DeleteExpression> (driver->nodePool(), sym(2).Expression);
427   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
428 } break;
429 
430 case 82: {
431   sym(1).Node = QScript::makeAstNode<QScript::AST::VoidExpression> (driver->nodePool(), sym(2).Expression);
432   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
433 } break;
434 
435 case 83: {
436   sym(1).Node = QScript::makeAstNode<QScript::AST::TypeOfExpression> (driver->nodePool(), sym(2).Expression);
437   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
438 } break;
439 
440 case 84: {
441   sym(1).Node = QScript::makeAstNode<QScript::AST::PreIncrementExpression> (driver->nodePool(), sym(2).Expression);
442   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
443 } break;
444 
445 case 85: {
446   sym(1).Node = QScript::makeAstNode<QScript::AST::PreDecrementExpression> (driver->nodePool(), sym(2).Expression);
447   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
448 } break;
449 
450 case 86: {
451   sym(1).Node = QScript::makeAstNode<QScript::AST::UnaryPlusExpression> (driver->nodePool(), sym(2).Expression);
452   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
453 } break;
454 
455 case 87: {
456   sym(1).Node = QScript::makeAstNode<QScript::AST::UnaryMinusExpression> (driver->nodePool(), sym(2).Expression);
457   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
458 } break;
459 
460 case 88: {
461   sym(1).Node = QScript::makeAstNode<QScript::AST::TildeExpression> (driver->nodePool(), sym(2).Expression);
462   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
463 } break;
464 
465 case 89: {
466   sym(1).Node = QScript::makeAstNode<QScript::AST::NotExpression> (driver->nodePool(), sym(2).Expression);
467   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
468 } break;
469 
470 case 91: {
471   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Mul, sym(3).Expression);
472   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
473 } break;
474 
475 case 92: {
476   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Div, sym(3).Expression);
477   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
478 } break;
479 
480 case 93: {
481   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Mod, sym(3).Expression);
482   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
483 } break;
484 
485 case 95: {
486   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Add, sym(3).Expression);
487   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
488 } break;
489 
490 case 96: {
491   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Sub, sym(3).Expression);
492   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
493 } break;
494 
495 case 98: {
496   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::LShift, sym(3).Expression);
497   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
498 } break;
499 
500 case 99: {
501   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::RShift, sym(3).Expression);
502   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
503 } break;
504 
505 case 100: {
506   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::URShift, sym(3).Expression);
507   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
508 } break;
509 
510 case 102: {
511   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Lt, sym(3).Expression);
512   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
513 } break;
514 
515 case 103: {
516   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Gt, sym(3).Expression);
517   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
518 } break;
519 
520 case 104: {
521   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Le, sym(3).Expression);
522   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
523 } break;
524 
525 case 105: {
526   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Ge, sym(3).Expression);
527   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
528 } break;
529 
530 case 106: {
531   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::InstanceOf, sym(3).Expression);
532   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
533 } break;
534 
535 case 107: {
536   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::In, sym(3).Expression);
537   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
538 } break;
539 
540 case 109: {
541   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Lt, sym(3).Expression);
542   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
543 } break;
544 
545 case 110: {
546   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Gt, sym(3).Expression);
547   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
548 } break;
549 
550 case 111: {
551   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Le, sym(3).Expression);
552   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
553 } break;
554 
555 case 112: {
556   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Ge, sym(3).Expression);
557   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
558 } break;
559 
560 case 113: {
561   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::InstanceOf, sym(3).Expression);
562   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
563 } break;
564 
565 case 115: {
566   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Equal, sym(3).Expression);
567   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
568 } break;
569 
570 case 116: {
571   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::NotEqual, sym(3).Expression);
572   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
573 } break;
574 
575 case 117: {
576   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::StrictEqual, sym(3).Expression);
577   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
578 } break;
579 
580 case 118: {
581   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::StrictNotEqual, sym(3).Expression);
582   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
583 } break;
584 
585 case 120: {
586   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Equal, sym(3).Expression);
587   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
588 } break;
589 
590 case 121: {
591   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::NotEqual, sym(3).Expression);
592   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
593 } break;
594 
595 case 122: {
596   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::StrictEqual, sym(3).Expression);
597   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
598 } break;
599 
600 case 123: {
601   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::StrictNotEqual, sym(3).Expression);
602   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
603 } break;
604 
605 case 125: {
606   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::BitAnd, sym(3).Expression);
607   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
608 } break;
609 
610 case 127: {
611   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::BitAnd, sym(3).Expression);
612   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
613 } break;
614 
615 case 129: {
616   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::BitXor, sym(3).Expression);
617   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
618 } break;
619 
620 case 131: {
621   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::BitXor, sym(3).Expression);
622   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
623 } break;
624 
625 case 133: {
626   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::BitOr, sym(3).Expression);
627   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
628 } break;
629 
630 case 135: {
631   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::BitOr, sym(3).Expression);
632   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
633 } break;
634 
635 case 137: {
636   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::And, sym(3).Expression);
637   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
638 } break;
639 
640 case 139: {
641   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::And, sym(3).Expression);
642   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
643 } break;
644 
645 case 141: {
646   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Or, sym(3).Expression);
647   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
648 } break;
649 
650 case 143: {
651   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Or, sym(3).Expression);
652   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
653 } break;
654 
655 case 145: {
656   sym(1).Node = QScript::makeAstNode<QScript::AST::ConditionalExpression> (driver->nodePool(), sym(1).Expression, sym(3).Expression, sym(5).Expression);
657   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
658 } break;
659 
660 case 147: {
661   sym(1).Node = QScript::makeAstNode<QScript::AST::ConditionalExpression> (driver->nodePool(), sym(1).Expression, sym(3).Expression, sym(5).Expression);
662   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
663 } break;
664 
665 case 149: {
666   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, sym(2).ival, sym(3).Expression);
667   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
668 } break;
669 
670 case 151: {
671   sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, sym(2).ival, sym(3).Expression);
672   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
673 } break;
674 
675 case 152: {
676   sym(1).ival = QSOperator::Assign;
677 } break;
678 
679 case 153: {
680   sym(1).ival = QSOperator::InplaceMul;
681 } break;
682 
683 case 154: {
684   sym(1).ival = QSOperator::InplaceDiv;
685 } break;
686 
687 case 155: {
688   sym(1).ival = QSOperator::InplaceMod;
689 } break;
690 
691 case 156: {
692   sym(1).ival = QSOperator::InplaceAdd;
693 } break;
694 
695 case 157: {
696   sym(1).ival = QSOperator::InplaceSub;
697 } break;
698 
699 case 158: {
700   sym(1).ival = QSOperator::InplaceLeftShift;
701 } break;
702 
703 case 159: {
704   sym(1).ival = QSOperator::InplaceRightShift;
705 } break;
706 
707 case 160: {
708   sym(1).ival = QSOperator::InplaceURightShift;
709 } break;
710 
711 case 161: {
712   sym(1).ival = QSOperator::InplaceAnd;
713 } break;
714 
715 case 162: {
716   sym(1).ival = QSOperator::InplaceXor;
717 } break;
718 
719 case 163: {
720   sym(1).ival = QSOperator::InplaceOr;
721 } break;
722 
723 case 165: {
724   sym(1).Node = QScript::makeAstNode<QScript::AST::Expression> (driver->nodePool(), sym(1).Expression, sym(3).Expression);
725   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
726 } break;
727 
728 case 166: {
729   sym(1).Node = 0;
730 } break;
731 
732 case 169: {
733   sym(1).Node = QScript::makeAstNode<QScript::AST::Expression> (driver->nodePool(), sym(1).Expression, sym(3).Expression);
734   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
735 } break;
736 
737 case 170: {
738   sym(1).Node = 0;
739 } break;
740 
741 case 187: {
742   sym(1).Node = QScript::makeAstNode<QScript::AST::Block> (driver->nodePool(), sym(2).StatementList);
743   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
744 } break;
745 
746 case 188: {
747   sym(1).Node = QScript::makeAstNode<QScript::AST::StatementList> (driver->nodePool(), sym(1).Statement);
748   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
749 } break;
750 
751 case 189: {
752   sym(1).Node = QScript::makeAstNode<QScript::AST::StatementList> (driver->nodePool(), sym(1).StatementList, sym(2).Statement);
753   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
754 } break;
755 
756 case 190: {
757   sym(1).Node = 0;
758 } break;
759 
760 case 191: {
761   sym(1).Node = sym(1).StatementList->finish ();
762 } break;
763 
764 case 193: {
765   sym(1).Node = QScript::makeAstNode<QScript::AST::VariableStatement> (driver->nodePool(), sym(2).VariableDeclarationList->finish (/*readOnly=*/sym(1).ival == T_CONST));
766   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
767 } break;
768 
769 case 194: {
770   sym(1).ival = T_CONST;
771 } break;
772 
773 case 195: {
774   sym(1).ival = T_VAR;
775 } break;
776 
777 case 196: {
778   sym(1).Node = QScript::makeAstNode<QScript::AST::VariableDeclarationList> (driver->nodePool(), sym(1).VariableDeclaration);
779   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
780 } break;
781 
782 case 197: {
783   sym(1).Node = QScript::makeAstNode<QScript::AST::VariableDeclarationList> (driver->nodePool(), sym(1).VariableDeclarationList, sym(3).VariableDeclaration);
784   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
785 } break;
786 
787 case 198: {
788   sym(1).Node = QScript::makeAstNode<QScript::AST::VariableDeclarationList> (driver->nodePool(), sym(1).VariableDeclaration);
789   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
790 } break;
791 
792 case 199: {
793   sym(1).Node = QScript::makeAstNode<QScript::AST::VariableDeclarationList> (driver->nodePool(), sym(1).VariableDeclarationList, sym(3).VariableDeclaration);
794   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
795 } break;
796 
797 case 200: {
798   sym(1).Node = QScript::makeAstNode<QScript::AST::VariableDeclaration> (driver->nodePool(), sym(1).sval, sym(2).Expression);
799   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
800 } break;
801 
802 case 201: {
803   sym(1).Node = QScript::makeAstNode<QScript::AST::VariableDeclaration> (driver->nodePool(), sym(1).sval, sym(2).Expression);
804   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
805 } break;
806 
807 case 202: {
808   sym(1) = sym(2);
809   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
810 } break;
811 
812 case 203: {
813   sym(1).Node = 0;
814 } break;
815 
816 case 205: {
817   sym(1) = sym(2);
818   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
819 } break;
820 
821 case 206: {
822   sym(1).Node = 0;
823 } break;
824 
825 case 208: {
826   sym(1).Node = QScript::makeAstNode<QScript::AST::EmptyStatement> (driver->nodePool());
827   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
828 } break;
829 
830 case 210: {
831   sym(1).Node = QScript::makeAstNode<QScript::AST::ExpressionStatement> (driver->nodePool(), sym(1).Expression);
832   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
833 } break;
834 
835 case 211: {
836   sym(1).Node = QScript::makeAstNode<QScript::AST::IfStatement> (driver->nodePool(), sym(3).Expression, sym(5).Statement, sym(7).Statement);
837   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(7));
838 } break;
839 
840 case 212: {
841   sym(1).Node = QScript::makeAstNode<QScript::AST::IfStatement> (driver->nodePool(), sym(3).Expression, sym(5).Statement);
842   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5));
843 } break;
844 
845 case 214: {
846   sym(1).Node = QScript::makeAstNode<QScript::AST::DoWhileStatement> (driver->nodePool(), sym(2).Statement, sym(5).Expression);
847   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(7));
848 } break;
849 
850 case 215: {
851   sym(1).Node = QScript::makeAstNode<QScript::AST::WhileStatement> (driver->nodePool(), sym(3).Expression, sym(5).Statement);
852   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5));
853 } break;
854 
855 case 216: {
856   sym(1).Node = QScript::makeAstNode<QScript::AST::ForStatement> (driver->nodePool(), sym(3).Expression, sym(5).Expression, sym(7).Expression, sym(9).Statement);
857   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(9));
858 } break;
859 
860 case 217: {
861   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);
862   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(10));
863 } break;
864 
865 case 218: {
866   sym(1).Node = QScript::makeAstNode<QScript::AST::ForEachStatement> (driver->nodePool(), sym(3).Expression, sym(5).Expression, sym(7).Statement);
867   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(7));
868 } break;
869 
870 case 219: {
871   sym(1).Node = QScript::makeAstNode<QScript::AST::LocalForEachStatement> (driver->nodePool(), sym(4).VariableDeclaration, sym(6).Expression, sym(8).Statement);
872   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(8));
873 } break;
874 
875 case 221: {
876   sym(1).Node = QScript::makeAstNode<QScript::AST::ContinueStatement> (driver->nodePool());
877   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
878 } break;
879 
880 case 223: {
881   sym(1).Node = QScript::makeAstNode<QScript::AST::ContinueStatement> (driver->nodePool(), sym(2).sval);
882   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
883 } break;
884 
885 case 225: {
886   sym(1).Node = QScript::makeAstNode<QScript::AST::BreakStatement> (driver->nodePool());
887   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
888 } break;
889 
890 case 227: {
891   sym(1).Node = QScript::makeAstNode<QScript::AST::BreakStatement> (driver->nodePool(), sym(2).sval);
892   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
893 } break;
894 
895 case 229: {
896   sym(1).Node = QScript::makeAstNode<QScript::AST::ReturnStatement> (driver->nodePool(), sym(2).Expression);
897   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
898 } break;
899 
900 case 230: {
901   sym(1).Node = QScript::makeAstNode<QScript::AST::WithStatement> (driver->nodePool(), sym(3).Expression, sym(5).Statement);
902   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5));
903 } break;
904 
905 case 231: {
906   sym(1).Node = QScript::makeAstNode<QScript::AST::SwitchStatement> (driver->nodePool(), sym(3).Expression, sym(5).CaseBlock);
907   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5));
908 } break;
909 
910 case 232: {
911   sym(1).Node = QScript::makeAstNode<QScript::AST::CaseBlock> (driver->nodePool(), sym(2).CaseClauses);
912   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
913 } break;
914 
915 case 233: {
916   sym(1).Node = QScript::makeAstNode<QScript::AST::CaseBlock> (driver->nodePool(), sym(2).CaseClauses, sym(3).DefaultClause, sym(4).CaseClauses);
917   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5));
918 } break;
919 
920 case 234: {
921   sym(1).Node = QScript::makeAstNode<QScript::AST::CaseClauses> (driver->nodePool(), sym(1).CaseClause);
922   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
923 } break;
924 
925 case 235: {
926   sym(1).Node = QScript::makeAstNode<QScript::AST::CaseClauses> (driver->nodePool(), sym(1).CaseClauses, sym(2).CaseClause);
927   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
928 } break;
929 
930 case 236: {
931   sym(1).Node = 0;
932 } break;
933 
934 case 237: {
935   sym(1).Node = sym(1).CaseClauses->finish ();
936   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
937 } break;
938 
939 case 238: {
940   sym(1).Node = QScript::makeAstNode<QScript::AST::CaseClause> (driver->nodePool(), sym(2).Expression, sym(4).StatementList);
941   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4));
942 } break;
943 
944 case 239: {
945   sym(1).Node = QScript::makeAstNode<QScript::AST::DefaultClause> (driver->nodePool(), sym(3).StatementList);
946   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
947 } break;
948 
949 case 240: {
950   sym(1).Node = QScript::makeAstNode<QScript::AST::LabelledStatement> (driver->nodePool(), sym(1).sval, sym(3).Statement);
951   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
952 } break;
953 
954 case 242: {
955   sym(1).Node = QScript::makeAstNode<QScript::AST::ThrowStatement> (driver->nodePool(), sym(2).Expression);
956   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
957 } break;
958 
959 case 243: {
960   sym(1).Node = QScript::makeAstNode<QScript::AST::TryStatement> (driver->nodePool(), sym(2).Statement, sym(3).Catch);
961   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
962 } break;
963 
964 case 244: {
965   sym(1).Node = QScript::makeAstNode<QScript::AST::TryStatement> (driver->nodePool(), sym(2).Statement, sym(3).Finally);
966   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
967 } break;
968 
969 case 245: {
970   sym(1).Node = QScript::makeAstNode<QScript::AST::TryStatement> (driver->nodePool(), sym(2).Statement, sym(3).Catch, sym(4).Finally);
971   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4));
972 } break;
973 
974 case 246: {
975   sym(1).Node = QScript::makeAstNode<QScript::AST::Catch> (driver->nodePool(), sym(3).sval, sym(5).Statement);
976   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5));
977 } break;
978 
979 case 247: {
980   sym(1).Node = QScript::makeAstNode<QScript::AST::Finally> (driver->nodePool(), sym(2).Statement);
981   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
982 } break;
983 
984 case 249: {
985   sym(1).Node = QScript::makeAstNode<QScript::AST::DebuggerStatement> (driver->nodePool());
986   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
987 } break;
988 
989 case 250: {
990   sym(1).Node = QScript::makeAstNode<QScript::AST::FunctionDeclaration> (driver->nodePool(), sym(2).sval, sym(4).FormalParameterList, sym(7).FunctionBody);
991   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(8));
992 } break;
993 
994 case 251: {
995   sym(1).Node = QScript::makeAstNode<QScript::AST::FunctionExpression> (driver->nodePool(), sym(2).sval, sym(4).FormalParameterList, sym(7).FunctionBody);
996   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(8));
997 } break;
998 
999 case 252: {
1000   sym(1).Node = QScript::makeAstNode<QScript::AST::FormalParameterList> (driver->nodePool(), sym(1).sval);
1001   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1002 } break;
1003 
1004 case 253: {
1005   sym(1).Node = QScript::makeAstNode<QScript::AST::FormalParameterList> (driver->nodePool(), sym(1).FormalParameterList, sym(3).sval);
1006   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1007 } break;
1008 
1009 case 254: {
1010   sym(1).Node = 0;
1011 } break;
1012 
1013 case 255: {
1014   sym(1).Node = sym(1).FormalParameterList->finish ();
1015   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1016 } break;
1017 
1018 case 256: {
1019   sym(1).Node = 0;
1020 } break;
1021 
1022 case 258: {
1023   sym(1).Node = QScript::makeAstNode<QScript::AST::FunctionBody> (driver->nodePool(), sym(1).SourceElements->finish ());
1024   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1025 } break;
1026 
1027 case 259: {
1028   sym(1).Node = QScript::makeAstNode<QScript::AST::Program> (driver->nodePool(), sym(1).SourceElements->finish ());
1029   driver->changeAbstractSyntaxTree(sym(1).Node);
1030   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1031 } break;
1032 
1033 case 260: {
1034   sym(1).Node = QScript::makeAstNode<QScript::AST::SourceElements> (driver->nodePool(), sym(1).SourceElement);
1035   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1036 } break;
1037 
1038 case 261: {
1039   sym(1).Node = QScript::makeAstNode<QScript::AST::SourceElements> (driver->nodePool(), sym(1).SourceElements, sym(2).SourceElement);
1040   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
1041 } break;
1042 
1043 case 262: {
1044   sym(1).Node = QScript::makeAstNode<QScript::AST::StatementSourceElement> (driver->nodePool(), sym(1).Statement);
1045   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1046 } break;
1047 
1048 case 263: {
1049   sym(1).Node = QScript::makeAstNode<QScript::AST::FunctionSourceElement> (driver->nodePool(), sym(1).FunctionDeclaration);
1050   Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1051 } break;
1052 
1053 case 264: {
1054   sym(1).sval = 0;
1055 } break;
1056 
1057 case 266: {
1058   sym(1).Node = 0;
1059 } break;
1060 
1061           } // switch
1062 
1063           state_stack [tos] = nt_action (act, lhs [r] - TERMINAL_COUNT);
1064 
1065           if (rhs[r] > 1) {
1066               location_stack[tos - 1].endLine = location_stack[tos + rhs[r] - 2].endLine;
1067               location_stack[tos - 1].endColumn = location_stack[tos + rhs[r] - 2].endColumn;
1068               location_stack[tos] = location_stack[tos + rhs[r] - 1];
1069           }
1070         }
1071 
1072       else
1073         {
1074           if (saved_yytoken == -1 && automatic (driver, yytoken) && t_action (state, T_AUTOMATIC_SEMICOLON) > 0)
1075             {
1076               saved_yytoken = yytoken;
1077               yytoken = T_SEMICOLON;
1078               continue;
1079             }
1080 
1081           else if ((state == INITIAL_STATE) && (yytoken == 0)) {
1082               // accept empty input
1083               yytoken = T_SEMICOLON;
1084               continue;
1085           }
1086 
1087           int ers = state;
1088           int shifts = 0;
1089           int reduces = 0;
1090           int expected_tokens [3];
1091           for (int tk = 0; tk < TERMINAL_COUNT; ++tk)
1092             {
1093               int k = t_action (ers, tk);
1094 
1095               if (! k)
1096                 continue;
1097               else if (k < 0)
1098                 ++reduces;
1099               else if (spell [tk])
1100                 {
1101                   if (shifts < 3)
1102                     expected_tokens [shifts] = tk;
1103                   ++shifts;
1104                 }
1105             }
1106 
1107           error_message.clear ();
1108           if (shifts && shifts < 3)
1109             {
1110               bool first = true;
1111 
1112               for (int s = 0; s < shifts; ++s)
1113                 {
1114                   if (first)
1115                     error_message += QLatin1String ("Expected ");
1116                   else
1117                     error_message += QLatin1String (", ");
1118 
1119                   first = false;
1120                   error_message += QLatin1String("`");
1121                   error_message += QLatin1String (spell [expected_tokens [s]]);
1122                   error_message += QLatin1String("'");
1123                 }
1124             }
1125 
1126           if (error_message.isEmpty())
1127               error_message = lexer->errorMessage();
1128 
1129           error_lineno = lexer->startLineNo();
1130           error_column = lexer->startColumnNo();
1131 
1132           return false;
1133         }
1134     }
1135 
1136     return false;
1137 }
1138 
1139 QT_END_NAMESPACE
1140