@danielx/civet 0.4.6 → 0.4.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/browser.js CHANGED
@@ -456,6 +456,7 @@ var Civet = (() => {
456
456
  SuperProperty,
457
457
  MetaProperty,
458
458
  Parameters,
459
+ NonEmptyParameters,
459
460
  ParameterElement,
460
461
  ParameterElementDelimiter,
461
462
  BindingIdentifier,
@@ -476,6 +477,7 @@ var Civet = (() => {
476
477
  Arrow,
477
478
  Block,
478
479
  BracedOrEmptyBlock,
480
+ EmptyBlock,
479
481
  BracedBlock,
480
482
  SingleNestedExpression,
481
483
  NestedBlockExpressions,
@@ -535,6 +537,7 @@ var Civet = (() => {
535
537
  NestedCaseClause,
536
538
  CaseClause,
537
539
  CaseExpressionList,
540
+ NoExpressions,
538
541
  ImpliedColon,
539
542
  TryStatement,
540
543
  CatchClause,
@@ -655,6 +658,7 @@ var Civet = (() => {
655
658
  SubstitutionStart,
656
659
  Switch,
657
660
  Target,
661
+ Throw,
658
662
  TripleDoubleQuote,
659
663
  TripleSingleQuote,
660
664
  TripleTick,
@@ -821,46 +825,46 @@ var Civet = (() => {
821
825
  var $L77 = $L("break");
822
826
  var $L78 = $L("continue");
823
827
  var $L79 = $L("debugger");
824
- var $L80 = $L("throw");
825
- var $L81 = $L("import type");
826
- var $L82 = $L("default");
827
- var $L83 = $L(":=");
828
- var $L84 = $L("/*");
829
- var $L85 = $L("*/");
830
- var $L86 = $L("###");
831
- var $L87 = $L("as");
832
- var $L88 = $L("async");
833
- var $L89 = $L("await");
834
- var $L90 = $L("case");
835
- var $L91 = $L("catch");
836
- var $L92 = $L("class");
837
- var $L93 = $L("#{");
838
- var $L94 = $L(":");
839
- var $L95 = $L(".");
840
- var $L96 = $L('"');
841
- var $L97 = $L("else");
842
- var $L98 = $L("export");
843
- var $L99 = $L("for");
844
- var $L100 = $L("from");
845
- var $L101 = $L("function");
846
- var $L102 = $L("get");
847
- var $L103 = $L("set");
848
- var $L104 = $L("if");
849
- var $L105 = $L("let");
850
- var $L106 = $L("const");
851
- var $L107 = $L("loop");
852
- var $L108 = $L("new");
853
- var $L109 = $L("of");
854
- var $L110 = $L("{");
855
- var $L111 = $L("[");
856
- var $L112 = $L("(");
857
- var $L113 = $L("?");
858
- var $L114 = $L("return");
859
- var $L115 = $L("'");
860
- var $L116 = $L("static");
861
- var $L117 = $L("${");
862
- var $L118 = $L("switch");
863
- var $L119 = $L("target");
828
+ var $L80 = $L("import type");
829
+ var $L81 = $L("default");
830
+ var $L82 = $L(":=");
831
+ var $L83 = $L("/*");
832
+ var $L84 = $L("*/");
833
+ var $L85 = $L("###");
834
+ var $L86 = $L("as");
835
+ var $L87 = $L("async");
836
+ var $L88 = $L("await");
837
+ var $L89 = $L("case");
838
+ var $L90 = $L("catch");
839
+ var $L91 = $L("class");
840
+ var $L92 = $L("#{");
841
+ var $L93 = $L(":");
842
+ var $L94 = $L(".");
843
+ var $L95 = $L('"');
844
+ var $L96 = $L("else");
845
+ var $L97 = $L("export");
846
+ var $L98 = $L("for");
847
+ var $L99 = $L("from");
848
+ var $L100 = $L("function");
849
+ var $L101 = $L("get");
850
+ var $L102 = $L("set");
851
+ var $L103 = $L("if");
852
+ var $L104 = $L("let");
853
+ var $L105 = $L("const");
854
+ var $L106 = $L("loop");
855
+ var $L107 = $L("new");
856
+ var $L108 = $L("of");
857
+ var $L109 = $L("{");
858
+ var $L110 = $L("[");
859
+ var $L111 = $L("(");
860
+ var $L112 = $L("?");
861
+ var $L113 = $L("return");
862
+ var $L114 = $L("'");
863
+ var $L115 = $L("static");
864
+ var $L116 = $L("${");
865
+ var $L117 = $L("switch");
866
+ var $L118 = $L("target");
867
+ var $L119 = $L("throw");
864
868
  var $L120 = $L('"""');
865
869
  var $L121 = $L("'''");
866
870
  var $L122 = $L("```");
@@ -942,7 +946,11 @@ var Civet = (() => {
942
946
  return TopLevelStatement$0(state);
943
947
  }
944
948
  }
945
- var Expression$0 = $S(AssignmentExpression, $Q($S(__, Comma, AssignmentExpression)));
949
+ var Expression$0 = $TS($S(AssignmentExpression, $Q($S(__, Comma, AssignmentExpression))), function($skip, $loc, $0, $1, $2) {
950
+ if ($2.length == 0)
951
+ return $1;
952
+ return $0;
953
+ });
946
954
  function Expression(state) {
947
955
  if (state.verbose)
948
956
  console.log("ENTER:", "Expression");
@@ -1023,7 +1031,9 @@ var Civet = (() => {
1023
1031
  var spacing = $2;
1024
1032
  return module.insertTrimmingSpace(spacing, "(");
1025
1033
  });
1026
- var ApplicationStart$1 = $S(IndentedApplicationAllowed, $Y(NestedObjectLiteral), InsertOpenParen);
1034
+ var ApplicationStart$1 = $T($S(IndentedApplicationAllowed, $Y(NestedObjectLiteral), InsertOpenParen), function(value) {
1035
+ return value[2];
1036
+ });
1027
1037
  function ApplicationStart(state) {
1028
1038
  if (state.tokenize) {
1029
1039
  return $TOKEN("ApplicationStart", state, ApplicationStart$0(state) || ApplicationStart$1(state));
@@ -1055,7 +1065,11 @@ var Civet = (() => {
1055
1065
  return CommaExpression$0(state);
1056
1066
  }
1057
1067
  }
1058
- var BinaryOpExpression$0 = $S(UnaryExpression, $Q($S(__, BinaryOp, __, UnaryExpression)));
1068
+ var BinaryOpExpression$0 = $TS($S(UnaryExpression, $Q($S(__, BinaryOp, __, UnaryExpression))), function($skip, $loc, $0, $1, $2) {
1069
+ if ($2.length)
1070
+ return $0;
1071
+ return $1;
1072
+ });
1059
1073
  function BinaryOpExpression(state) {
1060
1074
  if (state.verbose)
1061
1075
  console.log("ENTER:", "BinaryOpExpression");
@@ -1095,7 +1109,11 @@ var Civet = (() => {
1095
1109
  }
1096
1110
  }
1097
1111
  var UpdateExpression$0 = $S(UpdateExpressionSymbol, UnaryExpression);
1098
- var UpdateExpression$1 = $S(LeftHandSideExpression, $E(UpdateExpressionSymbol));
1112
+ var UpdateExpression$1 = $TS($S(LeftHandSideExpression, $E(UpdateExpressionSymbol)), function($skip, $loc, $0, $1, $2) {
1113
+ if ($2)
1114
+ return $0;
1115
+ return $1;
1116
+ });
1099
1117
  function UpdateExpression(state) {
1100
1118
  if (state.tokenize) {
1101
1119
  return $TOKEN("UpdateExpression", state, UpdateExpression$0(state) || UpdateExpression$1(state));
@@ -1115,7 +1133,11 @@ var Civet = (() => {
1115
1133
  return UpdateExpressionSymbol$0(state);
1116
1134
  }
1117
1135
  }
1118
- var AssignmentExpression$0 = $S($Q(TrailingComment), AssignmentExpressionRest);
1136
+ var AssignmentExpression$0 = $TS($S($Q(TrailingComment), AssignmentExpressionRest), function($skip, $loc, $0, $1, $2) {
1137
+ if ($1.length)
1138
+ return $0;
1139
+ return $2;
1140
+ });
1119
1141
  var AssignmentExpression$1 = $S(__, AssignmentExpressionRest);
1120
1142
  function AssignmentExpression(state) {
1121
1143
  if (state.tokenize) {
@@ -1127,7 +1149,9 @@ var Civet = (() => {
1127
1149
  var AssignmentExpressionRest$0 = AwaitExpression;
1128
1150
  var AssignmentExpressionRest$1 = YieldExpression;
1129
1151
  var AssignmentExpressionRest$2 = $S($E($S(Async, __)), ArrowFunction);
1130
- var AssignmentExpressionRest$3 = $S($P($S(__, LeftHandSideExpression, __, AssignmentOp)), Expression);
1152
+ var AssignmentExpressionRest$3 = $T($S($P($S(__, LeftHandSideExpression, __, AssignmentOp)), Expression), function(value) {
1153
+ return { "type": "AssignmentExpression", "children": value };
1154
+ });
1131
1155
  var AssignmentExpressionRest$4 = ConditionalExpression;
1132
1156
  function AssignmentExpressionRest(state) {
1133
1157
  if (state.tokenize) {
@@ -1157,7 +1181,19 @@ var Civet = (() => {
1157
1181
  }
1158
1182
  }
1159
1183
  var ArrowFunction$0 = ThinArrowFunction;
1160
- var ArrowFunction$1 = $S(Parameters, $E(ReturnTypeSuffix), FatArrow, FatArrowBody);
1184
+ var ArrowFunction$1 = $TS($S(Parameters, $E(ReturnTypeSuffix), FatArrow, FatArrowBody), function($skip, $loc, $0, $1, $2, $3, $4) {
1185
+ var suffix = $2;
1186
+ var expOrBlock = $4;
1187
+ const isVoid = suffix?.children?.[1]?.[0]?.[1]?.token === "void";
1188
+ const isBlock = expOrBlock.type === "BlockStatement";
1189
+ if (module.implicitReturns && !isVoid && isBlock) {
1190
+ module.addImplicitReturns(expOrBlock);
1191
+ }
1192
+ return {
1193
+ type: "FunctionExpression",
1194
+ children: $0
1195
+ };
1196
+ });
1161
1197
  function ArrowFunction(state) {
1162
1198
  if (state.tokenize) {
1163
1199
  return $TOKEN("ArrowFunction", state, ArrowFunction$0(state) || ArrowFunction$1(state));
@@ -1180,11 +1216,17 @@ var Civet = (() => {
1180
1216
  return FatArrow$0(state);
1181
1217
  }
1182
1218
  }
1183
- var FatArrowBody$0 = $S(__, OpenBrace, EOS, NestedBlockExpressions, __, CloseBrace);
1184
- var FatArrowBody$1 = $S(InsertOpenBrace, EOS, NestedBlockExpressions, InsertNewline, InsertIndent, InsertCloseBrace);
1219
+ var FatArrowBody$0 = $T($S(__, OpenBrace, EOS, NestedBlockExpressions, __, CloseBrace), function(value) {
1220
+ var exps = value[3];
1221
+ return { "type": "BlockStatement", "expressions": exps, "children": value };
1222
+ });
1223
+ var FatArrowBody$1 = $T($S(InsertOpenBrace, EOS, NestedBlockExpressions, InsertNewline, InsertIndent, InsertCloseBrace), function(value) {
1224
+ var exps = value[2];
1225
+ return { "type": "BlockStatement", "expressions": exps, "children": value };
1226
+ });
1185
1227
  var FatArrowBody$2 = AssignmentExpression;
1186
1228
  var FatArrowBody$3 = $S(__, AssignmentExpression);
1187
- var FatArrowBody$4 = $S(InsertOpenBrace, InsertCloseBrace);
1229
+ var FatArrowBody$4 = EmptyBlock;
1188
1230
  function FatArrowBody(state) {
1189
1231
  if (state.tokenize) {
1190
1232
  return $TOKEN("FatArrowBody", state, FatArrowBody$0(state) || FatArrowBody$1(state) || FatArrowBody$2(state) || FatArrowBody$3(state) || FatArrowBody$4(state));
@@ -1192,7 +1234,11 @@ var Civet = (() => {
1192
1234
  return FatArrowBody$0(state) || FatArrowBody$1(state) || FatArrowBody$2(state) || FatArrowBody$3(state) || FatArrowBody$4(state);
1193
1235
  }
1194
1236
  }
1195
- var ConditionalExpression$0 = $S(ShortCircuitExpression, $E($S(__, QuestionMark, AssignmentExpression, __, Colon, AssignmentExpression)));
1237
+ var ConditionalExpression$0 = $TS($S(ShortCircuitExpression, $E($S(__, QuestionMark, AssignmentExpression, __, Colon, AssignmentExpression))), function($skip, $loc, $0, $1, $2) {
1238
+ if ($2)
1239
+ return $0;
1240
+ return $1;
1241
+ });
1196
1242
  function ConditionalExpression(state) {
1197
1243
  if (state.verbose)
1198
1244
  console.log("ENTER:", "ConditionalExpression");
@@ -1381,7 +1427,11 @@ var Civet = (() => {
1381
1427
  }
1382
1428
  var CallExpression$0 = $S($EXPECT($L10, fail, 'CallExpression "super"'), ArgumentsWithTrailingCallExpressions);
1383
1429
  var CallExpression$1 = $S($EXPECT($L11, fail, 'CallExpression "import"'), __, OpenParen, AssignmentExpression, __, CloseParen);
1384
- var CallExpression$2 = $S(MemberExpression, $Q(CallExpressionRest));
1430
+ var CallExpression$2 = $TS($S(MemberExpression, $Q(CallExpressionRest)), function($skip, $loc, $0, $1, $2) {
1431
+ if ($2.length)
1432
+ return $0;
1433
+ return $1;
1434
+ });
1385
1435
  function CallExpression(state) {
1386
1436
  if (state.tokenize) {
1387
1437
  return $TOKEN("CallExpression", state, CallExpression$0(state) || CallExpression$1(state) || CallExpression$2(state));
@@ -1431,7 +1481,11 @@ var Civet = (() => {
1431
1481
  return AdditionalReservedWords$0(state);
1432
1482
  }
1433
1483
  }
1434
- var MemberExpression$0 = $S(PrimaryExpression, $Q(MemberExpressionRest));
1484
+ var MemberExpression$0 = $TS($S(PrimaryExpression, $Q(MemberExpressionRest)), function($skip, $loc, $0, $1, $2) {
1485
+ if ($2.length)
1486
+ return $0;
1487
+ return $1;
1488
+ });
1435
1489
  var MemberExpression$1 = $S($Q(TrailingComment), SuperProperty);
1436
1490
  var MemberExpression$2 = $S($Q(TrailingComment), MetaProperty);
1437
1491
  function MemberExpression(state) {
@@ -1488,7 +1542,7 @@ var Civet = (() => {
1488
1542
  return MetaProperty$0(state) || MetaProperty$1(state);
1489
1543
  }
1490
1544
  }
1491
- var Parameters$0 = $S($E(TypeParameters), OpenParen, $Q(ParameterElement), __, CloseParen);
1545
+ var Parameters$0 = NonEmptyParameters;
1492
1546
  var Parameters$1 = $TV($EXPECT($L1, fail, 'Parameters ""'), function($skip, $loc, $0, $1) {
1493
1547
  return { $loc, token: "()" };
1494
1548
  });
@@ -1499,6 +1553,16 @@ var Civet = (() => {
1499
1553
  return Parameters$0(state) || Parameters$1(state);
1500
1554
  }
1501
1555
  }
1556
+ var NonEmptyParameters$0 = $S($E(TypeParameters), OpenParen, $Q(ParameterElement), __, CloseParen);
1557
+ function NonEmptyParameters(state) {
1558
+ if (state.verbose)
1559
+ console.log("ENTER:", "NonEmptyParameters");
1560
+ if (state.tokenize) {
1561
+ return $TOKEN("NonEmptyParameters", state, NonEmptyParameters$0(state));
1562
+ } else {
1563
+ return NonEmptyParameters$0(state);
1564
+ }
1565
+ }
1502
1566
  var ParameterElement$0 = $S(__, $C(BindingIdentifier, BindingPattern), $E(TypeSuffix), $E(Initializer), ParameterElementDelimiter);
1503
1567
  function ParameterElement(state) {
1504
1568
  if (state.verbose)
@@ -1667,7 +1731,18 @@ var Civet = (() => {
1667
1731
  }
1668
1732
  }
1669
1733
  var FunctionExpression$0 = ThinArrowFunction;
1670
- var FunctionExpression$1 = $S($E($S(Async, __)), Function, $E($S(Star, __)), $E(BindingIdentifier), __, Parameters, $E(ReturnTypeSuffix), BracedBlock);
1734
+ var FunctionExpression$1 = $TS($S($E($S(Async, __)), Function, $E($S(Star, __)), $E(BindingIdentifier), __, Parameters, $E(ReturnTypeSuffix), BracedBlock), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8) {
1735
+ var suffix = $7;
1736
+ var block = $8;
1737
+ const isVoid = suffix?.children?.[1]?.[0]?.[1]?.token === "void";
1738
+ if (module.implicitReturns && !isVoid) {
1739
+ module.addImplicitReturns(block);
1740
+ }
1741
+ return {
1742
+ type: "FunctionExpression",
1743
+ children: $0
1744
+ };
1745
+ });
1671
1746
  function FunctionExpression(state) {
1672
1747
  if (state.tokenize) {
1673
1748
  return $TOKEN("FunctionExpression", state, FunctionExpression$0(state) || FunctionExpression$1(state));
@@ -1675,17 +1750,24 @@ var Civet = (() => {
1675
1750
  return FunctionExpression$0(state) || FunctionExpression$1(state);
1676
1751
  }
1677
1752
  }
1678
- var ThinArrowFunction$0 = $TS($S(Parameters, $E(ReturnTypeSuffix), __, Arrow, BracedOrEmptyBlock), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
1753
+ var ThinArrowFunction$0 = $TS($S(Parameters, $E(ReturnTypeSuffix), $Q(_), Arrow, BracedOrEmptyBlock), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
1679
1754
  var params = $1;
1680
1755
  var suffix = $2;
1681
1756
  var arrow = $4;
1682
1757
  var block = $5;
1683
- return [
1684
- { $loc: arrow.$loc, token: "function" },
1685
- params,
1686
- suffix,
1687
- block
1688
- ];
1758
+ const isVoid = suffix?.children?.[1]?.[0]?.[1]?.token === "void";
1759
+ if (module.implicitReturns && !isVoid) {
1760
+ block = module.addImplicitReturns(block);
1761
+ }
1762
+ return {
1763
+ type: "FunctionExpression",
1764
+ children: [
1765
+ { $loc: arrow.$loc, token: "function" },
1766
+ params,
1767
+ suffix,
1768
+ block
1769
+ ]
1770
+ };
1689
1771
  });
1690
1772
  function ThinArrowFunction(state) {
1691
1773
  if (state.verbose)
@@ -1708,8 +1790,14 @@ var Civet = (() => {
1708
1790
  return Arrow$0(state);
1709
1791
  }
1710
1792
  }
1711
- var Block$0 = $S(__, OpenBrace, EOS, NestedBlockExpressions, __, CloseBrace);
1712
- var Block$1 = $S(InsertOpenBrace, EOS, NestedBlockExpressions, InsertNewline, InsertIndent, InsertCloseBrace);
1793
+ var Block$0 = $T($S(__, OpenBrace, EOS, NestedBlockExpressions, __, CloseBrace), function(value) {
1794
+ var exps = value[3];
1795
+ return { "type": "BlockStatement", "expressions": exps, "children": value };
1796
+ });
1797
+ var Block$1 = $T($S(InsertOpenBrace, EOS, NestedBlockExpressions, InsertNewline, InsertIndent, InsertCloseBrace), function(value) {
1798
+ var exps = value[2];
1799
+ return { "type": "BlockStatement", "expressions": exps, "children": value };
1800
+ });
1713
1801
  var Block$2 = Statement;
1714
1802
  var Block$3 = $S(__, Statement);
1715
1803
  function Block(state) {
@@ -1720,7 +1808,7 @@ var Civet = (() => {
1720
1808
  }
1721
1809
  }
1722
1810
  var BracedOrEmptyBlock$0 = BracedBlock;
1723
- var BracedOrEmptyBlock$1 = $S(InsertOpenBrace, InsertCloseBrace);
1811
+ var BracedOrEmptyBlock$1 = EmptyBlock;
1724
1812
  function BracedOrEmptyBlock(state) {
1725
1813
  if (state.tokenize) {
1726
1814
  return $TOKEN("BracedOrEmptyBlock", state, BracedOrEmptyBlock$0(state) || BracedOrEmptyBlock$1(state));
@@ -1728,9 +1816,34 @@ var Civet = (() => {
1728
1816
  return BracedOrEmptyBlock$0(state) || BracedOrEmptyBlock$1(state);
1729
1817
  }
1730
1818
  }
1731
- var BracedBlock$0 = $S(__, OpenBrace, EOS, NestedBlockExpressions, __, CloseBrace);
1732
- var BracedBlock$1 = $S(InsertOpenBrace, EOS, NestedBlockExpressions, InsertNewline, InsertIndent, InsertCloseBrace);
1733
- var BracedBlock$2 = $S(InsertOpenBrace, $N(EOS), __, Statement, InsertSpace, InsertCloseBrace);
1819
+ var EmptyBlock$0 = $T($S(InsertOpenBrace, InsertCloseBrace), function(value) {
1820
+ return { "type": "BlockStatement", "expressions": [], "children": value };
1821
+ });
1822
+ function EmptyBlock(state) {
1823
+ if (state.verbose)
1824
+ console.log("ENTER:", "EmptyBlock");
1825
+ if (state.tokenize) {
1826
+ return $TOKEN("EmptyBlock", state, EmptyBlock$0(state));
1827
+ } else {
1828
+ return EmptyBlock$0(state);
1829
+ }
1830
+ }
1831
+ var BracedBlock$0 = $T($S(__, OpenBrace, EOS, NestedBlockExpressions, __, CloseBrace), function(value) {
1832
+ var exps = value[3];
1833
+ return { "type": "BlockStatement", "expressions": exps, "children": value };
1834
+ });
1835
+ var BracedBlock$1 = $T($S(InsertOpenBrace, EOS, NestedBlockExpressions, InsertNewline, InsertIndent, InsertCloseBrace), function(value) {
1836
+ var exps = value[2];
1837
+ return { "type": "BlockStatement", "expressions": exps, "children": value };
1838
+ });
1839
+ var BracedBlock$2 = $TS($S(InsertOpenBrace, $N(EOS), __, Statement, InsertSpace, InsertCloseBrace), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6) {
1840
+ var s = $4;
1841
+ return {
1842
+ type: "BlockStatement",
1843
+ expressions: [s],
1844
+ children: $0
1845
+ };
1846
+ });
1734
1847
  function BracedBlock(state) {
1735
1848
  if (state.tokenize) {
1736
1849
  return $TOKEN("BracedBlock", state, BracedBlock$0(state) || BracedBlock$1(state) || BracedBlock$2(state));
@@ -1825,7 +1938,9 @@ var Civet = (() => {
1825
1938
  return Comma$0(state);
1826
1939
  }
1827
1940
  }
1828
- var Identifier$0 = $S($N(ReservedWord), IdentifierName);
1941
+ var Identifier$0 = $T($S($N(ReservedWord), IdentifierName), function(value) {
1942
+ return value[1];
1943
+ });
1829
1944
  function Identifier(state) {
1830
1945
  if (state.verbose)
1831
1946
  console.log("ENTER:", "Identifier");
@@ -2036,7 +2151,17 @@ var Civet = (() => {
2036
2151
  return PropertyName$0(state) || PropertyName$1(state) || PropertyName$2(state) || PropertyName$3(state);
2037
2152
  }
2038
2153
  }
2039
- var MethodDefinition$0 = $S(MethodSignature, BracedBlock);
2154
+ var MethodDefinition$0 = $TS($S(MethodSignature, BracedBlock), function($skip, $loc, $0, $1, $2) {
2155
+ var sig = $1;
2156
+ var block = $2;
2157
+ const isConstructor = sig.name === "constructor";
2158
+ const isVoid = sig.returnType === "void";
2159
+ const isSet = sig.modifier === "set";
2160
+ if (module.implicitReturns && !isConstructor && !isSet && !isVoid) {
2161
+ block = module.addImplicitReturns(block);
2162
+ }
2163
+ return $0;
2164
+ });
2040
2165
  function MethodDefinition(state) {
2041
2166
  if (state.verbose)
2042
2167
  console.log("ENTER:", "MethodDefinition");
@@ -2057,8 +2182,26 @@ var Civet = (() => {
2057
2182
  return MethodModifier$0(state) || MethodModifier$1(state) || MethodModifier$2(state) || MethodModifier$3(state);
2058
2183
  }
2059
2184
  }
2060
- var MethodSignature$0 = $S(ConstructorShorthand, Parameters);
2061
- var MethodSignature$1 = $S($E(MethodModifier), ClassElementName, $Q(_), Parameters);
2185
+ var MethodSignature$0 = $TS($S(ConstructorShorthand, Parameters), function($skip, $loc, $0, $1, $2) {
2186
+ return {
2187
+ type: "MethodSignature",
2188
+ children: $0,
2189
+ name: $1.token,
2190
+ returnType: void 0
2191
+ };
2192
+ });
2193
+ var MethodSignature$1 = $TS($S($E(MethodModifier), ClassElementName, $Q(_), NonEmptyParameters, $E(ReturnTypeSuffix)), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
2194
+ var name = $2;
2195
+ var suffix = $5;
2196
+ name = name.token.match(/^(?:"|')/) ? name.token.slice(1, -1) : name.token;
2197
+ return {
2198
+ type: "MethodSignature",
2199
+ children: $0,
2200
+ name,
2201
+ modifier: $1?.[0]?.token,
2202
+ returnType: void 0
2203
+ };
2204
+ });
2062
2205
  function MethodSignature(state) {
2063
2206
  if (state.tokenize) {
2064
2207
  return $TOKEN("MethodSignature", state, MethodSignature$0(state) || MethodSignature$1(state));
@@ -2075,7 +2218,12 @@ var Civet = (() => {
2075
2218
  return ClassElementName$0(state) || ClassElementName$1(state);
2076
2219
  }
2077
2220
  }
2078
- var PrivateIdentifier$0 = $S($EXPECT($L8, fail, 'PrivateIdentifier "#"'), IdentifierName);
2221
+ var PrivateIdentifier$0 = $TV($TEXT($S($EXPECT($L8, fail, 'PrivateIdentifier "#"'), IdentifierName)), function($skip, $loc, $0, $1) {
2222
+ return {
2223
+ $loc,
2224
+ token: $1
2225
+ };
2226
+ });
2079
2227
  function PrivateIdentifier(state) {
2080
2228
  if (state.verbose)
2081
2229
  console.log("ENTER:", "PrivateIdentifier");
@@ -2213,8 +2361,7 @@ var Civet = (() => {
2213
2361
  var l = $3;
2214
2362
  if (cond)
2215
2363
  return [cond, statement, { $loc: l.$loc, token: "}" }];
2216
- $0.pop();
2217
- return $0;
2364
+ return statement;
2218
2365
  });
2219
2366
  function StatementListItem(state) {
2220
2367
  if (state.verbose)
@@ -2269,7 +2416,9 @@ var Civet = (() => {
2269
2416
  return Statement$0(state) || Statement$1(state) || Statement$2(state) || Statement$3(state) || Statement$4(state) || Statement$5(state) || Statement$6(state) || Statement$7(state) || Statement$8(state);
2270
2417
  }
2271
2418
  }
2272
- var EmptyStatement$0 = $S($Q(TrailingComment), $Y($EXPECT($L72, fail, 'EmptyStatement ";"')));
2419
+ var EmptyStatement$0 = $T($S($Q(TrailingComment), $Y($EXPECT($L72, fail, 'EmptyStatement ";"'))), function(value) {
2420
+ return { "type": "EmptyStatement", "children": value[0] };
2421
+ });
2273
2422
  function EmptyStatement(state) {
2274
2423
  if (state.verbose)
2275
2424
  console.log("ENTER:", "EmptyStatement");
@@ -2289,7 +2438,9 @@ var Civet = (() => {
2289
2438
  return BlockStatement$0(state);
2290
2439
  }
2291
2440
  }
2292
- var IfStatement$0 = $S(If, Condition, Block, $E($S(__, Else, Block)));
2441
+ var IfStatement$0 = $T($S(If, Condition, Block, $E($S(__, Else, Block))), function(value) {
2442
+ return { "type": "IfStatement", "children": value };
2443
+ });
2293
2444
  var IfStatement$1 = $TS($S(Unless, Condition, Block), function($skip, $loc, $0, $1, $2, $3) {
2294
2445
  var kind = $1;
2295
2446
  var condition = $2;
@@ -2303,7 +2454,10 @@ var Civet = (() => {
2303
2454
  c.token = "))";
2304
2455
  });
2305
2456
  kind.token = "if";
2306
- return [kind, condition, block];
2457
+ return {
2458
+ type: "IfStatement",
2459
+ children: [kind, condition, block]
2460
+ };
2307
2461
  });
2308
2462
  function IfStatement(state) {
2309
2463
  if (state.tokenize) {
@@ -2315,8 +2469,12 @@ var Civet = (() => {
2315
2469
  var IterationStatement$0 = LoopStatement;
2316
2470
  var IterationStatement$1 = DoWhileStatement;
2317
2471
  var IterationStatement$2 = WhileStatement;
2318
- var IterationStatement$3 = ForStatement;
2319
- var IterationStatement$4 = ForInOfStatement;
2472
+ var IterationStatement$3 = $T($S(ForStatement), function(value) {
2473
+ return { "type": "IterationStatement", "children": value };
2474
+ });
2475
+ var IterationStatement$4 = $T($S(ForInOfStatement), function(value) {
2476
+ return { "type": "IterationStatement", "children": value };
2477
+ });
2320
2478
  function IterationStatement(state) {
2321
2479
  if (state.tokenize) {
2322
2480
  return $TOKEN("IterationStatement", state, IterationStatement$0(state) || IterationStatement$1(state) || IterationStatement$2(state) || IterationStatement$3(state) || IterationStatement$4(state));
@@ -2324,7 +2482,9 @@ var Civet = (() => {
2324
2482
  return IterationStatement$0(state) || IterationStatement$1(state) || IterationStatement$2(state) || IterationStatement$3(state) || IterationStatement$4(state);
2325
2483
  }
2326
2484
  }
2327
- var LoopStatement$0 = $S(Loop, Block);
2485
+ var LoopStatement$0 = $T($S(Loop, Block), function(value) {
2486
+ return { "type": "IterationStatement", "children": value };
2487
+ });
2328
2488
  function LoopStatement(state) {
2329
2489
  if (state.verbose)
2330
2490
  console.log("ENTER:", "LoopStatement");
@@ -2334,7 +2494,9 @@ var Civet = (() => {
2334
2494
  return LoopStatement$0(state);
2335
2495
  }
2336
2496
  }
2337
- var DoWhileStatement$0 = $S($EXPECT($L73, fail, 'DoWhileStatement "do"'), NonIdContinue, Block, __, WhileClause);
2497
+ var DoWhileStatement$0 = $T($S($EXPECT($L73, fail, 'DoWhileStatement "do"'), NonIdContinue, Block, __, WhileClause), function(value) {
2498
+ return { "type": "IterationStatement", "children": value };
2499
+ });
2338
2500
  function DoWhileStatement(state) {
2339
2501
  if (state.verbose)
2340
2502
  console.log("ENTER:", "DoWhileStatement");
@@ -2344,7 +2506,9 @@ var Civet = (() => {
2344
2506
  return DoWhileStatement$0(state);
2345
2507
  }
2346
2508
  }
2347
- var WhileStatement$0 = $S(WhileClause, Block);
2509
+ var WhileStatement$0 = $T($S(WhileClause, Block), function(value) {
2510
+ return { "type": "IterationStatement", "children": value };
2511
+ });
2348
2512
  function WhileStatement(state) {
2349
2513
  if (state.verbose)
2350
2514
  console.log("ENTER:", "WhileStatement");
@@ -2413,7 +2577,9 @@ var Civet = (() => {
2413
2577
  return ForBinding$0(state) || ForBinding$1(state);
2414
2578
  }
2415
2579
  }
2416
- var SwitchStatement$0 = $S(Switch, Condition, CaseBlock);
2580
+ var SwitchStatement$0 = $T($S(Switch, Condition, CaseBlock), function(value) {
2581
+ return { "type": "SwitchStatement", "children": value };
2582
+ });
2417
2583
  function SwitchStatement(state) {
2418
2584
  if (state.verbose)
2419
2585
  console.log("ENTER:", "SwitchStatement");
@@ -2423,8 +2589,24 @@ var Civet = (() => {
2423
2589
  return SwitchStatement$0(state);
2424
2590
  }
2425
2591
  }
2426
- var CaseBlock$0 = $S(__, OpenBrace, $Y(EOS), NestedCaseClauses, __, CloseBrace);
2427
- var CaseBlock$1 = $S($Y(EOS), InsertOpenBrace, NestedCaseClauses, InsertNewline, InsertCloseBrace);
2592
+ var CaseBlock$0 = $TS($S(__, OpenBrace, $Y(EOS), NestedCaseClauses, __, CloseBrace), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6) {
2593
+ var clauses = $4;
2594
+ $0.splice(2, 1);
2595
+ return {
2596
+ type: "CaseBlock",
2597
+ clauses,
2598
+ children: $0
2599
+ };
2600
+ });
2601
+ var CaseBlock$1 = $TS($S($Y(EOS), InsertOpenBrace, NestedCaseClauses, InsertNewline, InsertIndent, InsertCloseBrace), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6) {
2602
+ var clauses = $3;
2603
+ $0.shift();
2604
+ return {
2605
+ type: "CaseBlock",
2606
+ clauses,
2607
+ children: $0
2608
+ };
2609
+ });
2428
2610
  function CaseBlock(state) {
2429
2611
  if (state.tokenize) {
2430
2612
  return $TOKEN("CaseBlock", state, CaseBlock$0(state) || CaseBlock$1(state));
@@ -2447,7 +2629,10 @@ var Civet = (() => {
2447
2629
  return NestedCaseClauses$0(state);
2448
2630
  }
2449
2631
  }
2450
- var NestedCaseClause$0 = $S(Nested, CaseClause);
2632
+ var NestedCaseClause$0 = $TS($S(Nested, CaseClause), function($skip, $loc, $0, $1, $2) {
2633
+ $2.children.unshift($1);
2634
+ return $2;
2635
+ });
2451
2636
  function NestedCaseClause(state) {
2452
2637
  if (state.verbose)
2453
2638
  console.log("ENTER:", "NestedCaseClause");
@@ -2457,14 +2642,32 @@ var Civet = (() => {
2457
2642
  return NestedCaseClause$0(state);
2458
2643
  }
2459
2644
  }
2460
- var CaseClause$0 = $S(Case, CaseExpressionList, NestedBlockExpressions);
2461
- var CaseClause$1 = $S(When, CaseExpressionList, NestedBlockExpressions, InsertBreak);
2462
- var CaseClause$2 = $S(Default, ImpliedColon, NestedBlockExpressions);
2645
+ var CaseClause$0 = $T($S(Case, CaseExpressionList, $C(NestedBlockExpressions, NoExpressions)), function(value) {
2646
+ var exps = value[2];
2647
+ return { "type": "CaseClause", "expressions": exps, "children": value };
2648
+ });
2649
+ var CaseClause$1 = $T($S(When, CaseExpressionList, NestedBlockExpressions, InsertBreak), function(value) {
2650
+ var exps = value[2];
2651
+ return { "type": "WhenClause", "expressions": exps, "children": value };
2652
+ });
2653
+ var CaseClause$2 = $T($S(Default, ImpliedColon, $C(NestedBlockExpressions, NoExpressions)), function(value) {
2654
+ var exps = value[2];
2655
+ return { "type": "DefaultClause", "expressions": exps, "children": value };
2656
+ });
2657
+ var CaseClause$3 = $TS($S(Else, ImpliedColon, NestedBlockExpressions), function($skip, $loc, $0, $1, $2, $3) {
2658
+ var exps = $3;
2659
+ $1.token = "default";
2660
+ return {
2661
+ type: "DefaultClause",
2662
+ expressions: exps,
2663
+ children: $0
2664
+ };
2665
+ });
2463
2666
  function CaseClause(state) {
2464
2667
  if (state.tokenize) {
2465
- return $TOKEN("CaseClause", state, CaseClause$0(state) || CaseClause$1(state) || CaseClause$2(state));
2668
+ return $TOKEN("CaseClause", state, CaseClause$0(state) || CaseClause$1(state) || CaseClause$2(state) || CaseClause$3(state));
2466
2669
  } else {
2467
- return CaseClause$0(state) || CaseClause$1(state) || CaseClause$2(state);
2670
+ return CaseClause$0(state) || CaseClause$1(state) || CaseClause$2(state) || CaseClause$3(state);
2468
2671
  }
2469
2672
  }
2470
2673
  var CaseExpressionList$0 = $TS($S($S($Q(_), ExpressionWithIndentedApplicationSuppressed, ImpliedColon), $Q($S(__, Comma, ExpressionWithIndentedApplicationSuppressed, ImpliedColon))), function($skip, $loc, $0, $1, $2) {
@@ -2486,6 +2689,18 @@ var Civet = (() => {
2486
2689
  return CaseExpressionList$0(state);
2487
2690
  }
2488
2691
  }
2692
+ var NoExpressions$0 = $T($EXPECT($L1, fail, 'NoExpressions ""'), function(value) {
2693
+ return [];
2694
+ });
2695
+ function NoExpressions(state) {
2696
+ if (state.verbose)
2697
+ console.log("ENTER:", "NoExpressions");
2698
+ if (state.tokenize) {
2699
+ return $TOKEN("NoExpressions", state, NoExpressions$0(state));
2700
+ } else {
2701
+ return NoExpressions$0(state);
2702
+ }
2703
+ }
2489
2704
  var ImpliedColon$0 = $S(__, Colon);
2490
2705
  var ImpliedColon$1 = $TV($EXPECT($L1, fail, 'ImpliedColon ""'), function($skip, $loc, $0, $1) {
2491
2706
  return { $loc, token: ":" };
@@ -2498,12 +2713,20 @@ var Civet = (() => {
2498
2713
  }
2499
2714
  }
2500
2715
  var TryStatement$0 = $TS($S(Try, BracedBlock, $E(CatchClause), $E(Finally)), function($skip, $loc, $0, $1, $2, $3, $4) {
2716
+ var t = $1;
2717
+ var b = $2;
2501
2718
  var c = $3;
2502
2719
  var f = $4;
2503
2720
  if (!c && !f) {
2504
- return [$1, $2, " catch {}"];
2721
+ return {
2722
+ type: "TryStatement",
2723
+ children: [t, b, " catch(e) {}"]
2724
+ };
2505
2725
  }
2506
- return [$1, $2, c, f];
2726
+ return {
2727
+ type: "TryStatement",
2728
+ children: [t, b, c, f]
2729
+ };
2507
2730
  });
2508
2731
  function TryStatement(state) {
2509
2732
  if (state.verbose)
@@ -2525,7 +2748,7 @@ var Civet = (() => {
2525
2748
  }
2526
2749
  }
2527
2750
  var CatchBind$0 = $S(__, OpenParen, __, CatchParameter, __, CloseParen);
2528
- var CatchBind$1 = $S(__, InsertOpenParen, CatchParameter, InsertCloseParen);
2751
+ var CatchBind$1 = $S($N(EOS), $Q(TrailingComment), InsertOpenParen, CatchParameter, InsertCloseParen);
2529
2752
  function CatchBind(state) {
2530
2753
  if (state.tokenize) {
2531
2754
  return $TOKEN("CatchBind", state, CatchBind$0(state) || CatchBind$1(state));
@@ -2599,11 +2822,21 @@ var Civet = (() => {
2599
2822
  return ExpressionStatement$0(state);
2600
2823
  }
2601
2824
  }
2602
- var KeywordStatement$0 = $S($EXPECT($L77, fail, 'KeywordStatement "break"'), NonIdContinue);
2603
- var KeywordStatement$1 = $S($EXPECT($L78, fail, 'KeywordStatement "continue"'), NonIdContinue);
2604
- var KeywordStatement$2 = $S($EXPECT($L79, fail, 'KeywordStatement "debugger"'), NonIdContinue);
2605
- var KeywordStatement$3 = $S(Return, $E(MaybeNestedExpression));
2606
- var KeywordStatement$4 = $S($EXPECT($L80, fail, 'KeywordStatement "throw"'), NonIdContinue, Expression);
2825
+ var KeywordStatement$0 = $T($S($EXPECT($L77, fail, 'KeywordStatement "break"'), NonIdContinue), function(value) {
2826
+ return { "type": "BreakStatement", "children": value };
2827
+ });
2828
+ var KeywordStatement$1 = $T($S($EXPECT($L78, fail, 'KeywordStatement "continue"'), NonIdContinue), function(value) {
2829
+ return { "type": "ContinueStatement", "children": value };
2830
+ });
2831
+ var KeywordStatement$2 = $T($S($EXPECT($L79, fail, 'KeywordStatement "debugger"'), NonIdContinue), function(value) {
2832
+ return { "type": "DebuggerStatement", "children": value };
2833
+ });
2834
+ var KeywordStatement$3 = $T($S(Return, $E(MaybeNestedExpression)), function(value) {
2835
+ return { "type": "ReturnStatement", "children": value };
2836
+ });
2837
+ var KeywordStatement$4 = $T($S(Throw, Expression), function(value) {
2838
+ return { "type": "ThrowStatement", "children": value };
2839
+ });
2607
2840
  function KeywordStatement(state) {
2608
2841
  if (state.tokenize) {
2609
2842
  return $TOKEN("KeywordStatement", state, KeywordStatement$0(state) || KeywordStatement$1(state) || KeywordStatement$2(state) || KeywordStatement$3(state) || KeywordStatement$4(state));
@@ -2620,7 +2853,7 @@ var Civet = (() => {
2620
2853
  return MaybeNestedExpression$0(state) || MaybeNestedExpression$1(state);
2621
2854
  }
2622
2855
  }
2623
- var ImportDeclaration$0 = $T($S($EXPECT($L81, fail, 'ImportDeclaration "import type"'), NonIdContinue, __, ImportClause, __, FromClause), function(value) {
2856
+ var ImportDeclaration$0 = $T($S($EXPECT($L80, fail, 'ImportDeclaration "import type"'), NonIdContinue, __, ImportClause, __, FromClause), function(value) {
2624
2857
  return { "ts": true, "children": value };
2625
2858
  });
2626
2859
  var ImportDeclaration$1 = $S(Import, __, ImportClause, __, FromClause);
@@ -2758,7 +2991,7 @@ var Civet = (() => {
2758
2991
  return ImportedBinding$0(state);
2759
2992
  }
2760
2993
  }
2761
- var ExportDeclaration$0 = $S(Export, __, $EXPECT($L82, fail, 'ExportDeclaration "default"'), NonIdContinue, __, $C(HoistableDeclaration, ClassDeclaration, AssignmentExpression));
2994
+ var ExportDeclaration$0 = $S(Export, __, $EXPECT($L81, fail, 'ExportDeclaration "default"'), NonIdContinue, __, $C(HoistableDeclaration, ClassDeclaration, AssignmentExpression));
2762
2995
  var ExportDeclaration$1 = $S(Export, __, ExportFromClause, __, FromClause);
2763
2996
  var ExportDeclaration$2 = $S(Export, __, $C(NamedExports, VariableStatement, Declaration));
2764
2997
  function ExportDeclaration(state) {
@@ -2818,7 +3051,9 @@ var Civet = (() => {
2818
3051
  return HoistableDeclaration$0(state);
2819
3052
  }
2820
3053
  }
2821
- var LexicalDeclaration$0 = $S(LetOrConst, __, LexicalBinding, $Q($S(__, Comma, __, LexicalBinding)));
3054
+ var LexicalDeclaration$0 = $T($S(LetOrConst, __, LexicalBinding, $Q($S(__, Comma, __, LexicalBinding))), function(value) {
3055
+ return { "type": "VariableDeclaration", "children": value };
3056
+ });
2822
3057
  var LexicalDeclaration$1 = $TS($S(InsertConst, $C(BindingPattern, BindingIdentifier), $E(TypeSuffix), __, ConstAssignment, AssignmentExpression), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6) {
2823
3058
  var c = $1;
2824
3059
  var ca = $5;
@@ -2826,7 +3061,10 @@ var Civet = (() => {
2826
3061
  pos: ca.$loc.pos - 1,
2827
3062
  length: ca.$loc.length + 1
2828
3063
  };
2829
- return $0;
3064
+ return {
3065
+ type: "VariableDeclaration",
3066
+ children: $0
3067
+ };
2830
3068
  });
2831
3069
  function LexicalDeclaration(state) {
2832
3070
  if (state.tokenize) {
@@ -2835,7 +3073,7 @@ var Civet = (() => {
2835
3073
  return LexicalDeclaration$0(state) || LexicalDeclaration$1(state);
2836
3074
  }
2837
3075
  }
2838
- var ConstAssignment$0 = $TV($EXPECT($L83, fail, 'ConstAssignment ":="'), function($skip, $loc, $0, $1) {
3076
+ var ConstAssignment$0 = $TV($EXPECT($L82, fail, 'ConstAssignment ":="'), function($skip, $loc, $0, $1) {
2839
3077
  return { $loc, token: "=" };
2840
3078
  });
2841
3079
  function ConstAssignment(state) {
@@ -2866,7 +3104,9 @@ var Civet = (() => {
2866
3104
  return Initializer$0(state);
2867
3105
  }
2868
3106
  }
2869
- var VariableStatement$0 = $S(Var, __, VariableDeclarationList);
3107
+ var VariableStatement$0 = $T($S(Var, __, VariableDeclarationList), function(value) {
3108
+ return { "type": "VariableDeclaration", "children": value };
3109
+ });
2870
3110
  function VariableStatement(state) {
2871
3111
  if (state.verbose)
2872
3112
  console.log("ENTER:", "VariableStatement");
@@ -3247,7 +3487,7 @@ var Civet = (() => {
3247
3487
  return MultiLineComment$0(state) || MultiLineComment$1(state);
3248
3488
  }
3249
3489
  }
3250
- var JSMultiLineComment$0 = $TV($TEXT($S($EXPECT($L84, fail, 'JSMultiLineComment "/*"'), $Q($S($N($EXPECT($L85, fail, 'JSMultiLineComment "*/"')), $EXPECT($R21, fail, "JSMultiLineComment /./"))), $EXPECT($L85, fail, 'JSMultiLineComment "*/"'))), function($skip, $loc, $0, $1) {
3490
+ var JSMultiLineComment$0 = $TV($TEXT($S($EXPECT($L83, fail, 'JSMultiLineComment "/*"'), $Q($S($N($EXPECT($L84, fail, 'JSMultiLineComment "*/"')), $EXPECT($R21, fail, "JSMultiLineComment /./"))), $EXPECT($L84, fail, 'JSMultiLineComment "*/"'))), function($skip, $loc, $0, $1) {
3251
3491
  return { $loc, token: $1 };
3252
3492
  });
3253
3493
  function JSMultiLineComment(state) {
@@ -3271,7 +3511,7 @@ var Civet = (() => {
3271
3511
  return CoffeeSingleLineComment$0(state);
3272
3512
  }
3273
3513
  }
3274
- var CoffeeMultiLineComment$0 = $TS($S($EXPECT($L86, fail, 'CoffeeMultiLineComment "###"'), $TEXT($Q($S($N($C($EXPECT($L86, fail, 'CoffeeMultiLineComment "###"'), $EXPECT($L85, fail, 'CoffeeMultiLineComment "*/"'))), $EXPECT($R21, fail, "CoffeeMultiLineComment /./")))), $EXPECT($L86, fail, 'CoffeeMultiLineComment "###"')), function($skip, $loc, $0, $1, $2, $3) {
3514
+ var CoffeeMultiLineComment$0 = $TS($S($EXPECT($L85, fail, 'CoffeeMultiLineComment "###"'), $TEXT($Q($S($N($C($EXPECT($L85, fail, 'CoffeeMultiLineComment "###"'), $EXPECT($L84, fail, 'CoffeeMultiLineComment "*/"'))), $EXPECT($R21, fail, "CoffeeMultiLineComment /./")))), $EXPECT($L85, fail, 'CoffeeMultiLineComment "###"')), function($skip, $loc, $0, $1, $2, $3) {
3275
3515
  return { $loc, token: `/*${$2}*/` };
3276
3516
  });
3277
3517
  function CoffeeMultiLineComment(state) {
@@ -3283,7 +3523,7 @@ var Civet = (() => {
3283
3523
  return CoffeeMultiLineComment$0(state);
3284
3524
  }
3285
3525
  }
3286
- var InlineComment$0 = $TV($TEXT($S($EXPECT($L84, fail, 'InlineComment "/*"'), $TEXT($Q($S($N($EXPECT($L85, fail, 'InlineComment "*/"')), $EXPECT($R23, fail, "InlineComment /[^\\r\\n]/")))), $EXPECT($L85, fail, 'InlineComment "*/"'))), function($skip, $loc, $0, $1) {
3526
+ var InlineComment$0 = $TV($TEXT($S($EXPECT($L83, fail, 'InlineComment "/*"'), $TEXT($Q($S($N($EXPECT($L84, fail, 'InlineComment "*/"')), $EXPECT($R23, fail, "InlineComment /[^\\r\\n]/")))), $EXPECT($L84, fail, 'InlineComment "*/"'))), function($skip, $loc, $0, $1) {
3287
3527
  return { $loc, token: $1 };
3288
3528
  });
3289
3529
  function InlineComment(state) {
@@ -3392,7 +3632,7 @@ var Civet = (() => {
3392
3632
  return Loc$0(state);
3393
3633
  }
3394
3634
  }
3395
- var As$0 = $TS($S($EXPECT($L87, fail, 'As "as"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3635
+ var As$0 = $TS($S($EXPECT($L86, fail, 'As "as"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3396
3636
  return { $loc, token: $1 };
3397
3637
  });
3398
3638
  function As(state) {
@@ -3404,7 +3644,7 @@ var Civet = (() => {
3404
3644
  return As$0(state);
3405
3645
  }
3406
3646
  }
3407
- var Async$0 = $TV($EXPECT($L88, fail, 'Async "async"'), function($skip, $loc, $0, $1) {
3647
+ var Async$0 = $TV($EXPECT($L87, fail, 'Async "async"'), function($skip, $loc, $0, $1) {
3408
3648
  return { $loc, token: $1 };
3409
3649
  });
3410
3650
  function Async(state) {
@@ -3416,7 +3656,7 @@ var Civet = (() => {
3416
3656
  return Async$0(state);
3417
3657
  }
3418
3658
  }
3419
- var Await$0 = $TS($S($EXPECT($L89, fail, 'Await "await"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3659
+ var Await$0 = $TS($S($EXPECT($L88, fail, 'Await "await"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3420
3660
  return { $loc, token: $1 };
3421
3661
  });
3422
3662
  function Await(state) {
@@ -3428,7 +3668,7 @@ var Civet = (() => {
3428
3668
  return Await$0(state);
3429
3669
  }
3430
3670
  }
3431
- var Case$0 = $TS($S($EXPECT($L90, fail, 'Case "case"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3671
+ var Case$0 = $TS($S($EXPECT($L89, fail, 'Case "case"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3432
3672
  return { $loc, token: $1 };
3433
3673
  });
3434
3674
  function Case(state) {
@@ -3440,7 +3680,7 @@ var Civet = (() => {
3440
3680
  return Case$0(state);
3441
3681
  }
3442
3682
  }
3443
- var Catch$0 = $TV($EXPECT($L91, fail, 'Catch "catch"'), function($skip, $loc, $0, $1) {
3683
+ var Catch$0 = $TV($EXPECT($L90, fail, 'Catch "catch"'), function($skip, $loc, $0, $1) {
3444
3684
  return { $loc, token: $1 };
3445
3685
  });
3446
3686
  function Catch(state) {
@@ -3452,7 +3692,7 @@ var Civet = (() => {
3452
3692
  return Catch$0(state);
3453
3693
  }
3454
3694
  }
3455
- var Class$0 = $TV($EXPECT($L92, fail, 'Class "class"'), function($skip, $loc, $0, $1) {
3695
+ var Class$0 = $TV($EXPECT($L91, fail, 'Class "class"'), function($skip, $loc, $0, $1) {
3456
3696
  return { $loc, token: $1 };
3457
3697
  });
3458
3698
  function Class(state) {
@@ -3500,7 +3740,7 @@ var Civet = (() => {
3500
3740
  return CloseParen$0(state);
3501
3741
  }
3502
3742
  }
3503
- var CoffeeSubstitutionStart$0 = $TV($EXPECT($L93, fail, 'CoffeeSubstitutionStart "#{"'), function($skip, $loc, $0, $1) {
3743
+ var CoffeeSubstitutionStart$0 = $TV($EXPECT($L92, fail, 'CoffeeSubstitutionStart "#{"'), function($skip, $loc, $0, $1) {
3504
3744
  return { $loc, token: "${" };
3505
3745
  });
3506
3746
  function CoffeeSubstitutionStart(state) {
@@ -3512,7 +3752,7 @@ var Civet = (() => {
3512
3752
  return CoffeeSubstitutionStart$0(state);
3513
3753
  }
3514
3754
  }
3515
- var Colon$0 = $TV($EXPECT($L94, fail, 'Colon ":"'), function($skip, $loc, $0, $1) {
3755
+ var Colon$0 = $TV($EXPECT($L93, fail, 'Colon ":"'), function($skip, $loc, $0, $1) {
3516
3756
  return { $loc, token: $1 };
3517
3757
  });
3518
3758
  function Colon(state) {
@@ -3536,7 +3776,7 @@ var Civet = (() => {
3536
3776
  return ConstructorShorthand$0(state);
3537
3777
  }
3538
3778
  }
3539
- var Default$0 = $TS($S($EXPECT($L82, fail, 'Default "default"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3779
+ var Default$0 = $TS($S($EXPECT($L81, fail, 'Default "default"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3540
3780
  return { $loc, token: $1 };
3541
3781
  });
3542
3782
  function Default(state) {
@@ -3548,7 +3788,7 @@ var Civet = (() => {
3548
3788
  return Default$0(state);
3549
3789
  }
3550
3790
  }
3551
- var Dot$0 = $TV($EXPECT($L95, fail, 'Dot "."'), function($skip, $loc, $0, $1) {
3791
+ var Dot$0 = $TV($EXPECT($L94, fail, 'Dot "."'), function($skip, $loc, $0, $1) {
3552
3792
  return { $loc, token: $1 };
3553
3793
  });
3554
3794
  function Dot(state) {
@@ -3560,7 +3800,7 @@ var Civet = (() => {
3560
3800
  return Dot$0(state);
3561
3801
  }
3562
3802
  }
3563
- var DoubleQuote$0 = $TV($EXPECT($L96, fail, 'DoubleQuote "\\\\\\""'), function($skip, $loc, $0, $1) {
3803
+ var DoubleQuote$0 = $TV($EXPECT($L95, fail, 'DoubleQuote "\\\\\\""'), function($skip, $loc, $0, $1) {
3564
3804
  return { $loc, token: $1 };
3565
3805
  });
3566
3806
  function DoubleQuote(state) {
@@ -3572,7 +3812,7 @@ var Civet = (() => {
3572
3812
  return DoubleQuote$0(state);
3573
3813
  }
3574
3814
  }
3575
- var Else$0 = $TV($EXPECT($L97, fail, 'Else "else"'), function($skip, $loc, $0, $1) {
3815
+ var Else$0 = $TV($EXPECT($L96, fail, 'Else "else"'), function($skip, $loc, $0, $1) {
3576
3816
  return { $loc, token: $1 };
3577
3817
  });
3578
3818
  function Else(state) {
@@ -3596,7 +3836,7 @@ var Civet = (() => {
3596
3836
  return Equals$0(state);
3597
3837
  }
3598
3838
  }
3599
- var Export$0 = $TS($S($EXPECT($L98, fail, 'Export "export"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3839
+ var Export$0 = $TS($S($EXPECT($L97, fail, 'Export "export"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3600
3840
  return { $loc, token: $1 };
3601
3841
  });
3602
3842
  function Export(state) {
@@ -3608,7 +3848,7 @@ var Civet = (() => {
3608
3848
  return Export$0(state);
3609
3849
  }
3610
3850
  }
3611
- var For$0 = $TS($S($EXPECT($L99, fail, 'For "for"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3851
+ var For$0 = $TS($S($EXPECT($L98, fail, 'For "for"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3612
3852
  return { $loc, token: $1 };
3613
3853
  });
3614
3854
  function For(state) {
@@ -3620,7 +3860,7 @@ var Civet = (() => {
3620
3860
  return For$0(state);
3621
3861
  }
3622
3862
  }
3623
- var From$0 = $TS($S($EXPECT($L100, fail, 'From "from"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3863
+ var From$0 = $TS($S($EXPECT($L99, fail, 'From "from"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3624
3864
  return { $loc, token: $1 };
3625
3865
  });
3626
3866
  function From(state) {
@@ -3632,7 +3872,7 @@ var Civet = (() => {
3632
3872
  return From$0(state);
3633
3873
  }
3634
3874
  }
3635
- var Function$0 = $TV($EXPECT($L101, fail, 'Function "function"'), function($skip, $loc, $0, $1) {
3875
+ var Function$0 = $TV($EXPECT($L100, fail, 'Function "function"'), function($skip, $loc, $0, $1) {
3636
3876
  return { $loc, token: $1 };
3637
3877
  });
3638
3878
  function Function(state) {
@@ -3644,7 +3884,7 @@ var Civet = (() => {
3644
3884
  return Function$0(state);
3645
3885
  }
3646
3886
  }
3647
- var GetOrSet$0 = $TS($S($C($EXPECT($L102, fail, 'GetOrSet "get"'), $EXPECT($L103, fail, 'GetOrSet "set"')), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3887
+ var GetOrSet$0 = $TS($S($C($EXPECT($L101, fail, 'GetOrSet "get"'), $EXPECT($L102, fail, 'GetOrSet "set"')), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3648
3888
  return { $loc, token: $1 };
3649
3889
  });
3650
3890
  function GetOrSet(state) {
@@ -3656,7 +3896,7 @@ var Civet = (() => {
3656
3896
  return GetOrSet$0(state);
3657
3897
  }
3658
3898
  }
3659
- var If$0 = $TV($EXPECT($L104, fail, 'If "if"'), function($skip, $loc, $0, $1) {
3899
+ var If$0 = $TV($EXPECT($L103, fail, 'If "if"'), function($skip, $loc, $0, $1) {
3660
3900
  return { $loc, token: $1 };
3661
3901
  });
3662
3902
  function If(state) {
@@ -3692,7 +3932,7 @@ var Civet = (() => {
3692
3932
  return In$0(state);
3693
3933
  }
3694
3934
  }
3695
- var LetOrConst$0 = $TV($C($EXPECT($L105, fail, 'LetOrConst "let"'), $EXPECT($L106, fail, 'LetOrConst "const"')), function($skip, $loc, $0, $1) {
3935
+ var LetOrConst$0 = $TV($C($EXPECT($L104, fail, 'LetOrConst "let"'), $EXPECT($L105, fail, 'LetOrConst "const"')), function($skip, $loc, $0, $1) {
3696
3936
  return { $loc, token: $1 };
3697
3937
  });
3698
3938
  function LetOrConst(state) {
@@ -3704,7 +3944,7 @@ var Civet = (() => {
3704
3944
  return LetOrConst$0(state);
3705
3945
  }
3706
3946
  }
3707
- var Loop$0 = $TS($S($EXPECT($L107, fail, 'Loop "loop"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3947
+ var Loop$0 = $TS($S($EXPECT($L106, fail, 'Loop "loop"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3708
3948
  return { $loc, token: "while(true)" };
3709
3949
  });
3710
3950
  function Loop(state) {
@@ -3716,7 +3956,7 @@ var Civet = (() => {
3716
3956
  return Loop$0(state);
3717
3957
  }
3718
3958
  }
3719
- var New$0 = $TV($EXPECT($L108, fail, 'New "new"'), function($skip, $loc, $0, $1) {
3959
+ var New$0 = $TV($EXPECT($L107, fail, 'New "new"'), function($skip, $loc, $0, $1) {
3720
3960
  return { $loc, token: $1 };
3721
3961
  });
3722
3962
  function New(state) {
@@ -3728,7 +3968,7 @@ var Civet = (() => {
3728
3968
  return New$0(state);
3729
3969
  }
3730
3970
  }
3731
- var Of$0 = $TV($EXPECT($L109, fail, 'Of "of"'), function($skip, $loc, $0, $1) {
3971
+ var Of$0 = $TV($EXPECT($L108, fail, 'Of "of"'), function($skip, $loc, $0, $1) {
3732
3972
  return { $loc, token: $1 };
3733
3973
  });
3734
3974
  function Of(state) {
@@ -3740,7 +3980,7 @@ var Civet = (() => {
3740
3980
  return Of$0(state);
3741
3981
  }
3742
3982
  }
3743
- var OpenBrace$0 = $TV($EXPECT($L110, fail, 'OpenBrace "{"'), function($skip, $loc, $0, $1) {
3983
+ var OpenBrace$0 = $TV($EXPECT($L109, fail, 'OpenBrace "{"'), function($skip, $loc, $0, $1) {
3744
3984
  return { $loc, token: $1 };
3745
3985
  });
3746
3986
  function OpenBrace(state) {
@@ -3752,7 +3992,7 @@ var Civet = (() => {
3752
3992
  return OpenBrace$0(state);
3753
3993
  }
3754
3994
  }
3755
- var OpenBracket$0 = $TV($EXPECT($L111, fail, 'OpenBracket "["'), function($skip, $loc, $0, $1) {
3995
+ var OpenBracket$0 = $TV($EXPECT($L110, fail, 'OpenBracket "["'), function($skip, $loc, $0, $1) {
3756
3996
  return { $loc, token: $1 };
3757
3997
  });
3758
3998
  function OpenBracket(state) {
@@ -3764,7 +4004,7 @@ var Civet = (() => {
3764
4004
  return OpenBracket$0(state);
3765
4005
  }
3766
4006
  }
3767
- var OpenParen$0 = $TV($EXPECT($L112, fail, 'OpenParen "("'), function($skip, $loc, $0, $1) {
4007
+ var OpenParen$0 = $TV($EXPECT($L111, fail, 'OpenParen "("'), function($skip, $loc, $0, $1) {
3768
4008
  return { $loc, token: $1 };
3769
4009
  });
3770
4010
  function OpenParen(state) {
@@ -3776,7 +4016,7 @@ var Civet = (() => {
3776
4016
  return OpenParen$0(state);
3777
4017
  }
3778
4018
  }
3779
- var QuestionMark$0 = $TV($EXPECT($L113, fail, 'QuestionMark "?"'), function($skip, $loc, $0, $1) {
4019
+ var QuestionMark$0 = $TV($EXPECT($L112, fail, 'QuestionMark "?"'), function($skip, $loc, $0, $1) {
3780
4020
  return { $loc, token: $1 };
3781
4021
  });
3782
4022
  function QuestionMark(state) {
@@ -3788,7 +4028,7 @@ var Civet = (() => {
3788
4028
  return QuestionMark$0(state);
3789
4029
  }
3790
4030
  }
3791
- var Return$0 = $TS($S($EXPECT($L114, fail, 'Return "return"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4031
+ var Return$0 = $TS($S($EXPECT($L113, fail, 'Return "return"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3792
4032
  return { $loc, token: $1 };
3793
4033
  });
3794
4034
  function Return(state) {
@@ -3812,7 +4052,7 @@ var Civet = (() => {
3812
4052
  return Semicolon$0(state);
3813
4053
  }
3814
4054
  }
3815
- var SingleQuote$0 = $TV($EXPECT($L115, fail, `SingleQuote "'"`), function($skip, $loc, $0, $1) {
4055
+ var SingleQuote$0 = $TV($EXPECT($L114, fail, `SingleQuote "'"`), function($skip, $loc, $0, $1) {
3816
4056
  return { $loc, token: $1 };
3817
4057
  });
3818
4058
  function SingleQuote(state) {
@@ -3836,10 +4076,10 @@ var Civet = (() => {
3836
4076
  return Star$0(state);
3837
4077
  }
3838
4078
  }
3839
- var Static$0 = $TV($EXPECT($L116, fail, 'Static "static"'), function($skip, $loc, $0, $1) {
4079
+ var Static$0 = $TV($EXPECT($L115, fail, 'Static "static"'), function($skip, $loc, $0, $1) {
3840
4080
  return { $loc, token: $1 };
3841
4081
  });
3842
- var Static$1 = $TS($S($EXPECT($L9, fail, 'Static "@"'), $N($EXPECT($L112, fail, 'Static "("'))), function($skip, $loc, $0, $1, $2) {
4082
+ var Static$1 = $TS($S($EXPECT($L9, fail, 'Static "@"'), $N($EXPECT($L111, fail, 'Static "("'))), function($skip, $loc, $0, $1, $2) {
3843
4083
  return { $loc, token: "static " };
3844
4084
  });
3845
4085
  function Static(state) {
@@ -3849,7 +4089,7 @@ var Civet = (() => {
3849
4089
  return Static$0(state) || Static$1(state);
3850
4090
  }
3851
4091
  }
3852
- var SubstitutionStart$0 = $TV($EXPECT($L117, fail, 'SubstitutionStart "${"'), function($skip, $loc, $0, $1) {
4092
+ var SubstitutionStart$0 = $TV($EXPECT($L116, fail, 'SubstitutionStart "${"'), function($skip, $loc, $0, $1) {
3853
4093
  return { $loc, token: $1 };
3854
4094
  });
3855
4095
  function SubstitutionStart(state) {
@@ -3861,7 +4101,7 @@ var Civet = (() => {
3861
4101
  return SubstitutionStart$0(state);
3862
4102
  }
3863
4103
  }
3864
- var Switch$0 = $TS($S($EXPECT($L118, fail, 'Switch "switch"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4104
+ var Switch$0 = $TS($S($EXPECT($L117, fail, 'Switch "switch"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3865
4105
  return { $loc, token: $1 };
3866
4106
  });
3867
4107
  function Switch(state) {
@@ -3873,7 +4113,7 @@ var Civet = (() => {
3873
4113
  return Switch$0(state);
3874
4114
  }
3875
4115
  }
3876
- var Target$0 = $TV($EXPECT($L119, fail, 'Target "target"'), function($skip, $loc, $0, $1) {
4116
+ var Target$0 = $TV($EXPECT($L118, fail, 'Target "target"'), function($skip, $loc, $0, $1) {
3877
4117
  return { $loc, token: $1 };
3878
4118
  });
3879
4119
  function Target(state) {
@@ -3885,6 +4125,18 @@ var Civet = (() => {
3885
4125
  return Target$0(state);
3886
4126
  }
3887
4127
  }
4128
+ var Throw$0 = $TS($S($EXPECT($L119, fail, 'Throw "throw"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4129
+ return { $loc, token: $1 };
4130
+ });
4131
+ function Throw(state) {
4132
+ if (state.verbose)
4133
+ console.log("ENTER:", "Throw");
4134
+ if (state.tokenize) {
4135
+ return $TOKEN("Throw", state, Throw$0(state));
4136
+ } else {
4137
+ return Throw$0(state);
4138
+ }
4139
+ }
3888
4140
  var TripleDoubleQuote$0 = $TV($EXPECT($L120, fail, 'TripleDoubleQuote "\\\\\\"\\\\\\"\\\\\\""'), function($skip, $loc, $0, $1) {
3889
4141
  return { $loc, token: "`" };
3890
4142
  });
@@ -4244,7 +4496,7 @@ var Civet = (() => {
4244
4496
  }
4245
4497
  }
4246
4498
  var InterfaceProperty$0 = $S($C(TypeIndexSignature, PropertyName), TypeSuffix, InterfacePropertyDelimiter);
4247
- var InterfaceProperty$1 = $S(MethodSignature, $E(TypeSuffix));
4499
+ var InterfaceProperty$1 = MethodSignature;
4248
4500
  function InterfaceProperty(state) {
4249
4501
  if (state.tokenize) {
4250
4502
  return $TOKEN("InterfaceProperty", state, InterfaceProperty$0(state) || InterfaceProperty$1(state));
@@ -4322,7 +4574,7 @@ var Civet = (() => {
4322
4574
  }
4323
4575
  }
4324
4576
  var TypeSuffix$0 = $T($S($E(QuestionMark), __, Colon, Type), function(value) {
4325
- return { "ts": true, "children": value };
4577
+ return { "type": "TypeSuffix", "ts": true, "children": value };
4326
4578
  });
4327
4579
  function TypeSuffix(state) {
4328
4580
  if (state.verbose)
@@ -4333,8 +4585,16 @@ var Civet = (() => {
4333
4585
  return TypeSuffix$0(state);
4334
4586
  }
4335
4587
  }
4336
- var ReturnTypeSuffix$0 = $T($S(__, Colon, $E($S(__, $EXPECT($L137, fail, 'ReturnTypeSuffix "asserts"'), NonIdContinue)), TypePredicate), function(value) {
4337
- return { "ts": true, "children": value };
4588
+ var ReturnTypeSuffix$0 = $TS($S(__, Colon, $E($S(__, $EXPECT($L137, fail, 'ReturnTypeSuffix "asserts"'), NonIdContinue)), TypePredicate), function($skip, $loc, $0, $1, $2, $3, $4) {
4589
+ if (!$3)
4590
+ $0.splice(2, 1);
4591
+ if ($1.length === 0)
4592
+ $0.shift();
4593
+ return {
4594
+ type: "ReturnTypeAnnotation",
4595
+ children: $0,
4596
+ ts: true
4597
+ };
4338
4598
  });
4339
4599
  function ReturnTypeSuffix(state) {
4340
4600
  if (state.verbose)
@@ -4345,7 +4605,11 @@ var Civet = (() => {
4345
4605
  return ReturnTypeSuffix$0(state);
4346
4606
  }
4347
4607
  }
4348
- var TypePredicate$0 = $S(Type, $E($S(__, $EXPECT($L56, fail, 'TypePredicate "is"'), NonIdContinue, Type)));
4608
+ var TypePredicate$0 = $TS($S(Type, $E($S(__, $EXPECT($L56, fail, 'TypePredicate "is"'), NonIdContinue, Type))), function($skip, $loc, $0, $1, $2) {
4609
+ if (!$2)
4610
+ return $1;
4611
+ return $0;
4612
+ });
4349
4613
  function TypePredicate(state) {
4350
4614
  if (state.verbose)
4351
4615
  console.log("ENTER:", "TypePredicate");
@@ -4365,7 +4629,11 @@ var Civet = (() => {
4365
4629
  return Type$0(state);
4366
4630
  }
4367
4631
  }
4368
- var TypeBinary$0 = $S(TypeUnary, $Q($S(__, TypeBinaryOp, __, TypeUnary)));
4632
+ var TypeBinary$0 = $TS($S(TypeUnary, $Q($S(__, TypeBinaryOp, __, TypeUnary))), function($skip, $loc, $0, $1, $2) {
4633
+ if ($2.length)
4634
+ return $0;
4635
+ return $1;
4636
+ });
4369
4637
  function TypeBinary(state) {
4370
4638
  if (state.verbose)
4371
4639
  console.log("ENTER:", "TypeBinary");
@@ -4375,7 +4643,13 @@ var Civet = (() => {
4375
4643
  return TypeBinary$0(state);
4376
4644
  }
4377
4645
  }
4378
- var TypeUnary$0 = $S($Q($S(__, TypeUnaryOp, NonIdContinue)), TypePrimary, $Q(TypeUnarySuffix));
4646
+ var TypeUnary$0 = $TS($S($Q($S(__, TypeUnaryOp, NonIdContinue)), TypePrimary, $Q(TypeUnarySuffix)), function($skip, $loc, $0, $1, $2, $3) {
4647
+ if (!$3.length)
4648
+ $0.pop();
4649
+ if (!$1.length)
4650
+ $0.shift();
4651
+ return $0;
4652
+ });
4379
4653
  function TypeUnary(state) {
4380
4654
  if (state.verbose)
4381
4655
  console.log("ENTER:", "TypeUnary");
@@ -4418,8 +4692,8 @@ var Civet = (() => {
4418
4692
  var TypePrimary$0 = InterfaceBlock;
4419
4693
  var TypePrimary$1 = $S(__, OpenParen, Type, __, CloseParen);
4420
4694
  var TypePrimary$2 = $S($Q(_), FunctionType);
4421
- var TypePrimary$3 = $S($Q(_), IdentifierName, $Q($S(Dot, IdentifierName)), $E(TypeArguments));
4422
- var TypePrimary$4 = $S($Q(_), TypeLiteral);
4695
+ var TypePrimary$3 = $S($Q(_), TypeLiteral);
4696
+ var TypePrimary$4 = $S($Q(_), IdentifierName, $Q($S(Dot, IdentifierName)), $E(TypeArguments));
4423
4697
  function TypePrimary(state) {
4424
4698
  if (state.tokenize) {
4425
4699
  return $TOKEN("TypePrimary", state, TypePrimary$0(state) || TypePrimary$1(state) || TypePrimary$2(state) || TypePrimary$3(state) || TypePrimary$4(state));
@@ -4427,7 +4701,11 @@ var Civet = (() => {
4427
4701
  return TypePrimary$0(state) || TypePrimary$1(state) || TypePrimary$2(state) || TypePrimary$3(state) || TypePrimary$4(state);
4428
4702
  }
4429
4703
  }
4430
- var TypeConditional$0 = $S(TypeBinary, $E($S(__, $EXPECT($L6, fail, 'TypeConditional "extends"'), Type, $E($S(__, QuestionMark, Type, __, Colon, Type)))));
4704
+ var TypeConditional$0 = $TS($S(TypeBinary, $E($S(__, $EXPECT($L6, fail, 'TypeConditional "extends"'), Type, $E($S(__, QuestionMark, Type, __, Colon, Type))))), function($skip, $loc, $0, $1, $2) {
4705
+ if ($2)
4706
+ return $0;
4707
+ return $1;
4708
+ });
4431
4709
  function TypeConditional(state) {
4432
4710
  if (state.verbose)
4433
4711
  console.log("ENTER:", "TypeConditional");
@@ -4438,8 +4716,12 @@ var Civet = (() => {
4438
4716
  }
4439
4717
  }
4440
4718
  var TypeLiteral$0 = Literal;
4441
- var TypeLiteral$1 = $EXPECT($L70, fail, 'TypeLiteral "void"');
4442
- var TypeLiteral$2 = $EXPECT($L140, fail, 'TypeLiteral "[]"');
4719
+ var TypeLiteral$1 = $TV($EXPECT($L70, fail, 'TypeLiteral "void"'), function($skip, $loc, $0, $1) {
4720
+ return { $loc, token: "void" };
4721
+ });
4722
+ var TypeLiteral$2 = $TV($EXPECT($L140, fail, 'TypeLiteral "[]"'), function($skip, $loc, $0, $1) {
4723
+ return { $loc, token: "[]" };
4724
+ });
4443
4725
  function TypeLiteral(state) {
4444
4726
  if (state.tokenize) {
4445
4727
  return $TOKEN("TypeLiteral", state, TypeLiteral$0(state) || TypeLiteral$1(state) || TypeLiteral$2(state));
@@ -4447,8 +4729,12 @@ var Civet = (() => {
4447
4729
  return TypeLiteral$0(state) || TypeLiteral$1(state) || TypeLiteral$2(state);
4448
4730
  }
4449
4731
  }
4450
- var TypeBinaryOp$0 = $EXPECT($L68, fail, 'TypeBinaryOp "|"');
4451
- var TypeBinaryOp$1 = $EXPECT($L66, fail, 'TypeBinaryOp "&"');
4732
+ var TypeBinaryOp$0 = $TV($EXPECT($L68, fail, 'TypeBinaryOp "|"'), function($skip, $loc, $0, $1) {
4733
+ return { $loc, token: "|" };
4734
+ });
4735
+ var TypeBinaryOp$1 = $TV($EXPECT($L66, fail, 'TypeBinaryOp "&"'), function($skip, $loc, $0, $1) {
4736
+ return { $loc, token: "&" };
4737
+ });
4452
4738
  function TypeBinaryOp(state) {
4453
4739
  if (state.tokenize) {
4454
4740
  return $TOKEN("TypeBinaryOp", state, TypeBinaryOp$0(state) || TypeBinaryOp$1(state));
@@ -4722,6 +5008,7 @@ var Civet = (() => {
4722
5008
  module.indentLevels = [0];
4723
5009
  module.verbose = false;
4724
5010
  module.coffeeCompat = false;
5011
+ module.implicitReturns = true;
4725
5012
  });
4726
5013
  function Reset(state) {
4727
5014
  if (state.verbose)
@@ -4738,6 +5025,79 @@ var Civet = (() => {
4738
5025
  const compatRe = /use coffee-compat/;
4739
5026
  module.coffeeCompat = directives.some((d) => d[1].token?.match(compatRe));
4740
5027
  }
5028
+ function hasReturnStatement(node) {
5029
+ if (!node)
5030
+ return false;
5031
+ if (Array.isArray(node))
5032
+ return node.some(hasReturnStatement);
5033
+ if (node.type === "ReturnStatement")
5034
+ return true;
5035
+ if (node.type === "FunctionExpression")
5036
+ return false;
5037
+ if (node.children)
5038
+ return hasReturnStatement(node.children);
5039
+ return false;
5040
+ }
5041
+ function insertReturn(node) {
5042
+ if (!node)
5043
+ return;
5044
+ switch (node.type) {
5045
+ case "AssignmentExpression":
5046
+ node.children.unshift("return ");
5047
+ return;
5048
+ case "BlockStatement":
5049
+ insertReturn(node.expressions[node.expressions.length - 1]);
5050
+ return;
5051
+ case "CaseBlock":
5052
+ node.clauses.forEach((clause) => {
5053
+ insertReturn(clause);
5054
+ });
5055
+ return;
5056
+ case "CaseClause":
5057
+ return;
5058
+ case "WhenClause":
5059
+ node.children.pop();
5060
+ insertReturn(node.expressions[node.expressions.length - 1]);
5061
+ return;
5062
+ case "DefaultClause":
5063
+ insertReturn(node.expressions[node.expressions.length - 1]);
5064
+ return;
5065
+ }
5066
+ if (!Array.isArray(node))
5067
+ return;
5068
+ const [, exp] = node;
5069
+ if (!exp)
5070
+ return;
5071
+ switch (exp.type) {
5072
+ case "BreakStatement":
5073
+ case "ContinueStatement":
5074
+ case "DebuggerStatement":
5075
+ case "EmptyStatement":
5076
+ case "IterationStatement":
5077
+ case "ThrowStatement":
5078
+ case "VariableDeclaration":
5079
+ return;
5080
+ case "IfStatement":
5081
+ insertReturn(exp.children[2]);
5082
+ if (exp.children[3])
5083
+ insertReturn(exp.children[3][2]);
5084
+ return;
5085
+ case "SwitchStatement":
5086
+ insertReturn(exp.children[2]);
5087
+ return;
5088
+ case "TryStatement":
5089
+ insertReturn(exp.children[1]);
5090
+ insertReturn(exp.children[2][3]);
5091
+ return;
5092
+ }
5093
+ node.splice(1, 0, "return ");
5094
+ }
5095
+ module.addImplicitReturns = function(block) {
5096
+ if (hasReturnStatement(block))
5097
+ return block;
5098
+ insertReturn(block);
5099
+ return block;
5100
+ };
4741
5101
  module.parsePosition = function() {
4742
5102
  let s = Error().stack.split(/\n at /);
4743
5103
  s.shift();
@@ -4745,6 +5105,25 @@ var Civet = (() => {
4745
5105
  s = s.slice(1, s.indexOf("Program") + 1);
4746
5106
  return s;
4747
5107
  };
5108
+ module.prune = function(node) {
5109
+ if (node === null || node === void 0)
5110
+ return;
5111
+ if (node.length === 0)
5112
+ return;
5113
+ if (Array.isArray(node)) {
5114
+ const a = node.map((n) => module.prune(n)).filter((n) => !!n);
5115
+ if (a.length > 1)
5116
+ return a;
5117
+ if (a.length === 1)
5118
+ return a[0];
5119
+ return;
5120
+ }
5121
+ if (node.children != null) {
5122
+ node.children = module.prune(node.children);
5123
+ return node;
5124
+ }
5125
+ return node;
5126
+ };
4748
5127
  module.insertTrimmingSpace = function(spacing, c) {
4749
5128
  let target = spacing;
4750
5129
  while (Array.isArray(target)) {
@@ -5014,7 +5393,7 @@ var Civet = (() => {
5014
5393
  return;
5015
5394
  }
5016
5395
  if (node.children != null) {
5017
- node.children = prune(node.children);
5396
+ node.children = prune(node.children) || [];
5018
5397
  return node;
5019
5398
  }
5020
5399
  return node;