~loic.molinari/+junk/qtdeclarative-shadereffectsource-changes

« back to all changes in this revision

Viewing changes to src/qml/qml/parser/qqmljsparser.cpp

  • Committer: Loïc Molinari
  • Date: 2012-04-21 17:59:51 UTC
  • Revision ID: loic.molinari@canonical.com-20120421175951-bqx68caaf5zrp76l
Initial import

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/****************************************************************************
 
2
**
 
3
** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
 
4
** Contact: http://www.qt-project.org/
 
5
**
 
6
** This file is part of the QtQml module of the Qt Toolkit.
 
7
**
 
8
** $QT_BEGIN_LICENSE:LGPL$
 
9
** GNU Lesser General Public License Usage
 
10
** This file may be used under the terms of the GNU Lesser General Public
 
11
** License version 2.1 as published by the Free Software Foundation and
 
12
** appearing in the file LICENSE.LGPL included in the packaging of this
 
13
** file. Please review the following information to ensure the GNU Lesser
 
14
** General Public License version 2.1 requirements will be met:
 
15
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
 
16
**
 
17
** In addition, as a special exception, Nokia gives you certain additional
 
18
** rights. These rights are described in the Nokia Qt LGPL Exception
 
19
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
 
20
**
 
21
** GNU General Public License Usage
 
22
** Alternatively, this file may be used under the terms of the GNU General
 
23
** Public License version 3.0 as published by the Free Software Foundation
 
24
** and appearing in the file LICENSE.GPL included in the packaging of this
 
25
** file. Please review the following information to ensure the GNU General
 
26
** Public License version 3.0 requirements will be met:
 
27
** http://www.gnu.org/copyleft/gpl.html.
 
28
**
 
29
** Other Usage
 
30
** Alternatively, this file may be used in accordance with the terms and
 
31
** conditions contained in a signed written agreement between you and Nokia.
 
32
**
 
33
**
 
34
**
 
35
**
 
36
**
 
37
**
 
38
** $QT_END_LICENSE$
 
39
**
 
40
****************************************************************************/
 
41
 
 
42
#include <QtCore/QtDebug>
 
43
#include <QtCore/QCoreApplication>
 
44
 
 
45
#include <string.h>
 
46
 
 
47
#include "qqmljsengine_p.h"
 
48
#include "qqmljslexer_p.h"
 
49
#include "qqmljsast_p.h"
 
50
#include "qqmljsmemorypool_p.h"
 
51
 
 
52
 
 
53
 
 
54
#include "qqmljsparser_p.h"
 
55
#include <QVarLengthArray>
 
56
 
 
57
//
 
58
// This file is automatically generated from qmljs.g.
 
59
// Changes will be lost.
 
60
//
 
61
 
 
62
using namespace QQmlJS;
 
63
 
 
64
QT_QML_BEGIN_NAMESPACE
 
65
 
 
66
void Parser::reallocateStack()
 
67
{
 
68
    if (! stack_size)
 
69
        stack_size = 128;
 
70
    else
 
71
        stack_size <<= 1;
 
72
 
 
73
    sym_stack = reinterpret_cast<Value*> (realloc(sym_stack, stack_size * sizeof(Value)));
 
74
    state_stack = reinterpret_cast<int*> (realloc(state_stack, stack_size * sizeof(int)));
 
75
    location_stack = reinterpret_cast<AST::SourceLocation*> (realloc(location_stack, stack_size * sizeof(AST::SourceLocation)));
 
76
    string_stack = reinterpret_cast<QStringRef*> (realloc(string_stack, stack_size * sizeof(QStringRef)));
 
77
}
 
78
 
 
79
Parser::Parser(Engine *engine):
 
80
    driver(engine),
 
81
    pool(engine->pool()),
 
82
    tos(0),
 
83
    stack_size(0),
 
84
    sym_stack(0),
 
85
    state_stack(0),
 
86
    location_stack(0),
 
87
    string_stack(0),
 
88
    first_token(0),
 
89
    last_token(0)
 
90
{
 
91
}
 
92
 
 
93
Parser::~Parser()
 
94
{
 
95
    if (stack_size) {
 
96
        free(sym_stack);
 
97
        free(state_stack);
 
98
        free(location_stack);
 
99
        free(string_stack);
 
100
    }
 
101
}
 
102
 
 
103
static inline AST::SourceLocation location(Lexer *lexer)
 
104
{
 
105
    AST::SourceLocation loc;
 
106
    loc.offset = lexer->tokenOffset();
 
107
    loc.length = lexer->tokenLength();
 
108
    loc.startLine = lexer->tokenStartLine();
 
109
    loc.startColumn = lexer->tokenStartColumn();
 
110
    return loc;
 
111
}
 
112
 
 
113
AST::UiQualifiedId *Parser::reparseAsQualifiedId(AST::ExpressionNode *expr)
 
114
{
 
115
    QVarLengthArray<QStringRef, 4> nameIds;
 
116
    QVarLengthArray<AST::SourceLocation, 4> locations;
 
117
 
 
118
    AST::ExpressionNode *it = expr;
 
119
    while (AST::FieldMemberExpression *m = AST::cast<AST::FieldMemberExpression *>(it)) {
 
120
        nameIds.append(m->name);
 
121
        locations.append(m->identifierToken);
 
122
        it = m->base;
 
123
    }
 
124
 
 
125
    if (AST::IdentifierExpression *idExpr = AST::cast<AST::IdentifierExpression *>(it)) {
 
126
        AST::UiQualifiedId *q = new (pool) AST::UiQualifiedId(idExpr->name);
 
127
        q->identifierToken = idExpr->identifierToken;
 
128
 
 
129
        AST::UiQualifiedId *currentId = q;
 
130
        for (int i = nameIds.size() - 1; i != -1; --i) {
 
131
            currentId = new (pool) AST::UiQualifiedId(currentId, nameIds[i]);
 
132
            currentId->identifierToken = locations[i];
 
133
        }
 
134
 
 
135
        return currentId->finish();
 
136
    }
 
137
 
 
138
    return 0;
 
139
}
 
140
 
 
141
bool Parser::parse(int startToken)
 
