Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
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
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
217
241 Kind_UiAnnotationList
242 };
243
244 inline Node() {}
245
246 // NOTE: node destructors are never called,
247 // instead we block free the memory
248 // (see the NodePool class)
249 virtual ~Node() {}
250
251 virtual ExpressionNode *expressionCast();
252 virtual BinaryExpression *binaryExpressionCast();
253 virtual Statement *statementCast();
254 virtual UiObjectMember *uiObjectMemberCast();
255 virtual LeftHandSideExpression *leftHandSideExpressionCast();
256 virtual Pattern *patternCast();
257 // implements the IsFunctionDefinition rules in the spec
258 virtual FunctionExpression *asFunctionDefinition();
259 virtual ClassExpression *asClassDefinition();
260
261 bool ignoreRecursionDepth() const;
262
263 inline void accept(BaseVisitor *visitor)
264 {
265 BaseVisitor::RecursionDepthCheck recursionCheck(visitor);
266
267 // Stack overflow is uncommon, ignoreRecursionDepth() only returns true if
268 // QV4_CRASH_ON_STACKOVERFLOW is set, and ignoreRecursionDepth() needs to be out of line.
269 // Therefore, check for ignoreRecursionDepth() _after_ calling the inline recursionCheck().
270 if (recursionCheck() || ignoreRecursionDepth()) {
271 if (visitor->preVisit(this))
272 accept0(visitor);
273 visitor->postVisit(this);
274 } else {
275 visitor->throwRecursionDepthError();
276 }
277 }
278
279 inline static void accept(Node *node, BaseVisitor *visitor)
280 {
281 if (node)
282 node->accept(visitor);
283 }
284
285 virtual void accept0(BaseVisitor *visitor) = 0;
288
289// attributes
290 int kind = Kind_Undefined;
291};
292
293template<typename T>
295{
296 auto current = head;
297 while (current->next)
298 current = current->next;
299 return current;
300}
301
303{
304public:
306
308 : next(this), name(name)
309 { kind = K; }
310
312 : name(name)
313 {
314 kind = K;
315 next = previous->next;
316 previous->next = this;
317 }
318
320 {
322 next = nullptr;
323 return head;
324 }
325
326 void accept0(BaseVisitor *visitor) override;
327
329 { return identifierToken; }
330
332 {
333 return lastListElement(this)->lastOwnSourceLocation();
334 }
335
336 SourceLocation lastOwnSourceLocation() const { return identifierToken; }
337
339 {
342 return result;
343 }
344
345 void toString(QString *out) const
346 {
347 for (const UiQualifiedId *it = this; it; it = it->next) {
348 out->append(it->name);
349 if (it->next)
350 out->append(QLatin1Char('.'));
351 }
352 }
353
354// attributes
359};
360
362{
363public:
365
366 Type(UiQualifiedId *typeId, Type *typeArgument = nullptr)
367 : typeId(typeId)
368 , typeArgument(typeArgument ? typeArgument->typeId : nullptr)
369 { kind = K; }
370
371 void accept0(BaseVisitor *visitor) override;
372
374 { return typeId->firstSourceLocation(); }
375
377 { return typeArgument ? typeArgument->lastSourceLocation() : typeId->lastSourceLocation(); }
378
379 QString toString() const;
380 void toString(QString *out) const;
381
382// attributes
385};
386
388{
389public:
391
393 : type(type)
394 { kind = K; }
395
396 void accept0(BaseVisitor *visitor) override;
397
399 { return colonToken; }
400
402 { return type->lastSourceLocation(); }
403
404// attributes
407};
409{
410public:
412
413 ExpressionNode *expressionCast() override;
414 bool containsOptionalChain() const;
415
416 AST::FormalParameterList *reparseAsFormalParameterList(MemoryPool *pool);
417
418};
419
421{
422 LeftHandSideExpression *leftHandSideExpressionCast() override;
423};
424
426{
427public:
429
430 Statement *statementCast() override;
431};
432
434{
435public:
437
439 : expression(expression)
440 { kind = K; }
441
442 void accept0(BaseVisitor *visitor) override;
443
445 { return lparenToken; }
446
448 { return rparenToken; }
449
450 FunctionExpression *asFunctionDefinition() override;
451 ClassExpression *asClassDefinition() override;
452
453
454// attributes
458};
459
460
462{
463public:
465 TypeExpression(Type *t) : m_type(t) { kind = K; }
466
467 void accept0(BaseVisitor *visitor) override;
468
470 return m_type->firstSourceLocation();
471 }
472
474 return m_type->lastSourceLocation();
475 }
476
478};
479
481{
482public:
484
485 ThisExpression() { kind = K; }
486
487 void accept0(BaseVisitor *visitor) override;
488
490 { return thisToken; }
491
493 { return thisToken; }
494
495// attributes
497};
498
500{
501public:
503
505 name (n) { kind = K; }
506
507 void accept0(BaseVisitor *visitor) override;
508
510 { return identifierToken; }
511
513 { return identifierToken; }
514
515// attributes
518};
519
521{
522public:
524
525 NullExpression() { kind = K; }
526
527 void accept0(BaseVisitor *visitor) override;
528
530 { return nullToken; }
531
533 { return nullToken; }
534
535// attributes
537};
538
540{
541public:
543
544 TrueLiteral() { kind = K; }
545
546 void accept0(BaseVisitor *visitor) override;
547
549 { return trueToken; }
550
552 { return trueToken; }
553
554// attributes
556};
557
559{
560public:
562
563 FalseLiteral() { kind = K; }
564
565 void accept0(BaseVisitor *visitor) override;
566
568 { return falseToken; }
569
571 { return falseToken; }
572
573// attributes
575};
576
578{
579public:
581
582 SuperLiteral() { kind = K; }
583
584 void accept0(BaseVisitor *visitor) override;
585
587 { return superToken; }
588
590 { return superToken; }
591
592// attributes
594};
595
596
598{
599public:
601
603 value(v) { kind = K; }
604
605 void accept0(BaseVisitor *visitor) override;
606
608 { return literalToken; }
609
611 { return literalToken; }
612
613// attributes:
614 double value;
616};
617
619{
620public:
622
623 UiVersionSpecifier(int majorum) : version(QTypeRevision::fromMajorVersion(majorum))
624 {
625 kind = K;
626 }
627
628 UiVersionSpecifier(int majorum, int minorum) : version(QTypeRevision::fromVersion(majorum, minorum))
629 {
630 kind = K;
631 }
632
633 void accept0(BaseVisitor *visitor) override;
634
635 SourceLocation firstSourceLocation() const override { return majorToken; }
636
638 {
639 return minorToken.isValid() ? minorToken : majorToken;
640 }
641
642 // attributes:
646};
647
649{
650public:
652
654 value (v) { kind = K; }
655
656 void accept0(BaseVisitor *visitor) override;
657
659 { return literalToken; }
660
662 { return literalToken; }
663
664// attributes:
667};
668
670{
671public:
673
675 : value(str), rawValue(raw), expression(e), next(nullptr)
676 { kind = K; }
677
679 { return literalToken; }
680
682 {
683 auto last = lastListElement(this);
684 return (last->expression ? last->expression->lastSourceLocation() : last->literalToken);
685 }
686
687 void accept0(BaseVisitor *visitor) override;
688
689 bool hasNoSubstitution = false;
695};
696
698{
699public:
701
703 pattern (p), flags (f) { kind = K; }
704
705 void accept0(BaseVisitor *visitor) override;
706
708 { return literalToken; }
709
711 { return literalToken; }
712
713// attributes:
715 int flags;
717};
718
720{
721public:
726 Pattern *patternCast() override;
728 ParseMode parseMode = Literal;
729};
730
732{
733public:
735
737 : elements(elts)
738 { kind = K; }
739
740 void accept0(BaseVisitor *visitor) override;
741
743 { return lbracketToken; }
744
746 { return rbracketToken; }
747
748 bool isValidArrayLiteral(SourceLocation *errorLocation = nullptr) const;
749
750 bool convertLiteralToAssignmentPattern(MemoryPool *pool, SourceLocation *errorLocation, QString *errorMessage) override;
751
752// attributes
757};
758
760{
761public:
763
765 { kind = K; }
766
768 : properties(plist)
769 { kind = K; }
770
771 void accept0(BaseVisitor *visitor) override;
772
774 { return lbraceToken; }
775
777 { return rbraceToken; }
778
779 bool convertLiteralToAssignmentPattern(MemoryPool *pool, SourceLocation *errorLocation, QString *errorMessage) override;
780
781// attributes
785};
786
788{
789public:
791
793 next (this) { kind = K; }
794
795 Elision(Elision *previous)
796 {
797 kind = K;
798 next = previous->next;
799 previous->next = this;
800 }
801
802 void accept0(BaseVisitor *visitor) override;
803
805 { return commaToken; }
806
808 { return lastListElement(this)->commaToken; }
809
810 inline Elision *finish ()
811 {
812 Elision *front = next;
813 next = nullptr;
814 return front;
815 }
816
817// attributes
820};
821
823{
824public:
826
827 PropertyName() { kind = K; }
828
830 { return propertyNameToken; }
831
833 { return propertyNameToken; }
834
835 virtual QString asString() const = 0;
836
837// attributes
839};
840
842{
847
850 QTaggedPointer<TypeAnnotation, Type> typeAnnotation;
852 TypeAnnotation *typeAnnotation, Type type = Declared)
853 : id(id), location(location), typeAnnotation(typeAnnotation, type)
854 {}
855 BoundName() = default;
856
857 bool isInjected() const { return typeAnnotation.tag() == Injected; }
858};
859
860struct BoundNames : public QVector<BoundName>
861{
862 int indexOf(const QString &name, int from = 0) const
863 {
864 auto found = std::find_if(constBegin() + from, constEnd(),
865 [name](const BoundName &it) { return it.id == name; });
866 if (found == constEnd())
867 return -1;
868 return found - constBegin();
869 }
870
871 bool contains(const QString &name) const
872 {
873 return indexOf(name) != -1;
874 }
875};
876
885{
886public:
888
889 InitializerExpression(ExpressionNode *e) : expression(e) { kind = K; }
890
891 void accept0(BaseVisitor *visitor) override;
892
894 { return equalToken; }
895
896 SourceLocation lastSourceLocation() const override { return expression->lastSourceLocation(); }
897
899 {
900 return expression->asFunctionDefinition();
901 }
902
903 ClassExpression *asClassDefinition() override { return expression->asClassDefinition(); }
904
905 // attributes
908};
909
911{
912public:
914
915 enum Type {
916 // object literal types
921
922 // used by both bindings and literals
924 RestElement = SpreadElement,
925
926 // binding types
928 };
929
930private:
937 void unwrapInitializer()
938 {
939 if (auto unwrapped = AST::cast<InitializerExpression *>(initializer)) {
940 equalToken = unwrapped->equalToken;
941 initializer = unwrapped->expression;
942 }
943 }
944public:
945
946 PatternElement(ExpressionNode *i = nullptr, Type t = Literal)
947 : initializer(i), type(t)
948 {
949 kind = K;
950 unwrapInitializer();
951 }
952
953 PatternElement(QStringView n, TypeAnnotation *typeAnnotation = nullptr, ExpressionNode *i = nullptr, Type t = Binding)
954 : bindingIdentifier(n), initializer(i), type(t)
955 , typeAnnotation(typeAnnotation)
956 {
957 Q_ASSERT(t >= RestElement);
958 kind = K;
959 unwrapInitializer();
960 }
961
963 : bindingTarget(pattern), initializer(i), type(t)
964 {
965 Q_ASSERT(t >= RestElement);
966 kind = K;
967 unwrapInitializer();
968 }
969
970 void accept0(BaseVisitor *visitor) override;
971 virtual bool convertLiteralToAssignmentPattern(MemoryPool *pool, SourceLocation *errorLocation, QString *errorMessage);
972
974 { return identifierToken.isValid() ? identifierToken : (bindingTarget ? bindingTarget->firstSourceLocation() : initializer->firstSourceLocation()); }
975
977 { return initializer ? initializer->lastSourceLocation() : (bindingTarget ? bindingTarget->lastSourceLocation() : (typeAnnotation ? typeAnnotation->lastSourceLocation() : identifierToken)); }
978
979 ExpressionNode *destructuringTarget() const { return bindingTarget; }
980 Pattern *destructuringPattern() const { return bindingTarget ? bindingTarget->patternCast() : nullptr; }
981 PatternElementList *elementList() const { ArrayPattern *a = cast<ArrayPattern *>(bindingTarget); return a ? a->elements : nullptr; }
982 PatternPropertyList *propertyList() const { ObjectPattern *o = cast<ObjectPattern *>(bindingTarget); return o ? o->properties : nullptr; }
983
984 bool isVariableDeclaration() const { return scope != VariableScope::NoScope; }
985 bool isLexicallyScoped() const { return scope == VariableScope::Let || scope == VariableScope::Const; }
986
987 virtual void boundNames(BoundNames *names);
988
989// attributes
993 ExpressionNode *bindingTarget = nullptr;
994 ExpressionNode *initializer = nullptr;
995 Type type = Literal;
996 TypeAnnotation *typeAnnotation = nullptr;
997 // when used in a VariableDeclarationList
999 VariableScope scope = VariableScope::NoScope;
1000 bool isForDeclaration = false;
1001 bool isInjectedSignalParameter = false;
1002};
1003
1005{
1006public:
1008
1010 : elision(elision), element(element), next(this)
1011 { kind = K; }
1012
1014 n->next = next;
1015 next = n;
1016 return n;
1017 }
1018
1020 {
1021 PatternElementList *front = next;
1022 next = 0;
1023 return front;
1024 }
1025
1026 void accept0(BaseVisitor *visitor) override;
1027
1028 void boundNames(BoundNames *names);
1029
1031 { return elision ? elision->firstSourceLocation() : element->firstSourceLocation(); }
1032
1034 {
1035 auto last = lastListElement(this);
1036 return last->element ? last->element->lastSourceLocation() : last->elision->lastSourceLocation();
1037 }
1038
1039 Elision *elision = nullptr;
1040 PatternElement *element = nullptr;
1042};
1043
1045{
1046public:
1048
1050 : PatternElement(i, t), name(name)
1051 { kind = K; }
1052
1054 : PatternElement(n, /*type annotation*/nullptr, i), name(name)
1055 { kind = K; }
1056
1060
1061 void accept0(BaseVisitor *visitor) override;
1062
1064 { return name->firstSourceLocation(); }
1066 {
1067 SourceLocation loc = PatternElement::lastSourceLocation();
1068 return loc.isValid() ? loc : name->lastSourceLocation();
1069 }
1070
1071 void boundNames(BoundNames *names) override;
1072 bool convertLiteralToAssignmentPattern(MemoryPool *pool, SourceLocation *errorLocation, QString *errorMessage) override;
1073
1074// attributes
1077};
1078
1079
1081{
1082public:
1084
1088
1091 {
1092 kind = K;
1093 next = previous->next;
1094 previous->next = this;
1095 }
1096
1097 void accept0(BaseVisitor *visitor) override;
1098
1099 void boundNames(BoundNames *names);
1100
1102 {
1103 PatternPropertyList *front = next;
1104 next = 0;
1105 return front;
1106 }
1107
1109 { return property->firstSourceLocation(); }
1110
1112 { return lastListElement(this)->property->lastSourceLocation(); }
1113
1116};
1117
1119{
1120public:
1122
1124 id (n) { kind = K; }
1125
1126 void accept0(BaseVisitor *visitor) override;
1127
1128 QString asString() const override { return id.toString(); }
1129
1130// attributes
1132};
1133
1135{
1136public:
1138
1140 id (n) { kind = K; }
1141
1142 void accept0(BaseVisitor *visitor) override;
1143
1144 QString asString() const override { return id.toString(); }
1145
1146// attributes
1148};
1149
1151{
1152public:
1154
1156 id (n) { kind = K; }
1157
1158 void accept0(BaseVisitor *visitor) override;
1159
1160 QString asString() const override;
1161
1162// attributes
1163 double id;
1164};
1165
1167{
1168public:
1170
1172 : expression(expression)
1173 { kind = K; }
1174
1175 void accept0(BaseVisitor *visitor) override;
1176
1177 QString asString() const override { return QString(); }
1178
1180 { return expression->firstSourceLocation(); }
1181
1183 { return expression->lastSourceLocation(); }
1184
1185// attributes
1187};
1188
1189
1191{
1192public:
1194
1196 base (b), expression (e)
1197 { kind = K; }
1198
1199 void accept0(BaseVisitor *visitor) override;
1200
1202 { return base->firstSourceLocation(); }
1203
1205 { return rbracketToken; }
1206
1207// attributes
1212 bool isOptional = false;
1213};
1214
1216{
1217public:
1219
1221 base (b), name (n)
1222 { kind = K; }
1223
1224 void accept0(BaseVisitor *visitor) override;
1225
1227 { return base->firstSourceLocation(); }
1228
1230 { return identifierToken; }
1231
1232 // attributes
1237 bool isOptional = false;
1238};
1239
1241{
1242public:
1244
1246 : base (b), templateLiteral(t)
1247 { kind = K; }
1248
1249 void accept0(BaseVisitor *visitor) override;
1250
1252 { return base->firstSourceLocation(); }
1253
1255 { return templateLiteral->lastSourceLocation(); }
1256
1257 // attributes
1260};
1261
1263{
1264public:
1266
1270
1271 void accept0(BaseVisitor *visitor) override;
1272
1274 { return newToken; }
1275
1277 { return rparenToken; }
1278
1279 // attributes
1285};
1286
1288{
1289public:
1291
1293 expression (e) { kind = K; }
1294
1295 void accept0(BaseVisitor *visitor) override;
1296
1298 { return newToken; }
1299
1301 { return expression->lastSourceLocation(); }
1302
1303// attributes
1306};
1307
1309{
1310public:
1312
1314 base (b), arguments (a)
1315 { kind = K; }
1316
1317 void accept0(BaseVisitor *visitor) override;
1318
1320 { return base->firstSourceLocation(); }
1321
1323 { return rparenToken; }
1324
1325// attributes
1330 bool isOptional = false;
1331};
1332
1334{
1335public:
1337
1339 expression (e), next (this)
1340 { kind = K; }
1341
1343 expression (e)
1344 {
1345 kind = K;
1346 next = previous->next;
1347 previous->next = this;
1348 }
1349
1350 void accept0(BaseVisitor *visitor) override;
1351
1353 { return expression->firstSourceLocation(); }
1354
1356 {
1357 if (next)
1358 return next->lastSourceLocation();
1359 return expression->lastSourceLocation();
1360 }
1361
1363 {
1364 ArgumentList *front = next;
1365 next = nullptr;
1366 return front;
1367 }
1368
1369// attributes
1373 bool isSpreadElement = false;
1374};
1375
1377{
1378public:
1380
1383
1384 void accept0(BaseVisitor *visitor) override;
1385
1387 { return base->firstSourceLocation(); }
1388
1390 { return incrementToken; }
1391
1392// attributes
1395};
1396
1398{
1399public:
1401
1404
1405 void accept0(BaseVisitor *visitor) override;
1406
1408 { return base->firstSourceLocation(); }
1409
1411 { return decrementToken; }
1412
1413// attributes
1416};
1417
1419{
1420public:
1422
1424 expression (e) { kind = K; }
1425
1426 void accept0(BaseVisitor *visitor) override;
1427
1429 { return deleteToken; }
1430
1432 { return expression->lastSourceLocation(); }
1433
1434// attributes
1437};
1438
1440{
1441public:
1443
1445 expression (e) { kind = K; }
1446
1447 void accept0(BaseVisitor *visitor) override;
1448
1450 { return voidToken; }
1451
1453 { return expression->lastSourceLocation(); }
1454
1455// attributes
1458};
1459
1461{
1462public:
1464
1466 expression (e) { kind = K; }
1467
1468 void accept0(BaseVisitor *visitor) override;
1469
1471 { return typeofToken; }
1472
1474 { return expression->lastSourceLocation(); }
1475
1476// attributes
1479};
1480
1482{
1483public:
1485
1487 expression (e) { kind = K; }
1488
1489 void accept0(BaseVisitor *visitor) override;
1490
1492 { return incrementToken; }
1493
1495 { return expression->lastSourceLocation(); }
1496
1497// attributes
1500};
1501
1503{
1504public:
1506
1508 expression (e) { kind = K; }
1509
1510 void accept0(BaseVisitor *visitor) override;
1511
1513 { return decrementToken; }
1514
1516 { return expression->lastSourceLocation(); }
1517
1518// attributes
1521};
1522
1524{
1525public:
1527
1529 expression (e) { kind = K; }
1530
1531 void accept0(BaseVisitor *visitor) override;
1532
1534 { return plusToken; }
1535
1537 { return expression->lastSourceLocation(); }
1538
1539// attributes
1542};
1543
1545{
1546public:
1548
1550 expression (e) { kind = K; }
1551
1552 void accept0(BaseVisitor *visitor) override;
1553
1555 { return minusToken; }
1556
1558 { return expression->lastSourceLocation(); }
1559
1560// attributes
1563};
1564
1566{
1567public:
1569
1571 expression (e) { kind = K; }
1572
1573 void accept0(BaseVisitor *visitor) override;
1574
1576 { return tildeToken; }
1577
1579 { return expression->lastSourceLocation(); }
1580
1581// attributes
1584};
1585
1587{
1588public:
1590
1592 expression (e) { kind = K; }
1593
1594 void accept0(BaseVisitor *visitor) override;
1595
1597 { return notToken; }
1598
1600 { return expression->lastSourceLocation(); }
1601
1602// attributes
1605};
1606
1608{
1609public:
1611
1613 left (l), op (o), right (r)
1614 { kind = K; }
1615
1616 BinaryExpression *binaryExpressionCast() override;
1617
1618 void accept0(BaseVisitor *visitor) override;
1619
1621 { return left->firstSourceLocation(); }
1622
1624 { return right->lastSourceLocation(); }
1625
1626// attributes
1628 int op;
1631};
1632
1634{
1635public:
1637
1639 expression (e), ok (t), ko (f)
1640 { kind = K; }
1641
1642 void accept0(BaseVisitor *visitor) override;
1643
1645 { return expression->firstSourceLocation(); }
1646
1648 { return ko->lastSourceLocation(); }
1649
1650// attributes
1656};
1657
1659{
1660public:
1662
1664 left (l), right (r) { kind = K; }
1665
1666 void accept0(BaseVisitor *visitor) override;
1667
1669 { return left->firstSourceLocation(); }
1670
1672 { return right->lastSourceLocation(); }
1673
1674// attributes
1678};
1679
1681{
1682public:
1684
1686 statements (slist) { kind = K; }
1687
1688 void accept0(BaseVisitor *visitor) override;
1689
1691 { return lbraceToken; }
1692
1694 { return rbraceToken; }
1695
1696 // attributes
1700};
1701
1703{
1704public:
1706
1707 // ### This should be a Statement, but FunctionDeclaration currently doesn't inherit it.
1709 : statement(stmt), next (this)
1710 { kind = K; }
1711
1713 n->next = next;
1714 next = n;
1715 return n;
1716 }
1717
1718 void accept0(BaseVisitor *visitor) override;
1719
1721 { return statement->firstSourceLocation(); }
1722
1724 {
1725 return lastListElement(this)->statement->lastSourceLocation();
1726 }
1727
1729 {
1730 StatementList *front = next;
1731 next = nullptr;
1732 return front;
1733 }
1734
1735// attributes
1736 Node *statement = nullptr;
1738};
1739
1741{
1742public:
1744
1746 : declaration(decl), next(this)
1747 { kind = K; }
1748
1750 : declaration(decl)
1751 {
1752 kind = K;
1753 next = previous->next;
1754 previous->next = this;
1755 }
1756
1757 void accept0(BaseVisitor *visitor) override;
1758
1760 { return declaration->firstSourceLocation(); }
1761
1763 {
1764 if (next)
1765 return next->lastSourceLocation();
1766 return declaration->lastSourceLocation();
1767 }
1768
1770 {
1772 next = nullptr;
1774 for (vdl = front; vdl != nullptr; vdl = vdl->next) {
1775 vdl->declaration->scope = s;
1776 }
1777 return front;
1778 }
1779
1780// attributes
1784};
1785
1787{
1788public:
1790
1792 declarations (vlist)
1793 { kind = K; }
1794
1795 void accept0(BaseVisitor *visitor) override;
1796
1798 { return declarationKindToken; }
1799
1801 { return declarations->lastSourceLocation(); }
1802
1803// attributes
1806};
1807
1809{
1810public:
1812
1813 EmptyStatement() { kind = K; }
1814
1815 void accept0(BaseVisitor *visitor) override;
1816
1818 { return semicolonToken; }
1819
1821 { return semicolonToken; }
1822
1823// attributes
1825};
1826
1828{
1829public:
1831
1833 expression (e) { kind = K; }
1834
1835 void accept0(BaseVisitor *visitor) override;
1836
1838 { return expression->firstSourceLocation(); }
1839
1841 { return semicolonToken; }
1842
1843// attributes
1846};
1847
1849{
1850public:
1852
1854 expression (e), ok (t), ko (f)
1855 { kind = K; }
1856
1857 void accept0(BaseVisitor *visitor) override;
1858
1860 { return ifToken; }
1861
1863 {
1864 if (ko)
1865 return ko->lastSourceLocation();
1866
1867 return ok->lastSourceLocation();
1868 }
1869
1870// attributes
1878};
1879
1881{
1882public:
1884
1886 statement (stmt), expression (e)
1887 { kind = K; }
1888
1889 void accept0(BaseVisitor *visitor) override;
1890
1892 { return doToken; }
1893
1895 { return semicolonToken; }
1896
1897// attributes
1905};
1906
1908{
1909public:
1911
1913 expression (e), statement (stmt)
1914 { kind = K; }
1915
1916 void accept0(BaseVisitor *visitor) override;
1917
1919 { return whileToken; }
1920
1922 { return statement->lastSourceLocation(); }
1923
1924// attributes
1930};
1931
1933{
1934public:
1936
1938 initialiser (i), condition (c), expression (e), statement (stmt)
1939 { kind = K; }
1940
1942 declarations (vlist), condition (c), expression (e), statement (stmt)
1943 { kind = K; }
1944
1945
1946 void accept0(BaseVisitor *visitor) override;
1947
1949 { return forToken; }
1950
1952 { return statement->lastSourceLocation(); }
1953
1954// attributes
1955 ExpressionNode *initialiser = nullptr;
1956 VariableDeclarationList *declarations = nullptr;
1965};
1966
1967enum class ForEachType {
1968 In,
1969 Of
1970};
1971
1973{
1974public:
1976
1978 : lhs(i), expression(e), statement(stmt)
1979 { kind = K; }
1981 : lhs(v), expression(e), statement(stmt)
1982 { kind = K; }
1983
1984 void accept0(BaseVisitor *visitor) override;
1985
1987 { return forToken; }
1988
1990 { return statement->lastSourceLocation(); }
1991
1993 return AST::cast<PatternElement *>(lhs);
1994 }
1995
1996// attributes
2005};
2006
2008{
2009public:
2011
2013 label (l) { kind = K; }
2014
2015 void accept0(BaseVisitor *visitor) override;
2016
2018 { return continueToken; }
2019
2021 { return semicolonToken; }
2022
2023// attributes
2028};
2029
2031{
2032public:
2034
2036 label (l) { kind = K; }
2037
2038 void accept0(BaseVisitor *visitor) override;
2039
2041 { return breakToken; }
2042
2044 { return semicolonToken; }
2045
2046 // attributes
2051};
2052
2054{
2055public:
2057
2059 expression (e) { kind = K; }
2060
2061 void accept0(BaseVisitor *visitor) override;
2062
2064 { return returnToken; }
2065
2067 { return semicolonToken; }
2068
2069// attributes
2073};
2074
2076{
2077public:
2079
2081 expression (e) { kind = K; }
2082
2083 void accept0(BaseVisitor *visitor) override;
2084
2086 { return yieldToken; }
2087
2089 { return expression ? expression->lastSourceLocation() : yieldToken; }
2090
2091// attributes
2093 bool isYieldStar = false;
2095};
2096
2098{
2099public:
2101
2103 expression (e), statement (stmt)
2104 { kind = K; }
2105
2106 void accept0(BaseVisitor *visitor) override;
2107
2109 { return withToken; }
2110
2112 { return statement->lastSourceLocation(); }
2113
2114// attributes
2120};
2121
2123{
2124public:
2126
2128 clauses (c), defaultClause (d), moreClauses (r)
2129 { kind = K; }
2130
2131 void accept0(BaseVisitor *visitor) override;
2132
2134 { return lbraceToken; }
2135
2137 { return rbraceToken; }
2138
2139// attributes
2145};
2146
2148{
2149public:
2151
2153 expression (e), block (b)
2154 { kind = K; }
2155
2156 void accept0(BaseVisitor *visitor) override;
2157
2159 { return switchToken; }
2160
2162 { return block->rbraceToken; }
2163
2164// attributes
2170};
2171
2173{
2174public:
2176
2178 expression (e), statements (slist)
2179 { kind = K; }
2180
2181 void accept0(BaseVisitor *visitor) override;
2182
2184 { return caseToken; }
2185
2187 { return statements ? statements->lastSourceLocation() : colonToken; }
2188
2189// attributes
2194};
2195
2197{
2198public:
2200
2202 clause (c), next (this)
2203 { kind = K; }
2204
2206 clause (c)
2207 {
2208 kind = K;
2209 next = previous->next;
2210 previous->next = this;
2211 }
2212
2213 void accept0(BaseVisitor *visitor) override;
2214
2216 { return clause->firstSourceLocation(); }
2217
2219 {
2220 return lastListElement(this)->clause->lastSourceLocation();
2221 }
2222
2224 {
2225 CaseClauses *front = next;
2226 next = nullptr;
2227 return front;
2228 }
2229
2230//attributes
2233};
2234
2236{
2237public:
2239
2241 statements (slist)
2242 { kind = K; }
2243
2244 void accept0(BaseVisitor *visitor) override;
2245
2247 { return defaultToken; }
2248
2250 { return statements ? statements->lastSourceLocation() : colonToken; }
2251
2252// attributes
2256};
2257
2259{
2260public:
2262
2264 label (l), statement (stmt)
2265 { kind = K; }
2266
2267 void accept0(BaseVisitor *visitor) override;
2268
2270 { return identifierToken; }
2271
2273 { return statement->lastSourceLocation(); }
2274
2275// attributes
2280};
2281
2283{
2284public:
2286
2288 expression (e) { kind = K; }
2289
2290 void accept0(BaseVisitor *visitor) override;
2291
2293 { return throwToken; }
2294
2296 { return semicolonToken; }
2297
2298 // attributes
2302};
2303
2305{
2306public:
2308
2310 : patternElement(p), statement(stmt)
2311 { kind = K; }
2312
2313 void accept0(BaseVisitor *visitor) override;
2314
2316 { return catchToken; }
2317
2319 { return statement->lastSourceLocation(); }
2320
2321// attributes
2328};
2329
2331{
2332public:
2334
2336 statement (stmt)
2337 { kind = K; }
2338
2339 void accept0(BaseVisitor *visitor) override;
2340
2342 { return finallyToken; }
2343
2345 { return statement ? statement->lastSourceLocation() : finallyToken; }
2346
2347// attributes
2350};
2351
2353{
2354public:
2356
2358 statement (stmt), catchExpression (c), finallyExpression (f)
2359 { kind = K; }
2360
2362 statement (stmt), catchExpression (nullptr), finallyExpression (f)
2363 { kind = K; }
2364
2366 statement (stmt), catchExpression (c), finallyExpression (nullptr)
2367 { kind = K; }
2368
2369 void accept0(BaseVisitor *visitor) override;
2370
2372 { return tryToken; }
2373
2375 {
2376 if (finallyExpression)
2377 return finallyExpression->statement->rbraceToken;
2378 else if (catchExpression)
2379 return catchExpression->statement->rbraceToken;
2380
2381 return statement->lastSourceLocation();
2382 }
2383
2384// attributes
2389};
2390
2392{
2393public:
2395
2397 name (n), formals (f), body (b),
2398 typeAnnotation(typeAnnotation)
2399 { kind = K; }
2400
2401 void accept0(BaseVisitor *visitor) override;
2402
2404 { return functionToken; }
2405
2407 { return rbraceToken; }
2408
2409 FunctionExpression *asFunctionDefinition() override;
2410
2411// attributes
2413 bool isArrowFunction = false;
2414 bool isGenerator = false;
2424};
2425
2427{
2428public:
2430
2432 FunctionExpression(n, f, b, typeAnnotation)
2433 { kind = K; }
2434
2435 void accept0(BaseVisitor *visitor) override;
2436};
2437
2439{
2440public:
2442
2444 : element(e)
2445 {
2446 kind = K;
2447 if (previous) {
2448 next = previous->next;
2449 previous->next = this;
2450 } else {
2451 next = this;
2452 }
2453 }
2454
2456 n->next = next;
2457 next = n;
2458 return n;
2459 }
2460
2462 {
2463 AST::FormalParameterList *formals = this;
2464 while (formals) {
2465 PatternElement *e = formals->element;
2466 if (e && e->type == PatternElement::RestElement)
2467 return false;
2468 if (e && (e->initializer || e->bindingTarget))
2469 return false;
2470 formals = formals->next;
2471 }
2472 return true;
2473 }
2474
2476 {
2477 // the length property of Function objects
2478 int l = 0;
2479 AST::FormalParameterList *formals = this;
2480 while (formals) {
2481 PatternElement *e = formals->element;
2482 if (!e || e->initializer)
2483 break;
2484 if (e->type == PatternElement::RestElement)
2485 break;
2486 ++l;
2487 formals = formals->next;
2488 }
2489 return l;
2490 }
2491
2492 bool containsName(const QString &name) const {
2493 for (const FormalParameterList *it = this; it; it = it->next) {
2494 PatternElement *b = it->element;
2495 // ### handle binding patterns
2496 if (b && b->bindingIdentifier == name)
2497 return true;
2498 }
2499 return false;
2500 }
2501
2502 BoundNames formals() const;
2503
2504 BoundNames boundNames() const;
2505
2506 void accept0(BaseVisitor *visitor) override;
2507
2509 { return element->firstSourceLocation(); }
2510
2512 {
2513 return lastListElement(this)->element->lastSourceLocation();
2514 }
2515
2517
2518// attributes
2519 PatternElement *element = nullptr;
2521};
2522
2524{
2525public:
2527
2529 : name(n), heritage(heritage), elements(elements)
2530 { kind = K; }
2531
2532 void accept0(BaseVisitor *visitor) override;
2533
2535 { return classToken; }
2536
2538 { return rbraceToken; }
2539
2540 ClassExpression *asClassDefinition() override;
2541
2542// attributes
2550};
2551
2553{
2554public:
2556
2560
2561 void accept0(BaseVisitor *visitor) override;
2562};
2563
2564
2566{
2567public:
2569
2571 : isStatic(isStatic), property(property)
2572 {
2573 kind = K;
2574 next = this;
2575 }
2576
2578 n->next = next;
2579 next = n;
2580 return n;
2581 }
2582
2583 void accept0(BaseVisitor *visitor) override;
2584
2586 { return property->firstSourceLocation(); }
2587
2589 {
2590 if (next)
2591 return next->lastSourceLocation();
2592 return property->lastSourceLocation();
2593 }
2594
2595 ClassElementList *finish();
2596
2600};
2601
2603{
2604public:
2606
2608 : statements(statements)
2609 { kind = K; }
2610
2611 void accept0(BaseVisitor *visitor) override;
2612
2614 { return statements ? statements->firstSourceLocation() : SourceLocation(); }
2615
2617 { return statements ? statements->lastSourceLocation() : SourceLocation(); }
2618
2619// attributes
2621};
2622
2624{
2625public:
2627
2629 : importedBinding(importedBinding)
2630 {
2631 kind = K;
2632 }
2633
2634 ImportSpecifier(QStringView identifier, QStringView importedBinding)
2635 : identifier(identifier), importedBinding(importedBinding)
2636 {
2637 kind = K;
2638 }
2639
2640 void accept0(BaseVisitor *visitor) override;
2641
2643 { return identifier.isNull() ? importedBindingToken : identifierToken; }
2645 { return importedBindingToken; }
2646
2647// attributes
2652};
2653
2655{
2656public:
2658
2660 : importSpecifier(importSpecifier)
2661 {
2662 kind = K;
2663 next = this;
2664 }
2665
2666 ImportsList(ImportsList *previous, ImportSpecifier *importSpecifier)
2667 : importSpecifier(importSpecifier)
2668 {
2669 kind = K;
2670 if (previous) {
2671 next = previous->next;
2672 previous->next = this;
2673 } else {
2674 next = this;
2675 }
2676 }
2677
2679 {
2681 next = nullptr;
2682 return head;
2683 }
2684
2685 void accept0(BaseVisitor *visitor) override;
2686
2688 { return importSpecifierToken; }
2689
2691 {
2692 return lastListElement(this)->importSpecifierToken;
2693 }
2694
2695// attributes
2699};
2700
2702{
2703public:
2705
2707 {
2708 kind = K;
2709 }
2710
2712 : importsList(importsList)
2713 {
2714 kind = K;
2715 }
2716
2717 void accept0(BaseVisitor *visitor) override;
2718
2720 { return leftBraceToken; }
2722 { return rightBraceToken; }
2723
2724// attributes
2727 ImportsList *importsList = nullptr;
2728};
2729
2731{
2732public:
2734
2736 : importedBinding(importedBinding)
2737 {
2738 kind = K;
2739 }
2740
2741 void accept0(BaseVisitor *visitor) override;
2742
2743 virtual SourceLocation firstSourceLocation() const override
2744 { return starToken; }
2745 virtual SourceLocation lastSourceLocation() const override
2746 { return importedBindingToken; }
2747
2748// attributes
2752};
2753
2755{
2756public:
2758
2759 ImportClause(QStringView importedDefaultBinding)
2760 : importedDefaultBinding(importedDefaultBinding)
2761 {
2762 kind = K;
2763 }
2764
2766 : nameSpaceImport(nameSpaceImport)
2767 {
2768 kind = K;
2769 }
2770
2772 : namedImports(namedImports)
2773 {
2774 kind = K;
2775 }
2776
2777 ImportClause(QStringView importedDefaultBinding, NameSpaceImport *nameSpaceImport)
2778 : importedDefaultBinding(importedDefaultBinding)
2779 , nameSpaceImport(nameSpaceImport)
2780 {
2781 kind = K;
2782 }
2783
2784 ImportClause(QStringView importedDefaultBinding, NamedImports *namedImports)
2785 : importedDefaultBinding(importedDefaultBinding)
2786 , namedImports(namedImports)
2787 {
2788 kind = K;
2789 }
2790
2791 void accept0(BaseVisitor *visitor) override;
2792
2793 virtual SourceLocation firstSourceLocation() const override
2794 { return importedDefaultBinding.isNull() ? (nameSpaceImport ? nameSpaceImport->firstSourceLocation() : namedImports->firstSourceLocation()) : importedDefaultBindingToken; }
2795 virtual SourceLocation lastSourceLocation() const override
2796 { return importedDefaultBinding.isNull() ? (nameSpaceImport ? nameSpaceImport->lastSourceLocation() : namedImports->lastSourceLocation()) : importedDefaultBindingToken; }
2797
2798// attributes
2801 NameSpaceImport *nameSpaceImport = nullptr;
2802 NamedImports *namedImports = nullptr;
2803};
2804
2806{
2807public:
2809
2810 FromClause(QStringView moduleSpecifier)
2811 : moduleSpecifier(moduleSpecifier)
2812 {
2813 kind = K;
2814 }
2815
2816 void accept0(BaseVisitor *visitor) override;
2817
2819 { return fromToken; }
2820
2822 { return moduleSpecifierToken; }
2823
2824// attributes
2828};
2829
2831{
2832public:
2834
2835 ImportDeclaration(ImportClause *importClause, FromClause *fromClause)
2836 : importClause(importClause), fromClause(fromClause)
2837 {
2838 kind = K;
2839 }
2840
2842 : moduleSpecifier(moduleSpecifier)
2843 {
2844 kind = K;
2845 }
2846
2847 void accept0(BaseVisitor *visitor) override;
2848
2850 { return importToken; }
2851
2853 { return moduleSpecifier.isNull() ? fromClause->lastSourceLocation() : moduleSpecifierToken; }
2854
2855// attributes
2859 ImportClause *importClause = nullptr;
2860 FromClause *fromClause = nullptr;
2861};
2862
2864{
2865public:
2867
2869 : identifier(identifier), exportedIdentifier(identifier)
2870 {
2871 kind = K;
2872 }
2873
2874 ExportSpecifier(QStringView identifier, QStringView exportedIdentifier)
2875 : identifier(identifier), exportedIdentifier(exportedIdentifier)
2876 {
2877 kind = K;
2878 }
2879
2880 void accept0(BaseVisitor *visitor) override;
2881
2883 { return identifierToken; }
2885 { return exportedIdentifierToken.isValid() ? exportedIdentifierToken : identifierToken; }
2886
2887// attributes
2892};
2893
2895{
2896public:
2898
2900 : exportSpecifier(exportSpecifier)
2901 {
2902 kind = K;
2903 next = this;
2904 }
2905
2906 ExportsList(ExportsList *previous, ExportSpecifier *exportSpecifier)
2907 : exportSpecifier(exportSpecifier)
2908 {
2909 kind = K;
2910 if (previous) {
2911 next = previous->next;
2912 previous->next = this;
2913 } else {
2914 next = this;
2915 }
2916 }
2917
2919 {
2921 next = nullptr;
2922 return head;
2923 }
2924
2925 void accept0(BaseVisitor *visitor) override;
2926
2928 { return exportSpecifier->firstSourceLocation(); }
2930 { return lastListElement(this)->exportSpecifier->lastSourceLocation(); }
2931
2932// attributes
2935};
2936
2938{
2939public:
2941
2943 {
2944 kind = K;
2945 }
2946
2948 : exportsList(exportsList)
2949 {
2950 kind = K;
2951 }
2952
2953 void accept0(BaseVisitor *visitor) override;
2954
2956 { return leftBraceToken; }
2958 { return rightBraceToken; }
2959
2960// attributes
2963 ExportsList *exportsList = nullptr;
2964};
2965
2967{
2968public:
2970
2972 : fromClause(fromClause)
2973 {
2974 kind = K;
2975 }
2976
2977 ExportDeclaration(ExportClause *exportClause, FromClause *fromClause)
2978 : exportClause(exportClause), fromClause(fromClause)
2979 {
2980 kind = K;
2981 }
2982
2984 : exportClause(exportClause)
2985 {
2986 kind = K;
2987 }
2988
2989 ExportDeclaration(bool exportDefault, Node *variableStatementOrDeclaration)
2990 : variableStatementOrDeclaration(variableStatementOrDeclaration)
2991 , exportDefault(exportDefault)
2992 {
2993 kind = K;
2994 }
2995
2996 bool exportsAll() const
2997 {
2998 return fromClause && !exportClause;
2999 }
3000
3001 void accept0(BaseVisitor *visitor) override;
3002
3004 { return exportToken; }
3006 { return fromClause ? fromClause->lastSourceLocation() : (exportClause ? exportClause->lastSourceLocation() : variableStatementOrDeclaration->lastSourceLocation()); }
3007
3008// attributes
3010 ExportClause *exportClause = nullptr;
3011 FromClause *fromClause = nullptr;
3012 Node *variableStatementOrDeclaration = nullptr;
3013 bool exportDefault = false;
3014};
3015
3017{
3018public:
3020
3022 : body(body)
3023 {
3024 kind = K;
3025 }
3026
3027 void accept0(BaseVisitor *visitor) override;
3028
3030 { return body ? body->firstSourceLocation() : SourceLocation(); }
3031
3033 { return body ? body->lastSourceLocation() : SourceLocation(); }
3034
3035// attributes
3037};
3038
3040{
3041public:
3043
3045 { kind = K; }
3046
3047 void accept0(BaseVisitor *visitor) override;
3048
3050 { return debuggerToken; }
3051
3053 { return semicolonToken; }
3054
3055// attributes
3058};
3059
3061{
3062public:
3064
3066 : fileName(fileName), importUri(nullptr)
3067 { kind = K; }
3068
3070 : importUri(uri)
3071 { kind = K; }
3072
3073 void accept0(BaseVisitor *visitor) override;
3074
3076 { return importToken; }
3077
3079 { return semicolonToken; }
3080
3081// attributes
3090 UiVersionSpecifier *version = nullptr;
3091};
3092
3094{
3095public:
3098
3099 UiObjectMember *uiObjectMemberCast() override;
3100
3101// attributes
3102 UiAnnotationList *annotations = nullptr;
3103};
3104
3106{
3107public:
3109
3111 : next(this), member(member)
3112 { kind = K; }
3113
3115 : member(member)
3116 {
3117 kind = K;
3118 next = previous->next;
3119 previous->next = this;
3120 }
3121
3122 void accept0(BaseVisitor *visitor) override;
3123
3125 { return member->firstSourceLocation(); }
3126
3128 { return lastListElement(this)->member->lastSourceLocation(); }
3129
3131 {
3133 next = nullptr;
3134 return head;
3135 }
3136
3137// attributes
3140};
3141
3143{
3144public:
3146
3148 : value(value)
3149 , next(this)
3150 {
3151 kind = K;
3152 }
3153
3155 : value(value)
3156 {
3157 kind = K;
3158 next = previous->next;
3159 previous->next = this;
3160 }
3161
3162 void accept0(BaseVisitor *visitor) override;
3163
3165 { return location; }
3166
3168 { return lastListElement(this)->location; }
3169
3171 {
3173 next = nullptr;
3174 return head;
3175 }
3176
3180};
3181
3183{
3184public:
3186
3188 : name(name), values(values)
3189 { kind = K; }
3190
3191 void accept0(BaseVisitor *visitor) override;
3192
3194 { return pragmaToken; }
3195
3197 { return semicolonToken; }
3198
3199// attributes
3206};
3207
3209{
3210public:
3212
3214 :name(name)
3215 { kind = K; }
3216
3217 void accept0(BaseVisitor *visitor) override;
3218
3220 { return requiredToken; }
3221
3223 { return semicolonToken; }
3224
3228};
3229
3231{
3232public:
3234
3236 : headerItem(import), next(this)
3237 { kind = K; }
3238
3240 : headerItem(pragma), next(this)
3241 { kind = K; }
3242
3244 : headerItem(import)
3245 {
3246 kind = K;
3247 next = previous->next;
3248 previous->next = this;
3249 }
3250
3252 : headerItem(pragma)
3253 {
3254 kind = K;
3255 next = previous->next;
3256 previous->next = this;
3257 }
3258
3260 {
3262 next = nullptr;
3263 return head;
3264 }
3265
3266 void accept0(BaseVisitor *visitor) override;
3267
3269 { return headerItem->firstSourceLocation(); }
3270
3272 { return lastListElement(this)->headerItem->lastSourceLocation(); }
3273
3274// attributes
3277};
3278
3280{
3281public:
3283
3285 : headers(headers), members(members)
3286 { kind = K; }
3287
3288 void accept0(BaseVisitor *visitor) override;
3289
3291 {
3292 if (headers)
3293 return headers->firstSourceLocation();
3294 else if (members)
3295 return members->firstSourceLocation();
3296 return SourceLocation();
3297 }
3298
3300 {
3301 if (members)
3302 return members->lastSourceLocation();
3303 else if (headers)
3304 return headers->lastSourceLocation();
3305 return SourceLocation();
3306 }
3307
3308// attributes
3311};
3312
3314{
3315public:
3317
3319 : next(this), member(member)
3320 { kind = K; }
3321
3323 : member(member)
3324 {
3325 kind = K;
3326 next = previous->next;
3327 previous->next = this;
3328 }
3329
3330 void accept0(BaseVisitor *visitor) override;
3331
3333 { return member->firstSourceLocation(); }
3334
3336 { return lastListElement(this)->member->lastSourceLocation(); }
3337
3339 {
3341 next = nullptr;
3342 return head;
3343 }
3344
3345// attributes
3349};
3350
3352{
3353public:
3355
3359
3360 void accept0(BaseVisitor *visitor) override;
3361
3363 { return lbraceToken; }
3364
3366 { return rbraceToken; }
3367
3368// attributes
3372};
3373
3375{
3376public:
3378
3380 type (t), name (n), next (this)
3381 { kind = K; }
3382
3384 type (t), name (n)
3385 {
3386 kind = K;
3387 next = previous->next;
3388 previous->next = this;
3389 }
3390
3391 void accept0(BaseVisitor *) override;
3392
3394 { return colonToken.isValid() ? identifierToken : propertyTypeToken; }
3395
3397 {
3398 auto last = lastListElement(this);
3399 return last->lastOwnSourceLocation();
3400 }
3401
3403 {
3404 return (colonToken.isValid() ? propertyTypeToken : identifierToken);
3405 }
3406
3408 {
3409 UiParameterList *front = next;
3410 next = nullptr;
3411 return front;
3412 }
3413
3414// attributes
3422};
3423
3425{
3427public:
3428 UiPropertyAttributes() { kind = K; }
3429
3430 SourceLocation defaultToken() const { return m_defaultToken; }
3431 bool isDefaultMember() const { return defaultToken().isValid(); }
3432 SourceLocation requiredToken() const { return m_requiredToken; }
3433 bool isRequired() const { return requiredToken().isValid(); }
3434 SourceLocation readonlyToken() const { return m_readonlyToken; }
3435 bool isReadonly() const { return readonlyToken().isValid(); }
3436
3437 SourceLocation propertyToken() const { return m_propertyToken; }
3438
3439 template <bool InvalidIsLargest = true>
3440 static bool compareLocationsByBegin(const SourceLocation *& lhs, const SourceLocation *& rhs)
3441 {
3442 if (lhs->isValid() && rhs->isValid())
3443 return lhs->begin() < rhs->begin();
3444 else if (lhs->isValid())
3445 return InvalidIsLargest;
3446 else
3447 return !InvalidIsLargest;
3448 }
3449
3450 void accept0(BaseVisitor *) override {} // intentionally do nothing
3451
3452 SourceLocation firstSourceLocation() const override;
3453
3454 SourceLocation lastSourceLocation() const override;
3455
3456private:
3457 friend class QQmlJS::Parser;
3458 SourceLocation m_defaultToken;
3459 SourceLocation m_readonlyToken;
3460 SourceLocation m_requiredToken;
3461 SourceLocation m_propertyToken;
3462};
3463
3465{
3466public:
3468
3471 : type(Property), memberType(memberType), name(name), statement(nullptr), binding(nullptr), parameters(nullptr)
3472 { kind = K; }
3473
3476 Statement *statement)
3477 : type(Property), memberType(memberType), name(name), statement(statement), binding(nullptr), parameters(nullptr)
3478 { kind = K; }
3479
3480 void accept0(BaseVisitor *visitor) override;
3481
3483 {
3484 if (hasAttributes)
3485 return m_attributes->firstSourceLocation();
3486 else
3487 return m_propertyToken;
3488 }
3489
3491 {
3492 if (binding)
3493 return binding->lastSourceLocation();
3494 if (statement)
3495 return statement->lastSourceLocation();
3496
3497 return semicolonToken;
3498 }
3499
3501 {
3502 return hasAttributes ? m_attributes->defaultToken() : SourceLocation {};
3503 }
3504 bool isDefaultMember() const { return defaultToken().isValid(); }
3505
3507 {
3508 return hasAttributes ? m_attributes->requiredToken() : SourceLocation {};
3509 }
3510 bool isRequired() const { return requiredToken().isValid(); }
3511
3513 {
3514 return hasAttributes ? m_attributes->readonlyToken() : SourceLocation {};
3515 }
3516 bool isReadonly() const { return readonlyToken().isValid(); }
3517
3519 {
3520 m_attributes = attributes;
3521 hasAttributes = true;
3522 }
3523
3525 {
3526 return hasAttributes ? m_attributes->propertyToken() : m_propertyToken;
3527 }
3528
3530 {
3531 m_propertyToken = token;
3532 hasAttributes = false;
3533 }
3534
3535// attributes
3536 enum : bool { Signal, Property } type;
3537 bool hasAttributes = false;
3541 Statement *statement; // initialized with a JS expression
3542 UiObjectMember *binding; // initialized with a QML object or array.
3544 // TODO: merge source locations
3550private:
3551 union {
3552 SourceLocation m_propertyToken = SourceLocation {};
3554 };
3555};
3556
3558{
3559public:
3561
3562 UiObjectDefinition(UiQualifiedId *qualifiedTypeNameId,
3563 UiObjectInitializer *initializer)
3564 : qualifiedTypeNameId(qualifiedTypeNameId), initializer(initializer)
3565 { kind = K; }
3566
3567 void accept0(BaseVisitor *visitor) override;
3568
3570 { return qualifiedTypeNameId->identifierToken; }
3571
3573 { return initializer->rbraceToken; }
3574
3575// attributes
3578};
3579
3581{
3582public:
3584
3585 UiInlineComponent(QStringView inlineComponentName, UiObjectDefinition* inlineComponent)
3586 : name(inlineComponentName), component(inlineComponent)
3587 { kind = K; }
3588
3590 {return component->lastSourceLocation();}
3591
3593 {return componentToken;}
3594
3595 void accept0(BaseVisitor *visitor) override;
3596
3597 // attributes
3602};
3603
3605{
3606public:
3608
3609 UiSourceElement(Node *sourceElement)
3610 : sourceElement(sourceElement)
3611 { kind = K; }
3612
3614 {
3615 if (FunctionExpression *funDecl = sourceElement->asFunctionDefinition())
3616 return funDecl->firstSourceLocation();
3617 else if (VariableStatement *varStmt = cast<VariableStatement *>(sourceElement))
3618 return varStmt->firstSourceLocation();
3619
3620 return SourceLocation();
3621 }
3622
3624 {
3625 if (FunctionExpression *funDecl = sourceElement->asFunctionDefinition())
3626 return funDecl->lastSourceLocation();
3627 else if (VariableStatement *varStmt = cast<VariableStatement *>(sourceElement))
3628 return varStmt->lastSourceLocation();
3629
3630 return SourceLocation();
3631 }
3632
3633 void accept0(BaseVisitor *visitor) override;
3634
3635
3636// attributes
3638};
3639
3641{
3642public:
3644
3646 UiQualifiedId *qualifiedTypeNameId,
3647 UiObjectInitializer *initializer)
3648 : qualifiedId(qualifiedId),
3649 qualifiedTypeNameId(qualifiedTypeNameId),
3650 initializer(initializer),
3651 hasOnToken(false)
3652 { kind = K; }
3653
3655 {
3656 if (hasOnToken && qualifiedTypeNameId)
3657 return qualifiedTypeNameId->identifierToken;
3658
3659 return qualifiedId->identifierToken;
3660 }
3661
3663 { return initializer->rbraceToken; }
3664
3665 void accept0(BaseVisitor *visitor) override;
3666
3667
3668// attributes
3674};
3675
3677{
3678public:
3680
3682 Statement *statement)
3683 : qualifiedId(qualifiedId),
3684 statement(statement)
3685 { kind = K; }
3686
3688 { return qualifiedId->identifierToken; }
3689
3691 { return statement->lastSourceLocation(); }
3692
3693 void accept0(BaseVisitor *visitor) override;
3694
3695// attributes
3699};
3700
3702{
3703public:
3705
3708 : qualifiedId(qualifiedId),
3710 { kind = K; }
3711
3713 { Q_ASSERT(qualifiedId); return qualifiedId->identifierToken; }
3714
3716 { return rbracketToken; }
3717
3718 void accept0(BaseVisitor *visitor) override;
3719
3720// attributes
3726};
3727
3729{
3731public:
3732 UiEnumMemberList(QStringView member, double v = 0.0)
3733 : next(this), member(member), value(v)
3734 { kind = K; }
3735
3737 : member(member)
3738 {
3739 kind = K;
3740 next = previous->next;
3741 previous->next = this;
3742 value = previous->value + 1;
3743 }
3744
3746 : member(member), value(v)
3747 {
3748 kind = K;
3749 next = previous->next;
3750 previous->next = this;
3751 }
3752
3754 { return memberToken; }
3755
3757 {
3758 auto last = lastListElement(this);
3759 return last->valueToken.isValid() ? last->valueToken : last->memberToken;
3760 }
3761
3762 void accept0(BaseVisitor *visitor) override;
3763
3765 {
3767 next = nullptr;
3768 return head;
3769 }
3770
3771// attributes
3774 double value;
3777};
3778
3780{
3781public:
3783
3789
3791 { return enumToken; }
3792
3794 { return rbraceToken; }
3795
3796 void accept0(BaseVisitor *visitor) override;
3797
3798// attributes
3805};
3806
3808{
3809public:
3811
3812 UiAnnotation(UiQualifiedId *qualifiedTypeNameId,
3813 UiObjectInitializer *initializer)
3814 : qualifiedTypeNameId(qualifiedTypeNameId), initializer(initializer)
3815 { kind = K; }
3816
3817 void accept0(BaseVisitor *visitor) override;
3818
3820 { return qualifiedTypeNameId->identifierToken; }
3821
3823 { return initializer->rbraceToken; }
3824
3825// attributes
3828};
3829
3831{
3832public:
3834
3836 : next(this), annotation(annotation)
3837 { kind = K; }
3838
3840 : annotation(annotation)
3841 {
3842 kind = K;
3843 next = previous->next;
3844 previous->next = this;
3845 }
3846
3847 void accept0(BaseVisitor *visitor) override;
3848
3850 { return annotation->firstSourceLocation(); }
3851
3853 { return lastListElement(this)->annotation->lastSourceLocation(); }
3854
3856 {
3858 next = nullptr;
3859 return head;
3860 }
3861
3862// attributes
3865};
3866
3867} } // namespace AST
3868
3869
3871
3872#endif
Definition qlist.h:75
const_iterator constBegin() const noexcept
Definition qlist.h:632
const_iterator constEnd() const noexcept
Definition qlist.h:633
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
ClassExpression * asClassDefinition() override
SourceLocation lastSourceLocation() const override
FunctionExpression * asFunctionDefinition() override
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 ClassExpression * asClassDefinition()
Definition qqmljsast.cpp:74
virtual SourceLocation lastSourceLocation() const =0
virtual void accept0(BaseVisitor *visitor)=0
static void accept(Node *node, BaseVisitor *visitor)
virtual FunctionExpression * asFunctionDefinition()
Definition qqmljsast.cpp:69
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 * 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
ExpressionNode * initializer
SourceLocation lastSourceLocation() const override
SourceLocation declarationKindToken
Pattern * destructuringPattern() const
ExpressionNode * destructuringTarget() const
PatternElement(QStringView n, TypeAnnotation *typeAnnotation=nullptr, ExpressionNode *i=nullptr, Type t=Binding)
ExpressionNode * bindingTarget
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 colonToken
SourceLocation firstSourceLocation() const override
SourceLocation semicolonToken
SourceLocation lastSourceLocation() const override
SourceLocation pragmaToken
SourceLocation pragmaIdToken
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:78
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:129
\inmodule QtCore
#define this
Definition dialogs.cpp:9
QString str
[2]
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
GLdouble s
[6]
Definition qopenglext.h:235
const GLubyte * c
GLuint GLuint * names
GLdouble GLdouble t
Definition qopenglext.h:243
GLuint64EXT * result
[6]
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
Members members(const Members &candidates, QTypeRevision maxMajorVersion, Postprocess &&process)
#define Q_ASSERT(cond)
Definition qrandom.cpp:47
static QT_BEGIN_NAMESPACE const char * asString(QSSGRenderGraphObject::Type type)
static const QTextHtmlElement elements[Html_NumElements]
static QString errorMessage(QUrlPrivate::ErrorCode errorCode, const QString &errorSource, qsizetype errorPosition)
Definition qurl.cpp:3517
static const uint base
Definition qurlidna.cpp:20
const char property[13]
Definition qwizard.cpp:101
QTextStream out(stdout)
[7]
QObject::connect nullptr
manager head(request, this, [this](QRestReply &reply) { if(reply.isSuccess()) })
[6]
char * toString(const MyType &t)
[31]
\inmodule QtCore \reentrant
Definition qchar.h:18
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:23