1
/****************************************************************************
3
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
4
** All rights reserved.
5
** Contact: Nokia Corporation (qt-info@nokia.com)
7
** This file is part of the QtScript module of the Qt Toolkit.
9
** $QT_BEGIN_LICENSE:LGPL$
10
** No Commercial Usage
11
** This file contains pre-release code and may not be distributed.
12
** You may use this file in accordance with the terms and conditions
13
** contained in the Technology Preview License Agreement accompanying
16
** GNU Lesser General Public License Usage
17
** Alternatively, this file may be used under the terms of the GNU Lesser
18
** General Public License version 2.1 as published by the Free Software
19
** Foundation and appearing in the file LICENSE.LGPL included in the
20
** packaging of this file. Please review the following information to
21
** ensure the GNU Lesser General Public License version 2.1 requirements
22
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
24
** In addition, as a special exception, Nokia gives you certain additional
25
** rights. These rights are described in the Nokia Qt LGPL Exception
26
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
28
** If you have questions regarding the use of this file, please contact
29
** Nokia at qt-info@nokia.com.
40
****************************************************************************/
42
#ifndef QSCRIPTAST_P_H
43
#define QSCRIPTAST_P_H
49
// This file is not part of the Qt API. It exists purely as an
50
// implementation detail. This header file may change from version to
51
// version without notice, or even be removed.
56
#include <QtCore/QString>
58
#include "qscriptastvisitor_p.h"
62
class QScriptNameIdImpl;
64
namespace QSOperator // ### rename
105
} // namespace QSOperator
107
namespace QScript { namespace AST {
117
Kind_IdentifierExpression,
128
Kind_PropertyNameAndValueList,
130
Kind_IdentifierPropertyName,
131
Kind_StringLiteralPropertyName,
132
Kind_NumericLiteralPropertyName,
133
Kind_ArrayMemberExpression,
134
Kind_FieldMemberExpression,
135
Kind_NewMemberExpression,
139
Kind_PostIncrementExpression,
140
Kind_PostDecrementExpression,
141
Kind_DeleteExpression,
143
Kind_TypeOfExpression,
144
Kind_PreIncrementExpression,
145
Kind_PreDecrementExpression,
146
Kind_UnaryPlusExpression,
147
Kind_UnaryMinusExpression,
148
Kind_TildeExpression,
150
Kind_BinaryExpression,
151
Kind_ConditionalExpression,
155
Kind_VariableStatement,
156
Kind_VariableDeclarationList,
157
Kind_VariableDeclaration,
159
Kind_ExpressionStatement,
161
Kind_DoWhileStatement,
164
Kind_LocalForStatement,
165
Kind_ForEachStatement,
166
Kind_LocalForEachStatement,
167
Kind_ContinueStatement,
169
Kind_ReturnStatement,
171
Kind_SwitchStatement,
176
Kind_LabelledStatement,
181
Kind_FunctionDeclaration,
182
Kind_FunctionExpression,
183
Kind_FormalParameterList,
188
Kind_FunctionSourceElement,
189
Kind_StatementSourceElement,
190
Kind_DebuggerStatement
194
startLine(0), startColumn(0),
195
endLine(0), endColumn(0), kind(Kind_Node) {}
199
virtual ExpressionNode *expressionCast();
200
virtual BinaryExpression *binaryExpressionCast();
201
virtual Statement *statementCast();
203
inline void accept(Visitor *visitor)
205
if (visitor->preVisit(this)) {
207
visitor->postVisit(this);
211
static void acceptChild(Node *node, Visitor *visitor)
214
node->accept(visitor);
217
virtual void accept0(Visitor *visitor) = 0;
226
class ExpressionNode: public Node
229
ExpressionNode() { kind = Kind_ExpressionNode; }
230
virtual ~ExpressionNode() {}
232
virtual ExpressionNode *expressionCast();
235
class Statement: public Node
238
Statement() { kind = Kind_Statement; }
239
virtual ~Statement() {}
241
virtual Statement *statementCast();
244
class ThisExpression: public ExpressionNode
247
ThisExpression() { kind = Kind_ThisExpression; }
248
virtual ~ThisExpression() {}
250
virtual void accept0(Visitor *visitor);
253
class IdentifierExpression: public ExpressionNode
256
IdentifierExpression(QScriptNameIdImpl *n):
257
name (n) { kind = Kind_IdentifierExpression; }
259
virtual ~IdentifierExpression() {}
261
virtual void accept0(Visitor *visitor);
264
QScriptNameIdImpl *name;
267
class NullExpression: public ExpressionNode
270
NullExpression() { kind = Kind_NullExpression; }
271
virtual ~NullExpression() {}
273
virtual void accept0(Visitor *visitor);
276
class TrueLiteral: public ExpressionNode
279
TrueLiteral() { kind = Kind_TrueLiteral; }
280
virtual ~TrueLiteral() {}
282
virtual void accept0(Visitor *visitor);
285
class FalseLiteral: public ExpressionNode
288
FalseLiteral() { kind = Kind_FalseLiteral; }
289
virtual ~FalseLiteral() {}
291
virtual void accept0(Visitor *visitor);
294
class NumericLiteral: public ExpressionNode
297
NumericLiteral(double v):
298
value (v) { kind = Kind_NumericLiteral; }
299
virtual ~NumericLiteral() {}
301
virtual void accept0(Visitor *visitor);
307
class StringLiteral: public ExpressionNode
310
StringLiteral(QScriptNameIdImpl *v):
311
value (v) { kind = Kind_StringLiteral; }
313
virtual ~StringLiteral() {}
315
virtual void accept0(Visitor *visitor);
318
QScriptNameIdImpl *value;
321
class RegExpLiteral: public ExpressionNode
324
RegExpLiteral(QScriptNameIdImpl *p, int f):
325
pattern (p), flags (f) { kind = Kind_RegExpLiteral; }
327
virtual ~RegExpLiteral() {}
329
virtual void accept0(Visitor *visitor);
332
QScriptNameIdImpl *pattern;
336
class ArrayLiteral: public ExpressionNode
339
ArrayLiteral(Elision *e):
340
elements (0), elision (e)
341
{ kind = Kind_ArrayLiteral; }
343
ArrayLiteral(ElementList *elts):
344
elements (elts), elision (0)
345
{ kind = Kind_ArrayLiteral; }
347
ArrayLiteral(ElementList *elts, Elision *e):
348
elements (elts), elision (e)
349
{ kind = Kind_ArrayLiteral; }
351
virtual ~ArrayLiteral() {}
353
virtual void accept0(Visitor *visitor);
356
ElementList *elements;
360
class ObjectLiteral: public ExpressionNode
364
properties (0) { kind = Kind_ObjectLiteral; }
366
ObjectLiteral(PropertyNameAndValueList *plist):
367
properties (plist) { kind = Kind_ObjectLiteral; }
369
virtual ~ObjectLiteral() {}
371
virtual void accept0(Visitor *visitor);
374
PropertyNameAndValueList *properties;
377
class ElementList: public Node
380
ElementList(Elision *e, ExpressionNode *expr):
381
elision (e), expression (expr), next (this)
382
{ kind = Kind_ElementList; }
384
ElementList(ElementList *previous, Elision *e, ExpressionNode *expr):
385
elision (e), expression (expr)
387
kind = Kind_ElementList;
388
next = previous->next;
389
previous->next = this;
392
virtual ~ElementList() {}
394
inline ElementList *finish ()
396
ElementList *front = next;
401
virtual void accept0(Visitor *visitor);
405
ExpressionNode *expression;
409
class Elision: public Node
413
next (this) { kind = Kind_Elision; }
415
Elision(Elision *previous)
418
next = previous->next;
419
previous->next = this;
422
virtual ~Elision() {}
424
virtual void accept0(Visitor *visitor);
426
inline Elision *finish ()
428
Elision *front = next;
437
class PropertyNameAndValueList: public Node
440
PropertyNameAndValueList(PropertyName *n, ExpressionNode *v):
441
name (n), value (v), next (this)
442
{ kind = Kind_PropertyNameAndValueList; }
444
PropertyNameAndValueList(PropertyNameAndValueList *previous, PropertyName *n, ExpressionNode *v):
447
kind = Kind_PropertyNameAndValueList;
448
next = previous->next;
449
previous->next = this;
452
virtual ~PropertyNameAndValueList() {}
454
virtual void accept0(Visitor *visitor);
456
inline PropertyNameAndValueList *finish ()
458
PropertyNameAndValueList *front = next;
465
ExpressionNode *value;
466
PropertyNameAndValueList *next;
469
class PropertyName: public Node
472
PropertyName() { kind = Kind_PropertyName; }
473
virtual ~PropertyName() {}
476
class IdentifierPropertyName: public PropertyName
479
IdentifierPropertyName(QScriptNameIdImpl *n):
480
id (n) { kind = Kind_IdentifierPropertyName; }
482
virtual ~IdentifierPropertyName() {}
484
virtual void accept0(Visitor *visitor);
487
QScriptNameIdImpl *id;
490
class StringLiteralPropertyName: public PropertyName
493
StringLiteralPropertyName(QScriptNameIdImpl *n):
494
id (n) { kind = Kind_StringLiteralPropertyName; }
495
virtual ~StringLiteralPropertyName() {}
497
virtual void accept0(Visitor *visitor);
500
QScriptNameIdImpl *id;
503
class NumericLiteralPropertyName: public PropertyName
506
NumericLiteralPropertyName(double n):
507
id (n) { kind = Kind_NumericLiteralPropertyName; }
508
virtual ~NumericLiteralPropertyName() {}
510
virtual void accept0(Visitor *visitor);
516
class ArrayMemberExpression: public ExpressionNode
519
ArrayMemberExpression(ExpressionNode *b, ExpressionNode *e):
520
base (b), expression (e)
521
{ kind = Kind_ArrayMemberExpression; }
523
virtual ~ArrayMemberExpression() {}
525
virtual void accept0(Visitor *visitor);
528
ExpressionNode *base;
529
ExpressionNode *expression;
532
class FieldMemberExpression: public ExpressionNode
535
FieldMemberExpression(ExpressionNode *b, QScriptNameIdImpl *n):
537
{ kind = Kind_FieldMemberExpression; }
539
virtual ~FieldMemberExpression() {}
541
virtual void accept0(Visitor *visitor);
544
ExpressionNode *base;
545
QScriptNameIdImpl *name;
548
class NewMemberExpression: public ExpressionNode
551
NewMemberExpression(ExpressionNode *b, ArgumentList *a):
552
base (b), arguments (a)
553
{ kind = Kind_NewMemberExpression; }
555
virtual ~NewMemberExpression() {}
557
virtual void accept0(Visitor *visitor);
560
ExpressionNode *base;
561
ArgumentList *arguments;
564
class NewExpression: public ExpressionNode
567
NewExpression(ExpressionNode *e):
568
expression (e) { kind = Kind_NewExpression; }
570
virtual ~NewExpression() {}
572
virtual void accept0(Visitor *visitor);
575
ExpressionNode *expression;
578
class CallExpression: public ExpressionNode
581
CallExpression(ExpressionNode *b, ArgumentList *a):
582
base (b), arguments (a)
583
{ kind = Kind_CallExpression; }
585
virtual ~CallExpression() {}
587
virtual void accept0(Visitor *visitor);
590
ExpressionNode *base;
591
ArgumentList *arguments;
594
class ArgumentList: public Node
597
ArgumentList(ExpressionNode *e):
598
expression (e), next (this)
599
{ kind = Kind_ArgumentList; }
601
ArgumentList(ArgumentList *previous, ExpressionNode *e):
604
kind = Kind_ArgumentList;
605
next = previous->next;
606
previous->next = this;
609
virtual ~ArgumentList() {}
611
virtual void accept0(Visitor *visitor);
613
inline ArgumentList *finish ()
615
ArgumentList *front = next;
621
ExpressionNode *expression;
625
class PostIncrementExpression: public ExpressionNode
628
PostIncrementExpression(ExpressionNode *b):
629
base (b) { kind = Kind_PostIncrementExpression; }
631
virtual ~PostIncrementExpression() {}
633
virtual void accept0(Visitor *visitor);
636
ExpressionNode *base;
639
class PostDecrementExpression: public ExpressionNode
642
PostDecrementExpression(ExpressionNode *b):
643
base (b) { kind = Kind_PostDecrementExpression; }
645
virtual ~PostDecrementExpression() {}
647
virtual void accept0(Visitor *visitor);
650
ExpressionNode *base;
653
class DeleteExpression: public ExpressionNode
656
DeleteExpression(ExpressionNode *e):
657
expression (e) { kind = Kind_DeleteExpression; }
658
virtual ~DeleteExpression() {}
660
virtual void accept0(Visitor *visitor);
663
ExpressionNode *expression;
666
class VoidExpression: public ExpressionNode
669
VoidExpression(ExpressionNode *e):
670
expression (e) { kind = Kind_VoidExpression; }
672
virtual ~VoidExpression() {}
674
virtual void accept0(Visitor *visitor);
677
ExpressionNode *expression;
680
class TypeOfExpression: public ExpressionNode
683
TypeOfExpression(ExpressionNode *e):
684
expression (e) { kind = Kind_TypeOfExpression; }
686
virtual ~TypeOfExpression() {}
688
virtual void accept0(Visitor *visitor);
691
ExpressionNode *expression;
694
class PreIncrementExpression: public ExpressionNode
697
PreIncrementExpression(ExpressionNode *e):
698
expression (e) { kind = Kind_PreIncrementExpression; }
700
virtual ~PreIncrementExpression() {}
702
virtual void accept0(Visitor *visitor);
705
ExpressionNode *expression;
708
class PreDecrementExpression: public ExpressionNode
711
PreDecrementExpression(ExpressionNode *e):
712
expression (e) { kind = Kind_PreDecrementExpression; }
714
virtual ~PreDecrementExpression() {}
716
virtual void accept0(Visitor *visitor);
719
ExpressionNode *expression;
722
class UnaryPlusExpression: public ExpressionNode
725
UnaryPlusExpression(ExpressionNode *e):
726
expression (e) { kind = Kind_UnaryPlusExpression; }
728
virtual ~UnaryPlusExpression() {}
730
virtual void accept0(Visitor *visitor);
733
ExpressionNode *expression;
736
class UnaryMinusExpression: public ExpressionNode
739
UnaryMinusExpression(ExpressionNode *e):
740
expression (e) { kind = Kind_UnaryMinusExpression; }
742
virtual ~UnaryMinusExpression() {}
744
virtual void accept0(Visitor *visitor);
747
ExpressionNode *expression;
750
class TildeExpression: public ExpressionNode
753
TildeExpression(ExpressionNode *e):
754
expression (e) { kind = Kind_TildeExpression; }
756
virtual ~TildeExpression() {}
758
virtual void accept0(Visitor *visitor);
761
ExpressionNode *expression;
764
class NotExpression: public ExpressionNode
767
NotExpression(ExpressionNode *e):
768
expression (e) { kind = Kind_NotExpression; }
770
virtual ~NotExpression() {}
772
virtual void accept0(Visitor *visitor);
775
ExpressionNode *expression;
778
class BinaryExpression: public ExpressionNode
781
BinaryExpression(ExpressionNode *l, int o, ExpressionNode *r):
782
left (l), op (o), right (r)
783
{ kind = Kind_BinaryExpression; }
785
virtual ~BinaryExpression() {}
787
virtual BinaryExpression *binaryExpressionCast();
789
virtual void accept0(Visitor *visitor);
792
ExpressionNode *left;
794
ExpressionNode *right;
797
class ConditionalExpression: public ExpressionNode
800
ConditionalExpression(ExpressionNode *e, ExpressionNode *t, ExpressionNode *f):
801
expression (e), ok (t), ko (f)
802
{ kind = Kind_ConditionalExpression; }
804
virtual ~ConditionalExpression() {}
806
virtual void accept0(Visitor *visitor);
809
ExpressionNode *expression;
814
class Expression: public ExpressionNode // ### rename
817
Expression(ExpressionNode *l, ExpressionNode *r):
818
left (l), right (r) { kind = Kind_Expression; }
820
virtual ~Expression() {}
822
virtual void accept0(Visitor *visitor);
825
ExpressionNode *left;
826
ExpressionNode *right;
829
class Block: public Statement
832
Block(StatementList *slist):
833
statements (slist) { kind = Kind_Block; }
837
virtual void accept0(Visitor *visitor);
840
StatementList *statements;
843
class StatementList: public Node
846
StatementList(Statement *stmt):
847
statement (stmt), next (this)
848
{ kind = Kind_StatementList; }
850
StatementList(StatementList *previous, Statement *stmt):
853
kind = Kind_StatementList;
854
next = previous->next;
855
previous->next = this;
858
virtual ~StatementList() {}
860
virtual void accept0(Visitor *visitor);
862
inline StatementList *finish ()
864
StatementList *front = next;
870
Statement *statement;
874
class VariableStatement: public Statement
877
VariableStatement(VariableDeclarationList *vlist):
879
{ kind = Kind_VariableStatement; }
881
virtual ~VariableStatement() {}
883
virtual void accept0(Visitor *visitor);
886
VariableDeclarationList *declarations;
889
class VariableDeclaration: public Node
892
VariableDeclaration(QScriptNameIdImpl *n, ExpressionNode *e):
893
name (n), expression (e), readOnly(false)
894
{ kind = Kind_VariableDeclaration; }
896
virtual ~VariableDeclaration() {}
898
virtual void accept0(Visitor *visitor);
901
QScriptNameIdImpl *name;
902
ExpressionNode *expression;
906
class VariableDeclarationList: public Node
909
VariableDeclarationList(VariableDeclaration *decl):
910
declaration (decl), next (this)
911
{ kind = Kind_VariableDeclarationList; }
913
VariableDeclarationList(VariableDeclarationList *previous, VariableDeclaration *decl):
916
kind = Kind_VariableDeclarationList;
917
next = previous->next;
918
previous->next = this;
921
virtual ~VariableDeclarationList() {}
923
virtual void accept0(Visitor *visitor);
925
inline VariableDeclarationList *finish (bool readOnly)
927
VariableDeclarationList *front = next;
930
VariableDeclarationList *vdl;
931
for (vdl = front; vdl != 0; vdl = vdl->next)
932
vdl->declaration->readOnly = true;
938
VariableDeclaration *declaration;
939
VariableDeclarationList *next;
942
class EmptyStatement: public Statement
945
EmptyStatement() { kind = Kind_EmptyStatement; }
946
virtual ~EmptyStatement() {}
948
virtual void accept0(Visitor *visitor);
951
class ExpressionStatement: public Statement
954
ExpressionStatement(ExpressionNode *e):
955
expression (e) { kind = Kind_ExpressionStatement; }
957
virtual ~ExpressionStatement() {}
959
virtual void accept0(Visitor *visitor);
962
ExpressionNode *expression;
965
class IfStatement: public Statement
968
IfStatement(ExpressionNode *e, Statement *t, Statement *f = 0):
969
expression (e), ok (t), ko (f)
970
{ kind = Kind_IfStatement; }
972
virtual ~IfStatement() {}
974
virtual void accept0(Visitor *visitor);
977
ExpressionNode *expression;
982
class DoWhileStatement: public Statement
985
DoWhileStatement(Statement *stmt, ExpressionNode *e):
986
statement (stmt), expression (e)
987
{ kind = Kind_DoWhileStatement; }
989
virtual ~DoWhileStatement() {}
991
virtual void accept0(Visitor *visitor);
994
Statement *statement;
995
ExpressionNode *expression;
998
class WhileStatement: public Statement
1001
WhileStatement(ExpressionNode *e, Statement *stmt):
1002
expression (e), statement (stmt)
1003
{ kind = Kind_WhileStatement; }
1005
virtual ~WhileStatement() {}
1007
virtual void accept0(Visitor *visitor);
1010
ExpressionNode *expression;
1011
Statement *statement;
1014
class ForStatement: public Statement
1017
ForStatement(ExpressionNode *i, ExpressionNode *c, ExpressionNode *e, Statement *stmt):
1018
initialiser (i), condition (c), expression (e), statement (stmt)
1019
{ kind = Kind_ForStatement; }
1021
virtual ~ForStatement() {}
1023
virtual void accept0(Visitor *visitor);
1026
ExpressionNode *initialiser;
1027
ExpressionNode *condition;
1028
ExpressionNode *expression;
1029
Statement *statement;
1032
class LocalForStatement: public Statement
1035
LocalForStatement(VariableDeclarationList *vlist, ExpressionNode *c, ExpressionNode *e, Statement *stmt):
1036
declarations (vlist), condition (c), expression (e), statement (stmt)
1037
{ kind = Kind_LocalForStatement; }
1039
virtual ~LocalForStatement() {}
1041
virtual void accept0(Visitor *visitor);
1044
VariableDeclarationList *declarations;
1045
ExpressionNode *condition;
1046
ExpressionNode *expression;
1047
Statement *statement;
1050
class ForEachStatement: public Statement
1053
ForEachStatement(ExpressionNode *i, ExpressionNode *e, Statement *stmt):
1054
initialiser (i), expression (e), statement (stmt)
1055
{ kind = Kind_ForEachStatement; }
1057
virtual ~ForEachStatement() {}
1059
virtual void accept0(Visitor *visitor);
1062
ExpressionNode *initialiser;
1063
ExpressionNode *expression;
1064
Statement *statement;
1067
class LocalForEachStatement: public Statement
1070
LocalForEachStatement(VariableDeclaration *v, ExpressionNode *e, Statement *stmt):
1071
declaration (v), expression (e), statement (stmt)
1072
{ kind = Kind_LocalForEachStatement; }
1074
virtual ~LocalForEachStatement() {}
1076
virtual void accept0(Visitor *visitor);
1079
VariableDeclaration *declaration;
1080
ExpressionNode *expression;
1081
Statement *statement;
1084
class ContinueStatement: public Statement
1087
ContinueStatement(QScriptNameIdImpl *l = 0):
1088
label (l) { kind = Kind_ContinueStatement; }
1090
virtual ~ContinueStatement() {}
1092
virtual void accept0(Visitor *visitor);
1095
QScriptNameIdImpl *label;
1098
class BreakStatement: public Statement
1101
BreakStatement(QScriptNameIdImpl *l = 0):
1102
label (l) { kind = Kind_BreakStatement; }
1104
virtual ~BreakStatement() {}
1106
virtual void accept0(Visitor *visitor);
1109
QScriptNameIdImpl *label;
1112
class ReturnStatement: public Statement
1115
ReturnStatement(ExpressionNode *e):
1116
expression (e) { kind = Kind_ReturnStatement; }
1118
virtual ~ReturnStatement() {}
1120
virtual void accept0(Visitor *visitor);
1123
ExpressionNode *expression;
1126
class WithStatement: public Statement
1129
WithStatement(ExpressionNode *e, Statement *stmt):
1130
expression (e), statement (stmt)
1131
{ kind = Kind_WithStatement; }
1133
virtual ~WithStatement() {}
1135
virtual void accept0(Visitor *visitor);
1138
ExpressionNode *expression;
1139
Statement *statement;
1142
class SwitchStatement: public Statement
1145
SwitchStatement(ExpressionNode *e, CaseBlock *b):
1146
expression (e), block (b)
1147
{ kind = Kind_SwitchStatement; }
1149
virtual ~SwitchStatement() {}
1151
virtual void accept0(Visitor *visitor);
1154
ExpressionNode *expression;
1158
class CaseBlock: public Node
1161
CaseBlock(CaseClauses *c, DefaultClause *d = 0, CaseClauses *r = 0):
1162
clauses (c), defaultClause (d), moreClauses (r)
1163
{ kind = Kind_CaseBlock; }
1165
virtual ~CaseBlock() {}
1167
virtual void accept0(Visitor *visitor);
1170
CaseClauses *clauses;
1171
DefaultClause *defaultClause;
1172
CaseClauses *moreClauses;
1175
class CaseClauses: public Node
1178
CaseClauses(CaseClause *c):
1179
clause (c), next (this)
1180
{ kind = Kind_CaseClauses; }
1182
CaseClauses(CaseClauses *previous, CaseClause *c):
1185
kind = Kind_CaseClauses;
1186
next = previous->next;
1187
previous->next = this;
1190
virtual ~CaseClauses() {}
1192
virtual void accept0(Visitor *visitor);
1194
inline CaseClauses *finish ()
1196
CaseClauses *front = next;
1206
class CaseClause: public Node
1209
CaseClause(ExpressionNode *e, StatementList *slist):
1210
expression (e), statements (slist)
1211
{ kind = Kind_CaseClause; }
1213
virtual ~CaseClause() {}
1215
virtual void accept0(Visitor *visitor);
1218
ExpressionNode *expression;
1219
StatementList *statements;
1222
class DefaultClause: public Node
1225
DefaultClause(StatementList *slist):
1227
{ kind = Kind_DefaultClause; }
1229
virtual ~DefaultClause() {}
1231
virtual void accept0(Visitor *visitor);
1234
StatementList *statements;
1237
class LabelledStatement: public Statement
1240
LabelledStatement(QScriptNameIdImpl *l, Statement *stmt):
1241
label (l), statement (stmt)
1242
{ kind = Kind_LabelledStatement; }
1244
virtual ~LabelledStatement() {}
1246
virtual void accept0(Visitor *visitor);
1249
QScriptNameIdImpl *label;
1250
Statement *statement;
1253
class ThrowStatement: public Statement
1256
ThrowStatement(ExpressionNode *e):
1257
expression (e) { kind = Kind_ThrowStatement; }
1259
virtual ~ThrowStatement() {}
1261
virtual void accept0(Visitor *visitor);
1264
ExpressionNode *expression;
1267
class TryStatement: public Statement
1270
TryStatement(Statement *stmt, Catch *c, Finally *f):
1271
statement (stmt), catchExpression (c), finallyExpression (f)
1272
{ kind = Kind_TryStatement; }
1274
TryStatement(Statement *stmt, Finally *f):
1275
statement (stmt), catchExpression (0), finallyExpression (f)
1276
{ kind = Kind_TryStatement; }
1278
TryStatement(Statement *stmt, Catch *c):
1279
statement (stmt), catchExpression (c), finallyExpression (0)
1280
{ kind = Kind_TryStatement; }
1282
virtual ~TryStatement() {}
1284
virtual void accept0(Visitor *visitor);
1287
Statement *statement;
1288
Catch *catchExpression;
1289
Finally *finallyExpression;
1292
class Catch: public Node
1295
Catch(QScriptNameIdImpl *n, Statement *stmt):
1296
name (n), statement (stmt)
1297
{ kind = Kind_Catch; }
1301
virtual void accept0(Visitor *visitor);
1304
QScriptNameIdImpl *name;
1305
Statement *statement;
1308
class Finally: public Node
1311
Finally(Statement *stmt):
1313
{ kind = Kind_Finally; }
1315
virtual ~Finally() {}
1317
virtual void accept0(Visitor *visitor);
1320
Statement *statement;
1323
class FunctionExpression: public ExpressionNode
1326
FunctionExpression(QScriptNameIdImpl *n, FormalParameterList *f, FunctionBody *b):
1327
name (n), formals (f), body (b)
1328
{ kind = Kind_FunctionExpression; }
1330
virtual ~FunctionExpression() {}
1332
virtual void accept0(Visitor *visitor);
1335
QScriptNameIdImpl *name;
1336
FormalParameterList *formals;
1340
class FunctionDeclaration: public FunctionExpression
1343
FunctionDeclaration(QScriptNameIdImpl *n, FormalParameterList *f, FunctionBody *b):
1344
FunctionExpression(n, f, b)
1345
{ kind = Kind_FunctionDeclaration; }
1347
virtual ~FunctionDeclaration() {}
1349
virtual void accept0(Visitor *visitor);
1352
class FormalParameterList: public Node
1355
FormalParameterList(QScriptNameIdImpl *n):
1356
name (n), next (this)
1357
{ kind = Kind_FormalParameterList; }
1359
FormalParameterList(FormalParameterList *previous, QScriptNameIdImpl *n):
1362
kind = Kind_FormalParameterList;
1363
next = previous->next;
1364
previous->next = this;
1367
virtual ~FormalParameterList() {}
1369
virtual void accept0(Visitor *visitor);
1371
inline FormalParameterList *finish ()
1373
FormalParameterList *front = next;
1379
QScriptNameIdImpl *name;
1380
FormalParameterList *next;
1383
class FunctionBody: public Node
1386
FunctionBody(SourceElements *elts):
1388
{ kind = Kind_FunctionBody; }
1390
virtual ~FunctionBody() {}
1392
virtual void accept0(Visitor *visitor);
1395
SourceElements *elements;
1398
class Program: public Node
1401
Program(SourceElements *elts):
1403
{ kind = Kind_Program; }
1405
virtual ~Program() {}
1407
virtual void accept0(Visitor *visitor);
1410
SourceElements *elements;
1413
class SourceElements: public Node
1416
SourceElements(SourceElement *elt):
1417
element (elt), next (this)
1418
{ kind = Kind_SourceElements; }
1420
SourceElements(SourceElements *previous, SourceElement *elt):
1423
kind = Kind_SourceElements;
1424
next = previous->next;
1425
previous->next = this;
1428
virtual ~SourceElements() {}
1430
virtual void accept0(Visitor *visitor);
1432
inline SourceElements *finish ()
1434
SourceElements *front = next;
1440
SourceElement *element;
1441
SourceElements *next;
1444
class SourceElement: public Node
1447
inline SourceElement()
1448
{ kind = Kind_SourceElement; }
1450
virtual ~SourceElement() {}
1453
class FunctionSourceElement: public SourceElement
1456
FunctionSourceElement(FunctionDeclaration *f):
1458
{ kind = Kind_FunctionSourceElement; }
1460
virtual ~FunctionSourceElement() {}
1462
virtual void accept0(Visitor *visitor);
1465
FunctionDeclaration *declaration;
1468
class StatementSourceElement: public SourceElement
1471
StatementSourceElement(Statement *stmt):
1473
{ kind = Kind_StatementSourceElement; }
1475
virtual ~StatementSourceElement() {}
1477
virtual void accept0(Visitor *visitor);
1480
Statement *statement;
1483
class DebuggerStatement: public Statement
1487
{ kind = Kind_DebuggerStatement; }
1489
virtual ~DebuggerStatement() {}
1491
virtual void accept0(Visitor *visitor);
1494
} } // namespace AST