142
{
 
143
    Lexer *lexer = driver->lexer();
 
144
    bool hadErrors = false;
 
145
    int yytoken = -1;
 
146
    int action = 0;
 
147
 
 
148
    token_buffer[0].token = startToken;
 
149
    first_token = &token_buffer[0];
 
150
    last_token = &token_buffer[1];
 
151
 
 
152
    tos = -1;
 
153
    program = 0;
 
154
 
 
155
    do {
 
156
        if (++tos == stack_size)
 
157
            reallocateStack();
 
158
 
 
159
        state_stack[tos] = action;
 
160
 
 
161
    _Lcheck_token:
 
162
        if (yytoken == -1 && -TERMINAL_COUNT != action_index[action]) {
 
163
            yyprevlloc = yylloc;
 
164
 
 
165
            if (first_token == last_token) {
 
166
                yytoken = lexer->lex();
 
167
                yylval = lexer->tokenValue();
 
168
                yytokenspell = lexer->tokenSpell();
 
169
                yylloc = location(lexer);
 
170
            } else {
 
171
                yytoken = first_token->token;
 
172
                yylval = first_token->dval;
 
173
                yytokenspell = first_token->spell;
 
174
                yylloc = first_token->loc;
 
175
                ++first_token;
 
176
            }
 
177
        }
 
178
 
 
179
        action = t_action(action, yytoken);
 
180
        if (action > 0) {
 
181
            if (action != ACCEPT_STATE) {
 
182
                yytoken = -1;
 
183
                sym(1).dval = yylval;
 
184
                stringRef(1) = yytokenspell;
 
185
                loc(1) = yylloc;
 
186
            } else {
 
187
              --tos;
 
188
              return ! hadErrors;
 
189
            }
 
190
        } else if (action < 0) {
 
191
          const int r = -action - 1;
 
192
          tos -= rhs[r];
 
193
 
 
194
          switch (r) {
 
195
 
 
196
case 0: {
 
197
  sym(1).Node = sym(2).Node;
 
198
  program = sym(1).Node;
 
199
} break;
 
200
 
 
201
case 1: {
 
202
  sym(1).Node = sym(2).Node;
 
203
  program = sym(1).Node;
 
204
} break;
 
205
 
 
206
case 2: {
 
207
  sym(1).Node = sym(2).Node;
 
208
  program = sym(1).Node;
 
209
} break;
 
210
 
 
211
case 3: {
 
212
  sym(1).Node = sym(2).Node;
 
213
  program = sym(1).Node;
 
214
} break;
 
215
 
 
216
case 4: {
 
217
  sym(1).Node = sym(2).Node;
 
218
  program = sym(1).Node;
 
219
} break;
 
220
 
 
221
case 5: {
 
222
  sym(1).Node = sym(2).Node;
 
223
  program = sym(1).Node;
 
224
} break;
 
225
 
 
226
case 6: {
 
227
  sym(1).UiProgram = new (pool) AST::UiProgram(sym(1).UiImportList,
 
228
        sym(2).UiObjectMemberList->finish());
 
229
} break;
 
230
 
 
231
case 8: {
 
232
    sym(1).Node = sym(1).UiImportList->finish();
 
233
} break;
 
234
 
 
235
case 9: {
 
236
    sym(1).Node = new (pool) AST::UiImportList(sym(1).UiImport);
 
237
} break;
 
238
 
 
239
case 10: {
 
240
    sym(1).Node = new (pool) AST::UiImportList(sym(1).UiImportList, sym(2).UiImport);
 
241
} break;
 
242
 
 
243
case 13: {
 
244
    sym(1).UiImport->semicolonToken = loc(2);
 
245
} break;
 
246
 
 
247
case 15: {
 
248
    sym(1).UiImport->versionToken = loc(2);
 
249
    sym(1).UiImport->semicolonToken = loc(3);
 
250
} break;
 
251
 
 
252
case 17: {
 
253
    sym(1).UiImport->versionToken = loc(2);
 
254
    sym(1).UiImport->asToken = loc(3);
 
255
    sym(1).UiImport->importIdToken = loc(4);
 
256
    sym(1).UiImport->importId = stringRef(4);
 
257
    sym(1).UiImport->semicolonToken = loc(5);
 
258
} break;
 
259
 
 
260
case 19: {
 
261
    sym(1).UiImport->asToken = loc(2);
 
262
    sym(1).UiImport->importIdToken = loc(3);
 
263
    sym(1).UiImport->importId = stringRef(3);
 
264
    sym(1).UiImport->semicolonToken = loc(4);
 
265
} break;
 
266
 
 
267
case 20: {
 
268
    AST::UiImport *node = 0;
 
269
 
 
270
    if (AST::StringLiteral *importIdLiteral = AST::cast<AST::StringLiteral *>(sym(2).Expression)) {
 
271
        node = new (pool) AST::UiImport(importIdLiteral->value);
 
272
        node->fileNameToken = loc(2);
 
273
    } else if (AST::UiQualifiedId *qualifiedId = reparseAsQualifiedId(sym(2).Expression)) {
 
274
        node = new (pool) AST::UiImport(qualifiedId);
 
275
        node->fileNameToken = loc(2);
 
276
    }
 
277
 
 
278
    sym(1).Node = node;
 
279
 
 
280
    if (node) {
 
281
        node->importToken = loc(1);
 
282
    } else {
 
283
       diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, loc(1),
 
284
         QLatin1String("Expected a qualified name id or a string literal")));
 
285
 
 
286
        return false; // ### remove me
 
287
    }
 
288
} break;
 
289
 
 
290
case 21: {
 
291
    sym(1).Node = 0;
 
292
} break;
 
293
 
 
294
case 22: {
 
295
    sym(1).Node = new (pool) AST::UiObjectMemberList(sym(1).UiObjectMember);
 
296
} break;
 
297
 
 
298
case 23: {
 
299
    sym(1).Node = new (pool) AST::UiObjectMemberList(sym(1).UiObjectMember);
 
300
} break;
 
301
 
 
302
case 24: {
 
303
    AST::UiObjectMemberList *node = new (pool) AST:: UiObjectMemberList(
 
304
        sym(1).UiObjectMemberList, sym(2).UiObjectMember);
 
305
    sym(1).Node = node;
 
306
} break;
 
307
 
 
308
case 25: {
 
309
    sym(1).Node = new (pool) AST::UiArrayMemberList(sym(1).UiObjectMember);
 
310
} break;
 
311
 
 
312
case 26: {
 
313
    AST::UiArrayMemberList *node = new (pool) AST::UiArrayMemberList(
 
314
        sym(1).UiArrayMemberList, sym(3).UiObjectMember);
 
315
    node->commaToken = loc(2);
 
316
    sym(1).Node = node;
 
317
} break;
 
318
 
 
319
case 27: {
 
320
    AST::UiObjectInitializer *node = new (pool) AST::UiObjectInitializer((AST::UiObjectMemberList*)0);
 
321
    node->lbraceToken = loc(1);
 
322
    node->rbraceToken = loc(2);
 
323
    sym(1).Node = node;
 
324
}   break;
 
325
 
 
326
case 28: {
 
327
    AST::UiObjectInitializer *node = new (pool) AST::UiObjectInitializer(sym(2).UiObjectMemberList->finish());
 
328
    node->lbraceToken = loc(1);
 
329
    node->rbraceToken = loc(3);
 
330
    sym(1).Node = node;
 
331
}   break;
 
332
 
 
333
case 29: {
 
334
    AST::UiObjectDefinition *node = new (pool) AST::UiObjectDefinition(sym(1).UiQualifiedId,
 
335
        sym(2).UiObjectInitializer);
 
336
    sym(1).Node = node;
 
337
}   break;
 
338
 
 
339
case 31: {
 
340
    AST::UiArrayBinding *node = new (pool) AST::UiArrayBinding(
 
341
        sym(1).UiQualifiedId, sym(4).UiArrayMemberList->finish());
 
342
    node->colonToken = loc(2);
 
343
    node->lbracketToken = loc(3);
 
344
    node->rbracketToken = loc(5);
 
345
    sym(1).Node = node;
 
346
}   break;
 
347
 
 
348
case 32: {
 
349
    AST::UiObjectBinding *node = new (pool) AST::UiObjectBinding(
 
350
      sym(1).UiQualifiedId, sym(3).UiQualifiedId, sym(4).UiObjectInitializer);
 
351
    node->colonToken = loc(2);
 
352
    sym(1).Node = node;
 
353
} break;
 
354
 
 
355
case 33: {
 
356
    AST::UiObjectBinding *node = new (pool) AST::UiObjectBinding(
 
357
      sym(3).UiQualifiedId, sym(1).UiQualifiedId, sym(4).UiObjectInitializer);
 
358
    node->colonToken = loc(2);
 
359
    node->hasOnToken = true;
 
360
    sym(1).Node = node;
 
361
} break;
 
362
 
 
363
case 41:
 
364
{
 
365
    AST::UiScriptBinding *node = new (pool) AST::UiScriptBinding(
 
366
        sym(1).UiQualifiedId, sym(3).Statement);
 
367
    node->colonToken = loc(2);
 
368
    sym(1).Node = node;
 
369
}   break;
 
370
 
 
371
case 45: {
 
372
  sym(1).Node = 0;
 
373
} break;
 
374
 
 
375
case 46: {
 
376
  sym(1).Node = sym(1).UiParameterList->finish ();
 
377
} break;
 
378
 
 
379
case 47: {
 
380
  AST::UiParameterList *node = new (pool) AST::UiParameterList(stringRef(1), stringRef(2));
 
381
  node->propertyTypeToken = loc(1);
 
382
  node->identifierToken = loc(2);
 
383
  sym(1).Node = node;
 
384
} break;
 
385
 
 
386
case 48: {
 
387
  AST::UiParameterList *node = new (pool) AST::UiParameterList(sym(1).UiParameterList, stringRef(3), stringRef(4));
 
388
  node->commaToken = loc(2);
 
389
  node->identifierToken = loc(4);
 
390
  sym(1).Node = node;
 
391
} break;
 
392
 
 
393
case 50: {
 
394
    AST::UiPublicMember *node = new (pool) AST::UiPublicMember(QStringRef(), stringRef(2));
 
395
    node->type = AST::UiPublicMember::Signal;
 
396
    node->propertyToken = loc(1);
 
397
    node->typeToken = loc(2);
 
398
    node->identifierToken = loc(2);
 
399
    node->parameters = sym(4).UiParameterList;
 
400
    node->semicolonToken = loc(6);
 
401
    sym(1).Node = node;
 
402
}   break;
 
403
 
 
404
case 52: {
 
405
    AST::UiPublicMember *node = new (pool) AST::UiPublicMember(QStringRef(), stringRef(2));
 
406
    node->type = AST::UiPublicMember::Signal;
 
407
    node->propertyToken = loc(1);
 
408
    node->typeToken = loc(2);
 
409
    node->identifierToken = loc(2);
 
410
    node->semicolonToken = loc(3);
 
411
    sym(1).Node = node;
 
412
}   break;
 
413
 
 
414
case 54: {
 
415
    AST::UiPublicMember *node = new (pool) AST::UiPublicMember(stringRef(4), stringRef(6));
 
416
    node->typeModifier = stringRef(2);
 
417
    node->propertyToken = loc(1);
 
418
    node->typeModifierToken = loc(2);
 
419
    node->typeToken = loc(4);
 
420
    node->identifierToken = loc(6);
 
421
    node->semicolonToken = loc(7);
 
422
    sym(1).Node = node;
 
423
}   break;
 
424
 
 
425
case 56: {
 
426
    AST::UiPublicMember *node = new (pool) AST::UiPublicMember(stringRef(2), stringRef(3));
 
427
    node->propertyToken = loc(1);
 
428
    node->typeToken = loc(2);
 
429
    node->identifierToken = loc(3);
 
430
    node->semicolonToken = loc(4);
 
431
    sym(1).Node = node;
 
432
}   break;
 
433
 
 
434
case 58: {
 
435
    AST::UiPublicMember *node = new (pool) AST::UiPublicMember(stringRef(3), stringRef(4));
 
436
    node->isDefaultMember = true;
 
437
    node->defaultToken = loc(1);
 
438
    node->propertyToken = loc(2);
 
439
    node->typeToken = loc(3);
 
440
    node->identifierToken = loc(4);
 
441
    node->semicolonToken = loc(5);
 
442
    sym(1).Node = node;
 
443
}   break;
 
444
 
 
445
case 59: {
 
446
    AST::UiPublicMember *node = new (pool) AST::UiPublicMember(stringRef(2), stringRef(3),
 
447
        sym(5).Statement);
 
448
    node->propertyToken = loc(1);
 
449
    node->typeToken = loc(2);
 
450
    node->identifierToken = loc(3);
 
451
    node->colonToken = loc(4);
 
452
    sym(1).Node = node;
 
453
}   break;
 
454
 
 
455
case 60: {
 
456
    AST::UiPublicMember *node = new (pool) AST::UiPublicMember(stringRef(3), stringRef(4),
 
457
        sym(6).Statement);
 
458
    node->isReadonlyMember = true;
 
459
    node->readonlyToken = loc(1);
 
460
    node->propertyToken = loc(2);
 
461
    node->typeToken = loc(3);
 
462
    node->identifierToken = loc(4);
 
463
    node->colonToken = loc(5);
 
464
    sym(1).Node = node;
 
465
}   break;
 
466
 
 
467
case 61: {
 
468
    AST::UiPublicMember *node = new (pool) AST::UiPublicMember(stringRef(3), stringRef(4),
 
469
        sym(6).Statement);
 
470
    node->isDefaultMember = true;
 
471
    node->defaultToken = loc(1);
 
472
    node->propertyToken = loc(2);
 
473
    node->typeToken = loc(3);
 
474
    node->identifierToken = loc(4);
 
475
    node->colonToken = loc(5);
 
476
    sym(1).Node = node;
 
477
}   break;
 
478
 
 
479
case 62: {
 
480
    AST::UiPublicMember *node = new (pool) AST::UiPublicMember(stringRef(4), stringRef(6));
 
481
    node->typeModifier = stringRef(2);
 
482
    node->propertyToken = loc(1);
 
483
    node->typeModifierToken = loc(2);
 
484
    node->typeToken = loc(4);
 
485
    node->identifierToken = loc(6);
 
486
    node->semicolonToken = loc(7); // insert a fake ';' before ':'
 
487
 
 
488
    AST::UiQualifiedId *propertyName = new (pool) AST::UiQualifiedId(stringRef(6));
 
489
    propertyName->identifierToken = loc(6);
 
490
    propertyName->next = 0;
 
491
 
 
492
    AST::UiArrayBinding *binding = new (pool) AST::UiArrayBinding(
 
493
        propertyName, sym(9).UiArrayMemberList->finish());
 
494
    binding->colonToken = loc(7);
 
495
    binding->lbracketToken = loc(8);
 
496
    binding->rbracketToken = loc(10);
 
497
 
 
498
    node->binding = binding;
 
499
 
 
500
    sym(1).Node = node;
 
501
}   break;
 
502
 
 
503
case 63: {
 
504
    AST::UiPublicMember *node = new (pool) AST::UiPublicMember(stringRef(2), stringRef(3));
 
505
    node->propertyToken = loc(1);
 
506
    node->typeToken = loc(2);
 
507
    node->identifierToken = loc(3);
 
508
    node->semicolonToken = loc(4); // insert a fake ';' before ':'
 
509
 
 
510
    AST::UiQualifiedId *propertyName = new (pool) AST::UiQualifiedId(stringRef(3));
 
511
    propertyName->identifierToken = loc(3);
 
512
    propertyName->next = 0;
 
513
 
 
514
    AST::UiObjectBinding *binding = new (pool) AST::UiObjectBinding(
 
515
      propertyName, sym(5).UiQualifiedId, sym(6).UiObjectInitializer);
 
516
    binding->colonToken = loc(4);
 
517
 
 
518
    node->binding = binding;
 
519
 
 
520
    sym(1).Node = node;
 
521
}   break;
 
522
 
 
523
case 64: {
 
524
    sym(1).Node = new (pool) AST::UiSourceElement(sym(1).Node);
 
525
}   break;
 
526
 
 
527
case 65: {
 
528
    sym(1).Node = new (pool) AST::UiSourceElement(sym(1).Node);
 
529
}   break;
 
530
 
 
531
case 71: {
 
532
  AST::ThisExpression *node = new (pool) AST::ThisExpression();
 
533
  node->thisToken = loc(1);
 
534
  sym(1).Node = node;
 
535
} break;
 
536
 
 
537
case 72: {
 
538
  AST::IdentifierExpression *node = new (pool) AST::IdentifierExpression(stringRef(1));
 
539
  node->identifierToken = loc(1);
 
540
  sym(1).Node = node;
 
541
} break;
 
542
 
 
543
case 73: {
 
544
  AST::NullExpression *node = new (pool) AST::NullExpression();
 
545
  node->nullToken = loc(1);
 
546
  sym(1).Node = node;
 
547
} break;
 
548
 
 
549
case 74: {
 
550
  AST::TrueLiteral *node = new (pool) AST::TrueLiteral();
 
551
  node->trueToken = loc(1);
 
552
  sym(1).Node = node;
 
553
} break;
 
554
 
 
555
case 75: {
 
556
  AST::FalseLiteral *node = new (pool) AST::FalseLiteral();
 
557
  node->falseToken = loc(1);
 
558
  sym(1).Node = node;
 
559
} break;
 
560
 
 
561
case 76: {
 
562
  AST::NumericLiteral *node = new (pool) AST::NumericLiteral(sym(1).dval);
 
563
  node->literalToken = loc(1);
 
564
  sym(1).Node = node;
 
565
} break;
 
566
case 77:
 
567
case 78: {
 
568
  AST::StringLiteral *node = new (pool) AST::StringLiteral(stringRef(1));
 
569
  node->literalToken = loc(1);
 
570
  sym(1).Node = node;
 
571
} break;
 
572
 
 
573
case 79: {
 
574
  bool rx = lexer->scanRegExp(Lexer::NoPrefix);
 
575
  if (!rx) {
 
576
    diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, location(lexer), lexer->errorMessage()));
 
577
    return false; // ### remove me
 
578
  }
 
579
 
 
580
  loc(1).length = lexer->tokenLength();
 
581
  yylloc = loc(1); // adjust the location of the current token
 
582
 
 
583
  AST::RegExpLiteral *node = new (pool) AST::RegExpLiteral(
 
584
    driver->newStringRef(lexer->regExpPattern()), lexer->regExpFlags());
 
585
  node->literalToken = loc(1);
 
586
  sym(1).Node = node;
 
587
} break;
 
