@danielx/civet 0.4.13 → 0.4.15

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
@@ -452,6 +452,7 @@ var Civet = (() => {
452
452
  AdditionalReservedWords,
453
453
  MemberExpression,
454
454
  MemberExpressionRest,
455
+ MemberBracketContent,
455
456
  PropertyAccess,
456
457
  SuperProperty,
457
458
  MetaProperty,
@@ -520,17 +521,21 @@ var Civet = (() => {
520
521
  UnaryOp,
521
522
  ModuleItem,
522
523
  StatementListItem,
523
- PostfixConditional,
524
+ PostfixStatement,
524
525
  Statement,
525
526
  EmptyStatement,
526
527
  BlockStatement,
527
528
  IfStatement,
529
+ IfClause,
530
+ UnlessClause,
528
531
  IterationStatement,
529
532
  LoopStatement,
533
+ LoopClause,
530
534
  DoWhileStatement,
531
535
  WhileStatement,
532
536
  WhileClause,
533
537
  ForStatement,
538
+ ForClause,
534
539
  ForStatementControl,
535
540
  ForInOfDeclaration,
536
541
  ForDeclaration,
@@ -636,7 +641,9 @@ var Civet = (() => {
636
641
  ConstructorShorthand,
637
642
  Default,
638
643
  Delete,
644
+ Do,
639
645
  Dot,
646
+ DotDot,
640
647
  DotDotDot,
641
648
  DoubleQuote,
642
649
  Else,
@@ -672,9 +679,11 @@ var Civet = (() => {
672
679
  Try,
673
680
  Typeof,
674
681
  Unless,
682
+ Until,
675
683
  Var,
676
684
  Void,
677
685
  When,
686
+ While,
678
687
  Yield,
679
688
  JSXElement,
680
689
  JSXSelfClosingElement,
@@ -836,82 +845,83 @@ var Civet = (() => {
836
845
  var $L69 = $L("^");
837
846
  var $L70 = $L("|");
838
847
  var $L71 = $L(";");
839
- var $L72 = $L("do");
840
- var $L73 = $L("while");
841
- var $L74 = $L("until");
842
- var $L75 = $L("finally");
843
- var $L76 = $L("break");
844
- var $L77 = $L("continue");
845
- var $L78 = $L("debugger");
846
- var $L79 = $L("import type");
847
- var $L80 = $L("default");
848
- var $L81 = $L(":=");
849
- var $L82 = $L("/*");
850
- var $L83 = $L("*/");
851
- var $L84 = $L("###");
852
- var $L85 = $L("as");
853
- var $L86 = $L("async");
854
- var $L87 = $L("await");
855
- var $L88 = $L("`");
856
- var $L89 = $L("case");
857
- var $L90 = $L("catch");
858
- var $L91 = $L("class");
859
- var $L92 = $L("#{");
860
- var $L93 = $L(":");
861
- var $L94 = $L("delete");
862
- var $L95 = $L(".");
863
- var $L96 = $L("...");
864
- var $L97 = $L('"');
865
- var $L98 = $L("else");
866
- var $L99 = $L("export");
867
- var $L100 = $L("for");
868
- var $L101 = $L("from");
869
- var $L102 = $L("function");
870
- var $L103 = $L("get");
871
- var $L104 = $L("set");
872
- var $L105 = $L("if");
873
- var $L106 = $L("let");
874
- var $L107 = $L("const");
875
- var $L108 = $L("loop");
876
- var $L109 = $L("new");
877
- var $L110 = $L("of");
878
- var $L111 = $L("{");
879
- var $L112 = $L("[");
880
- var $L113 = $L("(");
881
- var $L114 = $L("?");
882
- var $L115 = $L("return");
883
- var $L116 = $L("'");
884
- var $L117 = $L("static");
885
- var $L118 = $L("${");
886
- var $L119 = $L("switch");
887
- var $L120 = $L("target");
888
- var $L121 = $L("throw");
889
- var $L122 = $L('"""');
890
- var $L123 = $L("'''");
891
- var $L124 = $L("```");
892
- var $L125 = $L("try");
893
- var $L126 = $L("typeof");
894
- var $L127 = $L("unless");
848
+ var $L72 = $L("finally");
849
+ var $L73 = $L("break");
850
+ var $L74 = $L("continue");
851
+ var $L75 = $L("debugger");
852
+ var $L76 = $L("import type");
853
+ var $L77 = $L("default");
854
+ var $L78 = $L(":=");
855
+ var $L79 = $L("/*");
856
+ var $L80 = $L("*/");
857
+ var $L81 = $L("###");
858
+ var $L82 = $L("as");
859
+ var $L83 = $L("async");
860
+ var $L84 = $L("await");
861
+ var $L85 = $L("`");
862
+ var $L86 = $L("case");
863
+ var $L87 = $L("catch");
864
+ var $L88 = $L("class");
865
+ var $L89 = $L("#{");
866
+ var $L90 = $L(":");
867
+ var $L91 = $L("delete");
868
+ var $L92 = $L("do");
869
+ var $L93 = $L(".");
870
+ var $L94 = $L("..");
871
+ var $L95 = $L("...");
872
+ var $L96 = $L('"');
873
+ var $L97 = $L("else");
874
+ var $L98 = $L("export");
875
+ var $L99 = $L("for");
876
+ var $L100 = $L("from");
877
+ var $L101 = $L("function");
878
+ var $L102 = $L("get");
879
+ var $L103 = $L("set");
880
+ var $L104 = $L("if");
881
+ var $L105 = $L("let");
882
+ var $L106 = $L("const");
883
+ var $L107 = $L("loop");
884
+ var $L108 = $L("new");
885
+ var $L109 = $L("of");
886
+ var $L110 = $L("{");
887
+ var $L111 = $L("[");
888
+ var $L112 = $L("(");
889
+ var $L113 = $L("?");
890
+ var $L114 = $L("return");
891
+ var $L115 = $L("'");
892
+ var $L116 = $L("static");
893
+ var $L117 = $L("${");
894
+ var $L118 = $L("switch");
895
+ var $L119 = $L("target");
896
+ var $L120 = $L("throw");
897
+ var $L121 = $L('"""');
898
+ var $L122 = $L("'''");
899
+ var $L123 = $L("```");
900
+ var $L124 = $L("try");
901
+ var $L125 = $L("typeof");
902
+ var $L126 = $L("unless");
903
+ var $L127 = $L("until");
895
904
  var $L128 = $L("var");
896
905
  var $L129 = $L("void");
897
906
  var $L130 = $L("when");
898
- var $L131 = $L("yield");
899
- var $L132 = $L("/>");
900
- var $L133 = $L("</");
901
- var $L134 = $L("<>");
902
- var $L135 = $L("</>");
903
- var $L136 = $L("declare");
904
- var $L137 = $L("type");
905
- var $L138 = $L("interface");
906
- var $L139 = $L("namespace");
907
- var $L140 = $L("readonly");
908
- var $L141 = $L("asserts");
909
- var $L142 = $L("keyof");
910
- var $L143 = $L("infer");
911
- var $L144 = $L("[]");
912
- var $L145 = $L("civet");
913
- var $L146 = $L(" ");
914
- var $L147 = $L(" ");
907
+ var $L131 = $L("while");
908
+ var $L132 = $L("yield");
909
+ var $L133 = $L("/>");
910
+ var $L134 = $L("</");
911
+ var $L135 = $L("<>");
912
+ var $L136 = $L("</>");
913
+ var $L137 = $L("declare");
914
+ var $L138 = $L("type");
915
+ var $L139 = $L("interface");
916
+ var $L140 = $L("namespace");
917
+ var $L141 = $L("readonly");
918
+ var $L142 = $L("asserts");
919
+ var $L143 = $L("keyof");
920
+ var $L144 = $L("infer");
921
+ var $L145 = $L("[]");
922
+ var $L146 = $L("civet");
923
+ var $L147 = $L(" ");
924
+ var $L148 = $L(" ");
915
925
  var $R0 = $R(new RegExp("(of)(?!\\p{ID_Continue}|[\\u200C\\u200D$])", "suy"));
916
926
  var $R1 = $R(new RegExp("(?:\\p{ID_Start}|[_$])(?:\\p{ID_Continue}|[\\u200C\\u200D$])*", "suy"));
917
927
  var $R2 = $R(new RegExp("[!~+-]", "suy"));
@@ -919,8 +929,8 @@ var Civet = (() => {
919
929
  var $R4 = $R(new RegExp('[^;"\\s]+', "suy"));
920
930
  var $R5 = $R(new RegExp("(?:0|[1-9](?:_[0-9]|[0-9])*)n", "suy"));
921
931
  var $R6 = $R(new RegExp("(?:0|[1-9](?:_[0-9]|[0-9])*)(?=\\.(?:\\p{ID_Start}|[_$]))", "suy"));
922
- var $R7 = $R(new RegExp("(?:0|[1-9](?:_[0-9]|[0-9])*)(?:\\.(?:[0-9](?:_[0-9]|[0-9])*)?)?", "suy"));
923
- var $R8 = $R(new RegExp("(?:\\.(?!\\p{ID_Start})[0-9](?:_[0-9]|[0-9])*)", "suy"));
932
+ var $R7 = $R(new RegExp("(?:0|[1-9](?:_[0-9]|[0-9])*)(?:\\.(?:[0-9](?:_[0-9]|[0-9])*))?", "suy"));
933
+ var $R8 = $R(new RegExp("(?:\\.[0-9](?:_[0-9]|[0-9])*)", "suy"));
924
934
  var $R9 = $R(new RegExp("(?:[eE][+-]?[0-9]+(?:_[0-9]|[0-9])*)", "suy"));
925
935
  var $R10 = $R(new RegExp("0[bB][01](?:[01]|_[01])*n?", "suy"));
926
936
  var $R11 = $R(new RegExp("0[oO][0-7](?:[0-7]|_[0-7])*n?", "suy"));
@@ -936,7 +946,7 @@ var Civet = (() => {
936
946
  var $R21 = $R(new RegExp("(?:\\$(?!\\{)|\\\\.|[^$`])+", "suy"));
937
947
  var $R22 = $R(new RegExp("(?:\\$(?!\\{)|`(?!``)|\\\\.|[^$`])+", "suy"));
938
948
  var $R23 = $R(new RegExp("(?:on|off|yes|no)(?!\\p{ID_Continue})", "suy"));
939
- var $R24 = $R(new RegExp("(?:and|as|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|false|finally|for|function|if|import|in|instanceof|interface|is|new|null|or|return|static|super|switch|this|throw|true|try|typeof|unless|var|void|while|with|yield)(?!\\p{ID_Continue})", "suy"));
949
+ var $R24 = $R(new RegExp("(?:and|as|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|false|finally|for|function|if|import|in|instanceof|interface|is|loop|new|null|or|return|static|super|switch|this|throw|true|try|typeof|unless|until|var|void|while|with|yield)(?!\\p{ID_Continue})", "suy"));
940
950
  var $R25 = $R(new RegExp("\\/\\/[^\\r\\n]*", "suy"));
941
951
  var $R26 = $R(new RegExp(".", "suy"));
942
952
  var $R27 = $R(new RegExp("#([^\\r\\n]*)", "suy"));
@@ -1537,7 +1547,7 @@ var Civet = (() => {
1537
1547
  return MemberExpression$0(state) || MemberExpression$1(state) || MemberExpression$2(state);
1538
1548
  }
1539
1549
  }
1540
- var MemberExpressionRest$0 = $S($E($C(OptionalShorthand, NonNullAssertion)), OpenBracket, Expression, __, CloseBracket);
1550
+ var MemberExpressionRest$0 = $S($E($C(OptionalShorthand, NonNullAssertion)), MemberBracketContent);
1541
1551
  var MemberExpressionRest$1 = $S($E($S($Y(EOS), IndentedFurther)), PropertyAccess);
1542
1552
  var MemberExpressionRest$2 = $TS($S($E($S($Y(EOS), IndentedFurther)), $EXPECT($L12, fail, 'MemberExpressionRest "::"'), $E(IdentifierName)), function($skip, $loc, $0, $1, $2, $3) {
1543
1553
  var id = $3;
@@ -1553,6 +1563,42 @@ var Civet = (() => {
1553
1563
  return MemberExpressionRest$0(state) || MemberExpressionRest$1(state) || MemberExpressionRest$2(state) || MemberExpressionRest$3(state);
1554
1564
  }
1555
1565
  }
1566
+ var MemberBracketContent$0 = $TS($S(OpenBracket, Expression, $E($S($C(DotDotDot, DotDot), $E(Expression))), __, CloseBracket), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
1567
+ if ($3) {
1568
+ const sep = $3[0];
1569
+ const end = $3[1];
1570
+ const inclusive = sep.token === "..";
1571
+ sep.token = ", ";
1572
+ $1.token = ".slice(";
1573
+ $5.token = ")";
1574
+ if (!end) {
1575
+ return {
1576
+ type: "SliceExpression",
1577
+ children: [$1, $2, $4, $5]
1578
+ };
1579
+ }
1580
+ if (inclusive) {
1581
+ return {
1582
+ type: "SliceExpression",
1583
+ children: [$1, $2, sep, ["1 + ", end, " || 1/0"], $4, $5]
1584
+ };
1585
+ }
1586
+ return {
1587
+ type: "SliceExpression",
1588
+ children: [$1, $2, sep, end, $4, $5]
1589
+ };
1590
+ }
1591
+ return $0;
1592
+ });
1593
+ function MemberBracketContent(state) {
1594
+ if (state.verbose)
1595
+ console.log("ENTER:", "MemberBracketContent");
1596
+ if (state.tokenize) {
1597
+ return $TOKEN("MemberBracketContent", state, MemberBracketContent$0(state));
1598
+ } else {
1599
+ return MemberBracketContent$0(state);
1600
+ }
1601
+ }
1556
1602
  var PropertyAccess$0 = $S($E($C(QuestionMark, NonNullAssertion)), Dot, $C(IdentifierName, PrivateIdentifier));
1557
1603
  function PropertyAccess(state) {
1558
1604
  if (state.verbose)
@@ -2437,49 +2483,36 @@ var Civet = (() => {
2437
2483
  return ModuleItem$0(state) || ModuleItem$1(state) || ModuleItem$2(state);
2438
2484
  }
2439
2485
  }
2440
- var StatementListItem$0 = $TS($S($C(Declaration, Statement), $E(PostfixConditional), Loc), function($skip, $loc, $0, $1, $2, $3) {
2486
+ var StatementListItem$0 = Declaration;
2487
+ var StatementListItem$1 = $TS($S(Statement, $Q(TrailingComment), $E(PostfixStatement)), function($skip, $loc, $0, $1, $2, $3) {
2441
2488
  var statement = $1;
2442
- var cond = $2;
2443
- var l = $3;
2444
- if (cond)
2445
- return [cond, statement, { $loc: l.$loc, token: "}" }];
2489
+ var ws = $2;
2490
+ var post = $3;
2491
+ if (post) {
2492
+ post.children.push(statement);
2493
+ if (!module.isWhitespaceOrEmpty(ws))
2494
+ post.children.push(ws);
2495
+ return post;
2496
+ }
2446
2497
  return statement;
2447
2498
  });
2448
2499
  function StatementListItem(state) {
2449
- if (state.verbose)
2450
- console.log("ENTER:", "StatementListItem");
2451
2500
  if (state.tokenize) {
2452
- return $TOKEN("StatementListItem", state, StatementListItem$0(state));
2501
+ return $TOKEN("StatementListItem", state, StatementListItem$0(state) || StatementListItem$1(state));
2453
2502
  } else {
2454
- return StatementListItem$0(state);
2503
+ return StatementListItem$0(state) || StatementListItem$1(state);
2455
2504
  }
2456
2505
  }
2457
- var PostfixConditional$0 = $TS($S($Q(TrailingComment), $C(If, Unless), NonIdContinue, Loc, ExpressionWithIndentedApplicationSuppressed, Loc), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6) {
2458
- var ws = $1;
2459
- var cond = $2;
2460
- var l1 = $4;
2461
- var exp = $5;
2462
- var l2 = $6;
2463
- let openParens = { $loc: l1.$loc, token: "(!(" };
2464
- let closingParens = { $loc: l2.$loc, token: "))" };
2465
- let space = { $loc: l2.$loc, token: " " };
2466
- let openingBrace = { $loc: l2.$loc, token: "{" };
2467
- if (cond.token === "if") {
2468
- cond.token = "if";
2469
- closingParens.token = ")";
2470
- openParens.token = "(";
2471
- } else {
2472
- cond.token = "if";
2473
- }
2474
- return [ws, cond, openParens, exp, closingParens, space, openingBrace];
2475
- });
2476
- function PostfixConditional(state) {
2477
- if (state.verbose)
2478
- console.log("ENTER:", "PostfixConditional");
2506
+ var PostfixStatement$0 = ForClause;
2507
+ var PostfixStatement$1 = IfClause;
2508
+ var PostfixStatement$2 = LoopClause;
2509
+ var PostfixStatement$3 = UnlessClause;
2510
+ var PostfixStatement$4 = WhileClause;
2511
+ function PostfixStatement(state) {
2479
2512
  if (state.tokenize) {
2480
- return $TOKEN("PostfixConditional", state, PostfixConditional$0(state));
2513
+ return $TOKEN("PostfixStatement", state, PostfixStatement$0(state) || PostfixStatement$1(state) || PostfixStatement$2(state) || PostfixStatement$3(state) || PostfixStatement$4(state));
2481
2514
  } else {
2482
- return PostfixConditional$0(state);
2515
+ return PostfixStatement$0(state) || PostfixStatement$1(state) || PostfixStatement$2(state) || PostfixStatement$3(state) || PostfixStatement$4(state);
2483
2516
  }
2484
2517
  }
2485
2518
  var Statement$0 = KeywordStatement;
@@ -2523,13 +2556,43 @@ var Civet = (() => {
2523
2556
  return BlockStatement$0(state);
2524
2557
  }
2525
2558
  }
2526
- var IfStatement$0 = $T($S(If, Condition, Block, $E($S(__, Else, Block))), function(value) {
2559
+ var IfStatement$0 = $TS($S(IfClause, Block, $E($S(__, Else, Block))), function($skip, $loc, $0, $1, $2, $3) {
2560
+ var clause = $1;
2561
+ var block = $2;
2562
+ var e = $3;
2563
+ clause.children.push(block);
2564
+ if (e)
2565
+ clause.children.push(e);
2566
+ return clause;
2567
+ });
2568
+ var IfStatement$1 = $TS($S(UnlessClause, Block), function($skip, $loc, $0, $1, $2) {
2569
+ var clause = $1;
2570
+ var block = $2;
2571
+ clause.children.push(block);
2572
+ return clause;
2573
+ });
2574
+ function IfStatement(state) {
2575
+ if (state.tokenize) {
2576
+ return $TOKEN("IfStatement", state, IfStatement$0(state) || IfStatement$1(state));
2577
+ } else {
2578
+ return IfStatement$0(state) || IfStatement$1(state);
2579
+ }
2580
+ }
2581
+ var IfClause$0 = $T($S(If, Condition), function(value) {
2527
2582
  return { "type": "IfStatement", "children": value };
2528
2583
  });
2529
- var IfStatement$1 = $TS($S(Unless, Condition, Block), function($skip, $loc, $0, $1, $2, $3) {
2584
+ function IfClause(state) {
2585
+ if (state.verbose)
2586
+ console.log("ENTER:", "IfClause");
2587
+ if (state.tokenize) {
2588
+ return $TOKEN("IfClause", state, IfClause$0(state));
2589
+ } else {
2590
+ return IfClause$0(state);
2591
+ }
2592
+ }
2593
+ var UnlessClause$0 = $TS($S(Unless, Condition), function($skip, $loc, $0, $1, $2) {
2530
2594
  var kind = $1;
2531
2595
  var condition = $2;
2532
- var block = $3;
2533
2596
  condition.forEach((c) => {
2534
2597
  if (!c)
2535
2598
  return;
@@ -2541,22 +2604,22 @@ var Civet = (() => {
2541
2604
  kind.token = "if";
2542
2605
  return {
2543
2606
  type: "IfStatement",
2544
- children: [kind, condition, block]
2607
+ children: [kind, condition]
2545
2608
  };
2546
2609
  });
2547
- function IfStatement(state) {
2610
+ function UnlessClause(state) {
2611
+ if (state.verbose)
2612
+ console.log("ENTER:", "UnlessClause");
2548
2613
  if (state.tokenize) {
2549
- return $TOKEN("IfStatement", state, IfStatement$0(state) || IfStatement$1(state));
2614
+ return $TOKEN("UnlessClause", state, UnlessClause$0(state));
2550
2615
  } else {
2551
- return IfStatement$0(state) || IfStatement$1(state);
2616
+ return UnlessClause$0(state);
2552
2617
  }
2553
2618
  }
2554
2619
  var IterationStatement$0 = LoopStatement;
2555
2620
  var IterationStatement$1 = DoWhileStatement;
2556
2621
  var IterationStatement$2 = WhileStatement;
2557
- var IterationStatement$3 = $T($S(ForStatement), function(value) {
2558
- return { "type": "IterationStatement", "children": value };
2559
- });
2622
+ var IterationStatement$3 = ForStatement;
2560
2623
  function IterationStatement(state) {
2561
2624
  if (state.tokenize) {
2562
2625
  return $TOKEN("IterationStatement", state, IterationStatement$0(state) || IterationStatement$1(state) || IterationStatement$2(state) || IterationStatement$3(state));
@@ -2564,8 +2627,11 @@ var Civet = (() => {
2564
2627
  return IterationStatement$0(state) || IterationStatement$1(state) || IterationStatement$2(state) || IterationStatement$3(state);
2565
2628
  }
2566
2629
  }
2567
- var LoopStatement$0 = $T($S(Loop, Block), function(value) {
2568
- return { "type": "IterationStatement", "children": value };
2630
+ var LoopStatement$0 = $TS($S(LoopClause, Block), function($skip, $loc, $0, $1, $2) {
2631
+ var clause = $1;
2632
+ var block = $2;
2633
+ clause.children.push(block);
2634
+ return clause;
2569
2635
  });
2570
2636
  function LoopStatement(state) {
2571
2637
  if (state.verbose)
@@ -2576,7 +2642,19 @@ var Civet = (() => {
2576
2642
  return LoopStatement$0(state);
2577
2643
  }
2578
2644
  }
2579
- var DoWhileStatement$0 = $T($S($EXPECT($L72, fail, 'DoWhileStatement "do"'), NonIdContinue, Block, __, WhileClause), function(value) {
2645
+ var LoopClause$0 = $T($S(Loop), function(value) {
2646
+ return { "type": "IterationStatement", "children": value };
2647
+ });
2648
+ function LoopClause(state) {
2649
+ if (state.verbose)
2650
+ console.log("ENTER:", "LoopClause");
2651
+ if (state.tokenize) {
2652
+ return $TOKEN("LoopClause", state, LoopClause$0(state));
2653
+ } else {
2654
+ return LoopClause$0(state);
2655
+ }
2656
+ }
2657
+ var DoWhileStatement$0 = $T($S(Do, BracedBlock, __, WhileClause), function(value) {
2580
2658
  return { "type": "IterationStatement", "children": value };
2581
2659
  });
2582
2660
  function DoWhileStatement(state) {
@@ -2588,8 +2666,11 @@ var Civet = (() => {
2588
2666
  return DoWhileStatement$0(state);
2589
2667
  }
2590
2668
  }
2591
- var WhileStatement$0 = $T($S(WhileClause, Block), function(value) {
2592
- return { "type": "IterationStatement", "children": value };
2669
+ var WhileStatement$0 = $TS($S(WhileClause, Block), function($skip, $loc, $0, $1, $2) {
2670
+ var clause = $1;
2671
+ var block = $2;
2672
+ clause.children.push(block);
2673
+ return clause;
2593
2674
  });
2594
2675
  function WhileStatement(state) {
2595
2676
  if (state.verbose)
@@ -2600,15 +2681,19 @@ var Civet = (() => {
2600
2681
  return WhileStatement$0(state);
2601
2682
  }
2602
2683
  }
2603
- var WhileClause$0 = $TS($S($C($EXPECT($L73, fail, 'WhileClause "while"'), $EXPECT($L74, fail, 'WhileClause "until"')), NonIdContinue, Condition), function($skip, $loc, $0, $1, $2, $3) {
2684
+ var WhileClause$0 = $TS($S($C(While, Until), Condition), function($skip, $loc, $0, $1, $2) {
2604
2685
  var kind = $1;
2605
- var cond = $3;
2606
- if (kind === "until") {
2686
+ var cond = $2;
2687
+ if (kind.token === "until") {
2607
2688
  cond[1] = "(!(";
2608
- cond[4] = "))";
2609
- return ["while", cond];
2689
+ cond[cond.length - 1] = "))";
2690
+ kind.token = "while";
2691
+ $0 = [kind, cond];
2610
2692
  }
2611
- return $0;
2693
+ return {
2694
+ type: "IterationStatement",
2695
+ children: $0
2696
+ };
2612
2697
  });
2613
2698
  function WhileClause(state) {
2614
2699
  if (state.verbose)
@@ -2619,7 +2704,12 @@ var Civet = (() => {
2619
2704
  return WhileClause$0(state);
2620
2705
  }
2621
2706
  }
2622
- var ForStatement$0 = $S(For, __, ForStatementControl, Block);
2707
+ var ForStatement$0 = $TS($S(ForClause, Block), function($skip, $loc, $0, $1, $2) {
2708
+ var clause = $1;
2709
+ var block = $2;
2710
+ clause.children.push(block);
2711
+ return clause;
2712
+ });
2623
2713
  function ForStatement(state) {
2624
2714
  if (state.verbose)
2625
2715
  console.log("ENTER:", "ForStatement");
@@ -2629,6 +2719,18 @@ var Civet = (() => {
2629
2719
  return ForStatement$0(state);
2630
2720
  }
2631
2721
  }
2722
+ var ForClause$0 = $T($S(For, __, ForStatementControl), function(value) {
2723
+ return { "type": "IterationStatement", "children": value };
2724
+ });
2725
+ function ForClause(state) {
2726
+ if (state.verbose)
2727
+ console.log("ENTER:", "ForClause");
2728
+ if (state.tokenize) {
2729
+ return $TOKEN("ForClause", state, ForClause$0(state));
2730
+ } else {
2731
+ return ForClause$0(state);
2732
+ }
2733
+ }
2632
2734
  var ForStatementControl$0 = $S(OpenParen, __, $C(LexicalDeclaration, VariableStatement, $E(Expression)), __, Semicolon, $E(Expression), Semicolon, $E(Expression), __, CloseParen);
2633
2735
  var ForStatementControl$1 = $S(InsertOpenParen, __, $C(LexicalDeclaration, VariableStatement, $E(Expression)), __, Semicolon, $E(Expression), Semicolon, $E($S($N(EOS), Expression)), InsertCloseParen);
2634
2736
  var ForStatementControl$2 = $S(OpenParen, __, ForInOfDeclaration, __, In, Expression, __, CloseParen);
@@ -2849,7 +2951,7 @@ var Civet = (() => {
2849
2951
  return CatchBind$0(state) || CatchBind$1(state);
2850
2952
  }
2851
2953
  }
2852
- var Finally$0 = $S(__, $EXPECT($L75, fail, 'Finally "finally"'), BracedBlock);
2954
+ var Finally$0 = $S(__, $EXPECT($L72, fail, 'Finally "finally"'), BracedBlock);
2853
2955
  function Finally(state) {
2854
2956
  if (state.verbose)
2855
2957
  console.log("ENTER:", "Finally");
@@ -2869,7 +2971,10 @@ var Civet = (() => {
2869
2971
  }
2870
2972
  }
2871
2973
  var Condition$0 = $S(__, OpenParen, Expression, __, CloseParen);
2872
- var Condition$1 = $S($N(EOS), __, InsertOpenParen, ExpressionWithIndentedApplicationSuppressed, InsertCloseParen);
2974
+ var Condition$1 = $TS($S($N(EOS), __, InsertOpenParen, ExpressionWithIndentedApplicationSuppressed, InsertCloseParen), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
2975
+ $0.shift();
2976
+ return $0;
2977
+ });
2873
2978
  function Condition(state) {
2874
2979
  if (state.tokenize) {
2875
2980
  return $TOKEN("Condition", state, Condition$0(state) || Condition$1(state));
@@ -2915,13 +3020,13 @@ var Civet = (() => {
2915
3020
  return ExpressionStatement$0(state);
2916
3021
  }
2917
3022
  }
2918
- var KeywordStatement$0 = $T($S($EXPECT($L76, fail, 'KeywordStatement "break"'), NonIdContinue), function(value) {
3023
+ var KeywordStatement$0 = $T($S($EXPECT($L73, fail, 'KeywordStatement "break"'), NonIdContinue), function(value) {
2919
3024
  return { "type": "BreakStatement", "children": value };
2920
3025
  });
2921
- var KeywordStatement$1 = $T($S($EXPECT($L77, fail, 'KeywordStatement "continue"'), NonIdContinue), function(value) {
3026
+ var KeywordStatement$1 = $T($S($EXPECT($L74, fail, 'KeywordStatement "continue"'), NonIdContinue), function(value) {
2922
3027
  return { "type": "ContinueStatement", "children": value };
2923
3028
  });
2924
- var KeywordStatement$2 = $T($S($EXPECT($L78, fail, 'KeywordStatement "debugger"'), NonIdContinue), function(value) {
3029
+ var KeywordStatement$2 = $T($S($EXPECT($L75, fail, 'KeywordStatement "debugger"'), NonIdContinue), function(value) {
2925
3030
  return { "type": "DebuggerStatement", "children": value };
2926
3031
  });
2927
3032
  var KeywordStatement$3 = $T($S(Return, $E(MaybeNestedExpression)), function(value) {
@@ -2946,7 +3051,7 @@ var Civet = (() => {
2946
3051
  return MaybeNestedExpression$0(state) || MaybeNestedExpression$1(state);
2947
3052
  }
2948
3053
  }
2949
- var ImportDeclaration$0 = $T($S($EXPECT($L79, fail, 'ImportDeclaration "import type"'), NonIdContinue, __, ImportClause, __, FromClause), function(value) {
3054
+ var ImportDeclaration$0 = $T($S($EXPECT($L76, fail, 'ImportDeclaration "import type"'), NonIdContinue, __, ImportClause, __, FromClause), function(value) {
2950
3055
  return { "ts": true, "children": value };
2951
3056
  });
2952
3057
  var ImportDeclaration$1 = $S(Import, __, ImportClause, __, FromClause);
@@ -3084,7 +3189,7 @@ var Civet = (() => {
3084
3189
  return ImportedBinding$0(state);
3085
3190
  }
3086
3191
  }
3087
- var ExportDeclaration$0 = $S(Export, __, $EXPECT($L80, fail, 'ExportDeclaration "default"'), NonIdContinue, __, $C(HoistableDeclaration, ClassDeclaration, AssignmentExpression));
3192
+ var ExportDeclaration$0 = $S(Export, __, $EXPECT($L77, fail, 'ExportDeclaration "default"'), NonIdContinue, __, $C(HoistableDeclaration, ClassDeclaration, AssignmentExpression));
3088
3193
  var ExportDeclaration$1 = $S(Export, __, ExportFromClause, __, FromClause);
3089
3194
  var ExportDeclaration$2 = $S(Export, __, $C(NamedExports, VariableStatement, Declaration));
3090
3195
  function ExportDeclaration(state) {
@@ -3166,7 +3271,7 @@ var Civet = (() => {
3166
3271
  return LexicalDeclaration$0(state) || LexicalDeclaration$1(state);
3167
3272
  }
3168
3273
  }
3169
- var ConstAssignment$0 = $TV($EXPECT($L81, fail, 'ConstAssignment ":="'), function($skip, $loc, $0, $1) {
3274
+ var ConstAssignment$0 = $TV($EXPECT($L78, fail, 'ConstAssignment ":="'), function($skip, $loc, $0, $1) {
3170
3275
  return { $loc, token: "=" };
3171
3276
  });
3172
3277
  function ConstAssignment(state) {
@@ -3265,8 +3370,8 @@ var Civet = (() => {
3265
3370
  var DecimalLiteral$0 = $TV($TEXT($EXPECT($R6, fail, "DecimalLiteral /(?:0|[1-9](?:_[0-9]|[0-9])*)(?=\\.(?:\\p{ID_Start}|[_$]))/")), function($skip, $loc, $0, $1) {
3266
3371
  return $1 + ".";
3267
3372
  });
3268
- var DecimalLiteral$1 = $TEXT($S($EXPECT($R7, fail, "DecimalLiteral /(?:0|[1-9](?:_[0-9]|[0-9])*)(?:\\.(?:[0-9](?:_[0-9]|[0-9])*)?)?/"), $E(ExponentPart)));
3269
- var DecimalLiteral$2 = $TEXT($S($EXPECT($R8, fail, "DecimalLiteral /(?:\\.(?!\\p{ID_Start})[0-9](?:_[0-9]|[0-9])*)/"), $E(ExponentPart)));
3373
+ var DecimalLiteral$1 = $TEXT($S($EXPECT($R7, fail, "DecimalLiteral /(?:0|[1-9](?:_[0-9]|[0-9])*)(?:\\.(?:[0-9](?:_[0-9]|[0-9])*))?/"), $E(ExponentPart)));
3374
+ var DecimalLiteral$2 = $TEXT($S($EXPECT($R8, fail, "DecimalLiteral /(?:\\.[0-9](?:_[0-9]|[0-9])*)/"), $E(ExponentPart)));
3270
3375
  function DecimalLiteral(state) {
3271
3376
  if (state.tokenize) {
3272
3377
  return $TOKEN("DecimalLiteral", state, DecimalLiteral$0(state) || DecimalLiteral$1(state) || DecimalLiteral$2(state));
@@ -3540,7 +3645,7 @@ var Civet = (() => {
3540
3645
  }
3541
3646
  }
3542
3647
  var ReservedWord$0 = $S(CoffeeBooleansEnabled, $R$0($EXPECT($R23, fail, "ReservedWord /(?:on|off|yes|no)(?!\\p{ID_Continue})/")));
3543
- var ReservedWord$1 = $R$0($EXPECT($R24, fail, "ReservedWord /(?:and|as|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|false|finally|for|function|if|import|in|instanceof|interface|is|new|null|or|return|static|super|switch|this|throw|true|try|typeof|unless|var|void|while|with|yield)(?!\\p{ID_Continue})/"));
3648
+ var ReservedWord$1 = $R$0($EXPECT($R24, fail, "ReservedWord /(?:and|as|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|false|finally|for|function|if|import|in|instanceof|interface|is|loop|new|null|or|return|static|super|switch|this|throw|true|try|typeof|unless|until|var|void|while|with|yield)(?!\\p{ID_Continue})/"));
3544
3649
  function ReservedWord(state) {
3545
3650
  if (state.tokenize) {
3546
3651
  return $TOKEN("ReservedWord", state, ReservedWord$0(state) || ReservedWord$1(state));
@@ -3577,7 +3682,7 @@ var Civet = (() => {
3577
3682
  return MultiLineComment$0(state) || MultiLineComment$1(state);
3578
3683
  }
3579
3684
  }
3580
- var JSMultiLineComment$0 = $TV($TEXT($S($EXPECT($L82, fail, 'JSMultiLineComment "/*"'), $Q($S($N($EXPECT($L83, fail, 'JSMultiLineComment "*/"')), $EXPECT($R26, fail, "JSMultiLineComment /./"))), $EXPECT($L83, fail, 'JSMultiLineComment "*/"'))), function($skip, $loc, $0, $1) {
3685
+ var JSMultiLineComment$0 = $TV($TEXT($S($EXPECT($L79, fail, 'JSMultiLineComment "/*"'), $Q($S($N($EXPECT($L80, fail, 'JSMultiLineComment "*/"')), $EXPECT($R26, fail, "JSMultiLineComment /./"))), $EXPECT($L80, fail, 'JSMultiLineComment "*/"'))), function($skip, $loc, $0, $1) {
3581
3686
  return { $loc, token: $1 };
3582
3687
  });
3583
3688
  function JSMultiLineComment(state) {
@@ -3601,7 +3706,7 @@ var Civet = (() => {
3601
3706
  return CoffeeSingleLineComment$0(state);
3602
3707
  }
3603
3708
  }
3604
- var CoffeeMultiLineComment$0 = $TS($S($EXPECT($L84, fail, 'CoffeeMultiLineComment "###"'), $TEXT($Q($S($N($C($EXPECT($L84, fail, 'CoffeeMultiLineComment "###"'), $EXPECT($L83, fail, 'CoffeeMultiLineComment "*/"'))), $EXPECT($R26, fail, "CoffeeMultiLineComment /./")))), $EXPECT($L84, fail, 'CoffeeMultiLineComment "###"')), function($skip, $loc, $0, $1, $2, $3) {
3709
+ var CoffeeMultiLineComment$0 = $TS($S($EXPECT($L81, fail, 'CoffeeMultiLineComment "###"'), $TEXT($Q($S($N($C($EXPECT($L81, fail, 'CoffeeMultiLineComment "###"'), $EXPECT($L80, fail, 'CoffeeMultiLineComment "*/"'))), $EXPECT($R26, fail, "CoffeeMultiLineComment /./")))), $EXPECT($L81, fail, 'CoffeeMultiLineComment "###"')), function($skip, $loc, $0, $1, $2, $3) {
3605
3710
  return { $loc, token: `/*${$2}*/` };
3606
3711
  });
3607
3712
  function CoffeeMultiLineComment(state) {
@@ -3613,7 +3718,7 @@ var Civet = (() => {
3613
3718
  return CoffeeMultiLineComment$0(state);
3614
3719
  }
3615
3720
  }
3616
- var InlineComment$0 = $TV($TEXT($S($EXPECT($L82, fail, 'InlineComment "/*"'), $TEXT($Q($S($N($EXPECT($L83, fail, 'InlineComment "*/"')), $EXPECT($R28, fail, "InlineComment /[^\\r\\n]/")))), $EXPECT($L83, fail, 'InlineComment "*/"'))), function($skip, $loc, $0, $1) {
3721
+ var InlineComment$0 = $TV($TEXT($S($EXPECT($L79, fail, 'InlineComment "/*"'), $TEXT($Q($S($N($EXPECT($L80, fail, 'InlineComment "*/"')), $EXPECT($R28, fail, "InlineComment /[^\\r\\n]/")))), $EXPECT($L80, fail, 'InlineComment "*/"'))), function($skip, $loc, $0, $1) {
3617
3722
  return { $loc, token: $1 };
3618
3723
  });
3619
3724
  function InlineComment(state) {
@@ -3720,7 +3825,7 @@ var Civet = (() => {
3720
3825
  return Loc$0(state);
3721
3826
  }
3722
3827
  }
3723
- var As$0 = $TS($S($EXPECT($L85, fail, 'As "as"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3828
+ var As$0 = $TS($S($EXPECT($L82, fail, 'As "as"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3724
3829
  return { $loc, token: $1 };
3725
3830
  });
3726
3831
  function As(state) {
@@ -3732,7 +3837,7 @@ var Civet = (() => {
3732
3837
  return As$0(state);
3733
3838
  }
3734
3839
  }
3735
- var Async$0 = $TV($EXPECT($L86, fail, 'Async "async"'), function($skip, $loc, $0, $1) {
3840
+ var Async$0 = $TV($EXPECT($L83, fail, 'Async "async"'), function($skip, $loc, $0, $1) {
3736
3841
  return { $loc, token: $1 };
3737
3842
  });
3738
3843
  function Async(state) {
@@ -3744,7 +3849,7 @@ var Civet = (() => {
3744
3849
  return Async$0(state);
3745
3850
  }
3746
3851
  }
3747
- var Await$0 = $TS($S($EXPECT($L87, fail, 'Await "await"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3852
+ var Await$0 = $TS($S($EXPECT($L84, fail, 'Await "await"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3748
3853
  return { $loc, token: $1 };
3749
3854
  });
3750
3855
  function Await(state) {
@@ -3756,7 +3861,7 @@ var Civet = (() => {
3756
3861
  return Await$0(state);
3757
3862
  }
3758
3863
  }
3759
- var Backtick$0 = $TV($EXPECT($L88, fail, 'Backtick "`"'), function($skip, $loc, $0, $1) {
3864
+ var Backtick$0 = $TV($EXPECT($L85, fail, 'Backtick "`"'), function($skip, $loc, $0, $1) {
3760
3865
  return { $loc, token: $1 };
3761
3866
  });
3762
3867
  function Backtick(state) {
@@ -3768,7 +3873,7 @@ var Civet = (() => {
3768
3873
  return Backtick$0(state);
3769
3874
  }
3770
3875
  }
3771
- var Case$0 = $TS($S($EXPECT($L89, fail, 'Case "case"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3876
+ var Case$0 = $TS($S($EXPECT($L86, fail, 'Case "case"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3772
3877
  return { $loc, token: $1 };
3773
3878
  });
3774
3879
  function Case(state) {
@@ -3780,7 +3885,7 @@ var Civet = (() => {
3780
3885
  return Case$0(state);
3781
3886
  }
3782
3887
  }
3783
- var Catch$0 = $TV($EXPECT($L90, fail, 'Catch "catch"'), function($skip, $loc, $0, $1) {
3888
+ var Catch$0 = $TV($EXPECT($L87, fail, 'Catch "catch"'), function($skip, $loc, $0, $1) {
3784
3889
  return { $loc, token: $1 };
3785
3890
  });
3786
3891
  function Catch(state) {
@@ -3792,7 +3897,7 @@ var Civet = (() => {
3792
3897
  return Catch$0(state);
3793
3898
  }
3794
3899
  }
3795
- var Class$0 = $TV($EXPECT($L91, fail, 'Class "class"'), function($skip, $loc, $0, $1) {
3900
+ var Class$0 = $TV($EXPECT($L88, fail, 'Class "class"'), function($skip, $loc, $0, $1) {
3796
3901
  return { $loc, token: $1 };
3797
3902
  });
3798
3903
  function Class(state) {
@@ -3840,7 +3945,7 @@ var Civet = (() => {
3840
3945
  return CloseParen$0(state);
3841
3946
  }
3842
3947
  }
3843
- var CoffeeSubstitutionStart$0 = $TV($EXPECT($L92, fail, 'CoffeeSubstitutionStart "#{"'), function($skip, $loc, $0, $1) {
3948
+ var CoffeeSubstitutionStart$0 = $TV($EXPECT($L89, fail, 'CoffeeSubstitutionStart "#{"'), function($skip, $loc, $0, $1) {
3844
3949
  return { $loc, token: "${" };
3845
3950
  });
3846
3951
  function CoffeeSubstitutionStart(state) {
@@ -3852,7 +3957,7 @@ var Civet = (() => {
3852
3957
  return CoffeeSubstitutionStart$0(state);
3853
3958
  }
3854
3959
  }
3855
- var Colon$0 = $TV($EXPECT($L93, fail, 'Colon ":"'), function($skip, $loc, $0, $1) {
3960
+ var Colon$0 = $TV($EXPECT($L90, fail, 'Colon ":"'), function($skip, $loc, $0, $1) {
3856
3961
  return { $loc, token: $1 };
3857
3962
  });
3858
3963
  function Colon(state) {
@@ -3876,7 +3981,7 @@ var Civet = (() => {
3876
3981
  return ConstructorShorthand$0(state);
3877
3982
  }
3878
3983
  }
3879
- var Default$0 = $TS($S($EXPECT($L80, fail, 'Default "default"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3984
+ var Default$0 = $TS($S($EXPECT($L77, fail, 'Default "default"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3880
3985
  return { $loc, token: $1 };
3881
3986
  });
3882
3987
  function Default(state) {
@@ -3888,7 +3993,7 @@ var Civet = (() => {
3888
3993
  return Default$0(state);
3889
3994
  }
3890
3995
  }
3891
- var Delete$0 = $TS($S($EXPECT($L94, fail, 'Delete "delete"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3996
+ var Delete$0 = $TS($S($EXPECT($L91, fail, 'Delete "delete"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3892
3997
  return { $loc, token: $1 };
3893
3998
  });
3894
3999
  function Delete(state) {
@@ -3900,7 +4005,19 @@ var Civet = (() => {
3900
4005
  return Delete$0(state);
3901
4006
  }
3902
4007
  }
3903
- var Dot$0 = $TV($EXPECT($L95, fail, 'Dot "."'), function($skip, $loc, $0, $1) {
4008
+ var Do$0 = $TS($S($EXPECT($L92, fail, 'Do "do"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4009
+ return { $loc, token: $1 };
4010
+ });
4011
+ function Do(state) {
4012
+ if (state.verbose)
4013
+ console.log("ENTER:", "Do");
4014
+ if (state.tokenize) {
4015
+ return $TOKEN("Do", state, Do$0(state));
4016
+ } else {
4017
+ return Do$0(state);
4018
+ }
4019
+ }
4020
+ var Dot$0 = $TV($EXPECT($L93, fail, 'Dot "."'), function($skip, $loc, $0, $1) {
3904
4021
  return { $loc, token: $1 };
3905
4022
  });
3906
4023
  function Dot(state) {
@@ -3912,7 +4029,19 @@ var Civet = (() => {
3912
4029
  return Dot$0(state);
3913
4030
  }
3914
4031
  }
3915
- var DotDotDot$0 = $TV($EXPECT($L96, fail, 'DotDotDot "..."'), function($skip, $loc, $0, $1) {
4032
+ var DotDot$0 = $TV($EXPECT($L94, fail, 'DotDot ".."'), function($skip, $loc, $0, $1) {
4033
+ return { $loc, token: $1 };
4034
+ });
4035
+ function DotDot(state) {
4036
+ if (state.verbose)
4037
+ console.log("ENTER:", "DotDot");
4038
+ if (state.tokenize) {
4039
+ return $TOKEN("DotDot", state, DotDot$0(state));
4040
+ } else {
4041
+ return DotDot$0(state);
4042
+ }
4043
+ }
4044
+ var DotDotDot$0 = $TV($EXPECT($L95, fail, 'DotDotDot "..."'), function($skip, $loc, $0, $1) {
3916
4045
  return { $loc, token: $1 };
3917
4046
  });
3918
4047
  function DotDotDot(state) {
@@ -3924,7 +4053,7 @@ var Civet = (() => {
3924
4053
  return DotDotDot$0(state);
3925
4054
  }
3926
4055
  }
3927
- var DoubleQuote$0 = $TV($EXPECT($L97, fail, 'DoubleQuote "\\\\\\""'), function($skip, $loc, $0, $1) {
4056
+ var DoubleQuote$0 = $TV($EXPECT($L96, fail, 'DoubleQuote "\\\\\\""'), function($skip, $loc, $0, $1) {
3928
4057
  return { $loc, token: $1 };
3929
4058
  });
3930
4059
  function DoubleQuote(state) {
@@ -3936,7 +4065,7 @@ var Civet = (() => {
3936
4065
  return DoubleQuote$0(state);
3937
4066
  }
3938
4067
  }
3939
- var Else$0 = $TV($EXPECT($L98, fail, 'Else "else"'), function($skip, $loc, $0, $1) {
4068
+ var Else$0 = $TV($EXPECT($L97, fail, 'Else "else"'), function($skip, $loc, $0, $1) {
3940
4069
  return { $loc, token: $1 };
3941
4070
  });
3942
4071
  function Else(state) {
@@ -3960,7 +4089,7 @@ var Civet = (() => {
3960
4089
  return Equals$0(state);
3961
4090
  }
3962
4091
  }
3963
- var Export$0 = $TS($S($EXPECT($L99, fail, 'Export "export"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4092
+ var Export$0 = $TS($S($EXPECT($L98, fail, 'Export "export"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3964
4093
  return { $loc, token: $1 };
3965
4094
  });
3966
4095
  function Export(state) {
@@ -3972,7 +4101,7 @@ var Civet = (() => {
3972
4101
  return Export$0(state);
3973
4102
  }
3974
4103
  }
3975
- var For$0 = $TS($S($EXPECT($L100, fail, 'For "for"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4104
+ var For$0 = $TS($S($EXPECT($L99, fail, 'For "for"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3976
4105
  return { $loc, token: $1 };
3977
4106
  });
3978
4107
  function For(state) {
@@ -3984,7 +4113,7 @@ var Civet = (() => {
3984
4113
  return For$0(state);
3985
4114
  }
3986
4115
  }
3987
- var From$0 = $TS($S($EXPECT($L101, fail, 'From "from"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4116
+ var From$0 = $TS($S($EXPECT($L100, fail, 'From "from"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3988
4117
  return { $loc, token: $1 };
3989
4118
  });
3990
4119
  function From(state) {
@@ -3996,7 +4125,7 @@ var Civet = (() => {
3996
4125
  return From$0(state);
3997
4126
  }
3998
4127
  }
3999
- var Function$0 = $TV($EXPECT($L102, fail, 'Function "function"'), function($skip, $loc, $0, $1) {
4128
+ var Function$0 = $TV($EXPECT($L101, fail, 'Function "function"'), function($skip, $loc, $0, $1) {
4000
4129
  return { $loc, token: $1 };
4001
4130
  });
4002
4131
  function Function(state) {
@@ -4008,7 +4137,7 @@ var Civet = (() => {
4008
4137
  return Function$0(state);
4009
4138
  }
4010
4139
  }
4011
- var GetOrSet$0 = $TS($S($C($EXPECT($L103, fail, 'GetOrSet "get"'), $EXPECT($L104, fail, 'GetOrSet "set"')), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4140
+ var GetOrSet$0 = $TS($S($C($EXPECT($L102, fail, 'GetOrSet "get"'), $EXPECT($L103, fail, 'GetOrSet "set"')), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4012
4141
  return { $loc, token: $1 };
4013
4142
  });
4014
4143
  function GetOrSet(state) {
@@ -4020,7 +4149,7 @@ var Civet = (() => {
4020
4149
  return GetOrSet$0(state);
4021
4150
  }
4022
4151
  }
4023
- var If$0 = $TV($EXPECT($L105, fail, 'If "if"'), function($skip, $loc, $0, $1) {
4152
+ var If$0 = $TV($EXPECT($L104, fail, 'If "if"'), function($skip, $loc, $0, $1) {
4024
4153
  return { $loc, token: $1 };
4025
4154
  });
4026
4155
  function If(state) {
@@ -4056,7 +4185,7 @@ var Civet = (() => {
4056
4185
  return In$0(state);
4057
4186
  }
4058
4187
  }
4059
- var LetOrConst$0 = $TV($C($EXPECT($L106, fail, 'LetOrConst "let"'), $EXPECT($L107, fail, 'LetOrConst "const"')), function($skip, $loc, $0, $1) {
4188
+ var LetOrConst$0 = $TV($C($EXPECT($L105, fail, 'LetOrConst "let"'), $EXPECT($L106, fail, 'LetOrConst "const"')), function($skip, $loc, $0, $1) {
4060
4189
  return { $loc, token: $1 };
4061
4190
  });
4062
4191
  function LetOrConst(state) {
@@ -4068,7 +4197,7 @@ var Civet = (() => {
4068
4197
  return LetOrConst$0(state);
4069
4198
  }
4070
4199
  }
4071
- var Loop$0 = $TS($S($EXPECT($L108, fail, 'Loop "loop"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4200
+ var Loop$0 = $TS($S($EXPECT($L107, fail, 'Loop "loop"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4072
4201
  return { $loc, token: "while(true)" };
4073
4202
  });
4074
4203
  function Loop(state) {
@@ -4080,7 +4209,7 @@ var Civet = (() => {
4080
4209
  return Loop$0(state);
4081
4210
  }
4082
4211
  }
4083
- var New$0 = $TV($EXPECT($L109, fail, 'New "new"'), function($skip, $loc, $0, $1) {
4212
+ var New$0 = $TV($EXPECT($L108, fail, 'New "new"'), function($skip, $loc, $0, $1) {
4084
4213
  return { $loc, token: $1 };
4085
4214
  });
4086
4215
  function New(state) {
@@ -4092,7 +4221,7 @@ var Civet = (() => {
4092
4221
  return New$0(state);
4093
4222
  }
4094
4223
  }
4095
- var Of$0 = $TV($EXPECT($L110, fail, 'Of "of"'), function($skip, $loc, $0, $1) {
4224
+ var Of$0 = $TV($EXPECT($L109, fail, 'Of "of"'), function($skip, $loc, $0, $1) {
4096
4225
  return { $loc, token: $1 };
4097
4226
  });
4098
4227
  function Of(state) {
@@ -4104,7 +4233,7 @@ var Civet = (() => {
4104
4233
  return Of$0(state);
4105
4234
  }
4106
4235
  }
4107
- var OpenBrace$0 = $TV($EXPECT($L111, fail, 'OpenBrace "{"'), function($skip, $loc, $0, $1) {
4236
+ var OpenBrace$0 = $TV($EXPECT($L110, fail, 'OpenBrace "{"'), function($skip, $loc, $0, $1) {
4108
4237
  return { $loc, token: $1 };
4109
4238
  });
4110
4239
  function OpenBrace(state) {
@@ -4116,7 +4245,7 @@ var Civet = (() => {
4116
4245
  return OpenBrace$0(state);
4117
4246
  }
4118
4247
  }
4119
- var OpenBracket$0 = $TV($EXPECT($L112, fail, 'OpenBracket "["'), function($skip, $loc, $0, $1) {
4248
+ var OpenBracket$0 = $TV($EXPECT($L111, fail, 'OpenBracket "["'), function($skip, $loc, $0, $1) {
4120
4249
  return { $loc, token: $1 };
4121
4250
  });
4122
4251
  function OpenBracket(state) {
@@ -4128,7 +4257,7 @@ var Civet = (() => {
4128
4257
  return OpenBracket$0(state);
4129
4258
  }
4130
4259
  }
4131
- var OpenParen$0 = $TV($EXPECT($L113, fail, 'OpenParen "("'), function($skip, $loc, $0, $1) {
4260
+ var OpenParen$0 = $TV($EXPECT($L112, fail, 'OpenParen "("'), function($skip, $loc, $0, $1) {
4132
4261
  return { $loc, token: $1 };
4133
4262
  });
4134
4263
  function OpenParen(state) {
@@ -4140,7 +4269,7 @@ var Civet = (() => {
4140
4269
  return OpenParen$0(state);
4141
4270
  }
4142
4271
  }
4143
- var QuestionMark$0 = $TV($EXPECT($L114, fail, 'QuestionMark "?"'), function($skip, $loc, $0, $1) {
4272
+ var QuestionMark$0 = $TV($EXPECT($L113, fail, 'QuestionMark "?"'), function($skip, $loc, $0, $1) {
4144
4273
  return { $loc, token: $1 };
4145
4274
  });
4146
4275
  function QuestionMark(state) {
@@ -4152,7 +4281,7 @@ var Civet = (() => {
4152
4281
  return QuestionMark$0(state);
4153
4282
  }
4154
4283
  }
4155
- var Return$0 = $TS($S($EXPECT($L115, fail, 'Return "return"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4284
+ var Return$0 = $TS($S($EXPECT($L114, fail, 'Return "return"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4156
4285
  return { $loc, token: $1 };
4157
4286
  });
4158
4287
  function Return(state) {
@@ -4176,7 +4305,7 @@ var Civet = (() => {
4176
4305
  return Semicolon$0(state);
4177
4306
  }
4178
4307
  }
4179
- var SingleQuote$0 = $TV($EXPECT($L116, fail, `SingleQuote "'"`), function($skip, $loc, $0, $1) {
4308
+ var SingleQuote$0 = $TV($EXPECT($L115, fail, `SingleQuote "'"`), function($skip, $loc, $0, $1) {
4180
4309
  return { $loc, token: $1 };
4181
4310
  });
4182
4311
  function SingleQuote(state) {
@@ -4200,10 +4329,10 @@ var Civet = (() => {
4200
4329
  return Star$0(state);
4201
4330
  }
4202
4331
  }
4203
- var Static$0 = $TV($EXPECT($L117, fail, 'Static "static"'), function($skip, $loc, $0, $1) {
4332
+ var Static$0 = $TV($EXPECT($L116, fail, 'Static "static"'), function($skip, $loc, $0, $1) {
4204
4333
  return { $loc, token: $1 };
4205
4334
  });
4206
- var Static$1 = $TS($S($EXPECT($L8, fail, 'Static "@"'), $N($EXPECT($L113, fail, 'Static "("'))), function($skip, $loc, $0, $1, $2) {
4335
+ var Static$1 = $TS($S($EXPECT($L8, fail, 'Static "@"'), $N($EXPECT($L112, fail, 'Static "("'))), function($skip, $loc, $0, $1, $2) {
4207
4336
  return { $loc, token: "static " };
4208
4337
  });
4209
4338
  function Static(state) {
@@ -4213,7 +4342,7 @@ var Civet = (() => {
4213
4342
  return Static$0(state) || Static$1(state);
4214
4343
  }
4215
4344
  }
4216
- var SubstitutionStart$0 = $TV($EXPECT($L118, fail, 'SubstitutionStart "${"'), function($skip, $loc, $0, $1) {
4345
+ var SubstitutionStart$0 = $TV($EXPECT($L117, fail, 'SubstitutionStart "${"'), function($skip, $loc, $0, $1) {
4217
4346
  return { $loc, token: $1 };
4218
4347
  });
4219
4348
  function SubstitutionStart(state) {
@@ -4225,7 +4354,7 @@ var Civet = (() => {
4225
4354
  return SubstitutionStart$0(state);
4226
4355
  }
4227
4356
  }
4228
- var Switch$0 = $TS($S($EXPECT($L119, fail, 'Switch "switch"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4357
+ var Switch$0 = $TS($S($EXPECT($L118, fail, 'Switch "switch"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4229
4358
  return { $loc, token: $1 };
4230
4359
  });
4231
4360
  function Switch(state) {
@@ -4237,7 +4366,7 @@ var Civet = (() => {
4237
4366
  return Switch$0(state);
4238
4367
  }
4239
4368
  }
4240
- var Target$0 = $TV($EXPECT($L120, fail, 'Target "target"'), function($skip, $loc, $0, $1) {
4369
+ var Target$0 = $TV($EXPECT($L119, fail, 'Target "target"'), function($skip, $loc, $0, $1) {
4241
4370
  return { $loc, token: $1 };
4242
4371
  });
4243
4372
  function Target(state) {
@@ -4249,7 +4378,7 @@ var Civet = (() => {
4249
4378
  return Target$0(state);
4250
4379
  }
4251
4380
  }
4252
- var Throw$0 = $TS($S($EXPECT($L121, fail, 'Throw "throw"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4381
+ var Throw$0 = $TS($S($EXPECT($L120, fail, 'Throw "throw"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4253
4382
  return { $loc, token: $1 };
4254
4383
  });
4255
4384
  function Throw(state) {
@@ -4261,7 +4390,7 @@ var Civet = (() => {
4261
4390
  return Throw$0(state);
4262
4391
  }
4263
4392
  }
4264
- var TripleDoubleQuote$0 = $TV($EXPECT($L122, fail, 'TripleDoubleQuote "\\\\\\"\\\\\\"\\\\\\""'), function($skip, $loc, $0, $1) {
4393
+ var TripleDoubleQuote$0 = $TV($EXPECT($L121, fail, 'TripleDoubleQuote "\\\\\\"\\\\\\"\\\\\\""'), function($skip, $loc, $0, $1) {
4265
4394
  return { $loc, token: "`" };
4266
4395
  });
4267
4396
  function TripleDoubleQuote(state) {
@@ -4273,7 +4402,7 @@ var Civet = (() => {
4273
4402
  return TripleDoubleQuote$0(state);
4274
4403
  }
4275
4404
  }
4276
- var TripleSingleQuote$0 = $TV($EXPECT($L123, fail, `TripleSingleQuote "'''"`), function($skip, $loc, $0, $1) {
4405
+ var TripleSingleQuote$0 = $TV($EXPECT($L122, fail, `TripleSingleQuote "'''"`), function($skip, $loc, $0, $1) {
4277
4406
  return { $loc, token: "`" };
4278
4407
  });
4279
4408
  function TripleSingleQuote(state) {
@@ -4285,7 +4414,7 @@ var Civet = (() => {
4285
4414
  return TripleSingleQuote$0(state);
4286
4415
  }
4287
4416
  }
4288
- var TripleTick$0 = $TV($EXPECT($L124, fail, 'TripleTick "```"'), function($skip, $loc, $0, $1) {
4417
+ var TripleTick$0 = $TV($EXPECT($L123, fail, 'TripleTick "```"'), function($skip, $loc, $0, $1) {
4289
4418
  return { $loc, token: "`" };
4290
4419
  });
4291
4420
  function TripleTick(state) {
@@ -4297,7 +4426,7 @@ var Civet = (() => {
4297
4426
  return TripleTick$0(state);
4298
4427
  }
4299
4428
  }
4300
- var Try$0 = $TV($EXPECT($L125, fail, 'Try "try"'), function($skip, $loc, $0, $1) {
4429
+ var Try$0 = $TV($EXPECT($L124, fail, 'Try "try"'), function($skip, $loc, $0, $1) {
4301
4430
  return { $loc, token: $1 };
4302
4431
  });
4303
4432
  function Try(state) {
@@ -4309,7 +4438,7 @@ var Civet = (() => {
4309
4438
  return Try$0(state);
4310
4439
  }
4311
4440
  }
4312
- var Typeof$0 = $TS($S($EXPECT($L126, fail, 'Typeof "typeof"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4441
+ var Typeof$0 = $TS($S($EXPECT($L125, fail, 'Typeof "typeof"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4313
4442
  return { $loc, token: $1 };
4314
4443
  });
4315
4444
  function Typeof(state) {
@@ -4321,7 +4450,7 @@ var Civet = (() => {
4321
4450
  return Typeof$0(state);
4322
4451
  }
4323
4452
  }
4324
- var Unless$0 = $TV($EXPECT($L127, fail, 'Unless "unless"'), function($skip, $loc, $0, $1) {
4453
+ var Unless$0 = $TV($EXPECT($L126, fail, 'Unless "unless"'), function($skip, $loc, $0, $1) {
4325
4454
  return { $loc, token: $1 };
4326
4455
  });
4327
4456
  function Unless(state) {
@@ -4333,6 +4462,18 @@ var Civet = (() => {
4333
4462
  return Unless$0(state);
4334
4463
  }
4335
4464
  }
4465
+ var Until$0 = $TS($S($EXPECT($L127, fail, 'Until "until"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4466
+ return { $loc, token: $1 };
4467
+ });
4468
+ function Until(state) {
4469
+ if (state.verbose)
4470
+ console.log("ENTER:", "Until");
4471
+ if (state.tokenize) {
4472
+ return $TOKEN("Until", state, Until$0(state));
4473
+ } else {
4474
+ return Until$0(state);
4475
+ }
4476
+ }
4336
4477
  var Var$0 = $TV($EXPECT($L128, fail, 'Var "var"'), function($skip, $loc, $0, $1) {
4337
4478
  return { $loc, token: $1 };
4338
4479
  });
@@ -4369,7 +4510,19 @@ var Civet = (() => {
4369
4510
  return When$0(state);
4370
4511
  }
4371
4512
  }
4372
- var Yield$0 = $TS($S($EXPECT($L131, fail, 'Yield "yield"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4513
+ var While$0 = $TS($S($EXPECT($L131, fail, 'While "while"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4514
+ return { $loc, token: $1 };
4515
+ });
4516
+ function While(state) {
4517
+ if (state.verbose)
4518
+ console.log("ENTER:", "While");
4519
+ if (state.tokenize) {
4520
+ return $TOKEN("While", state, While$0(state));
4521
+ } else {
4522
+ return While$0(state);
4523
+ }
4524
+ }
4525
+ var Yield$0 = $TS($S($EXPECT($L132, fail, 'Yield "yield"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4373
4526
  return { $loc, token: $1 };
4374
4527
  });
4375
4528
  function Yield(state) {
@@ -4395,7 +4548,7 @@ var Civet = (() => {
4395
4548
  return JSXElement$0(state) || JSXElement$1(state);
4396
4549
  }
4397
4550
  }
4398
- var JSXSelfClosingElement$0 = $S($EXPECT($L4, fail, 'JSXSelfClosingElement "<"'), $TEXT(JSXElementName), $E(JSXAttributes), __, $EXPECT($L132, fail, 'JSXSelfClosingElement "/>"'));
4551
+ var JSXSelfClosingElement$0 = $S($EXPECT($L4, fail, 'JSXSelfClosingElement "<"'), $TEXT(JSXElementName), $E(JSXAttributes), __, $EXPECT($L133, fail, 'JSXSelfClosingElement "/>"'));
4399
4552
  function JSXSelfClosingElement(state) {
4400
4553
  if (state.verbose)
4401
4554
  console.log("ENTER:", "JSXSelfClosingElement");
@@ -4415,7 +4568,7 @@ var Civet = (() => {
4415
4568
  return JSXOpeningElement$0(state);
4416
4569
  }
4417
4570
  }
4418
- var JSXClosingElement$0 = $S($EXPECT($L133, fail, 'JSXClosingElement "</"'), __, $TEXT(JSXElementName), __, $EXPECT($L55, fail, 'JSXClosingElement ">"'));
4571
+ var JSXClosingElement$0 = $S($EXPECT($L134, fail, 'JSXClosingElement "</"'), __, $TEXT(JSXElementName), __, $EXPECT($L55, fail, 'JSXClosingElement ">"'));
4419
4572
  function JSXClosingElement(state) {
4420
4573
  if (state.verbose)
4421
4574
  console.log("ENTER:", "JSXClosingElement");
@@ -4425,7 +4578,7 @@ var Civet = (() => {
4425
4578
  return JSXClosingElement$0(state);
4426
4579
  }
4427
4580
  }
4428
- var JSXFragment$0 = $S($EXPECT($L134, fail, 'JSXFragment "<>"'), $E(JSXChildren), $EXPECT($L135, fail, 'JSXFragment "</>"'));
4581
+ var JSXFragment$0 = $S($EXPECT($L135, fail, 'JSXFragment "<>"'), $E(JSXChildren), $EXPECT($L136, fail, 'JSXFragment "</>"'));
4429
4582
  function JSXFragment(state) {
4430
4583
  if (state.verbose)
4431
4584
  console.log("ENTER:", "JSXFragment");
@@ -4559,7 +4712,7 @@ var Civet = (() => {
4559
4712
  return TypeDeclaration$0(state);
4560
4713
  }
4561
4714
  }
4562
- var TypeDeclarationModifier$0 = $S($EXPECT($L136, fail, 'TypeDeclarationModifier "declare"'), NonIdContinue);
4715
+ var TypeDeclarationModifier$0 = $S($EXPECT($L137, fail, 'TypeDeclarationModifier "declare"'), NonIdContinue);
4563
4716
  var TypeDeclarationModifier$1 = Export;
4564
4717
  function TypeDeclarationModifier(state) {
4565
4718
  if (state.tokenize) {
@@ -4579,7 +4732,7 @@ var Civet = (() => {
4579
4732
  return TypeDeclarationRest$0(state) || TypeDeclarationRest$1(state) || TypeDeclarationRest$2(state) || TypeDeclarationRest$3(state);
4580
4733
  }
4581
4734
  }
4582
- var TypeKeyword$0 = $S($EXPECT($L137, fail, 'TypeKeyword "type"'), NonIdContinue);
4735
+ var TypeKeyword$0 = $S($EXPECT($L138, fail, 'TypeKeyword "type"'), NonIdContinue);
4583
4736
  function TypeKeyword(state) {
4584
4737
  if (state.verbose)
4585
4738
  console.log("ENTER:", "TypeKeyword");
@@ -4589,7 +4742,7 @@ var Civet = (() => {
4589
4742
  return TypeKeyword$0(state);
4590
4743
  }
4591
4744
  }
4592
- var Interface$0 = $S($EXPECT($L138, fail, 'Interface "interface"'), NonIdContinue);
4745
+ var Interface$0 = $S($EXPECT($L139, fail, 'Interface "interface"'), NonIdContinue);
4593
4746
  function Interface(state) {
4594
4747
  if (state.verbose)
4595
4748
  console.log("ENTER:", "Interface");
@@ -4599,7 +4752,7 @@ var Civet = (() => {
4599
4752
  return Interface$0(state);
4600
4753
  }
4601
4754
  }
4602
- var Namespace$0 = $S($EXPECT($L139, fail, 'Namespace "namespace"'), NonIdContinue);
4755
+ var Namespace$0 = $S($EXPECT($L140, fail, 'Namespace "namespace"'), NonIdContinue);
4603
4756
  function Namespace(state) {
4604
4757
  if (state.verbose)
4605
4758
  console.log("ENTER:", "Namespace");
@@ -4699,7 +4852,7 @@ var Civet = (() => {
4699
4852
  return NestedTypeDeclaration$0(state);
4700
4853
  }
4701
4854
  }
4702
- var TypeIndexSignature$0 = $S($E($S($R$0($EXPECT($R37, fail, "TypeIndexSignature /[+-]?/")), $EXPECT($L140, fail, 'TypeIndexSignature "readonly"'), __)), OpenBracket, TypeIndex, CloseBracket, $E($S(__, $R$0($EXPECT($R38, fail, "TypeIndexSignature /[+-]/")), QuestionMark)));
4855
+ var TypeIndexSignature$0 = $S($E($S($R$0($EXPECT($R37, fail, "TypeIndexSignature /[+-]?/")), $EXPECT($L141, fail, 'TypeIndexSignature "readonly"'), __)), OpenBracket, TypeIndex, CloseBracket, $E($S(__, $R$0($EXPECT($R38, fail, "TypeIndexSignature /[+-]/")), QuestionMark)));
4703
4856
  function TypeIndexSignature(state) {
4704
4857
  if (state.verbose)
4705
4858
  console.log("ENTER:", "TypeIndexSignature");
@@ -4730,7 +4883,7 @@ var Civet = (() => {
4730
4883
  return TypeSuffix$0(state);
4731
4884
  }
4732
4885
  }
4733
- var ReturnTypeSuffix$0 = $TS($S(__, Colon, $E($S(__, $EXPECT($L141, fail, 'ReturnTypeSuffix "asserts"'), NonIdContinue)), TypePredicate), function($skip, $loc, $0, $1, $2, $3, $4) {
4886
+ var ReturnTypeSuffix$0 = $TS($S(__, Colon, $E($S(__, $EXPECT($L142, fail, 'ReturnTypeSuffix "asserts"'), NonIdContinue)), TypePredicate), function($skip, $loc, $0, $1, $2, $3, $4) {
4734
4887
  if (!$3)
4735
4888
  $0.splice(2, 1);
4736
4889
  if ($1.length === 0)
@@ -4813,9 +4966,9 @@ var Civet = (() => {
4813
4966
  return TypeUnarySuffix$0(state) || TypeUnarySuffix$1(state);
4814
4967
  }
4815
4968
  }
4816
- var TypeUnaryOp$0 = $EXPECT($L142, fail, 'TypeUnaryOp "keyof"');
4817
- var TypeUnaryOp$1 = $EXPECT($L126, fail, 'TypeUnaryOp "typeof"');
4818
- var TypeUnaryOp$2 = $EXPECT($L143, fail, 'TypeUnaryOp "infer"');
4969
+ var TypeUnaryOp$0 = $EXPECT($L143, fail, 'TypeUnaryOp "keyof"');
4970
+ var TypeUnaryOp$1 = $EXPECT($L125, fail, 'TypeUnaryOp "typeof"');
4971
+ var TypeUnaryOp$2 = $EXPECT($L144, fail, 'TypeUnaryOp "infer"');
4819
4972
  function TypeUnaryOp(state) {
4820
4973
  if (state.tokenize) {
4821
4974
  return $TOKEN("TypeUnaryOp", state, TypeUnaryOp$0(state) || TypeUnaryOp$1(state) || TypeUnaryOp$2(state));
@@ -4908,7 +5061,7 @@ var Civet = (() => {
4908
5061
  var TypeLiteral$1 = $TV($EXPECT($L129, fail, 'TypeLiteral "void"'), function($skip, $loc, $0, $1) {
4909
5062
  return { $loc, token: "void" };
4910
5063
  });
4911
- var TypeLiteral$2 = $TV($EXPECT($L144, fail, 'TypeLiteral "[]"'), function($skip, $loc, $0, $1) {
5064
+ var TypeLiteral$2 = $TV($EXPECT($L145, fail, 'TypeLiteral "[]"'), function($skip, $loc, $0, $1) {
4912
5065
  return { $loc, token: "[]" };
4913
5066
  });
4914
5067
  function TypeLiteral(state) {
@@ -5023,7 +5176,7 @@ var Civet = (() => {
5023
5176
  return CivetPrologue$0(state) || CivetPrologue$1(state);
5024
5177
  }
5025
5178
  }
5026
- var CivetPrologueContent$0 = $TS($S($EXPECT($L145, fail, 'CivetPrologueContent "civet"'), $Q(CivetOption), $EXPECT($R41, fail, "CivetPrologueContent /[\\s]*/")), function($skip, $loc, $0, $1, $2, $3) {
5179
+ var CivetPrologueContent$0 = $TS($S($EXPECT($L146, fail, 'CivetPrologueContent "civet"'), $Q(CivetOption), $EXPECT($R41, fail, "CivetPrologueContent /[\\s]*/")), function($skip, $loc, $0, $1, $2, $3) {
5027
5180
  var options = $2;
5028
5181
  return {
5029
5182
  type: "CivetPrologue",
@@ -5406,6 +5559,16 @@ var Civet = (() => {
5406
5559
  insertReturn(block);
5407
5560
  return block;
5408
5561
  };
5562
+ module.isWhitespaceOrEmpty = function(node) {
5563
+ if (!node)
5564
+ return true;
5565
+ if (!node.length)
5566
+ return true;
5567
+ if (typeof node === "string")
5568
+ return node.match(/^\s*$/);
5569
+ if (Array.isArray(node))
5570
+ return node.every(module.isWhitespaceOrEmpty);
5571
+ };
5409
5572
  module.expandChainedComparisons = function([first, binops]) {
5410
5573
  const relationalOps = ["==", "===", "!=", "!==", "<", "<=", ">", ">=", "in", "instanceof"];
5411
5574
  const lowerPrecedenceOps = ["??", "&&", "||", "&", "|", "^"];
@@ -5486,6 +5649,7 @@ var Civet = (() => {
5486
5649
  }
5487
5650
  return spacing;
5488
5651
  };
5652
+ const initialSpacingRe = /^(?:\r?\n|\n)*((?:\r?\n|\n)\s+)/;
5489
5653
  module.dedentBlockSubstitutions = function($02) {
5490
5654
  const [s, strWithSubstitutions, e] = $02;
5491
5655
  if (strWithSubstitutions.length === 0) {
@@ -5494,7 +5658,7 @@ var Civet = (() => {
5494
5658
  let initialSpacing, i = 0, l = strWithSubstitutions.length, results = [s];
5495
5659
  const { token } = strWithSubstitutions[0];
5496
5660
  if (token) {
5497
- initialSpacing = token.match(/^(\r?\n|\n)\s+/);
5661
+ initialSpacing = token.match(initialSpacingRe);
5498
5662
  } else {
5499
5663
  initialSpacing = false;
5500
5664
  }
@@ -5519,9 +5683,9 @@ var Civet = (() => {
5519
5683
  };
5520
5684
  module.dedentBlockString = function({ $loc: $loc2, token: str }, spacing, trim = true) {
5521
5685
  if (spacing == null)
5522
- spacing = str.match(/^(\r?\n|\n)[ \t]+/);
5686
+ spacing = str.match(initialSpacingRe);
5523
5687
  if (spacing) {
5524
- str = str.replaceAll(spacing[0], "\n");
5688
+ str = str.replaceAll(spacing[1], "\n");
5525
5689
  const l = spacing.length;
5526
5690
  $loc2.pos += l;
5527
5691
  $loc2.length -= l;
@@ -5546,7 +5710,7 @@ var Civet = (() => {
5546
5710
  return Init$0(state);
5547
5711
  }
5548
5712
  }
5549
- var Indent$0 = $TV($Q($C($EXPECT($L146, fail, 'Indent " "'), $EXPECT($L147, fail, 'Indent "\\\\t"'))), function($skip, $loc, $0, $1) {
5713
+ var Indent$0 = $TV($Q($C($EXPECT($L147, fail, 'Indent " "'), $EXPECT($L148, fail, 'Indent "\\\\t"'))), function($skip, $loc, $0, $1) {
5550
5714
  const level = $1.length;
5551
5715
  return {
5552
5716
  $loc,