Qt 6.x
The Qt SDK
Loading...
Searching...
No Matches
qqmljsast_p.h
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QQMLJSAST_P_H
5#define QQMLJSAST_P_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists purely as an
12// implementation detail. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include "qqmljsastvisitor_p.h"
19#include "qqmljsglobal_p.h"
20
21#include <private/qqmljsmemorypool_p.h>
22
23#include <QtCore/qtaggedpointer.h>
24#include <QtCore/qversionnumber.h>
25
26#include <type_traits>
27
29
30class QString;
31
32namespace QQmlJS {
33 class Parser;
34}
35
36#define QQMLJS_DECLARE_AST_NODE(name) \
37 enum { K = Kind_##name };
38
39namespace QSOperator // ### rename
40{
41
42enum Op {
83};
84
85} // namespace QSOperator
86
87namespace QQmlJS {
88
89namespace AST {
90
91enum class VariableScope {
92 NoScope,
93 Var,
94 Let,
95 Const
96};
97
98template <typename T1, typename T2>
99T1 cast(T2 *ast)
100{
101 if (ast && ast->kind == std::remove_pointer_t<T1>::K)
102 return static_cast<T1>(ast);
103
104 return nullptr;
105}
106
107FunctionExpression *asAnonymousFunctionDefinition(AST::Node *n);
108ClassExpression *asAnonymousClassDefinition(AST::Node *n);
109
111{
112public:
113 enum Kind {
115
216
240 Kind_UiAnnotationList
241 };
242
243 inline Node() {}
244
245 // NOTE: node destructors are never called,
246 // instead we block free the memory
247 // (see the NodePool class)
248 virtual ~Node() {}
249
250 virtual ExpressionNode *expressionCast();
251 virtual BinaryExpression *binaryExpressionCast();
252 virtual Statement *statementCast();
253 virtual UiObjectMember *uiObjectMemberCast();
254 virtual LeftHandSideExpression *leftHandSideExpressionCast();
255 virtual Pattern *patternCast();
256 // implements the IsFunctionDefinition rules in the spec
257 virtual FunctionExpression *asFunctionDefinition();
258 virtual ClassExpression *asClassDefinition();
259
260 bool ignoreRecursionDepth() const;
261
262 inline void accept(BaseVisitor *visitor)
263 {
264 BaseVisitor::RecursionDepthCheck recursionCheck(visitor);
265
266 // Stack overflow is uncommon, ignoreRecursionDepth() only returns true if
267 // QV4_CRASH_ON_STACKOVERFLOW is set, and ignoreRecursionDepth() needs to be out of line.
268 // Therefore, check for ignoreRecursionDepth() _after_ calling the inline recursionCheck().
269 if (recursionCheck() || ignoreRecursionDepth()) {
270 if (visitor->preVisit(this))
271 accept0(visitor);
272 visitor->postVisit(this);
273 } else {
274 visitor->throwRecursionDepthError();
275 }
276 }
277
278 inline static void accept(Node *node, BaseVisitor *visitor)
279 {
280 if (node)
281 node->accept(visitor);
282 }
283
284 virtual void accept0(BaseVisitor *visitor) = 0;
287
288// attributes
289 int kind = Kind_Undefined;
290};
291
292template<typename T>
294{
295 auto current = head;
296 while (current->next)
297 current = current->next;
298 return current;
299}
300
302{
303public:
305
307 : next(this), name(name)
308 { kind = K; }
309
311 : name(name)
312 {
313 kind = K;
314 next = previous->next;
315 previous->next = this;
316 }
317
319 {
320 UiQualifiedId *head = next;
321 next = nullptr;
322 return head;
323 }
324
325 void accept0(BaseVisitor *visitor) override;
326
328 { return identifierToken; }
329
331 {
332 return lastListElement(this)->lastOwnSourceLocation();
333 }
334
335 SourceLocation lastOwnSourceLocation() const { return identifierToken; }
336
338 {
341 return result;
342 }
343
344 void toString(QString *out) const
345 {
346 for (const UiQualifiedId *it = this; it; it = it->next) {
347 out->append(it->name);
348 if (it->next)
349 out->append(QLatin1Char('.'));
350 }
351 }
352
353// attributes
357};
358
360{
361public:
363
364 Type(UiQualifiedId *typeId, Type *typeArgument = nullptr)
365 : typeId(typeId)
366 , typeArgument(typeArgument ? typeArgument->typeId : nullptr)
367 { kind = K; }
368
369 void accept0(BaseVisitor *visitor) override;
370
372 { return typeId->firstSourceLocation(); }
373
375 { return typeArgument ? typeArgument->lastSourceLocation() : typeId->lastSourceLocation(); }
376
377 QString toString() const;
378 void toString(QString *out) const;
379
380// attributes
383};
384
386{
387public:
389
391 : type(type)
392 { kind = K; }
393
394 void accept0(BaseVisitor *visitor) override;
395
397 { return colonToken; }
398
400 { return type->lastSourceLocation(); }
401
402// attributes
405};
407{
408public:
410
411 ExpressionNode *expressionCast() override;
412 bool containsOptionalChain() const;
413
414 AST::FormalParameterList *reparseAsFormalParameterList(MemoryPool *pool);
415
416};
417
419{
420 LeftHandSideExpression *leftHandSideExpressionCast() override;
421};
422
424{
425public:
427
428 Statement *statementCast() override;
429};
430
432{
433public:
435
437 : expression(expression)
438 { kind = K; }
439
440 void accept0(BaseVisitor *visitor) override;
441
443 { return lparenToken; }
444
446 { return rparenToken; }
447
448 FunctionExpression *asFunctionDefinition() override;
449 ClassExpression *asClassDefinition() override;
450
451
452// attributes
456};
457
458
460{
461public:
463 TypeExpression(Type *t) : m_type(t) { kind = K; }
464
465 void accept0(BaseVisitor *visitor) override;
466
468 return m_type->firstSourceLocation();
469 }
470
472 return m_type->lastSourceLocation();
473 }
474
476};
477
479{
480public:
482
483 ThisExpression() { kind = K; }
484
485 void accept0(BaseVisitor *visitor) override;
486
488 { return thisToken; }
489
491 { return thisToken; }
492
493// attributes
495};
496
498{
499public:
501
503 name (n) { kind = K; }
504
505 void accept0(BaseVisitor *visitor) override;
506
508 { return identifierToken; }
509
511 { return identifierToken; }
512
513// attributes
516};
517
519{
520public:
522
523 NullExpression() { kind = K; }
524
525 void accept0(BaseVisitor *visitor) override;
526
528 { return nullToken; }
529
531 { return nullToken; }
532
533// attributes
535};
536
538{
539public:
541
542 TrueLiteral() { kind = K; }
543
544 void accept0(BaseVisitor *visitor) override;
545
547 { return trueToken; }
548
550 { return trueToken; }
551
552// attributes
554};
555
557{
558public:
560
561 FalseLiteral() { kind = K; }
562
563 void accept0(BaseVisitor *visitor) override;
564
566 { return falseToken; }
567
569 { return falseToken; }
570
571// attributes
573};
574
576{
577public:
579
580 SuperLiteral() { kind = K; }
581
582 void accept0(BaseVisitor *visitor) override;
583
585 { return superToken; }
586
588 { return superToken; }
589
590// attributes
592};
593
594
596{
597public:
599
601 value(v) { kind = K; }
602
603 void accept0(BaseVisitor *visitor) override;
604
606 { return literalToken; }
607
609 { return literalToken; }
610
611// attributes:
612 double value;
614};
615
617{
618public:
620
621 UiVersionSpecifier(int majorum) : version(QTypeRevision::fromMajorVersion(majorum))
622 {
623 kind = K;
624 }
625
626 UiVersionSpecifier(int majorum, int minorum) : version(QTypeRevision::fromVersion(majorum, minorum))
627 {
628 kind = K;
629 }
630
631 void accept0(BaseVisitor *visitor) override;
632
633 SourceLocation firstSourceLocation() const override { return majorToken; }
634
636 {
637 return minorToken.isValid() ? minorToken : majorToken;
638 }
639
640 // attributes:
644};
645
647{
648public:
650
652 value (v) { kind = K; }
653
654 void accept0(BaseVisitor *visitor) override;
655
657 { return literalToken; }
658
660 { return literalToken; }
661
662// attributes:
665};
666
668{
669public:
671
673 : value(str), rawValue(raw), expression(e), next(nullptr)
674 { kind = K; }
675
677 { return literalToken; }
678
680 {
681 auto last = lastListElement(this);
682 return (last->expression ? last->expression->lastSourceLocation() : last->literalToken);
683 }
684
685 void accept0(BaseVisitor *visitor) override;
686
687 bool hasNoSubstitution = false;
693};
694
696{
697public:
699
701 pattern (p), flags (f) { kind = K; }
702
703 void accept0(BaseVisitor *visitor) override;
704
706 { return literalToken; }
707
709 { return literalToken; }
710
711// attributes:
713 int flags;
715};
716
718{
719public:
722 Binding
723 };
724 Pattern *patternCast() override;
726 ParseMode parseMode = Literal;
727};
728
730{
731public:
733
735 : elements(elts)
736 { kind = K; }
737
738 void accept0(BaseVisitor *visitor) override;
739
741 { return lbracketToken; }
742
744 { return rbracketToken; }
745
746 bool isValidArrayLiteral(SourceLocation *errorLocation = nullptr) const;
747
748 bool convertLiteralToAssignmentPattern(MemoryPool *pool, SourceLocation *errorLocation, QString *errorMessage) override;
749
750// attributes
755};
756
758{
759public:
761
763 { kind = K; }
764
766 : properties(plist)
767 { kind = K; }
768
769 void accept0(BaseVisitor *visitor) override;
770
772 { return lbraceToken; }
773
775 { return rbraceToken; }
776
777 bool convertLiteralToAssignmentPattern(MemoryPool *pool, SourceLocation *errorLocation, QString *errorMessage) override;
778
779// attributes
783};
784
786{
787public:
789
791 next (this) { kind = K; }
792
793 Elision(Elision *previous)
794 {
795 kind = K;
796 next = previous->next;
797 previous->next = this;
798 }
799
800 void accept0(BaseVisitor *visitor) override;
801
803 { return commaToken; }
804
806 { return lastListElement(this)->commaToken; }
807
808 inline Elision *finish ()
809 {
810 Elision *front = next;
811 next = nullptr;
812 return front;
813 }
814
815// attributes
818};
819
821{
822public:
824
825 PropertyName() { kind = K; }
826
828 { return propertyNameToken; }
829
831 { return propertyNameToken; }
832
833 virtual QString asString() const = 0;
834
835// attributes
837};
838
840{
841 enum Type {
844 };
845
850 TypeAnnotation *typeAnnotation, Type type = Declared)
851 : id(id), location(location), typeAnnotation(typeAnnotation, type)
852 {}
853 BoundName() = default;
854
855 bool isInjected() const { return typeAnnotation.tag() == Injected; }
856};
857
858struct BoundNames : public QVector<BoundName>
859{
860 int indexOf(const QString &name, int from = 0) const
861 {
862 auto found = std::find_if(constBegin() + from, constEnd(),
863 [name](const BoundName &it) { return it.id == name; });
864 if (found == constEnd())
865 return -1;
866 return found - constBegin();
867 }
868
869 bool contains(const QString &name) const
870 {
871 return indexOf(name) != -1;
872 }
873};
874
876{
877public:
879
880 enum Type {
881 // object literal types
886
887 // used by both bindings and literals
889 RestElement = SpreadElement,
890
891 // binding types
893 };
894
895 PatternElement(ExpressionNode *i = nullptr, Type t = Literal)
896 : initializer(i), type(t)
897 { kind = K; }
898
899 PatternElement(QStringView n, TypeAnnotation *typeAnnotation = nullptr, ExpressionNode *i = nullptr, Type t = Binding)
900 : bindingIdentifier(n), initializer(i), type(t)
901 , typeAnnotation(typeAnnotation)
902 {
903 Q_ASSERT(t >= RestElement);
904 kind = K;
905 }
906
908 : bindingTarget(pattern), initializer(i), type(t)
909 {
910 Q_ASSERT(t >= RestElement);
911 kind = K;
912 }
913
914 void accept0(BaseVisitor *visitor) override;
915 virtual bool convertLiteralToAssignmentPattern(MemoryPool *pool, SourceLocation *errorLocation, QString *errorMessage);
916
918 { return identifierToken.isValid() ? identifierToken : (bindingTarget ? bindingTarget->firstSourceLocation() : initializer->firstSourceLocation()); }
919
921 { return initializer ? initializer->lastSourceLocation() : (bindingTarget ? bindingTarget->lastSourceLocation() : (typeAnnotation ? typeAnnotation->lastSourceLocation() : identifierToken)); }
922
923 ExpressionNode *destructuringTarget() const { return bindingTarget; }
924 Pattern *destructuringPattern() const { return bindingTarget ? bindingTarget->patternCast() : nullptr; }
925 PatternElementList *elementList() const { ArrayPattern *a = cast<ArrayPattern *>(bindingTarget); return a ? a->elements : nullptr; }
926 PatternPropertyList *propertyList() const { ObjectPattern *o = cast<ObjectPattern *>(bindingTarget); return o ? o->properties : nullptr; }
927
928 bool isVariableDeclaration() const { return scope != VariableScope::NoScope; }
929 bool isLexicallyScoped() const { return scope == VariableScope::Let || scope == VariableScope::Const; }
930
931 virtual void boundNames(BoundNames *names);
932
933// attributes
936 ExpressionNode *bindingTarget = nullptr;
937 ExpressionNode *initializer = nullptr;
938 Type type = Literal;
939 TypeAnnotation *typeAnnotation = nullptr;
940 // when used in a VariableDeclarationList
941 VariableScope scope = VariableScope::NoScope;
942 bool isForDeclaration = false;
943 bool isInjectedSignalParameter = false;
944};
945
947{
948public:
950
952 : elision(elision), element(element), next(this)
953 { kind = K; }
954
956 n->next = next;
957 next = n;
958 return n;
959 }
960
962 {
963 PatternElementList *front = next;
964 next = 0;
965 return front;
966 }
967
968 void accept0(BaseVisitor *visitor) override;
969
970 void boundNames(BoundNames *names);
971
973 { return elision ? elision->firstSourceLocation() : element->firstSourceLocation(); }
974
976 {
977 auto last = lastListElement(this);
978 return last->element ? last->element->lastSourceLocation() : last->elision->lastSourceLocation();
979 }
980
981 Elision *elision = nullptr;
982 PatternElement *element = nullptr;
984};
985
987{
988public:
990
993 { kind = K; }
994
996 : PatternElement(n, /*type annotation*/nullptr, i), name(name)
997 { kind = K; }
998
1001 { kind = K; }
1002
1003 void accept0(BaseVisitor *visitor) override;
1004
1006 { return name->firstSourceLocation(); }
1008 {
1009 SourceLocation loc = PatternElement::lastSourceLocation();
1010 return loc.isValid() ? loc : name->lastSourceLocation();
1011 }
1012
1013 void boundNames(BoundNames *names) override;
1014 bool convertLiteralToAssignmentPattern(MemoryPool *pool, SourceLocation *errorLocation, QString *errorMessage) override;
1015
1016// attributes
1019};
1020
1021
1023{
1024public:
1026
1029 { kind = K; }
1030
1033 {
1034 kind = K;
1035 next = previous->next;
1036 previous->next = this;
1037 }
1038
1039 void accept0(BaseVisitor *visitor) override;
1040
1041 void boundNames(BoundNames *names);
1042
1044 {
1045 PatternPropertyList *front = next;
1046 next = 0;
1047 return front;
1048 }
1049
1051 { return property->firstSourceLocation(); }
1052
1054 { return lastListElement(this)->property->lastSourceLocation(); }
1055
1058};
1059
1061{
1062public:
1064
1066 id (n) { kind = K; }
1067
1068 void accept0(BaseVisitor *visitor) override;
1069
1070 QString asString() const override { return id.toString(); }
1071
1072// attributes
1074};
1075
1077{
1078public:
1080
1082 id (n) { kind = K; }
1083
1084 void accept0(BaseVisitor *visitor) override;
1085
1086 QString asString() const override { return id.toString(); }
1087
1088// attributes
1090};
1091
1093{
1094public:
1096
1098 id (n) { kind = K; }
1099
1100 void accept0(BaseVisitor *visitor) override;
1101
1102 QString asString() const override;
1103
1104// attributes
1105 double id;
1106};
1107
1109{
1110public:
1112
1114 : expression(expression)
1115 { kind = K; }
1116
1117 void accept0(BaseVisitor *visitor) override;
1118
1119 QString asString() const override { return QString(); }
1120
1122 { return expression->firstSourceLocation(); }
1123
1125 { return expression->lastSourceLocation(); }
1126
1127// attributes
1129};
1130
1131
1133{
1134public:
1136
1138 base (b), expression (e)
1139 { kind = K; }
1140
1141 void accept0(BaseVisitor *visitor) override;
1142
1144 { return base->firstSourceLocation(); }
1145
1147 { return rbracketToken; }
1148
1149// attributes
1154 bool isOptional = false;
1155};
1156
1158{
1159public:
1161
1163 base (b), name (n)
1164 { kind = K; }
1165
1166 void accept0(BaseVisitor *visitor) override;
1167
1169 { return base->firstSourceLocation(); }
1170
1172 { return identifierToken; }
1173
1174 // attributes
1179 bool isOptional = false;
1180};
1181
1183{
1184public:
1186
1188 : base (b), templateLiteral(t)
1189 { kind = K; }
1190
1191 void accept0(BaseVisitor *visitor) override;
1192
1194 { return base->firstSourceLocation(); }
1195
1197 { return templateLiteral->lastSourceLocation(); }
1198
1199 // attributes
1202};
1203
1205{
1206public:
1208
1210 base (b), arguments (a)
1211 { kind = K; }
1212
1213 void accept0(BaseVisitor *visitor) override;
1214
1216 { return newToken; }
1217
1219 { return rparenToken; }
1220
1221 // attributes
1227};
1228
1230{
1231public:
1233
1235 expression (e) { kind = K; }
1236
1237 void accept0(BaseVisitor *visitor) override;
1238
1240 { return newToken; }
1241
1243 { return expression->lastSourceLocation(); }
1244
1245// attributes
1248};
1249
1251{
1252public:
1254
1256 base (b), arguments (a)
1257 { kind = K; }
1258
1259 void accept0(BaseVisitor *visitor) override;
1260
1262 { return base->firstSourceLocation(); }
1263
1265 { return rparenToken; }
1266
1267// attributes
1272 bool isOptional = false;
1273};
1274
1276{
1277public:
1279
1281 expression (e), next (this)
1282 { kind = K; }
1283
1285 expression (e)
1286 {
1287 kind = K;
1288 next = previous->next;
1289 previous->next = this;
1290 }
1291
1292 void accept0(BaseVisitor *visitor) override;
1293
1295 { return expression->firstSourceLocation(); }
1296
1298 {
1299 if (next)
1300 return next->lastSourceLocation();
1301 return expression->lastSourceLocation();
1302 }
1303
1305 {
1306 ArgumentList *front = next;
1307 next = nullptr;
1308 return front;
1309 }
1310
1311// attributes
1315 bool isSpreadElement = false;
1316};
1317
1319{
1320public:
1322
1324 base (b) { kind = K; }
1325
1326 void accept0(BaseVisitor *visitor) override;
1327
1329 { return base->firstSourceLocation(); }
1330
1332 { return incrementToken; }
1333
1334// attributes
1337};
1338
1340{
1341public:
1343
1345 base (b) { kind = K; }
1346
1347 void accept0(BaseVisitor *visitor) override;
1348
1350 { return base->firstSourceLocation(); }
1351
1353 { return decrementToken; }
1354
1355// attributes
1358};
1359
1361{
1362public:
1364
1366 expression (e) { kind = K; }
1367
1368 void accept0(BaseVisitor *visitor) override;
1369
1371 { return deleteToken; }
1372
1374 { return expression->lastSourceLocation(); }
1375
1376// attributes
1379};
1380
1382{
1383public:
1385
1387 expression (e) { kind = K; }
1388
1389 void accept0(BaseVisitor *visitor) override;
1390
1392 { return voidToken; }
1393
1395 { return expression->lastSourceLocation(); }
1396
1397// attributes
1400};
1401
1403{
1404public:
1406
1408 expression (e) { kind = K; }
1409
1410 void accept0(BaseVisitor *visitor) override;
1411
1413 { return typeofToken; }
1414
1416 { return expression->lastSourceLocation(); }
1417
1418// attributes
1421};
1422
1424{
1425public:
1427
1429 expression (e) { kind = K; }
1430
1431 void accept0(BaseVisitor *visitor) override;
1432
1434 { return incrementToken; }
1435
1437 { return expression->lastSourceLocation(); }
1438
1439// attributes
1442};
1443
1445{
1446public:
1448
1450 expression (e) { kind = K; }
1451
1452 void accept0(BaseVisitor *visitor) override;
1453
1455 { return decrementToken; }
1456
1458 { return expression->lastSourceLocation(); }
1459
1460// attributes
1463};
1464
1466{
1467public:
1469
1471 expression (e) { kind = K; }
1472
1473 void accept0(BaseVisitor *visitor) override;
1474
1476 { return plusToken; }
1477
1479 { return expression->lastSourceLocation(); }
1480
1481// attributes
1484};
1485
1487{
1488public:
1490
1492 expression (e) { kind = K; }
1493
1494 void accept0(BaseVisitor *visitor) override;
1495
1497 { return minusToken; }
1498
1500 { return expression->lastSourceLocation(); }
1501
1502// attributes
1505};
1506
1508{
1509public:
1511
1513 expression (e) { kind = K; }
1514
1515 void accept0(BaseVisitor *visitor) override;
1516
1518 { return tildeToken; }
1519
1521 { return expression->lastSourceLocation(); }
1522
1523// attributes
1526};
1527
1529{
1530public:
1532
1534 expression (e) { kind = K; }
1535
1536 void accept0(BaseVisitor *visitor) override;
1537
1539 { return notToken; }
1540
1542 { return expression->lastSourceLocation(); }
1543
1544// attributes
1547};
1548
1550{
1551public:
1553
1555 left (l), op (o), right (r)
1556 { kind = K; }
1557
1558 BinaryExpression *binaryExpressionCast() override;
1559
1560 void accept0(BaseVisitor *visitor) override;
1561
1563 { return left->firstSourceLocation(); }
1564
1566 { return right->lastSourceLocation(); }
1567
1568// attributes
1570 int op;
1573};
1574
1576{
1577public:
1579
1581 expression (e), ok (t), ko (f)
1582 { kind = K; }
1583
1584 void accept0(BaseVisitor *visitor) override;
1585
1587 { return expression->firstSourceLocation(); }
1588
1590 { return ko->lastSourceLocation(); }
1591
1592// attributes
1598};
1599
1601{
1602public:
1604
1606 left (l), right (r) { kind = K; }
1607
1608 void accept0(BaseVisitor *visitor) override;
1609
1611 { return left->firstSourceLocation(); }
1612
1614 { return right->lastSourceLocation(); }
1615
1616// attributes
1620};
1621
1623{
1624public:
1626
1628 statements (slist) { kind = K; }
1629
1630 void accept0(BaseVisitor *visitor) override;
1631
1633 { return lbraceToken; }
1634
1636 { return rbraceToken; }
1637
1638 // attributes
1642};
1643
1645{
1646public:
1648
1649 // ### This should be a Statement, but FunctionDeclaration currently doesn't inherit it.
1651 : statement(stmt), next (this)
1652 { kind = K; }
1653
1655 n->next = next;
1656 next = n;
1657 return n;
1658 }
1659
1660 void accept0(BaseVisitor *visitor) override;
1661
1663 { return statement->firstSourceLocation(); }
1664
1666 {
1667 return lastListElement(this)->statement->lastSourceLocation();
1668 }
1669
1671 {
1672 StatementList *front = next;
1673 next = nullptr;
1674 return front;
1675 }
1676
1677// attributes
1678 Node *statement = nullptr;
1680};
1681
1683{
1684public:
1686
1688 : declaration(decl), next(this)
1689 { kind = K; }
1690
1692 : declaration(decl)
1693 {
1694 kind = K;
1695 next = previous->next;
1696 previous->next = this;
1697 }
1698
1699 void accept0(BaseVisitor *visitor) override;
1700
1702 { return declaration->firstSourceLocation(); }
1703
1705 {
1706 if (next)
1707 return next->lastSourceLocation();
1708 return declaration->lastSourceLocation();
1709 }
1710
1712 {
1714 next = nullptr;
1716 for (vdl = front; vdl != nullptr; vdl = vdl->next) {
1717 vdl->declaration->scope = s;
1718 }
1719 return front;
1720 }
1721
1722// attributes
1726};
1727
1729{
1730public:
1732
1734 declarations (vlist)
1735 { kind = K; }
1736
1737 void accept0(BaseVisitor *visitor) override;
1738
1740 { return declarationKindToken; }
1741
1743 { return declarations->lastSourceLocation(); }
1744
1745// attributes
1748};
1749
1751{
1752public:
1754
1755 EmptyStatement() { kind = K; }
1756
1757 void accept0(BaseVisitor *visitor) override;
1758
1760 { return semicolonToken; }
1761
1763 { return semicolonToken; }
1764
1765// attributes
1767};
1768
1770{
1771public:
1773
1775 expression (e) { kind = K; }
1776
1777 void accept0(BaseVisitor *visitor) override;
1778
1780 { return expression->firstSourceLocation(); }
1781
1783 { return semicolonToken; }
1784
1785// attributes
1788};
1789
1791{
1792public:
1794
1796 expression (e), ok (t), ko (f)
1797 { kind = K; }
1798
1799 void accept0(BaseVisitor *visitor) override;
1800
1802 { return ifToken; }
1803
1805 {
1806 if (ko)
1807 return ko->lastSourceLocation();
1808
1809 return ok->lastSourceLocation();
1810 }
1811
1812// attributes
1820};
1821
1823{
1824public:
1826
1828 statement (stmt), expression (e)
1829 { kind = K; }
1830
1831 void accept0(BaseVisitor *visitor) override;
1832
1834 { return doToken; }
1835
1837 { return semicolonToken; }
1838
1839// attributes
1847};
1848
1850{
1851public:
1853
1855 expression (e), statement (stmt)
1856 { kind = K; }
1857
1858 void accept0(BaseVisitor *visitor) override;
1859
1861 { return whileToken; }
1862
1864 { return statement->lastSourceLocation(); }
1865
1866// attributes
1872};
1873
1875{
1876public:
1878
1880 initialiser (i), condition (c), expression (e), statement (stmt)
1881 { kind = K; }
1882
1884 declarations (vlist), condition (c), expression (e), statement (stmt)
1885 { kind = K; }
1886
1887
1888 void accept0(BaseVisitor *visitor) override;
1889
1891 { return forToken; }
1892
1894 { return statement->lastSourceLocation(); }
1895
1896// attributes
1897 ExpressionNode *initialiser = nullptr;
1898 VariableDeclarationList *declarations = nullptr;
1907};
1908
1909enum class ForEachType {
1910 In,
1911 Of
1912};
1913
1915{
1916public:
1918
1920 : lhs(i), expression(e), statement(stmt)
1921 { kind = K; }
1923 : lhs(v), expression(e), statement(stmt)
1924 { kind = K; }
1925
1926 void accept0(BaseVisitor *visitor) override;
1927
1929 { return forToken; }
1930
1932 { return statement->lastSourceLocation(); }
1933
1935 return AST::cast<PatternElement *>(lhs);
1936 }
1937
1938// attributes
1947};
1948
1950{
1951public:
1953
1955 label (l) { kind = K; }
1956
1957 void accept0(BaseVisitor *visitor) override;
1958
1960 { return continueToken; }
1961
1963 { return semicolonToken; }
1964
1965// attributes
1970};
1971
1973{
1974public:
1976
1978 label (l) { kind = K; }
1979
1980 void accept0(BaseVisitor *visitor) override;
1981
1983 { return breakToken; }
1984
1986 { return semicolonToken; }
1987
1988 // attributes
1993};
1994
1996{
1997public:
1999
2001 expression (e) { kind = K; }
2002
2003 void accept0(BaseVisitor *visitor) override;
2004
2006 { return returnToken; }
2007
2009 { return semicolonToken; }
2010
2011// attributes
2015};
2016
2018{
2019public:
2021
2023 expression (e) { kind = K; }
2024
2025 void accept0(BaseVisitor *visitor) override;
2026
2028 { return yieldToken; }
2029
2031 { return expression ? expression->lastSourceLocation() : yieldToken; }
2032
2033// attributes
2035 bool isYieldStar = false;
2037};
2038
2040{
2041public:
2043
2045 expression (e), statement (stmt)
2046 { kind = K; }
2047
2048 void accept0(BaseVisitor *visitor) override;
2049
2051 { return withToken; }
2052
2054 { return statement->lastSourceLocation(); }
2055
2056// attributes
2062};
2063
2065{
2066public:
2068
2070 clauses (c), defaultClause (d), moreClauses (r)
2071 { kind = K; }
2072
2073 void accept0(BaseVisitor *visitor) override;
2074
2076 { return lbraceToken; }
2077
2079 { return rbraceToken; }
2080
2081// attributes
2087};
2088
2090{
2091public:
2093
2095 expression (e), block (b)
2096 { kind = K; }
2097
2098 void accept0(BaseVisitor *visitor) override;
2099
2101 { return switchToken; }
2102
2104 { return block->rbraceToken; }
2105
2106// attributes
2112};
2113
2115{
2116public:
2118
2120 expression (e), statements (slist)
2121 { kind = K; }
2122
2123 void accept0(BaseVisitor *visitor) override;
2124
2126 { return caseToken; }
2127
2129 { return statements ? statements->lastSourceLocation() : colonToken; }
2130
2131// attributes
2136};
2137
2139{
2140public:
2142
2144 clause (c), next (this)
2145 { kind = K; }
2146
2148 clause (c)
2149 {
2150 kind = K;
2151 next = previous->next;
2152 previous->next = this;
2153 }
2154
2155 void accept0(BaseVisitor *visitor) override;
2156
2158 { return clause->firstSourceLocation(); }
2159
2161 {
2162 return lastListElement(this)->clause->lastSourceLocation();
2163 }
2164
2166 {
2167 CaseClauses *front = next;
2168 next = nullptr;
2169 return front;
2170 }
2171
2172//attributes
2175};
2176
2178{
2179public:
2181
2183 statements (slist)
2184 { kind = K; }
2185
2186 void accept0(BaseVisitor *visitor) override;
2187
2189 { return defaultToken; }
2190
2192 { return statements ? statements->lastSourceLocation() : colonToken; }
2193
2194// attributes
2198};
2199
2201{
2202public:
2204
2206 label (l), statement (stmt)
2207 { kind = K; }
2208
2209 void accept0(BaseVisitor *visitor) override;
2210
2212 { return identifierToken; }
2213
2215 { return statement->lastSourceLocation(); }
2216
2217// attributes
2222};
2223
2225{
2226public:
2228
2230 expression (e) { kind = K; }
2231
2232 void accept0(BaseVisitor *visitor) override;
2233
2235 { return throwToken; }
2236
2238 { return semicolonToken; }
2239
2240 // attributes
2244};
2245
2247{
2248public:
2250
2252 : patternElement(p), statement(stmt)
2253 { kind = K; }
2254
2255 void accept0(BaseVisitor *visitor) override;
2256
2258 { return catchToken; }
2259
2261 { return statement->lastSourceLocation(); }
2262
2263// attributes
2270};
2271
2273{
2274public:
2276
2278 statement (stmt)
2279 { kind = K; }
2280
2281 void accept0(BaseVisitor *visitor) override;
2282
2284 { return finallyToken; }
2285
2287 { return statement ? statement->lastSourceLocation() : finallyToken; }
2288
2289// attributes
2292};
2293
2295{
2296public:
2298
2300 statement (stmt), catchExpression (c), finallyExpression (f)
2301 { kind = K; }
2302
2304 statement (stmt), catchExpression (nullptr), finallyExpression (f)
2305 { kind = K; }
2306
2308 statement (stmt), catchExpression (c), finallyExpression (nullptr)
2309 { kind = K; }
2310
2311 void accept0(BaseVisitor *visitor) override;
2312
2314 { return tryToken; }
2315
2317 {
2318 if (finallyExpression)
2319 return finallyExpression->statement->rbraceToken;
2320 else if (catchExpression)
2321 return catchExpression->statement->rbraceToken;
2322
2323 return statement->lastSourceLocation();
2324 }
2325
2326// attributes
2331};
2332
2334{
2335public:
2337
2339 name (n), formals (f), body (b),
2340 typeAnnotation(typeAnnotation)
2341 { kind = K; }
2342
2343 void accept0(BaseVisitor *visitor) override;
2344
2346 { return functionToken; }
2347
2349 { return rbraceToken; }
2350
2351 FunctionExpression *asFunctionDefinition() override;
2352
2353// attributes
2355 bool isArrowFunction = false;
2356 bool isGenerator = false;
2366};
2367
2369{
2370public:
2372
2374 FunctionExpression(n, f, b, typeAnnotation)
2375 { kind = K; }
2376
2377 void accept0(BaseVisitor *visitor) override;
2378};
2379
2381{
2382public:
2384
2386 : element(e)
2387 {
2388 kind = K;
2389 if (previous) {
2390 next = previous->next;
2391 previous->next = this;
2392 } else {
2393 next = this;
2394 }
2395 }
2396
2398 n->next = next;
2399 next = n;
2400 return n;
2401 }
2402
2404 {
2405 AST::FormalParameterList *formals = this;
2406 while (formals) {
2407 PatternElement *e = formals->element;
2408 if (e && e->type == PatternElement::RestElement)
2409 return false;
2410 if (e && (e->initializer || e->bindingTarget))
2411 return false;
2412 formals = formals->next;
2413 }
2414 return true;
2415 }
2416
2418 {
2419 // the length property of Function objects
2420 int l = 0;
2421 AST::FormalParameterList *formals = this;
2422 while (formals) {
2423 PatternElement *e = formals->element;
2424 if (!e || e->initializer)
2425 break;
2426 if (e->type == PatternElement::RestElement)
2427 break;
2428 ++l;
2429 formals = formals->next;
2430 }
2431 return l;
2432 }
2433
2434 bool containsName(const QString &name) const {
2435 for (const FormalParameterList *it = this; it; it = it->next) {
2436 PatternElement *b = it->element;
2437 // ### handle binding patterns
2438 if (b && b->bindingIdentifier == name)
2439 return true;
2440 }
2441 return false;
2442 }
2443
2444 BoundNames formals() const;
2445
2446 BoundNames boundNames() const;
2447
2448 void accept0(BaseVisitor *visitor) override;
2449
2451 { return element->firstSourceLocation(); }
2452
2454 {
2455 return lastListElement(this)->element->lastSourceLocation();
2456 }
2457
2459
2460// attributes
2461 PatternElement *element = nullptr;
2463};
2464
2466{
2467public:
2469
2471 : name(n), heritage(heritage), elements(elements)
2472 { kind = K; }
2473
2474 void accept0(BaseVisitor *visitor) override;
2475
2477 { return classToken; }
2478
2480 { return rbraceToken; }
2481
2482 ClassExpression *asClassDefinition() override;
2483
2484// attributes
2492};
2493
2495{
2496public:
2498
2500 : ClassExpression(n, heritage, elements)
2501 { kind = K; }
2502
2503 void accept0(BaseVisitor *visitor) override;
2504};
2505
2506
2508{
2509public:
2511
2513 : isStatic(isStatic), property(property)
2514 {
2515 kind = K;
2516 next = this;
2517 }
2518
2520 n->next = next;
2521 next = n;
2522 return n;
2523 }
2524
2525 void accept0(BaseVisitor *visitor) override;
2526
2528 { return property->firstSourceLocation(); }
2529
2531 {
2532 if (next)
2533 return next->lastSourceLocation();
2534 return property->lastSourceLocation();
2535 }
2536
2537 ClassElementList *finish();
2538
2542};
2543
2545{
2546public:
2548
2550 : statements(statements)
2551 { kind = K; }
2552
2553 void accept0(BaseVisitor *visitor) override;
2554
2556 { return statements ? statements->firstSourceLocation() : SourceLocation(); }
2557
2559 { return statements ? statements->lastSourceLocation() : SourceLocation(); }
2560
2561// attributes
2563};
2564
2566{
2567public:
2569
2571 : importedBinding(importedBinding)
2572 {
2573 kind = K;
2574 }
2575
2576 ImportSpecifier(QStringView identifier, QStringView importedBinding)
2577 : identifier(identifier), importedBinding(importedBinding)
2578 {
2579 kind = K;
2580 }
2581
2582 void accept0(BaseVisitor *visitor) override;
2583
2585 { return identifier.isNull() ? importedBindingToken : identifierToken; }
2587 { return importedBindingToken; }
2588
2589// attributes
2594};
2595
2597{
2598public:
2600
2602 : importSpecifier(importSpecifier)
2603 {
2604 kind = K;
2605 next = this;
2606 }
2607
2608 ImportsList(ImportsList *previous, ImportSpecifier *importSpecifier)
2609 : importSpecifier(importSpecifier)
2610 {
2611 kind = K;
2612 if (previous) {
2613 next = previous->next;
2614 previous->next = this;
2615 } else {
2616 next = this;
2617 }
2618 }
2619
2621 {
2622 ImportsList *head = next;
2623 next = nullptr;
2624 return head;
2625 }
2626
2627 void accept0(BaseVisitor *visitor) override;
2628
2630 { return importSpecifierToken; }
2631
2633 {
2634 return lastListElement(this)->importSpecifierToken;
2635 }
2636
2637// attributes
2641};
2642
2644{
2645public:
2647
2649 {
2650 kind = K;
2651 }
2652
2654 : importsList(importsList)
2655 {
2656 kind = K;
2657 }
2658
2659 void accept0(BaseVisitor *visitor) override;
2660
2662 { return leftBraceToken; }
2664 { return rightBraceToken; }
2665
2666// attributes
2669 ImportsList *importsList = nullptr;
2670};
2671
2673{
2674public:
2676
2678 : importedBinding(importedBinding)
2679 {
2680 kind = K;
2681 }
2682
2683 void accept0(BaseVisitor *visitor) override;
2684
2685 virtual SourceLocation firstSourceLocation() const override
2686 { return starToken; }
2687 virtual SourceLocation lastSourceLocation() const override
2688 { return importedBindingToken; }
2689
2690// attributes
2694};
2695
2697{
2698public:
2700
2701 ImportClause(QStringView importedDefaultBinding)
2702 : importedDefaultBinding(importedDefaultBinding)
2703 {
2704 kind = K;
2705 }
2706
2708 : nameSpaceImport(nameSpaceImport)
2709 {
2710 kind = K;
2711 }
2712
2714 : namedImports(namedImports)
2715 {
2716 kind = K;
2717 }
2718
2719 ImportClause(QStringView importedDefaultBinding, NameSpaceImport *nameSpaceImport)
2720 : importedDefaultBinding(importedDefaultBinding)
2721 , nameSpaceImport(nameSpaceImport)
2722 {
2723 kind = K;
2724 }
2725
2726 ImportClause(QStringView importedDefaultBinding, NamedImports *namedImports)
2727 : importedDefaultBinding(importedDefaultBinding)
2728 , namedImports(namedImports)
2729 {
2730 kind = K;
2731 }
2732
2733 void accept0(BaseVisitor *visitor) override;
2734
2735 virtual SourceLocation firstSourceLocation() const override
2736 { return importedDefaultBinding.isNull() ? (nameSpaceImport ? nameSpaceImport->firstSourceLocation() : namedImports->firstSourceLocation()) : importedDefaultBindingToken; }
2737 virtual SourceLocation lastSourceLocation() const override
2738 { return importedDefaultBinding.isNull() ? (nameSpaceImport ? nameSpaceImport->lastSourceLocation() : namedImports->lastSourceLocation()) : importedDefaultBindingToken; }
2739
2740// attributes
2743 NameSpaceImport *nameSpaceImport = nullptr;
2744 NamedImports *namedImports = nullptr;
2745};
2746
2748{
2749public:
2751
2752 FromClause(QStringView moduleSpecifier)
2753 : moduleSpecifier(moduleSpecifier)
2754 {
2755 kind = K;
2756 }
2757
2758 void accept0(BaseVisitor *visitor) override;
2759
2761 { return fromToken; }
2762
2764 { return moduleSpecifierToken; }
2765
2766// attributes
2770};
2771
2773{
2774public:
2776
2777 ImportDeclaration(ImportClause *importClause, FromClause *fromClause)
2778 : importClause(importClause), fromClause(fromClause)
2779 {
2780 kind = K;
2781 }
2782
2784 : moduleSpecifier(moduleSpecifier)
2785 {
2786 kind = K;
2787 }
2788
2789 void accept0(BaseVisitor *visitor) override;
2790
2792 { return importToken; }
2793
2795 { return moduleSpecifier.isNull() ? fromClause->lastSourceLocation() : moduleSpecifierToken; }
2796
2797// attributes
2801 ImportClause *importClause = nullptr;
2802 FromClause *fromClause = nullptr;
2803};
2804
2806{
2807public:
2809
2811 : identifier(identifier), exportedIdentifier(identifier)
2812 {
2813 kind = K;
2814 }
2815
2816 ExportSpecifier(QStringView identifier, QStringView exportedIdentifier)
2817 : identifier(identifier), exportedIdentifier(exportedIdentifier)
2818 {
2819 kind = K;
2820 }
2821
2822 void accept0(BaseVisitor *visitor) override;
2823
2825 { return identifierToken; }
2827 { return exportedIdentifierToken.isValid() ? exportedIdentifierToken : identifierToken; }
2828
2829// attributes
2834};
2835
2837{
2838public:
2840
2842 : exportSpecifier(exportSpecifier)
2843 {
2844 kind = K;
2845 next = this;
2846 }
2847
2848 ExportsList(ExportsList *previous, ExportSpecifier *exportSpecifier)
2849 : exportSpecifier(exportSpecifier)
2850 {
2851 kind = K;
2852 if (previous) {
2853 next = previous->next;
2854 previous->next = this;
2855 } else {
2856 next = this;
2857 }
2858 }
2859
2861 {
2862 ExportsList *head = next;
2863 next = nullptr;
2864 return head;
2865 }
2866
2867 void accept0(BaseVisitor *visitor) override;
2868
2870 { return exportSpecifier->firstSourceLocation(); }
2872 { return lastListElement(this)->exportSpecifier->lastSourceLocation(); }
2873
2874// attributes
2877};
2878
2880{
2881public:
2883
2885 {
2886 kind = K;
2887 }
2888
2890 : exportsList(exportsList)
2891 {
2892 kind = K;
2893 }
2894
2895 void accept0(BaseVisitor *visitor) override;
2896
2898 { return leftBraceToken; }
2900 { return rightBraceToken; }
2901
2902// attributes
2905 ExportsList *exportsList = nullptr;
2906};
2907
2909{
2910public:
2912
2914 : fromClause(fromClause)
2915 {
2916 kind = K;
2917 }
2918
2919 ExportDeclaration(ExportClause *exportClause, FromClause *fromClause)
2920 : exportClause(exportClause), fromClause(fromClause)
2921 {
2922 kind = K;
2923 }
2924
2926 : exportClause(exportClause)
2927 {
2928 kind = K;
2929 }
2930
2931 ExportDeclaration(bool exportDefault, Node *variableStatementOrDeclaration)
2932 : variableStatementOrDeclaration(variableStatementOrDeclaration)
2933 , exportDefault(exportDefault)
2934 {
2935 kind = K;
2936 }
2937
2938 bool exportsAll() const
2939 {
2940 return fromClause && !exportClause;
2941 }
2942
2943 void accept0(BaseVisitor *visitor) override;
2944
2946 { return exportToken; }
2948 { return fromClause ? fromClause->lastSourceLocation() : (exportClause ? exportClause->lastSourceLocation() : variableStatementOrDeclaration->lastSourceLocation()); }
2949
2950// attributes
2952 ExportClause *exportClause = nullptr;
2953 FromClause *fromClause = nullptr;
2954 Node *variableStatementOrDeclaration = nullptr;
2955 bool exportDefault = false;
2956};
2957
2959{
2960public:
2962
2964 : body(body)
2965 {
2966 kind = K;
2967 }
2968
2969 void accept0(BaseVisitor *visitor) override;
2970
2972 { return body ? body->firstSourceLocation() : SourceLocation(); }
2973
2975 { return body ? body->lastSourceLocation() : SourceLocation(); }
2976
2977// attributes
2979};
2980
2982{
2983public:
2985
2987 { kind = K; }
2988
2989 void accept0(BaseVisitor *visitor) override;
2990
2992 { return debuggerToken; }
2993
2995 { return semicolonToken; }
2996
2997// attributes
3000};
3001
3003{
3004public:
3006
3008 : fileName(fileName), importUri(nullptr)
3009 { kind = K; }
3010
3012 : importUri(uri)
3013 { kind = K; }
3014
3015 void accept0(BaseVisitor *visitor) override;
3016
3018 { return importToken; }
3019
3021 { return semicolonToken; }
3022
3023// attributes
3032 UiVersionSpecifier *version = nullptr;
3033};
3034
3036{
3037public:
3040
3041 UiObjectMember *uiObjectMemberCast() override;
3042
3043// attributes
3044 UiAnnotationList *annotations = nullptr;
3045};
3046
3048{
3049public:
3051
3053 : next(this), member(member)
3054 { kind = K; }
3055
3057 : member(member)
3058 {
3059 kind = K;
3060 next = previous->next;
3061 previous->next = this;
3062 }
3063
3064 void accept0(BaseVisitor *visitor) override;
3065
3067 { return member->firstSourceLocation(); }
3068
3070 { return lastListElement(this)->member->lastSourceLocation(); }
3071
3073 {
3074 UiObjectMemberList *head = next;
3075 next = nullptr;
3076 return head;
3077 }
3078
3079// attributes
3082};
3083
3085{
3086public:
3088
3090 : value(value)
3091 , next(this)
3092 {
3093 kind = K;
3094 }
3095
3097 : value(value)
3098 {
3099 kind = K;
3100 next = previous->next;
3101 previous->next = this;
3102 }
3103
3104 void accept0(BaseVisitor *visitor) override;
3105
3107 { return location; }
3108
3110 { return lastListElement(this)->location; }
3111
3113 {
3114 UiPragmaValueList *head = next;
3115 next = nullptr;
3116 return head;
3117 }
3118
3122};
3123
3125{
3126public:
3128
3130 : name(name), values(values)
3131 { kind = K; }
3132
3133 void accept0(BaseVisitor *visitor) override;
3134
3136 { return pragmaToken; }
3137
3139 { return semicolonToken; }
3140
3141// attributes
3146};
3147
3149{
3150public:
3152
3154 :name(name)
3155 { kind = K; }
3156
3157 void accept0(BaseVisitor *visitor) override;
3158
3160 { return requiredToken; }
3161
3163 { return semicolonToken; }
3164
3168};
3169
3171{
3172public:
3174
3176 : headerItem(import), next(this)
3177 { kind = K; }
3178
3180 : headerItem(pragma), next(this)
3181 { kind = K; }
3182
3184 : headerItem(import)
3185 {
3186 kind = K;
3187 next = previous->next;
3188 previous->next = this;
3189 }
3190
3192 : headerItem(pragma)
3193 {
3194 kind = K;
3195 next = previous->next;
3196 previous->next = this;
3197 }
3198
3200 {
3201 UiHeaderItemList *head = next;
3202 next = nullptr;
3203 return head;
3204 }
3205
3206 void accept0(BaseVisitor *visitor) override;
3207
3209 { return headerItem->firstSourceLocation(); }
3210
3212 { return lastListElement(this)->headerItem->lastSourceLocation(); }
3213
3214// attributes
3217};
3218
3220{
3221public:
3223
3225 : headers(headers), members(members)
3226 { kind = K; }
3227
3228 void accept0(BaseVisitor *visitor) override;
3229
3231 {
3232 if (headers)
3233 return headers->firstSourceLocation();
3234 else if (members)
3235 return members->firstSourceLocation();
3236 return SourceLocation();
3237 }
3238
3240 {
3241 if (members)
3242 return members->lastSourceLocation();
3243 else if (headers)
3244 return headers->lastSourceLocation();
3245 return SourceLocation();
3246 }
3247
3248// attributes
3251};
3252
3254{
3255public:
3257
3259 : next(this), member(member)
3260 { kind = K; }
3261
3263 : member(member)
3264 {
3265 kind = K;
3266 next = previous->next;
3267 previous->next = this;
3268 }
3269
3270 void accept0(BaseVisitor *visitor) override;
3271
3273 { return member->firstSourceLocation(); }
3274
3276 { return lastListElement(this)->member->lastSourceLocation(); }
3277
3279 {
3280 UiArrayMemberList *head = next;
3281 next = nullptr;
3282 return head;
3283 }
3284
3285// attributes
3289};
3290
3292{
3293public:
3295
3297 : members(members)
3298 { kind = K; }
3299
3300 void accept0(BaseVisitor *visitor) override;
3301
3303 { return lbraceToken; }
3304
3306 { return rbraceToken; }
3307
3308// attributes
3312};
3313
3315{
3316public:
3318
3320 type (t), name (n), next (this)
3321 { kind = K; }
3322
3324 type (t), name (n)
3325 {
3326 kind = K;
3327 next = previous->next;
3328 previous->next = this;
3329 }
3330
3331 void accept0(BaseVisitor *) override;
3332
3334 { return colonToken.isValid() ? identifierToken : propertyTypeToken; }
3335
3337 {
3338 auto last = lastListElement(this);
3339 return last->lastOwnSourceLocation();
3340 }
3341
3343 {
3344 return (colonToken.isValid() ? propertyTypeToken : identifierToken);
3345 }
3346
3348 {
3349 UiParameterList *front = next;
3350 next = nullptr;
3351 return front;
3352 }
3353
3354// attributes
3362};
3363
3365{
3367public:
3368 UiPropertyAttributes() { kind = K; }
3369
3370 SourceLocation defaultToken() const { return m_defaultToken; }
3371 bool isDefaultMember() const { return defaultToken().isValid(); }
3372 SourceLocation requiredToken() const { return m_requiredToken; }
3373 bool isRequired() const { return requiredToken().isValid(); }
3374 SourceLocation readonlyToken() const { return m_readonlyToken; }
3375 bool isReadonly() const { return readonlyToken().isValid(); }
3376
3377 SourceLocation propertyToken() const { return m_propertyToken; }
3378
3379 template <bool InvalidIsLargest = true>
3380 static bool compareLocationsByBegin(const SourceLocation *& lhs, const SourceLocation *& rhs)
3381 {
3382 if (lhs->isValid() && rhs->isValid())
3383 return lhs->begin() < rhs->begin();
3384 else if (lhs->isValid())
3385 return InvalidIsLargest;
3386 else
3387 return !InvalidIsLargest;
3388 }
3389
3390 void accept0(BaseVisitor *) override {} // intentionally do nothing
3391
3392 SourceLocation firstSourceLocation() const override;
3393
3394 SourceLocation lastSourceLocation() const override;
3395
3396private:
3397 friend class QQmlJS::Parser;
3398 SourceLocation m_defaultToken;
3399 SourceLocation m_readonlyToken;
3400 SourceLocation m_requiredToken;
3401 SourceLocation m_propertyToken;
3402};
3403
3405{
3406public:
3408
3411 : type(Property), memberType(memberType), name(name), statement(nullptr), binding(nullptr), parameters(nullptr)
3412 { kind = K; }
3413
3416 Statement *statement)
3417 : type(Property), memberType(memberType), name(name), statement(statement), binding(nullptr), parameters(nullptr)
3418 { kind = K; }
3419
3420 void accept0(BaseVisitor *visitor) override;
3421
3423 {
3424 if (hasAttributes)
3425 return m_attributes->firstSourceLocation();
3426 else
3427 return m_propertyToken;
3428 }
3429
3431 {
3432 if (binding)
3433 return binding->lastSourceLocation();
3434 if (statement)
3435 return statement->lastSourceLocation();
3436
3437 return semicolonToken;
3438 }
3439
3441 {
3442 return hasAttributes ? m_attributes->defaultToken() : SourceLocation {};
3443 }
3444 bool isDefaultMember() const { return defaultToken().isValid(); }
3445
3447 {
3448 return hasAttributes ? m_attributes->requiredToken() : SourceLocation {};
3449 }
3450 bool isRequired() const { return requiredToken().isValid(); }
3451
3453 {
3454 return hasAttributes ? m_attributes->readonlyToken() : SourceLocation {};
3455 }
3456 bool isReadonly() const { return readonlyToken().isValid(); }
3457
3459 {
3460 m_attributes = attributes;
3461 hasAttributes = true;
3462 }
3463
3465 {
3466 return hasAttributes ? m_attributes->propertyToken() : m_propertyToken;
3467 }
3468
3470 {
3471 m_propertyToken = token;
3472 hasAttributes = false;
3473 }
3474
3475// attributes
3476 enum : bool { Signal, Property } type;
3477 bool hasAttributes = false;
3481 Statement *statement; // initialized with a JS expression
3482 UiObjectMember *binding; // initialized with a QML object or array.
3484 // TODO: merge source locations
3490private:
3491 union {
3492 SourceLocation m_propertyToken = SourceLocation {};
3494 };
3495};
3496
3498{
3499public:
3501
3502 UiObjectDefinition(UiQualifiedId *qualifiedTypeNameId,
3503 UiObjectInitializer *initializer)
3504 : qualifiedTypeNameId(qualifiedTypeNameId), initializer(initializer)
3505 { kind = K; }
3506
3507 void accept0(BaseVisitor *visitor) override;
3508
3510 { return qualifiedTypeNameId->identifierToken; }
3511
3513 { return initializer->rbraceToken; }
3514
3515// attributes
3518};
3519
3521{
3522public:
3524
3525 UiInlineComponent(QStringView inlineComponentName, UiObjectDefinition* inlineComponent)
3526 : name(inlineComponentName), component(inlineComponent)
3527 { kind = K; }
3528
3530 {return component->lastSourceLocation();}
3531
3533 {return componentToken;}
3534
3535 void accept0(BaseVisitor *visitor) override;
3536
3537 // attributes
3541};
3542
3544{
3545public:
3547
3548 UiSourceElement(Node *sourceElement)
3549 : sourceElement(sourceElement)
3550 { kind = K; }
3551
3553 {
3554 if (FunctionExpression *funDecl = sourceElement->asFunctionDefinition())
3555 return funDecl->firstSourceLocation();
3556 else if (VariableStatement *varStmt = cast<VariableStatement *>(sourceElement))
3557 return varStmt->firstSourceLocation();
3558
3559 return SourceLocation();
3560 }
3561
3563 {
3564 if (FunctionExpression *funDecl = sourceElement->asFunctionDefinition())
3565 return funDecl->lastSourceLocation();
3566 else if (VariableStatement *varStmt = cast<VariableStatement *>(sourceElement))
3567 return varStmt->lastSourceLocation();
3568
3569 return SourceLocation();
3570 }
3571
3572 void accept0(BaseVisitor *visitor) override;
3573
3574
3575// attributes
3577};
3578
3580{
3581public:
3583
3585 UiQualifiedId *qualifiedTypeNameId,
3586 UiObjectInitializer *initializer)
3587 : qualifiedId(qualifiedId),
3588 qualifiedTypeNameId(qualifiedTypeNameId),
3589 initializer(initializer),
3590 hasOnToken(false)
3591 { kind = K; }
3592
3594 {
3595 if (hasOnToken && qualifiedTypeNameId)
3596 return qualifiedTypeNameId->identifierToken;
3597
3598 return qualifiedId->identifierToken;
3599 }
3600
3602 { return initializer->rbraceToken; }
3603
3604 void accept0(BaseVisitor *visitor) override;
3605
3606
3607// attributes
3613};
3614
3616{
3617public:
3619
3621 Statement *statement)
3622 : qualifiedId(qualifiedId),
3623 statement(statement)
3624 { kind = K; }
3625
3627 { return qualifiedId->identifierToken; }
3628
3630 { return statement->lastSourceLocation(); }
3631
3632 void accept0(BaseVisitor *visitor) override;
3633
3634// attributes
3638};
3639
3641{
3642public:
3644
3647 : qualifiedId(qualifiedId),
3649 { kind = K; }
3650
3652 { Q_ASSERT(qualifiedId); return qualifiedId->identifierToken; }
3653
3655 { return rbracketToken; }
3656
3657 void accept0(BaseVisitor *visitor) override;
3658
3659// attributes
3665};
3666
3668{
3670public:
3671 UiEnumMemberList(QStringView member, double v = 0.0)
3672 : next(this), member(member), value(v)
3673 { kind = K; }
3674
3676 : member(member)
3677 {
3678 kind = K;
3679 next = previous->next;
3680 previous->next = this;
3681 value = previous->value + 1;
3682 }
3683
3685 : member(member), value(v)
3686 {
3687 kind = K;
3688 next = previous->next;
3689 previous->next = this;
3690 }
3691
3693 { return memberToken; }
3694
3696 {
3697 auto last = lastListElement(this);
3698 return last->valueToken.isValid() ? last->valueToken : last->memberToken;
3699 }
3700
3701 void accept0(BaseVisitor *visitor) override;
3702
3704 {
3705 UiEnumMemberList *head = next;
3706 next = nullptr;
3707 return head;
3708 }
3709
3710// attributes
3713 double value;
3716};
3717
3719{
3720public:
3722
3725 : name(name)
3726 , members(members)
3727 { kind = K; }
3728
3730 { return enumToken; }
3731
3733 { return rbraceToken; }
3734
3735 void accept0(BaseVisitor *visitor) override;
3736
3737// attributes
3744};
3745
3747{
3748public:
3750
3751 UiAnnotation(UiQualifiedId *qualifiedTypeNameId,
3752 UiObjectInitializer *initializer)
3753 : qualifiedTypeNameId(qualifiedTypeNameId), initializer(initializer)
3754 { kind = K; }
3755
3756 void accept0(BaseVisitor *visitor) override;
3757
3759 { return qualifiedTypeNameId->identifierToken; }
3760
3762 { return initializer->rbraceToken; }
3763
3764// attributes
3767};
3768
3770{
3771public:
3773
3775 : next(this), annotation(annotation)
3776 { kind = K; }
3777
3779 : annotation(annotation)
3780 {
3781 kind = K;
3782 next = previous->next;
3783 previous->next = this;
3784 }
3785
3786 void accept0(BaseVisitor *visitor) override;
3787
3789 { return annotation->firstSourceLocation(); }
3790
3792 { return lastListElement(this)->annotation->lastSourceLocation(); }
3793
3795 {
3796 UiAnnotationList *head = next;
3797 next = nullptr;
3798 return head;
3799 }
3800
3801// attributes
3804};
3805
3806} } // namespace AST
3807
3808
3810
3811#endif
Definition qlist.h:74
const_iterator constBegin() const noexcept
Definition qlist.h:615
const_iterator constEnd() const noexcept
Definition qlist.h:616
friend qsizetype QtPrivate::indexOf(const QList< V > &list, const U &u, qsizetype from) noexcept
ArgumentList * finish()
ArgumentList(ArgumentList *previous, ExpressionNode *e)
SourceLocation lastSourceLocation() const override
ExpressionNode * expression
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
SourceLocation firstSourceLocation() const override
SourceLocation rbracketToken
SourceLocation lastSourceLocation() const override
SourceLocation lbracketToken
SourceLocation commaToken
SourceLocation firstSourceLocation() const override
virtual QQmlJSASTClassListToVisit void throwRecursionDepthError()=0
virtual bool preVisit(Node *)=0
virtual void postVisit(Node *)=0
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
StatementList * statements
SourceLocation rbraceToken
SourceLocation firstSourceLocation() const override
SourceLocation lbraceToken
SourceLocation lastSourceLocation() const override
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
SourceLocation lastSourceLocation() const override
CaseClauses * moreClauses
SourceLocation lbraceToken
SourceLocation rbraceToken
DefaultClause * defaultClause
SourceLocation firstSourceLocation() const override
SourceLocation firstSourceLocation() const override
ExpressionNode * expression
SourceLocation caseToken
SourceLocation colonToken
SourceLocation lastSourceLocation() const override
StatementList * statements
CaseClauses(CaseClauses *previous, CaseClause *c)
SourceLocation lastSourceLocation() const override
SourceLocation firstSourceLocation() const override
SourceLocation identifierToken
SourceLocation lparenToken
SourceLocation rparenToken
PatternElement * patternElement
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
SourceLocation catchToken
ClassElementList * append(ClassElementList *n)
SourceLocation lastSourceLocation() const override
SourceLocation firstSourceLocation() const override
SourceLocation firstSourceLocation() const override
ClassElementList * elements
SourceLocation lastSourceLocation() const override
QString asString() const override
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
SourceLocation lastSourceLocation() const override
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
SourceLocation firstSourceLocation() const override
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
StatementList * body
SourceLocation lastSourceLocation() const override
SourceLocation firstSourceLocation() const override
SourceLocation commaToken
Elision(Elision *previous)
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
SourceLocation lastSourceLocation() const override
SourceLocation firstSourceLocation() const override
ExportClause(ExportsList *exportsList)
SourceLocation lastSourceLocation() const override
SourceLocation rightBraceToken
SourceLocation leftBraceToken
SourceLocation firstSourceLocation() const override
ExportDeclaration(ExportClause *exportClause)
SourceLocation firstSourceLocation() const override
ExportDeclaration(bool exportDefault, Node *variableStatementOrDeclaration)
ExportDeclaration(ExportClause *exportClause, FromClause *fromClause)
SourceLocation lastSourceLocation() const override
SourceLocation firstSourceLocation() const override
ExportSpecifier(QStringView identifier, QStringView exportedIdentifier)
SourceLocation lastSourceLocation() const override
SourceLocation exportedIdentifierToken
ExportSpecifier * exportSpecifier
SourceLocation lastSourceLocation() const override
ExportsList(ExportsList *previous, ExportSpecifier *exportSpecifier)
SourceLocation firstSourceLocation() const override
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
ExpressionNode * left
SourceLocation firstSourceLocation() const override
SourceLocation commaToken
SourceLocation lastSourceLocation() const override
ExpressionNode * right
SourceLocation lastSourceLocation() const override
SourceLocation firstSourceLocation() const override
SourceLocation falseToken
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
SourceLocation lastSourceLocation() const override
SourceLocation firstSourceLocation() const override
SourceLocation finallyToken
SourceLocation lastSourceLocation() const override
ForEachStatement(PatternElement *v, ExpressionNode *e, Statement *stmt)
SourceLocation firstSourceLocation() const override
PatternElement * declaration() const
ForStatement(VariableDeclarationList *vlist, ExpressionNode *c, ExpressionNode *e, Statement *stmt)
ExpressionNode * expression
SourceLocation secondSemicolonToken
SourceLocation lastSourceLocation() const override
SourceLocation firstSemicolonToken
ExpressionNode * condition
SourceLocation firstSourceLocation() const override
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
bool containsName(const QString &name) const
FormalParameterList * append(FormalParameterList *n)
SourceLocation fromToken
SourceLocation firstSourceLocation() const override
SourceLocation moduleSpecifierToken
SourceLocation lastSourceLocation() const override
FormalParameterList * formals
SourceLocation firstSourceLocation() const override
FunctionExpression * asFunctionDefinition() override
SourceLocation lastSourceLocation() const override
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
QString asString() const override
SourceLocation rparenToken
SourceLocation lastSourceLocation() const override
SourceLocation lparenToken
ExpressionNode * expression
SourceLocation firstSourceLocation() const override
SourceLocation importedDefaultBindingToken
ImportClause(QStringView importedDefaultBinding, NamedImports *namedImports)
ImportClause(NamedImports *namedImports)
virtual SourceLocation firstSourceLocation() const override
virtual SourceLocation lastSourceLocation() const override
QStringView importedDefaultBinding
ImportClause(QStringView importedDefaultBinding, NameSpaceImport *nameSpaceImport)
ImportClause(NameSpaceImport *nameSpaceImport)
SourceLocation lastSourceLocation() const override
ImportDeclaration(QStringView moduleSpecifier)
SourceLocation firstSourceLocation() const override
SourceLocation importedBindingToken
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
ImportSpecifier(QStringView identifier, QStringView importedBinding)
ImportSpecifier * importSpecifier
SourceLocation importSpecifierToken
SourceLocation lastSourceLocation() const override
SourceLocation firstSourceLocation() const override
ImportsList(ImportsList *previous, ImportSpecifier *importSpecifier)
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
virtual SourceLocation firstSourceLocation() const override
virtual SourceLocation lastSourceLocation() const override
SourceLocation importedBindingToken
SourceLocation lastSourceLocation() const override
SourceLocation firstSourceLocation() const override
SourceLocation rightBraceToken
SourceLocation leftBraceToken
NamedImports(ImportsList *importsList)
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
SourceLocation lastSourceLocation() const override
ExpressionNode * expression
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
SourceLocation firstSourceLocation() const override
virtual SourceLocation firstSourceLocation() const =0
void accept(BaseVisitor *visitor)
virtual SourceLocation lastSourceLocation() const =0
virtual void accept0(BaseVisitor *visitor)=0
static void accept(Node *node, BaseVisitor *visitor)
ExpressionNode * expression
SourceLocation lastSourceLocation() const override
SourceLocation firstSourceLocation() const override
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
SourceLocation lastSourceLocation() const override
SourceLocation firstSourceLocation() const override
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
ObjectPattern(PatternPropertyList *plist)
PatternElementList * next
PatternElementList * finish()
PatternElementList * append(PatternElementList *n)
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
PatternPropertyList * propertyList() const
PatternElementList * elementList() const
PatternElement(Pattern *pattern, ExpressionNode *i=nullptr, Type t=Binding)
PatternElement(ExpressionNode *i=nullptr, Type t=Literal)
SourceLocation identifierToken
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
Pattern * destructuringPattern() const
ExpressionNode * destructuringTarget() const
PatternElement(QStringView n, TypeAnnotation *typeAnnotation=nullptr, ExpressionNode *i=nullptr, Type t=Binding)
bool isVariableDeclaration() const
PatternPropertyList(PatternPropertyList *previous, PatternProperty *property)
PatternPropertyList * finish()
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
SourceLocation lastSourceLocation() const override
PatternProperty(PropertyName *name, Pattern *pattern, ExpressionNode *i=nullptr)
SourceLocation firstSourceLocation() const override
PatternProperty(PropertyName *name, QStringView n, ExpressionNode *i=nullptr)
Pattern * patternCast() override
virtual bool convertLiteralToAssignmentPattern(MemoryPool *pool, SourceLocation *errorLocation, QString *errorMessage)=0
SourceLocation lastSourceLocation() const override
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
SourceLocation firstSourceLocation() const override
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
SourceLocation lastSourceLocation() const override
SourceLocation firstSourceLocation() const override
SourceLocation firstSourceLocation() const override
StatementList * statements
SourceLocation lastSourceLocation() const override
SourceLocation propertyNameToken
virtual QString asString() const =0
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
SourceLocation lastSourceLocation() const override
SourceLocation literalToken
SourceLocation firstSourceLocation() const override
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
StatementList * append(StatementList *n)
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
StatementList * finish()
QString asString() const override
SourceLocation firstSourceLocation() const override
SourceLocation literalToken
SourceLocation lastSourceLocation() const override
SourceLocation superToken
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
SourceLocation lastSourceLocation() const override
SourceLocation firstSourceLocation() const override
TemplateLiteral * templateLiteral
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
ExpressionNode * expression
SourceLocation lastSourceLocation() const override
SourceLocation firstSourceLocation() const override
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
ExpressionNode * expression
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
SourceLocation lastSourceLocation() const override
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
SourceLocation trueToken
SourceLocation firstSourceLocation() const override
TryStatement(Statement *stmt, Finally *f)
SourceLocation lastSourceLocation() const override
TryStatement(Statement *stmt, Catch *c)
SourceLocation firstSourceLocation() const override
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
SourceLocation lastSourceLocation() const override
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
SourceLocation firstSourceLocation() const override
UiQualifiedId * typeArgument
UiQualifiedId * typeId
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
SourceLocation lastSourceLocation() const override
SourceLocation firstSourceLocation() const override
UiAnnotationList(UiAnnotationList *previous, UiAnnotation *annotation)
UiAnnotationList * finish()
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
UiQualifiedId * qualifiedTypeNameId
UiObjectInitializer * initializer
SourceLocation lastSourceLocation() const override
SourceLocation firstSourceLocation() const override
UiArrayMemberList * members
UiArrayMemberList * finish()
UiArrayMemberList(UiArrayMemberList *previous, UiObjectMember *member)
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
SourceLocation lastSourceLocation() const override
SourceLocation firstSourceLocation() const override
UiEnumMemberList(QStringView member, double v=0.0)
UiEnumMemberList(UiEnumMemberList *previous, QStringView member, double v)
UiEnumMemberList * finish()
UiEnumMemberList(UiEnumMemberList *previous, QStringView member)
SourceLocation lastSourceLocation() const override
SourceLocation firstSourceLocation() const override
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
UiHeaderItemList(UiPragma *pragma)
UiHeaderItemList(UiHeaderItemList *previous, UiImport *import)
UiHeaderItemList(UiHeaderItemList *previous, UiPragma *pragma)
UiHeaderItemList * finish()
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
UiImport(UiQualifiedId *uri)
SourceLocation semicolonToken
SourceLocation importIdToken
UiQualifiedId * importUri
SourceLocation fileNameToken
SourceLocation importToken
SourceLocation asToken
SourceLocation firstSourceLocation() const override
UiObjectDefinition * component
SourceLocation lastSourceLocation() const override
UiQualifiedId * qualifiedTypeNameId
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
UiObjectInitializer * initializer
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
UiObjectInitializer * initializer
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
SourceLocation lastSourceLocation() const override
SourceLocation firstSourceLocation() const override
UiObjectMemberList(UiObjectMemberList *previous, UiObjectMember *member)
UiObjectMemberList * finish()
SourceLocation firstSourceLocation() const override=0
SourceLocation lastSourceLocation() const override=0
UiParameterList * finish()
SourceLocation firstSourceLocation() const override
UiParameterList(UiParameterList *previous, Type *t, QStringView n)
SourceLocation lastOwnSourceLocation() const
SourceLocation lastSourceLocation() const override
UiPragmaValueList(UiPragmaValueList *previous, QStringView value)
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
UiPragmaValueList * finish()
UiPragmaValueList * values
SourceLocation firstSourceLocation() const override
SourceLocation semicolonToken
SourceLocation lastSourceLocation() const override
SourceLocation pragmaToken
UiHeaderItemList * headers
SourceLocation lastSourceLocation() const override
SourceLocation firstSourceLocation() const override
UiObjectMemberList * members
void accept0(BaseVisitor *) override
SourceLocation defaultToken() const
SourceLocation propertyToken() const
static bool compareLocationsByBegin(const SourceLocation *&lhs, const SourceLocation *&rhs)
SourceLocation requiredToken() const
SourceLocation readonlyToken() const
UiParameterList * parameters
SourceLocation firstSourceLocation() const override
UiPublicMember(UiQualifiedId *memberType, QStringView name, Statement *statement)
UiPropertyAttributes * m_attributes
void setAttributes(UiPropertyAttributes *attributes)
SourceLocation lastSourceLocation() const override
SourceLocation defaultToken() const
SourceLocation typeModifierToken
void setPropertyToken(SourceLocation token)
SourceLocation propertyToken() const
SourceLocation readonlyToken() const
SourceLocation requiredToken() const
SourceLocation firstSourceLocation() const override
void toString(QString *out) const
SourceLocation lastSourceLocation() const override
SourceLocation lastOwnSourceLocation() const
SourceLocation identifierToken
UiQualifiedId(UiQualifiedId *previous, QStringView name)
UiQualifiedId * finish()
SourceLocation semicolonToken
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
SourceLocation requiredToken
SourceLocation lastSourceLocation() const override
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
SourceLocation firstSourceLocation() const override
UiVersionSpecifier(int majorum, int minorum)
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
VariableDeclarationList * finish(VariableScope s)
SourceLocation lastSourceLocation() const override
SourceLocation firstSourceLocation() const override
VariableDeclarationList(VariableDeclarationList *previous, PatternElement *decl)
VariableDeclarationList * next
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
VariableDeclarationList * declarations
SourceLocation lastSourceLocation() const override
SourceLocation firstSourceLocation() const override
ExpressionNode * expression
ExpressionNode * expression
SourceLocation lastSourceLocation() const override
SourceLocation firstSourceLocation() const override
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
ExpressionNode * expression
SourceLocation firstSourceLocation() const override
SourceLocation lastSourceLocation() const override
\inmodule QtCore
Definition qstringview.h:76
constexpr bool isNull() const noexcept
Returns whether this string view is null - that is, whether {data() == nullptr}.
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:127
Tag tag() const noexcept
\inmodule QtCore
#define this
Definition dialogs.cpp:9
QString str
[2]
double e
QSet< QString >::iterator it
QList< QVariant > arguments
short next
Definition keywords.cpp:445
Token token
Definition keywords.cpp:444
FunctionExpression * asAnonymousFunctionDefinition(Node *n)
Definition qqmljsast.cpp:19
T lastListElement(T head)
T1 cast(T2 *ast)
Definition qqmljsast_p.h:99
ClassExpression * asAnonymousClassDefinition(Node *n)
Definition qqmljsast.cpp:29
@ InplaceRightShift
Definition qqmljsast_p.h:73
@ InplaceURightShift
Definition qqmljsast_p.h:78
Combined button and popup list for selecting options.
static const QCssKnownValue properties[NumProperties - 1]
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
GLint location
GLenum GLsizei GLsizei GLint * values
[15]
GLboolean GLboolean GLboolean b
GLsizei const GLfloat * v
[13]
GLboolean GLboolean GLboolean GLboolean a
[7]
GLenum condition
GLboolean r
[2]
GLenum GLuint id
[7]
GLdouble GLdouble right
GLfloat GLfloat f
GLint left
GLenum type
GLuint GLsizei const GLchar * label
[43]
GLbitfield flags
GLuint name
GLfloat n
const GLubyte * c
GLuint GLuint * names
GLdouble GLdouble t
Definition qopenglext.h:243
GLuint64EXT * result
[6]
GLdouble s
[6]
Definition qopenglext.h:235
GLfloat GLfloat p
[1]
GLubyte * pattern
static qreal component(const QPointF &point, unsigned int i)
#define QQMLJS_DECLARE_AST_NODE(name)
Definition qqmljsast_p.h:36
#define QML_PARSER_EXPORT
QCborArray members(const QCborMap *classDef, QLatin1StringView key, QTypeRevision maxMajorVersion, Postprocess &&process)
#define Q_ASSERT(cond)
Definition qrandom.cpp:47
static const QTextHtmlElement elements[Html_NumElements]
static QString errorMessage(QUrlPrivate::ErrorCode errorCode, const QString &errorSource, qsizetype errorPosition)
Definition qurl.cpp:3503
const char property[13]
Definition qwizard.cpp:101
QTextStream out(stdout)
[7]
QObject::connect nullptr
char * toString(const MyType &t)
[31]
\inmodule QtCore \reentrant
Definition qchar.h:17
bool isInjected() const
QQmlJS::SourceLocation location
BoundName(const QString &id, const QQmlJS::SourceLocation &location, TypeAnnotation *typeAnnotation, Type type=Declared)
QTaggedPointer< TypeAnnotation, Type > typeAnnotation
bool contains(const QString &name) const
int indexOf(const QString &name, int from=0) const
Definition moc.h:24