588
 
 
589
case 80: {
 
590
  bool rx = lexer->scanRegExp(Lexer::EqualPrefix);
 
591
  if (!rx) {
 
592
    diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, location(lexer), lexer->errorMessage()));
 
593
    return false;
 
594
  }
 
595
 
 
596
  loc(1).length = lexer->tokenLength();
 
597
  yylloc = loc(1); // adjust the location of the current token
 
598
 
 
599
  AST::RegExpLiteral *node = new (pool) AST::RegExpLiteral(
 
600
    driver->newStringRef(lexer->regExpPattern()), lexer->regExpFlags());
 
601
  node->literalToken = loc(1);
 
602
  sym(1).Node = node;
 
603
} break;
 
604
 
 
605
case 81: {
 
606
  AST::ArrayLiteral *node = new (pool) AST::ArrayLiteral((AST::Elision *) 0);
 
607
  node->lbracketToken = loc(1);
 
608
  node->rbracketToken = loc(2);
 
609
  sym(1).Node = node;
 
610
} break;
 
611
 
 
612
case 82: {
 
613
  AST::ArrayLiteral *node = new (pool) AST::ArrayLiteral(sym(2).Elision->finish());
 
614
  node->lbracketToken = loc(1);
 
615
  node->rbracketToken = loc(3);
 
616
  sym(1).Node = node;
 
617
} break;
 
618
 
 
619
case 83: {
 
620
  AST::ArrayLiteral *node = new (pool) AST::ArrayLiteral(sym(2).ElementList->finish ());
 
621
  node->lbracketToken = loc(1);
 
622
  node->rbracketToken = loc(3);
 
623
  sym(1).Node = node;
 
624
} break;
 
625
 
 
626
case 84: {
 
627
  AST::ArrayLiteral *node = new (pool) AST::ArrayLiteral(sym(2).ElementList->finish (),
 
628
    (AST::Elision *) 0);
 
629
  node->lbracketToken = loc(1);
 
630
  node->commaToken = loc(3);
 
631
  node->rbracketToken = loc(4);
 
632
  sym(1).Node = node;
 
633
} break;
 
634
 
 
635
case 85: {
 
636
  AST::ArrayLiteral *node = new (pool) AST::ArrayLiteral(sym(2).ElementList->finish (),
 
637
    sym(4).Elision->finish());
 
638
  node->lbracketToken = loc(1);
 
639
  node->commaToken = loc(3);
 
640
  node->rbracketToken = loc(5);
 
641
  sym(1).Node = node;
 
642
} break;
 
643
 
 
644
case 86: {
 
645
  AST::ObjectLiteral *node = 0;
 
646
  if (sym(2).Node)
 
647
    node = new (pool) AST::ObjectLiteral(
 
648
        sym(2).PropertyNameAndValueList->finish ());
 
649
  else
 
650
    node = new (pool) AST::ObjectLiteral();
 
651
  node->lbraceToken = loc(1);
 
652
  node->rbraceToken = loc(3);
 
653
  sym(1).Node = node;
 
654
} break;
 
655
 
 
656
case 87: {
 
657
  AST::ObjectLiteral *node = new (pool) AST::ObjectLiteral(
 
658
    sym(2).PropertyNameAndValueList->finish ());
 
659
  node->lbraceToken = loc(1);
 
660
  node->rbraceToken = loc(4);
 
661
  sym(1).Node = node;
 
662
} break;
 
663
 
 
664
case 88: {
 
665
  AST::NestedExpression *node = new (pool) AST::NestedExpression(sym(2).Expression);
 
666
  node->lparenToken = loc(1);
 
667
  node->rparenToken = loc(3);
 
668
  sym(1).Node = node;
 
669
} break;
 
