source: trunk/src/declarative/qml/parser/qdeclarativejsast_p.h

Last change on this file was 846, checked in by Dmitry A. Kuminov, 14 years ago

trunk: Merged in qt 4.7.2 sources from branches/vendor/nokia/qt.

File size: 60.8 KB
Line 
1/****************************************************************************
2**
3** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
4** All rights reserved.
5** Contact: Nokia Corporation (qt-info@nokia.com)
6**
7** This file is part of the QtDeclarative module of the Qt Toolkit.
8**
9** $QT_BEGIN_LICENSE:LGPL$
10** Commercial Usage
11** Licensees holding valid Qt Commercial licenses may use this file in
12** accordance with the Qt Commercial License Agreement provided with the
13** Software or, alternatively, in accordance with the terms contained in
14** a written agreement between you and Nokia.
15**
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.
23**
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.
27**
28** GNU General Public License Usage
29** Alternatively, this file may be used under the terms of the GNU
30** General Public License version 3.0 as published by the Free Software
31** Foundation and appearing in the file LICENSE.GPL included in the
32** packaging of this file. Please review the following information to
33** ensure the GNU General Public License version 3.0 requirements will be
34** met: http://www.gnu.org/copyleft/gpl.html.
35**
36** If you have questions regarding the use of this file, please contact
37** Nokia at qt-info@nokia.com.
38** $QT_END_LICENSE$
39**
40****************************************************************************/
41
42#ifndef QDECLARATIVEJSAST_P_H
43#define QDECLARATIVEJSAST_P_H
44
45//
46// W A R N I N G
47// -------------
48//
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.
52//
53// We mean it.
54//
55
56#include "private/qdeclarativejsastvisitor_p.h"
57#include "private/qdeclarativejsglobal_p.h"
58
59#include <QtCore/QString>
60
61QT_QML_BEGIN_NAMESPACE
62
63#define QDECLARATIVEJS_DECLARE_AST_NODE(name) \
64 enum { K = Kind_##name };
65
66namespace QSOperator // ### rename
67{
68
69enum Op {
70 Add,
71 And,
72 InplaceAnd,
73 Assign,
74 BitAnd,
75 BitOr,
76 BitXor,
77 InplaceSub,
78 Div,
79 InplaceDiv,
80 Equal,
81 Ge,
82 Gt,
83 In,
84 InplaceAdd,
85 InstanceOf,
86 Le,
87 LShift,
88 InplaceLeftShift,
89 Lt,
90 Mod,
91 InplaceMod,
92 Mul,
93 InplaceMul,
94 NotEqual,
95 Or,
96 InplaceOr,
97 RShift,
98 InplaceRightShift,
99 StrictEqual,
100 StrictNotEqual,
101 Sub,
102 URShift,
103 InplaceURightShift,
104 InplaceXor
105};
106
107} // namespace QSOperator
108
109namespace QDeclarativeJS {
110class NameId;
111namespace AST {
112
113template <typename _T1, typename _T2>
114_T1 cast(_T2 *ast)
115{
116 if (ast && ast->kind == static_cast<_T1>(0)->K)
117 return static_cast<_T1>(ast);
118
119 return 0;
120}
121
122class QML_PARSER_EXPORT Node
123{
124public:
125 enum Kind {
126 Kind_Undefined,
127
128 Kind_ArgumentList,
129 Kind_ArrayLiteral,
130 Kind_ArrayMemberExpression,
131 Kind_BinaryExpression,
132 Kind_Block,
133 Kind_BreakStatement,
134 Kind_CallExpression,
135 Kind_CaseBlock,
136 Kind_CaseClause,
137 Kind_CaseClauses,
138 Kind_Catch,
139 Kind_ConditionalExpression,
140 Kind_ContinueStatement,
141 Kind_DebuggerStatement,
142 Kind_DefaultClause,
143 Kind_DeleteExpression,
144 Kind_DoWhileStatement,
145 Kind_ElementList,
146 Kind_Elision,
147 Kind_EmptyStatement,
148 Kind_Expression,
149 Kind_ExpressionStatement,
150 Kind_FalseLiteral,
151 Kind_FieldMemberExpression,
152 Kind_Finally,
153 Kind_ForEachStatement,
154 Kind_ForStatement,
155 Kind_FormalParameterList,
156 Kind_FunctionBody,
157 Kind_FunctionDeclaration,
158 Kind_FunctionExpression,
159 Kind_FunctionSourceElement,
160 Kind_IdentifierExpression,
161 Kind_IdentifierPropertyName,
162 Kind_IfStatement,
163 Kind_LabelledStatement,
164 Kind_LocalForEachStatement,
165 Kind_LocalForStatement,
166 Kind_NewExpression,
167 Kind_NewMemberExpression,
168 Kind_NotExpression,
169 Kind_NullExpression,
170 Kind_NumericLiteral,
171 Kind_NumericLiteralPropertyName,
172 Kind_ObjectLiteral,
173 Kind_PostDecrementExpression,
174 Kind_PostIncrementExpression,
175 Kind_PreDecrementExpression,
176 Kind_PreIncrementExpression,
177 Kind_Program,
178 Kind_PropertyName,
179 Kind_PropertyNameAndValueList,
180 Kind_RegExpLiteral,
181 Kind_ReturnStatement,
182 Kind_SourceElement,
183 Kind_SourceElements,
184 Kind_StatementList,
185 Kind_StatementSourceElement,
186 Kind_StringLiteral,
187 Kind_StringLiteralPropertyName,
188 Kind_SwitchStatement,
189 Kind_ThisExpression,
190 Kind_ThrowStatement,
191 Kind_TildeExpression,
192 Kind_TrueLiteral,
193 Kind_TryStatement,
194 Kind_TypeOfExpression,
195 Kind_UnaryMinusExpression,
196 Kind_UnaryPlusExpression,
197 Kind_VariableDeclaration,
198 Kind_VariableDeclarationList,
199 Kind_VariableStatement,
200 Kind_VoidExpression,
201 Kind_WhileStatement,
202 Kind_WithStatement,
203 Kind_NestedExpression,
204
205 Kind_UiArrayBinding,
206 Kind_UiImport,
207 Kind_UiImportList,
208 Kind_UiObjectBinding,
209 Kind_UiObjectDefinition,
210 Kind_UiObjectInitializer,
211 Kind_UiObjectMemberList,
212 Kind_UiArrayMemberList,
213 Kind_UiProgram,
214 Kind_UiParameterList,
215 Kind_UiPublicMember,
216 Kind_UiQualifiedId,
217 Kind_UiScriptBinding,
218 Kind_UiSourceElement,
219 Kind_UiFormal,
220 Kind_UiFormalList,
221 Kind_UiSignature
222 };
223
224 inline Node()
225 : kind(Kind_Undefined) {}
226
227 // NOTE: node destructors are never called,
228 // instead we block free the memory
229 // (see the NodePool class)
230 virtual ~Node() {}
231
232 virtual ExpressionNode *expressionCast();
233 virtual BinaryExpression *binaryExpressionCast();
234 virtual Statement *statementCast();
235 virtual UiObjectMember *uiObjectMemberCast();
236
237 void accept(Visitor *visitor);
238 static void accept(Node *node, Visitor *visitor);
239
240 inline static void acceptChild(Node *node, Visitor *visitor)
241 { return accept(node, visitor); } // ### remove
242
243 virtual void accept0(Visitor *visitor) = 0;
244
245// attributes
246 int kind;
247};
248
249class QML_PARSER_EXPORT ExpressionNode: public Node
250{
251public:
252 ExpressionNode() {}
253
254 virtual ExpressionNode *expressionCast();
255
256 virtual SourceLocation firstSourceLocation() const = 0;
257 virtual SourceLocation lastSourceLocation() const = 0;
258};
259
260class QML_PARSER_EXPORT Statement: public Node
261{
262public:
263 Statement() {}
264
265 virtual Statement *statementCast();
266
267 virtual SourceLocation firstSourceLocation() const = 0;
268 virtual SourceLocation lastSourceLocation() const = 0;
269};
270
271class QML_PARSER_EXPORT UiFormal: public Node
272{
273public:
274 QDECLARATIVEJS_DECLARE_AST_NODE(UiFormal)
275
276 UiFormal(NameId *name, NameId *alias = 0)
277 : name(name), alias(alias)
278 { }
279
280 virtual SourceLocation firstSourceLocation() const
281 { return SourceLocation(); }
282
283 virtual SourceLocation lastSourceLocation() const
284 { return SourceLocation(); }
285
286 virtual void accept0(Visitor *visitor);
287
288// attributes
289 NameId *name;
290 NameId *alias;
291 SourceLocation identifierToken;
292 SourceLocation asToken;
293 SourceLocation aliasToken;
294};
295
296class QML_PARSER_EXPORT UiFormalList: public Node
297{
298public:
299 QDECLARATIVEJS_DECLARE_AST_NODE(UiFormalList)
300
301 UiFormalList(UiFormal *formal)
302 : formal(formal), next(this) {}
303
304 UiFormalList(UiFormalList *previous, UiFormal *formal)
305 : formal(formal)
306 {
307 next = previous->next;
308 previous->next = this;
309 }
310
311 UiFormalList *finish()
312 {
313 UiFormalList *head = next;
314 next = 0;
315 return head;
316 }
317
318 virtual SourceLocation firstSourceLocation() const
319 { return SourceLocation(); }
320
321 virtual SourceLocation lastSourceLocation() const
322 { return SourceLocation(); }
323
324 virtual void accept0(Visitor *visitor);
325
326// attributes
327 UiFormal *formal;
328 UiFormalList *next;
329};
330
331class QML_PARSER_EXPORT UiSignature: public Node
332{
333public:
334 QDECLARATIVEJS_DECLARE_AST_NODE(UiSignature)
335
336 UiSignature(UiFormalList *formals = 0)
337 : formals(formals)
338 { }
339
340 virtual SourceLocation firstSourceLocation() const
341 { return SourceLocation(); }
342
343 virtual SourceLocation lastSourceLocation() const
344 { return SourceLocation(); }
345
346 virtual void accept0(Visitor *visitor);
347
348// attributes
349 SourceLocation lparenToken;
350 UiFormalList *formals;
351 SourceLocation rparenToken;
352};
353
354class QML_PARSER_EXPORT NestedExpression: public ExpressionNode
355{
356public:
357 QDECLARATIVEJS_DECLARE_AST_NODE(NestedExpression)
358
359 NestedExpression(ExpressionNode *expression)
360 : expression(expression)
361 { kind = K; }
362
363 virtual void accept0(Visitor *visitor);
364
365 virtual SourceLocation firstSourceLocation() const
366 { return lparenToken; }
367
368 virtual SourceLocation lastSourceLocation() const
369 { return rparenToken; }
370
371// attributes
372 ExpressionNode *expression;
373 SourceLocation lparenToken;
374 SourceLocation rparenToken;
375};
376
377class QML_PARSER_EXPORT ThisExpression: public ExpressionNode
378{
379public:
380 QDECLARATIVEJS_DECLARE_AST_NODE(ThisExpression)
381
382 ThisExpression() { kind = K; }
383
384 virtual void accept0(Visitor *visitor);
385
386 virtual SourceLocation firstSourceLocation() const
387 { return thisToken; }
388
389 virtual SourceLocation lastSourceLocation() const
390 { return thisToken; }
391
392// attributes
393 SourceLocation thisToken;
394};
395
396class QML_PARSER_EXPORT IdentifierExpression: public ExpressionNode
397{
398public:
399 QDECLARATIVEJS_DECLARE_AST_NODE(IdentifierExpression)
400
401 IdentifierExpression(NameId *n):
402 name (n) { kind = K; }
403
404 virtual void accept0(Visitor *visitor);
405
406 virtual SourceLocation firstSourceLocation() const
407 { return identifierToken; }
408
409 virtual SourceLocation lastSourceLocation() const
410 { return identifierToken; }
411
412// attributes
413 NameId *name;
414 SourceLocation identifierToken;
415};
416
417class QML_PARSER_EXPORT NullExpression: public ExpressionNode
418{
419public:
420 QDECLARATIVEJS_DECLARE_AST_NODE(NullExpression)
421
422 NullExpression() { kind = K; }
423
424 virtual void accept0(Visitor *visitor);
425
426 virtual SourceLocation firstSourceLocation() const
427 { return nullToken; }
428
429 virtual SourceLocation lastSourceLocation() const
430 { return nullToken; }
431
432// attributes
433 SourceLocation nullToken;
434};
435
436class QML_PARSER_EXPORT TrueLiteral: public ExpressionNode
437{
438public:
439 QDECLARATIVEJS_DECLARE_AST_NODE(TrueLiteral)
440
441 TrueLiteral() { kind = K; }
442
443 virtual void accept0(Visitor *visitor);
444
445 virtual SourceLocation firstSourceLocation() const
446 { return trueToken; }
447
448 virtual SourceLocation lastSourceLocation() const
449 { return trueToken; }
450
451// attributes
452 SourceLocation trueToken;
453};
454
455class QML_PARSER_EXPORT FalseLiteral: public ExpressionNode
456{
457public:
458 QDECLARATIVEJS_DECLARE_AST_NODE(FalseLiteral)
459
460 FalseLiteral() { kind = K; }
461
462 virtual void accept0(Visitor *visitor);
463
464 virtual SourceLocation firstSourceLocation() const
465 { return falseToken; }
466
467 virtual SourceLocation lastSourceLocation() const
468 { return falseToken; }
469
470// attributes
471 SourceLocation falseToken;
472};
473
474class QML_PARSER_EXPORT NumericLiteral: public ExpressionNode
475{
476public:
477 QDECLARATIVEJS_DECLARE_AST_NODE(NumericLiteral)
478
479 NumericLiteral(double v):
480 value(v) { kind = K; }
481
482 virtual void accept0(Visitor *visitor);
483
484 virtual SourceLocation firstSourceLocation() const
485 { return literalToken; }
486
487 virtual SourceLocation lastSourceLocation() const
488 { return literalToken; }
489
490// attributes:
491 double value;
492 SourceLocation literalToken;
493};
494
495class QML_PARSER_EXPORT StringLiteral: public ExpressionNode
496{
497public:
498 QDECLARATIVEJS_DECLARE_AST_NODE(StringLiteral)
499
500 StringLiteral(NameId *v):
501 value (v) { kind = K; }
502
503 virtual void accept0(Visitor *visitor);
504
505 virtual SourceLocation firstSourceLocation() const
506 { return literalToken; }
507
508 virtual SourceLocation lastSourceLocation() const
509 { return literalToken; }
510
511// attributes:
512 NameId *value;
513 SourceLocation literalToken;
514};
515
516class QML_PARSER_EXPORT RegExpLiteral: public ExpressionNode
517{
518public:
519 QDECLARATIVEJS_DECLARE_AST_NODE(RegExpLiteral)
520
521 RegExpLiteral(NameId *p, int f):
522 pattern (p), flags (f) { kind = K; }
523
524 virtual void accept0(Visitor *visitor);
525
526 virtual SourceLocation firstSourceLocation() const
527 { return literalToken; }
528
529 virtual SourceLocation lastSourceLocation() const
530 { return literalToken; }
531
532// attributes:
533 NameId *pattern;
534 int flags;
535 SourceLocation literalToken;
536};
537
538class QML_PARSER_EXPORT ArrayLiteral: public ExpressionNode
539{
540public:
541 QDECLARATIVEJS_DECLARE_AST_NODE(ArrayLiteral)
542
543 ArrayLiteral(Elision *e):
544 elements (0), elision (e)
545 { kind = K; }
546
547 ArrayLiteral(ElementList *elts):
548 elements (elts), elision (0)
549 { kind = K; }
550
551 ArrayLiteral(ElementList *elts, Elision *e):
552 elements (elts), elision (e)
553 { kind = K; }
554
555 virtual void accept0(Visitor *visitor);
556
557 virtual SourceLocation firstSourceLocation() const
558 { return lbracketToken; }
559
560 virtual SourceLocation lastSourceLocation() const
561 { return rbracketToken; }
562
563// attributes
564 ElementList *elements;
565 Elision *elision;
566 SourceLocation lbracketToken;
567 SourceLocation commaToken;
568 SourceLocation rbracketToken;
569};
570
571class QML_PARSER_EXPORT ObjectLiteral: public ExpressionNode
572{
573public:
574 QDECLARATIVEJS_DECLARE_AST_NODE(ObjectLiteral)
575
576 ObjectLiteral():
577 properties (0) { kind = K; }
578
579 ObjectLiteral(PropertyNameAndValueList *plist):
580 properties (plist) { kind = K; }
581
582 virtual void accept0(Visitor *visitor);
583
584 virtual SourceLocation firstSourceLocation() const
585 { return lbraceToken; }
586
587 virtual SourceLocation lastSourceLocation() const
588 { return rbraceToken; }
589
590// attributes
591 PropertyNameAndValueList *properties;
592 SourceLocation lbraceToken;
593 SourceLocation rbraceToken;
594};
595
596class QML_PARSER_EXPORT ElementList: public Node
597{
598public:
599 QDECLARATIVEJS_DECLARE_AST_NODE(ElementList)
600
601 ElementList(Elision *e, ExpressionNode *expr):
602 elision (e), expression (expr), next (this)
603 { kind = K; }
604
605 ElementList(ElementList *previous, Elision *e, ExpressionNode *expr):
606 elision (e), expression (expr)
607 {
608 kind = K;
609 next = previous->next;
610 previous->next = this;
611 }
612
613 inline ElementList *finish ()
614 {
615 ElementList *front = next;
616 next = 0;
617 return front;
618 }
619
620 virtual void accept0(Visitor *visitor);
621
622// attributes
623 Elision *elision;
624 ExpressionNode *expression;
625 ElementList *next;
626 SourceLocation commaToken;
627};
628
629class QML_PARSER_EXPORT Elision: public Node
630{
631public:
632 QDECLARATIVEJS_DECLARE_AST_NODE(Elision)
633
634 Elision():
635 next (this) { kind = K; }
636
637 Elision(Elision *previous)
638 {
639 kind = K;
640 next = previous->next;
641 previous->next = this;
642 }
643
644 virtual void accept0(Visitor *visitor);
645
646 inline Elision *finish ()
647 {
648 Elision *front = next;
649 next = 0;
650 return front;
651 }
652
653// attributes
654 Elision *next;
655 SourceLocation commaToken;
656};
657
658class QML_PARSER_EXPORT PropertyNameAndValueList: public Node
659{
660public:
661 QDECLARATIVEJS_DECLARE_AST_NODE(PropertyNameAndValueList)
662
663 PropertyNameAndValueList(PropertyName *n, ExpressionNode *v):
664 name (n), value (v), next (this)
665 { kind = K; }
666
667 PropertyNameAndValueList(PropertyNameAndValueList *previous, PropertyName *n, ExpressionNode *v):
668 name (n), value (v)
669 {
670 kind = K;
671 next = previous->next;
672 previous->next = this;
673 }
674
675 virtual void accept0(Visitor *visitor);
676
677 inline PropertyNameAndValueList *finish ()
678 {
679 PropertyNameAndValueList *front = next;
680 next = 0;
681 return front;
682 }
683
684// attributes
685 PropertyName *name;
686 ExpressionNode *value;
687 PropertyNameAndValueList *next;
688 SourceLocation colonToken;
689 SourceLocation commaToken;
690};
691
692class QML_PARSER_EXPORT PropertyName: public Node
693{
694public:
695 QDECLARATIVEJS_DECLARE_AST_NODE(PropertyName)
696
697 PropertyName() { kind = K; }
698
699// attributes
700 SourceLocation propertyNameToken;
701};
702
703class QML_PARSER_EXPORT IdentifierPropertyName: public PropertyName
704{
705public:
706 QDECLARATIVEJS_DECLARE_AST_NODE(IdentifierPropertyName)
707
708 IdentifierPropertyName(NameId *n):
709 id (n) { kind = K; }
710
711 virtual void accept0(Visitor *visitor);
712
713// attributes
714 NameId *id;
715};
716
717class QML_PARSER_EXPORT StringLiteralPropertyName: public PropertyName
718{
719public:
720 QDECLARATIVEJS_DECLARE_AST_NODE(StringLiteralPropertyName)
721
722 StringLiteralPropertyName(NameId *n):
723 id (n) { kind = K; }
724
725 virtual void accept0(Visitor *visitor);
726
727// attributes
728 NameId *id;
729};
730
731class QML_PARSER_EXPORT NumericLiteralPropertyName: public PropertyName
732{
733public:
734 QDECLARATIVEJS_DECLARE_AST_NODE(NumericLiteralPropertyName)
735
736 NumericLiteralPropertyName(double n):
737 id (n) { kind = K; }
738
739 virtual void accept0(Visitor *visitor);
740
741// attributes
742 double id;
743};
744
745class QML_PARSER_EXPORT ArrayMemberExpression: public ExpressionNode
746{
747public:
748 QDECLARATIVEJS_DECLARE_AST_NODE(ArrayMemberExpression)
749
750 ArrayMemberExpression(ExpressionNode *b, ExpressionNode *e):
751 base (b), expression (e)
752 { kind = K; }
753
754 virtual void accept0(Visitor *visitor);
755
756 virtual SourceLocation firstSourceLocation() const
757 { return base->firstSourceLocation(); }
758
759 virtual SourceLocation lastSourceLocation() const
760 { return rbracketToken; }
761
762// attributes
763 ExpressionNode *base;
764 ExpressionNode *expression;
765 SourceLocation lbracketToken;
766 SourceLocation rbracketToken;
767};
768
769class QML_PARSER_EXPORT FieldMemberExpression: public ExpressionNode
770{
771public:
772 QDECLARATIVEJS_DECLARE_AST_NODE(FieldMemberExpression)
773
774 FieldMemberExpression(ExpressionNode *b, NameId *n):
775 base (b), name (n)
776 { kind = K; }
777
778 virtual void accept0(Visitor *visitor);
779
780 virtual SourceLocation firstSourceLocation() const
781 { return base->firstSourceLocation(); }
782
783 virtual SourceLocation lastSourceLocation() const
784 { return identifierToken; }
785
786 // attributes
787 ExpressionNode *base;
788 NameId *name;
789 SourceLocation dotToken;
790 SourceLocation identifierToken;
791};
792
793class QML_PARSER_EXPORT NewMemberExpression: public ExpressionNode
794{
795public:
796 QDECLARATIVEJS_DECLARE_AST_NODE(NewMemberExpression)
797
798 NewMemberExpression(ExpressionNode *b, ArgumentList *a):
799 base (b), arguments (a)
800 { kind = K; }
801
802 virtual void accept0(Visitor *visitor);
803
804 virtual SourceLocation firstSourceLocation() const
805 { return newToken; }
806
807 virtual SourceLocation lastSourceLocation() const
808 { return rparenToken; }
809
810 // attributes
811 ExpressionNode *base;
812 ArgumentList *arguments;
813 SourceLocation newToken;
814 SourceLocation lparenToken;
815 SourceLocation rparenToken;
816};
817
818class QML_PARSER_EXPORT NewExpression: public ExpressionNode
819{
820public:
821 QDECLARATIVEJS_DECLARE_AST_NODE(NewExpression)
822
823 NewExpression(ExpressionNode *e):
824 expression (e) { kind = K; }
825
826 virtual void accept0(Visitor *visitor);
827
828 virtual SourceLocation firstSourceLocation() const
829 { return newToken; }
830
831 virtual SourceLocation lastSourceLocation() const
832 { return expression->lastSourceLocation(); }
833
834// attributes
835 ExpressionNode *expression;
836 SourceLocation newToken;
837};
838
839class QML_PARSER_EXPORT CallExpression: public ExpressionNode
840{
841public:
842 QDECLARATIVEJS_DECLARE_AST_NODE(CallExpression)
843
844 CallExpression(ExpressionNode *b, ArgumentList *a):
845 base (b), arguments (a)
846 { kind = K; }
847
848 virtual void accept0(Visitor *visitor);
849
850 virtual SourceLocation firstSourceLocation() const
851 { return base->firstSourceLocation(); }
852
853 virtual SourceLocation lastSourceLocation() const
854 { return rparenToken; }
855
856// attributes
857 ExpressionNode *base;
858 ArgumentList *arguments;
859 SourceLocation lparenToken;
860 SourceLocation rparenToken;
861};
862
863class QML_PARSER_EXPORT ArgumentList: public Node
864{
865public:
866 QDECLARATIVEJS_DECLARE_AST_NODE(ArgumentList)
867
868 ArgumentList(ExpressionNode *e):
869 expression (e), next (this)
870 { kind = K; }
871
872 ArgumentList(ArgumentList *previous, ExpressionNode *e):
873 expression (e)
874 {
875 kind = K;
876 next = previous->next;
877 previous->next = this;
878 }
879
880 virtual void accept0(Visitor *visitor);
881
882 inline ArgumentList *finish ()
883 {
884 ArgumentList *front = next;
885 next = 0;
886 return front;
887 }
888
889// attributes
890 ExpressionNode *expression;
891 ArgumentList *next;
892 SourceLocation commaToken;
893};
894
895class QML_PARSER_EXPORT PostIncrementExpression: public ExpressionNode
896{
897public:
898 QDECLARATIVEJS_DECLARE_AST_NODE(PostIncrementExpression)
899
900 PostIncrementExpression(ExpressionNode *b):
901 base (b) { kind = K; }
902
903 virtual void accept0(Visitor *visitor);
904
905 virtual SourceLocation firstSourceLocation() const
906 { return base->firstSourceLocation(); }
907
908 virtual SourceLocation lastSourceLocation() const
909 { return incrementToken; }
910
911// attributes
912 ExpressionNode *base;
913 SourceLocation incrementToken;
914};
915
916class QML_PARSER_EXPORT PostDecrementExpression: public ExpressionNode
917{
918public:
919 QDECLARATIVEJS_DECLARE_AST_NODE(PostDecrementExpression)
920
921 PostDecrementExpression(ExpressionNode *b):
922 base (b) { kind = K; }
923
924 virtual void accept0(Visitor *visitor);
925
926 virtual SourceLocation firstSourceLocation() const
927 { return base->firstSourceLocation(); }
928
929 virtual SourceLocation lastSourceLocation() const
930 { return decrementToken; }
931
932// attributes
933 ExpressionNode *base;
934 SourceLocation decrementToken;
935};
936
937class QML_PARSER_EXPORT DeleteExpression: public ExpressionNode
938{
939public:
940 QDECLARATIVEJS_DECLARE_AST_NODE(DeleteExpression)
941
942 DeleteExpression(ExpressionNode *e):
943 expression (e) { kind = K; }
944
945 virtual void accept0(Visitor *visitor);
946
947 virtual SourceLocation firstSourceLocation() const
948 { return deleteToken; }
949
950 virtual SourceLocation lastSourceLocation() const
951 { return expression->lastSourceLocation(); }
952
953// attributes
954 ExpressionNode *expression;
955 SourceLocation deleteToken;
956};
957
958class QML_PARSER_EXPORT VoidExpression: public ExpressionNode
959{
960public:
961 QDECLARATIVEJS_DECLARE_AST_NODE(VoidExpression)
962
963 VoidExpression(ExpressionNode *e):
964 expression (e) { kind = K; }
965
966 virtual void accept0(Visitor *visitor);
967
968 virtual SourceLocation firstSourceLocation() const
969 { return voidToken; }
970
971 virtual SourceLocation lastSourceLocation() const
972 { return expression->lastSourceLocation(); }
973
974// attributes
975 ExpressionNode *expression;
976 SourceLocation voidToken;
977};
978
979class QML_PARSER_EXPORT TypeOfExpression: public ExpressionNode
980{
981public:
982 QDECLARATIVEJS_DECLARE_AST_NODE(TypeOfExpression)
983
984 TypeOfExpression(ExpressionNode *e):
985 expression (e) { kind = K; }
986
987 virtual void accept0(Visitor *visitor);
988
989 virtual SourceLocation firstSourceLocation() const
990 { return typeofToken; }
991
992 virtual SourceLocation lastSourceLocation() const
993 { return expression->lastSourceLocation(); }
994
995// attributes
996 ExpressionNode *expression;
997 SourceLocation typeofToken;
998};
999
1000class QML_PARSER_EXPORT PreIncrementExpression: public ExpressionNode
1001{
1002public:
1003 QDECLARATIVEJS_DECLARE_AST_NODE(PreIncrementExpression)
1004
1005 PreIncrementExpression(ExpressionNode *e):
1006 expression (e) { kind = K; }
1007
1008 virtual void accept0(Visitor *visitor);
1009
1010 virtual SourceLocation firstSourceLocation() const
1011 { return incrementToken; }
1012
1013 virtual SourceLocation lastSourceLocation() const
1014 { return expression->lastSourceLocation(); }
1015
1016// attributes
1017 ExpressionNode *expression;
1018 SourceLocation incrementToken;
1019};
1020
1021class QML_PARSER_EXPORT PreDecrementExpression: public ExpressionNode
1022{
1023public:
1024 QDECLARATIVEJS_DECLARE_AST_NODE(PreDecrementExpression)
1025
1026 PreDecrementExpression(ExpressionNode *e):
1027 expression (e) { kind = K; }
1028
1029 virtual void accept0(Visitor *visitor);
1030
1031 virtual SourceLocation firstSourceLocation() const
1032 { return decrementToken; }
1033
1034 virtual SourceLocation lastSourceLocation() const
1035 { return expression->lastSourceLocation(); }
1036
1037// attributes
1038 ExpressionNode *expression;
1039 SourceLocation decrementToken;
1040};
1041
1042class QML_PARSER_EXPORT UnaryPlusExpression: public ExpressionNode
1043{
1044public:
1045 QDECLARATIVEJS_DECLARE_AST_NODE(UnaryPlusExpression)
1046
1047 UnaryPlusExpression(ExpressionNode *e):
1048 expression (e) { kind = K; }
1049
1050 virtual void accept0(Visitor *visitor);
1051
1052 virtual SourceLocation firstSourceLocation() const
1053 { return plusToken; }
1054
1055 virtual SourceLocation lastSourceLocation() const
1056 { return expression->lastSourceLocation(); }
1057
1058// attributes
1059 ExpressionNode *expression;
1060 SourceLocation plusToken;
1061};
1062
1063class QML_PARSER_EXPORT UnaryMinusExpression: public ExpressionNode
1064{
1065public:
1066 QDECLARATIVEJS_DECLARE_AST_NODE(UnaryMinusExpression)
1067
1068 UnaryMinusExpression(ExpressionNode *e):
1069 expression (e) { kind = K; }
1070
1071 virtual void accept0(Visitor *visitor);
1072
1073 virtual SourceLocation firstSourceLocation() const
1074 { return minusToken; }
1075
1076 virtual SourceLocation lastSourceLocation() const
1077 { return expression->lastSourceLocation(); }
1078
1079// attributes
1080 ExpressionNode *expression;
1081 SourceLocation minusToken;
1082};
1083
1084class QML_PARSER_EXPORT TildeExpression: public ExpressionNode
1085{
1086public:
1087 QDECLARATIVEJS_DECLARE_AST_NODE(TildeExpression)
1088
1089 TildeExpression(ExpressionNode *e):
1090 expression (e) { kind = K; }
1091
1092 virtual void accept0(Visitor *visitor);
1093
1094 virtual SourceLocation firstSourceLocation() const
1095 { return tildeToken; }
1096
1097 virtual SourceLocation lastSourceLocation() const
1098 { return expression->lastSourceLocation(); }
1099
1100// attributes
1101 ExpressionNode *expression;
1102 SourceLocation tildeToken;
1103};
1104
1105class QML_PARSER_EXPORT NotExpression: public ExpressionNode
1106{
1107public:
1108 QDECLARATIVEJS_DECLARE_AST_NODE(NotExpression)
1109
1110 NotExpression(ExpressionNode *e):
1111 expression (e) { kind = K; }
1112
1113 virtual void accept0(Visitor *visitor);
1114
1115 virtual SourceLocation firstSourceLocation() const
1116 { return notToken; }
1117
1118 virtual SourceLocation lastSourceLocation() const
1119 { return expression->lastSourceLocation(); }
1120
1121// attributes
1122 ExpressionNode *expression;
1123 SourceLocation notToken;
1124};
1125
1126class QML_PARSER_EXPORT BinaryExpression: public ExpressionNode
1127{
1128public:
1129 QDECLARATIVEJS_DECLARE_AST_NODE(BinaryExpression)
1130
1131 BinaryExpression(ExpressionNode *l, int o, ExpressionNode *r):
1132 left (l), op (o), right (r)
1133 { kind = K; }
1134
1135 virtual BinaryExpression *binaryExpressionCast();
1136
1137 virtual void accept0(Visitor *visitor);
1138
1139 virtual SourceLocation firstSourceLocation() const
1140 { return left->firstSourceLocation(); }
1141
1142 virtual SourceLocation lastSourceLocation() const
1143 { return right->lastSourceLocation(); }
1144
1145// attributes
1146 ExpressionNode *left;
1147 int op;
1148 ExpressionNode *right;
1149 SourceLocation operatorToken;
1150};
1151
1152class QML_PARSER_EXPORT ConditionalExpression: public ExpressionNode
1153{
1154public:
1155 QDECLARATIVEJS_DECLARE_AST_NODE(ConditionalExpression)
1156
1157 ConditionalExpression(ExpressionNode *e, ExpressionNode *t, ExpressionNode *f):
1158 expression (e), ok (t), ko (f)
1159 { kind = K; }
1160
1161 virtual void accept0(Visitor *visitor);
1162
1163 virtual SourceLocation firstSourceLocation() const
1164 { return expression->firstSourceLocation(); }
1165
1166 virtual SourceLocation lastSourceLocation() const
1167 { return ko->lastSourceLocation(); }
1168
1169// attributes
1170 ExpressionNode *expression;
1171 ExpressionNode *ok;
1172 ExpressionNode *ko;
1173 SourceLocation questionToken;
1174 SourceLocation colonToken;
1175};
1176
1177class QML_PARSER_EXPORT Expression: public ExpressionNode // ### rename
1178{
1179public:
1180 QDECLARATIVEJS_DECLARE_AST_NODE(Expression)
1181
1182 Expression(ExpressionNode *l, ExpressionNode *r):
1183 left (l), right (r) { kind = K; }
1184
1185 virtual void accept0(Visitor *visitor);
1186
1187 virtual SourceLocation firstSourceLocation() const
1188 { return left->firstSourceLocation(); }
1189
1190 virtual SourceLocation lastSourceLocation() const
1191 { return right->lastSourceLocation(); }
1192
1193// attributes
1194 ExpressionNode *left;
1195 ExpressionNode *right;
1196 SourceLocation commaToken;
1197};
1198
1199class QML_PARSER_EXPORT Block: public Statement
1200{
1201public:
1202 QDECLARATIVEJS_DECLARE_AST_NODE(Block)
1203
1204 Block(StatementList *slist):
1205 statements (slist) { kind = K; }
1206
1207 virtual void accept0(Visitor *visitor);
1208
1209 virtual SourceLocation firstSourceLocation() const
1210 { return lbraceToken; }
1211
1212 virtual SourceLocation lastSourceLocation() const
1213 { return rbraceToken; }
1214
1215 // attributes
1216 StatementList *statements;
1217 SourceLocation lbraceToken;
1218 SourceLocation rbraceToken;
1219};
1220
1221class QML_PARSER_EXPORT StatementList: public Node
1222{
1223public:
1224 QDECLARATIVEJS_DECLARE_AST_NODE(StatementList)
1225
1226 StatementList(Statement *stmt):
1227 statement (stmt), next (this)
1228 { kind = K; }
1229
1230 StatementList(StatementList *previous, Statement *stmt):
1231 statement (stmt)
1232 {
1233 kind = K;
1234 next = previous->next;
1235 previous->next = this;
1236 }
1237
1238 virtual void accept0(Visitor *visitor);
1239
1240 inline StatementList *finish ()
1241 {
1242 StatementList *front = next;
1243 next = 0;
1244 return front;
1245 }
1246
1247// attributes
1248 Statement *statement;
1249 StatementList *next;
1250};
1251
1252class QML_PARSER_EXPORT VariableStatement: public Statement
1253{
1254public:
1255 QDECLARATIVEJS_DECLARE_AST_NODE(VariableStatement)
1256
1257 VariableStatement(VariableDeclarationList *vlist):
1258 declarations (vlist)
1259 { kind = K; }
1260
1261 virtual void accept0(Visitor *visitor);
1262
1263 virtual SourceLocation firstSourceLocation() const
1264 { return declarationKindToken; }
1265
1266 virtual SourceLocation lastSourceLocation() const
1267 { return semicolonToken; }
1268
1269// attributes
1270 VariableDeclarationList *declarations;
1271 SourceLocation declarationKindToken;
1272 SourceLocation semicolonToken;
1273};
1274
1275class QML_PARSER_EXPORT VariableDeclaration: public Node
1276{
1277public:
1278 QDECLARATIVEJS_DECLARE_AST_NODE(VariableDeclaration)
1279
1280 VariableDeclaration(NameId *n, ExpressionNode *e):
1281 name (n), expression (e), readOnly(false)
1282 { kind = K; }
1283
1284 virtual void accept0(Visitor *visitor);
1285
1286// attributes
1287 NameId *name;
1288 ExpressionNode *expression;
1289 bool readOnly;
1290 SourceLocation identifierToken;
1291};
1292
1293class QML_PARSER_EXPORT VariableDeclarationList: public Node
1294{
1295public:
1296 QDECLARATIVEJS_DECLARE_AST_NODE(VariableDeclarationList)
1297
1298 VariableDeclarationList(VariableDeclaration *decl):
1299 declaration (decl), next (this)
1300 { kind = K; }
1301
1302 VariableDeclarationList(VariableDeclarationList *previous, VariableDeclaration *decl):
1303 declaration (decl)
1304 {
1305 kind = K;
1306 next = previous->next;
1307 previous->next = this;
1308 }
1309
1310 virtual void accept0(Visitor *visitor);
1311
1312 inline VariableDeclarationList *finish (bool readOnly)
1313 {
1314 VariableDeclarationList *front = next;
1315 next = 0;
1316 if (readOnly) {
1317 VariableDeclarationList *vdl;
1318 for (vdl = front; vdl != 0; vdl = vdl->next)
1319 vdl->declaration->readOnly = true;
1320 }
1321 return front;
1322 }
1323
1324// attributes
1325 VariableDeclaration *declaration;
1326 VariableDeclarationList *next;
1327 SourceLocation commaToken;
1328};
1329
1330class QML_PARSER_EXPORT EmptyStatement: public Statement
1331{
1332public:
1333 QDECLARATIVEJS_DECLARE_AST_NODE(EmptyStatement)
1334
1335 EmptyStatement() { kind = K; }
1336
1337 virtual void accept0(Visitor *visitor);
1338
1339 virtual SourceLocation firstSourceLocation() const
1340 { return semicolonToken; }
1341
1342 virtual SourceLocation lastSourceLocation() const
1343 { return semicolonToken; }
1344
1345// attributes
1346 SourceLocation semicolonToken;
1347};
1348
1349class QML_PARSER_EXPORT ExpressionStatement: public Statement
1350{
1351public:
1352 QDECLARATIVEJS_DECLARE_AST_NODE(ExpressionStatement)
1353
1354 ExpressionStatement(ExpressionNode *e):
1355 expression (e) { kind = K; }
1356
1357 virtual void accept0(Visitor *visitor);
1358
1359 virtual SourceLocation firstSourceLocation() const
1360 { return expression->firstSourceLocation(); }
1361
1362 virtual SourceLocation lastSourceLocation() const
1363 { return semicolonToken; }
1364
1365// attributes
1366 ExpressionNode *expression;
1367 SourceLocation semicolonToken;
1368};
1369
1370class QML_PARSER_EXPORT IfStatement: public Statement
1371{
1372public:
1373 QDECLARATIVEJS_DECLARE_AST_NODE(IfStatement)
1374
1375 IfStatement(ExpressionNode *e, Statement *t, Statement *f = 0):
1376 expression (e), ok (t), ko (f)
1377 { kind = K; }
1378
1379 virtual void accept0(Visitor *visitor);
1380
1381 virtual SourceLocation firstSourceLocation() const
1382 { return ifToken; }
1383
1384 virtual SourceLocation lastSourceLocation() const
1385 {
1386 if (ko)
1387 return ko->lastSourceLocation();
1388
1389 return ok->lastSourceLocation();
1390 }
1391
1392// attributes
1393 ExpressionNode *expression;
1394 Statement *ok;
1395 Statement *ko;
1396 SourceLocation ifToken;
1397 SourceLocation lparenToken;
1398 SourceLocation rparenToken;
1399 SourceLocation elseToken;
1400};
1401
1402class QML_PARSER_EXPORT DoWhileStatement: public Statement
1403{
1404public:
1405 QDECLARATIVEJS_DECLARE_AST_NODE(DoWhileStatement)
1406
1407 DoWhileStatement(Statement *stmt, ExpressionNode *e):
1408 statement (stmt), expression (e)
1409 { kind = K; }
1410
1411 virtual void accept0(Visitor *visitor);
1412
1413 virtual SourceLocation firstSourceLocation() const
1414 { return doToken; }
1415
1416 virtual SourceLocation lastSourceLocation() const
1417 { return semicolonToken; }
1418
1419// attributes
1420 Statement *statement;
1421 ExpressionNode *expression;
1422 SourceLocation doToken;
1423 SourceLocation whileToken;
1424 SourceLocation lparenToken;
1425 SourceLocation rparenToken;
1426 SourceLocation semicolonToken;
1427};
1428
1429class QML_PARSER_EXPORT WhileStatement: public Statement
1430{
1431public:
1432 QDECLARATIVEJS_DECLARE_AST_NODE(WhileStatement)
1433
1434 WhileStatement(ExpressionNode *e, Statement *stmt):
1435 expression (e), statement (stmt)
1436 { kind = K; }
1437
1438 virtual void accept0(Visitor *visitor);
1439
1440 virtual SourceLocation firstSourceLocation() const
1441 { return whileToken; }
1442
1443 virtual SourceLocation lastSourceLocation() const
1444 { return statement->lastSourceLocation(); }
1445
1446// attributes
1447 ExpressionNode *expression;
1448 Statement *statement;
1449 SourceLocation whileToken;
1450 SourceLocation lparenToken;
1451 SourceLocation rparenToken;
1452};
1453
1454class QML_PARSER_EXPORT ForStatement: public Statement
1455{
1456public:
1457 QDECLARATIVEJS_DECLARE_AST_NODE(ForStatement)
1458
1459 ForStatement(ExpressionNode *i, ExpressionNode *c, ExpressionNode *e, Statement *stmt):
1460 initialiser (i), condition (c), expression (e), statement (stmt)
1461 { kind = K; }
1462
1463 virtual void accept0(Visitor *visitor);
1464
1465 virtual SourceLocation firstSourceLocation() const
1466 { return forToken; }
1467
1468 virtual SourceLocation lastSourceLocation() const
1469 { return statement->lastSourceLocation(); }
1470
1471// attributes
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;
1481};
1482
1483class QML_PARSER_EXPORT LocalForStatement: public Statement
1484{
1485public:
1486 QDECLARATIVEJS_DECLARE_AST_NODE(LocalForStatement)
1487
1488 LocalForStatement(VariableDeclarationList *vlist, ExpressionNode *c, ExpressionNode *e, Statement *stmt):
1489 declarations (vlist), condition (c), expression (e), statement (stmt)
1490 { kind = K; }
1491
1492 virtual void accept0(Visitor *visitor);
1493
1494 virtual SourceLocation firstSourceLocation() const
1495 { return forToken; }
1496
1497 virtual SourceLocation lastSourceLocation() const
1498 { return statement->lastSourceLocation(); }
1499
1500// attributes
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;
1511};
1512
1513class QML_PARSER_EXPORT ForEachStatement: public Statement
1514{
1515public:
1516 QDECLARATIVEJS_DECLARE_AST_NODE(ForEachStatement)
1517
1518 ForEachStatement(ExpressionNode *i, ExpressionNode *e, Statement *stmt):
1519 initialiser (i), expression (e), statement (stmt)
1520 { kind = K; }
1521
1522 virtual void accept0(Visitor *visitor);
1523
1524 virtual SourceLocation firstSourceLocation() const
1525 { return forToken; }
1526
1527 virtual SourceLocation lastSourceLocation() const
1528 { return statement->lastSourceLocation(); }
1529
1530// attributes
1531 ExpressionNode *initialiser;
1532 ExpressionNode *expression;
1533 Statement *statement;
1534 SourceLocation forToken;
1535 SourceLocation lparenToken;
1536 SourceLocation inToken;
1537 SourceLocation rparenToken;
1538};
1539
1540class QML_PARSER_EXPORT LocalForEachStatement: public Statement
1541{
1542public:
1543 QDECLARATIVEJS_DECLARE_AST_NODE(LocalForEachStatement)
1544
1545 LocalForEachStatement(VariableDeclaration *v, ExpressionNode *e, Statement *stmt):
1546 declaration (v), expression (e), statement (stmt)
1547 { kind = K; }
1548
1549 virtual void accept0(Visitor *visitor);
1550
1551 virtual SourceLocation firstSourceLocation() const
1552 { return forToken; }
1553
1554 virtual SourceLocation lastSourceLocation() const
1555 { return statement->lastSourceLocation(); }
1556
1557// attributes
1558 VariableDeclaration *declaration;
1559 ExpressionNode *expression;
1560 Statement *statement;
1561 SourceLocation forToken;
1562 SourceLocation lparenToken;
1563 SourceLocation varToken;
1564 SourceLocation inToken;
1565 SourceLocation rparenToken;
1566};
1567
1568class QML_PARSER_EXPORT ContinueStatement: public Statement
1569{
1570public:
1571 QDECLARATIVEJS_DECLARE_AST_NODE(ContinueStatement)
1572
1573 ContinueStatement(NameId *l = 0):
1574 label (l) { kind = K; }
1575
1576 virtual void accept0(Visitor *visitor);
1577
1578 virtual SourceLocation firstSourceLocation() const
1579 { return continueToken; }
1580
1581 virtual SourceLocation lastSourceLocation() const
1582 { return semicolonToken; }
1583
1584// attributes
1585 NameId *label;
1586 SourceLocation continueToken;
1587 SourceLocation identifierToken;
1588 SourceLocation semicolonToken;
1589};
1590
1591class QML_PARSER_EXPORT BreakStatement: public Statement
1592{
1593public:
1594 QDECLARATIVEJS_DECLARE_AST_NODE(BreakStatement)
1595
1596 BreakStatement(NameId *l = 0):
1597 label (l) { kind = K; }
1598
1599 virtual void accept0(Visitor *visitor);
1600
1601 virtual SourceLocation firstSourceLocation() const
1602 { return breakToken; }
1603
1604 virtual SourceLocation lastSourceLocation() const
1605 { return semicolonToken; }
1606
1607 // attributes
1608 NameId *label;
1609 SourceLocation breakToken;
1610 SourceLocation identifierToken;
1611 SourceLocation semicolonToken;
1612};
1613
1614class QML_PARSER_EXPORT ReturnStatement: public Statement
1615{
1616public:
1617 QDECLARATIVEJS_DECLARE_AST_NODE(ReturnStatement)
1618
1619 ReturnStatement(ExpressionNode *e):
1620 expression (e) { kind = K; }
1621
1622 virtual void accept0(Visitor *visitor);
1623
1624 virtual SourceLocation firstSourceLocation() const
1625 { return returnToken; }
1626
1627 virtual SourceLocation lastSourceLocation() const
1628 { return semicolonToken; }
1629
1630// attributes
1631 ExpressionNode *expression;
1632 SourceLocation returnToken;
1633 SourceLocation semicolonToken;
1634};
1635
1636class QML_PARSER_EXPORT WithStatement: public Statement
1637{
1638public:
1639 QDECLARATIVEJS_DECLARE_AST_NODE(WithStatement)
1640
1641 WithStatement(ExpressionNode *e, Statement *stmt):
1642 expression (e), statement (stmt)
1643 { kind = K; }
1644
1645 virtual void accept0(Visitor *visitor);
1646
1647 virtual SourceLocation firstSourceLocation() const
1648 { return withToken; }
1649
1650 virtual SourceLocation lastSourceLocation() const
1651 { return statement->lastSourceLocation(); }
1652
1653// attributes
1654 ExpressionNode *expression;
1655 Statement *statement;
1656 SourceLocation withToken;
1657 SourceLocation lparenToken;
1658 SourceLocation rparenToken;
1659};
1660
1661class QML_PARSER_EXPORT CaseBlock: public Node
1662{
1663public:
1664 QDECLARATIVEJS_DECLARE_AST_NODE(CaseBlock)
1665
1666 CaseBlock(CaseClauses *c, DefaultClause *d = 0, CaseClauses *r = 0):
1667 clauses (c), defaultClause (d), moreClauses (r)
1668 { kind = K; }
1669
1670 virtual void accept0(Visitor *visitor);
1671
1672// attributes
1673 CaseClauses *clauses;
1674 DefaultClause *defaultClause;
1675 CaseClauses *moreClauses;
1676 SourceLocation lbraceToken;
1677 SourceLocation rbraceToken;
1678};
1679
1680class QML_PARSER_EXPORT SwitchStatement: public Statement
1681{
1682public:
1683 QDECLARATIVEJS_DECLARE_AST_NODE(SwitchStatement)
1684
1685 SwitchStatement(ExpressionNode *e, CaseBlock *b):
1686 expression (e), block (b)
1687 { kind = K; }
1688
1689 virtual void accept0(Visitor *visitor);
1690
1691 virtual SourceLocation firstSourceLocation() const
1692 { return switchToken; }
1693
1694 virtual SourceLocation lastSourceLocation() const
1695 { return block->rbraceToken; }
1696
1697// attributes
1698 ExpressionNode *expression;
1699 CaseBlock *block;
1700 SourceLocation switchToken;
1701 SourceLocation lparenToken;
1702 SourceLocation rparenToken;
1703};
1704
1705class QML_PARSER_EXPORT CaseClauses: public Node
1706{
1707public:
1708 QDECLARATIVEJS_DECLARE_AST_NODE(CaseClauses)
1709
1710 CaseClauses(CaseClause *c):
1711 clause (c), next (this)
1712 { kind = K; }
1713
1714 CaseClauses(CaseClauses *previous, CaseClause *c):
1715 clause (c)
1716 {
1717 kind = K;
1718 next = previous->next;
1719 previous->next = this;
1720 }
1721
1722 virtual void accept0(Visitor *visitor);
1723
1724 inline CaseClauses *finish ()
1725 {
1726 CaseClauses *front = next;
1727 next = 0;
1728 return front;
1729 }
1730
1731//attributes
1732 CaseClause *clause;
1733 CaseClauses *next;
1734};
1735
1736class QML_PARSER_EXPORT CaseClause: public Node
1737{
1738public:
1739 QDECLARATIVEJS_DECLARE_AST_NODE(CaseClause)
1740
1741 CaseClause(ExpressionNode *e, StatementList *slist):
1742 expression (e), statements (slist)
1743 { kind = K; }
1744
1745 virtual void accept0(Visitor *visitor);
1746
1747// attributes
1748 ExpressionNode *expression;
1749 StatementList *statements;
1750 SourceLocation caseToken;
1751 SourceLocation colonToken;
1752};
1753
1754class QML_PARSER_EXPORT DefaultClause: public Node
1755{
1756public:
1757 QDECLARATIVEJS_DECLARE_AST_NODE(DefaultClause)
1758
1759 DefaultClause(StatementList *slist):
1760 statements (slist)
1761 { kind = K; }
1762
1763 virtual void accept0(Visitor *visitor);
1764
1765// attributes
1766 StatementList *statements;
1767 SourceLocation defaultToken;
1768 SourceLocation colonToken;
1769};
1770
1771class QML_PARSER_EXPORT LabelledStatement: public Statement
1772{
1773public:
1774 QDECLARATIVEJS_DECLARE_AST_NODE(LabelledStatement)
1775
1776 LabelledStatement(NameId *l, Statement *stmt):
1777 label (l), statement (stmt)
1778 { kind = K; }
1779
1780 virtual void accept0(Visitor *visitor);
1781
1782 virtual SourceLocation firstSourceLocation() const
1783 { return identifierToken; }
1784
1785 virtual SourceLocation lastSourceLocation() const
1786 { return statement->lastSourceLocation(); }
1787
1788// attributes
1789 NameId *label;
1790 Statement *statement;
1791 SourceLocation identifierToken;
1792 SourceLocation colonToken;
1793};
1794
1795class QML_PARSER_EXPORT ThrowStatement: public Statement
1796{
1797public:
1798 QDECLARATIVEJS_DECLARE_AST_NODE(ThrowStatement)
1799
1800 ThrowStatement(ExpressionNode *e):
1801 expression (e) { kind = K; }
1802
1803 virtual void accept0(Visitor *visitor);
1804
1805 virtual SourceLocation firstSourceLocation() const
1806 { return throwToken; }
1807
1808 virtual SourceLocation lastSourceLocation() const
1809 { return semicolonToken; }
1810
1811 // attributes
1812 ExpressionNode *expression;
1813 SourceLocation throwToken;
1814 SourceLocation semicolonToken;
1815};
1816
1817class QML_PARSER_EXPORT Catch: public Node
1818{
1819public:
1820 QDECLARATIVEJS_DECLARE_AST_NODE(Catch)
1821
1822 Catch(NameId *n, Block *stmt):
1823 name (n), statement (stmt)
1824 { kind = K; }
1825
1826 virtual void accept0(Visitor *visitor);
1827
1828// attributes
1829 NameId *name;
1830 Block *statement;
1831 SourceLocation catchToken;
1832 SourceLocation lparenToken;
1833 SourceLocation identifierToken;
1834 SourceLocation rparenToken;
1835};
1836
1837class QML_PARSER_EXPORT Finally: public Node
1838{
1839public:
1840 QDECLARATIVEJS_DECLARE_AST_NODE(Finally)
1841
1842 Finally(Block *stmt):
1843 statement (stmt)
1844 { kind = K; }
1845
1846 virtual void accept0(Visitor *visitor);
1847
1848// attributes
1849 Block *statement;
1850 SourceLocation finallyToken;
1851};
1852
1853class QML_PARSER_EXPORT TryStatement: public Statement
1854{
1855public:
1856 QDECLARATIVEJS_DECLARE_AST_NODE(TryStatement)
1857
1858 TryStatement(Statement *stmt, Catch *c, Finally *f):
1859 statement (stmt), catchExpression (c), finallyExpression (f)
1860 { kind = K; }
1861
1862 TryStatement(Statement *stmt, Finally *f):
1863 statement (stmt), catchExpression (0), finallyExpression (f)
1864 { kind = K; }
1865
1866 TryStatement(Statement *stmt, Catch *c):
1867 statement (stmt), catchExpression (c), finallyExpression (0)
1868 { kind = K; }
1869
1870 virtual void accept0(Visitor *visitor);
1871
1872 virtual SourceLocation firstSourceLocation() const
1873 { return tryToken; }
1874
1875 virtual SourceLocation lastSourceLocation() const
1876 {
1877 if (finallyExpression)
1878 return finallyExpression->statement->rbraceToken;
1879 else if (catchExpression)
1880 return catchExpression->statement->rbraceToken;
1881
1882 return statement->lastSourceLocation();
1883 }
1884
1885// attributes
1886 Statement *statement;
1887 Catch *catchExpression;
1888 Finally *finallyExpression;
1889 SourceLocation tryToken;
1890};
1891
1892class QML_PARSER_EXPORT FunctionExpression: public ExpressionNode
1893{
1894public:
1895 QDECLARATIVEJS_DECLARE_AST_NODE(FunctionExpression)
1896
1897 FunctionExpression(NameId *n, FormalParameterList *f, FunctionBody *b):
1898 name (n), formals (f), body (b)
1899 { kind = K; }
1900
1901 virtual void accept0(Visitor *visitor);
1902
1903 virtual SourceLocation firstSourceLocation() const
1904 { return functionToken; }
1905
1906 virtual SourceLocation lastSourceLocation() const
1907 { return rbraceToken; }
1908
1909// attributes
1910 NameId *name;
1911 FormalParameterList *formals;
1912 FunctionBody *body;
1913 SourceLocation functionToken;
1914 SourceLocation identifierToken;
1915 SourceLocation lparenToken;
1916 SourceLocation rparenToken;
1917 SourceLocation lbraceToken;
1918 SourceLocation rbraceToken;
1919};
1920
1921class QML_PARSER_EXPORT FunctionDeclaration: public FunctionExpression
1922{
1923public:
1924 QDECLARATIVEJS_DECLARE_AST_NODE(FunctionDeclaration)
1925
1926 FunctionDeclaration(NameId *n, FormalParameterList *f, FunctionBody *b):
1927 FunctionExpression(n, f, b)
1928 { kind = K; }
1929
1930 virtual void accept0(Visitor *visitor);
1931};
1932
1933class QML_PARSER_EXPORT FormalParameterList: public Node
1934{
1935public:
1936 QDECLARATIVEJS_DECLARE_AST_NODE(FormalParameterList)
1937
1938 FormalParameterList(NameId *n):
1939 name (n), next (this)
1940 { kind = K; }
1941
1942 FormalParameterList(FormalParameterList *previous, NameId *n):
1943 name (n)
1944 {
1945 kind = K;
1946 next = previous->next;
1947 previous->next = this;
1948 }
1949
1950 virtual void accept0(Visitor *visitor);
1951
1952 inline FormalParameterList *finish ()
1953 {
1954 FormalParameterList *front = next;
1955 next = 0;
1956 return front;
1957 }
1958
1959// attributes
1960 NameId *name;
1961 FormalParameterList *next;
1962 SourceLocation commaToken;
1963 SourceLocation identifierToken;
1964};
1965
1966class QML_PARSER_EXPORT FunctionBody: public Node
1967{
1968public:
1969 QDECLARATIVEJS_DECLARE_AST_NODE(FunctionBody)
1970
1971 FunctionBody(SourceElements *elts):
1972 elements (elts)
1973 { kind = K; }
1974
1975 virtual void accept0(Visitor *visitor);
1976
1977// attributes
1978 SourceElements *elements;
1979};
1980
1981class QML_PARSER_EXPORT Program: public Node
1982{
1983public:
1984 QDECLARATIVEJS_DECLARE_AST_NODE(Program)
1985
1986 Program(SourceElements *elts):
1987 elements (elts)
1988 { kind = K; }
1989
1990 virtual void accept0(Visitor *visitor);
1991
1992// attributes
1993 SourceElements *elements;
1994};
1995
1996class QML_PARSER_EXPORT SourceElements: public Node
1997{
1998public:
1999 QDECLARATIVEJS_DECLARE_AST_NODE(SourceElements)
2000
2001 SourceElements(SourceElement *elt):
2002 element (elt), next (this)
2003 { kind = K; }
2004
2005 SourceElements(SourceElements *previous, SourceElement *elt):
2006 element (elt)
2007 {
2008 kind = K;
2009 next = previous->next;
2010 previous->next = this;
2011 }
2012
2013 virtual void accept0(Visitor *visitor);
2014
2015 inline SourceElements *finish ()
2016 {
2017 SourceElements *front = next;
2018 next = 0;
2019 return front;
2020 }
2021
2022// attributes
2023 SourceElement *element;
2024 SourceElements *next;
2025};
2026
2027class QML_PARSER_EXPORT SourceElement: public Node
2028{
2029public:
2030 QDECLARATIVEJS_DECLARE_AST_NODE(SourceElement)
2031
2032 inline SourceElement()
2033 { kind = K; }
2034};
2035
2036class QML_PARSER_EXPORT FunctionSourceElement: public SourceElement
2037{
2038public:
2039 QDECLARATIVEJS_DECLARE_AST_NODE(FunctionSourceElement)
2040
2041 FunctionSourceElement(FunctionDeclaration *f):
2042 declaration (f)
2043 { kind = K; }
2044
2045 virtual void accept0(Visitor *visitor);
2046
2047// attributes
2048 FunctionDeclaration *declaration;
2049};
2050
2051class QML_PARSER_EXPORT StatementSourceElement: public SourceElement
2052{
2053public:
2054 QDECLARATIVEJS_DECLARE_AST_NODE(StatementSourceElement)
2055
2056 StatementSourceElement(Statement *stmt):
2057 statement (stmt)
2058 { kind = K; }
2059
2060 virtual void accept0(Visitor *visitor);
2061
2062// attributes
2063 Statement *statement;
2064};
2065
2066class QML_PARSER_EXPORT DebuggerStatement: public Statement
2067{
2068public:
2069 QDECLARATIVEJS_DECLARE_AST_NODE(DebuggerStatement)
2070
2071 DebuggerStatement()
2072 { kind = K; }
2073
2074 virtual void accept0(Visitor *visitor);
2075
2076 virtual SourceLocation firstSourceLocation() const
2077 { return debuggerToken; }
2078
2079 virtual SourceLocation lastSourceLocation() const
2080 { return semicolonToken; }
2081
2082// attributes
2083 SourceLocation debuggerToken;
2084 SourceLocation semicolonToken;
2085};
2086
2087class QML_PARSER_EXPORT UiProgram: public Node
2088{
2089public:
2090 QDECLARATIVEJS_DECLARE_AST_NODE(UiProgram)
2091
2092 UiProgram(UiImportList *imports, UiObjectMemberList *members)
2093 : imports(imports), members(members)
2094 { kind = K; }
2095
2096 virtual void accept0(Visitor *visitor);
2097
2098// attributes
2099 UiImportList *imports;
2100 UiObjectMemberList *members;
2101};
2102
2103class QML_PARSER_EXPORT UiQualifiedId: public Node
2104{
2105public:
2106 QDECLARATIVEJS_DECLARE_AST_NODE(UiQualifiedId)
2107
2108 UiQualifiedId(NameId *name)
2109 : next(this), name(name)
2110 { kind = K; }
2111
2112 UiQualifiedId(UiQualifiedId *previous, NameId *name)
2113 : name(name)
2114 {
2115 kind = K;
2116 next = previous->next;
2117 previous->next = this;
2118 }
2119
2120 UiQualifiedId *finish()
2121 {
2122 UiQualifiedId *head = next;
2123 next = 0;
2124 return head;
2125 }
2126
2127 virtual void accept0(Visitor *visitor);
2128
2129// attributes
2130 UiQualifiedId *next;
2131 NameId *name;
2132 SourceLocation identifierToken;
2133};
2134
2135class QML_PARSER_EXPORT UiImport: public Node
2136{
2137public:
2138 QDECLARATIVEJS_DECLARE_AST_NODE(UiImport)
2139
2140 UiImport(NameId *fileName)
2141 : fileName(fileName), importUri(0), importId(0)
2142 { kind = K; }
2143
2144 UiImport(UiQualifiedId *uri)
2145 : fileName(0), importUri(uri), importId(0)
2146 { kind = K; }
2147
2148 virtual SourceLocation firstSourceLocation() const
2149 { return importToken; }
2150
2151 virtual SourceLocation lastSourceLocation() const
2152 { return semicolonToken; }
2153
2154 virtual void accept0(Visitor *visitor);
2155
2156// attributes
2157 NameId *fileName;
2158 UiQualifiedId *importUri;
2159 NameId *importId;
2160 SourceLocation importToken;
2161 SourceLocation fileNameToken;
2162 SourceLocation versionToken;
2163 SourceLocation asToken;
2164 SourceLocation importIdToken;
2165 SourceLocation semicolonToken;
2166};
2167
2168class QML_PARSER_EXPORT UiImportList: public Node
2169{
2170public:
2171 QDECLARATIVEJS_DECLARE_AST_NODE(UiImportList)
2172
2173 UiImportList(UiImport *import)
2174 : import(import),
2175 next(this)
2176 { kind = K; }
2177
2178 UiImportList(UiImportList *previous, UiImport *import)
2179 : import(import)
2180 {
2181 kind = K;
2182 next = previous->next;
2183 previous->next = this;
2184 }
2185
2186 virtual SourceLocation firstSourceLocation() const
2187 {
2188 if (import) return import->firstSourceLocation();
2189 else return SourceLocation();
2190 }
2191
2192 virtual SourceLocation lastSourceLocation() const
2193 {
2194 for (const UiImportList *it = this; it; it = it->next)
2195 if (!it->next && it->import)
2196 return it->import->lastSourceLocation();
2197
2198 return SourceLocation();
2199 }
2200
2201 UiImportList *finish()
2202 {
2203 UiImportList *head = next;
2204 next = 0;
2205 return head;
2206 }
2207
2208 virtual void accept0(Visitor *visitor);
2209
2210// attributes
2211 UiImport *import;
2212 UiImportList *next;
2213};
2214
2215class QML_PARSER_EXPORT UiObjectMember: public Node
2216{
2217public:
2218 virtual SourceLocation firstSourceLocation() const = 0;
2219 virtual SourceLocation lastSourceLocation() const = 0;
2220
2221 virtual UiObjectMember *uiObjectMemberCast();
2222};
2223
2224class QML_PARSER_EXPORT UiObjectMemberList: public Node
2225{
2226public:
2227 QDECLARATIVEJS_DECLARE_AST_NODE(UiObjectMemberList)
2228
2229 UiObjectMemberList(UiObjectMember *member)
2230 : next(this), member(member)
2231 { kind = K; }
2232
2233 UiObjectMemberList(UiObjectMemberList *previous, UiObjectMember *member)
2234 : member(member)
2235 {
2236 kind = K;
2237 next = previous->next;
2238 previous->next = this;
2239 }
2240
2241 virtual void accept0(Visitor *visitor);
2242
2243 UiObjectMemberList *finish()
2244 {
2245 UiObjectMemberList *head = next;
2246 next = 0;
2247 return head;
2248 }
2249
2250// attributes
2251 UiObjectMemberList *next;
2252 UiObjectMember *member;
2253};
2254
2255class QML_PARSER_EXPORT UiArrayMemberList: public Node
2256{
2257public:
2258 QDECLARATIVEJS_DECLARE_AST_NODE(UiArrayMemberList)
2259
2260 UiArrayMemberList(UiObjectMember *member)
2261 : next(this), member(member)
2262 { kind = K; }
2263
2264 UiArrayMemberList(UiArrayMemberList *previous, UiObjectMember *member)
2265 : member(member)
2266 {
2267 kind = K;
2268 next = previous->next;
2269 previous->next = this;
2270 }
2271
2272 virtual void accept0(Visitor *visitor);
2273
2274 UiArrayMemberList *finish()
2275 {
2276 UiArrayMemberList *head = next;
2277 next = 0;
2278 return head;
2279 }
2280
2281// attributes
2282 UiArrayMemberList *next;
2283 UiObjectMember *member;
2284 SourceLocation commaToken;
2285};
2286
2287class QML_PARSER_EXPORT UiObjectInitializer: public Node
2288{
2289public:
2290 QDECLARATIVEJS_DECLARE_AST_NODE(UiObjectInitializer)
2291
2292 UiObjectInitializer(UiObjectMemberList *members)
2293 : members(members)
2294 { kind = K; }
2295
2296 virtual void accept0(Visitor *visitor);
2297
2298// attributes
2299 SourceLocation lbraceToken;
2300 UiObjectMemberList *members;
2301 SourceLocation rbraceToken;
2302};
2303
2304class QML_PARSER_EXPORT UiParameterList: public Node
2305{
2306public:
2307 QDECLARATIVEJS_DECLARE_AST_NODE(UiParameterList)
2308
2309 UiParameterList(NameId *t, NameId *n):
2310 type (t), name (n), next (this)
2311 { kind = K; }
2312
2313 UiParameterList(UiParameterList *previous, NameId *t, NameId *n):
2314 type (t), name (n)
2315 {
2316 kind = K;
2317 next = previous->next;
2318 previous->next = this;
2319 }
2320
2321 virtual void accept0(Visitor *) {}
2322
2323 inline UiParameterList *finish ()
2324 {
2325 UiParameterList *front = next;
2326 next = 0;
2327 return front;
2328 }
2329
2330// attributes
2331 NameId *type;
2332 NameId *name;
2333 UiParameterList *next;
2334 SourceLocation commaToken;
2335 SourceLocation identifierToken;
2336};
2337
2338class QML_PARSER_EXPORT UiPublicMember: public UiObjectMember
2339{
2340public:
2341 QDECLARATIVEJS_DECLARE_AST_NODE(UiPublicMember)
2342
2343 UiPublicMember(NameId *memberType,
2344 NameId *name)
2345 : type(Property), typeModifier(0), memberType(memberType), name(name), expression(0), binding(0), isDefaultMember(false), isReadonlyMember(false), parameters(0)
2346 { kind = K; }
2347
2348 UiPublicMember(NameId *memberType,
2349 NameId *name,
2350 ExpressionNode *expression)
2351 : type(Property), typeModifier(0), memberType(memberType), name(name), expression(expression), binding(0), isDefaultMember(false), isReadonlyMember(false), parameters(0)
2352 { kind = K; }
2353
2354 virtual SourceLocation firstSourceLocation() const
2355 {
2356 if (defaultToken.isValid())
2357 return defaultToken;
2358 else if (readonlyToken.isValid())
2359 return readonlyToken;
2360
2361 return propertyToken;
2362 }
2363
2364 virtual SourceLocation lastSourceLocation() const
2365 {
2366 if (binding)
2367 return binding->lastSourceLocation();
2368
2369 return semicolonToken;
2370 }
2371
2372 virtual void accept0(Visitor *visitor);
2373
2374// attributes
2375 enum { Signal, Property } type;
2376 NameId *typeModifier;
2377 NameId *memberType;
2378 NameId *name;
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;
2392};
2393
2394class QML_PARSER_EXPORT UiObjectDefinition: public UiObjectMember
2395{
2396public:
2397 QDECLARATIVEJS_DECLARE_AST_NODE(UiObjectDefinition)
2398
2399 UiObjectDefinition(UiQualifiedId *qualifiedTypeNameId,
2400 UiObjectInitializer *initializer)
2401 : qualifiedTypeNameId(qualifiedTypeNameId), initializer(initializer)
2402 { kind = K; }
2403
2404 virtual SourceLocation firstSourceLocation() const
2405 { return qualifiedTypeNameId->identifierToken; }
2406
2407 virtual SourceLocation lastSourceLocation() const
2408 { return initializer->rbraceToken; }
2409
2410 virtual void accept0(Visitor *visitor);
2411
2412// attributes
2413 UiQualifiedId *qualifiedTypeNameId;
2414 UiObjectInitializer *initializer;
2415};
2416
2417class QML_PARSER_EXPORT UiSourceElement: public UiObjectMember
2418{
2419public:
2420 QDECLARATIVEJS_DECLARE_AST_NODE(UiSourceElement)
2421
2422 UiSourceElement(Node *sourceElement)
2423 : sourceElement(sourceElement)
2424 { kind = K; }
2425
2426 virtual SourceLocation firstSourceLocation() const
2427 {
2428 if (FunctionDeclaration *funDecl = cast<FunctionDeclaration *>(sourceElement))
2429 return funDecl->firstSourceLocation();
2430 else if (VariableStatement *varStmt = cast<VariableStatement *>(sourceElement))
2431 return varStmt->firstSourceLocation();
2432
2433 return SourceLocation();
2434 }
2435
2436 virtual SourceLocation lastSourceLocation() const
2437 {
2438 if (FunctionDeclaration *funDecl = cast<FunctionDeclaration *>(sourceElement))
2439 return funDecl->lastSourceLocation();
2440 else if (VariableStatement *varStmt = cast<VariableStatement *>(sourceElement))
2441 return varStmt->lastSourceLocation();
2442
2443 return SourceLocation();
2444 }
2445
2446
2447 virtual void accept0(Visitor *visitor);
2448
2449// attributes
2450 Node *sourceElement;
2451};
2452
2453class QML_PARSER_EXPORT UiObjectBinding: public UiObjectMember
2454{
2455public:
2456 QDECLARATIVEJS_DECLARE_AST_NODE(UiObjectBinding)
2457
2458 UiObjectBinding(UiQualifiedId *qualifiedId,
2459 UiQualifiedId *qualifiedTypeNameId,
2460 UiObjectInitializer *initializer)
2461 : qualifiedId(qualifiedId),
2462 qualifiedTypeNameId(qualifiedTypeNameId),
2463 initializer(initializer),
2464 hasOnToken(false)
2465 { kind = K; }
2466
2467 virtual SourceLocation firstSourceLocation() const
2468 {
2469 if (hasOnToken && qualifiedTypeNameId)
2470 return qualifiedTypeNameId->identifierToken;
2471
2472 return qualifiedId->identifierToken;
2473 }
2474
2475 virtual SourceLocation lastSourceLocation() const
2476 { return initializer->rbraceToken; }
2477
2478 virtual void accept0(Visitor *visitor);
2479
2480// attributes
2481 UiQualifiedId *qualifiedId;
2482 UiQualifiedId *qualifiedTypeNameId;
2483 UiObjectInitializer *initializer;
2484 SourceLocation colonToken;
2485 bool hasOnToken;
2486};
2487
2488class QML_PARSER_EXPORT UiScriptBinding: public UiObjectMember
2489{
2490public:
2491 QDECLARATIVEJS_DECLARE_AST_NODE(UiScriptBinding)
2492
2493 UiScriptBinding(UiQualifiedId *qualifiedId,
2494 Statement *statement)
2495 : qualifiedId(qualifiedId),
2496 statement(statement)
2497 { kind = K; }
2498
2499 virtual SourceLocation firstSourceLocation() const
2500 { return qualifiedId->identifierToken; }
2501
2502 virtual SourceLocation lastSourceLocation() const
2503 { return statement->lastSourceLocation(); }
2504
2505 virtual void accept0(Visitor *visitor);
2506
2507// attributes
2508 UiQualifiedId *qualifiedId;
2509 Statement *statement;
2510 SourceLocation colonToken;
2511};
2512
2513class QML_PARSER_EXPORT UiArrayBinding: public UiObjectMember
2514{
2515public:
2516 QDECLARATIVEJS_DECLARE_AST_NODE(UiArrayBinding)
2517
2518 UiArrayBinding(UiQualifiedId *qualifiedId,
2519 UiArrayMemberList *members)
2520 : qualifiedId(qualifiedId),
2521 members(members)
2522 { kind = K; }
2523
2524 virtual SourceLocation firstSourceLocation() const
2525 { return qualifiedId->identifierToken; }
2526
2527 virtual SourceLocation lastSourceLocation() const
2528 { return rbracketToken; }
2529
2530 virtual void accept0(Visitor *visitor);
2531
2532// attributes
2533 UiQualifiedId *qualifiedId;
2534 UiArrayMemberList *members;
2535 SourceLocation colonToken;
2536 SourceLocation lbracketToken;
2537 SourceLocation rbracketToken;
2538};
2539
2540} } // namespace AST
2541
2542
2543
2544QT_QML_END_NAMESPACE
2545
2546#endif
Note: See TracBrowser for help on using the repository browser.