1 /****************************************************************************
3 ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
4 ** All rights reserved.
5 ** Contact: Nokia Corporation (qt-info@nokia.com)
7 ** This file is part of the QtDeclarative module of the Qt Toolkit.
9 ** $QT_BEGIN_LICENSE:LGPL$
10 ** GNU Lesser General Public License Usage
11 ** This file may be used under the terms of the GNU Lesser General Public
12 ** License version 2.1 as published by the Free Software Foundation and
13 ** appearing in the file LICENSE.LGPL included in the packaging of this
14 ** file. Please review the following information to ensure the GNU Lesser
15 ** General Public License version 2.1 requirements will be met:
16 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
18 ** In addition, as a special exception, Nokia gives you certain additional
19 ** rights. These rights are described in the Nokia Qt LGPL Exception
20 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
22 ** GNU General Public License Usage
23 ** Alternatively, this file may be used under the terms of the GNU General
24 ** Public License version 3.0 as published by the Free Software Foundation
25 ** and appearing in the file LICENSE.GPL included in the packaging of this
26 ** file. Please review the following information to ensure the GNU General
27 ** Public License version 3.0 requirements will be met:
28 ** http://www.gnu.org/copyleft/gpl.html.
31 ** Alternatively, this file may be used in accordance with the terms and
32 ** conditions contained in a signed written agreement between you and Nokia.
40 ****************************************************************************/
42 #ifndef QDECLARATIVEJSAST_P_H
43 #define QDECLARATIVEJSAST_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 "private/qdeclarativejsastvisitor_p.h"
57 #include "private/qdeclarativejsglobal_p.h"
59 #include <QtCore/QString>
61 QT_QML_BEGIN_NAMESPACE
63 #define QDECLARATIVEJS_DECLARE_AST_NODE(name) \
64 enum { K = Kind_##name };
66 namespace QSOperator // ### rename
107 } // namespace QSOperator
109 namespace QDeclarativeJS {
113 template <typename _T1, typename _T2>
116 if (ast && ast->kind == static_cast<_T1>(0)->K)
117 return static_cast<_T1>(ast);
122 class QML_PARSER_EXPORT Node
130 Kind_ArrayMemberExpression,
131 Kind_BinaryExpression,
139 Kind_ConditionalExpression,
140 Kind_ContinueStatement,
141 Kind_DebuggerStatement,
143 Kind_DeleteExpression,
144 Kind_DoWhileStatement,
149 Kind_ExpressionStatement,
151 Kind_FieldMemberExpression,
153 Kind_ForEachStatement,
155 Kind_FormalParameterList,
157 Kind_FunctionDeclaration,
158 Kind_FunctionExpression,
159 Kind_FunctionSourceElement,
160 Kind_IdentifierExpression,
161 Kind_IdentifierPropertyName,
163 Kind_LabelledStatement,
164 Kind_LocalForEachStatement,
165 Kind_LocalForStatement,
167 Kind_NewMemberExpression,
171 Kind_NumericLiteralPropertyName,
173 Kind_PostDecrementExpression,
174 Kind_PostIncrementExpression,
175 Kind_PreDecrementExpression,
176 Kind_PreIncrementExpression,
179 Kind_PropertyNameAndValueList,
181 Kind_ReturnStatement,
185 Kind_StatementSourceElement,
187 Kind_StringLiteralPropertyName,
188 Kind_SwitchStatement,
191 Kind_TildeExpression,
194 Kind_TypeOfExpression,
195 Kind_UnaryMinusExpression,
196 Kind_UnaryPlusExpression,
197 Kind_VariableDeclaration,
198 Kind_VariableDeclarationList,
199 Kind_VariableStatement,
203 Kind_NestedExpression,
208 Kind_UiObjectBinding,
209 Kind_UiObjectDefinition,
210 Kind_UiObjectInitializer,
211 Kind_UiObjectMemberList,
212 Kind_UiArrayMemberList,
214 Kind_UiParameterList,
217 Kind_UiScriptBinding,
218 Kind_UiSourceElement,
225 : kind(Kind_Undefined) {}
227 // NOTE: node destructors are never called,
228 // instead we block free the memory
229 // (see the NodePool class)
232 virtual ExpressionNode *expressionCast();
233 virtual BinaryExpression *binaryExpressionCast();
234 virtual Statement *statementCast();
235 virtual UiObjectMember *uiObjectMemberCast();
237 void accept(Visitor *visitor);
238 static void accept(Node *node, Visitor *visitor);
240 inline static void acceptChild(Node *node, Visitor *visitor)
241 { return accept(node, visitor); } // ### remove
243 virtual void accept0(Visitor *visitor) = 0;
249 class QML_PARSER_EXPORT ExpressionNode: public Node
254 virtual ExpressionNode *expressionCast();
256 virtual SourceLocation firstSourceLocation() const = 0;
257 virtual SourceLocation lastSourceLocation() const = 0;
260 class QML_PARSER_EXPORT Statement: public Node
265 virtual Statement *statementCast();
267 virtual SourceLocation firstSourceLocation() const = 0;
268 virtual SourceLocation lastSourceLocation() const = 0;
271 class QML_PARSER_EXPORT UiFormal: public Node
274 QDECLARATIVEJS_DECLARE_AST_NODE(UiFormal)
276 UiFormal(NameId *name, NameId *alias = 0)
277 : name(name), alias(alias)
280 virtual SourceLocation firstSourceLocation() const
281 { return SourceLocation(); }
283 virtual SourceLocation lastSourceLocation() const
284 { return SourceLocation(); }
286 virtual void accept0(Visitor *visitor);
291 SourceLocation identifierToken;
292 SourceLocation asToken;
293 SourceLocation aliasToken;
296 class QML_PARSER_EXPORT UiFormalList: public Node
299 QDECLARATIVEJS_DECLARE_AST_NODE(UiFormalList)
301 UiFormalList(UiFormal *formal)
302 : formal(formal), next(this) {}
304 UiFormalList(UiFormalList *previous, UiFormal *formal)
307 next = previous->next;
308 previous->next = this;
311 UiFormalList *finish()
313 UiFormalList *head = next;
318 virtual SourceLocation firstSourceLocation() const
319 { return SourceLocation(); }
321 virtual SourceLocation lastSourceLocation() const
322 { return SourceLocation(); }
324 virtual void accept0(Visitor *visitor);
331 class QML_PARSER_EXPORT UiSignature: public Node
334 QDECLARATIVEJS_DECLARE_AST_NODE(UiSignature)
336 UiSignature(UiFormalList *formals = 0)
340 virtual SourceLocation firstSourceLocation() const
341 { return SourceLocation(); }
343 virtual SourceLocation lastSourceLocation() const
344 { return SourceLocation(); }
346 virtual void accept0(Visitor *visitor);
349 SourceLocation lparenToken;
350 UiFormalList *formals;
351 SourceLocation rparenToken;
354 class QML_PARSER_EXPORT NestedExpression: public ExpressionNode
357 QDECLARATIVEJS_DECLARE_AST_NODE(NestedExpression)
359 NestedExpression(ExpressionNode *expression)
360 : expression(expression)
363 virtual void accept0(Visitor *visitor);
365 virtual SourceLocation firstSourceLocation() const
366 { return lparenToken; }
368 virtual SourceLocation lastSourceLocation() const
369 { return rparenToken; }
372 ExpressionNode *expression;
373 SourceLocation lparenToken;
374 SourceLocation rparenToken;
377 class QML_PARSER_EXPORT ThisExpression: public ExpressionNode
380 QDECLARATIVEJS_DECLARE_AST_NODE(ThisExpression)
382 ThisExpression() { kind = K; }
384 virtual void accept0(Visitor *visitor);
386 virtual SourceLocation firstSourceLocation() const
387 { return thisToken; }
389 virtual SourceLocation lastSourceLocation() const
390 { return thisToken; }
393 SourceLocation thisToken;
396 class QML_PARSER_EXPORT IdentifierExpression: public ExpressionNode
399 QDECLARATIVEJS_DECLARE_AST_NODE(IdentifierExpression)
401 IdentifierExpression(NameId *n):
402 name (n) { kind = K; }
404 virtual void accept0(Visitor *visitor);
406 virtual SourceLocation firstSourceLocation() const
407 { return identifierToken; }
409 virtual SourceLocation lastSourceLocation() const
410 { return identifierToken; }
414 SourceLocation identifierToken;
417 class QML_PARSER_EXPORT NullExpression: public ExpressionNode
420 QDECLARATIVEJS_DECLARE_AST_NODE(NullExpression)
422 NullExpression() { kind = K; }
424 virtual void accept0(Visitor *visitor);
426 virtual SourceLocation firstSourceLocation() const
427 { return nullToken; }
429 virtual SourceLocation lastSourceLocation() const
430 { return nullToken; }
433 SourceLocation nullToken;
436 class QML_PARSER_EXPORT TrueLiteral: public ExpressionNode
439 QDECLARATIVEJS_DECLARE_AST_NODE(TrueLiteral)
441 TrueLiteral() { kind = K; }
443 virtual void accept0(Visitor *visitor);
445 virtual SourceLocation firstSourceLocation() const
446 { return trueToken; }
448 virtual SourceLocation lastSourceLocation() const
449 { return trueToken; }
452 SourceLocation trueToken;
455 class QML_PARSER_EXPORT FalseLiteral: public ExpressionNode
458 QDECLARATIVEJS_DECLARE_AST_NODE(FalseLiteral)
460 FalseLiteral() { kind = K; }
462 virtual void accept0(Visitor *visitor);
464 virtual SourceLocation firstSourceLocation() const
465 { return falseToken; }
467 virtual SourceLocation lastSourceLocation() const
468 { return falseToken; }
471 SourceLocation falseToken;
474 class QML_PARSER_EXPORT NumericLiteral: public ExpressionNode
477 QDECLARATIVEJS_DECLARE_AST_NODE(NumericLiteral)
479 NumericLiteral(double v):
480 value(v) { kind = K; }
482 virtual void accept0(Visitor *visitor);
484 virtual SourceLocation firstSourceLocation() const
485 { return literalToken; }
487 virtual SourceLocation lastSourceLocation() const
488 { return literalToken; }
492 SourceLocation literalToken;
495 class QML_PARSER_EXPORT StringLiteral: public ExpressionNode
498 QDECLARATIVEJS_DECLARE_AST_NODE(StringLiteral)
500 StringLiteral(NameId *v):
501 value (v) { kind = K; }
503 virtual void accept0(Visitor *visitor);
505 virtual SourceLocation firstSourceLocation() const
506 { return literalToken; }
508 virtual SourceLocation lastSourceLocation() const
509 { return literalToken; }
513 SourceLocation literalToken;
516 class QML_PARSER_EXPORT RegExpLiteral: public ExpressionNode
519 QDECLARATIVEJS_DECLARE_AST_NODE(RegExpLiteral)
521 RegExpLiteral(NameId *p, int f):
522 pattern (p), flags (f) { kind = K; }
524 virtual void accept0(Visitor *visitor);
526 virtual SourceLocation firstSourceLocation() const
527 { return literalToken; }
529 virtual SourceLocation lastSourceLocation() const
530 { return literalToken; }
535 SourceLocation literalToken;
538 class QML_PARSER_EXPORT ArrayLiteral: public ExpressionNode
541 QDECLARATIVEJS_DECLARE_AST_NODE(ArrayLiteral)
543 ArrayLiteral(Elision *e):
544 elements (0), elision (e)
547 ArrayLiteral(ElementList *elts):
548 elements (elts), elision (0)
551 ArrayLiteral(ElementList *elts, Elision *e):
552 elements (elts), elision (e)
555 virtual void accept0(Visitor *visitor);
557 virtual SourceLocation firstSourceLocation() const
558 { return lbracketToken; }
560 virtual SourceLocation lastSourceLocation() const
561 { return rbracketToken; }
564 ElementList *elements;
566 SourceLocation lbracketToken;
567 SourceLocation commaToken;
568 SourceLocation rbracketToken;
571 class QML_PARSER_EXPORT ObjectLiteral: public ExpressionNode
574 QDECLARATIVEJS_DECLARE_AST_NODE(ObjectLiteral)
577 properties (0) { kind = K; }
579 ObjectLiteral(PropertyNameAndValueList *plist):
580 properties (plist) { kind = K; }
582 virtual void accept0(Visitor *visitor);
584 virtual SourceLocation firstSourceLocation() const
585 { return lbraceToken; }
587 virtual SourceLocation lastSourceLocation() const
588 { return rbraceToken; }
591 PropertyNameAndValueList *properties;
592 SourceLocation lbraceToken;
593 SourceLocation rbraceToken;
596 class QML_PARSER_EXPORT ElementList: public Node
599 QDECLARATIVEJS_DECLARE_AST_NODE(ElementList)
601 ElementList(Elision *e, ExpressionNode *expr):
602 elision (e), expression (expr), next (this)
605 ElementList(ElementList *previous, Elision *e, ExpressionNode *expr):
606 elision (e), expression (expr)
609 next = previous->next;
610 previous->next = this;
613 inline ElementList *finish ()
615 ElementList *front = next;
620 virtual void accept0(Visitor *visitor);
624 ExpressionNode *expression;
626 SourceLocation commaToken;
629 class QML_PARSER_EXPORT Elision: public Node
632 QDECLARATIVEJS_DECLARE_AST_NODE(Elision)
635 next (this) { kind = K; }
637 Elision(Elision *previous)
640 next = previous->next;
641 previous->next = this;
644 virtual void accept0(Visitor *visitor);
646 inline Elision *finish ()
648 Elision *front = next;
655 SourceLocation commaToken;
658 class QML_PARSER_EXPORT PropertyNameAndValueList: public Node
661 QDECLARATIVEJS_DECLARE_AST_NODE(PropertyNameAndValueList)
663 PropertyNameAndValueList(PropertyName *n, ExpressionNode *v):
664 name (n), value (v), next (this)
667 PropertyNameAndValueList(PropertyNameAndValueList *previous, PropertyName *n, ExpressionNode *v):
671 next = previous->next;
672 previous->next = this;
675 virtual void accept0(Visitor *visitor);
677 inline PropertyNameAndValueList *finish ()
679 PropertyNameAndValueList *front = next;
686 ExpressionNode *value;
687 PropertyNameAndValueList *next;
688 SourceLocation colonToken;
689 SourceLocation commaToken;
692 class QML_PARSER_EXPORT PropertyName: public Node
695 QDECLARATIVEJS_DECLARE_AST_NODE(PropertyName)
697 PropertyName() { kind = K; }
700 SourceLocation propertyNameToken;
703 class QML_PARSER_EXPORT IdentifierPropertyName: public PropertyName
706 QDECLARATIVEJS_DECLARE_AST_NODE(IdentifierPropertyName)
708 IdentifierPropertyName(NameId *n):
711 virtual void accept0(Visitor *visitor);
717 class QML_PARSER_EXPORT StringLiteralPropertyName: public PropertyName
720 QDECLARATIVEJS_DECLARE_AST_NODE(StringLiteralPropertyName)
722 StringLiteralPropertyName(NameId *n):
725 virtual void accept0(Visitor *visitor);
731 class QML_PARSER_EXPORT NumericLiteralPropertyName: public PropertyName
734 QDECLARATIVEJS_DECLARE_AST_NODE(NumericLiteralPropertyName)
736 NumericLiteralPropertyName(double n):
739 virtual void accept0(Visitor *visitor);
745 class QML_PARSER_EXPORT ArrayMemberExpression: public ExpressionNode
748 QDECLARATIVEJS_DECLARE_AST_NODE(ArrayMemberExpression)
750 ArrayMemberExpression(ExpressionNode *b, ExpressionNode *e):
751 base (b), expression (e)
754 virtual void accept0(Visitor *visitor);
756 virtual SourceLocation firstSourceLocation() const
757 { return base->firstSourceLocation(); }
759 virtual SourceLocation lastSourceLocation() const
760 { return rbracketToken; }
763 ExpressionNode *base;
764 ExpressionNode *expression;
765 SourceLocation lbracketToken;
766 SourceLocation rbracketToken;
769 class QML_PARSER_EXPORT FieldMemberExpression: public ExpressionNode
772 QDECLARATIVEJS_DECLARE_AST_NODE(FieldMemberExpression)
774 FieldMemberExpression(ExpressionNode *b, NameId *n):
778 virtual void accept0(Visitor *visitor);
780 virtual SourceLocation firstSourceLocation() const
781 { return base->firstSourceLocation(); }
783 virtual SourceLocation lastSourceLocation() const
784 { return identifierToken; }
787 ExpressionNode *base;
789 SourceLocation dotToken;
790 SourceLocation identifierToken;
793 class QML_PARSER_EXPORT NewMemberExpression: public ExpressionNode
796 QDECLARATIVEJS_DECLARE_AST_NODE(NewMemberExpression)
798 NewMemberExpression(ExpressionNode *b, ArgumentList *a):
799 base (b), arguments (a)
802 virtual void accept0(Visitor *visitor);
804 virtual SourceLocation firstSourceLocation() const
807 virtual SourceLocation lastSourceLocation() const
808 { return rparenToken; }
811 ExpressionNode *base;
812 ArgumentList *arguments;
813 SourceLocation newToken;
814 SourceLocation lparenToken;
815 SourceLocation rparenToken;
818 class QML_PARSER_EXPORT NewExpression: public ExpressionNode
821 QDECLARATIVEJS_DECLARE_AST_NODE(NewExpression)
823 NewExpression(ExpressionNode *e):
824 expression (e) { kind = K; }
826 virtual void accept0(Visitor *visitor);
828 virtual SourceLocation firstSourceLocation() const
831 virtual SourceLocation lastSourceLocation() const
832 { return expression->lastSourceLocation(); }
835 ExpressionNode *expression;
836 SourceLocation newToken;
839 class QML_PARSER_EXPORT CallExpression: public ExpressionNode
842 QDECLARATIVEJS_DECLARE_AST_NODE(CallExpression)
844 CallExpression(ExpressionNode *b, ArgumentList *a):
845 base (b), arguments (a)
848 virtual void accept0(Visitor *visitor);
850 virtual SourceLocation firstSourceLocation() const
851 { return base->firstSourceLocation(); }
853 virtual SourceLocation lastSourceLocation() const
854 { return rparenToken; }
857 ExpressionNode *base;
858 ArgumentList *arguments;
859 SourceLocation lparenToken;
860 SourceLocation rparenToken;
863 class QML_PARSER_EXPORT ArgumentList: public Node
866 QDECLARATIVEJS_DECLARE_AST_NODE(ArgumentList)
868 ArgumentList(ExpressionNode *e):
869 expression (e), next (this)
872 ArgumentList(ArgumentList *previous, ExpressionNode *e):
876 next = previous->next;
877 previous->next = this;
880 virtual void accept0(Visitor *visitor);
882 inline ArgumentList *finish ()
884 ArgumentList *front = next;
890 ExpressionNode *expression;
892 SourceLocation commaToken;
895 class QML_PARSER_EXPORT PostIncrementExpression: public ExpressionNode
898 QDECLARATIVEJS_DECLARE_AST_NODE(PostIncrementExpression)
900 PostIncrementExpression(ExpressionNode *b):
901 base (b) { kind = K; }
903 virtual void accept0(Visitor *visitor);
905 virtual SourceLocation firstSourceLocation() const
906 { return base->firstSourceLocation(); }
908 virtual SourceLocation lastSourceLocation() const
909 { return incrementToken; }
912 ExpressionNode *base;
913 SourceLocation incrementToken;
916 class QML_PARSER_EXPORT PostDecrementExpression: public ExpressionNode
919 QDECLARATIVEJS_DECLARE_AST_NODE(PostDecrementExpression)
921 PostDecrementExpression(ExpressionNode *b):
922 base (b) { kind = K; }
924 virtual void accept0(Visitor *visitor);
926 virtual SourceLocation firstSourceLocation() const
927 { return base->firstSourceLocation(); }
929 virtual SourceLocation lastSourceLocation() const
930 { return decrementToken; }
933 ExpressionNode *base;
934 SourceLocation decrementToken;
937 class QML_PARSER_EXPORT DeleteExpression: public ExpressionNode
940 QDECLARATIVEJS_DECLARE_AST_NODE(DeleteExpression)
942 DeleteExpression(ExpressionNode *e):
943 expression (e) { kind = K; }
945 virtual void accept0(Visitor *visitor);
947 virtual SourceLocation firstSourceLocation() const
948 { return deleteToken; }
950 virtual SourceLocation lastSourceLocation() const
951 { return expression->lastSourceLocation(); }
954 ExpressionNode *expression;
955 SourceLocation deleteToken;
958 class QML_PARSER_EXPORT VoidExpression: public ExpressionNode
961 QDECLARATIVEJS_DECLARE_AST_NODE(VoidExpression)
963 VoidExpression(ExpressionNode *e):
964 expression (e) { kind = K; }
966 virtual void accept0(Visitor *visitor);
968 virtual SourceLocation firstSourceLocation() const
969 { return voidToken; }
971 virtual SourceLocation lastSourceLocation() const
972 { return expression->lastSourceLocation(); }
975 ExpressionNode *expression;
976 SourceLocation voidToken;
979 class QML_PARSER_EXPORT TypeOfExpression: public ExpressionNode
982 QDECLARATIVEJS_DECLARE_AST_NODE(TypeOfExpression)
984 TypeOfExpression(ExpressionNode *e):
985 expression (e) { kind = K; }
987 virtual void accept0(Visitor *visitor);
989 virtual SourceLocation firstSourceLocation() const
990 { return typeofToken; }
992 virtual SourceLocation lastSourceLocation() const
993 { return expression->lastSourceLocation(); }
996 ExpressionNode *expression;
997 SourceLocation typeofToken;
1000 class QML_PARSER_EXPORT PreIncrementExpression: public ExpressionNode
1003 QDECLARATIVEJS_DECLARE_AST_NODE(PreIncrementExpression)
1005 PreIncrementExpression(ExpressionNode *e):
1006 expression (e) { kind = K; }
1008 virtual void accept0(Visitor *visitor);
1010 virtual SourceLocation firstSourceLocation() const
1011 { return incrementToken; }
1013 virtual SourceLocation lastSourceLocation() const
1014 { return expression->lastSourceLocation(); }
1017 ExpressionNode *expression;
1018 SourceLocation incrementToken;
1021 class QML_PARSER_EXPORT PreDecrementExpression: public ExpressionNode
1024 QDECLARATIVEJS_DECLARE_AST_NODE(PreDecrementExpression)
1026 PreDecrementExpression(ExpressionNode *e):
1027 expression (e) { kind = K; }
1029 virtual void accept0(Visitor *visitor);
1031 virtual SourceLocation firstSourceLocation() const
1032 { return decrementToken; }
1034 virtual SourceLocation lastSourceLocation() const
1035 { return expression->lastSourceLocation(); }
1038 ExpressionNode *expression;
1039 SourceLocation decrementToken;
1042 class QML_PARSER_EXPORT UnaryPlusExpression: public ExpressionNode
1045 QDECLARATIVEJS_DECLARE_AST_NODE(UnaryPlusExpression)
1047 UnaryPlusExpression(ExpressionNode *e):
1048 expression (e) { kind = K; }
1050 virtual void accept0(Visitor *visitor);
1052 virtual SourceLocation firstSourceLocation() const
1053 { return plusToken; }
1055 virtual SourceLocation lastSourceLocation() const
1056 { return expression->lastSourceLocation(); }
1059 ExpressionNode *expression;
1060 SourceLocation plusToken;
1063 class QML_PARSER_EXPORT UnaryMinusExpression: public ExpressionNode
1066 QDECLARATIVEJS_DECLARE_AST_NODE(UnaryMinusExpression)
1068 UnaryMinusExpression(ExpressionNode *e):
1069 expression (e) { kind = K; }
1071 virtual void accept0(Visitor *visitor);
1073 virtual SourceLocation firstSourceLocation() const
1074 { return minusToken; }
1076 virtual SourceLocation lastSourceLocation() const
1077 { return expression->lastSourceLocation(); }
1080 ExpressionNode *expression;
1081 SourceLocation minusToken;
1084 class QML_PARSER_EXPORT TildeExpression: public ExpressionNode
1087 QDECLARATIVEJS_DECLARE_AST_NODE(TildeExpression)
1089 TildeExpression(ExpressionNode *e):
1090 expression (e) { kind = K; }
1092 virtual void accept0(Visitor *visitor);
1094 virtual SourceLocation firstSourceLocation() const
1095 { return tildeToken; }
1097 virtual SourceLocation lastSourceLocation() const
1098 { return expression->lastSourceLocation(); }
1101 ExpressionNode *expression;
1102 SourceLocation tildeToken;
1105 class QML_PARSER_EXPORT NotExpression: public ExpressionNode
1108 QDECLARATIVEJS_DECLARE_AST_NODE(NotExpression)
1110 NotExpression(ExpressionNode *e):
1111 expression (e) { kind = K; }
1113 virtual void accept0(Visitor *visitor);
1115 virtual SourceLocation firstSourceLocation() const
1116 { return notToken; }
1118 virtual SourceLocation lastSourceLocation() const
1119 { return expression->lastSourceLocation(); }
1122 ExpressionNode *expression;
1123 SourceLocation notToken;
1126 class QML_PARSER_EXPORT BinaryExpression: public ExpressionNode
1129 QDECLARATIVEJS_DECLARE_AST_NODE(BinaryExpression)
1131 BinaryExpression(ExpressionNode *l, int o, ExpressionNode *r):
1132 left (l), op (o), right (r)
1135 virtual BinaryExpression *binaryExpressionCast();
1137 virtual void accept0(Visitor *visitor);
1139 virtual SourceLocation firstSourceLocation() const
1140 { return left->firstSourceLocation(); }
1142 virtual SourceLocation lastSourceLocation() const
1143 { return right->lastSourceLocation(); }
1146 ExpressionNode *left;
1148 ExpressionNode *right;
1149 SourceLocation operatorToken;
1152 class QML_PARSER_EXPORT ConditionalExpression: public ExpressionNode
1155 QDECLARATIVEJS_DECLARE_AST_NODE(ConditionalExpression)
1157 ConditionalExpression(ExpressionNode *e, ExpressionNode *t, ExpressionNode *f):
1158 expression (e), ok (t), ko (f)
1161 virtual void accept0(Visitor *visitor);
1163 virtual SourceLocation firstSourceLocation() const
1164 { return expression->firstSourceLocation(); }
1166 virtual SourceLocation lastSourceLocation() const
1167 { return ko->lastSourceLocation(); }
1170 ExpressionNode *expression;
1173 SourceLocation questionToken;
1174 SourceLocation colonToken;
1177 class QML_PARSER_EXPORT Expression: public ExpressionNode // ### rename
1180 QDECLARATIVEJS_DECLARE_AST_NODE(Expression)
1182 Expression(ExpressionNode *l, ExpressionNode *r):
1183 left (l), right (r) { kind = K; }
1185 virtual void accept0(Visitor *visitor);
1187 virtual SourceLocation firstSourceLocation() const
1188 { return left->firstSourceLocation(); }
1190 virtual SourceLocation lastSourceLocation() const
1191 { return right->lastSourceLocation(); }
1194 ExpressionNode *left;
1195 ExpressionNode *right;
1196 SourceLocation commaToken;
1199 class QML_PARSER_EXPORT Block: public Statement
1202 QDECLARATIVEJS_DECLARE_AST_NODE(Block)
1204 Block(StatementList *slist):
1205 statements (slist) { kind = K; }
1207 virtual void accept0(Visitor *visitor);
1209 virtual SourceLocation firstSourceLocation() const
1210 { return lbraceToken; }
1212 virtual SourceLocation lastSourceLocation() const
1213 { return rbraceToken; }
1216 StatementList *statements;
1217 SourceLocation lbraceToken;
1218 SourceLocation rbraceToken;
1221 class QML_PARSER_EXPORT StatementList: public Node
1224 QDECLARATIVEJS_DECLARE_AST_NODE(StatementList)
1226 StatementList(Statement *stmt):
1227 statement (stmt), next (this)
1230 StatementList(StatementList *previous, Statement *stmt):
1234 next = previous->next;
1235 previous->next = this;
1238 virtual void accept0(Visitor *visitor);
1240 inline StatementList *finish ()
1242 StatementList *front = next;
1248 Statement *statement;
1249 StatementList *next;
1252 class QML_PARSER_EXPORT VariableStatement: public Statement
1255 QDECLARATIVEJS_DECLARE_AST_NODE(VariableStatement)
1257 VariableStatement(VariableDeclarationList *vlist):
1258 declarations (vlist)
1261 virtual void accept0(Visitor *visitor);
1263 virtual SourceLocation firstSourceLocation() const
1264 { return declarationKindToken; }
1266 virtual SourceLocation lastSourceLocation() const
1267 { return semicolonToken; }
1270 VariableDeclarationList *declarations;
1271 SourceLocation declarationKindToken;
1272 SourceLocation semicolonToken;
1275 class QML_PARSER_EXPORT VariableDeclaration: public Node
1278 QDECLARATIVEJS_DECLARE_AST_NODE(VariableDeclaration)
1280 VariableDeclaration(NameId *n, ExpressionNode *e):
1281 name (n), expression (e), readOnly(false)
1284 virtual void accept0(Visitor *visitor);
1288 ExpressionNode *expression;
1290 SourceLocation identifierToken;
1293 class QML_PARSER_EXPORT VariableDeclarationList: public Node
1296 QDECLARATIVEJS_DECLARE_AST_NODE(VariableDeclarationList)
1298 VariableDeclarationList(VariableDeclaration *decl):
1299 declaration (decl), next (this)
1302 VariableDeclarationList(VariableDeclarationList *previous, VariableDeclaration *decl):
1306 next = previous->next;
1307 previous->next = this;
1310 virtual void accept0(Visitor *visitor);
1312 inline VariableDeclarationList *finish (bool readOnly)
1314 VariableDeclarationList *front = next;
1317 VariableDeclarationList *vdl;
1318 for (vdl = front; vdl != 0; vdl = vdl->next)
1319 vdl->declaration->readOnly = true;
1325 VariableDeclaration *declaration;
1326 VariableDeclarationList *next;
1327 SourceLocation commaToken;
1330 class QML_PARSER_EXPORT EmptyStatement: public Statement
1333 QDECLARATIVEJS_DECLARE_AST_NODE(EmptyStatement)
1335 EmptyStatement() { kind = K; }
1337 virtual void accept0(Visitor *visitor);
1339 virtual SourceLocation firstSourceLocation() const
1340 { return semicolonToken; }
1342 virtual SourceLocation lastSourceLocation() const
1343 { return semicolonToken; }
1346 SourceLocation semicolonToken;
1349 class QML_PARSER_EXPORT ExpressionStatement: public Statement
1352 QDECLARATIVEJS_DECLARE_AST_NODE(ExpressionStatement)
1354 ExpressionStatement(ExpressionNode *e):
1355 expression (e) { kind = K; }
1357 virtual void accept0(Visitor *visitor);
1359 virtual SourceLocation firstSourceLocation() const
1360 { return expression->firstSourceLocation(); }
1362 virtual SourceLocation lastSourceLocation() const
1363 { return semicolonToken; }
1366 ExpressionNode *expression;
1367 SourceLocation semicolonToken;
1370 class QML_PARSER_EXPORT IfStatement: public Statement
1373 QDECLARATIVEJS_DECLARE_AST_NODE(IfStatement)
1375 IfStatement(ExpressionNode *e, Statement *t, Statement *f = 0):
1376 expression (e), ok (t), ko (f)
1379 virtual void accept0(Visitor *visitor);
1381 virtual SourceLocation firstSourceLocation() const
1384 virtual SourceLocation lastSourceLocation() const
1387 return ko->lastSourceLocation();
1389 return ok->lastSourceLocation();
1393 ExpressionNode *expression;
1396 SourceLocation ifToken;
1397 SourceLocation lparenToken;
1398 SourceLocation rparenToken;
1399 SourceLocation elseToken;
1402 class QML_PARSER_EXPORT DoWhileStatement: public Statement
1405 QDECLARATIVEJS_DECLARE_AST_NODE(DoWhileStatement)
1407 DoWhileStatement(Statement *stmt, ExpressionNode *e):
1408 statement (stmt), expression (e)
1411 virtual void accept0(Visitor *visitor);
1413 virtual SourceLocation firstSourceLocation() const
1416 virtual SourceLocation lastSourceLocation() const
1417 { return semicolonToken; }
1420 Statement *statement;
1421 ExpressionNode *expression;
1422 SourceLocation doToken;
1423 SourceLocation whileToken;
1424 SourceLocation lparenToken;
1425 SourceLocation rparenToken;
1426 SourceLocation semicolonToken;
1429 class QML_PARSER_EXPORT WhileStatement: public Statement
1432 QDECLARATIVEJS_DECLARE_AST_NODE(WhileStatement)
1434 WhileStatement(ExpressionNode *e, Statement *stmt):
1435 expression (e), statement (stmt)
1438 virtual void accept0(Visitor *visitor);
1440 virtual SourceLocation firstSourceLocation() const
1441 { return whileToken; }
1443 virtual SourceLocation lastSourceLocation() const
1444 { return statement->lastSourceLocation(); }
1447 ExpressionNode *expression;
1448 Statement *statement;
1449 SourceLocation whileToken;
1450 SourceLocation lparenToken;
1451 SourceLocation rparenToken;
1454 class QML_PARSER_EXPORT ForStatement: public Statement
1457 QDECLARATIVEJS_DECLARE_AST_NODE(ForStatement)
1459 ForStatement(ExpressionNode *i, ExpressionNode *c, ExpressionNode *e, Statement *stmt):
1460 initialiser (i), condition (c), expression (e), statement (stmt)
1463 virtual void accept0(Visitor *visitor);
1465 virtual SourceLocation firstSourceLocation() const
1466 { return forToken; }
1468 virtual SourceLocation lastSourceLocation() const
1469 { return statement->lastSourceLocation(); }
1472 ExpressionNode *initialiser;
1473 ExpressionNode *condition;
1474 ExpressionNode *expression;
1475 Statement *statement;
1476 SourceLocation forToken;
1477 SourceLocation lparenToken;
1478 SourceLocation firstSemicolonToken;
1479 SourceLocation secondSemicolonToken;
1480 SourceLocation rparenToken;
1483 class QML_PARSER_EXPORT LocalForStatement: public Statement
1486 QDECLARATIVEJS_DECLARE_AST_NODE(LocalForStatement)
1488 LocalForStatement(VariableDeclarationList *vlist, ExpressionNode *c, ExpressionNode *e, Statement *stmt):
1489 declarations (vlist), condition (c), expression (e), statement (stmt)
1492 virtual void accept0(Visitor *visitor);
1494 virtual SourceLocation firstSourceLocation() const
1495 { return forToken; }
1497 virtual SourceLocation lastSourceLocation() const
1498 { return statement->lastSourceLocation(); }
1501 VariableDeclarationList *declarations;
1502 ExpressionNode *condition;
1503 ExpressionNode *expression;
1504 Statement *statement;
1505 SourceLocation forToken;
1506 SourceLocation lparenToken;
1507 SourceLocation varToken;
1508 SourceLocation firstSemicolonToken;
1509 SourceLocation secondSemicolonToken;
1510 SourceLocation rparenToken;
1513 class QML_PARSER_EXPORT ForEachStatement: public Statement
1516 QDECLARATIVEJS_DECLARE_AST_NODE(ForEachStatement)
1518 ForEachStatement(ExpressionNode *i, ExpressionNode *e, Statement *stmt):
1519 initialiser (i), expression (e), statement (stmt)
1522 virtual void accept0(Visitor *visitor);
1524 virtual SourceLocation firstSourceLocation() const
1525 { return forToken; }
1527 virtual SourceLocation lastSourceLocation() const
1528 { return statement->lastSourceLocation(); }
1531 ExpressionNode *initialiser;
1532 ExpressionNode *expression;
1533 Statement *statement;
1534 SourceLocation forToken;
1535 SourceLocation lparenToken;
1536 SourceLocation inToken;
1537 SourceLocation rparenToken;
1540 class QML_PARSER_EXPORT LocalForEachStatement: public Statement
1543 QDECLARATIVEJS_DECLARE_AST_NODE(LocalForEachStatement)
1545 LocalForEachStatement(VariableDeclaration *v, ExpressionNode *e, Statement *stmt):
1546 declaration (v), expression (e), statement (stmt)
1549 virtual void accept0(Visitor *visitor);
1551 virtual SourceLocation firstSourceLocation() const
1552 { return forToken; }
1554 virtual SourceLocation lastSourceLocation() const
1555 { return statement->lastSourceLocation(); }
1558 VariableDeclaration *declaration;
1559 ExpressionNode *expression;
1560 Statement *statement;
1561 SourceLocation forToken;
1562 SourceLocation lparenToken;
1563 SourceLocation varToken;
1564 SourceLocation inToken;
1565 SourceLocation rparenToken;
1568 class QML_PARSER_EXPORT ContinueStatement: public Statement
1571 QDECLARATIVEJS_DECLARE_AST_NODE(ContinueStatement)
1573 ContinueStatement(NameId *l = 0):
1574 label (l) { kind = K; }
1576 virtual void accept0(Visitor *visitor);
1578 virtual SourceLocation firstSourceLocation() const
1579 { return continueToken; }
1581 virtual SourceLocation lastSourceLocation() const
1582 { return semicolonToken; }
1586 SourceLocation continueToken;
1587 SourceLocation identifierToken;
1588 SourceLocation semicolonToken;
1591 class QML_PARSER_EXPORT BreakStatement: public Statement
1594 QDECLARATIVEJS_DECLARE_AST_NODE(BreakStatement)
1596 BreakStatement(NameId *l = 0):
1597 label (l) { kind = K; }
1599 virtual void accept0(Visitor *visitor);
1601 virtual SourceLocation firstSourceLocation() const
1602 { return breakToken; }
1604 virtual SourceLocation lastSourceLocation() const
1605 { return semicolonToken; }
1609 SourceLocation breakToken;
1610 SourceLocation identifierToken;
1611 SourceLocation semicolonToken;
1614 class QML_PARSER_EXPORT ReturnStatement: public Statement
1617 QDECLARATIVEJS_DECLARE_AST_NODE(ReturnStatement)
1619 ReturnStatement(ExpressionNode *e):
1620 expression (e) { kind = K; }
1622 virtual void accept0(Visitor *visitor);
1624 virtual SourceLocation firstSourceLocation() const
1625 { return returnToken; }
1627 virtual SourceLocation lastSourceLocation() const
1628 { return semicolonToken; }
1631 ExpressionNode *expression;
1632 SourceLocation returnToken;
1633 SourceLocation semicolonToken;
1636 class QML_PARSER_EXPORT WithStatement: public Statement
1639 QDECLARATIVEJS_DECLARE_AST_NODE(WithStatement)
1641 WithStatement(ExpressionNode *e, Statement *stmt):
1642 expression (e), statement (stmt)
1645 virtual void accept0(Visitor *visitor);
1647 virtual SourceLocation firstSourceLocation() const
1648 { return withToken; }
1650 virtual SourceLocation lastSourceLocation() const
1651 { return statement->lastSourceLocation(); }
1654 ExpressionNode *expression;
1655 Statement *statement;
1656 SourceLocation withToken;
1657 SourceLocation lparenToken;
1658 SourceLocation rparenToken;
1661 class QML_PARSER_EXPORT CaseBlock: public Node
1664 QDECLARATIVEJS_DECLARE_AST_NODE(CaseBlock)
1666 CaseBlock(CaseClauses *c, DefaultClause *d = 0, CaseClauses *r = 0):
1667 clauses (c), defaultClause (d), moreClauses (r)
1670 virtual void accept0(Visitor *visitor);
1673 CaseClauses *clauses;
1674 DefaultClause *defaultClause;
1675 CaseClauses *moreClauses;
1676 SourceLocation lbraceToken;
1677 SourceLocation rbraceToken;
1680 class QML_PARSER_EXPORT SwitchStatement: public Statement
1683 QDECLARATIVEJS_DECLARE_AST_NODE(SwitchStatement)
1685 SwitchStatement(ExpressionNode *e, CaseBlock *b):
1686 expression (e), block (b)
1689 virtual void accept0(Visitor *visitor);
1691 virtual SourceLocation firstSourceLocation() const
1692 { return switchToken; }
1694 virtual SourceLocation lastSourceLocation() const
1695 { return block->rbraceToken; }
1698 ExpressionNode *expression;
1700 SourceLocation switchToken;
1701 SourceLocation lparenToken;
1702 SourceLocation rparenToken;
1705 class QML_PARSER_EXPORT CaseClauses: public Node
1708 QDECLARATIVEJS_DECLARE_AST_NODE(CaseClauses)
1710 CaseClauses(CaseClause *c):
1711 clause (c), next (this)
1714 CaseClauses(CaseClauses *previous, CaseClause *c):
1718 next = previous->next;
1719 previous->next = this;
1722 virtual void accept0(Visitor *visitor);
1724 inline CaseClauses *finish ()
1726 CaseClauses *front = next;
1736 class QML_PARSER_EXPORT CaseClause: public Node
1739 QDECLARATIVEJS_DECLARE_AST_NODE(CaseClause)
1741 CaseClause(ExpressionNode *e, StatementList *slist):
1742 expression (e), statements (slist)
1745 virtual void accept0(Visitor *visitor);
1748 ExpressionNode *expression;
1749 StatementList *statements;
1750 SourceLocation caseToken;
1751 SourceLocation colonToken;
1754 class QML_PARSER_EXPORT DefaultClause: public Node
1757 QDECLARATIVEJS_DECLARE_AST_NODE(DefaultClause)
1759 DefaultClause(StatementList *slist):
1763 virtual void accept0(Visitor *visitor);
1766 StatementList *statements;
1767 SourceLocation defaultToken;
1768 SourceLocation colonToken;
1771 class QML_PARSER_EXPORT LabelledStatement: public Statement
1774 QDECLARATIVEJS_DECLARE_AST_NODE(LabelledStatement)
1776 LabelledStatement(NameId *l, Statement *stmt):
1777 label (l), statement (stmt)
1780 virtual void accept0(Visitor *visitor);
1782 virtual SourceLocation firstSourceLocation() const
1783 { return identifierToken; }
1785 virtual SourceLocation lastSourceLocation() const
1786 { return statement->lastSourceLocation(); }
1790 Statement *statement;
1791 SourceLocation identifierToken;
1792 SourceLocation colonToken;
1795 class QML_PARSER_EXPORT ThrowStatement: public Statement
1798 QDECLARATIVEJS_DECLARE_AST_NODE(ThrowStatement)
1800 ThrowStatement(ExpressionNode *e):
1801 expression (e) { kind = K; }
1803 virtual void accept0(Visitor *visitor);
1805 virtual SourceLocation firstSourceLocation() const
1806 { return throwToken; }
1808 virtual SourceLocation lastSourceLocation() const
1809 { return semicolonToken; }
1812 ExpressionNode *expression;
1813 SourceLocation throwToken;
1814 SourceLocation semicolonToken;
1817 class QML_PARSER_EXPORT Catch: public Node
1820 QDECLARATIVEJS_DECLARE_AST_NODE(Catch)
1822 Catch(NameId *n, Block *stmt):
1823 name (n), statement (stmt)
1826 virtual void accept0(Visitor *visitor);
1831 SourceLocation catchToken;
1832 SourceLocation lparenToken;
1833 SourceLocation identifierToken;
1834 SourceLocation rparenToken;
1837 class QML_PARSER_EXPORT Finally: public Node
1840 QDECLARATIVEJS_DECLARE_AST_NODE(Finally)
1842 Finally(Block *stmt):
1846 virtual void accept0(Visitor *visitor);
1850 SourceLocation finallyToken;
1853 class QML_PARSER_EXPORT TryStatement: public Statement
1856 QDECLARATIVEJS_DECLARE_AST_NODE(TryStatement)
1858 TryStatement(Statement *stmt, Catch *c, Finally *f):
1859 statement (stmt), catchExpression (c), finallyExpression (f)
1862 TryStatement(Statement *stmt, Finally *f):
1863 statement (stmt), catchExpression (0), finallyExpression (f)
1866 TryStatement(Statement *stmt, Catch *c):
1867 statement (stmt), catchExpression (c), finallyExpression (0)
1870 virtual void accept0(Visitor *visitor);
1872 virtual SourceLocation firstSourceLocation() const
1873 { return tryToken; }
1875 virtual SourceLocation lastSourceLocation() const
1877 if (finallyExpression)
1878 return finallyExpression->statement->rbraceToken;
1879 else if (catchExpression)
1880 return catchExpression->statement->rbraceToken;
1882 return statement->lastSourceLocation();
1886 Statement *statement;
1887 Catch *catchExpression;
1888 Finally *finallyExpression;
1889 SourceLocation tryToken;
1892 class QML_PARSER_EXPORT FunctionExpression: public ExpressionNode
1895 QDECLARATIVEJS_DECLARE_AST_NODE(FunctionExpression)
1897 FunctionExpression(NameId *n, FormalParameterList *f, FunctionBody *b):
1898 name (n), formals (f), body (b)
1901 virtual void accept0(Visitor *visitor);
1903 virtual SourceLocation firstSourceLocation() const
1904 { return functionToken; }
1906 virtual SourceLocation lastSourceLocation() const
1907 { return rbraceToken; }
1911 FormalParameterList *formals;
1913 SourceLocation functionToken;
1914 SourceLocation identifierToken;
1915 SourceLocation lparenToken;
1916 SourceLocation rparenToken;
1917 SourceLocation lbraceToken;
1918 SourceLocation rbraceToken;
1921 class QML_PARSER_EXPORT FunctionDeclaration: public FunctionExpression
1924 QDECLARATIVEJS_DECLARE_AST_NODE(FunctionDeclaration)
1926 FunctionDeclaration(NameId *n, FormalParameterList *f, FunctionBody *b):
1927 FunctionExpression(n, f, b)
1930 virtual void accept0(Visitor *visitor);
1933 class QML_PARSER_EXPORT FormalParameterList: public Node
1936 QDECLARATIVEJS_DECLARE_AST_NODE(FormalParameterList)
1938 FormalParameterList(NameId *n):
1939 name (n), next (this)
1942 FormalParameterList(FormalParameterList *previous, NameId *n):
1946 next = previous->next;
1947 previous->next = this;
1950 virtual void accept0(Visitor *visitor);
1952 inline FormalParameterList *finish ()
1954 FormalParameterList *front = next;
1961 FormalParameterList *next;
1962 SourceLocation commaToken;
1963 SourceLocation identifierToken;
1966 class QML_PARSER_EXPORT FunctionBody: public Node
1969 QDECLARATIVEJS_DECLARE_AST_NODE(FunctionBody)
1971 FunctionBody(SourceElements *elts):
1975 virtual void accept0(Visitor *visitor);
1978 SourceElements *elements;
1981 class QML_PARSER_EXPORT Program: public Node
1984 QDECLARATIVEJS_DECLARE_AST_NODE(Program)
1986 Program(SourceElements *elts):
1990 virtual void accept0(Visitor *visitor);
1993 SourceElements *elements;
1996 class QML_PARSER_EXPORT SourceElements: public Node
1999 QDECLARATIVEJS_DECLARE_AST_NODE(SourceElements)
2001 SourceElements(SourceElement *elt):
2002 element (elt), next (this)
2005 SourceElements(SourceElements *previous, SourceElement *elt):
2009 next = previous->next;
2010 previous->next = this;
2013 virtual void accept0(Visitor *visitor);
2015 inline SourceElements *finish ()
2017 SourceElements *front = next;
2023 SourceElement *element;
2024 SourceElements *next;
2027 class QML_PARSER_EXPORT SourceElement: public Node
2030 QDECLARATIVEJS_DECLARE_AST_NODE(SourceElement)
2032 inline SourceElement()
2036 class QML_PARSER_EXPORT FunctionSourceElement: public SourceElement
2039 QDECLARATIVEJS_DECLARE_AST_NODE(FunctionSourceElement)
2041 FunctionSourceElement(FunctionDeclaration *f):
2045 virtual void accept0(Visitor *visitor);
2048 FunctionDeclaration *declaration;
2051 class QML_PARSER_EXPORT StatementSourceElement: public SourceElement
2054 QDECLARATIVEJS_DECLARE_AST_NODE(StatementSourceElement)
2056 StatementSourceElement(Statement *stmt):
2060 virtual void accept0(Visitor *visitor);
2063 Statement *statement;
2066 class QML_PARSER_EXPORT DebuggerStatement: public Statement
2069 QDECLARATIVEJS_DECLARE_AST_NODE(DebuggerStatement)
2074 virtual void accept0(Visitor *visitor);
2076 virtual SourceLocation firstSourceLocation() const
2077 { return debuggerToken; }
2079 virtual SourceLocation lastSourceLocation() const
2080 { return semicolonToken; }
2083 SourceLocation debuggerToken;
2084 SourceLocation semicolonToken;
2087 class QML_PARSER_EXPORT UiProgram: public Node
2090 QDECLARATIVEJS_DECLARE_AST_NODE(UiProgram)
2092 UiProgram(UiImportList *imports, UiObjectMemberList *members)
2093 : imports(imports), members(members)
2096 virtual void accept0(Visitor *visitor);
2099 UiImportList *imports;
2100 UiObjectMemberList *members;
2103 class QML_PARSER_EXPORT UiQualifiedId: public Node
2106 QDECLARATIVEJS_DECLARE_AST_NODE(UiQualifiedId)
2108 UiQualifiedId(NameId *name)
2109 : next(this), name(name)
2112 UiQualifiedId(UiQualifiedId *previous, NameId *name)
2116 next = previous->next;
2117 previous->next = this;
2120 UiQualifiedId *finish()
2122 UiQualifiedId *head = next;
2127 virtual void accept0(Visitor *visitor);
2130 UiQualifiedId *next;
2132 SourceLocation identifierToken;
2135 class QML_PARSER_EXPORT UiImport: public Node
2138 QDECLARATIVEJS_DECLARE_AST_NODE(UiImport)
2140 UiImport(NameId *fileName)
2141 : fileName(fileName), importUri(0), importId(0)
2144 UiImport(UiQualifiedId *uri)
2145 : fileName(0), importUri(uri), importId(0)
2148 virtual SourceLocation firstSourceLocation() const
2149 { return importToken; }
2151 virtual SourceLocation lastSourceLocation() const
2152 { return semicolonToken; }
2154 virtual void accept0(Visitor *visitor);
2158 UiQualifiedId *importUri;
2160 SourceLocation importToken;
2161 SourceLocation fileNameToken;
2162 SourceLocation versionToken;
2163 SourceLocation asToken;
2164 SourceLocation importIdToken;
2165 SourceLocation semicolonToken;
2168 class QML_PARSER_EXPORT UiImportList: public Node
2171 QDECLARATIVEJS_DECLARE_AST_NODE(UiImportList)
2173 UiImportList(UiImport *import)
2178 UiImportList(UiImportList *previous, UiImport *import)
2182 next = previous->next;
2183 previous->next = this;
2186 virtual SourceLocation firstSourceLocation() const
2188 if (import) return import->firstSourceLocation();
2189 else return SourceLocation();
2192 virtual SourceLocation lastSourceLocation() const
2194 for (const UiImportList *it = this; it; it = it->next)
2195 if (!it->next && it->import)
2196 return it->import->lastSourceLocation();
2198 return SourceLocation();
2201 UiImportList *finish()
2203 UiImportList *head = next;
2208 virtual void accept0(Visitor *visitor);
2215 class QML_PARSER_EXPORT UiObjectMember: public Node
2218 virtual SourceLocation firstSourceLocation() const = 0;
2219 virtual SourceLocation lastSourceLocation() const = 0;
2221 virtual UiObjectMember *uiObjectMemberCast();
2224 class QML_PARSER_EXPORT UiObjectMemberList: public Node
2227 QDECLARATIVEJS_DECLARE_AST_NODE(UiObjectMemberList)
2229 UiObjectMemberList(UiObjectMember *member)
2230 : next(this), member(member)
2233 UiObjectMemberList(UiObjectMemberList *previous, UiObjectMember *member)
2237 next = previous->next;
2238 previous->next = this;
2241 virtual void accept0(Visitor *visitor);
2243 UiObjectMemberList *finish()
2245 UiObjectMemberList *head = next;
2251 UiObjectMemberList *next;
2252 UiObjectMember *member;
2255 class QML_PARSER_EXPORT UiArrayMemberList: public Node
2258 QDECLARATIVEJS_DECLARE_AST_NODE(UiArrayMemberList)
2260 UiArrayMemberList(UiObjectMember *member)
2261 : next(this), member(member)
2264 UiArrayMemberList(UiArrayMemberList *previous, UiObjectMember *member)
2268 next = previous->next;
2269 previous->next = this;
2272 virtual void accept0(Visitor *visitor);
2274 UiArrayMemberList *finish()
2276 UiArrayMemberList *head = next;
2282 UiArrayMemberList *next;
2283 UiObjectMember *member;
2284 SourceLocation commaToken;
2287 class QML_PARSER_EXPORT UiObjectInitializer: public Node
2290 QDECLARATIVEJS_DECLARE_AST_NODE(UiObjectInitializer)
2292 UiObjectInitializer(UiObjectMemberList *members)
2296 virtual void accept0(Visitor *visitor);
2299 SourceLocation lbraceToken;
2300 UiObjectMemberList *members;
2301 SourceLocation rbraceToken;
2304 class QML_PARSER_EXPORT UiParameterList: public Node
2307 QDECLARATIVEJS_DECLARE_AST_NODE(UiParameterList)
2309 UiParameterList(NameId *t, NameId *n):
2310 type (t), name (n), next (this)
2313 UiParameterList(UiParameterList *previous, NameId *t, NameId *n):
2317 next = previous->next;
2318 previous->next = this;
2321 virtual void accept0(Visitor *) {}
2323 inline UiParameterList *finish ()
2325 UiParameterList *front = next;
2333 UiParameterList *next;
2334 SourceLocation commaToken;
2335 SourceLocation identifierToken;
2338 class QML_PARSER_EXPORT UiPublicMember: public UiObjectMember
2341 QDECLARATIVEJS_DECLARE_AST_NODE(UiPublicMember)
2343 UiPublicMember(NameId *memberType,
2345 : type(Property), typeModifier(0), memberType(memberType), name(name), expression(0), binding(0), isDefaultMember(false), isReadonlyMember(false), parameters(0)
2348 UiPublicMember(NameId *memberType,
2350 ExpressionNode *expression)
2351 : type(Property), typeModifier(0), memberType(memberType), name(name), expression(expression), binding(0), isDefaultMember(false), isReadonlyMember(false), parameters(0)
2354 virtual SourceLocation firstSourceLocation() const
2356 if (defaultToken.isValid())
2357 return defaultToken;
2358 else if (readonlyToken.isValid())
2359 return readonlyToken;
2361 return propertyToken;
2364 virtual SourceLocation lastSourceLocation() const
2367 return binding->lastSourceLocation();
2369 return semicolonToken;
2372 virtual void accept0(Visitor *visitor);
2375 enum { Signal, Property } type;
2376 NameId *typeModifier;
2379 ExpressionNode *expression; // initialized with a JS expression
2380 UiObjectMember *binding; // initialized with a QML object or array.
2381 bool isDefaultMember;
2382 bool isReadonlyMember;
2383 UiParameterList *parameters;
2384 SourceLocation defaultToken;
2385 SourceLocation readonlyToken;
2386 SourceLocation propertyToken;
2387 SourceLocation typeModifierToken;
2388 SourceLocation typeToken;
2389 SourceLocation identifierToken;
2390 SourceLocation colonToken;
2391 SourceLocation semicolonToken;
2394 class QML_PARSER_EXPORT UiObjectDefinition: public UiObjectMember
2397 QDECLARATIVEJS_DECLARE_AST_NODE(UiObjectDefinition)
2399 UiObjectDefinition(UiQualifiedId *qualifiedTypeNameId,
2400 UiObjectInitializer *initializer)
2401 : qualifiedTypeNameId(qualifiedTypeNameId), initializer(initializer)
2404 virtual SourceLocation firstSourceLocation() const
2405 { return qualifiedTypeNameId->identifierToken; }
2407 virtual SourceLocation lastSourceLocation() const
2408 { return initializer->rbraceToken; }
2410 virtual void accept0(Visitor *visitor);
2413 UiQualifiedId *qualifiedTypeNameId;
2414 UiObjectInitializer *initializer;
2417 class QML_PARSER_EXPORT UiSourceElement: public UiObjectMember
2420 QDECLARATIVEJS_DECLARE_AST_NODE(UiSourceElement)
2422 UiSourceElement(Node *sourceElement)
2423 : sourceElement(sourceElement)
2426 virtual SourceLocation firstSourceLocation() const
2428 if (FunctionDeclaration *funDecl = cast<FunctionDeclaration *>(sourceElement))
2429 return funDecl->firstSourceLocation();
2430 else if (VariableStatement *varStmt = cast<VariableStatement *>(sourceElement))
2431 return varStmt->firstSourceLocation();
2433 return SourceLocation();
2436 virtual SourceLocation lastSourceLocation() const
2438 if (FunctionDeclaration *funDecl = cast<FunctionDeclaration *>(sourceElement))
2439 return funDecl->lastSourceLocation();
2440 else if (VariableStatement *varStmt = cast<VariableStatement *>(sourceElement))
2441 return varStmt->lastSourceLocation();
2443 return SourceLocation();
2447 virtual void accept0(Visitor *visitor);
2450 Node *sourceElement;
2453 class QML_PARSER_EXPORT UiObjectBinding: public UiObjectMember
2456 QDECLARATIVEJS_DECLARE_AST_NODE(UiObjectBinding)
2458 UiObjectBinding(UiQualifiedId *qualifiedId,
2459 UiQualifiedId *qualifiedTypeNameId,
2460 UiObjectInitializer *initializer)
2461 : qualifiedId(qualifiedId),
2462 qualifiedTypeNameId(qualifiedTypeNameId),
2463 initializer(initializer),
2467 virtual SourceLocation firstSourceLocation() const
2469 if (hasOnToken && qualifiedTypeNameId)
2470 return qualifiedTypeNameId->identifierToken;
2472 return qualifiedId->identifierToken;
2475 virtual SourceLocation lastSourceLocation() const
2476 { return initializer->rbraceToken; }
2478 virtual void accept0(Visitor *visitor);
2481 UiQualifiedId *qualifiedId;
2482 UiQualifiedId *qualifiedTypeNameId;
2483 UiObjectInitializer *initializer;
2484 SourceLocation colonToken;
2488 class QML_PARSER_EXPORT UiScriptBinding: public UiObjectMember
2491 QDECLARATIVEJS_DECLARE_AST_NODE(UiScriptBinding)
2493 UiScriptBinding(UiQualifiedId *qualifiedId,
2494 Statement *statement)
2495 : qualifiedId(qualifiedId),
2496 statement(statement)
2499 virtual SourceLocation firstSourceLocation() const
2500 { return qualifiedId->identifierToken; }
2502 virtual SourceLocation lastSourceLocation() const
2503 { return statement->lastSourceLocation(); }
2505 virtual void accept0(Visitor *visitor);
2508 UiQualifiedId *qualifiedId;
2509 Statement *statement;
2510 SourceLocation colonToken;
2513 class QML_PARSER_EXPORT UiArrayBinding: public UiObjectMember
2516 QDECLARATIVEJS_DECLARE_AST_NODE(UiArrayBinding)
2518 UiArrayBinding(UiQualifiedId *qualifiedId,
2519 UiArrayMemberList *members)
2520 : qualifiedId(qualifiedId),
2524 virtual SourceLocation firstSourceLocation() const
2525 { return qualifiedId->identifierToken; }
2527 virtual SourceLocation lastSourceLocation() const
2528 { return rbracketToken; }
2530 virtual void accept0(Visitor *visitor);
2533 UiQualifiedId *qualifiedId;
2534 UiArrayMemberList *members;
2535 SourceLocation colonToken;
2536 SourceLocation lbracketToken;
2537 SourceLocation rbracketToken;
2540 } } // namespace AST
2544 QT_QML_END_NAMESPACE