670
 
 
671
case 89: {
 
672
  if (AST::ArrayMemberExpression *mem = AST::cast<AST::ArrayMemberExpression *>(sym(1).Expression)) {
 
673
    diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Warning, mem->lbracketToken,
 
674
      QLatin1String("Ignored annotation")));
 
675
 
 
676
    sym(1).Expression = mem->base;
 
677
  }
 
678
 
 
679
  if (AST::UiQualifiedId *qualifiedId = reparseAsQualifiedId(sym(1).Expression)) {
 
680
    sym(1).UiQualifiedId = qualifiedId;
 
681
  } else {
 
682
    sym(1).UiQualifiedId = 0;
 
683
 
 
684
    diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, loc(1),
 
685
      QLatin1String("Expected a qualified name id")));
 
686
 
 
687
    return false; // ### recover
 
688
  }
 
689
} break;
 
690
 
 
691
case 90: {
 
692
  sym(1).Node = new (pool) AST::ElementList((AST::Elision *) 0, sym(1).Expression);
 
693
} break;
 
694
 
 
695
case 91: {
 
696
  sym(1).Node = new (pool) AST::ElementList(sym(1).Elision->finish(), sym(2).Expression);
 
697
} break;
 
698
 
 
699
case 92: {
 
700
  AST::ElementList *node = new (pool) AST::ElementList(sym(1).ElementList,
 
701
    (AST::Elision *) 0, sym(3).Expression);
 
702
  node->commaToken = loc(2);
 
703
  sym(1).Node = node;
 
704
} break;
 
705
 
 
706
case 93: {
 
707
  AST::ElementList *node = new (pool) AST::ElementList(sym(1).ElementList, sym(3).Elision->finish(),
 
708
    sym(4).Expression);
 
709
  node->commaToken = loc(2);
 
710
  sym(1).Node = node;
 
711
} break;
 
712
 
 
713
case 94: {
 
714
  AST::Elision *node = new (pool) AST::Elision();
 
715
  node->commaToken = loc(1);
 
716
  sym(1).Node = node;
 
717
} break;
 
718
 
 
719
case 95: {
 
720
  AST::Elision *node = new (pool) AST::Elision(sym(1).Elision);
 
721
  node->commaToken = loc(2);
 
722
  sym(1).Node = node;
 
723
} break;
 
724
 
 
725
case 96: {
 
726
  AST::PropertyNameAndValueList *node = new (pool) AST::PropertyNameAndValueList(
 
727
      sym(1).PropertyName, sym(3).Expression);
 
728
  node->colonToken = loc(2);
 
729
  sym(1).Node = node;
 
730
} break;
 
731
 
 
732
case 97: {
 
733
  AST::PropertyNameAndValueList *node = new (pool) AST::PropertyNameAndValueList(
 
734
      sym(1).PropertyNameAndValueList, sym(3).PropertyName, sym(5).Expression);
 
735
  node->commaToken = loc(2);
 
736
  node->colonToken = loc(4);
 
737
  sym(1).Node = node;
 
738
} break;
 
739
 
 
740
case 98: {
 
741
  AST::IdentifierPropertyName *node = new (pool) AST::IdentifierPropertyName(stringRef(1));
 
742
  node->propertyNameToken = loc(1);
 
743
  sym(1).Node = node;
 
744
} break;
 
745
case 99:
 
746
case 100: {
 
747
  AST::IdentifierPropertyName *node = new (pool) AST::IdentifierPropertyName(stringRef(1));
 
748
  node->propertyNameToken = loc(1);
 
749
  sym(1).Node = node;
 
750
} break;
 
751
 
 
752
case 101: {
 
753
  AST::StringLiteralPropertyName *node = new (pool) AST::StringLiteralPropertyName(stringRef(1));
 
754
  node->propertyNameToken = loc(1);
 
755
  sym(1).Node = node;
 
756
} break;
 
757
 
 
758
case 102: {
 
759
  AST::NumericLiteralPropertyName *node = new (pool) AST::NumericLiteralPropertyName(sym(1).dval);
 
760
  node->propertyNameToken = loc(1);
 
761
  sym(1).Node = node;
 
762
} break;
 
763
 
 
764
case 103: {
 
765
  AST::IdentifierPropertyName *node = new (pool) AST::IdentifierPropertyName(stringRef(1));
 
766
  node->propertyNameToken = loc(1);
 
767
  sym(1).Node = node;
 
768
} break;
 
769
 
 
770
case 139: {
 
771
  AST::ArrayMemberExpression *node = new (pool) AST::ArrayMemberExpression(sym(1).Expression, sym(3).Expression);
 
772
  node->lbracketToken = loc(2);
 
773
  node->rbracketToken = loc(4);
 
774
  sym(1).Node = node;
 
775
} break;
 
776
 
 
777
case 140: {
 
778
  AST::FieldMemberExpression *node = new (pool) AST::FieldMemberExpression(sym(1).Expression, stringRef(3));
 
779
  node->dotToken = loc(2);
 
780
  node->identifierToken = loc(3);
 
781
  sym(1).Node = node;
 
782
} break;
 
783
 
 
784
case 141: {
 
785
  AST::NewMemberExpression *node = new (pool) AST::NewMemberExpression(sym(2).Expression, sym(4).ArgumentList);
 
786
  node->newToken = loc(1);
 
787
  node->lparenToken = loc(3);
 
788
  node->rparenToken = loc(5);
 
789
  sym(1).Node = node;
 
790
} break;
 
791
 
 
792
case 143: {
 
793
  AST::NewExpression *node = new (pool) AST::NewExpression(sym(2).Expression);
 
794
  node->newToken = loc(1);
 
795
  sym(1).Node = node;
 
796
} break;
 
797
 
 
798
case 144: {
 
799
  AST::CallExpression *node = new (pool) AST::CallExpression(sym(1).Expression, sym(3).ArgumentList);
 
800
  node->lparenToken = loc(2);
 
801
  node->rparenToken = loc(4);
 
802
  sym(1).Node = node;
 
803
} break;
 
804
 
 
805
case 145: {
 
806
  AST::CallExpression *node = new (pool) AST::CallExpression(sym(1).Expression, sym(3).ArgumentList);
 
807
  node->lparenToken = loc(2);
 
808
  node->rparenToken = loc(4);
 
809
  sym(1).Node = node;
 
810
} break;
 
811
 
 
812
case 146: {
 
813
  AST::ArrayMemberExpression *node = new (pool) AST::ArrayMemberExpression(sym(1).Expression, sym(3).Expression);
 
814
  node->lbracketToken = loc(2);
 
815
  node->rbracketToken = loc(4);
 
816
  sym(1).Node = node;
 
817
} break;
 
818
 
 
819
case 147: {
 
820
  AST::FieldMemberExpression *node = new (pool) AST::FieldMemberExpression(sym(1).Expression, stringRef(3));
 
821
  node->dotToken = loc(2);
 
822
  node->identifierToken = loc(3);
 
823
  sym(1).Node = node;
 
824
} break;
 
825
 
 
826
case 148: {
 
827
  sym(1).Node = 0;
 
828
} break;
 
829
 
 
830
case 149: {
 
831
  sym(1).Node = sym(1).ArgumentList->finish();
 
832
} break;
 
833
 
 
834
case 150: {
 
835
  sym(1).Node = new (pool) AST::ArgumentList(sym(1).Expression);
 
836
} break;
 
837
 
 
838
case 151: {
 
839
  AST::ArgumentList *node = new (pool) AST::ArgumentList(sym(1).ArgumentList, sym(3).Expression);
 
840
  node->commaToken = loc(2);
 
841
  sym(1).Node = node;
 
842
} break;
 
843
 
 
844
case 155: {
 
845
  AST::PostIncrementExpression *node = new (pool) AST::PostIncrementExpression(sym(1).Expression);
 
846
  node->incrementToken = loc(2);
 
847
  sym(1).Node = node;
 
848
} break;
 
849
 
 
850
case 156: {
 
851
  AST::PostDecrementExpression *node = new (pool) AST::PostDecrementExpression(sym(1).Expression);
 
852
  node->decrementToken = loc(2);
 
853
  sym(1).Node = node;
 
854
} break;
 
855
 
 
856
case 158: {
 
857
  AST::DeleteExpression *node = new (pool) AST::DeleteExpression(sym(2).Expression);
 
858
  node->deleteToken = loc(1);
 
859
  sym(1).Node = node;
 
860
} break;
 
861
 
 
862
case 159: {
 
863
  AST::VoidExpression *node = new (pool) AST::VoidExpression(sym(2).Expression);
 
864
  node->voidToken = loc(1);
 
865
  sym(1).Node = node;
 
866
} break;
 
867
 
 
868
case 160: {
 
869
  AST::TypeOfExpression *node = new (pool) AST::TypeOfExpression(sym(2).Expression);
 
870
  node->typeofToken = loc(1);
 
871
  sym(1).Node = node;
 
872
} break;
 
873
 
 
874
case 161: {
 
875
  AST::PreIncrementExpression *node = new (pool) AST::PreIncrementExpression(sym(2).Expression);
 
876
  node->incrementToken = loc(1);
 
877
  sym(1).Node = node;
 
878
} break;
 
879
 
 
880
case 162: {
 
881
  AST::PreDecrementExpression *node = new (pool) AST::PreDecrementExpression(sym(2).Expression);
 
882
  node->decrementToken = loc(1);
 
883
  sym(1).Node = node;
 
884
} break;
 
