@danielx/civet 0.4.6 → 0.4.7

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
@@ -535,6 +535,7 @@ var Civet = (() => {
535
535
  NestedCaseClause,
536
536
  CaseClause,
537
537
  CaseExpressionList,
538
+ NoExpressions,
538
539
  ImpliedColon,
539
540
  TryStatement,
540
541
  CatchClause,
@@ -655,6 +656,7 @@ var Civet = (() => {
655
656
  SubstitutionStart,
656
657
  Switch,
657
658
  Target,
659
+ Throw,
658
660
  TripleDoubleQuote,
659
661
  TripleSingleQuote,
660
662
  TripleTick,
@@ -821,46 +823,46 @@ var Civet = (() => {
821
823
  var $L77 = $L("break");
822
824
  var $L78 = $L("continue");
823
825
  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");
826
+ var $L80 = $L("import type");
827
+ var $L81 = $L("default");
828
+ var $L82 = $L(":=");
829
+ var $L83 = $L("/*");
830
+ var $L84 = $L("*/");
831
+ var $L85 = $L("###");
832
+ var $L86 = $L("as");
833
+ var $L87 = $L("async");
834
+ var $L88 = $L("await");
835
+ var $L89 = $L("case");
836
+ var $L90 = $L("catch");
837
+ var $L91 = $L("class");
838
+ var $L92 = $L("#{");
839
+ var $L93 = $L(":");
840
+ var $L94 = $L(".");
841
+ var $L95 = $L('"');
842
+ var $L96 = $L("else");
843
+ var $L97 = $L("export");
844
+ var $L98 = $L("for");
845
+ var $L99 = $L("from");
846
+ var $L100 = $L("function");
847
+ var $L101 = $L("get");
848
+ var $L102 = $L("set");
849
+ var $L103 = $L("if");
850
+ var $L104 = $L("let");
851
+ var $L105 = $L("const");
852
+ var $L106 = $L("loop");
853
+ var $L107 = $L("new");
854
+ var $L108 = $L("of");
855
+ var $L109 = $L("{");
856
+ var $L110 = $L("[");
857
+ var $L111 = $L("(");
858
+ var $L112 = $L("?");
859
+ var $L113 = $L("return");
860
+ var $L114 = $L("'");
861
+ var $L115 = $L("static");
862
+ var $L116 = $L("${");
863
+ var $L117 = $L("switch");
864
+ var $L118 = $L("target");
865
+ var $L119 = $L("throw");
864
866
  var $L120 = $L('"""');
865
867
  var $L121 = $L("'''");
866
868
  var $L122 = $L("```");
@@ -942,7 +944,11 @@ var Civet = (() => {
942
944
  return TopLevelStatement$0(state);
943
945
  }
944
946
  }
945
- var Expression$0 = $S(AssignmentExpression, $Q($S(__, Comma, AssignmentExpression)));
947
+ var Expression$0 = $TS($S(AssignmentExpression, $Q($S(__, Comma, AssignmentExpression))), function($skip, $loc, $0, $1, $2) {
948
+ if ($2.length == 0)
949
+ return $1;
950
+ return $0;
951
+ });
946
952
  function Expression(state) {
947
953
  if (state.verbose)
948
954
  console.log("ENTER:", "Expression");
@@ -1023,7 +1029,9 @@ var Civet = (() => {
1023
1029
  var spacing = $2;
1024
1030
  return module.insertTrimmingSpace(spacing, "(");
1025
1031
  });
1026
- var ApplicationStart$1 = $S(IndentedApplicationAllowed, $Y(NestedObjectLiteral), InsertOpenParen);
1032
+ var ApplicationStart$1 = $T($S(IndentedApplicationAllowed, $Y(NestedObjectLiteral), InsertOpenParen), function(value) {
1033
+ return value[2];
1034
+ });
1027
1035
  function ApplicationStart(state) {
1028
1036
  if (state.tokenize) {
1029
1037
  return $TOKEN("ApplicationStart", state, ApplicationStart$0(state) || ApplicationStart$1(state));
@@ -1055,7 +1063,11 @@ var Civet = (() => {
1055
1063
  return CommaExpression$0(state);
1056
1064
  }
1057
1065
  }
1058
- var BinaryOpExpression$0 = $S(UnaryExpression, $Q($S(__, BinaryOp, __, UnaryExpression)));
1066
+ var BinaryOpExpression$0 = $TS($S(UnaryExpression, $Q($S(__, BinaryOp, __, UnaryExpression))), function($skip, $loc, $0, $1, $2) {
1067
+ if ($2.length)
1068
+ return $0;
1069
+ return $1;
1070
+ });
1059
1071
  function BinaryOpExpression(state) {
1060
1072
  if (state.verbose)
1061
1073
  console.log("ENTER:", "BinaryOpExpression");
@@ -1095,7 +1107,11 @@ var Civet = (() => {
1095
1107
  }
1096
1108
  }
1097
1109
  var UpdateExpression$0 = $S(UpdateExpressionSymbol, UnaryExpression);
1098
- var UpdateExpression$1 = $S(LeftHandSideExpression, $E(UpdateExpressionSymbol));
1110
+ var UpdateExpression$1 = $TS($S(LeftHandSideExpression, $E(UpdateExpressionSymbol)), function($skip, $loc, $0, $1, $2) {
1111
+ if ($2)
1112
+ return $0;
1113
+ return $1;
1114
+ });
1099
1115
  function UpdateExpression(state) {
1100
1116
  if (state.tokenize) {
1101
1117
  return $TOKEN("UpdateExpression", state, UpdateExpression$0(state) || UpdateExpression$1(state));
@@ -1115,7 +1131,11 @@ var Civet = (() => {
1115
1131
  return UpdateExpressionSymbol$0(state);
1116
1132
  }
1117
1133
  }
1118
- var AssignmentExpression$0 = $S($Q(TrailingComment), AssignmentExpressionRest);
1134
+ var AssignmentExpression$0 = $TS($S($Q(TrailingComment), AssignmentExpressionRest), function($skip, $loc, $0, $1, $2) {
1135
+ if ($1.length)
1136
+ return $0;
1137
+ return $2;
1138
+ });
1119
1139
  var AssignmentExpression$1 = $S(__, AssignmentExpressionRest);
1120
1140
  function AssignmentExpression(state) {
1121
1141
  if (state.tokenize) {
@@ -1127,7 +1147,9 @@ var Civet = (() => {
1127
1147
  var AssignmentExpressionRest$0 = AwaitExpression;
1128
1148
  var AssignmentExpressionRest$1 = YieldExpression;
1129
1149
  var AssignmentExpressionRest$2 = $S($E($S(Async, __)), ArrowFunction);
1130
- var AssignmentExpressionRest$3 = $S($P($S(__, LeftHandSideExpression, __, AssignmentOp)), Expression);
1150
+ var AssignmentExpressionRest$3 = $T($S($P($S(__, LeftHandSideExpression, __, AssignmentOp)), Expression), function(value) {
1151
+ return { "type": "AssignmentExpression", "children": value };
1152
+ });
1131
1153
  var AssignmentExpressionRest$4 = ConditionalExpression;
1132
1154
  function AssignmentExpressionRest(state) {
1133
1155
  if (state.tokenize) {
@@ -1192,7 +1214,11 @@ var Civet = (() => {
1192
1214
  return FatArrowBody$0(state) || FatArrowBody$1(state) || FatArrowBody$2(state) || FatArrowBody$3(state) || FatArrowBody$4(state);
1193
1215
  }
1194
1216
  }
1195
- var ConditionalExpression$0 = $S(ShortCircuitExpression, $E($S(__, QuestionMark, AssignmentExpression, __, Colon, AssignmentExpression)));
1217
+ var ConditionalExpression$0 = $TS($S(ShortCircuitExpression, $E($S(__, QuestionMark, AssignmentExpression, __, Colon, AssignmentExpression))), function($skip, $loc, $0, $1, $2) {
1218
+ if ($2)
1219
+ return $0;
1220
+ return $1;
1221
+ });
1196
1222
  function ConditionalExpression(state) {
1197
1223
  if (state.verbose)
1198
1224
  console.log("ENTER:", "ConditionalExpression");
@@ -1381,7 +1407,11 @@ var Civet = (() => {
1381
1407
  }
1382
1408
  var CallExpression$0 = $S($EXPECT($L10, fail, 'CallExpression "super"'), ArgumentsWithTrailingCallExpressions);
1383
1409
  var CallExpression$1 = $S($EXPECT($L11, fail, 'CallExpression "import"'), __, OpenParen, AssignmentExpression, __, CloseParen);
1384
- var CallExpression$2 = $S(MemberExpression, $Q(CallExpressionRest));
1410
+ var CallExpression$2 = $TS($S(MemberExpression, $Q(CallExpressionRest)), function($skip, $loc, $0, $1, $2) {
1411
+ if ($2.length)
1412
+ return $0;
1413
+ return $1;
1414
+ });
1385
1415
  function CallExpression(state) {
1386
1416
  if (state.tokenize) {
1387
1417
  return $TOKEN("CallExpression", state, CallExpression$0(state) || CallExpression$1(state) || CallExpression$2(state));
@@ -1431,7 +1461,11 @@ var Civet = (() => {
1431
1461
  return AdditionalReservedWords$0(state);
1432
1462
  }
1433
1463
  }
1434
- var MemberExpression$0 = $S(PrimaryExpression, $Q(MemberExpressionRest));
1464
+ var MemberExpression$0 = $TS($S(PrimaryExpression, $Q(MemberExpressionRest)), function($skip, $loc, $0, $1, $2) {
1465
+ if ($2.length)
1466
+ return $0;
1467
+ return $1;
1468
+ });
1435
1469
  var MemberExpression$1 = $S($Q(TrailingComment), SuperProperty);
1436
1470
  var MemberExpression$2 = $S($Q(TrailingComment), MetaProperty);
1437
1471
  function MemberExpression(state) {
@@ -1667,7 +1701,9 @@ var Civet = (() => {
1667
1701
  }
1668
1702
  }
1669
1703
  var FunctionExpression$0 = ThinArrowFunction;
1670
- var FunctionExpression$1 = $S($E($S(Async, __)), Function, $E($S(Star, __)), $E(BindingIdentifier), __, Parameters, $E(ReturnTypeSuffix), BracedBlock);
1704
+ var FunctionExpression$1 = $T($S($E($S(Async, __)), Function, $E($S(Star, __)), $E(BindingIdentifier), __, Parameters, $E(ReturnTypeSuffix), BracedBlock), function(value) {
1705
+ return { "type": "FunctionExpression", "children": value };
1706
+ });
1671
1707
  function FunctionExpression(state) {
1672
1708
  if (state.tokenize) {
1673
1709
  return $TOKEN("FunctionExpression", state, FunctionExpression$0(state) || FunctionExpression$1(state));
@@ -1675,17 +1711,23 @@ var Civet = (() => {
1675
1711
  return FunctionExpression$0(state) || FunctionExpression$1(state);
1676
1712
  }
1677
1713
  }
1678
- var ThinArrowFunction$0 = $TS($S(Parameters, $E(ReturnTypeSuffix), __, Arrow, BracedOrEmptyBlock), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
1714
+ var ThinArrowFunction$0 = $TS($S(Parameters, $E(ReturnTypeSuffix), $Q(_), Arrow, BracedOrEmptyBlock), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
1679
1715
  var params = $1;
1680
1716
  var suffix = $2;
1681
1717
  var arrow = $4;
1682
1718
  var block = $5;
1683
- return [
1684
- { $loc: arrow.$loc, token: "function" },
1685
- params,
1686
- suffix,
1687
- block
1688
- ];
1719
+ if (module.implicitReturns && suffix?.children[3] !== "void") {
1720
+ block = module.addImplicitReturns(block);
1721
+ }
1722
+ return {
1723
+ type: "FunctionExpression",
1724
+ children: [
1725
+ { $loc: arrow.$loc, token: "function" },
1726
+ params,
1727
+ suffix,
1728
+ block
1729
+ ]
1730
+ };
1689
1731
  });
1690
1732
  function ThinArrowFunction(state) {
1691
1733
  if (state.verbose)
@@ -1708,8 +1750,14 @@ var Civet = (() => {
1708
1750
  return Arrow$0(state);
1709
1751
  }
1710
1752
  }
1711
- var Block$0 = $S(__, OpenBrace, EOS, NestedBlockExpressions, __, CloseBrace);
1712
- var Block$1 = $S(InsertOpenBrace, EOS, NestedBlockExpressions, InsertNewline, InsertIndent, InsertCloseBrace);
1753
+ var Block$0 = $T($S(__, OpenBrace, EOS, NestedBlockExpressions, __, CloseBrace), function(value) {
1754
+ var exps = value[3];
1755
+ return { "type": "BlockStatement", "expressions": exps, "children": value };
1756
+ });
1757
+ var Block$1 = $T($S(InsertOpenBrace, EOS, NestedBlockExpressions, InsertNewline, InsertIndent, InsertCloseBrace), function(value) {
1758
+ var exps = value[2];
1759
+ return { "type": "BlockStatement", "expressions": exps, "children": value };
1760
+ });
1713
1761
  var Block$2 = Statement;
1714
1762
  var Block$3 = $S(__, Statement);
1715
1763
  function Block(state) {
@@ -1720,7 +1768,9 @@ var Civet = (() => {
1720
1768
  }
1721
1769
  }
1722
1770
  var BracedOrEmptyBlock$0 = BracedBlock;
1723
- var BracedOrEmptyBlock$1 = $S(InsertOpenBrace, InsertCloseBrace);
1771
+ var BracedOrEmptyBlock$1 = $T($S(InsertOpenBrace, InsertCloseBrace), function(value) {
1772
+ return { "type": "BlockStatement", "expressions": [], "children": value };
1773
+ });
1724
1774
  function BracedOrEmptyBlock(state) {
1725
1775
  if (state.tokenize) {
1726
1776
  return $TOKEN("BracedOrEmptyBlock", state, BracedOrEmptyBlock$0(state) || BracedOrEmptyBlock$1(state));
@@ -1728,9 +1778,22 @@ var Civet = (() => {
1728
1778
  return BracedOrEmptyBlock$0(state) || BracedOrEmptyBlock$1(state);
1729
1779
  }
1730
1780
  }
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);
1781
+ var BracedBlock$0 = $T($S(__, OpenBrace, EOS, NestedBlockExpressions, __, CloseBrace), function(value) {
1782
+ var exps = value[3];
1783
+ return { "type": "BlockStatement", "expressions": exps, "children": value };
1784
+ });
1785
+ var BracedBlock$1 = $T($S(InsertOpenBrace, EOS, NestedBlockExpressions, InsertNewline, InsertIndent, InsertCloseBrace), function(value) {
1786
+ var exps = value[2];
1787
+ return { "type": "BlockStatement", "expressions": exps, "children": value };
1788
+ });
1789
+ var BracedBlock$2 = $TS($S(InsertOpenBrace, $N(EOS), __, Statement, InsertSpace, InsertCloseBrace), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6) {
1790
+ var s = $4;
1791
+ return {
1792
+ type: "BlockStatement",
1793
+ expressions: [s],
1794
+ children: $0
1795
+ };
1796
+ });
1734
1797
  function BracedBlock(state) {
1735
1798
  if (state.tokenize) {
1736
1799
  return $TOKEN("BracedBlock", state, BracedBlock$0(state) || BracedBlock$1(state) || BracedBlock$2(state));
@@ -1825,7 +1888,9 @@ var Civet = (() => {
1825
1888
  return Comma$0(state);
1826
1889
  }
1827
1890
  }
1828
- var Identifier$0 = $S($N(ReservedWord), IdentifierName);
1891
+ var Identifier$0 = $T($S($N(ReservedWord), IdentifierName), function(value) {
1892
+ return value[1];
1893
+ });
1829
1894
  function Identifier(state) {
1830
1895
  if (state.verbose)
1831
1896
  console.log("ENTER:", "Identifier");
@@ -2213,8 +2278,7 @@ var Civet = (() => {
2213
2278
  var l = $3;
2214
2279
  if (cond)
2215
2280
  return [cond, statement, { $loc: l.$loc, token: "}" }];
2216
- $0.pop();
2217
- return $0;
2281
+ return statement;
2218
2282
  });
2219
2283
  function StatementListItem(state) {
2220
2284
  if (state.verbose)
@@ -2269,7 +2333,9 @@ var Civet = (() => {
2269
2333
  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
2334
  }
2271
2335
  }
2272
- var EmptyStatement$0 = $S($Q(TrailingComment), $Y($EXPECT($L72, fail, 'EmptyStatement ";"')));
2336
+ var EmptyStatement$0 = $T($S($Q(TrailingComment), $Y($EXPECT($L72, fail, 'EmptyStatement ";"'))), function(value) {
2337
+ return { "type": "EmptyStatement", "children": value[0] };
2338
+ });
2273
2339
  function EmptyStatement(state) {
2274
2340
  if (state.verbose)
2275
2341
  console.log("ENTER:", "EmptyStatement");
@@ -2289,7 +2355,9 @@ var Civet = (() => {
2289
2355
  return BlockStatement$0(state);
2290
2356
  }
2291
2357
  }
2292
- var IfStatement$0 = $S(If, Condition, Block, $E($S(__, Else, Block)));
2358
+ var IfStatement$0 = $T($S(If, Condition, Block, $E($S(__, Else, Block))), function(value) {
2359
+ return { "type": "IfStatement", "children": value };
2360
+ });
2293
2361
  var IfStatement$1 = $TS($S(Unless, Condition, Block), function($skip, $loc, $0, $1, $2, $3) {
2294
2362
  var kind = $1;
2295
2363
  var condition = $2;
@@ -2303,7 +2371,10 @@ var Civet = (() => {
2303
2371
  c.token = "))";
2304
2372
  });
2305
2373
  kind.token = "if";
2306
- return [kind, condition, block];
2374
+ return {
2375
+ type: "IfStatement",
2376
+ children: [kind, condition, block]
2377
+ };
2307
2378
  });
2308
2379
  function IfStatement(state) {
2309
2380
  if (state.tokenize) {
@@ -2315,8 +2386,12 @@ var Civet = (() => {
2315
2386
  var IterationStatement$0 = LoopStatement;
2316
2387
  var IterationStatement$1 = DoWhileStatement;
2317
2388
  var IterationStatement$2 = WhileStatement;
2318
- var IterationStatement$3 = ForStatement;
2319
- var IterationStatement$4 = ForInOfStatement;
2389
+ var IterationStatement$3 = $T($S(ForStatement), function(value) {
2390
+ return { "type": "IterationStatement", "children": value };
2391
+ });
2392
+ var IterationStatement$4 = $T($S(ForInOfStatement), function(value) {
2393
+ return { "type": "IterationStatement", "children": value };
2394
+ });
2320
2395
  function IterationStatement(state) {
2321
2396
  if (state.tokenize) {
2322
2397
  return $TOKEN("IterationStatement", state, IterationStatement$0(state) || IterationStatement$1(state) || IterationStatement$2(state) || IterationStatement$3(state) || IterationStatement$4(state));
@@ -2324,7 +2399,9 @@ var Civet = (() => {
2324
2399
  return IterationStatement$0(state) || IterationStatement$1(state) || IterationStatement$2(state) || IterationStatement$3(state) || IterationStatement$4(state);
2325
2400
  }
2326
2401
  }
2327
- var LoopStatement$0 = $S(Loop, Block);
2402
+ var LoopStatement$0 = $T($S(Loop, Block), function(value) {
2403
+ return { "type": "IterationStatement", "children": value };
2404
+ });
2328
2405
  function LoopStatement(state) {
2329
2406
  if (state.verbose)
2330
2407
  console.log("ENTER:", "LoopStatement");
@@ -2334,7 +2411,9 @@ var Civet = (() => {
2334
2411
  return LoopStatement$0(state);
2335
2412
  }
2336
2413
  }
2337
- var DoWhileStatement$0 = $S($EXPECT($L73, fail, 'DoWhileStatement "do"'), NonIdContinue, Block, __, WhileClause);
2414
+ var DoWhileStatement$0 = $T($S($EXPECT($L73, fail, 'DoWhileStatement "do"'), NonIdContinue, Block, __, WhileClause), function(value) {
2415
+ return { "type": "IterationStatement", "children": value };
2416
+ });
2338
2417
  function DoWhileStatement(state) {
2339
2418
  if (state.verbose)
2340
2419
  console.log("ENTER:", "DoWhileStatement");
@@ -2344,7 +2423,9 @@ var Civet = (() => {
2344
2423
  return DoWhileStatement$0(state);
2345
2424
  }
2346
2425
  }
2347
- var WhileStatement$0 = $S(WhileClause, Block);
2426
+ var WhileStatement$0 = $T($S(WhileClause, Block), function(value) {
2427
+ return { "type": "IterationStatement", "children": value };
2428
+ });
2348
2429
  function WhileStatement(state) {
2349
2430
  if (state.verbose)
2350
2431
  console.log("ENTER:", "WhileStatement");
@@ -2413,7 +2494,9 @@ var Civet = (() => {
2413
2494
  return ForBinding$0(state) || ForBinding$1(state);
2414
2495
  }
2415
2496
  }
2416
- var SwitchStatement$0 = $S(Switch, Condition, CaseBlock);
2497
+ var SwitchStatement$0 = $T($S(Switch, Condition, CaseBlock), function(value) {
2498
+ return { "type": "SwitchStatement", "children": value };
2499
+ });
2417
2500
  function SwitchStatement(state) {
2418
2501
  if (state.verbose)
2419
2502
  console.log("ENTER:", "SwitchStatement");
@@ -2423,8 +2506,24 @@ var Civet = (() => {
2423
2506
  return SwitchStatement$0(state);
2424
2507
  }
2425
2508
  }
2426
- var CaseBlock$0 = $S(__, OpenBrace, $Y(EOS), NestedCaseClauses, __, CloseBrace);
2427
- var CaseBlock$1 = $S($Y(EOS), InsertOpenBrace, NestedCaseClauses, InsertNewline, InsertCloseBrace);
2509
+ var CaseBlock$0 = $TS($S(__, OpenBrace, $Y(EOS), NestedCaseClauses, __, CloseBrace), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6) {
2510
+ var clauses = $4;
2511
+ $0.splice(2, 1);
2512
+ return {
2513
+ type: "CaseBlock",
2514
+ clauses,
2515
+ children: $0
2516
+ };
2517
+ });
2518
+ var CaseBlock$1 = $TS($S($Y(EOS), InsertOpenBrace, NestedCaseClauses, InsertNewline, InsertIndent, InsertCloseBrace), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6) {
2519
+ var clauses = $3;
2520
+ $0.shift();
2521
+ return {
2522
+ type: "CaseBlock",
2523
+ clauses,
2524
+ children: $0
2525
+ };
2526
+ });
2428
2527
  function CaseBlock(state) {
2429
2528
  if (state.tokenize) {
2430
2529
  return $TOKEN("CaseBlock", state, CaseBlock$0(state) || CaseBlock$1(state));
@@ -2447,7 +2546,10 @@ var Civet = (() => {
2447
2546
  return NestedCaseClauses$0(state);
2448
2547
  }
2449
2548
  }
2450
- var NestedCaseClause$0 = $S(Nested, CaseClause);
2549
+ var NestedCaseClause$0 = $TS($S(Nested, CaseClause), function($skip, $loc, $0, $1, $2) {
2550
+ $2.children.unshift($1);
2551
+ return $2;
2552
+ });
2451
2553
  function NestedCaseClause(state) {
2452
2554
  if (state.verbose)
2453
2555
  console.log("ENTER:", "NestedCaseClause");
@@ -2457,14 +2559,32 @@ var Civet = (() => {
2457
2559
  return NestedCaseClause$0(state);
2458
2560
  }
2459
2561
  }
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);
2562
+ var CaseClause$0 = $T($S(Case, CaseExpressionList, $C(NestedBlockExpressions, NoExpressions)), function(value) {
2563
+ var exps = value[2];
2564
+ return { "type": "CaseClause", "expressions": exps, "children": value };
2565
+ });
2566
+ var CaseClause$1 = $T($S(When, CaseExpressionList, NestedBlockExpressions, InsertBreak), function(value) {
2567
+ var exps = value[2];
2568
+ return { "type": "WhenClause", "expressions": exps, "children": value };
2569
+ });
2570
+ var CaseClause$2 = $T($S(Default, ImpliedColon, $C(NestedBlockExpressions, NoExpressions)), function(value) {
2571
+ var exps = value[2];
2572
+ return { "type": "DefaultClause", "expressions": exps, "children": value };
2573
+ });
2574
+ var CaseClause$3 = $TS($S(Else, ImpliedColon, NestedBlockExpressions), function($skip, $loc, $0, $1, $2, $3) {
2575
+ var exps = $3;
2576
+ $1.token = "default";
2577
+ return {
2578
+ type: "DefaultClause",
2579
+ expressions: exps,
2580
+ children: $0
2581
+ };
2582
+ });
2463
2583
  function CaseClause(state) {
2464
2584
  if (state.tokenize) {
2465
- return $TOKEN("CaseClause", state, CaseClause$0(state) || CaseClause$1(state) || CaseClause$2(state));
2585
+ return $TOKEN("CaseClause", state, CaseClause$0(state) || CaseClause$1(state) || CaseClause$2(state) || CaseClause$3(state));
2466
2586
  } else {
2467
- return CaseClause$0(state) || CaseClause$1(state) || CaseClause$2(state);
2587
+ return CaseClause$0(state) || CaseClause$1(state) || CaseClause$2(state) || CaseClause$3(state);
2468
2588
  }
2469
2589
  }
2470
2590
  var CaseExpressionList$0 = $TS($S($S($Q(_), ExpressionWithIndentedApplicationSuppressed, ImpliedColon), $Q($S(__, Comma, ExpressionWithIndentedApplicationSuppressed, ImpliedColon))), function($skip, $loc, $0, $1, $2) {
@@ -2486,6 +2606,18 @@ var Civet = (() => {
2486
2606
  return CaseExpressionList$0(state);
2487
2607
  }
2488
2608
  }
2609
+ var NoExpressions$0 = $T($EXPECT($L1, fail, 'NoExpressions ""'), function(value) {
2610
+ return [];
2611
+ });
2612
+ function NoExpressions(state) {
2613
+ if (state.verbose)
2614
+ console.log("ENTER:", "NoExpressions");
2615
+ if (state.tokenize) {
2616
+ return $TOKEN("NoExpressions", state, NoExpressions$0(state));
2617
+ } else {
2618
+ return NoExpressions$0(state);
2619
+ }
2620
+ }
2489
2621
  var ImpliedColon$0 = $S(__, Colon);
2490
2622
  var ImpliedColon$1 = $TV($EXPECT($L1, fail, 'ImpliedColon ""'), function($skip, $loc, $0, $1) {
2491
2623
  return { $loc, token: ":" };
@@ -2498,12 +2630,20 @@ var Civet = (() => {
2498
2630
  }
2499
2631
  }
2500
2632
  var TryStatement$0 = $TS($S(Try, BracedBlock, $E(CatchClause), $E(Finally)), function($skip, $loc, $0, $1, $2, $3, $4) {
2633
+ var t = $1;
2634
+ var b = $2;
2501
2635
  var c = $3;
2502
2636
  var f = $4;
2503
2637
  if (!c && !f) {
2504
- return [$1, $2, " catch {}"];
2638
+ return {
2639
+ type: "TryStatement",
2640
+ children: [t, b, " catch(e) {}"]
2641
+ };
2505
2642
  }
2506
- return [$1, $2, c, f];
2643
+ return {
2644
+ type: "TryStatement",
2645
+ children: [t, b, c, f]
2646
+ };
2507
2647
  });
2508
2648
  function TryStatement(state) {
2509
2649
  if (state.verbose)
@@ -2525,7 +2665,7 @@ var Civet = (() => {
2525
2665
  }
2526
2666
  }
2527
2667
  var CatchBind$0 = $S(__, OpenParen, __, CatchParameter, __, CloseParen);
2528
- var CatchBind$1 = $S(__, InsertOpenParen, CatchParameter, InsertCloseParen);
2668
+ var CatchBind$1 = $S($N(EOS), $Q(TrailingComment), InsertOpenParen, CatchParameter, InsertCloseParen);
2529
2669
  function CatchBind(state) {
2530
2670
  if (state.tokenize) {
2531
2671
  return $TOKEN("CatchBind", state, CatchBind$0(state) || CatchBind$1(state));
@@ -2599,11 +2739,21 @@ var Civet = (() => {
2599
2739
  return ExpressionStatement$0(state);
2600
2740
  }
2601
2741
  }
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);
2742
+ var KeywordStatement$0 = $T($S($EXPECT($L77, fail, 'KeywordStatement "break"'), NonIdContinue), function(value) {
2743
+ return { "type": "BreakStatement", "children": value };
2744
+ });
2745
+ var KeywordStatement$1 = $T($S($EXPECT($L78, fail, 'KeywordStatement "continue"'), NonIdContinue), function(value) {
2746
+ return { "type": "ContinueStatement", "children": value };
2747
+ });
2748
+ var KeywordStatement$2 = $T($S($EXPECT($L79, fail, 'KeywordStatement "debugger"'), NonIdContinue), function(value) {
2749
+ return { "type": "DebuggerStatement", "children": value };
2750
+ });
2751
+ var KeywordStatement$3 = $T($S(Return, $E(MaybeNestedExpression)), function(value) {
2752
+ return { "type": "ReturnStatement", "children": value };
2753
+ });
2754
+ var KeywordStatement$4 = $T($S(Throw, Expression), function(value) {
2755
+ return { "type": "ThrowStatement", "children": value };
2756
+ });
2607
2757
  function KeywordStatement(state) {
2608
2758
  if (state.tokenize) {
2609
2759
  return $TOKEN("KeywordStatement", state, KeywordStatement$0(state) || KeywordStatement$1(state) || KeywordStatement$2(state) || KeywordStatement$3(state) || KeywordStatement$4(state));
@@ -2620,7 +2770,7 @@ var Civet = (() => {
2620
2770
  return MaybeNestedExpression$0(state) || MaybeNestedExpression$1(state);
2621
2771
  }
2622
2772
  }
2623
- var ImportDeclaration$0 = $T($S($EXPECT($L81, fail, 'ImportDeclaration "import type"'), NonIdContinue, __, ImportClause, __, FromClause), function(value) {
2773
+ var ImportDeclaration$0 = $T($S($EXPECT($L80, fail, 'ImportDeclaration "import type"'), NonIdContinue, __, ImportClause, __, FromClause), function(value) {
2624
2774
  return { "ts": true, "children": value };
2625
2775
  });
2626
2776
  var ImportDeclaration$1 = $S(Import, __, ImportClause, __, FromClause);
@@ -2758,7 +2908,7 @@ var Civet = (() => {
2758
2908
  return ImportedBinding$0(state);
2759
2909
  }
2760
2910
  }
2761
- var ExportDeclaration$0 = $S(Export, __, $EXPECT($L82, fail, 'ExportDeclaration "default"'), NonIdContinue, __, $C(HoistableDeclaration, ClassDeclaration, AssignmentExpression));
2911
+ var ExportDeclaration$0 = $S(Export, __, $EXPECT($L81, fail, 'ExportDeclaration "default"'), NonIdContinue, __, $C(HoistableDeclaration, ClassDeclaration, AssignmentExpression));
2762
2912
  var ExportDeclaration$1 = $S(Export, __, ExportFromClause, __, FromClause);
2763
2913
  var ExportDeclaration$2 = $S(Export, __, $C(NamedExports, VariableStatement, Declaration));
2764
2914
  function ExportDeclaration(state) {
@@ -2818,7 +2968,9 @@ var Civet = (() => {
2818
2968
  return HoistableDeclaration$0(state);
2819
2969
  }
2820
2970
  }
2821
- var LexicalDeclaration$0 = $S(LetOrConst, __, LexicalBinding, $Q($S(__, Comma, __, LexicalBinding)));
2971
+ var LexicalDeclaration$0 = $T($S(LetOrConst, __, LexicalBinding, $Q($S(__, Comma, __, LexicalBinding))), function(value) {
2972
+ return { "type": "VariableDeclaration", "children": value };
2973
+ });
2822
2974
  var LexicalDeclaration$1 = $TS($S(InsertConst, $C(BindingPattern, BindingIdentifier), $E(TypeSuffix), __, ConstAssignment, AssignmentExpression), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6) {
2823
2975
  var c = $1;
2824
2976
  var ca = $5;
@@ -2826,7 +2978,10 @@ var Civet = (() => {
2826
2978
  pos: ca.$loc.pos - 1,
2827
2979
  length: ca.$loc.length + 1
2828
2980
  };
2829
- return $0;
2981
+ return {
2982
+ type: "VariableDeclaration",
2983
+ children: $0
2984
+ };
2830
2985
  });
2831
2986
  function LexicalDeclaration(state) {
2832
2987
  if (state.tokenize) {
@@ -2835,7 +2990,7 @@ var Civet = (() => {
2835
2990
  return LexicalDeclaration$0(state) || LexicalDeclaration$1(state);
2836
2991
  }
2837
2992
  }
2838
- var ConstAssignment$0 = $TV($EXPECT($L83, fail, 'ConstAssignment ":="'), function($skip, $loc, $0, $1) {
2993
+ var ConstAssignment$0 = $TV($EXPECT($L82, fail, 'ConstAssignment ":="'), function($skip, $loc, $0, $1) {
2839
2994
  return { $loc, token: "=" };
2840
2995
  });
2841
2996
  function ConstAssignment(state) {
@@ -2866,7 +3021,9 @@ var Civet = (() => {
2866
3021
  return Initializer$0(state);
2867
3022
  }
2868
3023
  }
2869
- var VariableStatement$0 = $S(Var, __, VariableDeclarationList);
3024
+ var VariableStatement$0 = $T($S(Var, __, VariableDeclarationList), function(value) {
3025
+ return { "type": "VariableDeclaration", "children": value };
3026
+ });
2870
3027
  function VariableStatement(state) {
2871
3028
  if (state.verbose)
2872
3029
  console.log("ENTER:", "VariableStatement");
@@ -3247,7 +3404,7 @@ var Civet = (() => {
3247
3404
  return MultiLineComment$0(state) || MultiLineComment$1(state);
3248
3405
  }
3249
3406
  }
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) {
3407
+ 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
3408
  return { $loc, token: $1 };
3252
3409
  });
3253
3410
  function JSMultiLineComment(state) {
@@ -3271,7 +3428,7 @@ var Civet = (() => {
3271
3428
  return CoffeeSingleLineComment$0(state);
3272
3429
  }
3273
3430
  }
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) {
3431
+ 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
3432
  return { $loc, token: `/*${$2}*/` };
3276
3433
  });
3277
3434
  function CoffeeMultiLineComment(state) {
@@ -3283,7 +3440,7 @@ var Civet = (() => {
3283
3440
  return CoffeeMultiLineComment$0(state);
3284
3441
  }
3285
3442
  }
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) {
3443
+ 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
3444
  return { $loc, token: $1 };
3288
3445
  });
3289
3446
  function InlineComment(state) {
@@ -3392,7 +3549,7 @@ var Civet = (() => {
3392
3549
  return Loc$0(state);
3393
3550
  }
3394
3551
  }
3395
- var As$0 = $TS($S($EXPECT($L87, fail, 'As "as"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3552
+ var As$0 = $TS($S($EXPECT($L86, fail, 'As "as"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3396
3553
  return { $loc, token: $1 };
3397
3554
  });
3398
3555
  function As(state) {
@@ -3404,7 +3561,7 @@ var Civet = (() => {
3404
3561
  return As$0(state);
3405
3562
  }
3406
3563
  }
3407
- var Async$0 = $TV($EXPECT($L88, fail, 'Async "async"'), function($skip, $loc, $0, $1) {
3564
+ var Async$0 = $TV($EXPECT($L87, fail, 'Async "async"'), function($skip, $loc, $0, $1) {
3408
3565
  return { $loc, token: $1 };
3409
3566
  });
3410
3567
  function Async(state) {
@@ -3416,7 +3573,7 @@ var Civet = (() => {
3416
3573
  return Async$0(state);
3417
3574
  }
3418
3575
  }
3419
- var Await$0 = $TS($S($EXPECT($L89, fail, 'Await "await"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3576
+ var Await$0 = $TS($S($EXPECT($L88, fail, 'Await "await"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3420
3577
  return { $loc, token: $1 };
3421
3578
  });
3422
3579
  function Await(state) {
@@ -3428,7 +3585,7 @@ var Civet = (() => {
3428
3585
  return Await$0(state);
3429
3586
  }
3430
3587
  }
3431
- var Case$0 = $TS($S($EXPECT($L90, fail, 'Case "case"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3588
+ var Case$0 = $TS($S($EXPECT($L89, fail, 'Case "case"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3432
3589
  return { $loc, token: $1 };
3433
3590
  });
3434
3591
  function Case(state) {
@@ -3440,7 +3597,7 @@ var Civet = (() => {
3440
3597
  return Case$0(state);
3441
3598
  }
3442
3599
  }
3443
- var Catch$0 = $TV($EXPECT($L91, fail, 'Catch "catch"'), function($skip, $loc, $0, $1) {
3600
+ var Catch$0 = $TV($EXPECT($L90, fail, 'Catch "catch"'), function($skip, $loc, $0, $1) {
3444
3601
  return { $loc, token: $1 };
3445
3602
  });
3446
3603
  function Catch(state) {
@@ -3452,7 +3609,7 @@ var Civet = (() => {
3452
3609
  return Catch$0(state);
3453
3610
  }
3454
3611
  }
3455
- var Class$0 = $TV($EXPECT($L92, fail, 'Class "class"'), function($skip, $loc, $0, $1) {
3612
+ var Class$0 = $TV($EXPECT($L91, fail, 'Class "class"'), function($skip, $loc, $0, $1) {
3456
3613
  return { $loc, token: $1 };
3457
3614
  });
3458
3615
  function Class(state) {
@@ -3500,7 +3657,7 @@ var Civet = (() => {
3500
3657
  return CloseParen$0(state);
3501
3658
  }
3502
3659
  }
3503
- var CoffeeSubstitutionStart$0 = $TV($EXPECT($L93, fail, 'CoffeeSubstitutionStart "#{"'), function($skip, $loc, $0, $1) {
3660
+ var CoffeeSubstitutionStart$0 = $TV($EXPECT($L92, fail, 'CoffeeSubstitutionStart "#{"'), function($skip, $loc, $0, $1) {
3504
3661
  return { $loc, token: "${" };
3505
3662
  });
3506
3663
  function CoffeeSubstitutionStart(state) {
@@ -3512,7 +3669,7 @@ var Civet = (() => {
3512
3669
  return CoffeeSubstitutionStart$0(state);
3513
3670
  }
3514
3671
  }
3515
- var Colon$0 = $TV($EXPECT($L94, fail, 'Colon ":"'), function($skip, $loc, $0, $1) {
3672
+ var Colon$0 = $TV($EXPECT($L93, fail, 'Colon ":"'), function($skip, $loc, $0, $1) {
3516
3673
  return { $loc, token: $1 };
3517
3674
  });
3518
3675
  function Colon(state) {
@@ -3536,7 +3693,7 @@ var Civet = (() => {
3536
3693
  return ConstructorShorthand$0(state);
3537
3694
  }
3538
3695
  }
3539
- var Default$0 = $TS($S($EXPECT($L82, fail, 'Default "default"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3696
+ var Default$0 = $TS($S($EXPECT($L81, fail, 'Default "default"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3540
3697
  return { $loc, token: $1 };
3541
3698
  });
3542
3699
  function Default(state) {
@@ -3548,7 +3705,7 @@ var Civet = (() => {
3548
3705
  return Default$0(state);
3549
3706
  }
3550
3707
  }
3551
- var Dot$0 = $TV($EXPECT($L95, fail, 'Dot "."'), function($skip, $loc, $0, $1) {
3708
+ var Dot$0 = $TV($EXPECT($L94, fail, 'Dot "."'), function($skip, $loc, $0, $1) {
3552
3709
  return { $loc, token: $1 };
3553
3710
  });
3554
3711
  function Dot(state) {
@@ -3560,7 +3717,7 @@ var Civet = (() => {
3560
3717
  return Dot$0(state);
3561
3718
  }
3562
3719
  }
3563
- var DoubleQuote$0 = $TV($EXPECT($L96, fail, 'DoubleQuote "\\\\\\""'), function($skip, $loc, $0, $1) {
3720
+ var DoubleQuote$0 = $TV($EXPECT($L95, fail, 'DoubleQuote "\\\\\\""'), function($skip, $loc, $0, $1) {
3564
3721
  return { $loc, token: $1 };
3565
3722
  });
3566
3723
  function DoubleQuote(state) {
@@ -3572,7 +3729,7 @@ var Civet = (() => {
3572
3729
  return DoubleQuote$0(state);
3573
3730
  }
3574
3731
  }
3575
- var Else$0 = $TV($EXPECT($L97, fail, 'Else "else"'), function($skip, $loc, $0, $1) {
3732
+ var Else$0 = $TV($EXPECT($L96, fail, 'Else "else"'), function($skip, $loc, $0, $1) {
3576
3733
  return { $loc, token: $1 };
3577
3734
  });
3578
3735
  function Else(state) {
@@ -3596,7 +3753,7 @@ var Civet = (() => {
3596
3753
  return Equals$0(state);
3597
3754
  }
3598
3755
  }
3599
- var Export$0 = $TS($S($EXPECT($L98, fail, 'Export "export"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3756
+ var Export$0 = $TS($S($EXPECT($L97, fail, 'Export "export"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3600
3757
  return { $loc, token: $1 };
3601
3758
  });
3602
3759
  function Export(state) {
@@ -3608,7 +3765,7 @@ var Civet = (() => {
3608
3765
  return Export$0(state);
3609
3766
  }
3610
3767
  }
3611
- var For$0 = $TS($S($EXPECT($L99, fail, 'For "for"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3768
+ var For$0 = $TS($S($EXPECT($L98, fail, 'For "for"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3612
3769
  return { $loc, token: $1 };
3613
3770
  });
3614
3771
  function For(state) {
@@ -3620,7 +3777,7 @@ var Civet = (() => {
3620
3777
  return For$0(state);
3621
3778
  }
3622
3779
  }
3623
- var From$0 = $TS($S($EXPECT($L100, fail, 'From "from"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3780
+ var From$0 = $TS($S($EXPECT($L99, fail, 'From "from"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3624
3781
  return { $loc, token: $1 };
3625
3782
  });
3626
3783
  function From(state) {
@@ -3632,7 +3789,7 @@ var Civet = (() => {
3632
3789
  return From$0(state);
3633
3790
  }
3634
3791
  }
3635
- var Function$0 = $TV($EXPECT($L101, fail, 'Function "function"'), function($skip, $loc, $0, $1) {
3792
+ var Function$0 = $TV($EXPECT($L100, fail, 'Function "function"'), function($skip, $loc, $0, $1) {
3636
3793
  return { $loc, token: $1 };
3637
3794
  });
3638
3795
  function Function(state) {
@@ -3644,7 +3801,7 @@ var Civet = (() => {
3644
3801
  return Function$0(state);
3645
3802
  }
3646
3803
  }
3647
- var GetOrSet$0 = $TS($S($C($EXPECT($L102, fail, 'GetOrSet "get"'), $EXPECT($L103, fail, 'GetOrSet "set"')), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3804
+ var GetOrSet$0 = $TS($S($C($EXPECT($L101, fail, 'GetOrSet "get"'), $EXPECT($L102, fail, 'GetOrSet "set"')), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3648
3805
  return { $loc, token: $1 };
3649
3806
  });
3650
3807
  function GetOrSet(state) {
@@ -3656,7 +3813,7 @@ var Civet = (() => {
3656
3813
  return GetOrSet$0(state);
3657
3814
  }
3658
3815
  }
3659
- var If$0 = $TV($EXPECT($L104, fail, 'If "if"'), function($skip, $loc, $0, $1) {
3816
+ var If$0 = $TV($EXPECT($L103, fail, 'If "if"'), function($skip, $loc, $0, $1) {
3660
3817
  return { $loc, token: $1 };
3661
3818
  });
3662
3819
  function If(state) {
@@ -3692,7 +3849,7 @@ var Civet = (() => {
3692
3849
  return In$0(state);
3693
3850
  }
3694
3851
  }
3695
- var LetOrConst$0 = $TV($C($EXPECT($L105, fail, 'LetOrConst "let"'), $EXPECT($L106, fail, 'LetOrConst "const"')), function($skip, $loc, $0, $1) {
3852
+ var LetOrConst$0 = $TV($C($EXPECT($L104, fail, 'LetOrConst "let"'), $EXPECT($L105, fail, 'LetOrConst "const"')), function($skip, $loc, $0, $1) {
3696
3853
  return { $loc, token: $1 };
3697
3854
  });
3698
3855
  function LetOrConst(state) {
@@ -3704,7 +3861,7 @@ var Civet = (() => {
3704
3861
  return LetOrConst$0(state);
3705
3862
  }
3706
3863
  }
3707
- var Loop$0 = $TS($S($EXPECT($L107, fail, 'Loop "loop"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3864
+ var Loop$0 = $TS($S($EXPECT($L106, fail, 'Loop "loop"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3708
3865
  return { $loc, token: "while(true)" };
3709
3866
  });
3710
3867
  function Loop(state) {
@@ -3716,7 +3873,7 @@ var Civet = (() => {
3716
3873
  return Loop$0(state);
3717
3874
  }
3718
3875
  }
3719
- var New$0 = $TV($EXPECT($L108, fail, 'New "new"'), function($skip, $loc, $0, $1) {
3876
+ var New$0 = $TV($EXPECT($L107, fail, 'New "new"'), function($skip, $loc, $0, $1) {
3720
3877
  return { $loc, token: $1 };
3721
3878
  });
3722
3879
  function New(state) {
@@ -3728,7 +3885,7 @@ var Civet = (() => {
3728
3885
  return New$0(state);
3729
3886
  }
3730
3887
  }
3731
- var Of$0 = $TV($EXPECT($L109, fail, 'Of "of"'), function($skip, $loc, $0, $1) {
3888
+ var Of$0 = $TV($EXPECT($L108, fail, 'Of "of"'), function($skip, $loc, $0, $1) {
3732
3889
  return { $loc, token: $1 };
3733
3890
  });
3734
3891
  function Of(state) {
@@ -3740,7 +3897,7 @@ var Civet = (() => {
3740
3897
  return Of$0(state);
3741
3898
  }
3742
3899
  }
3743
- var OpenBrace$0 = $TV($EXPECT($L110, fail, 'OpenBrace "{"'), function($skip, $loc, $0, $1) {
3900
+ var OpenBrace$0 = $TV($EXPECT($L109, fail, 'OpenBrace "{"'), function($skip, $loc, $0, $1) {
3744
3901
  return { $loc, token: $1 };
3745
3902
  });
3746
3903
  function OpenBrace(state) {
@@ -3752,7 +3909,7 @@ var Civet = (() => {
3752
3909
  return OpenBrace$0(state);
3753
3910
  }
3754
3911
  }
3755
- var OpenBracket$0 = $TV($EXPECT($L111, fail, 'OpenBracket "["'), function($skip, $loc, $0, $1) {
3912
+ var OpenBracket$0 = $TV($EXPECT($L110, fail, 'OpenBracket "["'), function($skip, $loc, $0, $1) {
3756
3913
  return { $loc, token: $1 };
3757
3914
  });
3758
3915
  function OpenBracket(state) {
@@ -3764,7 +3921,7 @@ var Civet = (() => {
3764
3921
  return OpenBracket$0(state);
3765
3922
  }
3766
3923
  }
3767
- var OpenParen$0 = $TV($EXPECT($L112, fail, 'OpenParen "("'), function($skip, $loc, $0, $1) {
3924
+ var OpenParen$0 = $TV($EXPECT($L111, fail, 'OpenParen "("'), function($skip, $loc, $0, $1) {
3768
3925
  return { $loc, token: $1 };
3769
3926
  });
3770
3927
  function OpenParen(state) {
@@ -3776,7 +3933,7 @@ var Civet = (() => {
3776
3933
  return OpenParen$0(state);
3777
3934
  }
3778
3935
  }
3779
- var QuestionMark$0 = $TV($EXPECT($L113, fail, 'QuestionMark "?"'), function($skip, $loc, $0, $1) {
3936
+ var QuestionMark$0 = $TV($EXPECT($L112, fail, 'QuestionMark "?"'), function($skip, $loc, $0, $1) {
3780
3937
  return { $loc, token: $1 };
3781
3938
  });
3782
3939
  function QuestionMark(state) {
@@ -3788,7 +3945,7 @@ var Civet = (() => {
3788
3945
  return QuestionMark$0(state);
3789
3946
  }
3790
3947
  }
3791
- var Return$0 = $TS($S($EXPECT($L114, fail, 'Return "return"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3948
+ var Return$0 = $TS($S($EXPECT($L113, fail, 'Return "return"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3792
3949
  return { $loc, token: $1 };
3793
3950
  });
3794
3951
  function Return(state) {
@@ -3812,7 +3969,7 @@ var Civet = (() => {
3812
3969
  return Semicolon$0(state);
3813
3970
  }
3814
3971
  }
3815
- var SingleQuote$0 = $TV($EXPECT($L115, fail, `SingleQuote "'"`), function($skip, $loc, $0, $1) {
3972
+ var SingleQuote$0 = $TV($EXPECT($L114, fail, `SingleQuote "'"`), function($skip, $loc, $0, $1) {
3816
3973
  return { $loc, token: $1 };
3817
3974
  });
3818
3975
  function SingleQuote(state) {
@@ -3836,10 +3993,10 @@ var Civet = (() => {
3836
3993
  return Star$0(state);
3837
3994
  }
3838
3995
  }
3839
- var Static$0 = $TV($EXPECT($L116, fail, 'Static "static"'), function($skip, $loc, $0, $1) {
3996
+ var Static$0 = $TV($EXPECT($L115, fail, 'Static "static"'), function($skip, $loc, $0, $1) {
3840
3997
  return { $loc, token: $1 };
3841
3998
  });
3842
- var Static$1 = $TS($S($EXPECT($L9, fail, 'Static "@"'), $N($EXPECT($L112, fail, 'Static "("'))), function($skip, $loc, $0, $1, $2) {
3999
+ var Static$1 = $TS($S($EXPECT($L9, fail, 'Static "@"'), $N($EXPECT($L111, fail, 'Static "("'))), function($skip, $loc, $0, $1, $2) {
3843
4000
  return { $loc, token: "static " };
3844
4001
  });
3845
4002
  function Static(state) {
@@ -3849,7 +4006,7 @@ var Civet = (() => {
3849
4006
  return Static$0(state) || Static$1(state);
3850
4007
  }
3851
4008
  }
3852
- var SubstitutionStart$0 = $TV($EXPECT($L117, fail, 'SubstitutionStart "${"'), function($skip, $loc, $0, $1) {
4009
+ var SubstitutionStart$0 = $TV($EXPECT($L116, fail, 'SubstitutionStart "${"'), function($skip, $loc, $0, $1) {
3853
4010
  return { $loc, token: $1 };
3854
4011
  });
3855
4012
  function SubstitutionStart(state) {
@@ -3861,7 +4018,7 @@ var Civet = (() => {
3861
4018
  return SubstitutionStart$0(state);
3862
4019
  }
3863
4020
  }
3864
- var Switch$0 = $TS($S($EXPECT($L118, fail, 'Switch "switch"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4021
+ var Switch$0 = $TS($S($EXPECT($L117, fail, 'Switch "switch"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3865
4022
  return { $loc, token: $1 };
3866
4023
  });
3867
4024
  function Switch(state) {
@@ -3873,7 +4030,7 @@ var Civet = (() => {
3873
4030
  return Switch$0(state);
3874
4031
  }
3875
4032
  }
3876
- var Target$0 = $TV($EXPECT($L119, fail, 'Target "target"'), function($skip, $loc, $0, $1) {
4033
+ var Target$0 = $TV($EXPECT($L118, fail, 'Target "target"'), function($skip, $loc, $0, $1) {
3877
4034
  return { $loc, token: $1 };
3878
4035
  });
3879
4036
  function Target(state) {
@@ -3885,6 +4042,18 @@ var Civet = (() => {
3885
4042
  return Target$0(state);
3886
4043
  }
3887
4044
  }
4045
+ var Throw$0 = $TS($S($EXPECT($L119, fail, 'Throw "throw"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4046
+ return { $loc, token: $1 };
4047
+ });
4048
+ function Throw(state) {
4049
+ if (state.verbose)
4050
+ console.log("ENTER:", "Throw");
4051
+ if (state.tokenize) {
4052
+ return $TOKEN("Throw", state, Throw$0(state));
4053
+ } else {
4054
+ return Throw$0(state);
4055
+ }
4056
+ }
3888
4057
  var TripleDoubleQuote$0 = $TV($EXPECT($L120, fail, 'TripleDoubleQuote "\\\\\\"\\\\\\"\\\\\\""'), function($skip, $loc, $0, $1) {
3889
4058
  return { $loc, token: "`" };
3890
4059
  });
@@ -4722,6 +4891,7 @@ var Civet = (() => {
4722
4891
  module.indentLevels = [0];
4723
4892
  module.verbose = false;
4724
4893
  module.coffeeCompat = false;
4894
+ module.implicitReturns = true;
4725
4895
  });
4726
4896
  function Reset(state) {
4727
4897
  if (state.verbose)
@@ -4738,6 +4908,81 @@ var Civet = (() => {
4738
4908
  const compatRe = /use coffee-compat/;
4739
4909
  module.coffeeCompat = directives.some((d) => d[1].token?.match(compatRe));
4740
4910
  }
4911
+ function hasReturnStatement(node) {
4912
+ if (!node)
4913
+ return false;
4914
+ if (Array.isArray(node))
4915
+ return node.some(hasReturnStatement);
4916
+ if (node.type === "ReturnStatement")
4917
+ return true;
4918
+ if (node.type === "FunctionExpression")
4919
+ return false;
4920
+ if (node.children)
4921
+ return hasReturnStatement(node.children);
4922
+ return false;
4923
+ }
4924
+ function insertReturn(node) {
4925
+ if (!node)
4926
+ return;
4927
+ switch (node.type) {
4928
+ case "AssignmentExpression":
4929
+ node.children.unshift("return ");
4930
+ return;
4931
+ case "BlockStatement":
4932
+ insertReturn(node.expressions[node.expressions.length - 1]);
4933
+ return;
4934
+ case "CaseBlock":
4935
+ node.clauses.forEach((clause) => {
4936
+ insertReturn(clause);
4937
+ });
4938
+ return;
4939
+ case "CaseClause":
4940
+ return;
4941
+ case "WhenClause":
4942
+ node.children.pop();
4943
+ insertReturn(node.expressions[node.expressions.length - 1]);
4944
+ return;
4945
+ case "DefaultClause":
4946
+ insertReturn(node.expressions[node.expressions.length - 1]);
4947
+ return;
4948
+ }
4949
+ if (!Array.isArray(node))
4950
+ return;
4951
+ const [, exp] = node;
4952
+ debugger;
4953
+ if (!exp)
4954
+ return;
4955
+ switch (exp.type) {
4956
+ case "BreakStatement":
4957
+ case "ContinueStatement":
4958
+ case "DebuggerStatement":
4959
+ case "EmptyStatement":
4960
+ case "IterationStatement":
4961
+ case "ThrowStatement":
4962
+ case "VariableDeclaration":
4963
+ return;
4964
+ case "IfStatement":
4965
+ debugger;
4966
+ insertReturn(exp.children[2]);
4967
+ if (exp.children[3])
4968
+ insertReturn(exp.children[3][2]);
4969
+ return;
4970
+ case "SwitchStatement":
4971
+ insertReturn(exp.children[2]);
4972
+ return;
4973
+ case "TryStatement":
4974
+ insertReturn(exp.children[1]);
4975
+ insertReturn(exp.children[2][3]);
4976
+ return;
4977
+ }
4978
+ node.splice(1, 0, "return ");
4979
+ }
4980
+ module.addImplicitReturns = function(block) {
4981
+ if (hasReturnStatement(block))
4982
+ return block;
4983
+ insertReturn(block);
4984
+ return block;
4985
+ };
4741
4986
  module.parsePosition = function() {
4742
4987
  let s = Error().stack.split(/\n at /);
4743
4988
  s.shift();
@@ -4745,6 +4990,25 @@ var Civet = (() => {
4745
4990
  s = s.slice(1, s.indexOf("Program") + 1);
4746
4991
  return s;
4747
4992
  };
4993
+ module.prune = function(node) {
4994
+ if (node === null || node === void 0)
4995
+ return;
4996
+ if (node.length === 0)
4997
+ return;
4998
+ if (Array.isArray(node)) {
4999
+ const a = node.map((n) => module.prune(n)).filter((n) => !!n);
5000
+ if (a.length > 1)
5001
+ return a;
5002
+ if (a.length === 1)
5003
+ return a[0];
5004
+ return;
5005
+ }
5006
+ if (node.children != null) {
5007
+ node.children = module.prune(node.children);
5008
+ return node;
5009
+ }
5010
+ return node;
5011
+ };
4748
5012
  module.insertTrimmingSpace = function(spacing, c) {
4749
5013
  let target = spacing;
4750
5014
  while (Array.isArray(target)) {
@@ -5014,7 +5278,7 @@ var Civet = (() => {
5014
5278
  return;
5015
5279
  }
5016
5280
  if (node.children != null) {
5017
- node.children = prune(node.children);
5281
+ node.children = prune(node.children) || [];
5018
5282
  return node;
5019
5283
  }
5020
5284
  return node;