diff options
Diffstat (limited to 'src/libs/qmljs/parser/qmljsparser.cpp')
-rw-r--r-- | src/libs/qmljs/parser/qmljsparser.cpp | 1568 |
1 files changed, 821 insertions, 747 deletions
diff --git a/src/libs/qmljs/parser/qmljsparser.cpp b/src/libs/qmljs/parser/qmljsparser.cpp index a73a4dff96..9d6ed072ad 100644 --- a/src/libs/qmljs/parser/qmljsparser.cpp +++ b/src/libs/qmljs/parser/qmljsparser.cpp @@ -1,8 +1,6 @@ - -#line 134 "qmljs.g" /**************************************************************************** ** -** Copyright (C) 2016 The Qt Company Ltd. +** Copyright (C) 2021 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qt Creator. @@ -36,7 +34,7 @@ #include <string.h> -#line 493 "qmljs.g" +#line 494 "qmljs.g" #include "qmljsparser_p.h" @@ -258,85 +256,85 @@ bool Parser::parse(int startToken) switch (r) { -#line 720 "qmljs.g" +#line 721 "qmljs.g" case 0: { sym(1).Node = sym(2).Node; program = sym(1).Node; } break; -#line 728 "qmljs.g" +#line 729 "qmljs.g" case 1: { sym(1).Node = sym(2).Node; program = sym(1).Node; } break; -#line 736 "qmljs.g" +#line 737 "qmljs.g" case 2: { sym(1).Node = sym(2).Node; program = sym(1).Node; } break; -#line 744 "qmljs.g" +#line 745 "qmljs.g" case 3: { sym(1).Node = sym(2).Node; program = sym(1).Node; } break; -#line 752 "qmljs.g" +#line 753 "qmljs.g" case 4: { sym(1).Node = sym(2).Node; program = sym(1).Node; } break; -#line 760 "qmljs.g" +#line 761 "qmljs.g" case 5: { sym(1).Node = sym(2).Node; program = sym(1).Node; } break; -#line 769 "qmljs.g" +#line 770 "qmljs.g" case 6: { sym(1).UiProgram = new (pool) AST::UiProgram(sym(1).UiHeaderItemList, sym(2).UiObjectMemberList->finish()); } break; -#line 777 "qmljs.g" +#line 778 "qmljs.g" case 8: { sym(1).Node = sym(1).UiHeaderItemList->finish(); } break; -#line 784 "qmljs.g" +#line 785 "qmljs.g" case 9: { sym(1).Node = new (pool) AST::UiHeaderItemList(sym(1).UiPragma); } break; -#line 791 "qmljs.g" +#line 792 "qmljs.g" case 10: { sym(1).Node = new (pool) AST::UiHeaderItemList(sym(1).UiImport); } break; -#line 798 "qmljs.g" +#line 799 "qmljs.g" case 11: { sym(1).Node = new (pool) AST::UiHeaderItemList(sym(1).UiHeaderItemList, sym(2).UiPragma); } break; -#line 805 "qmljs.g" +#line 806 "qmljs.g" case 12: { sym(1).Node = new (pool) AST::UiHeaderItemList(sym(1).UiHeaderItemList, sym(2).UiImport); } break; -#line 817 "qmljs.g" +#line 818 "qmljs.g" case 16: { AST::UiPragma *pragma = new (pool) AST::UiPragma(stringRef(2)); @@ -345,37 +343,52 @@ bool Parser::parse(int startToken) sym(1).Node = pragma; } break; -#line 829 "qmljs.g" +#line 830 "qmljs.g" case 18: { sym(1).UiImport->semicolonToken = loc(2); } break; -#line 836 "qmljs.g" +#line 837 "qmljs.g" case 19: { - auto version = new (pool) AST::UiVersionSpecifier(sym(1).dval, sym(3).dval); + const int major = sym(1).dval; + const int minor = sym(3).dval; + if (major < 0 || major >= 255 || minor < 0 || minor >= 255) { + diagnostic_messages.append( + compileError(loc(1), + QLatin1String("Invalid version. Version numbers must be >= 0 and < 255."))); + return false; + } + auto version = new (pool) AST::UiVersionSpecifier(major, minor); version->majorToken = loc(1); version->minorToken = loc(3); sym(1).UiVersionSpecifier = version; } break; -#line 847 "qmljs.g" +#line 855 "qmljs.g" case 20: { - auto version = new (pool) AST::UiVersionSpecifier(sym(1).dval, 0); + const int major = sym(1).dval; + if (major < 0 || major >= 255) { + diagnostic_messages.append( + compileError(loc(1), + QLatin1String("Invalid major version. Version numbers must be >= 0 and < 255."))); + return false; + } + auto version = new (pool) AST::UiVersionSpecifier(sym(1).dval); version->majorToken = loc(1); sym(1).UiVersionSpecifier = version; } break; -#line 856 "qmljs.g" +#line 871 "qmljs.g" case 21: { sym(1).UiImport->version = sym(2).UiVersionSpecifier; sym(1).UiImport->semicolonToken = loc(3); } break; -#line 864 "qmljs.g" +#line 879 "qmljs.g" case 22: { sym(1).UiImport->version = sym(2).UiVersionSpecifier; @@ -385,7 +398,7 @@ bool Parser::parse(int startToken) sym(1).UiImport->semicolonToken = loc(5); } break; -#line 875 "qmljs.g" +#line 890 "qmljs.g" case 23: { sym(1).UiImport->asToken = loc(2); @@ -394,7 +407,7 @@ bool Parser::parse(int startToken) sym(1).UiImport->semicolonToken = loc(4); } break; -#line 885 "qmljs.g" +#line 900 "qmljs.g" case 24: { AST::UiImport *node = 0; @@ -419,19 +432,19 @@ bool Parser::parse(int startToken) } } break; -#line 911 "qmljs.g" +#line 926 "qmljs.g" case 25: { sym(1).Node = nullptr; } break; -#line 918 "qmljs.g" +#line 933 "qmljs.g" case 26: { sym(1).Node = new (pool) AST::UiObjectMemberList(sym(1).UiObjectMember); } break; -#line 925 "qmljs.g" +#line 940 "qmljs.g" case 27: { AST::IdentifierExpression *node = new (pool) AST::IdentifierExpression(stringRef(1)); @@ -439,7 +452,7 @@ bool Parser::parse(int startToken) sym(1).Node = node; } break; -#line 934 "qmljs.g" +#line 949 "qmljs.g" case 28: { AST::FieldMemberExpression *node = new (pool) AST::FieldMemberExpression(sym(1).Expression, stringRef(3)); @@ -448,7 +461,7 @@ bool Parser::parse(int startToken) sym(1).Node = node; } break; -#line 944 "qmljs.g" +#line 959 "qmljs.g" case 29: { if (AST::UiQualifiedId *qualifiedId = reparseAsQualifiedId(sym(1).Expression)) { @@ -465,26 +478,26 @@ bool Parser::parse(int startToken) sym(1).Node = node; } break; -#line 962 "qmljs.g" +#line 977 "qmljs.g" case 30: { sym(1).Node = sym(2).Node; } break; -#line 970 "qmljs.g" +#line 985 "qmljs.g" case 31: { sym(1).Node = new (pool) AST::UiAnnotationList(sym(1).UiAnnotation); } break; -#line 977 "qmljs.g" +#line 992 "qmljs.g" case 32: { AST::UiAnnotationList *node = new (pool) AST::UiAnnotationList(sym(1).UiAnnotationList, sym(2).UiAnnotation); sym(1).Node = node; } break; -#line 985 "qmljs.g" +#line 1000 "qmljs.g" case 33: { AST::UiObjectDefinition *node = sym(2).UiObjectDefinition; @@ -492,26 +505,26 @@ case 30: { sym(1).Node = node; } break; -#line 996 "qmljs.g" +#line 1011 "qmljs.g" case 35: { sym(1).Node = new (pool) AST::UiObjectMemberList(sym(1).UiObjectMember); } break; -#line 1003 "qmljs.g" +#line 1018 "qmljs.g" case 36: { AST::UiObjectMemberList *node = new (pool) AST:: UiObjectMemberList(sym(1).UiObjectMemberList, sym(2).UiObjectMember); sym(1).Node = node; } break; -#line 1011 "qmljs.g" +#line 1026 "qmljs.g" case 37: { sym(1).Node = new (pool) AST::UiArrayMemberList(sym(1).UiObjectMember); } break; -#line 1018 "qmljs.g" +#line 1033 "qmljs.g" case 38: { AST::UiArrayMemberList *node = new (pool) AST::UiArrayMemberList(sym(1).UiArrayMemberList, sym(3).UiObjectMember); @@ -519,7 +532,7 @@ case 30: { sym(1).Node = node; } break; -#line 1027 "qmljs.g" +#line 1042 "qmljs.g" case 39: { AST::UiObjectInitializer *node = new (pool) AST::UiObjectInitializer((AST::UiObjectMemberList*)0); @@ -528,7 +541,7 @@ case 30: { sym(1).Node = node; } break; -#line 1037 "qmljs.g" +#line 1052 "qmljs.g" case 40: { AST::UiObjectInitializer *node = new (pool) AST::UiObjectInitializer(sym(2).UiObjectMemberList->finish()); @@ -537,14 +550,14 @@ case 30: { sym(1).Node = node; } break; -#line 1047 "qmljs.g" +#line 1062 "qmljs.g" case 41: { AST::UiObjectDefinition *node = new (pool) AST::UiObjectDefinition(sym(1).UiQualifiedId, sym(2).UiObjectInitializer); sym(1).Node = node; } break; -#line 1055 "qmljs.g" +#line 1070 "qmljs.g" case 42: { AST::UiObjectMember *node = sym(2).UiObjectMember; @@ -552,7 +565,7 @@ case 30: { sym(1).Node = sym(2).Node; } break; -#line 1068 "qmljs.g" +#line 1083 "qmljs.g" case 45: { AST::UiArrayBinding *node = new (pool) AST::UiArrayBinding(sym(1).UiQualifiedId, sym(5).UiArrayMemberList->finish()); @@ -562,7 +575,7 @@ case 30: { sym(1).Node = node; } break; -#line 1079 "qmljs.g" +#line 1094 "qmljs.g" case 46: { AST::UiObjectBinding *node = new (pool) AST::UiObjectBinding( @@ -571,7 +584,7 @@ case 30: { sym(1).Node = node; } break; -#line 1089 "qmljs.g" +#line 1104 "qmljs.g" case 47: { AST::UiObjectBinding *node = new (pool) AST::UiObjectBinding( @@ -581,7 +594,7 @@ case 30: { sym(1).Node = node; } break; -#line 1101 "qmljs.g" +#line 1116 "qmljs.g" case 48: { AST::ObjectPattern *l = new (pool) AST::ObjectPattern(sym(3).PatternPropertyList->finish()); @@ -592,7 +605,7 @@ case 30: { sym(1).Node = node; } break; -#line 1114 "qmljs.g" +#line 1129 "qmljs.g" case 49: { AST::ObjectPattern *l = new (pool) AST::ObjectPattern(sym(3).PatternPropertyList->finish()); @@ -603,33 +616,33 @@ case 30: { sym(1).Node = node; } break; -#line 1127 "qmljs.g" +#line 1142 "qmljs.g" case 50: Q_FALLTHROUGH(); -#line 1129 "qmljs.g" +#line 1144 "qmljs.g" case 51: Q_FALLTHROUGH(); -#line 1131 "qmljs.g" +#line 1146 "qmljs.g" case 52: { sym(1).Node = sym(3).Node; } break; -#line 1139 "qmljs.g" +#line 1154 "qmljs.g" case 53: Q_FALLTHROUGH(); -#line 1141 "qmljs.g" +#line 1156 "qmljs.g" case 54: Q_FALLTHROUGH(); -#line 1143 "qmljs.g" +#line 1158 "qmljs.g" case 55: Q_FALLTHROUGH(); -#line 1145 "qmljs.g" +#line 1160 "qmljs.g" case 56: Q_FALLTHROUGH(); -#line 1147 "qmljs.g" +#line 1162 "qmljs.g" case 57: Q_FALLTHROUGH(); -#line 1149 "qmljs.g" +#line 1164 "qmljs.g" case 58: { sym(1).Node = sym(2).Node; } break; -#line 1156 "qmljs.g" +#line 1171 "qmljs.g" case 59: { @@ -638,11 +651,11 @@ case 59: sym(1).Node = node; } break; -#line 1166 "qmljs.g" +#line 1181 "qmljs.g" case 60: Q_FALLTHROUGH(); -#line 1168 "qmljs.g" +#line 1183 "qmljs.g" case 61: Q_FALLTHROUGH(); -#line 1170 "qmljs.g" +#line 1185 "qmljs.g" case 62: { AST::UiQualifiedId *node = new (pool) AST::UiQualifiedId(stringRef(1)); @@ -650,7 +663,7 @@ case 59: sym(1).Node = node; } break; -#line 1179 "qmljs.g" +#line 1194 "qmljs.g" case 63: { AST::UiQualifiedId *node = new (pool) AST::UiQualifiedId(sym(1).UiQualifiedId, stringRef(3)); @@ -658,19 +671,19 @@ case 59: sym(1).Node = node; } break; -#line 1188 "qmljs.g" +#line 1203 "qmljs.g" case 64: { sym(1).Node = nullptr; } break; -#line 1195 "qmljs.g" +#line 1210 "qmljs.g" case 65: { sym(1).Node = sym(1).UiParameterList->finish(); } break; -#line 1202 "qmljs.g" +#line 1217 "qmljs.g" case 66: { AST::UiParameterList *node = new (pool) AST::UiParameterList(sym(3).UiQualifiedId->finish(), stringRef(1)); @@ -680,7 +693,7 @@ case 59: sym(1).Node = node; } break; -#line 1213 "qmljs.g" +#line 1228 "qmljs.g" case 67: { AST::UiParameterList *node = new (pool) AST::UiParameterList(sym(1).UiQualifiedId->finish(), stringRef(2)); @@ -689,7 +702,7 @@ case 59: sym(1).Node = node; } break; -#line 1223 "qmljs.g" +#line 1238 "qmljs.g" case 68: { AST::UiParameterList *node = new (pool) AST::UiParameterList(sym(1).UiParameterList, sym(5).UiQualifiedId->finish(), stringRef(3)); @@ -700,7 +713,7 @@ case 59: sym(1).Node = node; } break; -#line 1235 "qmljs.g" +#line 1250 "qmljs.g" case 69: { AST::UiParameterList *node = new (pool) AST::UiParameterList(sym(1).UiParameterList, sym(3).UiQualifiedId->finish(), stringRef(4)); @@ -710,7 +723,7 @@ case 59: sym(1).Node = node; } break; -#line 1246 "qmljs.g" +#line 1261 "qmljs.g" case 70: { AST::UiPublicMember *node = new (pool) AST::UiPublicMember(nullptr, stringRef(2)); @@ -723,7 +736,7 @@ case 59: sym(1).Node = node; } break; -#line 1260 "qmljs.g" +#line 1275 "qmljs.g" case 71: { AST::UiPublicMember *node = new (pool) AST::UiPublicMember(nullptr, stringRef(2)); @@ -735,7 +748,7 @@ case 59: sym(1).Node = node; } break; -#line 1273 "qmljs.g" +#line 1288 "qmljs.g" case 72: { AST::UiPublicMember *node = new (pool) AST::UiPublicMember(sym(4).UiQualifiedId->finish(), stringRef(6)); @@ -748,7 +761,7 @@ case 59: sym(1).Node = node; } break; -#line 1289 "qmljs.g" +#line 1304 "qmljs.g" case 74: { AST::UiPublicMember *node = sym(2).UiPublicMember; @@ -757,7 +770,7 @@ case 59: sym(1).Node = node; } break; -#line 1299 "qmljs.g" +#line 1314 "qmljs.g" case 75: { AST::UiPublicMember *node = new (pool) AST::UiPublicMember(sym(2).UiQualifiedId->finish(), stringRef(3)); @@ -768,7 +781,7 @@ case 59: sym(1).Node = node; } break; -#line 1314 "qmljs.g" +#line 1329 "qmljs.g" case 77: { AST::UiPublicMember *node = sym(2).UiPublicMember; @@ -777,7 +790,7 @@ case 59: sym(1).Node = node; } break; -#line 1324 "qmljs.g" +#line 1340 "qmljs.g" case 78: { AST::UiPublicMember *node = sym(2).UiPublicMember; @@ -786,7 +799,7 @@ case 59: sym(1).Node = node; } break; -#line 1334 "qmljs.g" +#line 1350 "qmljs.g" case 79: { AST::UiPublicMember *node = sym(3).UiPublicMember; @@ -797,7 +810,7 @@ case 59: sym(1).Node = node; } break; -#line 1346 "qmljs.g" +#line 1362 "qmljs.g" case 80: { AST::UiPublicMember *node = sym(3).UiPublicMember; @@ -808,7 +821,7 @@ case 59: sym(1).Node = node; } break; -#line 1358 "qmljs.g" +#line 1374 "qmljs.g" case 81: { AST::UiPublicMember *node = sym(2).UiPublicMember; @@ -817,7 +830,7 @@ case 59: sym(1).Node = node; } break; -#line 1368 "qmljs.g" +#line 1384 "qmljs.g" case 82: { AST::UiPublicMember *node = sym(3).UiPublicMember; @@ -828,7 +841,7 @@ case 59: sym(1).Node = node; } break; -#line 1381 "qmljs.g" +#line 1397 "qmljs.g" case 83: { AST::UiPublicMember *node = sym(3).UiPublicMember; @@ -839,12 +852,12 @@ case 59: sym(1).Node = node; } break; -#line 1393 "qmljs.g" +#line 1409 "qmljs.g" /* we need OptionalSemicolon because UiScriptStatement might already parse the last semicolon and then we would miss a semicolon (see tests/auto/quick/qquickvisualdatamodel/data/objectlist.qml)*/ -#line 1399 "qmljs.g" +#line 1415 "qmljs.g" case 86: { AST::UiRequired *node = new (pool) AST::UiRequired(stringRef(2)); @@ -853,7 +866,7 @@ case 59: sym(1).Node = node; } break; -#line 1411 "qmljs.g" +#line 1427 "qmljs.g" case 88: { AST::UiPublicMember *node = sym(2).UiPublicMember; @@ -862,7 +875,7 @@ case 59: sym(1).Node = node; } break; -#line 1421 "qmljs.g" +#line 1437 "qmljs.g" case 89: { AST::UiPublicMember *node = new (pool) AST::UiPublicMember(sym(2).UiQualifiedId->finish(), stringRef(3), sym(5).Statement); @@ -873,7 +886,7 @@ case 59: sym(1).Node = node; } break; -#line 1435 "qmljs.g" +#line 1451 "qmljs.g" case 91: { AST::UiPublicMember *node = sym(2).UiPublicMember; @@ -882,7 +895,7 @@ case 59: sym(1).Node = node; } break; -#line 1445 "qmljs.g" +#line 1461 "qmljs.g" case 92: { AST::UiPublicMember *node = sym(2).UiPublicMember; @@ -891,7 +904,7 @@ case 59: sym(1).Node = node; } break; -#line 1455 "qmljs.g" +#line 1471 "qmljs.g" case 93: { AST::UiPublicMember *node = new (pool) AST::UiPublicMember(sym(4).UiQualifiedId->finish(), stringRef(6)); @@ -916,7 +929,7 @@ case 59: sym(1).Node = node; } break; -#line 1483 "qmljs.g" +#line 1499 "qmljs.g" case 95: { AST::UiPublicMember *node = sym(2).UiPublicMember; @@ -925,7 +938,7 @@ case 59: sym(1).Node = node; } break; -#line 1493 "qmljs.g" +#line 1509 "qmljs.g" case 96: { AST::UiPublicMember *node = new (pool) AST::UiPublicMember(sym(2).UiQualifiedId->finish(), stringRef(3)); @@ -947,7 +960,7 @@ case 59: sym(1).Node = node; } break; -#line 1518 "qmljs.g" +#line 1534 "qmljs.g" case 98: { AST::UiPublicMember *node = sym(2).UiPublicMember; @@ -956,26 +969,26 @@ case 59: sym(1).Node = node; } break; -#line 1528 "qmljs.g" +#line 1544 "qmljs.g" case 99: { auto node = new (pool) AST::UiSourceElement(sym(1).Node); sym(1).Node = node; } break; -#line 1536 "qmljs.g" +#line 1552 "qmljs.g" case 100: { sym(1).Node = new (pool) AST::UiSourceElement(sym(1).Node); } break; -#line 1543 "qmljs.g" +#line 1559 "qmljs.g" case 101: { sym(1).Node = new (pool) AST::UiSourceElement(sym(1).Node); } break; -#line 1550 "qmljs.g" +#line 1566 "qmljs.g" case 102: { if (AST::ArrayMemberExpression *mem = AST::cast<AST::ArrayMemberExpression *>(sym(1).Expression)) { @@ -997,7 +1010,7 @@ case 59: } } break; -#line 1573 "qmljs.g" +#line 1589 "qmljs.g" case 103: { AST::UiEnumDeclaration *enumDeclaration = new (pool) AST::UiEnumDeclaration(stringRef(2), sym(4).UiEnumMemberList->finish()); @@ -1007,7 +1020,7 @@ case 59: break; } -#line 1584 "qmljs.g" +#line 1600 "qmljs.g" case 104: { if (!stringRef(2).front().isUpper()) { @@ -1019,7 +1032,7 @@ case 59: sym(1).Node = inlineComponent; } break; -#line 1597 "qmljs.g" +#line 1613 "qmljs.g" case 105: { AST::UiEnumMemberList *node = new (pool) AST::UiEnumMemberList(stringRef(1)); @@ -1028,7 +1041,7 @@ case 59: break; } -#line 1607 "qmljs.g" +#line 1623 "qmljs.g" case 106: { AST::UiEnumMemberList *node = new (pool) AST::UiEnumMemberList(stringRef(1), sym(3).dval); @@ -1038,7 +1051,7 @@ case 59: break; } -#line 1618 "qmljs.g" +#line 1634 "qmljs.g" case 107: { AST::UiEnumMemberList *node = new (pool) AST::UiEnumMemberList(sym(1).UiEnumMemberList, stringRef(3)); @@ -1047,7 +1060,7 @@ case 59: break; } -#line 1628 "qmljs.g" +#line 1644 "qmljs.g" case 108: { AST::UiEnumMemberList *node = new (pool) AST::UiEnumMemberList(sym(1).UiEnumMemberList, stringRef(3), sym(5).dval); @@ -1057,25 +1070,25 @@ case 59: break; } -#line 1672 "qmljs.g" +#line 1688 "qmljs.g" case 135: { sym(1).TypeArgumentList = new (pool) AST::TypeArgumentList(sym(1).Type); } break; -#line 1679 "qmljs.g" +#line 1695 "qmljs.g" case 136: { sym(1).TypeArgumentList = new (pool) AST::TypeArgumentList(sym(1).TypeArgumentList, sym(3).Type); } break; -#line 1686 "qmljs.g" +#line 1702 "qmljs.g" case 137: { sym(1).Type = new (pool) AST::Type(sym(1).UiQualifiedId, sym(3).TypeArgumentList->finish()); } break; -#line 1693 "qmljs.g" +#line 1709 "qmljs.g" case 138: { AST::UiQualifiedId *id = new (pool) AST::UiQualifiedId(stringRef(1)); @@ -1083,26 +1096,26 @@ case 59: sym(1).Type = new (pool) AST::Type(id->finish()); } break; -#line 1702 "qmljs.g" +#line 1718 "qmljs.g" case 139: { sym(1).Type = new (pool) AST::Type(sym(1).UiQualifiedId); } break; -#line 1709 "qmljs.g" +#line 1725 "qmljs.g" case 140: { sym(1).TypeAnnotation = new (pool) AST::TypeAnnotation(sym(2).Type); sym(1).TypeAnnotation->colonToken = loc(1); } break; -#line 1718 "qmljs.g" +#line 1734 "qmljs.g" case 142: { sym(1).TypeAnnotation = nullptr; } break; -#line 1729 "qmljs.g" +#line 1745 "qmljs.g" case 143: { AST::ThisExpression *node = new (pool) AST::ThisExpression(); @@ -1110,7 +1123,7 @@ case 59: sym(1).Node = node; } break; -#line 1738 "qmljs.g" +#line 1754 "qmljs.g" case 144: { AST::IdentifierExpression *node = new (pool) AST::IdentifierExpression(stringRef(1)); @@ -1118,7 +1131,7 @@ case 59: sym(1).Node = node; } break; -#line 1756 "qmljs.g" +#line 1772 "qmljs.g" case 153: { if (coverExpressionType != CE_ParenthesizedExpression) { @@ -1127,7 +1140,7 @@ case 59: } } break; -#line 1767 "qmljs.g" +#line 1783 "qmljs.g" case 154: { AST::NestedExpression *node = new (pool) AST::NestedExpression(sym(2).Expression); @@ -1137,7 +1150,7 @@ case 59: coverExpressionType = CE_ParenthesizedExpression; } break; -#line 1778 "qmljs.g" +#line 1794 "qmljs.g" case 155: { sym(1).Node = nullptr; @@ -1145,7 +1158,7 @@ case 59: coverExpressionType = CE_FormalParameterList; } break; -#line 1787 "qmljs.g" +#line 1803 "qmljs.g" case 156: { AST::FormalParameterList *node = (new (pool) AST::FormalParameterList(nullptr, sym(2).PatternElement))->finish(pool); @@ -1154,7 +1167,7 @@ case 59: coverExpressionType = CE_FormalParameterList; } break; -#line 1797 "qmljs.g" +#line 1813 "qmljs.g" case 157: { AST::FormalParameterList *list = sym(2).Expression->reparseAsFormalParameterList(pool); @@ -1170,7 +1183,7 @@ case 59: sym(1).Node = list->finish(pool); } break; -#line 1814 "qmljs.g" +#line 1830 "qmljs.g" case 158: { AST::NullExpression *node = new (pool) AST::NullExpression(); @@ -1178,7 +1191,7 @@ case 59: sym(1).Node = node; } break; -#line 1823 "qmljs.g" +#line 1839 "qmljs.g" case 159: { AST::TrueLiteral *node = new (pool) AST::TrueLiteral(); @@ -1186,7 +1199,7 @@ case 59: sym(1).Node = node; } break; -#line 1832 "qmljs.g" +#line 1848 "qmljs.g" case 160: { AST::FalseLiteral *node = new (pool) AST::FalseLiteral(); @@ -1194,7 +1207,7 @@ case 59: sym(1).Node = node; } break; -#line 1841 "qmljs.g" +#line 1857 "qmljs.g" case 161: { AST::NumericLiteral *node = new (pool) AST::NumericLiteral(sym(1).dval); @@ -1202,9 +1215,9 @@ case 59: sym(1).Node = node; } break; -#line 1850 "qmljs.g" +#line 1866 "qmljs.g" case 162: Q_FALLTHROUGH(); -#line 1853 "qmljs.g" +#line 1869 "qmljs.g" case 163: { AST::StringLiteral *node = new (pool) AST::StringLiteral(stringRef(1)); @@ -1212,7 +1225,7 @@ case 59: sym(1).Node = node; } break; -#line 1865 "qmljs.g" +#line 1881 "qmljs.g" { Lexer::RegExpBodyPrefix prefix; @@ -1220,7 +1233,7 @@ case 59: prefix = Lexer::NoPrefix; goto scan_regexp; -#line 1877 "qmljs.g" +#line 1893 "qmljs.g" case 165: prefix = Lexer::EqualPrefix; @@ -1242,7 +1255,7 @@ case 59: } break; } -#line 1901 "qmljs.g" +#line 1917 "qmljs.g" case 166: { AST::PatternElementList *list = nullptr; @@ -1254,7 +1267,7 @@ case 59: sym(1).Node = node; } break; -#line 1914 "qmljs.g" +#line 1930 "qmljs.g" case 167: { AST::ArrayPattern *node = new (pool) AST::ArrayPattern(sym(2).PatternElementList->finish()); @@ -1263,7 +1276,7 @@ case 59: sym(1).Node = node; } break; -#line 1924 "qmljs.g" +#line 1940 "qmljs.g" case 168: { auto *list = sym(2).PatternElementList; @@ -1279,28 +1292,28 @@ case 59: Q_ASSERT(node->isValidArrayLiteral()); } break; -#line 1941 "qmljs.g" +#line 1957 "qmljs.g" case 169: { AST::PatternElement *e = new (pool) AST::PatternElement(sym(1).Expression); sym(1).Node = new (pool) AST::PatternElementList(nullptr, e); } break; -#line 1949 "qmljs.g" +#line 1965 "qmljs.g" case 170: { AST::PatternElement *e = new (pool) AST::PatternElement(sym(2).Expression); sym(1).Node = new (pool) AST::PatternElementList(sym(1).Elision->finish(), e); } break; -#line 1957 "qmljs.g" +#line 1973 "qmljs.g" case 171: { AST::PatternElementList *node = new (pool) AST::PatternElementList(sym(1).Elision, sym(2).PatternElement); sym(1).Node = node; } break; -#line 1965 "qmljs.g" +#line 1981 "qmljs.g" case 172: { AST::PatternElement *e = new (pool) AST::PatternElement(sym(4).Expression); @@ -1308,14 +1321,14 @@ case 59: sym(1).Node = sym(1).PatternElementList->append(node); } break; -#line 1974 "qmljs.g" +#line 1990 "qmljs.g" case 173: { AST::PatternElementList *node = new (pool) AST::PatternElementList(sym(3).Elision, sym(4).PatternElement); sym(1).Node = sym(1).PatternElementList->append(node); } break; -#line 1982 "qmljs.g" +#line 1998 "qmljs.g" case 174: { AST::Elision *node = new (pool) AST::Elision(); @@ -1323,7 +1336,7 @@ case 59: sym(1).Node = node; } break; -#line 1991 "qmljs.g" +#line 2007 "qmljs.g" case 175: { AST::Elision *node = new (pool) AST::Elision(sym(1).Elision); @@ -1331,26 +1344,26 @@ case 59: sym(1).Node = node; } break; -#line 2000 "qmljs.g" +#line 2016 "qmljs.g" case 176: { sym(1).Node = nullptr; } break; -#line 2007 "qmljs.g" +#line 2023 "qmljs.g" case 177: { sym(1).Node = sym(1).Elision->finish(); } break; -#line 2014 "qmljs.g" +#line 2030 "qmljs.g" case 178: { AST::PatternElement *node = new (pool) AST::PatternElement(sym(2).Expression, AST::PatternElement::SpreadElement); sym(1).Node = node; } break; -#line 2022 "qmljs.g" +#line 2038 "qmljs.g" case 179: { AST::ObjectPattern *node = new (pool) AST::ObjectPattern(); @@ -1359,7 +1372,7 @@ case 59: sym(1).Node = node; } break; -#line 2032 "qmljs.g" +#line 2048 "qmljs.g" case 180: { AST::ObjectPattern *node = new (pool) AST::ObjectPattern(sym(2).PatternPropertyList->finish()); @@ -1368,7 +1381,7 @@ case 59: sym(1).Node = node; } break; -#line 2042 "qmljs.g" +#line 2058 "qmljs.g" case 181: { AST::ObjectPattern *node = new (pool) AST::ObjectPattern(sym(2).PatternPropertyList->finish()); @@ -1377,24 +1390,24 @@ case 59: sym(1).Node = node; } break; -#line 2053 "qmljs.g" +#line 2069 "qmljs.g" case 182: Q_FALLTHROUGH(); -#line 2055 "qmljs.g" +#line 2071 "qmljs.g" case 183: { sym(1).Node = new (pool) AST::PatternPropertyList(sym(1).PatternProperty); } break; -#line 2062 "qmljs.g" +#line 2078 "qmljs.g" case 184: Q_FALLTHROUGH(); -#line 2064 "qmljs.g" +#line 2080 "qmljs.g" case 185: { AST::PatternPropertyList *node = new (pool) AST::PatternPropertyList(sym(1).PatternPropertyList, sym(3).PatternProperty); sym(1).Node = node; } break; -#line 2072 "qmljs.g" +#line 2088 "qmljs.g" case 186: { AST::IdentifierPropertyName *name = new (pool) AST::IdentifierPropertyName(stringRef(1)); @@ -1406,7 +1419,7 @@ case 59: sym(1).Node = node; } break; -#line 2088 "qmljs.g" +#line 2104 "qmljs.g" case 188: { AST::IdentifierPropertyName *name = new (pool) AST::IdentifierPropertyName(stringRef(1)); @@ -1425,9 +1438,9 @@ case 59: } break; -#line 2108 "qmljs.g" +#line 2124 "qmljs.g" case 189: Q_FALLTHROUGH(); -#line 2110 "qmljs.g" +#line 2126 "qmljs.g" case 190: { AST::PatternProperty *node = new (pool) AST::PatternProperty(sym(1).PropertyName, sym(3).Expression); @@ -1439,7 +1452,7 @@ case 59: sym(1).Node = node; } break; -#line 2128 "qmljs.g" +#line 2144 "qmljs.g" case 194: { AST::IdentifierPropertyName *node = new (pool) AST::IdentifierPropertyName(stringRef(1)); @@ -1447,9 +1460,9 @@ case 59: sym(1).Node = node; } break; -#line 2137 "qmljs.g" +#line 2153 "qmljs.g" case 195: Q_FALLTHROUGH(); -#line 2139 "qmljs.g" +#line 2155 "qmljs.g" case 196: { AST::StringLiteralPropertyName *node = new (pool) AST::StringLiteralPropertyName(stringRef(1)); @@ -1457,9 +1470,9 @@ case 59: sym(1).Node = node; } break; -#line 2148 "qmljs.g" +#line 2164 "qmljs.g" case 197: Q_FALLTHROUGH(); -#line 2150 "qmljs.g" +#line 2166 "qmljs.g" case 198: { AST::NumericLiteralPropertyName *node = new (pool) AST::NumericLiteralPropertyName(sym(1).dval); @@ -1467,7 +1480,7 @@ case 59: sym(1).Node = node; } break; -#line 2201 "qmljs.g" +#line 2217 "qmljs.g" case 239: { AST::ComputedPropertyName *node = new (pool) AST::ComputedPropertyName(sym(2).Expression); @@ -1475,25 +1488,25 @@ case 59: sym(1).Node = node; } break; -#line 2210 "qmljs.g" +#line 2226 "qmljs.g" case 240: Q_FALLTHROUGH(); -#line 2212 "qmljs.g" +#line 2228 "qmljs.g" case 241: { sym(1) = sym(2); } break; -#line 2220 "qmljs.g" +#line 2236 "qmljs.g" case 242: Q_FALLTHROUGH(); -#line 2222 "qmljs.g" +#line 2238 "qmljs.g" case 243: { sym(1).Node = nullptr; } break; -#line 2232 "qmljs.g" +#line 2248 "qmljs.g" case 246: Q_FALLTHROUGH(); -#line 2235 "qmljs.g" +#line 2251 "qmljs.g" case 247: { AST::TemplateLiteral *node = new (pool) AST::TemplateLiteral(stringRef(1), rawStringRef(1), nullptr); @@ -1501,9 +1514,9 @@ case 241: { sym(1).Node = node; } break; -#line 2244 "qmljs.g" +#line 2260 "qmljs.g" case 248: Q_FALLTHROUGH(); -#line 2247 "qmljs.g" +#line 2263 "qmljs.g" case 249: { AST::TemplateLiteral *node = new (pool) AST::TemplateLiteral(stringRef(1), rawStringRef(1), sym(2).Expression); @@ -1512,7 +1525,7 @@ case 241: { sym(1).Node = node; } break; -#line 2260 "qmljs.g" +#line 2276 "qmljs.g" case 251: { AST::SuperLiteral *node = new (pool) AST::SuperLiteral(); @@ -1520,9 +1533,9 @@ case 241: { sym(1).Node = node; } break; -#line 2270 "qmljs.g" +#line 2286 "qmljs.g" case 252: Q_FALLTHROUGH(); -#line 2272 "qmljs.g" +#line 2288 "qmljs.g" case 253: { AST::ArrayMemberExpression *node = new (pool) AST::ArrayMemberExpression(sym(1).Expression, sym(3).Expression); @@ -1531,28 +1544,48 @@ case 241: { sym(1).Node = node; } break; -#line 2284 "qmljs.g" - case 254: +#line 2297 "qmljs.g" + + case 254: { + AST::ArrayMemberExpression *node = new (pool) AST::ArrayMemberExpression(sym(1).Expression, sym(4).Expression); + node->lbracketToken = loc(3); + node->rbracketToken = loc(5); + node->isOptional = true; + sym(1).Node = node; + } break; + +#line 2309 "qmljs.g" + case 255: { AST::IdentifierExpression *node = new (pool) AST::IdentifierExpression(stringRef(1)); node->identifierToken= loc(1); sym(1).Node = node; } Q_FALLTHROUGH(); -#line 2292 "qmljs.g" - case 255: Q_FALLTHROUGH(); -#line 2294 "qmljs.g" +#line 2317 "qmljs.g" + case 256: Q_FALLTHROUGH(); +#line 2319 "qmljs.g" - case 256: { + case 257: { AST::FieldMemberExpression *node = new (pool) AST::FieldMemberExpression(sym(1).Expression, stringRef(3)); node->dotToken = loc(2); node->identifierToken = loc(3); sym(1).Node = node; } break; -#line 2306 "qmljs.g" +#line 2329 "qmljs.g" case 258: { + AST::FieldMemberExpression *node = new (pool) AST::FieldMemberExpression(sym(1).Expression, stringRef(3)); + node->dotToken = loc(2); + node->identifierToken = loc(3); + node->isOptional = true; + sym(1).Node = node; + } break; + +#line 2342 "qmljs.g" + + case 260: { AST::NewMemberExpression *node = new (pool) AST::NewMemberExpression(sym(2).Expression, sym(4).ArgumentList); node->newToken = loc(1); node->lparenToken = loc(3); @@ -1560,415 +1593,451 @@ case 241: { sym(1).Node = node; } break; -#line 2322 "qmljs.g" +#line 2358 "qmljs.g" - case 261: { + case 263: { AST::NewExpression *node = new (pool) AST::NewExpression(sym(2).Expression); node->newToken = loc(1); sym(1).Node = node; } break; -#line 2332 "qmljs.g" - case 262: Q_FALLTHROUGH(); -#line 2334 "qmljs.g" +#line 2368 "qmljs.g" + case 264: Q_FALLTHROUGH(); +#line 2370 "qmljs.g" - case 263: { + case 265: { AST::TaggedTemplate *node = new (pool) AST::TaggedTemplate(sym(1).Expression, sym(2).Template); sym(1).Node = node; } break; -#line 2342 "qmljs.g" +#line 2378 "qmljs.g" - case 264: { + case 266: { AST::CallExpression *node = new (pool) AST::CallExpression(sym(1).Expression, sym(3).ArgumentList); node->lparenToken = loc(2); node->rparenToken = loc(4); sym(1).Node = node; } break; -#line 2352 "qmljs.g" - case 265: Q_FALLTHROUGH(); -#line 2354 "qmljs.g" +#line 2388 "qmljs.g" - case 266: { + case 267: { + AST::CallExpression *node = new (pool) AST::CallExpression(sym(1).Expression, sym(4).ArgumentList); + node->lparenToken = loc(3); + node->rparenToken = loc(5); + node->isOptional = true; + sym(1).Node = node; + } break; + +#line 2399 "qmljs.g" + case 268: Q_FALLTHROUGH(); +#line 2401 "qmljs.g" + + case 269: { AST::CallExpression *node = new (pool) AST::CallExpression(sym(1).Expression, sym(3).ArgumentList); node->lparenToken = loc(2); node->rparenToken = loc(4); sym(1).Node = node; } break; -#line 2364 "qmljs.g" +#line 2411 "qmljs.g" - case 267: { + case 270: { + AST::CallExpression *node = new (pool) AST::CallExpression(sym(1).Expression, sym(4).ArgumentList); + node->lparenToken = loc(3); + node->rparenToken = loc(5); + node->isOptional = true; + sym(1).Node = node; + } break; + +#line 2423 "qmljs.g" + + case 271: { AST::ArrayMemberExpression *node = new (pool) AST::ArrayMemberExpression(sym(1).Expression, sym(3).Expression); node->lbracketToken = loc(2); node->rbracketToken = loc(4); sym(1).Node = node; } break; -#line 2374 "qmljs.g" +#line 2433 "qmljs.g" + + case 272: { + AST::ArrayMemberExpression *node = new (pool) AST::ArrayMemberExpression(sym(1).Expression, sym(4).Expression); + node->lbracketToken = loc(3); + node->rbracketToken = loc(5); + node->isOptional = true; + sym(1).Node = node; + } break; + +#line 2444 "qmljs.g" - case 268: { + case 273: { AST::FieldMemberExpression *node = new (pool) AST::FieldMemberExpression(sym(1).Expression, stringRef(3)); node->dotToken = loc(2); node->identifierToken = loc(3); sym(1).Node = node; } break; -#line 2384 "qmljs.g" +#line 2454 "qmljs.g" - case 269: { + case 274: { + AST::FieldMemberExpression *node = new (pool) AST::FieldMemberExpression(sym(1).Expression, stringRef(3)); + node->dotToken = loc(2); + node->identifierToken = loc(3); + node->isOptional = true; + sym(1).Node = node; + } break; + +#line 2465 "qmljs.g" + + case 275: { sym(1).Node = nullptr; } break; -#line 2391 "qmljs.g" - case 270: Q_FALLTHROUGH(); -#line 2393 "qmljs.g" +#line 2472 "qmljs.g" + case 276: Q_FALLTHROUGH(); +#line 2474 "qmljs.g" - case 271: { + case 277: { sym(1).Node = sym(1).ArgumentList->finish(); } break; -#line 2400 "qmljs.g" +#line 2481 "qmljs.g" - case 272: { + case 278: { sym(1).Node = new (pool) AST::ArgumentList(sym(1).Expression); } break; -#line 2407 "qmljs.g" +#line 2488 "qmljs.g" - case 273: { + case 279: { AST::ArgumentList *node = new (pool) AST::ArgumentList(sym(2).Expression); node->isSpreadElement = true; sym(1).Node = node; } break; -#line 2416 "qmljs.g" +#line 2497 "qmljs.g" - case 274: { + case 280: { AST::ArgumentList *node = new (pool) AST::ArgumentList(sym(1).ArgumentList, sym(3).Expression); node->commaToken = loc(2); sym(1).Node = node; } break; -#line 2425 "qmljs.g" +#line 2506 "qmljs.g" - case 275: { + case 281: { AST::ArgumentList *node = new (pool) AST::ArgumentList(sym(1).ArgumentList, sym(4).Expression); node->commaToken = loc(2); node->isSpreadElement = true; sym(1).Node = node; } break; -#line 2440 "qmljs.g" +#line 2521 "qmljs.g" - case 279: { + case 285: { AST::PostIncrementExpression *node = new (pool) AST::PostIncrementExpression(sym(1).Expression); node->incrementToken = loc(2); sym(1).Node = node; } break; -#line 2449 "qmljs.g" +#line 2530 "qmljs.g" - case 280: { + case 286: { AST::PostDecrementExpression *node = new (pool) AST::PostDecrementExpression(sym(1).Expression); node->decrementToken = loc(2); sym(1).Node = node; } break; -#line 2458 "qmljs.g" +#line 2539 "qmljs.g" - case 281: { + case 287: { AST::PreIncrementExpression *node = new (pool) AST::PreIncrementExpression(sym(2).Expression); node->incrementToken = loc(1); sym(1).Node = node; } break; -#line 2467 "qmljs.g" +#line 2548 "qmljs.g" - case 282: { + case 288: { AST::PreDecrementExpression *node = new (pool) AST::PreDecrementExpression(sym(2).Expression); node->decrementToken = loc(1); sym(1).Node = node; } break; -#line 2478 "qmljs.g" +#line 2559 "qmljs.g" - case 284: { + case 290: { AST::DeleteExpression *node = new (pool) AST::DeleteExpression(sym(2).Expression); node->deleteToken = loc(1); sym(1).Node = node; } break; -#line 2487 "qmljs.g" +#line 2568 "qmljs.g" - case 285: { + case 291: { AST::VoidExpression *node = new (pool) AST::VoidExpression(sym(2).Expression); node->voidToken = loc(1); sym(1).Node = node; } break; -#line 2496 "qmljs.g" +#line 2577 "qmljs.g" - case 286: { + case 292: { AST::TypeOfExpression *node = new (pool) AST::TypeOfExpression(sym(2).Expression); node->typeofToken = loc(1); sym(1).Node = node; } break; -#line 2505 "qmljs.g" +#line 2586 "qmljs.g" - case 287: { + case 293: { AST::UnaryPlusExpression *node = new (pool) AST::UnaryPlusExpression(sym(2).Expression); node->plusToken = loc(1); sym(1).Node = node; } break; -#line 2514 "qmljs.g" +#line 2595 "qmljs.g" - case 288: { + case 294: { AST::UnaryMinusExpression *node = new (pool) AST::UnaryMinusExpression(sym(2).Expression); node->minusToken = loc(1); sym(1).Node = node; } break; -#line 2523 "qmljs.g" +#line 2604 "qmljs.g" - case 289: { + case 295: { AST::TildeExpression *node = new (pool) AST::TildeExpression(sym(2).Expression); node->tildeToken = loc(1); sym(1).Node = node; } break; -#line 2532 "qmljs.g" +#line 2613 "qmljs.g" - case 290: { + case 296: { AST::NotExpression *node = new (pool) AST::NotExpression(sym(2).Expression); node->notToken = loc(1); sym(1).Node = node; } break; -#line 2543 "qmljs.g" +#line 2624 "qmljs.g" - case 292: { + case 298: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::Exp, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -#line 2554 "qmljs.g" +#line 2635 "qmljs.g" - case 294: { + case 300: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, sym(2).ival, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -#line 2563 "qmljs.g" +#line 2644 "qmljs.g" - case 295: { + case 301: { sym(1).ival = QSOperator::Mul; } break; -#line 2570 "qmljs.g" +#line 2651 "qmljs.g" - case 296: { + case 302: { sym(1).ival = QSOperator::Div; } break; -#line 2577 "qmljs.g" +#line 2658 "qmljs.g" - case 297: { + case 303: { sym(1).ival = QSOperator::Mod; } break; -#line 2586 "qmljs.g" +#line 2667 "qmljs.g" - case 299: { + case 305: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::Add, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -#line 2595 "qmljs.g" +#line 2676 "qmljs.g" - case 300: { + case 306: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::Sub, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -#line 2606 "qmljs.g" +#line 2687 "qmljs.g" - case 302: { + case 308: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::LShift, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -#line 2615 "qmljs.g" +#line 2696 "qmljs.g" - case 303: { + case 309: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::RShift, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -#line 2624 "qmljs.g" +#line 2705 "qmljs.g" - case 304: { + case 310: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::URShift, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -#line 2636 "qmljs.g" - case 307: Q_FALLTHROUGH(); -#line 2638 "qmljs.g" +#line 2717 "qmljs.g" + case 313: Q_FALLTHROUGH(); +#line 2719 "qmljs.g" - case 308: { + case 314: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, sym(2).ival, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -#line 2647 "qmljs.g" +#line 2728 "qmljs.g" - case 309: { + case 315: { sym(1).ival = QSOperator::Lt; } break; -#line 2653 "qmljs.g" +#line 2734 "qmljs.g" - case 310: { + case 316: { sym(1).ival = QSOperator::Gt; } break; -#line 2659 "qmljs.g" +#line 2740 "qmljs.g" - case 311: { + case 317: { sym(1).ival = QSOperator::Le; } break; -#line 2665 "qmljs.g" +#line 2746 "qmljs.g" - case 312: { + case 318: { sym(1).ival = QSOperator::Ge; } break; -#line 2671 "qmljs.g" +#line 2752 "qmljs.g" - case 313: { + case 319: { sym(1).ival = QSOperator::InstanceOf; } break; -#line 2678 "qmljs.g" +#line 2758 "qmljs.g" - case 314: { - AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::In, sym(3).Expression); - node->operatorToken = loc(2); - sym(1).Node = node; + case 320: { + sym(1).ival = QSOperator::As; } break; -#line 2687 "qmljs.g" - case 315: Q_FALLTHROUGH(); -#line 2689 "qmljs.g" +#line 2765 "qmljs.g" - case 316: { - AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::As, sym(3).Expression); + case 321: { + AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::In, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -#line 2704 "qmljs.g" - case 321: Q_FALLTHROUGH(); -#line 2706 "qmljs.g" +#line 2777 "qmljs.g" + case 324: Q_FALLTHROUGH(); +#line 2779 "qmljs.g" - case 322: { + case 325: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, sym(2).ival, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -#line 2715 "qmljs.g" +#line 2788 "qmljs.g" - case 323: { + case 326: { sym(1).ival = QSOperator::Equal; } break; -#line 2721 "qmljs.g" +#line 2794 "qmljs.g" - case 324: { + case 327: { sym(1).ival = QSOperator::NotEqual; } break; -#line 2727 "qmljs.g" +#line 2800 "qmljs.g" - case 325: { + case 328: { sym(1).ival = QSOperator::StrictEqual; } break; -#line 2733 "qmljs.g" +#line 2806 "qmljs.g" - case 326: { + case 329: { sym(1).ival = QSOperator::StrictNotEqual; } break; -#line 2744 "qmljs.g" - case 329: Q_FALLTHROUGH(); -#line 2746 "qmljs.g" +#line 2817 "qmljs.g" + case 332: Q_FALLTHROUGH(); +#line 2819 "qmljs.g" - case 330: { + case 333: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::BitAnd, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -#line 2759 "qmljs.g" - case 333: Q_FALLTHROUGH(); -#line 2761 "qmljs.g" +#line 2832 "qmljs.g" + case 336: Q_FALLTHROUGH(); +#line 2834 "qmljs.g" - case 334: { + case 337: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::BitXor, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -#line 2773 "qmljs.g" - case 337: Q_FALLTHROUGH(); -#line 2775 "qmljs.g" +#line 2846 "qmljs.g" + case 340: Q_FALLTHROUGH(); +#line 2848 "qmljs.g" - case 338: { + case 341: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::BitOr, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -#line 2787 "qmljs.g" - case 341: Q_FALLTHROUGH(); -#line 2789 "qmljs.g" +#line 2860 "qmljs.g" + case 344: Q_FALLTHROUGH(); +#line 2862 "qmljs.g" - case 342: { + case 345: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::And, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -#line 2801 "qmljs.g" - case 345: Q_FALLTHROUGH(); -#line 2803 "qmljs.g" +#line 2874 "qmljs.g" + case 348: Q_FALLTHROUGH(); +#line 2876 "qmljs.g" - case 346: { + case 349: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::Or, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -#line 2815 "qmljs.g" - case 349: Q_FALLTHROUGH(); -#line 2817 "qmljs.g" +#line 2888 "qmljs.g" + case 352: Q_FALLTHROUGH(); +#line 2890 "qmljs.g" - case 350: { + case 353: { auto *lhs = sym(1).Expression; auto *rhs = sym(3).Expression; @@ -1996,22 +2065,25 @@ case 241: { sym(1).Node = node; } break; -#line 2851 "qmljs.g" - case 353: Q_FALLTHROUGH(); -#line 2853 "qmljs.g" +#line 2924 "qmljs.g" + case 356: Q_FALLTHROUGH(); +#line 2926 "qmljs.g" - case 354: { + case 357: { AST::ConditionalExpression *node = new (pool) AST::ConditionalExpression(sym(1).Expression, sym(3).Expression, sym(5).Expression); node->questionToken = loc(2); node->colonToken = loc(4); sym(1).Node = node; } break; -#line 2872 "qmljs.g" - case 361: Q_FALLTHROUGH(); -#line 2874 "qmljs.g" +#line 2945 "qmljs.g" + case 364: Q_FALLTHROUGH(); +#line 2947 "qmljs.g" - case 362: { + case 365: { + if (sym(1).Expression->containsOptionalChain()) { + syntaxError(loc(1), QStringLiteral("Optional chains are not permitted on the left-hand-side in assignments")); + } // need to convert the LHS to an AssignmentPattern if it was an Array/ObjectLiteral if (AST::Pattern *p = sym(1).Expression->patternCast()) { SourceLocation errorLoc; @@ -2036,208 +2108,211 @@ case 241: { sym(1).Node = node; } break; -#line 2902 "qmljs.g" - case 363: Q_FALLTHROUGH(); -#line 2904 "qmljs.g" +#line 2978 "qmljs.g" + case 366: Q_FALLTHROUGH(); +#line 2980 "qmljs.g" - case 364: { + case 367: { + if (sym(1).Expression->containsOptionalChain()) { + syntaxError(loc(1), QStringLiteral("Optional chains are not permitted on the left-hand-side in assignments")); + } AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, sym(2).ival, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -#line 2913 "qmljs.g" +#line 2992 "qmljs.g" - case 365: { + case 368: { sym(1).ival = QSOperator::InplaceMul; } break; -#line 2920 "qmljs.g" +#line 2999 "qmljs.g" - case 366: { + case 369: { sym(1).ival = QSOperator::InplaceExp; } break; -#line 2927 "qmljs.g" +#line 3006 "qmljs.g" - case 367: { + case 370: { sym(1).ival = QSOperator::InplaceDiv; } break; -#line 2934 "qmljs.g" +#line 3013 "qmljs.g" - case 368: { + case 371: { sym(1).ival = QSOperator::InplaceMod; } break; -#line 2941 "qmljs.g" +#line 3020 "qmljs.g" - case 369: { + case 372: { sym(1).ival = QSOperator::InplaceAdd; } break; -#line 2948 "qmljs.g" +#line 3027 "qmljs.g" - case 370: { + case 373: { sym(1).ival = QSOperator::InplaceSub; } break; -#line 2955 "qmljs.g" +#line 3034 "qmljs.g" - case 371: { + case 374: { sym(1).ival = QSOperator::InplaceLeftShift; } break; -#line 2962 "qmljs.g" +#line 3041 "qmljs.g" - case 372: { + case 375: { sym(1).ival = QSOperator::InplaceRightShift; } break; -#line 2969 "qmljs.g" +#line 3048 "qmljs.g" - case 373: { + case 376: { sym(1).ival = QSOperator::InplaceURightShift; } break; -#line 2976 "qmljs.g" +#line 3055 "qmljs.g" - case 374: { + case 377: { sym(1).ival = QSOperator::InplaceAnd; } break; -#line 2983 "qmljs.g" +#line 3062 "qmljs.g" - case 375: { + case 378: { sym(1).ival = QSOperator::InplaceXor; } break; -#line 2990 "qmljs.g" +#line 3069 "qmljs.g" - case 376: { + case 379: { sym(1).ival = QSOperator::InplaceOr; } break; -#line 3000 "qmljs.g" - case 379: Q_FALLTHROUGH(); -#line 3002 "qmljs.g" +#line 3079 "qmljs.g" + case 382: Q_FALLTHROUGH(); +#line 3081 "qmljs.g" - case 380: { + case 383: { AST::Expression *node = new (pool) AST::Expression(sym(1).Expression, sym(3).Expression); node->commaToken = loc(2); sym(1).Node = node; } break; -#line 3011 "qmljs.g" - case 381: Q_FALLTHROUGH(); -#line 3013 "qmljs.g" +#line 3090 "qmljs.g" + case 384: Q_FALLTHROUGH(); +#line 3092 "qmljs.g" - case 382: { + case 385: { sym(1).Node = nullptr; } break; -#line 3025 "qmljs.g" +#line 3104 "qmljs.g" - case 385: { + case 388: { sym(1).Node = sym(3).Node; } break; -#line 3032 "qmljs.g" - case 386: Q_FALLTHROUGH(); -#line 3034 "qmljs.g" - case 387: Q_FALLTHROUGH(); -#line 3036 "qmljs.g" - case 388: Q_FALLTHROUGH(); -#line 3038 "qmljs.g" +#line 3111 "qmljs.g" case 389: Q_FALLTHROUGH(); -#line 3040 "qmljs.g" +#line 3113 "qmljs.g" case 390: Q_FALLTHROUGH(); -#line 3042 "qmljs.g" +#line 3115 "qmljs.g" case 391: Q_FALLTHROUGH(); -#line 3044 "qmljs.g" +#line 3117 "qmljs.g" case 392: Q_FALLTHROUGH(); -#line 3046 "qmljs.g" +#line 3119 "qmljs.g" case 393: Q_FALLTHROUGH(); -#line 3048 "qmljs.g" +#line 3121 "qmljs.g" case 394: Q_FALLTHROUGH(); -#line 3050 "qmljs.g" +#line 3123 "qmljs.g" case 395: Q_FALLTHROUGH(); -#line 3052 "qmljs.g" +#line 3125 "qmljs.g" case 396: Q_FALLTHROUGH(); -#line 3054 "qmljs.g" +#line 3127 "qmljs.g" case 397: Q_FALLTHROUGH(); -#line 3056 "qmljs.g" +#line 3129 "qmljs.g" + case 398: Q_FALLTHROUGH(); +#line 3131 "qmljs.g" + case 399: Q_FALLTHROUGH(); +#line 3133 "qmljs.g" + case 400: Q_FALLTHROUGH(); +#line 3135 "qmljs.g" - case 398: { + case 401: { sym(1).Node = sym(2).Node; } break; -#line 3078 "qmljs.g" +#line 3157 "qmljs.g" - case 409: { + case 412: { AST::Block *node = new (pool) AST::Block(sym(2).StatementList); node->lbraceToken = loc(1); node->rbraceToken = loc(3); sym(1).Node = node; } break; -#line 3090 "qmljs.g" +#line 3169 "qmljs.g" - case 411: { + case 414: { sym(1).StatementList = sym(1).StatementList->append(sym(2).StatementList); } break; -#line 3097 "qmljs.g" +#line 3176 "qmljs.g" - case 412: { + case 415: { sym(1).StatementList = new (pool) AST::StatementList(sym(1).Statement); } break; -#line 3104 "qmljs.g" +#line 3183 "qmljs.g" - case 413: { + case 416: { sym(1).Node = new (pool) AST::StatementList(sym(3).FunctionDeclaration); } break; -#line 3111 "qmljs.g" +#line 3190 "qmljs.g" - case 414: { + case 417: { sym(1).Node = nullptr; } break; -#line 3118 "qmljs.g" +#line 3197 "qmljs.g" - case 415: { + case 418: { sym(1).Node = sym(1).StatementList->finish(); } break; -#line 3125 "qmljs.g" +#line 3204 "qmljs.g" - case 416: { + case 419: { sym(1).scope = AST::VariableScope::Let; } break; -#line 3131 "qmljs.g" +#line 3210 "qmljs.g" - case 417: { + case 420: { sym(1).scope = AST::VariableScope::Const; } break; -#line 3138 "qmljs.g" +#line 3217 "qmljs.g" - case 418: { + case 421: { sym(1).scope = AST::VariableScope::Var; } break; -#line 3145 "qmljs.g" - case 419: Q_FALLTHROUGH(); -#line 3147 "qmljs.g" - case 420: Q_FALLTHROUGH(); -#line 3149 "qmljs.g" - case 421: Q_FALLTHROUGH(); -#line 3151 "qmljs.g" +#line 3224 "qmljs.g" + case 422: Q_FALLTHROUGH(); +#line 3226 "qmljs.g" + case 423: Q_FALLTHROUGH(); +#line 3228 "qmljs.g" + case 424: Q_FALLTHROUGH(); +#line 3230 "qmljs.g" - case 422: { + case 425: { AST::VariableDeclarationList *declarations = sym(2).VariableDeclarationList->finish(sym(1).scope); for (auto it = declarations; it; it = it->next) { if (it->declaration && it->declaration->typeAnnotation) { @@ -2250,41 +2325,41 @@ case 241: { sym(1).Node = node; } break; -#line 3169 "qmljs.g" - case 424: Q_FALLTHROUGH(); -#line 3171 "qmljs.g" - case 425: Q_FALLTHROUGH(); -#line 3173 "qmljs.g" - case 426: Q_FALLTHROUGH(); -#line 3175 "qmljs.g" +#line 3248 "qmljs.g" + case 427: Q_FALLTHROUGH(); +#line 3250 "qmljs.g" + case 428: Q_FALLTHROUGH(); +#line 3252 "qmljs.g" + case 429: Q_FALLTHROUGH(); +#line 3254 "qmljs.g" - case 427: { + case 430: { sym(1).Node = new (pool) AST::VariableDeclarationList(sym(1).PatternElement); } break; -#line 3182 "qmljs.g" - case 428: Q_FALLTHROUGH(); -#line 3184 "qmljs.g" - case 429: Q_FALLTHROUGH(); -#line 3186 "qmljs.g" - case 430: Q_FALLTHROUGH(); -#line 3188 "qmljs.g" +#line 3261 "qmljs.g" + case 431: Q_FALLTHROUGH(); +#line 3263 "qmljs.g" + case 432: Q_FALLTHROUGH(); +#line 3265 "qmljs.g" + case 433: Q_FALLTHROUGH(); +#line 3267 "qmljs.g" - case 431: { + case 434: { AST::VariableDeclarationList *node = new (pool) AST::VariableDeclarationList(sym(1).VariableDeclarationList, sym(3).PatternElement); node->commaToken = loc(2); sym(1).Node = node; } break; -#line 3197 "qmljs.g" - case 432: Q_FALLTHROUGH(); -#line 3199 "qmljs.g" - case 433: Q_FALLTHROUGH(); -#line 3201 "qmljs.g" - case 434: Q_FALLTHROUGH(); -#line 3203 "qmljs.g" +#line 3276 "qmljs.g" + case 435: Q_FALLTHROUGH(); +#line 3278 "qmljs.g" + case 436: Q_FALLTHROUGH(); +#line 3280 "qmljs.g" + case 437: Q_FALLTHROUGH(); +#line 3282 "qmljs.g" - case 435: { + case 438: { auto *node = new (pool) AST::PatternElement(stringRef(1), sym(2).TypeAnnotation, sym(3).Expression); node->identifierToken = loc(1); sym(1).Node = node; @@ -2295,23 +2370,23 @@ case 241: { c->name = stringRef(1); } break; -#line 3217 "qmljs.g" - case 436: Q_FALLTHROUGH(); -#line 3219 "qmljs.g" - case 437: Q_FALLTHROUGH(); -#line 3221 "qmljs.g" - case 438: Q_FALLTHROUGH(); -#line 3223 "qmljs.g" +#line 3296 "qmljs.g" + case 439: Q_FALLTHROUGH(); +#line 3298 "qmljs.g" + case 440: Q_FALLTHROUGH(); +#line 3300 "qmljs.g" + case 441: Q_FALLTHROUGH(); +#line 3302 "qmljs.g" - case 439: { + case 442: { auto *node = new (pool) AST::PatternElement(sym(1).Pattern, sym(2).Expression); node->identifierToken = loc(1); sym(1).Node = node; } break; -#line 3232 "qmljs.g" +#line 3311 "qmljs.g" - case 440: { + case 443: { auto *node = new (pool) AST::ObjectPattern(sym(2).PatternPropertyList); node->lbraceToken = loc(1); node->rbraceToken = loc(3); @@ -2319,9 +2394,9 @@ case 241: { sym(1).Node = node; } break; -#line 3243 "qmljs.g" +#line 3322 "qmljs.g" - case 441: { + case 444: { auto *node = new (pool) AST::ArrayPattern(sym(2).PatternElementList); node->lbracketToken = loc(1); node->rbracketToken = loc(3); @@ -2329,23 +2404,23 @@ case 241: { sym(1).Node = node; } break; -#line 3254 "qmljs.g" +#line 3333 "qmljs.g" - case 442: { + case 445: { sym(1).Node = nullptr; } break; -#line 3261 "qmljs.g" - case 443: -#line 3263 "qmljs.g" +#line 3340 "qmljs.g" + case 446: +#line 3342 "qmljs.g" - case 444: { + case 447: { sym(1).Node = sym(1).PatternPropertyList->finish(); } break; -#line 3270 "qmljs.g" +#line 3349 "qmljs.g" - case 445: { + case 448: { if (sym(1).Elision || sym(2).Node) { auto *l = new (pool) AST::PatternElementList(sym(1).Elision, sym(2).PatternElement); sym(1).Node = l->finish(); @@ -2354,15 +2429,15 @@ case 241: { } } break; -#line 3282 "qmljs.g" +#line 3361 "qmljs.g" - case 446: { + case 449: { sym(1).Node = sym(1).PatternElementList->finish(); } break; -#line 3289 "qmljs.g" +#line 3368 "qmljs.g" - case 447: { + case 450: { if (sym(3).Elision || sym(4).Node) { auto *l = new (pool) AST::PatternElementList(sym(3).Elision, sym(4).PatternElement); l = sym(1).PatternElementList->append(l); @@ -2371,33 +2446,33 @@ case 241: { sym(1).Node = sym(1).PatternElementList->finish(); } break; -#line 3301 "qmljs.g" +#line 3380 "qmljs.g" - case 448: { + case 451: { sym(1).Node = new (pool) AST::PatternPropertyList(sym(1).PatternProperty); } break; -#line 3308 "qmljs.g" +#line 3387 "qmljs.g" - case 449: { + case 452: { sym(1).Node = new (pool) AST::PatternPropertyList(sym(1).PatternPropertyList, sym(3).PatternProperty); } break; -#line 3317 "qmljs.g" +#line 3396 "qmljs.g" - case 451: { + case 454: { sym(1).PatternElementList = sym(1).PatternElementList->append(sym(3).PatternElementList); } break; -#line 3324 "qmljs.g" +#line 3403 "qmljs.g" - case 452: { + case 455: { sym(1).Node = new (pool) AST::PatternElementList(sym(1).Elision, sym(2).PatternElement); } break; -#line 3332 "qmljs.g" +#line 3411 "qmljs.g" - case 453: { + case 456: { AST::StringLiteralPropertyName *name = new (pool) AST::StringLiteralPropertyName(stringRef(1)); name->propertyNameToken = loc(1); // if initializer is an anonymous function expression, we need to assign identifierref as it's name @@ -2408,23 +2483,23 @@ case 241: { sym(1).Node = new (pool) AST::PatternProperty(name, stringRef(1), sym(2).Expression); } break; -#line 3346 "qmljs.g" +#line 3425 "qmljs.g" - case 454: { + case 457: { AST::PatternProperty *node = new (pool) AST::PatternProperty(sym(1).PropertyName, stringRef(3), sym(4).Expression); sym(1).Node = node; } break; -#line 3354 "qmljs.g" +#line 3433 "qmljs.g" - case 455: { + case 458: { AST::PatternProperty *node = new (pool) AST::PatternProperty(sym(1).PropertyName, sym(3).Pattern, sym(4).Expression); sym(1).Node = node; } break; -#line 3362 "qmljs.g" +#line 3441 "qmljs.g" - case 456: { + case 459: { AST::PatternElement *node = new (pool) AST::PatternElement(stringRef(1), sym(2).TypeAnnotation, sym(3).Expression); node->identifierToken = loc(1); // if initializer is an anonymous function expression, we need to assign identifierref as it's name @@ -2435,45 +2510,45 @@ case 241: { sym(1).Node = node; } break; -#line 3376 "qmljs.g" +#line 3455 "qmljs.g" - case 457: { + case 460: { AST::PatternElement *node = new (pool) AST::PatternElement(sym(1).Pattern, sym(2).Expression); sym(1).Node = node; } break; -#line 3384 "qmljs.g" +#line 3463 "qmljs.g" - case 458: { + case 461: { AST::PatternElement *node = new (pool) AST::PatternElement(stringRef(2), /*type annotation*/nullptr, nullptr, AST::PatternElement::RestElement); node->identifierToken = loc(2); sym(1).Node = node; } break; -#line 3393 "qmljs.g" +#line 3472 "qmljs.g" - case 459: { + case 462: { AST::PatternElement *node = new (pool) AST::PatternElement(sym(2).Pattern, nullptr, AST::PatternElement::RestElement); sym(1).Node = node; } break; -#line 3401 "qmljs.g" +#line 3480 "qmljs.g" - case 460: { + case 463: { sym(1).Node = nullptr; } break; -#line 3411 "qmljs.g" +#line 3490 "qmljs.g" - case 462: { + case 465: { AST::EmptyStatement *node = new (pool) AST::EmptyStatement(); node->semicolonToken = loc(1); sym(1).Node = node; } break; -#line 3426 "qmljs.g" +#line 3505 "qmljs.g" - case 463: { + case 466: { int token = lookaheadToken(lexer); if (token == T_LBRACE) pushToken(T_FORCE_BLOCK); @@ -2481,17 +2556,17 @@ case 241: { pushToken(T_FORCE_DECLARATION); } break; -#line 3437 "qmljs.g" +#line 3516 "qmljs.g" - case 464: { + case 467: { AST::ExpressionStatement *node = new (pool) AST::ExpressionStatement(sym(1).Expression); node->semicolonToken = loc(2); sym(1).Node = node; } break; -#line 3446 "qmljs.g" +#line 3525 "qmljs.g" - case 465: { + case 468: { AST::IfStatement *node = new (pool) AST::IfStatement(sym(3).Expression, sym(5).Statement, sym(7).Statement); node->ifToken = loc(1); node->lparenToken = loc(2); @@ -2500,9 +2575,9 @@ case 241: { sym(1).Node = node; } break; -#line 3458 "qmljs.g" +#line 3537 "qmljs.g" - case 466: { + case 469: { AST::IfStatement *node = new (pool) AST::IfStatement(sym(3).Expression, sym(5).Statement); node->ifToken = loc(1); node->lparenToken = loc(2); @@ -2510,9 +2585,9 @@ case 241: { sym(1).Node = node; } break; -#line 3471 "qmljs.g" +#line 3550 "qmljs.g" - case 468: { + case 471: { AST::DoWhileStatement *node = new (pool) AST::DoWhileStatement(sym(2).Statement, sym(5).Expression); node->doToken = loc(1); node->whileToken = loc(3); @@ -2522,9 +2597,9 @@ case 241: { sym(1).Node = node; } break; -#line 3484 "qmljs.g" +#line 3563 "qmljs.g" - case 469: { + case 472: { AST::WhileStatement *node = new (pool) AST::WhileStatement(sym(3).Expression, sym(5).Statement); node->whileToken = loc(1); node->lparenToken = loc(2); @@ -2532,9 +2607,9 @@ case 241: { sym(1).Node = node; } break; -#line 3495 "qmljs.g" +#line 3574 "qmljs.g" - case 470: { + case 473: { AST::ForStatement *node = new (pool) AST::ForStatement(sym(3).Expression, sym(5).Expression, sym(7).Expression, sym(9).Statement); node->forToken = loc(1); node->lparenToken = loc(2); @@ -2544,11 +2619,11 @@ case 241: { sym(1).Node = node; } break; -#line 3508 "qmljs.g" - case 471: Q_FALLTHROUGH(); -#line 3510 "qmljs.g" +#line 3587 "qmljs.g" + case 474: Q_FALLTHROUGH(); +#line 3589 "qmljs.g" - case 472: { + case 475: { // ### get rid of the static_cast! AST::ForStatement *node = new (pool) AST::ForStatement( static_cast<AST::VariableStatement *>(sym(3).Node)->declarations, sym(5).Expression, @@ -2561,21 +2636,21 @@ case 241: { sym(1).Node = node; } break; -#line 3526 "qmljs.g" +#line 3605 "qmljs.g" - case 473: { + case 476: { sym(1).forEachType = AST::ForEachType::In; } break; -#line 3533 "qmljs.g" +#line 3612 "qmljs.g" - case 474: { + case 477: { sym(1).forEachType = AST::ForEachType::Of; } break; -#line 3540 "qmljs.g" +#line 3619 "qmljs.g" - case 475: { + case 478: { // need to convert the LHS to an AssignmentPattern if it was an Array/ObjectLiteral if (AST::Pattern *p = sym(3).Expression->patternCast()) { SourceLocation errorLoc; @@ -2594,9 +2669,9 @@ case 241: { sym(1).Node = node; } break; -#line 3562 "qmljs.g" +#line 3641 "qmljs.g" - case 476: { + case 479: { AST::ForEachStatement *node = new (pool) AST::ForEachStatement(sym(3).PatternElement, sym(5).Expression, sym(7).Statement); node->forToken = loc(1); node->lparenToken = loc(2); @@ -2606,11 +2681,11 @@ case 241: { sym(1).Node = node; } break; -#line 3575 "qmljs.g" - case 477: Q_FALLTHROUGH(); -#line 3577 "qmljs.g" +#line 3654 "qmljs.g" + case 480: Q_FALLTHROUGH(); +#line 3656 "qmljs.g" - case 478: { + case 481: { if (auto typeAnnotation = sym(3).TypeAnnotation) { syntaxError(typeAnnotation->firstSourceLocation(), "Type annotations are not permitted in variable declarations"); return false; @@ -2622,29 +2697,29 @@ case 241: { sym(1).Node = node; } break; -#line 3592 "qmljs.g" - case 479: Q_FALLTHROUGH(); -#line 3594 "qmljs.g" +#line 3671 "qmljs.g" + case 482: Q_FALLTHROUGH(); +#line 3673 "qmljs.g" - case 480: { + case 483: { auto *node = new (pool) AST::PatternElement(sym(2).Pattern, nullptr); node->scope = sym(1).scope; node->isForDeclaration = true; sym(1).Node = node; } break; -#line 3604 "qmljs.g" +#line 3683 "qmljs.g" - case 481: { + case 484: { AST::ContinueStatement *node = new (pool) AST::ContinueStatement(); node->continueToken = loc(1); node->semicolonToken = loc(2); sym(1).Node = node; } break; -#line 3614 "qmljs.g" +#line 3693 "qmljs.g" - case 482: { + case 485: { AST::ContinueStatement *node = new (pool) AST::ContinueStatement(stringRef(2)); node->continueToken = loc(1); node->identifierToken = loc(2); @@ -2652,18 +2727,18 @@ case 241: { sym(1).Node = node; } break; -#line 3625 "qmljs.g" +#line 3704 "qmljs.g" - case 483: { + case 486: { AST::BreakStatement *node = new (pool) AST::BreakStatement(QStringView()); node->breakToken = loc(1); node->semicolonToken = loc(2); sym(1).Node = node; } break; -#line 3635 "qmljs.g" +#line 3714 "qmljs.g" - case 484: { + case 487: { AST::BreakStatement *node = new (pool) AST::BreakStatement(stringRef(2)); node->breakToken = loc(1); node->identifierToken = loc(2); @@ -2671,9 +2746,9 @@ case 241: { sym(1).Node = node; } break; -#line 3646 "qmljs.g" +#line 3725 "qmljs.g" - case 485: { + case 488: { if (!functionNestingLevel) { syntaxError(loc(1), "Return statement not allowed outside of Function declaration."); return false; @@ -2684,9 +2759,9 @@ case 241: { sym(1).Node = node; } break; -#line 3660 "qmljs.g" +#line 3739 "qmljs.g" - case 486: { + case 489: { AST::WithStatement *node = new (pool) AST::WithStatement(sym(3).Expression, sym(5).Statement); node->withToken = loc(1); node->lparenToken = loc(2); @@ -2694,9 +2769,9 @@ case 241: { sym(1).Node = node; } break; -#line 3671 "qmljs.g" +#line 3750 "qmljs.g" - case 487: { + case 490: { AST::SwitchStatement *node = new (pool) AST::SwitchStatement(sym(3).Expression, sym(5).CaseBlock); node->switchToken = loc(1); node->lparenToken = loc(2); @@ -2704,118 +2779,118 @@ case 241: { sym(1).Node = node; } break; -#line 3682 "qmljs.g" +#line 3761 "qmljs.g" - case 488: { + case 491: { AST::CaseBlock *node = new (pool) AST::CaseBlock(sym(2).CaseClauses); node->lbraceToken = loc(1); node->rbraceToken = loc(3); sym(1).Node = node; } break; -#line 3692 "qmljs.g" +#line 3771 "qmljs.g" - case 489: { + case 492: { AST::CaseBlock *node = new (pool) AST::CaseBlock(sym(2).CaseClauses, sym(3).DefaultClause, sym(4).CaseClauses); node->lbraceToken = loc(1); node->rbraceToken = loc(5); sym(1).Node = node; } break; -#line 3702 "qmljs.g" +#line 3781 "qmljs.g" - case 490: { + case 493: { sym(1).Node = new (pool) AST::CaseClauses(sym(1).CaseClause); } break; -#line 3709 "qmljs.g" +#line 3788 "qmljs.g" - case 491: { + case 494: { sym(1).Node = new (pool) AST::CaseClauses(sym(1).CaseClauses, sym(2).CaseClause); } break; -#line 3716 "qmljs.g" +#line 3795 "qmljs.g" - case 492: { + case 495: { sym(1).Node = nullptr; } break; -#line 3723 "qmljs.g" +#line 3802 "qmljs.g" - case 493: { + case 496: { sym(1).Node = sym(1).CaseClauses->finish(); } break; -#line 3730 "qmljs.g" +#line 3809 "qmljs.g" - case 494: { + case 497: { AST::CaseClause *node = new (pool) AST::CaseClause(sym(2).Expression, sym(4).StatementList); node->caseToken = loc(1); node->colonToken = loc(3); sym(1).Node = node; } break; -#line 3740 "qmljs.g" +#line 3819 "qmljs.g" - case 495: { + case 498: { AST::DefaultClause *node = new (pool) AST::DefaultClause(sym(3).StatementList); node->defaultToken = loc(1); node->colonToken = loc(2); sym(1).Node = node; } break; -#line 3750 "qmljs.g" +#line 3829 "qmljs.g" - case 496: { + case 499: { AST::LabelledStatement *node = new (pool) AST::LabelledStatement(stringRef(1), sym(3).Statement); node->identifierToken = loc(1); node->colonToken = loc(2); sym(1).Node = node; } break; -#line 3762 "qmljs.g" +#line 3841 "qmljs.g" - case 498: { + case 501: { syntaxError(loc(3), "FunctionDeclarations are not allowed after a label."); return false; } break; -#line 3770 "qmljs.g" +#line 3849 "qmljs.g" - case 499: { + case 502: { AST::ThrowStatement *node = new (pool) AST::ThrowStatement(sym(2).Expression); node->throwToken = loc(1); node->semicolonToken = loc(3); sym(1).Node = node; } break; -#line 3780 "qmljs.g" +#line 3859 "qmljs.g" - case 500: { + case 503: { AST::TryStatement *node = new (pool) AST::TryStatement(sym(2).Statement, sym(3).Catch); node->tryToken = loc(1); sym(1).Node = node; } break; -#line 3789 "qmljs.g" +#line 3868 "qmljs.g" - case 501: { + case 504: { AST::TryStatement *node = new (pool) AST::TryStatement(sym(2).Statement, sym(3).Finally); node->tryToken = loc(1); sym(1).Node = node; } break; -#line 3798 "qmljs.g" +#line 3877 "qmljs.g" - case 502: { + case 505: { AST::TryStatement *node = new (pool) AST::TryStatement(sym(2).Statement, sym(3).Catch, sym(4).Finally); node->tryToken = loc(1); sym(1).Node = node; } break; -#line 3807 "qmljs.g" +#line 3886 "qmljs.g" - case 503: { + case 506: { AST::Catch *node = new (pool) AST::Catch(sym(3).PatternElement, sym(5).Block); node->catchToken = loc(1); node->lparenToken = loc(2); @@ -2824,43 +2899,43 @@ case 241: { sym(1).Node = node; } break; -#line 3819 "qmljs.g" +#line 3898 "qmljs.g" - case 504: { + case 507: { AST::Finally *node = new (pool) AST::Finally(sym(2).Block); node->finallyToken = loc(1); sym(1).Node = node; } break; -#line 3828 "qmljs.g" +#line 3907 "qmljs.g" - case 505: { + case 508: { AST::PatternElement *node = new (pool) AST::PatternElement(stringRef(1)); node->identifierToken = loc(1); node->scope = AST::VariableScope::Let; sym(1).Node = node; } break; -#line 3838 "qmljs.g" +#line 3917 "qmljs.g" - case 506: { + case 509: { AST::PatternElement *node = new (pool) AST::PatternElement(sym(1).Pattern); node->scope = AST::VariableScope::Let; sym(1).Node = node; } break; -#line 3847 "qmljs.g" +#line 3926 "qmljs.g" - case 507: { + case 510: { AST::DebuggerStatement *node = new (pool) AST::DebuggerStatement(); node->debuggerToken = loc(1); node->semicolonToken = loc(2); sym(1).Node = node; } break; -#line 3864 "qmljs.g" +#line 3943 "qmljs.g" - case 509: { + case 512: { if (!ensureNoFunctionTypeAnnotations(sym(6).TypeAnnotation, sym(4).FormalParameterList)) return false; AST::FunctionDeclaration *node = new (pool) AST::FunctionDeclaration(stringRef(2), sym(4).FormalParameterList, sym(8).StatementList, @@ -2874,9 +2949,9 @@ case 241: { sym(1).Node = node; } break; -#line 3881 "qmljs.g" +#line 3960 "qmljs.g" - case 510: { + case 513: { AST::FunctionDeclaration *node = new (pool) AST::FunctionDeclaration(stringRef(2), sym(4).FormalParameterList, sym(8).StatementList, sym(6).TypeAnnotation); node->functionToken = loc(1); @@ -2888,9 +2963,9 @@ case 241: { sym(1).Node = node; } break; -#line 3897 "qmljs.g" +#line 3976 "qmljs.g" - case 512: { + case 515: { if (!ensureNoFunctionTypeAnnotations(sym(5).TypeAnnotation, sym(3).FormalParameterList)) return false; AST::FunctionDeclaration *node = new (pool) AST::FunctionDeclaration(QStringView(), sym(3).FormalParameterList, sym(7).StatementList, @@ -2903,9 +2978,9 @@ case 241: { sym(1).Node = node; } break; -#line 3913 "qmljs.g" +#line 3992 "qmljs.g" - case 513: { + case 516: { if (!ensureNoFunctionTypeAnnotations(sym(6).TypeAnnotation, sym(4).FormalParameterList)) return false; AST::FunctionExpression *node = new (pool) AST::FunctionExpression(stringRef(2), sym(4).FormalParameterList, sym(8).StatementList, @@ -2920,9 +2995,9 @@ case 241: { sym(1).Node = node; } break; -#line 3931 "qmljs.g" +#line 4010 "qmljs.g" - case 514: { + case 517: { if (!ensureNoFunctionTypeAnnotations(sym(5).TypeAnnotation, sym(3).FormalParameterList)) return false; AST::FunctionExpression *node = new (pool) AST::FunctionExpression(QStringView(), sym(3).FormalParameterList, sym(7).StatementList, @@ -2935,102 +3010,101 @@ case 241: { sym(1).Node = node; } break; -#line 3949 "qmljs.g" +#line 4028 "qmljs.g" - case 516: { + case 519: { sym(1).Node = nullptr; } break; -#line 3956 "qmljs.g" +#line 4035 "qmljs.g" - case 517: { + case 520: { AST::FormalParameterList *node = (new (pool) AST::FormalParameterList(nullptr, sym(1).PatternElement))->finish(pool); sym(1).Node = node; } break; -#line 3964 "qmljs.g" - case 518: -#line 3966 "qmljs.g" +#line 4043 "qmljs.g" + case 521: +#line 4045 "qmljs.g" - case 519: { + case 522: { sym(1).Node = sym(1).FormalParameterList->finish(pool); } break; -#line 3973 "qmljs.g" +#line 4052 "qmljs.g" - case 520: { + case 523: { AST::FormalParameterList *node = (new (pool) AST::FormalParameterList(sym(1).FormalParameterList, sym(3).PatternElement))->finish(pool); sym(1).Node = node; } break; -#line 3981 "qmljs.g" +#line 4060 "qmljs.g" - case 521: { + case 524: { AST::FormalParameterList *node = new (pool) AST::FormalParameterList(nullptr, sym(1).PatternElement); sym(1).Node = node; } break; -#line 3990 "qmljs.g" +#line 4069 "qmljs.g" - case 522: { + case 525: { AST::FormalParameterList *node = new (pool) AST::FormalParameterList(sym(1).FormalParameterList, sym(3).PatternElement); sym(1).Node = node; } break; -#line 4000 "qmljs.g" +#line 4079 "qmljs.g" - case 524: { + case 527: { ++functionNestingLevel; } break; -#line 4007 "qmljs.g" +#line 4086 "qmljs.g" - case 525: { + case 528: { --functionNestingLevel; } break; -#line 4017 "qmljs.g" - case 527: Q_FALLTHROUGH(); -#line 4019 "qmljs.g" +#line 4096 "qmljs.g" + case 530: Q_FALLTHROUGH(); +#line 4098 "qmljs.g" - case 528: { + case 531: { AST::ReturnStatement *ret = new (pool) AST::ReturnStatement(sym(4).Expression); - ret->returnToken = sym(4).Node->firstSourceLocation().zeroLength(); - ret->semicolonToken = sym(4).Node->lastSourceLocation().zeroLengthEnd(driver->code()); + ret->returnToken = sym(4).Node->firstSourceLocation().startZeroLengthLocation(); + ret->semicolonToken = sym(4).Node->lastSourceLocation().endZeroLengthLocation(driver->code()); AST::StatementList *statements = (new (pool) AST::StatementList(ret))->finish(); - AST::FunctionExpression *f = new (pool) - AST::FunctionExpression(QStringView(), sym(1).FormalParameterList, statements); + AST::FunctionExpression *f = new (pool) AST::FunctionExpression(QStringView(), sym(1).FormalParameterList, statements); f->isArrowFunction = true; - f->functionToken = sym(1).Node ? sym(1).Node->firstSourceLocation().zeroLength() : loc(1).zeroLength(); - f->lbraceToken = sym(4).Node->firstSourceLocation().zeroLength(); - f->rbraceToken = sym(4).Node->lastSourceLocation().zeroLengthEnd(driver->code()); + f->functionToken = sym(1).Node ? sym(1).Node->firstSourceLocation().startZeroLengthLocation() : loc(1).startZeroLengthLocation(); + f->lbraceToken = sym(4).Node->firstSourceLocation().startZeroLengthLocation(); + f->rbraceToken = sym(4).Node->lastSourceLocation().endZeroLengthLocation(driver->code()); sym(1).Node = f; } break; -#line 4036 "qmljs.g" - case 529: Q_FALLTHROUGH(); -#line 4038 "qmljs.g" +#line 4114 "qmljs.g" + case 532: Q_FALLTHROUGH(); +#line 4116 "qmljs.g" - case 530: { + case 533: { AST::FunctionExpression *f = new (pool) AST::FunctionExpression(QStringView(), sym(1).FormalParameterList, sym(6).StatementList); f->isArrowFunction = true; - f->functionToken = sym(1).Node ? sym(1).Node->firstSourceLocation().zeroLength() : loc(1).zeroLength(); - f->lbraceToken = loc(5); + f->functionToken = sym(1).Node ? sym(1).Node->firstSourceLocation().startZeroLengthLocation() : loc(1).startZeroLengthLocation(); + f->lbraceToken = loc(6); f->rbraceToken = loc(7); sym(1).Node = f; } break; -#line 4050 "qmljs.g" +#line 4128 "qmljs.g" - case 531: { + case 534: { AST::PatternElement *e = new (pool) AST::PatternElement(stringRef(1), /*type annotation*/nullptr, nullptr, AST::PatternElement::Binding); e->identifierToken = loc(1); sym(1).FormalParameterList = (new (pool) AST::FormalParameterList(nullptr, e))->finish(pool); } break; -#line 4061 "qmljs.g" +#line 4139 "qmljs.g" - case 532: { + case 535: { if (coverExpressionType != CE_FormalParameterList) { AST::NestedExpression *ne = static_cast<AST::NestedExpression *>(sym(1).Node); AST::FormalParameterList *list = ne->expression->reparseAsFormalParameterList(pool); @@ -3042,16 +3116,16 @@ case 241: { } } break; -#line 4079 "qmljs.g" +#line 4157 "qmljs.g" - case 533: { + case 536: { if (lookaheadToken(lexer) == T_LBRACE) pushToken(T_FORCE_BLOCK); } break; -#line 4087 "qmljs.g" +#line 4165 "qmljs.g" - case 534: { + case 537: { if (!ensureNoFunctionTypeAnnotations(sym(5).TypeAnnotation, sym(3).FormalParameterList)) return false; AST::FunctionExpression *f = new (pool) AST::FunctionExpression(stringRef(1), sym(3).FormalParameterList, sym(7).StatementList); @@ -3065,9 +3139,9 @@ case 241: { sym(1).Node = node; } break; -#line 4104 "qmljs.g" +#line 4182 "qmljs.g" - case 535: { + case 538: { if (!ensureNoFunctionTypeAnnotations(sym(6).TypeAnnotation, sym(4).FormalParameterList)) return false; AST::FunctionExpression *f = new (pool) AST::FunctionExpression(stringRef(2), sym(4).FormalParameterList, sym(8).StatementList); @@ -3082,9 +3156,9 @@ case 241: { sym(1).Node = node; } break; -#line 4123 "qmljs.g" +#line 4201 "qmljs.g" - case 536: { + case 539: { if (!ensureNoFunctionTypeAnnotations(sym(5).TypeAnnotation, /*formals*/nullptr)) return false; AST::FunctionExpression *f = new (pool) AST::FunctionExpression(stringRef(2), nullptr, sym(7).StatementList); @@ -3098,9 +3172,9 @@ case 241: { sym(1).Node = node; } break; -#line 4140 "qmljs.g" +#line 4218 "qmljs.g" - case 537: { + case 540: { if (!ensureNoFunctionTypeAnnotations(sym(6).TypeAnnotation, sym(4).FormalParameterList)) return false; AST::FunctionExpression *f = new (pool) AST::FunctionExpression(stringRef(2), sym(4).FormalParameterList, sym(8).StatementList); @@ -3114,29 +3188,29 @@ case 241: { sym(1).Node = node; } break; -#line 4158 "qmljs.g" +#line 4236 "qmljs.g" - case 538: { + case 541: { AST::FormalParameterList *node = (new (pool) AST::FormalParameterList(nullptr, sym(1).PatternElement))->finish(pool); sym(1).Node = node; } break; -#line 4166 "qmljs.g" +#line 4244 "qmljs.g" - case 539: { + case 542: { lexer->enterGeneratorBody(); } break; -#line 4173 "qmljs.g" +#line 4251 "qmljs.g" - case 540: { + case 543: { --functionNestingLevel; lexer->leaveGeneratorBody(); } break; -#line 4183 "qmljs.g" +#line 4261 "qmljs.g" - case 542: { + case 545: { AST::FunctionDeclaration *node = new (pool) AST::FunctionDeclaration(stringRef(2), sym(4).FormalParameterList, sym(7).StatementList); node->functionToken = loc(1); node->identifierToken = loc(2); @@ -3148,9 +3222,9 @@ case 241: { sym(1).Node = node; } break; -#line 4199 "qmljs.g" +#line 4277 "qmljs.g" - case 544: { + case 547: { AST::FunctionDeclaration *node = new (pool) AST::FunctionDeclaration(QStringView(), sym(3).FormalParameterList, sym(6).StatementList); node->functionToken = loc(1); node->lparenToken = loc(2); @@ -3161,9 +3235,9 @@ case 241: { sym(1).Node = node; } break; -#line 4213 "qmljs.g" +#line 4291 "qmljs.g" - case 545: { + case 548: { AST::FunctionExpression *node = new (pool) AST::FunctionExpression(stringRef(2), sym(4).FormalParameterList, sym(7).StatementList); node->functionToken = loc(1); if (!stringRef(2).isNull()) @@ -3176,9 +3250,9 @@ case 241: { sym(1).Node = node; } break; -#line 4229 "qmljs.g" +#line 4307 "qmljs.g" - case 546: { + case 549: { AST::FunctionExpression *node = new (pool) AST::FunctionExpression(QStringView(), sym(3).FormalParameterList, sym(6).StatementList); node->functionToken = loc(1); node->lparenToken = loc(2); @@ -3189,40 +3263,40 @@ case 241: { sym(1).Node = node; } break; -#line 4245 "qmljs.g" - case 548: Q_FALLTHROUGH(); -#line 4247 "qmljs.g" +#line 4323 "qmljs.g" + case 551: Q_FALLTHROUGH(); +#line 4325 "qmljs.g" - case 549: { + case 552: { AST::YieldExpression *node = new (pool) AST::YieldExpression(); node->yieldToken = loc(1); sym(1).Node = node; } break; -#line 4256 "qmljs.g" - case 550: Q_FALLTHROUGH(); -#line 4258 "qmljs.g" +#line 4334 "qmljs.g" + case 553: Q_FALLTHROUGH(); +#line 4336 "qmljs.g" - case 551: { + case 554: { AST::YieldExpression *node = new (pool) AST::YieldExpression(sym(3).Expression); node->yieldToken = loc(1); node->isYieldStar = true; sym(1).Node = node; } break; -#line 4268 "qmljs.g" - case 552: Q_FALLTHROUGH(); -#line 4270 "qmljs.g" +#line 4346 "qmljs.g" + case 555: Q_FALLTHROUGH(); +#line 4348 "qmljs.g" - case 553: { + case 556: { AST::YieldExpression *node = new (pool) AST::YieldExpression(sym(2).Expression); node->yieldToken = loc(1); sym(1).Node = node; } break; -#line 4280 "qmljs.g" +#line 4358 "qmljs.g" - case 554: { + case 557: { AST::ClassDeclaration *node = new (pool) AST::ClassDeclaration(stringRef(2), sym(3).Expression, sym(5).ClassElementList); node->classToken = loc(1); node->identifierToken = loc(2); @@ -3231,9 +3305,9 @@ case 241: { sym(1).Node = node; } break; -#line 4292 "qmljs.g" +#line 4370 "qmljs.g" - case 555: { + case 558: { AST::ClassExpression *node = new (pool) AST::ClassExpression(stringRef(2), sym(3).Expression, sym(5).ClassElementList); node->classToken = loc(1); node->identifierToken = loc(2); @@ -3242,9 +3316,9 @@ case 241: { sym(1).Node = node; } break; -#line 4304 "qmljs.g" +#line 4382 "qmljs.g" - case 556: { + case 559: { AST::ClassDeclaration *node = new (pool) AST::ClassDeclaration(QStringView(), sym(2).Expression, sym(4).ClassElementList); node->classToken = loc(1); node->lbraceToken = loc(3); @@ -3252,9 +3326,9 @@ case 241: { sym(1).Node = node; } break; -#line 4315 "qmljs.g" +#line 4393 "qmljs.g" - case 557: { + case 560: { AST::ClassExpression *node = new (pool) AST::ClassExpression(QStringView(), sym(2).Expression, sym(4).ClassElementList); node->classToken = loc(1); node->lbraceToken = loc(3); @@ -3262,48 +3336,48 @@ case 241: { sym(1).Node = node; } break; -#line 4328 "qmljs.g" +#line 4406 "qmljs.g" - case 559: { + case 562: { lexer->setStaticIsKeyword(true); } break; -#line 4335 "qmljs.g" - case 560: -#line 4337 "qmljs.g" +#line 4413 "qmljs.g" + case 563: +#line 4415 "qmljs.g" - case 561: { + case 564: { lexer->setStaticIsKeyword(false); } break; -#line 4344 "qmljs.g" +#line 4422 "qmljs.g" - case 562: { + case 565: { sym(1).Node = nullptr; } break; -#line 4351 "qmljs.g" +#line 4429 "qmljs.g" - case 563: { + case 566: { sym(1).Node = sym(2).Node; } break; -#line 4358 "qmljs.g" +#line 4436 "qmljs.g" - case 564: { + case 567: { sym(1).Node = nullptr; } break; -#line 4365 "qmljs.g" +#line 4443 "qmljs.g" - case 565: { + case 568: { if (sym(1).Node) sym(1).Node = sym(1).ClassElementList->finish(); } break; -#line 4375 "qmljs.g" +#line 4453 "qmljs.g" - case 567: { + case 570: { if (sym(1).Node) { if (sym(2).Node) sym(1).ClassElementList = sym(1).ClassElementList->append(sym(2).ClassElementList); @@ -3312,246 +3386,246 @@ case 241: { } } break; -#line 4387 "qmljs.g" +#line 4465 "qmljs.g" - case 568: { + case 571: { AST::ClassElementList *node = new (pool) AST::ClassElementList(sym(1).PatternProperty, false); sym(1).Node = node; } break; -#line 4395 "qmljs.g" +#line 4473 "qmljs.g" - case 569: { + case 572: { lexer->setStaticIsKeyword(true); AST::ClassElementList *node = new (pool) AST::ClassElementList(sym(2).PatternProperty, true); sym(1).Node = node; } break; -#line 4404 "qmljs.g" +#line 4482 "qmljs.g" - case 570: { + case 573: { sym(1).Node = nullptr; } break; -#line 4413 "qmljs.g" +#line 4491 "qmljs.g" - case 571: { + case 574: { sym(1).Node = nullptr; } break; -#line 4422 "qmljs.g" +#line 4500 "qmljs.g" - case 573: { + case 576: { sym(1).Node = new (pool) AST::Program(sym(1).StatementList->finish()); } break; -#line 4429 "qmljs.g" - case 574: { +#line 4507 "qmljs.g" + case 577: { sym(1).Node = new (pool) AST::ESModule(sym(1).StatementList); } break; -#line 4435 "qmljs.g" +#line 4513 "qmljs.g" - case 575: { + case 578: { sym(1).StatementList = sym(1).StatementList->finish(); } break; -#line 4442 "qmljs.g" +#line 4520 "qmljs.g" - case 576: { + case 579: { sym(1).StatementList = nullptr; } break; -#line 4452 "qmljs.g" +#line 4530 "qmljs.g" - case 579: { + case 582: { sym(1).StatementList = sym(1).StatementList->append(sym(2).StatementList); } break; -#line 4460 "qmljs.g" - case 580: Q_FALLTHROUGH(); -#line 4462 "qmljs.g" +#line 4538 "qmljs.g" + case 583: Q_FALLTHROUGH(); +#line 4540 "qmljs.g" - case 581: { + case 584: { sym(1).StatementList = new (pool) AST::StatementList(sym(1).Node); } break; -#line 4471 "qmljs.g" +#line 4549 "qmljs.g" - case 583: { + case 586: { auto decl = new (pool) AST::ImportDeclaration(sym(2).ImportClause, sym(3).FromClause); decl->importToken = loc(1); sym(1).Node = decl; } break; -#line 4479 "qmljs.g" +#line 4557 "qmljs.g" - case 584: { + case 587: { auto decl = new (pool) AST::ImportDeclaration(stringRef(2)); decl->importToken = loc(1); decl->moduleSpecifierToken = loc(2); sym(1).Node = decl; } break; -#line 4489 "qmljs.g" +#line 4567 "qmljs.g" - case 585: { + case 588: { auto clause = new (pool) AST::ImportClause(stringRef(1)); clause->importedDefaultBindingToken = loc(1); sym(1).ImportClause = clause; } break; -#line 4497 "qmljs.g" +#line 4575 "qmljs.g" - case 586: { + case 589: { sym(1).ImportClause = new (pool) AST::ImportClause(sym(1).NameSpaceImport); } break; -#line 4503 "qmljs.g" +#line 4581 "qmljs.g" - case 587: { + case 590: { sym(1).ImportClause = new (pool) AST::ImportClause(sym(1).NamedImports); } break; -#line 4509 "qmljs.g" +#line 4587 "qmljs.g" - case 588: { + case 591: { auto importClause = new (pool) AST::ImportClause(stringRef(1), sym(3).NameSpaceImport); importClause->importedDefaultBindingToken = loc(1); sym(1).ImportClause = importClause; } break; -#line 4517 "qmljs.g" +#line 4595 "qmljs.g" - case 589: { + case 592: { auto importClause = new (pool) AST::ImportClause(stringRef(1), sym(3).NamedImports); importClause->importedDefaultBindingToken = loc(1); sym(1).ImportClause = importClause; } break; -#line 4528 "qmljs.g" +#line 4606 "qmljs.g" - case 591: { + case 594: { auto import = new (pool) AST::NameSpaceImport(stringRef(3)); import->starToken = loc(1); import->importedBindingToken = loc(3); sym(1).NameSpaceImport = import; } break; -#line 4538 "qmljs.g" +#line 4616 "qmljs.g" - case 592: { + case 595: { auto namedImports = new (pool) AST::NamedImports(); namedImports->leftBraceToken = loc(1); namedImports->rightBraceToken = loc(2); sym(1).NamedImports = namedImports; } break; -#line 4547 "qmljs.g" +#line 4625 "qmljs.g" - case 593: { + case 596: { auto namedImports = new (pool) AST::NamedImports(sym(2).ImportsList->finish()); namedImports->leftBraceToken = loc(1); namedImports->rightBraceToken = loc(3); sym(1).NamedImports = namedImports; } break; -#line 4556 "qmljs.g" +#line 4634 "qmljs.g" - case 594: { + case 597: { auto namedImports = new (pool) AST::NamedImports(sym(2).ImportsList->finish()); namedImports->leftBraceToken = loc(1); namedImports->rightBraceToken = loc(4); sym(1).NamedImports = namedImports; } break; -#line 4566 "qmljs.g" +#line 4644 "qmljs.g" - case 595: { + case 598: { auto clause = new (pool) AST::FromClause(stringRef(2)); clause->fromToken = loc(1); clause->moduleSpecifierToken = loc(2); sym(1).FromClause = clause; } break; -#line 4576 "qmljs.g" +#line 4654 "qmljs.g" - case 596: { + case 599: { auto importsList = new (pool) AST::ImportsList(sym(1).ImportSpecifier); importsList->importSpecifierToken = loc(1); sym(1).ImportsList = importsList; } break; -#line 4584 "qmljs.g" +#line 4662 "qmljs.g" - case 597: { + case 600: { auto importsList = new (pool) AST::ImportsList(sym(1).ImportsList, sym(3).ImportSpecifier); importsList->importSpecifierToken = loc(3); sym(1).ImportsList = importsList; } break; -#line 4596 "qmljs.g" +#line 4674 "qmljs.g" - case 598: { + case 601: { auto importSpecifier = new (pool) AST::ImportSpecifier(stringRef(1)); importSpecifier->importedBindingToken = loc(1); sym(1).ImportSpecifier = importSpecifier; } break; -#line 4604 "qmljs.g" +#line 4682 "qmljs.g" - case 599: { + case 602: { auto importSpecifier = new (pool) AST::ImportSpecifier(stringRef(1), stringRef(3)); importSpecifier->identifierToken = loc(1); importSpecifier->importedBindingToken = loc(3); sym(1).ImportSpecifier = importSpecifier; } break; -#line 4621 "qmljs.g" +#line 4699 "qmljs.g" - case 602: { + case 605: { int token = lookaheadToken(lexer); if (token == T_FUNCTION || token == T_FUNCTION_STAR || token == T_CLASS) pushToken(T_FORCE_DECLARATION); } break; -#line 4630 "qmljs.g" +#line 4708 "qmljs.g" - case 603: { + case 606: { auto exportDeclaration = new (pool) AST::ExportDeclaration(sym(3).FromClause); exportDeclaration->exportToken = loc(1); sym(1).ExportDeclaration = exportDeclaration; } break; -#line 4638 "qmljs.g" +#line 4716 "qmljs.g" - case 604: { + case 607: { auto exportDeclaration = new (pool) AST::ExportDeclaration(sym(2).ExportClause, sym(3).FromClause); exportDeclaration->exportToken = loc(1); sym(1).ExportDeclaration = exportDeclaration; } break; -#line 4646 "qmljs.g" +#line 4724 "qmljs.g" - case 605: { + case 608: { auto exportDeclaration = new (pool) AST::ExportDeclaration(sym(2).ExportClause); exportDeclaration->exportToken = loc(1); sym(1).ExportDeclaration = exportDeclaration; } break; -#line 4654 "qmljs.g" - case 606: Q_FALLTHROUGH(); -#line 4656 "qmljs.g" +#line 4732 "qmljs.g" + case 609: Q_FALLTHROUGH(); +#line 4734 "qmljs.g" - case 607: { + case 610: { auto exportDeclaration = new (pool) AST::ExportDeclaration(/*exportDefault=*/false, sym(2).Node); exportDeclaration->exportToken = loc(1); sym(1).ExportDeclaration = exportDeclaration; } break; -#line 4664 "qmljs.g" +#line 4742 "qmljs.g" - case 608: { + case 611: { if (auto *f = AST::cast<AST::FunctionDeclaration*>(sym(5).Node)) { if (f->name.isEmpty()) { f->name = stringRef(2); @@ -3560,9 +3634,9 @@ case 241: { } } Q_FALLTHROUGH(); -#line 4675 "qmljs.g" +#line 4753 "qmljs.g" - case 609: { + case 612: { // Emulate 15.2.3.11 if (auto *cls = AST::cast<AST::ClassDeclaration*>(sym(5).Node)) { if (cls->name.isEmpty()) { @@ -3576,9 +3650,9 @@ case 241: { sym(1).ExportDeclaration = exportDeclaration; } break; -#line 4691 "qmljs.g" +#line 4769 "qmljs.g" - case 610: { + case 613: { // if lhs is an identifier expression and rhs is an anonymous function expression, we need to assign the name of lhs to the function if (auto *f = asAnonymousFunctionDefinition(sym(4).Node)) { f->name = stringRef(2); @@ -3592,63 +3666,63 @@ case 241: { sym(1).ExportDeclaration = exportDeclaration; } break; -#line 4708 "qmljs.g" +#line 4786 "qmljs.g" - case 611: { + case 614: { auto exportClause = new (pool) AST::ExportClause(); exportClause->leftBraceToken = loc(1); exportClause->rightBraceToken = loc(2); sym(1).ExportClause = exportClause; } break; -#line 4717 "qmljs.g" +#line 4795 "qmljs.g" - case 612: { + case 615: { auto exportClause = new (pool) AST::ExportClause(sym(2).ExportsList->finish()); exportClause->leftBraceToken = loc(1); exportClause->rightBraceToken = loc(3); sym(1).ExportClause = exportClause; } break; -#line 4726 "qmljs.g" +#line 4804 "qmljs.g" - case 613: { + case 616: { auto exportClause = new (pool) AST::ExportClause(sym(2).ExportsList->finish()); exportClause->leftBraceToken = loc(1); exportClause->rightBraceToken = loc(4); sym(1).ExportClause = exportClause; } break; -#line 4736 "qmljs.g" +#line 4814 "qmljs.g" - case 614: { + case 617: { sym(1).ExportsList = new (pool) AST::ExportsList(sym(1).ExportSpecifier); } break; -#line 4742 "qmljs.g" +#line 4820 "qmljs.g" - case 615: { + case 618: { sym(1).ExportsList = new (pool) AST::ExportsList(sym(1).ExportsList, sym(3).ExportSpecifier); } break; -#line 4749 "qmljs.g" +#line 4827 "qmljs.g" - case 616: { + case 619: { auto exportSpecifier = new (pool) AST::ExportSpecifier(stringRef(1)); exportSpecifier->identifierToken = loc(1); sym(1).ExportSpecifier = exportSpecifier; } break; -#line 4757 "qmljs.g" +#line 4835 "qmljs.g" - case 617: { + case 620: { auto exportSpecifier = new (pool) AST::ExportSpecifier(stringRef(1), stringRef(3)); exportSpecifier->identifierToken = loc(1); exportSpecifier->exportedIdentifierToken = loc(3); sym(1).ExportSpecifier = exportSpecifier; } break; -#line 4768 "qmljs.g" +#line 4846 "qmljs.g" // ------------ end of switch statement } // switch |