885
 
 
886
case 163: {
 
887
  AST::UnaryPlusExpression *node = new (pool) AST::UnaryPlusExpression(sym(2).Expression);
 
888
  node->plusToken = loc(1);
 
889
  sym(1).Node = node;
 
890
} break;
 
891
 
 
892
case 164: {
 
893
  AST::UnaryMinusExpression *node = new (pool) AST::UnaryMinusExpression(sym(2).Expression);
 
894
  node->minusToken = loc(1);
 
895
  sym(1).Node = node;
 
896
} break;
 
897
 
 
898
case 165: {
 
899
  AST::TildeExpression *node = new (pool) AST::TildeExpression(sym(2).Expression);
 
900
  node->tildeToken = loc(1);
 
901
  sym(1).Node = node;
 
902
} break;
 
903
 
 
904
case 166: {
 
905
  AST::NotExpression *node = new (pool) AST::NotExpression(sym(2).Expression);
 
906
  node->notToken = loc(1);
 
907
  sym(1).Node = node;
 
908
} break;
 
909
 
 
910
case 168: {
 
911
  AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
 
912
    QSOperator::Mul, sym(3).Expression);
 
913
  node->operatorToken = loc(2);
 
914
  sym(1).Node = node;
 
915
} break;
 
916
 
 
917
case 169: {
 
918
  AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
 
919
    QSOperator::Div, sym(3).Expression);
 
920
  node->operatorToken = loc(2);
 
921
  sym(1).Node = node;
 
922
} break;
 
923
 
 
924
case 170: {
 
925
  AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
 
926
    QSOperator::Mod, sym(3).Expression);
 
927
  node->operatorToken = loc(2);
 
928
  sym(1).Node = node;
 
929
} break;
 
930
 
 
931
case 172: {
 
932
  AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
 
933
    QSOperator::Add, sym(3).Expression);
 
934
  node->operatorToken = loc(2);
 
935
  sym(1).Node = node;
 
936
} break;
 
937
 
 
938
case 173: {
 
939
  AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
 
940
    QSOperator::Sub, sym(3).Expression);
 
941
  node->operatorToken = loc(2);
 
942
  sym(1).Node = node;
 
943
} break;
 
944
 
 
945
case 175: {
 
946
  AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
 
947
    QSOperator::LShift, sym(3).Expression);
 
948
  node->operatorToken = loc(2);
 
949
  sym(1).Node = node;
 
950
} break;
 
951
 
 
952
case 176: {
 
953
  AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
 
954
    QSOperator::RShift, sym(3).Expression);
 
955
  node->operatorToken = loc(2);
 
956
  sym(1).Node = node;
 
957
} break;
 
958
 
 
959
case 177: {
 
960
  AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
 
961
    QSOperator::URShift, sym(3).Expression);
 
962
  node->operatorToken = loc(2);
 
963
  sym(1).Node = node;
 
964
} break;
 
965
 
 
966
case 179: {
 
967
  AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
 
968
    QSOperator::Lt, sym(3).Expression);
 
969
  node->operatorToken = loc(2);
 
970
  sym(1).Node = node;
 
971
} break;
 
972
 
 
973
case 180: {
 
974
  AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
 
975
    QSOperator::Gt, sym(3).Expression);
 
976
  node->operatorToken = loc(2);
 
977
  sym(1).Node = node;
 
978
} break;
 
979
 
 
980
case 181: {
 
981
  AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
 
982
    QSOperator::Le, sym(3).Expression);
 
983
  node->operatorToken = loc(2);
 
984
  sym(1).Node = node;
 
985
} break;
 
986
 
 
987
case 182: {
 
988
  AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
 
989
    QSOperator::Ge, sym(3).Expression);
 
990
  node->operatorToken = loc(2);
 
991
  sym(1).Node = node;
 
992
} break;
 
993
 
 
994
case 183: {
 
995
  AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
 
996
    QSOperator::InstanceOf, sym(3).Expression);
 
997
  node->operatorToken = loc(2);
 
998
  sym(1).Node = node;
 
999
} break;
 
1000
 
 
1001
case 184: {
 
1002
  AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
 
1003
    QSOperator::In, sym(3).Expression);
 
1004
  node->operatorToken = loc(2);
 
1005
  sym(1).Node = node;
 
1006
} break;
 
1007
 
 
1008
case 186: {
 
1009
  AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
 
1010
    QSOperator::Lt, sym(3).Expression);
 
1011
  node->operatorToken = loc(2);
 
1012
  sym(1).Node = node;
 
1013
} break;
 
1014
 
 
1015
case 187: {
 
1016
  AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
 
1017
    QSOperator::Gt, sym(3).Expression);
 
1018
  node->operatorToken = loc(2);
 
1019
  sym(1).Node = node;
 
1020
} break;
 
1021
 
 
1022
case 188: {
 
1023
  AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
 
1024
    QSOperator::Le, sym(3).Expression);
 
1025
  node->operatorToken = loc(2);
 
1026
  sym(1).Node = node;
 
1027
} break;
 
1028
 
 
1029
case 189: {
 
1030
  AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
 
1031
   QSOperator::Ge, sym(3).Expression);
 
1032
  node->operatorToken = loc(2);
 
1033
  sym(1).Node = node;
 
1034
} break;
 
1035
 
 
1036
case 190: {
 
1037
  AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
 
1038
    QSOperator::InstanceOf, sym(3).Expression);
 
1039
  node->operatorToken = loc(2);
 
1040
  sym(1).Node = node;
 
1041
} break;
 
1042
 
 
1043
case 192: {
 
1044
  AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
 
1045
    QSOperator::Equal, sym(3).Expression);
 
1046
  node->operatorToken = loc(2);
 
1047
  sym(1).Node = node;
 
1048
} break;
 
1049
 
 
1050
case 193: {
 
1051
  AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
 
1052
    QSOperator::NotEqual, sym(3).Expression);
 
1053
  node->operatorToken = loc(2);
 
1054
  sym(1).Node = node;
 
1055
} break;
 
1056
 
 
1057
case 194: {
 
1058
  AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
 
1059
    QSOperator::StrictEqual, sym(3).Expression);
 
1060
  node->operatorToken = loc(2);
 
1061
  sym(1).Node = node;
 
1062
} break;
 
1063
 
 
1064
case 195: {
 
1065
  AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
 
1066
    QSOperator::StrictNotEqual, sym(3).Expression);
 
1067
  node->operatorToken = loc(2);
 
1068
  sym(1).Node = node;
 
1069
} break;
 
1070
 
 
1071
case 197: {
 
1072
  AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
 
1073
    QSOperator::Equal, sym(3).Expression);
 
1074
  node->operatorToken = loc(2);
 
1075
  sym(1).Node = node;
 
1076
} break;
 
1077
 
 
1078
case 198: {
 
1079
  AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
 
1080
    QSOperator::NotEqual, sym(3).Expression);
 
1081
  node->operatorToken = loc(2);
 
1082
  sym(1).Node = node;
 
1083
} break;
 
1084
 
 
1085
case 199: {
 
1086
  AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
 
1087
    QSOperator::StrictEqual, sym(3).Expression);
 
1088
  node->operatorToken = loc(2);
 
1089
  sym(1).Node = node;
 
1090
} break;
 
1091
 
 
1092
case 200: {
 
1093
  AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
 
1094
    QSOperator::StrictNotEqual, sym(3).Expression);
 
1095
  node->operatorToken = loc(2);
 
1096
  sym(1).Node = node;
 
1097
} break;
 
1098
 
 
1099
case 202: {
 
1100
  AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
 
1101
    QSOperator::BitAnd, sym(3).Expression);
 
1102
  node->operatorToken = loc(2);
 
1103
  sym(1).Node = node;
 
1104
} break;
 
1105
 
 
1106
case 204: {
 
1107
  AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
 
1108
    QSOperator::BitAnd, sym(3).Expression);
 
1109
  node->operatorToken = loc(2);
 
1110
  sym(1).Node = node;
 
1111
} break;
 
1112
 
 
1113
case 206: {
 
1114
  AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
 
1115
    QSOperator::BitXor, sym(3).Expression);
 
1116
  node->operatorToken = loc(2);
 
1117
  sym(1).Node = node;
 
1118
} break;
 
1119
 
 
1120
case 208: {
 
1121
  AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
 
1122
    QSOperator::BitXor, sym(3).Expression);
 
1123
  node->operatorToken = loc(2);
 
1124
  sym(1).Node = node;
 
1125
} break;
 
1126
 
 
1127
case 210: {
 
1128
  AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
 
1129
    QSOperator::BitOr, sym(3).Expression);
 
1130
  node->operatorToken = loc(2);
 
1131
  sym(1).Node = node;
 
1132
} break;
 
1133
 
 
1134
case 212: {
 
1135
  AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
 
1136
    QSOperator::BitOr, sym(3).Expression);
 
1137
  node->operatorToken = loc(2);
 
1138
  sym(1).Node = node;
 
1139
} break;
 
1140
 
 
1141
case 214: {
 
1142
  AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
 
1143
    QSOperator::And, sym(3).Expression);
 
1144
  node->operatorToken = loc(2);
 
1145
  sym(1).Node = node;
 
1146
} break;
 
1147
 
 
1148
case 216: {
 
1149
  AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
 
1150
    QSOperator::And, sym(3).Expression);
 
1151
  node->operatorToken = loc(2);
 
1152
  sym(1).Node = node;
 
1153
} break;
 
1154
 
 
1155
case 218: {
 
1156
  AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
 
1157
    QSOperator::Or, sym(3).Expression);
 
1158
  node->operatorToken = loc(2);
 
1159
  sym(1).Node = node;
 
1160
} break;
 
1161
 
 
1162
case 220: {
 
1163
  AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
 
1164
    QSOperator::Or, sym(3).Expression);
 
1165
  node->operatorToken = loc(2);
 
1166
  sym(1).Node = node;
 
1167
} break;
 
1168
 
 
1169
case 222: {
 
1170
  AST::ConditionalExpression *node = new (pool) AST::ConditionalExpression(sym(1).Expression,
 
1171
    sym(3).Expression, sym(5).Expression);
 
1172
  node->questionToken = loc(2);
 
1173
  node->colonToken = loc(4);
 
1174
  sym(1).Node = node;
 
1175
} break;
 
1176
 
 
1177
case 224: {
 
1178
  AST::ConditionalExpression *node = new (pool) AST::ConditionalExpression(sym(1).Expression,
 
1179
    sym(3).Expression, sym(5).Expression);
 
1180
  node->questionToken = loc(2);
 
1181
  node->colonToken = loc(4);
 
1182
  sym(1).Node = node;
 
1183
} break;
 
1184
 
 
1185
case 226: {
 
1186
  AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
 
1187
    sym(2).ival, sym(3).Expression);
 
1188
  node->operatorToken = loc(2);
 
1189
  sym(1).Node = node;
 
1190
} break;
 
1191
 
 
1192
case 228: {
 
1193
  AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression,
 
1194
    sym(2).ival, sym(3).Expression);
 
1195
  node->operatorToken = loc(2);
 
1196
  sym(1).Node = node;
 
1197
} break;
 
1198
 
 
1199
case 229: {
 
1200
  sym(1).ival = QSOperator::Assign;
 
1201
} break;
 
1202
 
 
1203
case 230: {
 
1204
  sym(1).ival = QSOperator::InplaceMul;
 
1205
} break;
 
1206
 
 
1207
case 231: {
 
1208
  sym(1).ival = QSOperator::InplaceDiv;
 
1209
} break;
 
1210
 
 
1211
case 232: {
 
1212
  sym(1).ival = QSOperator::InplaceMod;
 
1213
} break;
 
1214
 
 
1215
case 233: {
 
1216
  sym(1).ival = QSOperator::InplaceAdd;
 
1217
} break;
 
1218
 
 
1219
case 234: {
 
1220
  sym(1).ival = QSOperator::InplaceSub;
 
1221
} break;
 
1222
 
 
1223
case 235: {
 
1224
  sym(1).ival = QSOperator::InplaceLeftShift;
 
1225
} break;
 
1226
 
 
1227
case 236: {
 
1228
  sym(1).ival = QSOperator::InplaceRightShift;
 
1229
} break;
 
1230
 
 
1231
case 237: {
 
1232
  sym(1).ival = QSOperator::InplaceURightShift;
 
1233
} break;
 
1234
 
 
1235
case 238: {
 
1236
  sym(1).ival = QSOperator::InplaceAnd;
 
1237
} break;
 
1238
 
 
1239
case 239: {
 
1240
  sym(1).ival = QSOperator::InplaceXor;
 
1241
} break;
 
1242
 
 
1243
case 240: {
 
1244
  sym(1).ival = QSOperator::InplaceOr;
 
1245
} break;
 
1246
 
 
1247
case 242: {
 
1248
  AST::Expression *node = new (pool) AST::Expression(sym(1).Expression, sym(3).Expression);
 
1249
  node->commaToken = loc(2);
 
1250
  sym(1).Node = node;
 
1251
} break;
 
1252
 
 
1253
case 243: {
 
1254
  sym(1).Node = 0;
 
1255
} break;
 
1256
 
 
1257
case 246: {
 
1258
  AST::Expression *node = new (pool) AST::Expression(sym(1).Expression, sym(3).Expression);
 
1259
  node->commaToken = loc(2);
 
1260
  sym(1).Node = node;
 
1261
} break;
 
1262
 
 
1263
case 247: {
 
1264
  sym(1).Node = 0;
 
1265
} break;
 
1266
 
 
1267
case 264: {
 
1268
  AST::Block *node = new (pool) AST::Block(sym(2).StatementList);
 
1269
  node->lbraceToken = loc(1);
 
1270
  node->rbraceToken = loc(3);
 
1271
  sym(1).Node = node;
 
1272
} break;
 
1273
 
 
1274
case 265: {
 
1275
  sym(1).Node = new (pool) AST::StatementList(sym(1).Statement);
 
1276
} break;
 
1277
 
 
1278
case 266: {
 
1279
  sym(1).Node = new (pool) AST::StatementList(sym(1).StatementList, sym(2).Statement);
 
1280
} break;
 
1281
 
 
1282
case 267: {
 
1283
  sym(1).Node = 0;
 
1284
} break;
 
1285
 
 
1286
case 268: {
 
1287
  sym(1).Node = sym(1).StatementList->finish ();
 
1288
} break;
 
1289
 
 
1290
case 270: {
 
1291
  AST::VariableStatement *node = new (pool) AST::VariableStatement(
 
1292
     sym(2).VariableDeclarationList->finish (/*readOnly=*/sym(1).ival == T_CONST));
 
1293
  node->declarationKindToken = loc(1);
 
1294
  node->semicolonToken = loc(3);
 
1295
  sym(1).Node = node;
 
1296
} break;
 
1297
 
 
1298
case 271: {
 
1299
  sym(1).ival = T_CONST;
 
1300
} break;
 
1301
 
 
1302
case 272: {
 
1303
  sym(1).ival = T_VAR;
 
1304
} break;
 
1305
 
 
1306
case 273: {
 
1307
  sym(1).Node = new (pool) AST::VariableDeclarationList(sym(1).VariableDeclaration);
 
1308
} break;
 
1309
 
 
1310
case 274: {
 
1311
  AST::VariableDeclarationList *node = new (pool) AST::VariableDeclarationList(
 
1312
    sym(1).VariableDeclarationList, sym(3).VariableDeclaration);
 
1313
  node->commaToken = loc(2);
 
1314
  sym(1).Node = node;
 
1315
} break;
 
1316
 
 
1317
case 275: {
 
1318
  sym(1).Node = new (pool) AST::VariableDeclarationList(sym(1).VariableDeclaration);
 
1319
} break;
 
1320
 
 
1321
case 276: {
 
1322
  sym(1).Node = new (pool) AST::VariableDeclarationList(sym(1).VariableDeclarationList, sym(3).VariableDeclaration);
 
1323
} break;
 
1324
 
 
1325
case 277: {
 
1326
  AST::VariableDeclaration *node = new (pool) AST::VariableDeclaration(stringRef(1), sym(2).Expression);
 
1327
  node->identifierToken = loc(1);
 
1328
  sym(1).Node = node;
 
1329
} break;
 
1330
 
 
1331
case 278: {
 
1332
  AST::VariableDeclaration *node = new (pool) AST::VariableDeclaration(stringRef(1), sym(2).Expression);
 
1333
  node->identifierToken = loc(1);
 
1334
  sym(1).Node = node;
 
1335
} break;
 
1336
 
 
1337
case 279: {
 
1338
  // ### TODO: AST for initializer
 
1339
  sym(1) = sym(2);
 
1340
} break;
 
1341
 
 
1342
case 280: {
 
1343
  sym(1).Node = 0;
 
1344
} break;
 
1345
 
 
1346
case 282: {
 
1347
  // ### TODO: AST for initializer
 
1348
  sym(1) = sym(2);
 
1349
} break;
 
1350
 
 
1351
case 283: {
 
1352
  sym(1).Node = 0;
 
1353
} break;
 
1354
 
 
1355
case 285: {
 
1356
  AST::EmptyStatement *node = new (pool) AST::EmptyStatement();
 
1357
  node->semicolonToken = loc(1);
 
1358
  sym(1).Node = node;
 
1359
} break;
 
1360
 
 
1361
case 287: {
 
1362
  AST::ExpressionStatement *node = new (pool) AST::ExpressionStatement(sym(1).Expression);
 
1363
  node->semicolonToken = loc(2);
 
1364
  sym(1).Node = node;
 
1365
} break;
 
1366
 
 
1367
case 288: {
 
1368
  AST::IfStatement *node = new (pool) AST::IfStatement(sym(3).Expression, sym(5).Statement, sym(7).Statement);
 
1369
  node->ifToken = loc(1);
 
1370
  node->lparenToken = loc(2);
 
1371
  node->rparenToken = loc(4);
 
1372
  node->elseToken = loc(6);
 
1373
  sym(1).Node = node;
 
1374
} break;
 
1375
 
 
1376
case 289: {
 
1377
  AST::IfStatement *node = new (pool) AST::IfStatement(sym(3).Expression, sym(5).Statement);
 
1378
  node->ifToken = loc(1);
 
1379
  node->lparenToken = loc(2);
 
1380
  node->rparenToken = loc(4);
 
1381
  sym(1).Node = node;
 
1382
} break;
 
1383
 
 
1384
case 291: {
 
1385
  AST::DoWhileStatement *node = new (pool) AST::DoWhileStatement(sym(2).Statement, sym(5).Expression);
 
1386
  node->doToken = loc(1);
 
1387
  node->whileToken = loc(3);
 
1388
  node->lparenToken = loc(4);
 
1389
  node->rparenToken = loc(6);
 
1390
  node->semicolonToken = loc(7);
 
1391
  sym(1).Node = node;
 
1392
} break;
 
1393
 
 
1394
case 292: {
 
1395
  AST::WhileStatement *node = new (pool) AST::WhileStatement(sym(3).Expression, sym(5).Statement);
 
1396
  node->whileToken = loc(1);
 
1397
  node->lparenToken = loc(2);
 
1398
  node->rparenToken = loc(4);
 
1399
  sym(1).Node = node;
 
1400
} break;
 
1401
 
 
1402
case 293: {
 
1403
  AST::ForStatement *node = new (pool) AST::ForStatement(sym(3).Expression,
 
1404
    sym(5).Expression, sym(7).Expression, sym(9).Statement);
 
1405
  node->forToken = loc(1);
 
1406
  node->lparenToken = loc(2);
 
1407
  node->firstSemicolonToken = loc(4);
 
1408
  node->secondSemicolonToken = loc(6);
 
1409
  node->rparenToken = loc(8);
 
1410
  sym(1).Node = node;
 
1411
} break;
 
1412
 
 
1413
case 294: {
 
1414
  AST::LocalForStatement *node = new (pool) AST::LocalForStatement(
 
1415
     sym(4).VariableDeclarationList->finish (/*readOnly=*/false), sym(6).Expression,
 
1416
     sym(8).Expression, sym(10).Statement);
 
1417
  node->forToken = loc(1);
 
1418
  node->lparenToken = loc(2);
 
1419
  node->varToken = loc(3);
 
1420
  node->firstSemicolonToken = loc(5);
 
1421
  node->secondSemicolonToken = loc(7);
 
1422
  node->rparenToken = loc(9);
 
1423
  sym(1).Node = node;
 
1424
} break;
 
1425
 
 
1426
case 295: {
 
1427
  AST:: ForEachStatement *node = new (pool) AST::ForEachStatement(sym(3).Expression,
 
1428
    sym(5).Expression, sym(7).Statement);
 
1429
  node->forToken = loc(1);
 
1430
  node->lparenToken = loc(2);
 
1431
  node->inToken = loc(4);
 
1432
  node->rparenToken = loc(6);
 
1433
  sym(1).Node = node;
 
1434
} break;
 
1435
 
 
1436
case 296: {
 
1437
  AST::LocalForEachStatement *node = new (pool) AST::LocalForEachStatement(
 
1438
    sym(4).VariableDeclaration, sym(6).Expression, sym(8).Statement);
 
1439
  node->forToken = loc(1);
 
1440
  node->lparenToken = loc(2);
 
1441
  node->varToken = loc(3);
 
1442
  node->inToken = loc(5);
 
1443
  node->rparenToken = loc(7);
 
1444
  sym(1).Node = node;
 
1445
} break;
 
1446
 
 
1447
case 298: {
 
1448
  AST::ContinueStatement *node = new (pool) AST::ContinueStatement();
 
1449
  node->continueToken = loc(1);
 
1450
  node->semicolonToken = loc(2);
 
1451
  sym(1).Node = node;
 
1452
} break;
 
1453
 
 
1454
case 300: {
 
1455
  AST::ContinueStatement *node = new (pool) AST::ContinueStatement(stringRef(2));
 
1456
  node->continueToken = loc(1);
 
1457
  node->identifierToken = loc(2);
 
1458
  node->semicolonToken = loc(3);
 
1459
  sym(1).Node = node;
 
1460
} break;
 
1461
 
 
1462
case 302: {
 
1463
  AST::BreakStatement *node = new (pool) AST::BreakStatement(QStringRef());
 
1464
  node->breakToken = loc(1);
 
1465
  node->semicolonToken = loc(2);
 
1466
  sym(1).Node = node;
 
1467
} break;
 
1468
 
 
1469
case 304: {
 
1470
  AST::BreakStatement *node = new (pool) AST::BreakStatement(stringRef(2));
 
1471
  node->breakToken = loc(1);
 
1472
  node->identifierToken = loc(2);
 
1473
  node->semicolonToken = loc(3);
 
1474
  sym(1).Node = node;
 
1475
} break;
 
1476
 
 
1477
case 306: {
 
1478
  AST::ReturnStatement *node = new (pool) AST::ReturnStatement(sym(2).Expression);
 
1479
  node->returnToken = loc(1);
 
1480
  node->semicolonToken = loc(3);
 
1481
  sym(1).Node = node;
 
1482
} break;
 
1483
 
 
1484
case 307: {
 
1485
  AST::WithStatement *node = new (pool) AST::WithStatement(sym(3).Expression, sym(5).Statement);
 
1486
  node->withToken = loc(1);
 
1487
  node->lparenToken = loc(2);
 
1488
  node->rparenToken = loc(4);
 
1489
  sym(1).Node = node;
 
1490
} break;
 
1491
 
 
1492
case 308: {
 
1493
  AST::SwitchStatement *node = new (pool) AST::SwitchStatement(sym(3).Expression, sym(5).CaseBlock);
 
1494
  node->switchToken = loc(1);
 
1495
  node->lparenToken = loc(2);
 
1496
  node->rparenToken = loc(4);
 
1497
  sym(1).Node = node;
 
1498
} break;
 
1499
 
 
1500
case 309: {
 
1501
  AST::CaseBlock *node = new (pool) AST::CaseBlock(sym(2).CaseClauses);
 
1502
  node->lbraceToken = loc(1);
 
1503
  node->rbraceToken = loc(3);
 
1504
  sym(1).Node = node;
 
1505
} break;
 
1506
 
 
1507
case 310: {
 
1508
  AST::CaseBlock *node = new (pool) AST::CaseBlock(sym(2).CaseClauses, sym(3).DefaultClause, sym(4).CaseClauses);
 
1509
  node->lbraceToken = loc(1);
 
1510
  node->rbraceToken = loc(5);
 
1511
  sym(1).Node = node;
 
1512
} break;
 
1513
 
 
1514
case 311: {
 
1515
  sym(1).Node = new (pool) AST::CaseClauses(sym(1).CaseClause);
 
1516
} break;
 
1517
 
 
1518
case 312: {
 
1519
  sym(1).Node = new (pool) AST::CaseClauses(sym(1).CaseClauses, sym(2).CaseClause);
 
1520
} break;
 
1521
 
 
1522
case 313: {
 
1523
  sym(1).Node = 0;
 
1524
} break;
 
1525
 
 
1526
case 314: {
 
1527
  sym(1).Node = sym(1).CaseClauses->finish ();
 
1528
} break;
 
1529
 
 
1530
case 315: {
 
1531
  AST::CaseClause *node = new (pool) AST::CaseClause(sym(2).Expression, sym(4).StatementList);
 
1532
  node->caseToken = loc(1);
 
1533
  node->colonToken = loc(3);
 
1534
  sym(1).Node = node;
 
1535
} break;
 
1536
 
 
1537
case 316: {
 
1538
  AST::DefaultClause *node = new (pool) AST::DefaultClause(sym(3).StatementList);
 
1539
  node->defaultToken = loc(1);
 
1540
  node->colonToken = loc(2);
 
1541
  sym(1).Node = node;
 
1542
} break;
 
1543
case 317:
 
1544
case 318: {
 
1545
  AST::LabelledStatement *node = new (pool) AST::LabelledStatement(stringRef(1), sym(3).Statement);
 
1546
  node->identifierToken = loc(1);
 
1547
  node->colonToken = loc(2);
 
1548
  sym(1).Node = node;
 
1549
} break;
 
1550
 
 
1551
case 319: {
 
1552
  AST::LabelledStatement *node = new (pool) AST::LabelledStatement(stringRef(1), sym(3).Statement);
 
1553
  node->identifierToken = loc(1);
 
1554
  node->colonToken = loc(2);
 
1555
  sym(1).Node = node;
 
1556
} break;
 
1557
 
 
1558
case 321: {
 
1559
  AST::ThrowStatement *node = new (pool) AST::ThrowStatement(sym(2).Expression);
 
1560
  node->throwToken = loc(1);
 
1561
  node->semicolonToken = loc(3);
 
1562
  sym(1).Node = node;
 
1563
} break;
 
1564
 
 
1565
case 322: {
 
1566
  AST::TryStatement *node = new (pool) AST::TryStatement(sym(2).Statement, sym(3).Catch);
 
1567
  node->tryToken = loc(1);
 
1568
  sym(1).Node = node;
 
1569
} break;
 
1570
 
 
1571
case 323: {
 
1572
  AST::TryStatement *node = new (pool) AST::TryStatement(sym(2).Statement, sym(3).Finally);
 
1573
  node->tryToken = loc(1);
 
1574
  sym(1).Node = node;
 
1575
} break;
 
1576
 
 
1577
case 324: {
 
1578
  AST::TryStatement *node = new (pool) AST::TryStatement(sym(2).Statement, sym(3).Catch, sym(4).Finally);
 
1579
  node->tryToken = loc(1);
 
1580
  sym(1).Node = node;
 
1581
} break;
 
1582
 
 
1583
case 325: {
 
1584
  AST::Catch *node = new (pool) AST::Catch(stringRef(3), sym(5).Block);
 
1585
  node->catchToken = loc(1);
 
1586
  node->lparenToken = loc(2);
 
1587
  node->identifierToken = loc(3);
 
1588
  node->rparenToken = loc(4);
 
1589
  sym(1).Node = node;
 
1590
} break;
 
1591
 
 
1592
case 326: {
 
1593
  AST::Finally *node = new (pool) AST::Finally(sym(2).Block);
 
1594
  node->finallyToken = loc(1);
 
1595
  sym(1).Node = node;
 
1596
} break;
 
1597
 
 
1598
case 328: {
 
1599
  AST::DebuggerStatement *node = new (pool) AST::DebuggerStatement();
 
1600
  node->debuggerToken = loc(1);
 
1601
  node->semicolonToken = loc(2);
 
1602
  sym(1).Node = node;
 
1603
} break;
 
1604
 
 
1605
case 329: {
 
1606
  AST::FunctionDeclaration *node = new (pool) AST::FunctionDeclaration(stringRef(2), sym(4).FormalParameterList, sym(7).FunctionBody);
 
1607
  node->functionToken = loc(1);
 
1608
  node->identifierToken = loc(2);
 
1609
  node->lparenToken = loc(3);
 
1610
  node->rparenToken = loc(5);
 
1611
  node->lbraceToken = loc(6);
 
1612
  node->rbraceToken = loc(8);
 
1613
  sym(1).Node = node;
 
1614
} break;
 
1615
 
 
1616
case 330: {
 
1617
  AST::FunctionExpression *node = new (pool) AST::FunctionExpression(stringRef(2), sym(4).FormalParameterList, sym(7).FunctionBody);
 
1618
  node->functionToken = loc(1);
 
1619
  if (! stringRef(2).isNull())
 
1620
      node->identifierToken = loc(2);
 
1621
  node->lparenToken = loc(3);
 
1622
  node->rparenToken = loc(5);
 
1623
  node->lbraceToken = loc(6);
 
1624
  node->rbraceToken = loc(8);
 
1625
  sym(1).Node = node;
 
1626
} break;
 
1627
 
 
1628
case 331: {
 
1629
  AST::FormalParameterList *node = new (pool) AST::FormalParameterList(stringRef(1));
 
1630
  node->identifierToken = loc(1);
 
1631
  sym(1).Node = node;
 
1632
} break;
 
1633
 
 
1634
case 332: {
 
1635
  AST::FormalParameterList *node = new (pool) AST::FormalParameterList(sym(1).FormalParameterList, stringRef(3));
 
1636
  node->commaToken = loc(2);
 
1637
  node->identifierToken = loc(3);
 
1638
  sym(1).Node = node;
 
1639
} break;
 
1640
 
 
1641
case 333: {
 
1642
  sym(1).Node = 0;
 
1643
} break;
 
1644
 
 
1645
case 334: {
 
1646
  sym(1).Node = sym(1).FormalParameterList->finish ();
 
1647
} break;
 
1648
 
 
1649
case 335: {
 
1650
  sym(1).Node = 0;
 
1651
} break;
 
1652
 
 
1653
case 337: {
 
1654
  sym(1).Node = new (pool) AST::FunctionBody(sym(1).SourceElements->finish ());
 
1655
} break;
 
1656
 
 
1657
case 339: {
 
1658
  sym(1).Node = new (pool) AST::Program(sym(1).SourceElements->finish ());
 
1659
} break;
 
1660
 
 
1661
case 340: {
 
1662
  sym(1).Node = new (pool) AST::SourceElements(sym(1).SourceElement);
 
1663
} break;
 
1664
 
 
1665
case 341: {
 
1666
  sym(1).Node = new (pool) AST::SourceElements(sym(1).SourceElements, sym(2).SourceElement);
 
1667
} break;
 
1668
 
 
1669
case 342: {
 
1670
  sym(1).Node = new (pool) AST::StatementSourceElement(sym(1).Statement);
 
1671
} break;
 
1672
 
 
1673
case 343: {
 
1674
  sym(1).Node = new (pool) AST::FunctionSourceElement(sym(1).FunctionDeclaration);
 
1675
} break;
 
1676
 
 
1677
case 344: {
 
1678
  stringRef(1) = QStringRef();
 
1679
} break;
 
1680
 
 
1681
case 346: {
 
1682
  sym(1).Node = 0;
 
1683
} break;
 
1684
 
 
1685
            } // switch
 
1686
            action = nt_action(state_stack[tos], lhs[r] - TERMINAL_COUNT);
 
1687
        } // if
 
1688
    } while (action != 0);
 
1689
 
 
1690
    if (first_token == last_token) {
 
1691
        const int errorState = state_stack[tos];
 
1692
 
 
1693
        // automatic insertion of `;'
 
1694
        if (yytoken != -1 && t_action(errorState, T_AUTOMATIC_SEMICOLON) && lexer->canInsertAutomaticSemicolon(yytoken)) {
 
1695
            SavedToken &tk = token_buffer[0];
 
1696
            tk.token = yytoken;
 
1697
            tk.dval = yylval;
 
1698
            tk.spell = yytokenspell;
 
1699
            tk.loc = yylloc;
 
1700
 
 
1701
            yylloc = yyprevlloc;
 
1702
            yylloc.offset += yylloc.length;
 
1703
            yylloc.startColumn += yylloc.length;
 
1704
            yylloc.length = 0;
 
1705
 
 
1706
            //const QString msg = qApp->translate("QQmlParser", "Missing `;'");
 
1707
            //diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Warning, yylloc, msg));
 
1708
 
 
1709
            first_token = &token_buffer[0];
 
1710
            last_token = &token_buffer[1];
 
1711
 
 
1712
            yytoken = T_SEMICOLON;
 
1713
            yylval = 0;
 
1714
 
 
1715
            action = errorState;
 
1716
 
 
1717
            goto _Lcheck_token;
 
1718
        }
 
1719
 
 
1720
        hadErrors = true;
 
1721
 
 
1722
        token_buffer[0].token = yytoken;
 
1723
        token_buffer[0].dval = yylval;
 
1724
        token_buffer[0].spell = yytokenspell;
 
1725
        token_buffer[0].loc = yylloc;
 
1726
 
 
1727
        token_buffer[1].token = yytoken       = lexer->lex();
 
1728
        token_buffer[1].dval  = yylval        = lexer->tokenValue();
 
1729
        token_buffer[1].spell = yytokenspell  = lexer->tokenSpell();
 
1730
        token_buffer[1].loc   = yylloc        = location(lexer);
 
1731
 
 
1732
        if (t_action(errorState, yytoken)) {
 
1733
            QString msg;
 
1734
            int token = token_buffer[0].token;
 
1735
            if (token < 0 || token >= TERMINAL_COUNT)
 
1736
                msg = qApp->translate("QQmlParser", "Syntax error");
 
1737
            else
 
1738
                msg = qApp->translate("QQmlParser", "Unexpected token `%1'").arg(QLatin1String(spell[token]));
 
1739
            diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, token_buffer[0].loc, msg));
 
1740
 
 
1741
            action = errorState;
 
1742
            goto _Lcheck_token;
 
1743
        }
 
1744
 
 
1745
        static int tokens[] = {
 
1746
            T_PLUS,
 
1747
            T_EQ,
 
1748
 
 
1749
            T_COMMA,
 
1750
            T_COLON,
 
1751
            T_SEMICOLON,
 
1752
 
 
1753
            T_RPAREN, T_RBRACKET, T_RBRACE,
 
1754
 
 
1755
            T_NUMERIC_LITERAL,
 
1756
            T_IDENTIFIER,
 
1757
 
 
1758
            T_LPAREN, T_LBRACKET, T_LBRACE,
 
1759
 
 
1760
            EOF_SYMBOL
 
1761
        };
 
1762
 
 
1763
        for (int *tk = tokens; *tk != EOF_SYMBOL; ++tk) {
 
1764
            int a = t_action(errorState, *tk);
 
1765
            if (a > 0 && t_action(a, yytoken)) {
 
1766
                const QString msg = qApp->translate("QQmlParser", "Expected token `%1'").arg(QLatin1String(spell[*tk]));
 
1767
                diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, token_buffer[0].loc, msg));
 
1768
 
 
1769
                yytoken = *tk;
 
1770
                yylval = 0;
 
1771
                yylloc = token_buffer[0].loc;
 
1772
                yylloc.length = 0;
 
1773
 
 
1774
                first_token = &token_buffer[0];
 
1775
                last_token = &token_buffer[2];
 
1776
 
 
1777
                action = errorState;
 
1778
                goto _Lcheck_token;
 
1779
            }
 
1780
        }
 
1781
 
 
1782
        for (int tk = 1; tk < TERMINAL_COUNT; ++tk) {
 
1783
            if (tk == T_AUTOMATIC_SEMICOLON || tk == T_FEED_UI_PROGRAM    ||
 
1784
                tk == T_FEED_JS_STATEMENT   || tk == T_FEED_JS_EXPRESSION ||
 
1785
                tk == T_FEED_JS_SOURCE_ELEMENT)
 
1786
               continue;
 
1787
 
 
1788
            int a = t_action(errorState, tk);
 
1789
            if (a > 0 && t_action(a, yytoken)) {
 
1790
                const QString msg = qApp->translate("QQmlParser", "Expected token `%1'").arg(QLatin1String(spell[tk]));
 
1791
                diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, token_buffer[0].loc, msg));
 
1792
 
 
1793
                yytoken = tk;
 
1794
                yylval = 0;
 
1795
                yylloc = token_buffer[0].loc;
 
1796
                yylloc.length = 0;
 
1797
 
 
1798
                action = errorState;
 
1799
                goto _Lcheck_token;
 
1800
            }
 
1801
        }
 
1802
 
 
1803
        const QString msg = qApp->translate("QQmlParser", "Syntax error");
 
1804
        diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, token_buffer[0].loc, msg));
 
1805
    }
 
1806
 
 
1807
    return false;
 
1808
}
 
1809
 
 
1810
QT_QML_END_NAMESPACE
 
1811
 
 
1812