@danielx/civet 0.4.15 → 0.4.17

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
@@ -407,6 +407,8 @@ var Civet = (() => {
407
407
  var { parse } = parserState({
408
408
  Program,
409
409
  TopLevelStatement,
410
+ ExtendedExpression,
411
+ ExpressionizedStatement,
410
412
  Expression,
411
413
  Arguments,
412
414
  ArgumentsWithTrailingCallExpressions,
@@ -423,10 +425,11 @@ var Civet = (() => {
423
425
  UpdateExpression,
424
426
  UpdateExpressionSymbol,
425
427
  AssignmentExpression,
426
- AssignmentExpressionRest,
427
- AwaitExpression,
428
+ AssignmentExpressionTail,
428
429
  YieldExpression,
430
+ YieldTail,
429
431
  ArrowFunction,
432
+ ArrowFunctionTail,
430
433
  FatArrow,
431
434
  FatArrowBody,
432
435
  ConditionalExpression,
@@ -444,7 +447,6 @@ var Civet = (() => {
444
447
  This,
445
448
  AtAccessor,
446
449
  LeftHandSideExpression,
447
- NewExpression,
448
450
  CallExpression,
449
451
  CallExpressionRest,
450
452
  OptionalShorthand,
@@ -464,10 +466,14 @@ var Civet = (() => {
464
466
  BindingIdentifier,
465
467
  BindingPattern,
466
468
  ObjectBindingPattern,
469
+ ObjectBindingPatternContent,
467
470
  ArrayBindingPattern,
471
+ ArrayBindingPatternContent,
472
+ Elision,
468
473
  NestedBindingProperties,
469
474
  NestedBindingProperty,
470
475
  BindingProperty,
476
+ NestedBindingRestProperty,
471
477
  BindingRestProperty,
472
478
  NestedBindingElements,
473
479
  NestedBindingElement,
@@ -482,10 +488,11 @@ var Civet = (() => {
482
488
  BracedOrEmptyBlock,
483
489
  EmptyBlock,
484
490
  BracedBlock,
485
- SingleNestedExpression,
486
- NestedBlockExpressions,
487
- BlockExpression,
491
+ BracedContent,
492
+ NestedBlockStatements,
493
+ NestedBlockStatement,
488
494
  Literal,
495
+ LiteralContent,
489
496
  NullLiteral,
490
497
  BooleanLiteral,
491
498
  CoffeeScriptBooleanLiteral,
@@ -494,14 +501,16 @@ var Civet = (() => {
494
501
  IdentifierName,
495
502
  IdentifierReference,
496
503
  ArrayLiteral,
504
+ ArrayLiteralContent,
497
505
  NestedElementList,
498
506
  NestedElement,
499
507
  ArrayElementDelimiter,
500
508
  ElementList,
501
- InlineElementList,
509
+ ElementListRest,
502
510
  ArrayElementExpression,
503
- Elision,
504
511
  ObjectLiteral,
512
+ BracedObjectLiteral,
513
+ BracedObjectLiteralContent,
505
514
  NestedObjectLiteral,
506
515
  NestedPropertyDefinitions,
507
516
  NestedPropertyDefinition,
@@ -528,6 +537,10 @@ var Civet = (() => {
528
537
  IfStatement,
529
538
  IfClause,
530
539
  UnlessClause,
540
+ IfExpression,
541
+ ExpressionBlock,
542
+ NestedBlockExpressions,
543
+ NestedBlockExpression,
531
544
  IterationStatement,
532
545
  LoopStatement,
533
546
  LoopClause,
@@ -541,6 +554,7 @@ var Civet = (() => {
541
554
  ForDeclaration,
542
555
  ForBinding,
543
556
  SwitchStatement,
557
+ SwitchExpression,
544
558
  CaseBlock,
545
559
  NestedCaseClauses,
546
560
  NestedCaseClause,
@@ -558,6 +572,8 @@ var Civet = (() => {
558
572
  SuppressIndentedApplication,
559
573
  ExpressionStatement,
560
574
  KeywordStatement,
575
+ DebuggerExpression,
576
+ ThrowExpression,
561
577
  MaybeNestedExpression,
562
578
  ImportDeclaration,
563
579
  ImpliedImport,
@@ -623,6 +639,7 @@ var Civet = (() => {
623
639
  NonNewlineWhitespace,
624
640
  __,
625
641
  Whitespace,
642
+ ExpressionDelimiter,
626
643
  StatementDelimiter,
627
644
  NonIdContinue,
628
645
  Loc,
@@ -659,6 +676,7 @@ var Civet = (() => {
659
676
  LetOrConst,
660
677
  Loop,
661
678
  New,
679
+ Not,
662
680
  Of,
663
681
  OpenBrace,
664
682
  OpenBracket,
@@ -672,6 +690,7 @@ var Civet = (() => {
672
690
  SubstitutionStart,
673
691
  Switch,
674
692
  Target,
693
+ Then,
675
694
  Throw,
676
695
  TripleDoubleQuote,
677
696
  TripleSingleQuote,
@@ -763,6 +782,8 @@ var Civet = (() => {
763
782
  CoffeeCommentEnabled,
764
783
  CoffeeBooleansEnabled,
765
784
  CoffeeInterpolationEnabled,
785
+ CoffeeIsntEnabled,
786
+ CoffeeNotEnabled,
766
787
  Reset,
767
788
  Init,
768
789
  Indent,
@@ -782,149 +803,153 @@ var Civet = (() => {
782
803
  var $L6 = $L("this");
783
804
  var $L7 = $L("#");
784
805
  var $L8 = $L("@");
785
- var $L9 = $L("super");
786
- var $L10 = $L("import");
787
- var $L11 = $L("!");
788
- var $L12 = $L("::");
789
- var $L13 = $L("super[");
790
- var $L14 = $L("import.meta");
791
- var $L15 = $L(")");
792
- var $L16 = $L("->");
793
- var $L17 = $L("null");
794
- var $L18 = $L("true");
795
- var $L19 = $L("false");
796
- var $L20 = $L("yes");
797
- var $L21 = $L("on");
798
- var $L22 = $L("no");
799
- var $L23 = $L("off");
800
- var $L24 = $L(",");
801
- var $L25 = $L("]");
802
- var $L26 = $L("}");
803
- var $L27 = $L("**=");
804
- var $L28 = $L("*=");
805
- var $L29 = $L("/=");
806
- var $L30 = $L("%=");
807
- var $L31 = $L("+=");
808
- var $L32 = $L("-=");
809
- var $L33 = $L("<<=");
810
- var $L34 = $L(">>>=");
811
- var $L35 = $L(">>=");
812
- var $L36 = $L("&&=");
813
- var $L37 = $L("&=");
814
- var $L38 = $L("^=");
815
- var $L39 = $L("||=");
816
- var $L40 = $L("|=");
817
- var $L41 = $L("??=");
818
- var $L42 = $L("?=");
819
- var $L43 = $L("=");
820
- var $L44 = $L("**");
821
- var $L45 = $L("*");
822
- var $L46 = $L("/");
823
- var $L47 = $L("%");
824
- var $L48 = $L("+");
825
- var $L49 = $L("-");
826
- var $L50 = $L("<=");
827
- var $L51 = $L(">=");
828
- var $L52 = $L("<<");
829
- var $L53 = $L(">>>");
830
- var $L54 = $L(">>");
831
- var $L55 = $L(">");
832
- var $L56 = $L("!==");
833
- var $L57 = $L("!=");
834
- var $L58 = $L("is");
835
- var $L59 = $L("===");
836
- var $L60 = $L("==");
837
- var $L61 = $L("and");
838
- var $L62 = $L("&&");
839
- var $L63 = $L("or");
840
- var $L64 = $L("||");
841
- var $L65 = $L("??");
842
- var $L66 = $L("instanceof");
843
- var $L67 = $L("in");
844
- var $L68 = $L("&");
845
- var $L69 = $L("^");
846
- var $L70 = $L("|");
847
- var $L71 = $L(";");
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");
904
- var $L128 = $L("var");
905
- var $L129 = $L("void");
906
- var $L130 = $L("when");
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(" ");
925
- var $R0 = $R(new RegExp("(of)(?!\\p{ID_Continue}|[\\u200C\\u200D$])", "suy"));
806
+ var $L9 = $L(".");
807
+ var $L10 = $L("super");
808
+ var $L11 = $L("import");
809
+ var $L12 = $L("!");
810
+ var $L13 = $L("::");
811
+ var $L14 = $L("super[");
812
+ var $L15 = $L("import.meta");
813
+ var $L16 = $L(")");
814
+ var $L17 = $L("->");
815
+ var $L18 = $L("null");
816
+ var $L19 = $L("true");
817
+ var $L20 = $L("false");
818
+ var $L21 = $L("yes");
819
+ var $L22 = $L("on");
820
+ var $L23 = $L("no");
821
+ var $L24 = $L("off");
822
+ var $L25 = $L(",");
823
+ var $L26 = $L("]");
824
+ var $L27 = $L("}");
825
+ var $L28 = $L("**=");
826
+ var $L29 = $L("*=");
827
+ var $L30 = $L("/=");
828
+ var $L31 = $L("%=");
829
+ var $L32 = $L("+=");
830
+ var $L33 = $L("-=");
831
+ var $L34 = $L("<<=");
832
+ var $L35 = $L(">>>=");
833
+ var $L36 = $L(">>=");
834
+ var $L37 = $L("&&=");
835
+ var $L38 = $L("&=");
836
+ var $L39 = $L("^=");
837
+ var $L40 = $L("||=");
838
+ var $L41 = $L("|=");
839
+ var $L42 = $L("??=");
840
+ var $L43 = $L("?=");
841
+ var $L44 = $L("=");
842
+ var $L45 = $L("**");
843
+ var $L46 = $L("*");
844
+ var $L47 = $L("/");
845
+ var $L48 = $L("%");
846
+ var $L49 = $L("+");
847
+ var $L50 = $L("-");
848
+ var $L51 = $L("<=");
849
+ var $L52 = $L(">=");
850
+ var $L53 = $L("<<");
851
+ var $L54 = $L(">>>");
852
+ var $L55 = $L(">>");
853
+ var $L56 = $L(">");
854
+ var $L57 = $L("!==");
855
+ var $L58 = $L("!=");
856
+ var $L59 = $L("isnt");
857
+ var $L60 = $L("is");
858
+ var $L61 = $L("===");
859
+ var $L62 = $L("==");
860
+ var $L63 = $L("and");
861
+ var $L64 = $L("&&");
862
+ var $L65 = $L("or");
863
+ var $L66 = $L("||");
864
+ var $L67 = $L("??");
865
+ var $L68 = $L("instanceof");
866
+ var $L69 = $L("in");
867
+ var $L70 = $L("&");
868
+ var $L71 = $L("^");
869
+ var $L72 = $L("|");
870
+ var $L73 = $L(";");
871
+ var $L74 = $L("finally");
872
+ var $L75 = $L("break");
873
+ var $L76 = $L("continue");
874
+ var $L77 = $L("debugger");
875
+ var $L78 = $L("import type");
876
+ var $L79 = $L("default");
877
+ var $L80 = $L(":=");
878
+ var $L81 = $L("/*");
879
+ var $L82 = $L("*/");
880
+ var $L83 = $L("###");
881
+ var $L84 = $L("as");
882
+ var $L85 = $L("async");
883
+ var $L86 = $L("await");
884
+ var $L87 = $L("`");
885
+ var $L88 = $L("case");
886
+ var $L89 = $L("catch");
887
+ var $L90 = $L("class");
888
+ var $L91 = $L("#{");
889
+ var $L92 = $L(":");
890
+ var $L93 = $L("delete");
891
+ var $L94 = $L("do");
892
+ var $L95 = $L("..");
893
+ var $L96 = $L("...");
894
+ var $L97 = $L('"');
895
+ var $L98 = $L("else");
896
+ var $L99 = $L("export");
897
+ var $L100 = $L("for");
898
+ var $L101 = $L("from");
899
+ var $L102 = $L("function");
900
+ var $L103 = $L("get");
901
+ var $L104 = $L("set");
902
+ var $L105 = $L("if");
903
+ var $L106 = $L(" ");
904
+ var $L107 = $L("let");
905
+ var $L108 = $L("const");
906
+ var $L109 = $L("loop");
907
+ var $L110 = $L("new");
908
+ var $L111 = $L("not");
909
+ var $L112 = $L("of");
910
+ var $L113 = $L("{");
911
+ var $L114 = $L("[");
912
+ var $L115 = $L("(");
913
+ var $L116 = $L("?");
914
+ var $L117 = $L("return");
915
+ var $L118 = $L("'");
916
+ var $L119 = $L("static");
917
+ var $L120 = $L("${");
918
+ var $L121 = $L("switch");
919
+ var $L122 = $L("target");
920
+ var $L123 = $L("then");
921
+ var $L124 = $L("throw");
922
+ var $L125 = $L('"""');
923
+ var $L126 = $L("'''");
924
+ var $L127 = $L("```");
925
+ var $L128 = $L("try");
926
+ var $L129 = $L("typeof");
927
+ var $L130 = $L("unless");
928
+ var $L131 = $L("until");
929
+ var $L132 = $L("var");
930
+ var $L133 = $L("void");
931
+ var $L134 = $L("when");
932
+ var $L135 = $L("while");
933
+ var $L136 = $L("yield");
934
+ var $L137 = $L("/>");
935
+ var $L138 = $L("</");
936
+ var $L139 = $L("<>");
937
+ var $L140 = $L("</>");
938
+ var $L141 = $L("declare");
939
+ var $L142 = $L("type");
940
+ var $L143 = $L("interface");
941
+ var $L144 = $L("namespace");
942
+ var $L145 = $L("readonly");
943
+ var $L146 = $L("asserts");
944
+ var $L147 = $L("keyof");
945
+ var $L148 = $L("infer");
946
+ var $L149 = $L("[]");
947
+ var $L150 = $L("civet");
948
+ var $L151 = $L(" ");
949
+ var $L152 = $L(" ");
950
+ var $R0 = $R(new RegExp("(of|then)(?!\\p{ID_Continue}|[\\u200C\\u200D$])", "suy"));
926
951
  var $R1 = $R(new RegExp("(?:\\p{ID_Start}|[_$])(?:\\p{ID_Continue}|[\\u200C\\u200D$])*", "suy"));
927
- var $R2 = $R(new RegExp("[!~+-]", "suy"));
952
+ var $R2 = $R(new RegExp("[!~+-](?!\\s)", "suy"));
928
953
  var $R3 = $R(new RegExp("(?=[\\s\\)])", "suy"));
929
954
  var $R4 = $R(new RegExp('[^;"\\s]+', "suy"));
930
955
  var $R5 = $R(new RegExp("(?:0|[1-9](?:_[0-9]|[0-9])*)n", "suy"));
@@ -946,27 +971,32 @@ var Civet = (() => {
946
971
  var $R21 = $R(new RegExp("(?:\\$(?!\\{)|\\\\.|[^$`])+", "suy"));
947
972
  var $R22 = $R(new RegExp("(?:\\$(?!\\{)|`(?!``)|\\\\.|[^$`])+", "suy"));
948
973
  var $R23 = $R(new RegExp("(?:on|off|yes|no)(?!\\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"));
950
- var $R25 = $R(new RegExp("\\/\\/[^\\r\\n]*", "suy"));
951
- var $R26 = $R(new RegExp(".", "suy"));
952
- var $R27 = $R(new RegExp("#([^\\r\\n]*)", "suy"));
953
- var $R28 = $R(new RegExp("[^\\r\\n]", "suy"));
954
- var $R29 = $R(new RegExp("[ \\t]+", "suy"));
955
- var $R30 = $R(new RegExp("[\\s]+", "suy"));
956
- var $R31 = $R(new RegExp("(?!\\p{ID_Continue})", "suy"));
957
- var $R32 = $R(new RegExp("\\s", "suy"));
958
- var $R33 = $R(new RegExp("(?:\\p{ID_Start}|[_$])(?:\\p{ID_Continue}|[\\u200C\\u200D$-])*", "suy"));
959
- var $R34 = $R(new RegExp('"[^"]*"', "suy"));
960
- var $R35 = $R(new RegExp("'[^']*'", "suy"));
961
- var $R36 = $R(new RegExp("[^{}<>]+", "suy"));
962
- var $R37 = $R(new RegExp("[+-]?", "suy"));
963
- var $R38 = $R(new RegExp("[+-]", "suy"));
964
- var $R39 = $R(new RegExp("#![^\\r\\n]*", "suy"));
965
- var $R40 = $R(new RegExp("[\\t ]*", "suy"));
966
- var $R41 = $R(new RegExp("[\\s]*", "suy"));
967
- var $R42 = $R(new RegExp("\\s+([+-]?)([a-zA-Z0-9-]+)", "suy"));
968
- var $R43 = $R(new RegExp("\\r\\n|\\n|\\r|$", "suy"));
969
- var Program$0 = $S(Reset, Init, __, $Q(TopLevelStatement), __);
974
+ var $R24 = $R(new RegExp("(?:isnt)(?!\\p{ID_Continue})", "suy"));
975
+ var $R25 = $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"));
976
+ var $R26 = $R(new RegExp("\\/\\/[^\\r\\n]*", "suy"));
977
+ var $R27 = $R(new RegExp(".", "suy"));
978
+ var $R28 = $R(new RegExp("#([^\\r\\n]*)", "suy"));
979
+ var $R29 = $R(new RegExp("[^\\r\\n]", "suy"));
980
+ var $R30 = $R(new RegExp("[ \\t]+", "suy"));
981
+ var $R31 = $R(new RegExp("[\\s]+", "suy"));
982
+ var $R32 = $R(new RegExp("(?!\\p{ID_Continue})", "suy"));
983
+ var $R33 = $R(new RegExp("\\s", "suy"));
984
+ var $R34 = $R(new RegExp("(?:\\p{ID_Start}|[_$])(?:\\p{ID_Continue}|[\\u200C\\u200D$-])*", "suy"));
985
+ var $R35 = $R(new RegExp('"[^"]*"', "suy"));
986
+ var $R36 = $R(new RegExp("'[^']*'", "suy"));
987
+ var $R37 = $R(new RegExp("[^{}<>]+", "suy"));
988
+ var $R38 = $R(new RegExp("[+-]?", "suy"));
989
+ var $R39 = $R(new RegExp("[+-]", "suy"));
990
+ var $R40 = $R(new RegExp("#![^\\r\\n]*", "suy"));
991
+ var $R41 = $R(new RegExp("[\\t ]*", "suy"));
992
+ var $R42 = $R(new RegExp("[\\s]*", "suy"));
993
+ var $R43 = $R(new RegExp("\\s+([+-]?)([a-zA-Z0-9-]+)", "suy"));
994
+ var $R44 = $R(new RegExp("\\r\\n|\\n|\\r|$", "suy"));
995
+ var Program$0 = $TS($S(Reset, Init, __, $Q(TopLevelStatement), __), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
996
+ var statements = $4;
997
+ module.processProgram(statements);
998
+ return $0;
999
+ });
970
1000
  function Program(state) {
971
1001
  if (state.verbose)
972
1002
  console.log("ENTER:", "Program");
@@ -986,6 +1016,26 @@ var Civet = (() => {
986
1016
  return TopLevelStatement$0(state);
987
1017
  }
988
1018
  }
1019
+ var ExtendedExpression$0 = $S(__, ExpressionizedStatement);
1020
+ var ExtendedExpression$1 = AssignmentExpression;
1021
+ function ExtendedExpression(state) {
1022
+ if (state.tokenize) {
1023
+ return $TOKEN("ExtendedExpression", state, ExtendedExpression$0(state) || ExtendedExpression$1(state));
1024
+ } else {
1025
+ return ExtendedExpression$0(state) || ExtendedExpression$1(state);
1026
+ }
1027
+ }
1028
+ var ExpressionizedStatement$0 = DebuggerExpression;
1029
+ var ExpressionizedStatement$1 = IfExpression;
1030
+ var ExpressionizedStatement$2 = SwitchExpression;
1031
+ var ExpressionizedStatement$3 = ThrowExpression;
1032
+ function ExpressionizedStatement(state) {
1033
+ if (state.tokenize) {
1034
+ return $TOKEN("ExpressionizedStatement", state, ExpressionizedStatement$0(state) || ExpressionizedStatement$1(state) || ExpressionizedStatement$2(state) || ExpressionizedStatement$3(state));
1035
+ } else {
1036
+ return ExpressionizedStatement$0(state) || ExpressionizedStatement$1(state) || ExpressionizedStatement$2(state) || ExpressionizedStatement$3(state);
1037
+ }
1038
+ }
989
1039
  var Expression$0 = $TS($S(AssignmentExpression, $Q($S(__, Comma, AssignmentExpression))), function($skip, $loc, $0, $1, $2) {
990
1040
  if ($2.length == 0)
991
1041
  return $1;
@@ -1057,7 +1107,7 @@ var Civet = (() => {
1057
1107
  return NestedArgument$0(state);
1058
1108
  }
1059
1109
  }
1060
- var InlineArgumentExpressions$0 = $TS($S($S($E(DotDotDot), AssignmentExpressionRest), $Q($S(__, Comma, $Q(TrailingComment), $E(DotDotDot), AssignmentExpressionRest))), function($skip, $loc, $0, $1, $2) {
1110
+ var InlineArgumentExpressions$0 = $TS($S($S($E(DotDotDot), ExtendedExpression), $Q($S(__, Comma, $Q(TrailingComment), $E(DotDotDot), ExtendedExpression))), function($skip, $loc, $0, $1, $2) {
1061
1111
  if ($2.length == 0)
1062
1112
  return $1;
1063
1113
  return $0;
@@ -1185,12 +1235,17 @@ var Civet = (() => {
1185
1235
  return UpdateExpressionSymbol$0(state);
1186
1236
  }
1187
1237
  }
1188
- var AssignmentExpression$0 = $TS($S($Q(TrailingComment), AssignmentExpressionRest), function($skip, $loc, $0, $1, $2) {
1189
- if ($1.length)
1238
+ var AssignmentExpression$0 = $TS($S($Q(TrailingComment), AssignmentExpressionTail), function($skip, $loc, $0, $1, $2) {
1239
+ if ($1.length) {
1240
+ if ($2.children) {
1241
+ $2.children.splice(0, 0, ...$1);
1242
+ return $2;
1243
+ }
1190
1244
  return $0;
1245
+ }
1191
1246
  return $2;
1192
1247
  });
1193
- var AssignmentExpression$1 = $S(__, AssignmentExpressionRest);
1248
+ var AssignmentExpression$1 = $S(__, AssignmentExpressionTail);
1194
1249
  function AssignmentExpression(state) {
1195
1250
  if (state.tokenize) {
1196
1251
  return $TOKEN("AssignmentExpression", state, AssignmentExpression$0(state) || AssignmentExpression$1(state));
@@ -1198,42 +1253,89 @@ var Civet = (() => {
1198
1253
  return AssignmentExpression$0(state) || AssignmentExpression$1(state);
1199
1254
  }
1200
1255
  }
1201
- var AssignmentExpressionRest$0 = AwaitExpression;
1202
- var AssignmentExpressionRest$1 = YieldExpression;
1203
- var AssignmentExpressionRest$2 = $S($E($S(Async, __)), ArrowFunction);
1204
- var AssignmentExpressionRest$3 = $T($S($P($S(__, LeftHandSideExpression, __, AssignmentOp)), Expression), function(value) {
1205
- return { "type": "AssignmentExpression", "children": value };
1256
+ var AssignmentExpressionTail$0 = YieldExpression;
1257
+ var AssignmentExpressionTail$1 = ArrowFunction;
1258
+ var AssignmentExpressionTail$2 = $TS($S($P($S(__, LeftHandSideExpression, __, AssignmentOp)), ExtendedExpression), function($skip, $loc, $0, $1, $2) {
1259
+ const lastAssignment = $1[$1.length - 1];
1260
+ let tail = [];
1261
+ if (lastAssignment[3].token === "=") {
1262
+ const lhs = lastAssignment[1];
1263
+ if (lhs.type === "ObjectExpression") {
1264
+ lhs.children.splice(0, 0, "(");
1265
+ tail.push(")");
1266
+ }
1267
+ if (Array.isArray(lhs) && lhs.length > 1) {
1268
+ const props = lhs[lhs.length - 1];
1269
+ if (Array.isArray(props)) {
1270
+ const lastProp = props[props.length - 1];
1271
+ if (lastProp.type === "SliceExpression") {
1272
+ const { start, end, children: c } = lastProp;
1273
+ c[0].token = ".splice(";
1274
+ c[1] = start;
1275
+ c[2] = ", ";
1276
+ if (end)
1277
+ c[3] = [end, " - ", start];
1278
+ else
1279
+ c[3] = ["1/0"];
1280
+ c[4] = [", ...", $2];
1281
+ c[5] = ")";
1282
+ lastAssignment.pop();
1283
+ if (module.isWhitespaceOrEmpty(lastAssignment[2]))
1284
+ lastAssignment.pop();
1285
+ return $1;
1286
+ }
1287
+ }
1288
+ }
1289
+ }
1290
+ return {
1291
+ type: "AssignmentExpression",
1292
+ children: [...$0, ...tail]
1293
+ };
1206
1294
  });
1207
- var AssignmentExpressionRest$4 = ConditionalExpression;
1208
- function AssignmentExpressionRest(state) {
1295
+ var AssignmentExpressionTail$3 = ConditionalExpression;
1296
+ function AssignmentExpressionTail(state) {
1209
1297
  if (state.tokenize) {
1210
- return $TOKEN("AssignmentExpressionRest", state, AssignmentExpressionRest$0(state) || AssignmentExpressionRest$1(state) || AssignmentExpressionRest$2(state) || AssignmentExpressionRest$3(state) || AssignmentExpressionRest$4(state));
1298
+ return $TOKEN("AssignmentExpressionTail", state, AssignmentExpressionTail$0(state) || AssignmentExpressionTail$1(state) || AssignmentExpressionTail$2(state) || AssignmentExpressionTail$3(state));
1211
1299
  } else {
1212
- return AssignmentExpressionRest$0(state) || AssignmentExpressionRest$1(state) || AssignmentExpressionRest$2(state) || AssignmentExpressionRest$3(state) || AssignmentExpressionRest$4(state);
1300
+ return AssignmentExpressionTail$0(state) || AssignmentExpressionTail$1(state) || AssignmentExpressionTail$2(state) || AssignmentExpressionTail$3(state);
1213
1301
  }
1214
1302
  }
1215
- var AwaitExpression$0 = $S(Await, $Q(TrailingComment), AssignmentExpression);
1216
- function AwaitExpression(state) {
1303
+ var YieldExpression$0 = $S(Yield, YieldTail);
1304
+ function YieldExpression(state) {
1217
1305
  if (state.verbose)
1218
- console.log("ENTER:", "AwaitExpression");
1306
+ console.log("ENTER:", "YieldExpression");
1219
1307
  if (state.tokenize) {
1220
- return $TOKEN("AwaitExpression", state, AwaitExpression$0(state));
1308
+ return $TOKEN("YieldExpression", state, YieldExpression$0(state));
1221
1309
  } else {
1222
- return AwaitExpression$0(state);
1310
+ return YieldExpression$0(state);
1223
1311
  }
1224
1312
  }
1225
- var YieldExpression$0 = $S(Yield, $E($S($Q(TrailingComment), Star)), AssignmentExpression);
1226
- function YieldExpression(state) {
1313
+ var YieldTail$0 = $Y(EOS);
1314
+ var YieldTail$1 = $S($E($S($Q(TrailingComment), Star)), AssignmentExpression);
1315
+ function YieldTail(state) {
1316
+ if (state.tokenize) {
1317
+ return $TOKEN("YieldTail", state, YieldTail$0(state) || YieldTail$1(state));
1318
+ } else {
1319
+ return YieldTail$0(state) || YieldTail$1(state);
1320
+ }
1321
+ }
1322
+ var ArrowFunction$0 = $TS($S($E($S(Async, __)), ArrowFunctionTail), function($skip, $loc, $0, $1, $2) {
1323
+ if ($1)
1324
+ $2.children.unshift($1);
1325
+ return $2;
1326
+ });
1327
+ function ArrowFunction(state) {
1227
1328
  if (state.verbose)
1228
- console.log("ENTER:", "YieldExpression");
1329
+ console.log("ENTER:", "ArrowFunction");
1229
1330
  if (state.tokenize) {
1230
- return $TOKEN("YieldExpression", state, YieldExpression$0(state));
1331
+ return $TOKEN("ArrowFunction", state, ArrowFunction$0(state));
1231
1332
  } else {
1232
- return YieldExpression$0(state);
1333
+ return ArrowFunction$0(state);
1233
1334
  }
1234
1335
  }
1235
- var ArrowFunction$0 = ThinArrowFunction;
1236
- var ArrowFunction$1 = $TS($S(Parameters, $E(ReturnTypeSuffix), FatArrow, FatArrowBody), function($skip, $loc, $0, $1, $2, $3, $4) {
1336
+ var ArrowFunctionTail$0 = ThinArrowFunction;
1337
+ var ArrowFunctionTail$1 = $TS($S(Parameters, $E(ReturnTypeSuffix), FatArrow, FatArrowBody), function($skip, $loc, $0, $1, $2, $3, $4) {
1338
+ var parameters = $1;
1237
1339
  var suffix = $2;
1238
1340
  var expOrBlock = $4;
1239
1341
  const isVoid = suffix?.children?.[1]?.[0]?.[1]?.token === "void";
@@ -1242,15 +1344,19 @@ var Civet = (() => {
1242
1344
  module.addImplicitReturns(expOrBlock);
1243
1345
  }
1244
1346
  return {
1245
- type: "FunctionExpression",
1347
+ type: "ArrowFunction",
1348
+ parameters,
1349
+ returnType: suffix,
1350
+ ts: false,
1351
+ block: expOrBlock,
1246
1352
  children: $0
1247
1353
  };
1248
1354
  });
1249
- function ArrowFunction(state) {
1355
+ function ArrowFunctionTail(state) {
1250
1356
  if (state.tokenize) {
1251
- return $TOKEN("ArrowFunction", state, ArrowFunction$0(state) || ArrowFunction$1(state));
1357
+ return $TOKEN("ArrowFunctionTail", state, ArrowFunctionTail$0(state) || ArrowFunctionTail$1(state));
1252
1358
  } else {
1253
- return ArrowFunction$0(state) || ArrowFunction$1(state);
1359
+ return ArrowFunctionTail$0(state) || ArrowFunctionTail$1(state);
1254
1360
  }
1255
1361
  }
1256
1362
  var FatArrow$0 = $TS($S(__, $EXPECT($L3, fail, 'FatArrow "=>"')), function($skip, $loc, $0, $1, $2) {
@@ -1268,25 +1374,24 @@ var Civet = (() => {
1268
1374
  return FatArrow$0(state);
1269
1375
  }
1270
1376
  }
1271
- var FatArrowBody$0 = $T($S(__, OpenBrace, EOS, NestedBlockExpressions, __, CloseBrace), function(value) {
1377
+ var FatArrowBody$0 = $T($S(__, OpenBrace, EOS, NestedBlockStatements, __, CloseBrace), function(value) {
1272
1378
  var exps = value[3];
1273
1379
  return { "type": "BlockStatement", "expressions": exps, "children": value };
1274
1380
  });
1275
- var FatArrowBody$1 = $T($S(InsertOpenBrace, EOS, NestedBlockExpressions, InsertNewline, InsertIndent, InsertCloseBrace), function(value) {
1381
+ var FatArrowBody$1 = $T($S(InsertOpenBrace, EOS, NestedBlockStatements, InsertNewline, InsertIndent, InsertCloseBrace), function(value) {
1276
1382
  var exps = value[2];
1277
1383
  return { "type": "BlockStatement", "expressions": exps, "children": value };
1278
1384
  });
1279
1385
  var FatArrowBody$2 = AssignmentExpression;
1280
- var FatArrowBody$3 = $S(__, AssignmentExpression);
1281
- var FatArrowBody$4 = EmptyBlock;
1386
+ var FatArrowBody$3 = EmptyBlock;
1282
1387
  function FatArrowBody(state) {
1283
1388
  if (state.tokenize) {
1284
- return $TOKEN("FatArrowBody", state, FatArrowBody$0(state) || FatArrowBody$1(state) || FatArrowBody$2(state) || FatArrowBody$3(state) || FatArrowBody$4(state));
1389
+ return $TOKEN("FatArrowBody", state, FatArrowBody$0(state) || FatArrowBody$1(state) || FatArrowBody$2(state) || FatArrowBody$3(state));
1285
1390
  } else {
1286
- return FatArrowBody$0(state) || FatArrowBody$1(state) || FatArrowBody$2(state) || FatArrowBody$3(state) || FatArrowBody$4(state);
1391
+ return FatArrowBody$0(state) || FatArrowBody$1(state) || FatArrowBody$2(state) || FatArrowBody$3(state);
1287
1392
  }
1288
1393
  }
1289
- var ConditionalExpression$0 = $TS($S(ShortCircuitExpression, $E($S(__, QuestionMark, AssignmentExpression, __, Colon, AssignmentExpression))), function($skip, $loc, $0, $1, $2) {
1394
+ var ConditionalExpression$0 = $TS($S(ShortCircuitExpression, $E($S(__, QuestionMark, ExtendedExpression, __, Colon, ExtendedExpression))), function($skip, $loc, $0, $1, $2) {
1290
1395
  if ($2)
1291
1396
  return $0;
1292
1397
  return $1;
@@ -1319,7 +1424,7 @@ var Civet = (() => {
1319
1424
  var PrimaryExpression$6 = ClassExpression;
1320
1425
  var PrimaryExpression$7 = RegularExpressionLiteral;
1321
1426
  var PrimaryExpression$8 = TemplateLiteral;
1322
- var PrimaryExpression$9 = $S(OpenParen, Expression, __, CloseParen);
1427
+ var PrimaryExpression$9 = $S(OpenParen, ExtendedExpression, __, CloseParen);
1323
1428
  var PrimaryExpression$10 = JSXElement;
1324
1429
  var PrimaryExpression$11 = JSXFragment;
1325
1430
  function PrimaryExpression(state) {
@@ -1415,7 +1520,7 @@ var Civet = (() => {
1415
1520
  return ClassElement$0(state) || ClassElement$1(state);
1416
1521
  }
1417
1522
  }
1418
- var FieldDefinition$0 = $TS($S(InsertReadonly, ClassElementName, $E(TypeSuffix), __, ConstAssignment, AssignmentExpression), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6) {
1523
+ var FieldDefinition$0 = $TS($S(InsertReadonly, ClassElementName, $E(TypeSuffix), __, ConstAssignment, ExtendedExpression), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6) {
1419
1524
  var r = $1;
1420
1525
  var ca = $5;
1421
1526
  r.children[0].$loc = {
@@ -1458,27 +1563,22 @@ var Civet = (() => {
1458
1563
  return AtAccessor$0(state);
1459
1564
  }
1460
1565
  }
1461
- var LeftHandSideExpression$0 = NewExpression;
1462
- var LeftHandSideExpression$1 = CallExpression;
1566
+ var LeftHandSideExpression$0 = $TS($S($Q($S(New, $N($EXPECT($L9, fail, 'LeftHandSideExpression "."')), __)), CallExpression), function($skip, $loc, $0, $1, $2) {
1567
+ if ($1.length)
1568
+ return $0;
1569
+ return $2;
1570
+ });
1463
1571
  function LeftHandSideExpression(state) {
1464
- if (state.tokenize) {
1465
- return $TOKEN("LeftHandSideExpression", state, LeftHandSideExpression$0(state) || LeftHandSideExpression$1(state));
1466
- } else {
1467
- return LeftHandSideExpression$0(state) || LeftHandSideExpression$1(state);
1468
- }
1469
- }
1470
- var NewExpression$0 = $S($P($S(New, __)), CallExpression);
1471
- function NewExpression(state) {
1472
1572
  if (state.verbose)
1473
- console.log("ENTER:", "NewExpression");
1573
+ console.log("ENTER:", "LeftHandSideExpression");
1474
1574
  if (state.tokenize) {
1475
- return $TOKEN("NewExpression", state, NewExpression$0(state));
1575
+ return $TOKEN("LeftHandSideExpression", state, LeftHandSideExpression$0(state));
1476
1576
  } else {
1477
- return NewExpression$0(state);
1577
+ return LeftHandSideExpression$0(state);
1478
1578
  }
1479
1579
  }
1480
- var CallExpression$0 = $S($EXPECT($L9, fail, 'CallExpression "super"'), ArgumentsWithTrailingCallExpressions);
1481
- var CallExpression$1 = $S($EXPECT($L10, fail, 'CallExpression "import"'), __, OpenParen, AssignmentExpression, __, CloseParen);
1580
+ var CallExpression$0 = $S($EXPECT($L10, fail, 'CallExpression "super"'), ArgumentsWithTrailingCallExpressions);
1581
+ var CallExpression$1 = $S($EXPECT($L11, fail, 'CallExpression "import"'), __, OpenParen, ExtendedExpression, __, CloseParen);
1482
1582
  var CallExpression$2 = $TS($S(MemberExpression, $Q(CallExpressionRest)), function($skip, $loc, $0, $1, $2) {
1483
1583
  if ($2.length)
1484
1584
  return $0;
@@ -1511,7 +1611,7 @@ var Civet = (() => {
1511
1611
  return OptionalShorthand$0(state);
1512
1612
  }
1513
1613
  }
1514
- var NonNullAssertion$0 = $T($EXPECT($L11, fail, 'NonNullAssertion "!"'), function(value) {
1614
+ var NonNullAssertion$0 = $T($EXPECT($L12, fail, 'NonNullAssertion "!"'), function(value) {
1515
1615
  return { "ts": true, "children": value };
1516
1616
  });
1517
1617
  function NonNullAssertion(state) {
@@ -1523,7 +1623,7 @@ var Civet = (() => {
1523
1623
  return NonNullAssertion$0(state);
1524
1624
  }
1525
1625
  }
1526
- var AdditionalReservedWords$0 = $R$0($EXPECT($R0, fail, "AdditionalReservedWords /(of)(?!\\p{ID_Continue}|[\\u200C\\u200D$])/"));
1626
+ var AdditionalReservedWords$0 = $R$0($EXPECT($R0, fail, "AdditionalReservedWords /(of|then)(?!\\p{ID_Continue}|[\\u200C\\u200D$])/"));
1527
1627
  function AdditionalReservedWords(state) {
1528
1628
  if (state.verbose)
1529
1629
  console.log("ENTER:", "AdditionalReservedWords");
@@ -1538,8 +1638,8 @@ var Civet = (() => {
1538
1638
  return $0;
1539
1639
  return $1;
1540
1640
  });
1541
- var MemberExpression$1 = $S($Q(TrailingComment), SuperProperty);
1542
- var MemberExpression$2 = $S($Q(TrailingComment), MetaProperty);
1641
+ var MemberExpression$1 = SuperProperty;
1642
+ var MemberExpression$2 = MetaProperty;
1543
1643
  function MemberExpression(state) {
1544
1644
  if (state.tokenize) {
1545
1645
  return $TOKEN("MemberExpression", state, MemberExpression$0(state) || MemberExpression$1(state) || MemberExpression$2(state));
@@ -1547,9 +1647,13 @@ var Civet = (() => {
1547
1647
  return MemberExpression$0(state) || MemberExpression$1(state) || MemberExpression$2(state);
1548
1648
  }
1549
1649
  }
1550
- var MemberExpressionRest$0 = $S($E($C(OptionalShorthand, NonNullAssertion)), MemberBracketContent);
1650
+ var MemberExpressionRest$0 = $TS($S($E($C(OptionalShorthand, NonNullAssertion)), MemberBracketContent), function($skip, $loc, $0, $1, $2) {
1651
+ if ($1)
1652
+ return $0;
1653
+ return $2;
1654
+ });
1551
1655
  var MemberExpressionRest$1 = $S($E($S($Y(EOS), IndentedFurther)), PropertyAccess);
1552
- var MemberExpressionRest$2 = $TS($S($E($S($Y(EOS), IndentedFurther)), $EXPECT($L12, fail, 'MemberExpressionRest "::"'), $E(IdentifierName)), function($skip, $loc, $0, $1, $2, $3) {
1656
+ var MemberExpressionRest$2 = $TS($S($E($S($Y(EOS), IndentedFurther)), $EXPECT($L13, fail, 'MemberExpressionRest "::"'), $E(IdentifierName)), function($skip, $loc, $0, $1, $2, $3) {
1553
1657
  var id = $3;
1554
1658
  if (id)
1555
1659
  return [".prototype.", id];
@@ -1563,7 +1667,7 @@ var Civet = (() => {
1563
1667
  return MemberExpressionRest$0(state) || MemberExpressionRest$1(state) || MemberExpressionRest$2(state) || MemberExpressionRest$3(state);
1564
1668
  }
1565
1669
  }
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) {
1670
+ var MemberBracketContent$0 = $TS($S(OpenBracket, ExtendedExpression, $E($S($C(DotDotDot, DotDot), $E(ExtendedExpression))), __, CloseBracket), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
1567
1671
  if ($3) {
1568
1672
  const sep = $3[0];
1569
1673
  const end = $3[1];
@@ -1574,17 +1678,23 @@ var Civet = (() => {
1574
1678
  if (!end) {
1575
1679
  return {
1576
1680
  type: "SliceExpression",
1681
+ start: $2,
1682
+ end: void 0,
1577
1683
  children: [$1, $2, $4, $5]
1578
1684
  };
1579
1685
  }
1580
1686
  if (inclusive) {
1581
1687
  return {
1582
1688
  type: "SliceExpression",
1689
+ start: $2,
1690
+ end: ["1 + ", end],
1583
1691
  children: [$1, $2, sep, ["1 + ", end, " || 1/0"], $4, $5]
1584
1692
  };
1585
1693
  }
1586
1694
  return {
1587
1695
  type: "SliceExpression",
1696
+ start: $2,
1697
+ end,
1588
1698
  children: [$1, $2, sep, end, $4, $5]
1589
1699
  };
1590
1700
  }
@@ -1609,7 +1719,7 @@ var Civet = (() => {
1609
1719
  return PropertyAccess$0(state);
1610
1720
  }
1611
1721
  }
1612
- var SuperProperty$0 = $S($EXPECT($L13, fail, 'SuperProperty "super["'), Expression, __, CloseBracket);
1722
+ var SuperProperty$0 = $S($EXPECT($L14, fail, 'SuperProperty "super["'), ExtendedExpression, __, CloseBracket);
1613
1723
  function SuperProperty(state) {
1614
1724
  if (state.verbose)
1615
1725
  console.log("ENTER:", "SuperProperty");
@@ -1620,7 +1730,7 @@ var Civet = (() => {
1620
1730
  }
1621
1731
  }
1622
1732
  var MetaProperty$0 = $S(New, Dot, Target);
1623
- var MetaProperty$1 = $TV($EXPECT($L14, fail, 'MetaProperty "import.meta"'), function($skip, $loc, $0, $1) {
1733
+ var MetaProperty$1 = $TV($EXPECT($L15, fail, 'MetaProperty "import.meta"'), function($skip, $loc, $0, $1) {
1624
1734
  return { $loc, token: $1 };
1625
1735
  });
1626
1736
  function MetaProperty(state) {
@@ -1632,7 +1742,11 @@ var Civet = (() => {
1632
1742
  }
1633
1743
  var Parameters$0 = NonEmptyParameters;
1634
1744
  var Parameters$1 = $TV($EXPECT($L0, fail, 'Parameters ""'), function($skip, $loc, $0, $1) {
1635
- return { $loc, token: "()" };
1745
+ return {
1746
+ type: "Parameters",
1747
+ children: [{ $loc, token: "()" }],
1748
+ names: []
1749
+ };
1636
1750
  });
1637
1751
  function Parameters(state) {
1638
1752
  if (state.tokenize) {
@@ -1641,7 +1755,13 @@ var Civet = (() => {
1641
1755
  return Parameters$0(state) || Parameters$1(state);
1642
1756
  }
1643
1757
  }
1644
- var NonEmptyParameters$0 = $S($E(TypeParameters), OpenParen, $Q(ParameterElement), $E(FunctionRestParameter), __, CloseParen);
1758
+ var NonEmptyParameters$0 = $TS($S($E(TypeParameters), OpenParen, $Q(ParameterElement), $E(FunctionRestParameter), __, CloseParen), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6) {
1759
+ return {
1760
+ type: "Parameters",
1761
+ children: $0,
1762
+ names: $3.flatMap((p) => p.names)
1763
+ };
1764
+ });
1645
1765
  function NonEmptyParameters(state) {
1646
1766
  if (state.verbose)
1647
1767
  console.log("ENTER:", "NonEmptyParameters");
@@ -1661,7 +1781,13 @@ var Civet = (() => {
1661
1781
  return FunctionRestParameter$0(state);
1662
1782
  }
1663
1783
  }
1664
- var ParameterElement$0 = $S(__, $C(BindingIdentifier, BindingPattern), $E(TypeSuffix), $E(Initializer), ParameterElementDelimiter);
1784
+ var ParameterElement$0 = $TS($S($C(BindingIdentifier, BindingPattern), $E(TypeSuffix), $E(Initializer), ParameterElementDelimiter), function($skip, $loc, $0, $1, $2, $3, $4) {
1785
+ return {
1786
+ type: "Parameter",
1787
+ children: $0,
1788
+ names: $1.names
1789
+ };
1790
+ });
1665
1791
  function ParameterElement(state) {
1666
1792
  if (state.verbose)
1667
1793
  console.log("ENTER:", "ParameterElement");
@@ -1672,7 +1798,7 @@ var Civet = (() => {
1672
1798
  }
1673
1799
  }
1674
1800
  var ParameterElementDelimiter$0 = $S($Q(_), Comma);
1675
- var ParameterElementDelimiter$1 = $Y($S(__, $EXPECT($L15, fail, 'ParameterElementDelimiter ")"')));
1801
+ var ParameterElementDelimiter$1 = $Y($S(__, $EXPECT($L16, fail, 'ParameterElementDelimiter ")"')));
1676
1802
  var ParameterElementDelimiter$2 = $TV($Y(EOS), function($skip, $loc, $0, $1) {
1677
1803
  return { $loc, token: "," };
1678
1804
  });
@@ -1683,7 +1809,10 @@ var Civet = (() => {
1683
1809
  return ParameterElementDelimiter$0(state) || ParameterElementDelimiter$1(state) || ParameterElementDelimiter$2(state);
1684
1810
  }
1685
1811
  }
1686
- var BindingIdentifier$0 = $S(__, Identifier);
1812
+ var BindingIdentifier$0 = $TS($S(__, Identifier), function($skip, $loc, $0, $1, $2) {
1813
+ $2.children.unshift($1);
1814
+ return $2;
1815
+ });
1687
1816
  function BindingIdentifier(state) {
1688
1817
  if (state.verbose)
1689
1818
  console.log("ENTER:", "BindingIdentifier");
@@ -1693,8 +1822,16 @@ var Civet = (() => {
1693
1822
  return BindingIdentifier$0(state);
1694
1823
  }
1695
1824
  }
1696
- var BindingPattern$0 = $S(__, ObjectBindingPattern);
1697
- var BindingPattern$1 = $S(__, ArrayBindingPattern);
1825
+ var BindingPattern$0 = $TS($S(__, ObjectBindingPattern), function($skip, $loc, $0, $1, $2) {
1826
+ var p = $2;
1827
+ p.children.unshift($1);
1828
+ return p;
1829
+ });
1830
+ var BindingPattern$1 = $TS($S(__, ArrayBindingPattern), function($skip, $loc, $0, $1, $2) {
1831
+ var p = $2;
1832
+ p.children.unshift($1);
1833
+ return p;
1834
+ });
1698
1835
  function BindingPattern(state) {
1699
1836
  if (state.tokenize) {
1700
1837
  return $TOKEN("BindingPattern", state, BindingPattern$0(state) || BindingPattern$1(state));
@@ -1702,32 +1839,111 @@ var Civet = (() => {
1702
1839
  return BindingPattern$0(state) || BindingPattern$1(state);
1703
1840
  }
1704
1841
  }
1705
- var ObjectBindingPattern$0 = $S(OpenBrace, $Y(EOS), NestedBindingProperties, __, CloseBrace);
1706
- var ObjectBindingPattern$1 = $S(OpenBrace, $Q(BindingProperty), $E($S(__, BindingRestProperty)), __, CloseBrace);
1842
+ var ObjectBindingPattern$0 = $TS($S(OpenBrace, ObjectBindingPatternContent, __, CloseBrace), function($skip, $loc, $0, $1, $2, $3, $4) {
1843
+ var c = $2;
1844
+ c.children.unshift($1);
1845
+ c.children.push($3, $4);
1846
+ return c;
1847
+ });
1707
1848
  function ObjectBindingPattern(state) {
1849
+ if (state.verbose)
1850
+ console.log("ENTER:", "ObjectBindingPattern");
1708
1851
  if (state.tokenize) {
1709
- return $TOKEN("ObjectBindingPattern", state, ObjectBindingPattern$0(state) || ObjectBindingPattern$1(state));
1852
+ return $TOKEN("ObjectBindingPattern", state, ObjectBindingPattern$0(state));
1710
1853
  } else {
1711
- return ObjectBindingPattern$0(state) || ObjectBindingPattern$1(state);
1854
+ return ObjectBindingPattern$0(state);
1712
1855
  }
1713
1856
  }
1714
- var ArrayBindingPattern$0 = $S(OpenBracket, $Y(EOS), NestedBindingElements, __, CloseBracket);
1715
- var ArrayBindingPattern$1 = $S(OpenBracket, $Q($C(BindingElement, Elision)), $E($S(__, BindingRestElement)), __, CloseBracket);
1857
+ var ObjectBindingPatternContent$0 = $T($S($Y(EOS), NestedBindingProperties), function(value) {
1858
+ return value[1];
1859
+ });
1860
+ var ObjectBindingPatternContent$1 = $TS($S($Q(BindingProperty), $E($S(__, BindingRestProperty))), function($skip, $loc, $0, $1, $2) {
1861
+ var props = $1;
1862
+ var rest = $2;
1863
+ const names = props.flatMap((p) => p.names);
1864
+ if (rest) {
1865
+ props.push(...rest);
1866
+ names.push(...rest[1].names);
1867
+ }
1868
+ return {
1869
+ type: "BindingPattern",
1870
+ names,
1871
+ children: props
1872
+ };
1873
+ });
1874
+ function ObjectBindingPatternContent(state) {
1875
+ if (state.tokenize) {
1876
+ return $TOKEN("ObjectBindingPatternContent", state, ObjectBindingPatternContent$0(state) || ObjectBindingPatternContent$1(state));
1877
+ } else {
1878
+ return ObjectBindingPatternContent$0(state) || ObjectBindingPatternContent$1(state);
1879
+ }
1880
+ }
1881
+ var ArrayBindingPattern$0 = $TS($S(OpenBracket, ArrayBindingPatternContent, __, CloseBracket), function($skip, $loc, $0, $1, $2, $3, $4) {
1882
+ var c = $2;
1883
+ return {
1884
+ type: "BindingPattern",
1885
+ names: c.names,
1886
+ children: $0
1887
+ };
1888
+ });
1716
1889
  function ArrayBindingPattern(state) {
1890
+ if (state.verbose)
1891
+ console.log("ENTER:", "ArrayBindingPattern");
1892
+ if (state.tokenize) {
1893
+ return $TOKEN("ArrayBindingPattern", state, ArrayBindingPattern$0(state));
1894
+ } else {
1895
+ return ArrayBindingPattern$0(state);
1896
+ }
1897
+ }
1898
+ var ArrayBindingPatternContent$0 = $T($S($Y(EOS), NestedBindingElements), function(value) {
1899
+ return value[1];
1900
+ });
1901
+ var ArrayBindingPatternContent$1 = $TS($S($Q($C(BindingElement, Elision)), $E($S(__, BindingRestElement))), function($skip, $loc, $0, $1, $2) {
1902
+ var props = $1;
1903
+ var rest = $2;
1904
+ const names = props.flatMap((p) => p.names || []);
1905
+ if (rest) {
1906
+ props.push(...rest);
1907
+ names.push(...rest[1].names);
1908
+ }
1909
+ return {
1910
+ type: "BindingPattern",
1911
+ names,
1912
+ children: props
1913
+ };
1914
+ });
1915
+ function ArrayBindingPatternContent(state) {
1717
1916
  if (state.tokenize) {
1718
- return $TOKEN("ArrayBindingPattern", state, ArrayBindingPattern$0(state) || ArrayBindingPattern$1(state));
1917
+ return $TOKEN("ArrayBindingPatternContent", state, ArrayBindingPatternContent$0(state) || ArrayBindingPatternContent$1(state));
1719
1918
  } else {
1720
- return ArrayBindingPattern$0(state) || ArrayBindingPattern$1(state);
1919
+ return ArrayBindingPatternContent$0(state) || ArrayBindingPatternContent$1(state);
1721
1920
  }
1722
1921
  }
1723
- var NestedBindingProperties$0 = $TS($S(PushIndent, $Q(NestedBindingProperty), $E($S(Nested, BindingRestProperty)), PopIndent), function($skip, $loc, $0, $1, $2, $3, $4) {
1922
+ var Elision$0 = $S(__, Comma);
1923
+ function Elision(state) {
1924
+ if (state.verbose)
1925
+ console.log("ENTER:", "Elision");
1926
+ if (state.tokenize) {
1927
+ return $TOKEN("Elision", state, Elision$0(state));
1928
+ } else {
1929
+ return Elision$0(state);
1930
+ }
1931
+ }
1932
+ var NestedBindingProperties$0 = $TS($S(PushIndent, $Q(NestedBindingProperty), $E(NestedBindingRestProperty), PopIndent), function($skip, $loc, $0, $1, $2, $3, $4) {
1724
1933
  var props = $2;
1725
1934
  var rest = $3;
1726
- if (!props.length)
1935
+ if (!(props.length || rest))
1727
1936
  return $skip;
1728
- if (rest)
1937
+ const names = props.flatMap((p) => p.names);
1938
+ if (rest) {
1729
1939
  props.push(rest);
1730
- return props;
1940
+ names.push(...rest.names);
1941
+ }
1942
+ return {
1943
+ type: "BindingPattern",
1944
+ children: props,
1945
+ names
1946
+ };
1731
1947
  });
1732
1948
  function NestedBindingProperties(state) {
1733
1949
  if (state.verbose)
@@ -1738,7 +1954,10 @@ var Civet = (() => {
1738
1954
  return NestedBindingProperties$0(state);
1739
1955
  }
1740
1956
  }
1741
- var NestedBindingProperty$0 = $S(Nested, BindingProperty);
1957
+ var NestedBindingProperty$0 = $TS($S(Nested, BindingProperty), function($skip, $loc, $0, $1, $2) {
1958
+ $2.children.unshift($1);
1959
+ return $2;
1960
+ });
1742
1961
  function NestedBindingProperty(state) {
1743
1962
  if (state.verbose)
1744
1963
  console.log("ENTER:", "NestedBindingProperty");
@@ -1748,8 +1967,22 @@ var Civet = (() => {
1748
1967
  return NestedBindingProperty$0(state);
1749
1968
  }
1750
1969
  }
1751
- var BindingProperty$0 = $S(__, PropertyName, __, Colon, $C(BindingIdentifier, BindingPattern), $E(Initializer), ObjectPropertyDelimiter);
1752
- var BindingProperty$1 = $S(BindingIdentifier, $E(Initializer), ObjectPropertyDelimiter);
1970
+ var BindingProperty$0 = $TS($S(__, PropertyName, __, Colon, $C(BindingIdentifier, BindingPattern), $E(Initializer), ObjectPropertyDelimiter), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7) {
1971
+ var b = $5;
1972
+ return {
1973
+ type: "BindingPattern",
1974
+ names: b.names,
1975
+ children: $0
1976
+ };
1977
+ });
1978
+ var BindingProperty$1 = $TS($S(BindingIdentifier, $E(Initializer), ObjectPropertyDelimiter), function($skip, $loc, $0, $1, $2, $3) {
1979
+ var b = $1;
1980
+ return {
1981
+ type: "BindingPattern",
1982
+ names: b.names,
1983
+ children: $0
1984
+ };
1985
+ });
1753
1986
  function BindingProperty(state) {
1754
1987
  if (state.tokenize) {
1755
1988
  return $TOKEN("BindingProperty", state, BindingProperty$0(state) || BindingProperty$1(state));
@@ -1757,7 +1990,23 @@ var Civet = (() => {
1757
1990
  return BindingProperty$0(state) || BindingProperty$1(state);
1758
1991
  }
1759
1992
  }
1760
- var BindingRestProperty$0 = $S(DotDotDot, BindingIdentifier);
1993
+ var NestedBindingRestProperty$0 = $TS($S(Nested, BindingRestProperty), function($skip, $loc, $0, $1, $2) {
1994
+ $2.children.unshift($1);
1995
+ return $2;
1996
+ });
1997
+ function NestedBindingRestProperty(state) {
1998
+ if (state.verbose)
1999
+ console.log("ENTER:", "NestedBindingRestProperty");
2000
+ if (state.tokenize) {
2001
+ return $TOKEN("NestedBindingRestProperty", state, NestedBindingRestProperty$0(state));
2002
+ } else {
2003
+ return NestedBindingRestProperty$0(state);
2004
+ }
2005
+ }
2006
+ var BindingRestProperty$0 = $TS($S(DotDotDot, BindingIdentifier), function($skip, $loc, $0, $1, $2) {
2007
+ $2.children.unshift($1);
2008
+ return $2;
2009
+ });
1761
2010
  function BindingRestProperty(state) {
1762
2011
  if (state.verbose)
1763
2012
  console.log("ENTER:", "BindingRestProperty");
@@ -1770,11 +2019,18 @@ var Civet = (() => {
1770
2019
  var NestedBindingElements$0 = $TS($S(PushIndent, $Q(NestedBindingElement), $E($S(Nested, BindingRestElement)), PopIndent), function($skip, $loc, $0, $1, $2, $3, $4) {
1771
2020
  var props = $2;
1772
2021
  var rest = $3;
1773
- if (!props.length)
2022
+ if (!(props.length || rest))
1774
2023
  return $skip;
1775
- if (rest)
1776
- props.push(rest);
1777
- return props;
2024
+ const names = props.flatMap((p) => p.names);
2025
+ if (rest) {
2026
+ props.push(...rest);
2027
+ names.push(...rest[1].names);
2028
+ }
2029
+ return {
2030
+ type: "BindingPattern",
2031
+ children: props,
2032
+ names
2033
+ };
1778
2034
  });
1779
2035
  function NestedBindingElements(state) {
1780
2036
  if (state.verbose)
@@ -1785,7 +2041,10 @@ var Civet = (() => {
1785
2041
  return NestedBindingElements$0(state);
1786
2042
  }
1787
2043
  }
1788
- var NestedBindingElement$0 = $S(Nested, BindingElement);
2044
+ var NestedBindingElement$0 = $TS($S(Nested, BindingElement), function($skip, $loc, $0, $1, $2) {
2045
+ $2.children.unshift($1);
2046
+ return $2;
2047
+ });
1789
2048
  function NestedBindingElement(state) {
1790
2049
  if (state.verbose)
1791
2050
  console.log("ENTER:", "NestedBindingElement");
@@ -1795,7 +2054,14 @@ var Civet = (() => {
1795
2054
  return NestedBindingElement$0(state);
1796
2055
  }
1797
2056
  }
1798
- var BindingElement$0 = $S(__, $C(BindingIdentifier, BindingPattern), $E(Initializer), ArrayElementDelimiter);
2057
+ var BindingElement$0 = $TS($S($C(BindingIdentifier, BindingPattern), $E(Initializer), ArrayElementDelimiter), function($skip, $loc, $0, $1, $2, $3) {
2058
+ var binding = $1;
2059
+ return {
2060
+ type: "BindingPattern",
2061
+ names: binding.names,
2062
+ children: $0
2063
+ };
2064
+ });
1799
2065
  function BindingElement(state) {
1800
2066
  if (state.verbose)
1801
2067
  console.log("ENTER:", "BindingElement");
@@ -1805,7 +2071,11 @@ var Civet = (() => {
1805
2071
  return BindingElement$0(state);
1806
2072
  }
1807
2073
  }
1808
- var BindingRestElement$0 = $S(DotDotDot, __, $C(BindingIdentifier, BindingPattern));
2074
+ var BindingRestElement$0 = $TS($S(DotDotDot, $C(BindingIdentifier, BindingPattern)), function($skip, $loc, $0, $1, $2) {
2075
+ var binding = $2;
2076
+ binding.children.unshift($1);
2077
+ return binding;
2078
+ });
1809
2079
  function BindingRestElement(state) {
1810
2080
  if (state.verbose)
1811
2081
  console.log("ENTER:", "BindingRestElement");
@@ -1825,7 +2095,21 @@ var Civet = (() => {
1825
2095
  return FunctionDeclaration$0(state);
1826
2096
  }
1827
2097
  }
1828
- var FunctionSignature$0 = $S($E($S(Async, __)), Function, $E($S(Star, __)), $E(BindingIdentifier), __, Parameters, $E(ReturnTypeSuffix));
2098
+ var FunctionSignature$0 = $TS($S($E($S(Async, __)), Function, $E(Star), $E(BindingIdentifier), __, Parameters, $E(ReturnTypeSuffix)), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7) {
2099
+ var id = $4;
2100
+ var parameters = $6;
2101
+ id = id || [];
2102
+ $0[3] = id;
2103
+ return {
2104
+ type: "FunctionSignature",
2105
+ id,
2106
+ parameters,
2107
+ returnType: $7,
2108
+ ts: false,
2109
+ block: null,
2110
+ children: $0
2111
+ };
2112
+ });
1829
2113
  function FunctionSignature(state) {
1830
2114
  if (state.verbose)
1831
2115
  console.log("ENTER:", "FunctionSignature");
@@ -1835,36 +2119,34 @@ var Civet = (() => {
1835
2119
  return FunctionSignature$0(state);
1836
2120
  }
1837
2121
  }
1838
- var FunctionExpression$0 = ThinArrowFunction;
1839
- var FunctionExpression$1 = $TS($S(FunctionSignature, $E(BracedBlock)), function($skip, $loc, $0, $1, $2) {
2122
+ var FunctionExpression$0 = $TS($S(FunctionSignature, $E(BracedBlock)), function($skip, $loc, $0, $1, $2) {
2123
+ var signature = $1;
1840
2124
  var block = $2;
1841
2125
  if (!block) {
1842
- return {
1843
- type: "FunctionDeclaration",
1844
- ts: true,
1845
- children: $1
1846
- };
2126
+ signature.ts = true;
2127
+ return signature;
1847
2128
  }
1848
- const suffix = $1[$1.length - 1];
2129
+ const suffix = signature.returnType;
1849
2130
  const isVoid = suffix?.children?.[1]?.[0]?.[1]?.token === "void";
1850
2131
  if (module.config.implicitReturns && !isVoid) {
1851
2132
  module.addImplicitReturns(block);
1852
2133
  }
1853
- $1.push(block);
1854
- return {
1855
- type: "FunctionExpression",
1856
- children: $1
1857
- };
2134
+ $1.block = block;
2135
+ $1.children.push(block);
2136
+ $1.type = "FunctionExpression";
2137
+ return $1;
1858
2138
  });
1859
2139
  function FunctionExpression(state) {
2140
+ if (state.verbose)
2141
+ console.log("ENTER:", "FunctionExpression");
1860
2142
  if (state.tokenize) {
1861
- return $TOKEN("FunctionExpression", state, FunctionExpression$0(state) || FunctionExpression$1(state));
2143
+ return $TOKEN("FunctionExpression", state, FunctionExpression$0(state));
1862
2144
  } else {
1863
- return FunctionExpression$0(state) || FunctionExpression$1(state);
2145
+ return FunctionExpression$0(state);
1864
2146
  }
1865
2147
  }
1866
2148
  var ThinArrowFunction$0 = $TS($S(Parameters, $E(ReturnTypeSuffix), $Q(_), Arrow, BracedOrEmptyBlock), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
1867
- var params = $1;
2149
+ var parameters = $1;
1868
2150
  var suffix = $2;
1869
2151
  var arrow = $4;
1870
2152
  var block = $5;
@@ -1872,11 +2154,18 @@ var Civet = (() => {
1872
2154
  if (module.config.implicitReturns && !isVoid) {
1873
2155
  block = module.addImplicitReturns(block);
1874
2156
  }
2157
+ const id = [];
1875
2158
  return {
1876
2159
  type: "FunctionExpression",
2160
+ id,
2161
+ parameters,
2162
+ returnType: suffix,
2163
+ ts: false,
2164
+ block,
1877
2165
  children: [
1878
2166
  { $loc: arrow.$loc, token: "function" },
1879
- params,
2167
+ id,
2168
+ parameters,
1880
2169
  suffix,
1881
2170
  block
1882
2171
  ]
@@ -1891,7 +2180,7 @@ var Civet = (() => {
1891
2180
  return ThinArrowFunction$0(state);
1892
2181
  }
1893
2182
  }
1894
- var Arrow$0 = $TV($EXPECT($L16, fail, 'Arrow "->"'), function($skip, $loc, $0, $1) {
2183
+ var Arrow$0 = $TV($EXPECT($L17, fail, 'Arrow "->"'), function($skip, $loc, $0, $1) {
1895
2184
  return { $loc, token: $1 };
1896
2185
  });
1897
2186
  function Arrow(state) {
@@ -1903,16 +2192,20 @@ var Civet = (() => {
1903
2192
  return Arrow$0(state);
1904
2193
  }
1905
2194
  }
1906
- var Block$0 = $T($S(__, OpenBrace, EOS, NestedBlockExpressions, __, CloseBrace), function(value) {
2195
+ var Block$0 = $T($S(__, OpenBrace, EOS, NestedBlockStatements, __, CloseBrace), function(value) {
1907
2196
  var exps = value[3];
1908
2197
  return { "type": "BlockStatement", "expressions": exps, "children": value };
1909
2198
  });
1910
- var Block$1 = $T($S(InsertOpenBrace, EOS, NestedBlockExpressions, InsertNewline, InsertIndent, InsertCloseBrace), function(value) {
2199
+ var Block$1 = $T($S(InsertOpenBrace, EOS, NestedBlockStatements, InsertNewline, InsertIndent, InsertCloseBrace), function(value) {
1911
2200
  var exps = value[2];
1912
2201
  return { "type": "BlockStatement", "expressions": exps, "children": value };
1913
2202
  });
1914
- var Block$2 = Statement;
1915
- var Block$3 = $S(__, Statement);
2203
+ var Block$2 = $T($S($E(Then), Statement), function(value) {
2204
+ return value[1];
2205
+ });
2206
+ var Block$3 = $T($S($E(Then), __, Statement), function(value) {
2207
+ return [value[1], value[2]];
2208
+ });
1916
2209
  function Block(state) {
1917
2210
  if (state.tokenize) {
1918
2211
  return $TOKEN("Block", state, Block$0(state) || Block$1(state) || Block$2(state) || Block$3(state));
@@ -1941,11 +2234,11 @@ var Civet = (() => {
1941
2234
  return EmptyBlock$0(state);
1942
2235
  }
1943
2236
  }
1944
- var BracedBlock$0 = $T($S(__, OpenBrace, EOS, NestedBlockExpressions, __, CloseBrace), function(value) {
1945
- var exps = value[3];
2237
+ var BracedBlock$0 = $T($S($Q(TrailingComment), OpenBrace, BracedContent, __, CloseBrace), function(value) {
2238
+ var exps = value[2];
1946
2239
  return { "type": "BlockStatement", "expressions": exps, "children": value };
1947
2240
  });
1948
- var BracedBlock$1 = $T($S(InsertOpenBrace, EOS, NestedBlockExpressions, InsertNewline, InsertIndent, InsertCloseBrace), function(value) {
2241
+ var BracedBlock$1 = $T($S(InsertOpenBrace, EOS, NestedBlockStatements, InsertNewline, InsertIndent, InsertCloseBrace), function(value) {
1949
2242
  var exps = value[2];
1950
2243
  return { "type": "BlockStatement", "expressions": exps, "children": value };
1951
2244
  });
@@ -1964,58 +2257,69 @@ var Civet = (() => {
1964
2257
  return BracedBlock$0(state) || BracedBlock$1(state) || BracedBlock$2(state);
1965
2258
  }
1966
2259
  }
1967
- var SingleNestedExpression$0 = $TS($S(PushIndent, $E($S(Nested, Expression, StatementDelimiter)), $C($S($N($S(Nested, Expression)), PopIndent), PopIndent)), function($skip, $loc, $0, $1, $2, $3) {
1968
- var exp = $2;
1969
- if (exp)
1970
- return exp;
1971
- return $skip;
2260
+ var BracedContent$0 = $T($S($Y(EOS), NestedBlockStatements), function(value) {
2261
+ return value[1];
1972
2262
  });
1973
- function SingleNestedExpression(state) {
1974
- if (state.verbose)
1975
- console.log("ENTER:", "SingleNestedExpression");
2263
+ var BracedContent$1 = $S($Q(TrailingComment), Statement);
2264
+ function BracedContent(state) {
1976
2265
  if (state.tokenize) {
1977
- return $TOKEN("SingleNestedExpression", state, SingleNestedExpression$0(state));
2266
+ return $TOKEN("BracedContent", state, BracedContent$0(state) || BracedContent$1(state));
1978
2267
  } else {
1979
- return SingleNestedExpression$0(state);
2268
+ return BracedContent$0(state) || BracedContent$1(state);
1980
2269
  }
1981
2270
  }
1982
- var NestedBlockExpressions$0 = $TS($S(PushIndent, $Q(BlockExpression), PopIndent), function($skip, $loc, $0, $1, $2, $3) {
1983
- var exps = $2;
1984
- if (!exps.length)
2271
+ var NestedBlockStatements$0 = $TS($S(PushIndent, $Q(NestedBlockStatement), PopIndent), function($skip, $loc, $0, $1, $2, $3) {
2272
+ var statements = $2;
2273
+ if (!statements.length)
1985
2274
  return $skip;
1986
- return exps;
2275
+ return statements;
1987
2276
  });
1988
- function NestedBlockExpressions(state) {
2277
+ function NestedBlockStatements(state) {
1989
2278
  if (state.verbose)
1990
- console.log("ENTER:", "NestedBlockExpressions");
2279
+ console.log("ENTER:", "NestedBlockStatements");
1991
2280
  if (state.tokenize) {
1992
- return $TOKEN("NestedBlockExpressions", state, NestedBlockExpressions$0(state));
2281
+ return $TOKEN("NestedBlockStatements", state, NestedBlockStatements$0(state));
1993
2282
  } else {
1994
- return NestedBlockExpressions$0(state);
2283
+ return NestedBlockStatements$0(state);
1995
2284
  }
1996
2285
  }
1997
- var BlockExpression$0 = $S(Nested, StatementListItem, StatementDelimiter);
1998
- function BlockExpression(state) {
2286
+ var NestedBlockStatement$0 = $S(Nested, StatementListItem, StatementDelimiter);
2287
+ function NestedBlockStatement(state) {
1999
2288
  if (state.verbose)
2000
- console.log("ENTER:", "BlockExpression");
2289
+ console.log("ENTER:", "NestedBlockStatement");
2001
2290
  if (state.tokenize) {
2002
- return $TOKEN("BlockExpression", state, BlockExpression$0(state));
2291
+ return $TOKEN("NestedBlockStatement", state, NestedBlockStatement$0(state));
2003
2292
  } else {
2004
- return BlockExpression$0(state);
2293
+ return NestedBlockStatement$0(state);
2005
2294
  }
2006
2295
  }
2007
- var Literal$0 = NullLiteral;
2008
- var Literal$1 = BooleanLiteral;
2009
- var Literal$2 = NumericLiteral;
2010
- var Literal$3 = StringLiteral;
2296
+ var Literal$0 = $TS($S(LiteralContent), function($skip, $loc, $0, $1) {
2297
+ return {
2298
+ type: "Literal",
2299
+ children: $0
2300
+ };
2301
+ });
2011
2302
  function Literal(state) {
2303
+ if (state.verbose)
2304
+ console.log("ENTER:", "Literal");
2305
+ if (state.tokenize) {
2306
+ return $TOKEN("Literal", state, Literal$0(state));
2307
+ } else {
2308
+ return Literal$0(state);
2309
+ }
2310
+ }
2311
+ var LiteralContent$0 = NullLiteral;
2312
+ var LiteralContent$1 = BooleanLiteral;
2313
+ var LiteralContent$2 = NumericLiteral;
2314
+ var LiteralContent$3 = StringLiteral;
2315
+ function LiteralContent(state) {
2012
2316
  if (state.tokenize) {
2013
- return $TOKEN("Literal", state, Literal$0(state) || Literal$1(state) || Literal$2(state) || Literal$3(state));
2317
+ return $TOKEN("LiteralContent", state, LiteralContent$0(state) || LiteralContent$1(state) || LiteralContent$2(state) || LiteralContent$3(state));
2014
2318
  } else {
2015
- return Literal$0(state) || Literal$1(state) || Literal$2(state) || Literal$3(state);
2319
+ return LiteralContent$0(state) || LiteralContent$1(state) || LiteralContent$2(state) || LiteralContent$3(state);
2016
2320
  }
2017
2321
  }
2018
- var NullLiteral$0 = $TV($EXPECT($L17, fail, 'NullLiteral "null"'), function($skip, $loc, $0, $1) {
2322
+ var NullLiteral$0 = $TV($EXPECT($L18, fail, 'NullLiteral "null"'), function($skip, $loc, $0, $1) {
2019
2323
  return { $loc, token: $1 };
2020
2324
  });
2021
2325
  function NullLiteral(state) {
@@ -2028,7 +2332,7 @@ var Civet = (() => {
2028
2332
  }
2029
2333
  }
2030
2334
  var BooleanLiteral$0 = CoffeeScriptBooleanLiteral;
2031
- var BooleanLiteral$1 = $TV($C($EXPECT($L18, fail, 'BooleanLiteral "true"'), $EXPECT($L19, fail, 'BooleanLiteral "false"')), function($skip, $loc, $0, $1) {
2335
+ var BooleanLiteral$1 = $TV($C($EXPECT($L19, fail, 'BooleanLiteral "true"'), $EXPECT($L20, fail, 'BooleanLiteral "false"')), function($skip, $loc, $0, $1) {
2032
2336
  return { $loc, token: $1 };
2033
2337
  });
2034
2338
  function BooleanLiteral(state) {
@@ -2038,10 +2342,10 @@ var Civet = (() => {
2038
2342
  return BooleanLiteral$0(state) || BooleanLiteral$1(state);
2039
2343
  }
2040
2344
  }
2041
- var CoffeeScriptBooleanLiteral$0 = $TV($C($EXPECT($L20, fail, 'CoffeeScriptBooleanLiteral "yes"'), $EXPECT($L21, fail, 'CoffeeScriptBooleanLiteral "on"')), function($skip, $loc, $0, $1) {
2345
+ var CoffeeScriptBooleanLiteral$0 = $TV($C($EXPECT($L21, fail, 'CoffeeScriptBooleanLiteral "yes"'), $EXPECT($L22, fail, 'CoffeeScriptBooleanLiteral "on"')), function($skip, $loc, $0, $1) {
2042
2346
  return { $loc, token: "true" };
2043
2347
  });
2044
- var CoffeeScriptBooleanLiteral$1 = $TV($C($EXPECT($L22, fail, 'CoffeeScriptBooleanLiteral "no"'), $EXPECT($L23, fail, 'CoffeeScriptBooleanLiteral "off"')), function($skip, $loc, $0, $1) {
2348
+ var CoffeeScriptBooleanLiteral$1 = $TV($C($EXPECT($L23, fail, 'CoffeeScriptBooleanLiteral "no"'), $EXPECT($L24, fail, 'CoffeeScriptBooleanLiteral "off"')), function($skip, $loc, $0, $1) {
2045
2349
  return { $loc, token: "false" };
2046
2350
  });
2047
2351
  function CoffeeScriptBooleanLiteral(state) {
@@ -2051,7 +2355,7 @@ var Civet = (() => {
2051
2355
  return CoffeeScriptBooleanLiteral$0(state) || CoffeeScriptBooleanLiteral$1(state);
2052
2356
  }
2053
2357
  }
2054
- var Comma$0 = $TV($EXPECT($L24, fail, 'Comma ","'), function($skip, $loc, $0, $1) {
2358
+ var Comma$0 = $TV($EXPECT($L25, fail, 'Comma ","'), function($skip, $loc, $0, $1) {
2055
2359
  return { $loc, token: $1 };
2056
2360
  });
2057
2361
  function Comma(state) {
@@ -2078,8 +2382,12 @@ var Civet = (() => {
2078
2382
  var IdentifierName$0 = $TR($EXPECT($R1, fail, "IdentifierName /(?:\\p{ID_Start}|[_$])(?:\\p{ID_Continue}|[\\u200C\\u200D$])*/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
2079
2383
  return {
2080
2384
  type: "Identifier",
2081
- $loc,
2082
- token: $0
2385
+ name: $0,
2386
+ names: [$0],
2387
+ children: [{
2388
+ $loc,
2389
+ token: $0
2390
+ }]
2083
2391
  };
2084
2392
  });
2085
2393
  function IdentifierName(state) {
@@ -2101,19 +2409,44 @@ var Civet = (() => {
2101
2409
  return IdentifierReference$0(state);
2102
2410
  }
2103
2411
  }
2104
- var ArrayLiteral$0 = $S(OpenBracket, NestedElementList, __, CloseBracket);
2105
- var ArrayLiteral$1 = $S(OpenBracket, ElementList, __, CloseBracket);
2412
+ var ArrayLiteral$0 = $TS($S(OpenBracket, ArrayLiteralContent, __, CloseBracket), function($skip, $loc, $0, $1, $2, $3, $4) {
2413
+ let children;
2414
+ if (Array.isArray($2)) {
2415
+ children = [$1, ...$2, ...$3, $4];
2416
+ } else {
2417
+ children = [$1, $2, ...$3, $4];
2418
+ }
2419
+ const names = children.flatMap((c) => {
2420
+ return c.names || [];
2421
+ });
2422
+ return {
2423
+ type: "ArrayExpression",
2424
+ children,
2425
+ names
2426
+ };
2427
+ });
2106
2428
  function ArrayLiteral(state) {
2429
+ if (state.verbose)
2430
+ console.log("ENTER:", "ArrayLiteral");
2107
2431
  if (state.tokenize) {
2108
- return $TOKEN("ArrayLiteral", state, ArrayLiteral$0(state) || ArrayLiteral$1(state));
2432
+ return $TOKEN("ArrayLiteral", state, ArrayLiteral$0(state));
2109
2433
  } else {
2110
- return ArrayLiteral$0(state) || ArrayLiteral$1(state);
2434
+ return ArrayLiteral$0(state);
2435
+ }
2436
+ }
2437
+ var ArrayLiteralContent$0 = NestedElementList;
2438
+ var ArrayLiteralContent$1 = ElementList;
2439
+ function ArrayLiteralContent(state) {
2440
+ if (state.tokenize) {
2441
+ return $TOKEN("ArrayLiteralContent", state, ArrayLiteralContent$0(state) || ArrayLiteralContent$1(state));
2442
+ } else {
2443
+ return ArrayLiteralContent$0(state) || ArrayLiteralContent$1(state);
2111
2444
  }
2112
2445
  }
2113
2446
  var NestedElementList$0 = $TS($S(PushIndent, $Q(NestedElement), PopIndent), function($skip, $loc, $0, $1, $2, $3) {
2114
2447
  var elements = $2;
2115
2448
  if (elements.length)
2116
- return elements;
2449
+ return elements.flat();
2117
2450
  return $skip;
2118
2451
  });
2119
2452
  function NestedElementList(state) {
@@ -2125,7 +2458,13 @@ var Civet = (() => {
2125
2458
  return NestedElementList$0(state);
2126
2459
  }
2127
2460
  }
2128
- var NestedElement$0 = $S(Nested, InlineElementList, ArrayElementDelimiter);
2461
+ var NestedElement$0 = $TS($S(Nested, ElementList, ArrayElementDelimiter), function($skip, $loc, $0, $1, $2, $3) {
2462
+ const result = [...$1, ...$2];
2463
+ if ($3) {
2464
+ result.push($3);
2465
+ }
2466
+ return result;
2467
+ });
2129
2468
  function NestedElement(state) {
2130
2469
  if (state.verbose)
2131
2470
  console.log("ENTER:", "NestedElement");
@@ -2136,7 +2475,7 @@ var Civet = (() => {
2136
2475
  }
2137
2476
  }
2138
2477
  var ArrayElementDelimiter$0 = $S($Q(_), Comma);
2139
- var ArrayElementDelimiter$1 = $Y($S(__, $EXPECT($L25, fail, 'ArrayElementDelimiter "]"')));
2478
+ var ArrayElementDelimiter$1 = $Y($S(__, $EXPECT($L26, fail, 'ArrayElementDelimiter "]"')));
2140
2479
  var ArrayElementDelimiter$2 = $TV($Y(EOS), function($skip, $loc, $0, $1) {
2141
2480
  return { $loc, token: "," };
2142
2481
  });
@@ -2147,7 +2486,15 @@ var Civet = (() => {
2147
2486
  return ArrayElementDelimiter$0(state) || ArrayElementDelimiter$1(state) || ArrayElementDelimiter$2(state);
2148
2487
  }
2149
2488
  }
2150
- var ElementList$0 = $S(ArrayElementExpression, $Q($S(__, Comma, __, ArrayElementExpression)));
2489
+ var ElementList$0 = $TS($S(ArrayElementExpression, $Q(ElementListRest)), function($skip, $loc, $0, $1, $2) {
2490
+ if ($2.length) {
2491
+ return [].concat($1 || [], ...$2);
2492
+ }
2493
+ if ($1) {
2494
+ return [].concat($1);
2495
+ }
2496
+ return [];
2497
+ });
2151
2498
  function ElementList(state) {
2152
2499
  if (state.verbose)
2153
2500
  console.log("ENTER:", "ElementList");
@@ -2157,17 +2504,28 @@ var Civet = (() => {
2157
2504
  return ElementList$0(state);
2158
2505
  }
2159
2506
  }
2160
- var InlineElementList$0 = $S(ArrayElementExpression, $Q($S($Q(_), Comma, $Q(_), ArrayElementExpression)));
2161
- function InlineElementList(state) {
2507
+ var ElementListRest$0 = $TS($S(__, Comma, __, ArrayElementExpression), function($skip, $loc, $0, $1, $2, $3, $4) {
2508
+ const result = [...$1, $2, ...$3];
2509
+ if ($4) {
2510
+ result.push($4);
2511
+ }
2512
+ return result;
2513
+ });
2514
+ function ElementListRest(state) {
2162
2515
  if (state.verbose)
2163
- console.log("ENTER:", "InlineElementList");
2516
+ console.log("ENTER:", "ElementListRest");
2164
2517
  if (state.tokenize) {
2165
- return $TOKEN("InlineElementList", state, InlineElementList$0(state));
2518
+ return $TOKEN("ElementListRest", state, ElementListRest$0(state));
2166
2519
  } else {
2167
- return InlineElementList$0(state);
2520
+ return ElementListRest$0(state);
2168
2521
  }
2169
2522
  }
2170
- var ArrayElementExpression$0 = $E($S($E($S(DotDotDot, __)), AssignmentExpression));
2523
+ var ArrayElementExpression$0 = $TV($E($S($E($S(DotDotDot, __)), ExtendedExpression)), function($skip, $loc, $0, $1) {
2524
+ if ($1 && !$1[0]) {
2525
+ return $1[1];
2526
+ }
2527
+ return $1;
2528
+ });
2171
2529
  function ArrayElementExpression(state) {
2172
2530
  if (state.verbose)
2173
2531
  console.log("ENTER:", "ArrayElementExpression");
@@ -2177,28 +2535,69 @@ var Civet = (() => {
2177
2535
  return ArrayElementExpression$0(state);
2178
2536
  }
2179
2537
  }
2180
- var Elision$0 = $S(__, Comma);
2181
- function Elision(state) {
2538
+ var ObjectLiteral$0 = BracedObjectLiteral;
2539
+ var ObjectLiteral$1 = NestedObjectLiteral;
2540
+ function ObjectLiteral(state) {
2541
+ if (state.tokenize) {
2542
+ return $TOKEN("ObjectLiteral", state, ObjectLiteral$0(state) || ObjectLiteral$1(state));
2543
+ } else {
2544
+ return ObjectLiteral$0(state) || ObjectLiteral$1(state);
2545
+ }
2546
+ }
2547
+ var BracedObjectLiteral$0 = $TS($S(OpenBrace, $E(BracedObjectLiteralContent), __, CloseBrace), function($skip, $loc, $0, $1, $2, $3, $4) {
2548
+ if ($2) {
2549
+ $2.unshift($1);
2550
+ if ($3.length) {
2551
+ $2.push(...$3);
2552
+ }
2553
+ $2.push($4);
2554
+ return {
2555
+ type: "ObjectExpression",
2556
+ children: $2,
2557
+ names: $2.flatMap((c) => {
2558
+ return c.names || [];
2559
+ })
2560
+ };
2561
+ }
2562
+ return {
2563
+ type: "ObjectExpression",
2564
+ children: [$1, ...$3, $4],
2565
+ names: []
2566
+ };
2567
+ });
2568
+ function BracedObjectLiteral(state) {
2182
2569
  if (state.verbose)
2183
- console.log("ENTER:", "Elision");
2570
+ console.log("ENTER:", "BracedObjectLiteral");
2184
2571
  if (state.tokenize) {
2185
- return $TOKEN("Elision", state, Elision$0(state));
2572
+ return $TOKEN("BracedObjectLiteral", state, BracedObjectLiteral$0(state));
2186
2573
  } else {
2187
- return Elision$0(state);
2574
+ return BracedObjectLiteral$0(state);
2188
2575
  }
2189
2576
  }
2190
- var ObjectLiteral$0 = $S(OpenBrace, $Y(EOS), NestedPropertyDefinitions, __, CloseBrace);
2191
- var ObjectLiteral$1 = $S(OpenBrace, __, PropertyDefinitionList, __, $E($S(Comma, __)), CloseBrace);
2192
- var ObjectLiteral$2 = $S(OpenBrace, __, CloseBrace);
2193
- var ObjectLiteral$3 = NestedObjectLiteral;
2194
- function ObjectLiteral(state) {
2577
+ var BracedObjectLiteralContent$0 = $T($S($Y(EOS), NestedPropertyDefinitions), function(value) {
2578
+ return value[1];
2579
+ });
2580
+ var BracedObjectLiteralContent$1 = $TS($S(__, PropertyDefinitionList, $E($S(__, Comma))), function($skip, $loc, $0, $1, $2, $3) {
2581
+ if ($1.length) {
2582
+ $2.splice(0, 0, ...$1);
2583
+ }
2584
+ if ($3) {
2585
+ $2.push($3);
2586
+ }
2587
+ return $2;
2588
+ });
2589
+ function BracedObjectLiteralContent(state) {
2195
2590
  if (state.tokenize) {
2196
- return $TOKEN("ObjectLiteral", state, ObjectLiteral$0(state) || ObjectLiteral$1(state) || ObjectLiteral$2(state) || ObjectLiteral$3(state));
2591
+ return $TOKEN("BracedObjectLiteralContent", state, BracedObjectLiteralContent$0(state) || BracedObjectLiteralContent$1(state));
2197
2592
  } else {
2198
- return ObjectLiteral$0(state) || ObjectLiteral$1(state) || ObjectLiteral$2(state) || ObjectLiteral$3(state);
2593
+ return BracedObjectLiteralContent$0(state) || BracedObjectLiteralContent$1(state);
2199
2594
  }
2200
2595
  }
2201
- var NestedObjectLiteral$0 = $S(InsertOpenBrace, $Y(EOS), NestedPropertyDefinitions, InsertNewline, InsertIndent, InsertCloseBrace);
2596
+ var NestedObjectLiteral$0 = $TS($S(InsertOpenBrace, $Y(EOS), NestedPropertyDefinitions, InsertNewline, InsertIndent, InsertCloseBrace), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6) {
2597
+ $3.unshift($1);
2598
+ $3.push($4, $5, $6);
2599
+ return $3;
2600
+ });
2202
2601
  function NestedObjectLiteral(state) {
2203
2602
  if (state.verbose)
2204
2603
  console.log("ENTER:", "NestedObjectLiteral");
@@ -2212,7 +2611,7 @@ var Civet = (() => {
2212
2611
  var defs = $2;
2213
2612
  if (!defs.length)
2214
2613
  return $skip;
2215
- return defs;
2614
+ return defs.flat();
2216
2615
  });
2217
2616
  function NestedPropertyDefinitions(state) {
2218
2617
  if (state.verbose)
@@ -2223,7 +2622,13 @@ var Civet = (() => {
2223
2622
  return NestedPropertyDefinitions$0(state);
2224
2623
  }
2225
2624
  }
2226
- var NestedPropertyDefinition$0 = $S(Nested, PropertyDefinition, ObjectPropertyDelimiter);
2625
+ var NestedPropertyDefinition$0 = $TS($S(Nested, PropertyDefinition, ObjectPropertyDelimiter), function($skip, $loc, $0, $1, $2, $3) {
2626
+ const result = [...$1, $2];
2627
+ if ($3) {
2628
+ result.push($3);
2629
+ }
2630
+ return result;
2631
+ });
2227
2632
  function NestedPropertyDefinition(state) {
2228
2633
  if (state.verbose)
2229
2634
  console.log("ENTER:", "NestedPropertyDefinition");
@@ -2234,7 +2639,7 @@ var Civet = (() => {
2234
2639
  }
2235
2640
  }
2236
2641
  var ObjectPropertyDelimiter$0 = $S($Q(_), Comma);
2237
- var ObjectPropertyDelimiter$1 = $Y($S(__, $EXPECT($L26, fail, 'ObjectPropertyDelimiter "}"')));
2642
+ var ObjectPropertyDelimiter$1 = $Y($S(__, $EXPECT($L27, fail, 'ObjectPropertyDelimiter "}"')));
2238
2643
  var ObjectPropertyDelimiter$2 = $TV($Y(EOS), function($skip, $loc, $0, $1) {
2239
2644
  return { $loc, token: "," };
2240
2645
  });
@@ -2245,7 +2650,15 @@ var Civet = (() => {
2245
2650
  return ObjectPropertyDelimiter$0(state) || ObjectPropertyDelimiter$1(state) || ObjectPropertyDelimiter$2(state);
2246
2651
  }
2247
2652
  }
2248
- var PropertyDefinitionList$0 = $S(PropertyDefinition, $Q($S(__, Comma, __, PropertyDefinition)));
2653
+ var PropertyDefinitionList$0 = $TS($S(PropertyDefinition, $Q($S(__, Comma, __, PropertyDefinition))), function($skip, $loc, $0, $1, $2) {
2654
+ if ($2.length) {
2655
+ return [].concat($1 || [], ...$2);
2656
+ }
2657
+ if ($1) {
2658
+ return [].concat($1);
2659
+ }
2660
+ return [];
2661
+ });
2249
2662
  function PropertyDefinitionList(state) {
2250
2663
  if (state.verbose)
2251
2664
  console.log("ENTER:", "PropertyDefinitionList");
@@ -2255,9 +2668,16 @@ var Civet = (() => {
2255
2668
  return PropertyDefinitionList$0(state);
2256
2669
  }
2257
2670
  }
2258
- var PropertyDefinition$0 = $S(PropertyName, __, Colon, AssignmentExpression);
2671
+ var PropertyDefinition$0 = $TS($S(PropertyName, __, Colon, ExtendedExpression), function($skip, $loc, $0, $1, $2, $3, $4) {
2672
+ var exp = $4;
2673
+ return {
2674
+ type: "Property",
2675
+ children: $0,
2676
+ names: exp.names || []
2677
+ };
2678
+ });
2259
2679
  var PropertyDefinition$1 = MethodDefinition;
2260
- var PropertyDefinition$2 = $S(DotDotDot, AssignmentExpression);
2680
+ var PropertyDefinition$2 = $S(DotDotDot, ExtendedExpression);
2261
2681
  var PropertyDefinition$3 = IdentifierReference;
2262
2682
  function PropertyDefinition(state) {
2263
2683
  if (state.tokenize) {
@@ -2269,7 +2689,7 @@ var Civet = (() => {
2269
2689
  var PropertyName$0 = NumericLiteral;
2270
2690
  var PropertyName$1 = StringLiteral;
2271
2691
  var PropertyName$2 = IdentifierName;
2272
- var PropertyName$3 = $S(OpenBracket, AssignmentExpression, __, $EXPECT($L25, fail, 'PropertyName "]"'));
2692
+ var PropertyName$3 = $S(OpenBracket, ExtendedExpression, __, CloseBracket);
2273
2693
  function PropertyName(state) {
2274
2694
  if (state.tokenize) {
2275
2695
  return $TOKEN("PropertyName", state, PropertyName$0(state) || PropertyName$1(state) || PropertyName$2(state) || PropertyName$3(state));
@@ -2319,7 +2739,11 @@ var Civet = (() => {
2319
2739
  var MethodSignature$1 = $TS($S($E(MethodModifier), ClassElementName, $Q(_), NonEmptyParameters, $E(ReturnTypeSuffix)), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
2320
2740
  var name = $2;
2321
2741
  var suffix = $5;
2322
- name = name.token.match(/^(?:"|')/) ? name.token.slice(1, -1) : name.token;
2742
+ if (name.name) {
2743
+ name = name.name;
2744
+ } else if (name.token) {
2745
+ name = name.token.match(/^(?:"|')/) ? name.token.slice(1, -1) : name.token;
2746
+ }
2323
2747
  return {
2324
2748
  type: "MethodSignature",
2325
2749
  children: $0,
@@ -2371,25 +2795,25 @@ var Civet = (() => {
2371
2795
  return AssignmentOp$0(state);
2372
2796
  }
2373
2797
  }
2374
- var AssignmentOpSymbol$0 = $EXPECT($L27, fail, 'AssignmentOpSymbol "**="');
2375
- var AssignmentOpSymbol$1 = $EXPECT($L28, fail, 'AssignmentOpSymbol "*="');
2376
- var AssignmentOpSymbol$2 = $EXPECT($L29, fail, 'AssignmentOpSymbol "/="');
2377
- var AssignmentOpSymbol$3 = $EXPECT($L30, fail, 'AssignmentOpSymbol "%="');
2378
- var AssignmentOpSymbol$4 = $EXPECT($L31, fail, 'AssignmentOpSymbol "+="');
2379
- var AssignmentOpSymbol$5 = $EXPECT($L32, fail, 'AssignmentOpSymbol "-="');
2380
- var AssignmentOpSymbol$6 = $EXPECT($L33, fail, 'AssignmentOpSymbol "<<="');
2381
- var AssignmentOpSymbol$7 = $EXPECT($L34, fail, 'AssignmentOpSymbol ">>>="');
2382
- var AssignmentOpSymbol$8 = $EXPECT($L35, fail, 'AssignmentOpSymbol ">>="');
2383
- var AssignmentOpSymbol$9 = $EXPECT($L36, fail, 'AssignmentOpSymbol "&&="');
2384
- var AssignmentOpSymbol$10 = $EXPECT($L37, fail, 'AssignmentOpSymbol "&="');
2385
- var AssignmentOpSymbol$11 = $EXPECT($L38, fail, 'AssignmentOpSymbol "^="');
2386
- var AssignmentOpSymbol$12 = $EXPECT($L39, fail, 'AssignmentOpSymbol "||="');
2387
- var AssignmentOpSymbol$13 = $EXPECT($L40, fail, 'AssignmentOpSymbol "|="');
2388
- var AssignmentOpSymbol$14 = $EXPECT($L41, fail, 'AssignmentOpSymbol "??="');
2389
- var AssignmentOpSymbol$15 = $T($EXPECT($L42, fail, 'AssignmentOpSymbol "?="'), function(value) {
2798
+ var AssignmentOpSymbol$0 = $EXPECT($L28, fail, 'AssignmentOpSymbol "**="');
2799
+ var AssignmentOpSymbol$1 = $EXPECT($L29, fail, 'AssignmentOpSymbol "*="');
2800
+ var AssignmentOpSymbol$2 = $EXPECT($L30, fail, 'AssignmentOpSymbol "/="');
2801
+ var AssignmentOpSymbol$3 = $EXPECT($L31, fail, 'AssignmentOpSymbol "%="');
2802
+ var AssignmentOpSymbol$4 = $EXPECT($L32, fail, 'AssignmentOpSymbol "+="');
2803
+ var AssignmentOpSymbol$5 = $EXPECT($L33, fail, 'AssignmentOpSymbol "-="');
2804
+ var AssignmentOpSymbol$6 = $EXPECT($L34, fail, 'AssignmentOpSymbol "<<="');
2805
+ var AssignmentOpSymbol$7 = $EXPECT($L35, fail, 'AssignmentOpSymbol ">>>="');
2806
+ var AssignmentOpSymbol$8 = $EXPECT($L36, fail, 'AssignmentOpSymbol ">>="');
2807
+ var AssignmentOpSymbol$9 = $EXPECT($L37, fail, 'AssignmentOpSymbol "&&="');
2808
+ var AssignmentOpSymbol$10 = $EXPECT($L38, fail, 'AssignmentOpSymbol "&="');
2809
+ var AssignmentOpSymbol$11 = $EXPECT($L39, fail, 'AssignmentOpSymbol "^="');
2810
+ var AssignmentOpSymbol$12 = $EXPECT($L40, fail, 'AssignmentOpSymbol "||="');
2811
+ var AssignmentOpSymbol$13 = $EXPECT($L41, fail, 'AssignmentOpSymbol "|="');
2812
+ var AssignmentOpSymbol$14 = $EXPECT($L42, fail, 'AssignmentOpSymbol "??="');
2813
+ var AssignmentOpSymbol$15 = $T($EXPECT($L43, fail, 'AssignmentOpSymbol "?="'), function(value) {
2390
2814
  return "??=";
2391
2815
  });
2392
- var AssignmentOpSymbol$16 = $EXPECT($L43, fail, 'AssignmentOpSymbol "="');
2816
+ var AssignmentOpSymbol$16 = $EXPECT($L44, fail, 'AssignmentOpSymbol "="');
2393
2817
  function AssignmentOpSymbol(state) {
2394
2818
  if (state.tokenize) {
2395
2819
  return $TOKEN("AssignmentOpSymbol", state, AssignmentOpSymbol$0(state) || AssignmentOpSymbol$1(state) || AssignmentOpSymbol$2(state) || AssignmentOpSymbol$3(state) || AssignmentOpSymbol$4(state) || AssignmentOpSymbol$5(state) || AssignmentOpSymbol$6(state) || AssignmentOpSymbol$7(state) || AssignmentOpSymbol$8(state) || AssignmentOpSymbol$9(state) || AssignmentOpSymbol$10(state) || AssignmentOpSymbol$11(state) || AssignmentOpSymbol$12(state) || AssignmentOpSymbol$13(state) || AssignmentOpSymbol$14(state) || AssignmentOpSymbol$15(state) || AssignmentOpSymbol$16(state));
@@ -2409,68 +2833,74 @@ var Civet = (() => {
2409
2833
  return BinaryOp$0(state);
2410
2834
  }
2411
2835
  }
2412
- var BinaryOpSymbol$0 = $EXPECT($L44, fail, 'BinaryOpSymbol "**"');
2413
- var BinaryOpSymbol$1 = $EXPECT($L45, fail, 'BinaryOpSymbol "*"');
2414
- var BinaryOpSymbol$2 = $EXPECT($L46, fail, 'BinaryOpSymbol "/"');
2415
- var BinaryOpSymbol$3 = $EXPECT($L47, fail, 'BinaryOpSymbol "%"');
2416
- var BinaryOpSymbol$4 = $EXPECT($L48, fail, 'BinaryOpSymbol "+"');
2417
- var BinaryOpSymbol$5 = $EXPECT($L49, fail, 'BinaryOpSymbol "-"');
2418
- var BinaryOpSymbol$6 = $EXPECT($L50, fail, 'BinaryOpSymbol "<="');
2419
- var BinaryOpSymbol$7 = $EXPECT($L51, fail, 'BinaryOpSymbol ">="');
2420
- var BinaryOpSymbol$8 = $EXPECT($L52, fail, 'BinaryOpSymbol "<<"');
2836
+ var BinaryOpSymbol$0 = $EXPECT($L45, fail, 'BinaryOpSymbol "**"');
2837
+ var BinaryOpSymbol$1 = $EXPECT($L46, fail, 'BinaryOpSymbol "*"');
2838
+ var BinaryOpSymbol$2 = $EXPECT($L47, fail, 'BinaryOpSymbol "/"');
2839
+ var BinaryOpSymbol$3 = $EXPECT($L48, fail, 'BinaryOpSymbol "%"');
2840
+ var BinaryOpSymbol$4 = $EXPECT($L49, fail, 'BinaryOpSymbol "+"');
2841
+ var BinaryOpSymbol$5 = $EXPECT($L50, fail, 'BinaryOpSymbol "-"');
2842
+ var BinaryOpSymbol$6 = $EXPECT($L51, fail, 'BinaryOpSymbol "<="');
2843
+ var BinaryOpSymbol$7 = $EXPECT($L52, fail, 'BinaryOpSymbol ">="');
2844
+ var BinaryOpSymbol$8 = $EXPECT($L53, fail, 'BinaryOpSymbol "<<"');
2421
2845
  var BinaryOpSymbol$9 = $EXPECT($L4, fail, 'BinaryOpSymbol "<"');
2422
- var BinaryOpSymbol$10 = $EXPECT($L53, fail, 'BinaryOpSymbol ">>>"');
2423
- var BinaryOpSymbol$11 = $EXPECT($L54, fail, 'BinaryOpSymbol ">>"');
2424
- var BinaryOpSymbol$12 = $EXPECT($L55, fail, 'BinaryOpSymbol ">"');
2425
- var BinaryOpSymbol$13 = $EXPECT($L56, fail, 'BinaryOpSymbol "!=="');
2426
- var BinaryOpSymbol$14 = $TV($EXPECT($L57, fail, 'BinaryOpSymbol "!="'), function($skip, $loc, $0, $1) {
2846
+ var BinaryOpSymbol$10 = $EXPECT($L54, fail, 'BinaryOpSymbol ">>>"');
2847
+ var BinaryOpSymbol$11 = $EXPECT($L55, fail, 'BinaryOpSymbol ">>"');
2848
+ var BinaryOpSymbol$12 = $EXPECT($L56, fail, 'BinaryOpSymbol ">"');
2849
+ var BinaryOpSymbol$13 = $EXPECT($L57, fail, 'BinaryOpSymbol "!=="');
2850
+ var BinaryOpSymbol$14 = $TV($EXPECT($L58, fail, 'BinaryOpSymbol "!="'), function($skip, $loc, $0, $1) {
2427
2851
  if (module.config.coffeeEq)
2428
2852
  return "!==";
2429
2853
  return $1;
2430
2854
  });
2431
- var BinaryOpSymbol$15 = $T($S($EXPECT($L58, fail, 'BinaryOpSymbol "is"'), NonIdContinue), function(value) {
2855
+ var BinaryOpSymbol$15 = $TS($S($EXPECT($L59, fail, 'BinaryOpSymbol "isnt"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
2856
+ if (module.config.coffeeIsnt)
2857
+ return "!==";
2858
+ return $skip;
2859
+ });
2860
+ var BinaryOpSymbol$16 = $T($S($EXPECT($L60, fail, 'BinaryOpSymbol "is"'), NonIdContinue), function(value) {
2432
2861
  return "===";
2433
2862
  });
2434
- var BinaryOpSymbol$16 = $EXPECT($L59, fail, 'BinaryOpSymbol "==="');
2435
- var BinaryOpSymbol$17 = $TV($EXPECT($L60, fail, 'BinaryOpSymbol "=="'), function($skip, $loc, $0, $1) {
2863
+ var BinaryOpSymbol$17 = $EXPECT($L61, fail, 'BinaryOpSymbol "==="');
2864
+ var BinaryOpSymbol$18 = $TV($EXPECT($L62, fail, 'BinaryOpSymbol "=="'), function($skip, $loc, $0, $1) {
2436
2865
  if (module.config.coffeeEq)
2437
2866
  return "===";
2438
2867
  return $1;
2439
2868
  });
2440
- var BinaryOpSymbol$18 = $T($S($EXPECT($L61, fail, 'BinaryOpSymbol "and"'), NonIdContinue), function(value) {
2869
+ var BinaryOpSymbol$19 = $T($S($EXPECT($L63, fail, 'BinaryOpSymbol "and"'), NonIdContinue), function(value) {
2441
2870
  return "&&";
2442
2871
  });
2443
- var BinaryOpSymbol$19 = $EXPECT($L62, fail, 'BinaryOpSymbol "&&"');
2444
- var BinaryOpSymbol$20 = $T($S($EXPECT($L63, fail, 'BinaryOpSymbol "or"'), NonIdContinue), function(value) {
2872
+ var BinaryOpSymbol$20 = $EXPECT($L64, fail, 'BinaryOpSymbol "&&"');
2873
+ var BinaryOpSymbol$21 = $T($S($EXPECT($L65, fail, 'BinaryOpSymbol "or"'), NonIdContinue), function(value) {
2445
2874
  return "||";
2446
2875
  });
2447
- var BinaryOpSymbol$21 = $EXPECT($L64, fail, 'BinaryOpSymbol "||"');
2448
- var BinaryOpSymbol$22 = $EXPECT($L65, fail, 'BinaryOpSymbol "??"');
2449
- var BinaryOpSymbol$23 = $TS($S($EXPECT($L66, fail, 'BinaryOpSymbol "instanceof"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
2876
+ var BinaryOpSymbol$22 = $EXPECT($L66, fail, 'BinaryOpSymbol "||"');
2877
+ var BinaryOpSymbol$23 = $EXPECT($L67, fail, 'BinaryOpSymbol "??"');
2878
+ var BinaryOpSymbol$24 = $TS($S($EXPECT($L68, fail, 'BinaryOpSymbol "instanceof"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
2450
2879
  return $1;
2451
2880
  });
2452
- var BinaryOpSymbol$24 = $TS($S($EXPECT($L67, fail, 'BinaryOpSymbol "in"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
2881
+ var BinaryOpSymbol$25 = $TS($S($EXPECT($L69, fail, 'BinaryOpSymbol "in"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
2453
2882
  return $1;
2454
2883
  });
2455
- var BinaryOpSymbol$25 = $EXPECT($L68, fail, 'BinaryOpSymbol "&"');
2456
- var BinaryOpSymbol$26 = $EXPECT($L69, fail, 'BinaryOpSymbol "^"');
2457
- var BinaryOpSymbol$27 = $EXPECT($L70, fail, 'BinaryOpSymbol "|"');
2884
+ var BinaryOpSymbol$26 = $EXPECT($L70, fail, 'BinaryOpSymbol "&"');
2885
+ var BinaryOpSymbol$27 = $EXPECT($L71, fail, 'BinaryOpSymbol "^"');
2886
+ var BinaryOpSymbol$28 = $EXPECT($L72, fail, 'BinaryOpSymbol "|"');
2458
2887
  function BinaryOpSymbol(state) {
2459
2888
  if (state.tokenize) {
2460
- return $TOKEN("BinaryOpSymbol", state, BinaryOpSymbol$0(state) || BinaryOpSymbol$1(state) || BinaryOpSymbol$2(state) || BinaryOpSymbol$3(state) || BinaryOpSymbol$4(state) || BinaryOpSymbol$5(state) || BinaryOpSymbol$6(state) || BinaryOpSymbol$7(state) || BinaryOpSymbol$8(state) || BinaryOpSymbol$9(state) || BinaryOpSymbol$10(state) || BinaryOpSymbol$11(state) || BinaryOpSymbol$12(state) || BinaryOpSymbol$13(state) || BinaryOpSymbol$14(state) || BinaryOpSymbol$15(state) || BinaryOpSymbol$16(state) || BinaryOpSymbol$17(state) || BinaryOpSymbol$18(state) || BinaryOpSymbol$19(state) || BinaryOpSymbol$20(state) || BinaryOpSymbol$21(state) || BinaryOpSymbol$22(state) || BinaryOpSymbol$23(state) || BinaryOpSymbol$24(state) || BinaryOpSymbol$25(state) || BinaryOpSymbol$26(state) || BinaryOpSymbol$27(state));
2889
+ return $TOKEN("BinaryOpSymbol", state, BinaryOpSymbol$0(state) || BinaryOpSymbol$1(state) || BinaryOpSymbol$2(state) || BinaryOpSymbol$3(state) || BinaryOpSymbol$4(state) || BinaryOpSymbol$5(state) || BinaryOpSymbol$6(state) || BinaryOpSymbol$7(state) || BinaryOpSymbol$8(state) || BinaryOpSymbol$9(state) || BinaryOpSymbol$10(state) || BinaryOpSymbol$11(state) || BinaryOpSymbol$12(state) || BinaryOpSymbol$13(state) || BinaryOpSymbol$14(state) || BinaryOpSymbol$15(state) || BinaryOpSymbol$16(state) || BinaryOpSymbol$17(state) || BinaryOpSymbol$18(state) || BinaryOpSymbol$19(state) || BinaryOpSymbol$20(state) || BinaryOpSymbol$21(state) || BinaryOpSymbol$22(state) || BinaryOpSymbol$23(state) || BinaryOpSymbol$24(state) || BinaryOpSymbol$25(state) || BinaryOpSymbol$26(state) || BinaryOpSymbol$27(state) || BinaryOpSymbol$28(state));
2461
2890
  } else {
2462
- return BinaryOpSymbol$0(state) || BinaryOpSymbol$1(state) || BinaryOpSymbol$2(state) || BinaryOpSymbol$3(state) || BinaryOpSymbol$4(state) || BinaryOpSymbol$5(state) || BinaryOpSymbol$6(state) || BinaryOpSymbol$7(state) || BinaryOpSymbol$8(state) || BinaryOpSymbol$9(state) || BinaryOpSymbol$10(state) || BinaryOpSymbol$11(state) || BinaryOpSymbol$12(state) || BinaryOpSymbol$13(state) || BinaryOpSymbol$14(state) || BinaryOpSymbol$15(state) || BinaryOpSymbol$16(state) || BinaryOpSymbol$17(state) || BinaryOpSymbol$18(state) || BinaryOpSymbol$19(state) || BinaryOpSymbol$20(state) || BinaryOpSymbol$21(state) || BinaryOpSymbol$22(state) || BinaryOpSymbol$23(state) || BinaryOpSymbol$24(state) || BinaryOpSymbol$25(state) || BinaryOpSymbol$26(state) || BinaryOpSymbol$27(state);
2891
+ return BinaryOpSymbol$0(state) || BinaryOpSymbol$1(state) || BinaryOpSymbol$2(state) || BinaryOpSymbol$3(state) || BinaryOpSymbol$4(state) || BinaryOpSymbol$5(state) || BinaryOpSymbol$6(state) || BinaryOpSymbol$7(state) || BinaryOpSymbol$8(state) || BinaryOpSymbol$9(state) || BinaryOpSymbol$10(state) || BinaryOpSymbol$11(state) || BinaryOpSymbol$12(state) || BinaryOpSymbol$13(state) || BinaryOpSymbol$14(state) || BinaryOpSymbol$15(state) || BinaryOpSymbol$16(state) || BinaryOpSymbol$17(state) || BinaryOpSymbol$18(state) || BinaryOpSymbol$19(state) || BinaryOpSymbol$20(state) || BinaryOpSymbol$21(state) || BinaryOpSymbol$22(state) || BinaryOpSymbol$23(state) || BinaryOpSymbol$24(state) || BinaryOpSymbol$25(state) || BinaryOpSymbol$26(state) || BinaryOpSymbol$27(state) || BinaryOpSymbol$28(state);
2463
2892
  }
2464
2893
  }
2465
- var UnaryOp$0 = $TR($EXPECT($R2, fail, "UnaryOp /[!~+-]/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
2894
+ var UnaryOp$0 = $TR($EXPECT($R2, fail, "UnaryOp /[!~+-](?!\\s)/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
2466
2895
  return { $loc, token: $0 };
2467
2896
  });
2468
- var UnaryOp$1 = $S($C(Delete, Void, Typeof), __);
2897
+ var UnaryOp$1 = $S($C(Await, Delete, Void, Typeof), __);
2898
+ var UnaryOp$2 = Not;
2469
2899
  function UnaryOp(state) {
2470
2900
  if (state.tokenize) {
2471
- return $TOKEN("UnaryOp", state, UnaryOp$0(state) || UnaryOp$1(state));
2901
+ return $TOKEN("UnaryOp", state, UnaryOp$0(state) || UnaryOp$1(state) || UnaryOp$2(state));
2472
2902
  } else {
2473
- return UnaryOp$0(state) || UnaryOp$1(state);
2903
+ return UnaryOp$0(state) || UnaryOp$1(state) || UnaryOp$2(state);
2474
2904
  }
2475
2905
  }
2476
2906
  var ModuleItem$0 = ImportDeclaration;
@@ -2531,7 +2961,7 @@ var Civet = (() => {
2531
2961
  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);
2532
2962
  }
2533
2963
  }
2534
- var EmptyStatement$0 = $T($S($Q(TrailingComment), $Y($EXPECT($L71, fail, 'EmptyStatement ";"'))), function(value) {
2964
+ var EmptyStatement$0 = $T($S($Q(TrailingComment), $Y($EXPECT($L73, fail, 'EmptyStatement ";"'))), function(value) {
2535
2965
  return { "type": "EmptyStatement", "children": value[0] };
2536
2966
  });
2537
2967
  function EmptyStatement(state) {
@@ -2543,7 +2973,7 @@ var Civet = (() => {
2543
2973
  return EmptyStatement$0(state);
2544
2974
  }
2545
2975
  }
2546
- var BlockStatement$0 = $T($S(__, OpenBrace, EOS, NestedBlockExpressions, __, CloseBrace), function(value) {
2976
+ var BlockStatement$0 = $T($S(__, OpenBrace, EOS, NestedBlockStatements, __, CloseBrace, $N($S(__, $EXPECT($L44, fail, 'BlockStatement "="')))), function(value) {
2547
2977
  var exps = value[3];
2548
2978
  return { "type": "BlockStatement", "children": value, "expressions": exps };
2549
2979
  });
@@ -2556,7 +2986,7 @@ var Civet = (() => {
2556
2986
  return BlockStatement$0(state);
2557
2987
  }
2558
2988
  }
2559
- var IfStatement$0 = $TS($S(IfClause, Block, $E($S(__, Else, Block))), function($skip, $loc, $0, $1, $2, $3) {
2989
+ var IfStatement$0 = $TS($S($C(IfClause, UnlessClause), Block, $E($S(__, Else, Block))), function($skip, $loc, $0, $1, $2, $3) {
2560
2990
  var clause = $1;
2561
2991
  var block = $2;
2562
2992
  var e = $3;
@@ -2565,17 +2995,13 @@ var Civet = (() => {
2565
2995
  clause.children.push(e);
2566
2996
  return clause;
2567
2997
  });
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
2998
  function IfStatement(state) {
2999
+ if (state.verbose)
3000
+ console.log("ENTER:", "IfStatement");
2575
3001
  if (state.tokenize) {
2576
- return $TOKEN("IfStatement", state, IfStatement$0(state) || IfStatement$1(state));
3002
+ return $TOKEN("IfStatement", state, IfStatement$0(state));
2577
3003
  } else {
2578
- return IfStatement$0(state) || IfStatement$1(state);
3004
+ return IfStatement$0(state);
2579
3005
  }
2580
3006
  }
2581
3007
  var IfClause$0 = $T($S(If, Condition), function(value) {
@@ -2616,6 +3042,72 @@ var Civet = (() => {
2616
3042
  return UnlessClause$0(state);
2617
3043
  }
2618
3044
  }
3045
+ var IfExpression$0 = $TS($S(IfClause, ExpressionBlock, $E($S(__, Else, ExpressionBlock))), function($skip, $loc, $0, $1, $2, $3) {
3046
+ var clause = $1;
3047
+ var b = $2;
3048
+ var e = $3;
3049
+ clause.children.shift();
3050
+ clause.children.push("?", b, ":");
3051
+ if (e) {
3052
+ e.splice(1, 1);
3053
+ clause.children.push(e);
3054
+ } else {
3055
+ clause.children.push("void 0");
3056
+ }
3057
+ clause.type = "IfExpression";
3058
+ return clause;
3059
+ });
3060
+ function IfExpression(state) {
3061
+ if (state.verbose)
3062
+ console.log("ENTER:", "IfExpression");
3063
+ if (state.tokenize) {
3064
+ return $TOKEN("IfExpression", state, IfExpression$0(state));
3065
+ } else {
3066
+ return IfExpression$0(state);
3067
+ }
3068
+ }
3069
+ var ExpressionBlock$0 = $TS($S(InsertOpenParen, EOS, NestedBlockExpressions, InsertNewline, InsertIndent, InsertCloseParen), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6) {
3070
+ var exps = $3;
3071
+ exps[exps.length - 1].pop();
3072
+ return {
3073
+ type: "BlockExpressions",
3074
+ expressions: exps,
3075
+ children: $0
3076
+ };
3077
+ });
3078
+ var ExpressionBlock$1 = $S($E(Then), ExtendedExpression);
3079
+ function ExpressionBlock(state) {
3080
+ if (state.tokenize) {
3081
+ return $TOKEN("ExpressionBlock", state, ExpressionBlock$0(state) || ExpressionBlock$1(state));
3082
+ } else {
3083
+ return ExpressionBlock$0(state) || ExpressionBlock$1(state);
3084
+ }
3085
+ }
3086
+ var NestedBlockExpressions$0 = $TS($S(PushIndent, $Q(NestedBlockExpression), PopIndent), function($skip, $loc, $0, $1, $2, $3) {
3087
+ var exps = $2;
3088
+ if (!exps.length)
3089
+ return $skip;
3090
+ return exps;
3091
+ });
3092
+ function NestedBlockExpressions(state) {
3093
+ if (state.verbose)
3094
+ console.log("ENTER:", "NestedBlockExpressions");
3095
+ if (state.tokenize) {
3096
+ return $TOKEN("NestedBlockExpressions", state, NestedBlockExpressions$0(state));
3097
+ } else {
3098
+ return NestedBlockExpressions$0(state);
3099
+ }
3100
+ }
3101
+ var NestedBlockExpression$0 = $S(Nested, ExtendedExpression, ExpressionDelimiter);
3102
+ function NestedBlockExpression(state) {
3103
+ if (state.verbose)
3104
+ console.log("ENTER:", "NestedBlockExpression");
3105
+ if (state.tokenize) {
3106
+ return $TOKEN("NestedBlockExpression", state, NestedBlockExpression$0(state));
3107
+ } else {
3108
+ return NestedBlockExpression$0(state);
3109
+ }
3110
+ }
2619
3111
  var IterationStatement$0 = LoopStatement;
2620
3112
  var IterationStatement$1 = DoWhileStatement;
2621
3113
  var IterationStatement$2 = WhileStatement;
@@ -2708,6 +3200,7 @@ var Civet = (() => {
2708
3200
  var clause = $1;
2709
3201
  var block = $2;
2710
3202
  clause.children.push(block);
3203
+ clause.block = block;
2711
3204
  return clause;
2712
3205
  });
2713
3206
  function ForStatement(state) {
@@ -2719,8 +3212,16 @@ var Civet = (() => {
2719
3212
  return ForStatement$0(state);
2720
3213
  }
2721
3214
  }
2722
- var ForClause$0 = $T($S(For, __, ForStatementControl), function(value) {
2723
- return { "type": "IterationStatement", "children": value };
3215
+ var ForClause$0 = $TS($S(For, __, ForStatementControl), function($skip, $loc, $0, $1, $2, $3) {
3216
+ var c = $3;
3217
+ const { children, declaration } = c;
3218
+ children.splice(0, 0, $1, ...$2);
3219
+ return {
3220
+ type: "ForStatement",
3221
+ children,
3222
+ declaration,
3223
+ block: null
3224
+ };
2724
3225
  });
2725
3226
  function ForClause(state) {
2726
3227
  if (state.verbose)
@@ -2731,20 +3232,49 @@ var Civet = (() => {
2731
3232
  return ForClause$0(state);
2732
3233
  }
2733
3234
  }
2734
- var ForStatementControl$0 = $S(OpenParen, __, $C(LexicalDeclaration, VariableStatement, $E(Expression)), __, Semicolon, $E(Expression), Semicolon, $E(Expression), __, CloseParen);
2735
- var ForStatementControl$1 = $S(InsertOpenParen, __, $C(LexicalDeclaration, VariableStatement, $E(Expression)), __, Semicolon, $E(Expression), Semicolon, $E($S($N(EOS), Expression)), InsertCloseParen);
2736
- var ForStatementControl$2 = $S(OpenParen, __, ForInOfDeclaration, __, In, Expression, __, CloseParen);
2737
- var ForStatementControl$3 = $S(InsertOpenParen, ForInOfDeclaration, __, In, Expression, InsertCloseParen);
2738
- var ForStatementControl$4 = $S($E($S(Await, __)), OpenParen, __, ForInOfDeclaration, __, Of, AssignmentExpression, __, CloseParen);
2739
- var ForStatementControl$5 = $S($E($S(Await, __)), InsertOpenParen, ForInOfDeclaration, __, Of, AssignmentExpression, InsertCloseParen);
3235
+ var ForStatementControl$0 = $TS($S(OpenParen, __, $C(LexicalDeclaration, VariableStatement, $E(Expression)), __, Semicolon, $E(Expression), Semicolon, $E(Expression), __, CloseParen), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9, $10) {
3236
+ var declaration = $3;
3237
+ return {
3238
+ declaration,
3239
+ children: $0
3240
+ };
3241
+ });
3242
+ var ForStatementControl$1 = $TS($S(InsertOpenParen, __, $C(LexicalDeclaration, VariableStatement, $E(Expression)), __, Semicolon, $E(Expression), Semicolon, $E($S($N(EOS), Expression)), InsertCloseParen), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
3243
+ var declaration = $3;
3244
+ return {
3245
+ declaration,
3246
+ children: $0
3247
+ };
3248
+ });
3249
+ var ForStatementControl$2 = $TS($S($E($S(Await, __)), OpenParen, __, ForInOfDeclaration, __, $C(In, Of), ExtendedExpression, __, CloseParen), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
3250
+ var declaration = $4;
3251
+ return {
3252
+ declaration,
3253
+ children: $0
3254
+ };
3255
+ });
3256
+ var ForStatementControl$3 = $TS($S($E($S(Await, __)), InsertOpenParen, ForInOfDeclaration, __, $C(In, Of), ExtendedExpression, InsertCloseParen), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7) {
3257
+ var declaration = $3;
3258
+ return {
3259
+ declaration,
3260
+ children: $0
3261
+ };
3262
+ });
2740
3263
  function ForStatementControl(state) {
2741
3264
  if (state.tokenize) {
2742
- return $TOKEN("ForStatementControl", state, ForStatementControl$0(state) || ForStatementControl$1(state) || ForStatementControl$2(state) || ForStatementControl$3(state) || ForStatementControl$4(state) || ForStatementControl$5(state));
3265
+ return $TOKEN("ForStatementControl", state, ForStatementControl$0(state) || ForStatementControl$1(state) || ForStatementControl$2(state) || ForStatementControl$3(state));
2743
3266
  } else {
2744
- return ForStatementControl$0(state) || ForStatementControl$1(state) || ForStatementControl$2(state) || ForStatementControl$3(state) || ForStatementControl$4(state) || ForStatementControl$5(state);
3267
+ return ForStatementControl$0(state) || ForStatementControl$1(state) || ForStatementControl$2(state) || ForStatementControl$3(state);
2745
3268
  }
2746
3269
  }
2747
- var ForInOfDeclaration$0 = $S(Var, ForBinding);
3270
+ var ForInOfDeclaration$0 = $TS($S(Var, ForBinding), function($skip, $loc, $0, $1, $2) {
3271
+ var binding = $2;
3272
+ return {
3273
+ type: "ForDeclaration",
3274
+ children: $0,
3275
+ names: binding.names
3276
+ };
3277
+ });
2748
3278
  var ForInOfDeclaration$1 = ForDeclaration;
2749
3279
  var ForInOfDeclaration$2 = LeftHandSideExpression;
2750
3280
  function ForInOfDeclaration(state) {
@@ -2754,8 +3284,24 @@ var Civet = (() => {
2754
3284
  return ForInOfDeclaration$0(state) || ForInOfDeclaration$1(state) || ForInOfDeclaration$2(state);
2755
3285
  }
2756
3286
  }
2757
- var ForDeclaration$0 = $S(LetOrConst, NonIdContinue, ForBinding);
2758
- var ForDeclaration$1 = $S(InsertConst, ForBinding, $R$0($EXPECT($R3, fail, "ForDeclaration /(?=[\\s\\)])/")));
3287
+ var ForDeclaration$0 = $TS($S(LetOrConst, NonIdContinue, ForBinding), function($skip, $loc, $0, $1, $2, $3) {
3288
+ var c = $1;
3289
+ var binding = $3;
3290
+ return {
3291
+ type: "ForDeclaration",
3292
+ children: [c, binding],
3293
+ names: binding.names
3294
+ };
3295
+ });
3296
+ var ForDeclaration$1 = $TS($S(InsertConst, ForBinding, $EXPECT($R3, fail, "ForDeclaration /(?=[\\s\\)])/")), function($skip, $loc, $0, $1, $2, $3) {
3297
+ var c = $1;
3298
+ var binding = $2;
3299
+ return {
3300
+ type: "ForDeclaration",
3301
+ children: [c, binding],
3302
+ names: binding.names
3303
+ };
3304
+ });
2759
3305
  function ForDeclaration(state) {
2760
3306
  if (state.tokenize) {
2761
3307
  return $TOKEN("ForDeclaration", state, ForDeclaration$0(state) || ForDeclaration$1(state));
@@ -2784,6 +3330,22 @@ var Civet = (() => {
2784
3330
  return SwitchStatement$0(state);
2785
3331
  }
2786
3332
  }
3333
+ var SwitchExpression$0 = $TV(SwitchStatement, function($skip, $loc, $0, $1) {
3334
+ var e = $0;
3335
+ module.addImplicitReturns(e.children[2]);
3336
+ e.type = "SwitchExpression";
3337
+ e.children = ["($=>{", e.children, "})()"];
3338
+ return e;
3339
+ });
3340
+ function SwitchExpression(state) {
3341
+ if (state.verbose)
3342
+ console.log("ENTER:", "SwitchExpression");
3343
+ if (state.tokenize) {
3344
+ return $TOKEN("SwitchExpression", state, SwitchExpression$0(state));
3345
+ } else {
3346
+ return SwitchExpression$0(state);
3347
+ }
3348
+ }
2787
3349
  var CaseBlock$0 = $TS($S(__, OpenBrace, $Y(EOS), NestedCaseClauses, __, CloseBrace), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6) {
2788
3350
  var clauses = $4;
2789
3351
  $0.splice(2, 1);
@@ -2837,19 +3399,19 @@ var Civet = (() => {
2837
3399
  return NestedCaseClause$0(state);
2838
3400
  }
2839
3401
  }
2840
- var CaseClause$0 = $T($S(Case, CaseExpressionList, $C(NestedBlockExpressions, NoExpressions)), function(value) {
3402
+ var CaseClause$0 = $T($S(Case, CaseExpressionList, $C(NestedBlockStatements, NoExpressions)), function(value) {
2841
3403
  var exps = value[2];
2842
3404
  return { "type": "CaseClause", "expressions": exps, "children": value };
2843
3405
  });
2844
- var CaseClause$1 = $T($S(When, CaseExpressionList, NestedBlockExpressions, InsertBreak), function(value) {
3406
+ var CaseClause$1 = $T($S(When, CaseExpressionList, NestedBlockStatements, InsertBreak), function(value) {
2845
3407
  var exps = value[2];
2846
3408
  return { "type": "WhenClause", "expressions": exps, "children": value };
2847
3409
  });
2848
- var CaseClause$2 = $T($S(Default, ImpliedColon, $C(NestedBlockExpressions, NoExpressions)), function(value) {
3410
+ var CaseClause$2 = $T($S(Default, ImpliedColon, $C(NestedBlockStatements, NoExpressions)), function(value) {
2849
3411
  var exps = value[2];
2850
3412
  return { "type": "DefaultClause", "expressions": exps, "children": value };
2851
3413
  });
2852
- var CaseClause$3 = $TS($S(Else, ImpliedColon, NestedBlockExpressions), function($skip, $loc, $0, $1, $2, $3) {
3414
+ var CaseClause$3 = $TS($S(Else, ImpliedColon, NestedBlockStatements), function($skip, $loc, $0, $1, $2, $3) {
2853
3415
  var exps = $3;
2854
3416
  $1.token = "default";
2855
3417
  return {
@@ -2951,7 +3513,7 @@ var Civet = (() => {
2951
3513
  return CatchBind$0(state) || CatchBind$1(state);
2952
3514
  }
2953
3515
  }
2954
- var Finally$0 = $S(__, $EXPECT($L72, fail, 'Finally "finally"'), BracedBlock);
3516
+ var Finally$0 = $S(__, $EXPECT($L74, fail, 'Finally "finally"'), BracedBlock);
2955
3517
  function Finally(state) {
2956
3518
  if (state.verbose)
2957
3519
  console.log("ENTER:", "Finally");
@@ -2970,7 +3532,7 @@ var Civet = (() => {
2970
3532
  return CatchParameter$0(state) || CatchParameter$1(state);
2971
3533
  }
2972
3534
  }
2973
- var Condition$0 = $S(__, OpenParen, Expression, __, CloseParen);
3535
+ var Condition$0 = $S(__, OpenParen, ExtendedExpression, __, CloseParen);
2974
3536
  var Condition$1 = $TS($S($N(EOS), __, InsertOpenParen, ExpressionWithIndentedApplicationSuppressed, InsertCloseParen), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
2975
3537
  $0.shift();
2976
3538
  return $0;
@@ -2982,7 +3544,7 @@ var Civet = (() => {
2982
3544
  return Condition$0(state) || Condition$1(state);
2983
3545
  }
2984
3546
  }
2985
- var ExpressionWithIndentedApplicationSuppressed$0 = $TS($S(SuppressIndentedApplication, $E(AssignmentExpression)), function($skip, $loc, $0, $1, $2) {
3547
+ var ExpressionWithIndentedApplicationSuppressed$0 = $TS($S(SuppressIndentedApplication, $E(ExtendedExpression)), function($skip, $loc, $0, $1, $2) {
2986
3548
  var exp = $2;
2987
3549
  module.suppressIndentedApplication = false;
2988
3550
  if (exp)
@@ -3020,19 +3582,19 @@ var Civet = (() => {
3020
3582
  return ExpressionStatement$0(state);
3021
3583
  }
3022
3584
  }
3023
- var KeywordStatement$0 = $T($S($EXPECT($L73, fail, 'KeywordStatement "break"'), NonIdContinue), function(value) {
3585
+ var KeywordStatement$0 = $T($S($EXPECT($L75, fail, 'KeywordStatement "break"'), NonIdContinue), function(value) {
3024
3586
  return { "type": "BreakStatement", "children": value };
3025
3587
  });
3026
- var KeywordStatement$1 = $T($S($EXPECT($L74, fail, 'KeywordStatement "continue"'), NonIdContinue), function(value) {
3588
+ var KeywordStatement$1 = $T($S($EXPECT($L76, fail, 'KeywordStatement "continue"'), NonIdContinue), function(value) {
3027
3589
  return { "type": "ContinueStatement", "children": value };
3028
3590
  });
3029
- var KeywordStatement$2 = $T($S($EXPECT($L75, fail, 'KeywordStatement "debugger"'), NonIdContinue), function(value) {
3591
+ var KeywordStatement$2 = $T($S($EXPECT($L77, fail, 'KeywordStatement "debugger"'), NonIdContinue), function(value) {
3030
3592
  return { "type": "DebuggerStatement", "children": value };
3031
3593
  });
3032
3594
  var KeywordStatement$3 = $T($S(Return, $E(MaybeNestedExpression)), function(value) {
3033
3595
  return { "type": "ReturnStatement", "children": value };
3034
3596
  });
3035
- var KeywordStatement$4 = $T($S(Throw, Expression), function(value) {
3597
+ var KeywordStatement$4 = $T($S(Throw, ExtendedExpression), function(value) {
3036
3598
  return { "type": "ThrowStatement", "children": value };
3037
3599
  });
3038
3600
  function KeywordStatement(state) {
@@ -3042,8 +3604,42 @@ var Civet = (() => {
3042
3604
  return KeywordStatement$0(state) || KeywordStatement$1(state) || KeywordStatement$2(state) || KeywordStatement$3(state) || KeywordStatement$4(state);
3043
3605
  }
3044
3606
  }
3045
- var MaybeNestedExpression$0 = $S($N(EOS), $Q(TrailingComment), Expression);
3046
- var MaybeNestedExpression$1 = $S($Y(EOS), ObjectLiteral);
3607
+ var DebuggerExpression$0 = $TS($S($EXPECT($L77, fail, 'DebuggerExpression "debugger"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3608
+ return {
3609
+ type: "DebuggerExpression",
3610
+ children: ["($=>{", $1, "})()"]
3611
+ };
3612
+ });
3613
+ function DebuggerExpression(state) {
3614
+ if (state.verbose)
3615
+ console.log("ENTER:", "DebuggerExpression");
3616
+ if (state.tokenize) {
3617
+ return $TOKEN("DebuggerExpression", state, DebuggerExpression$0(state));
3618
+ } else {
3619
+ return DebuggerExpression$0(state);
3620
+ }
3621
+ }
3622
+ var ThrowExpression$0 = $TS($S(Throw, ExtendedExpression), function($skip, $loc, $0, $1, $2) {
3623
+ return {
3624
+ type: "ThrowExpression",
3625
+ children: ["($=>{", ...$0, "})()"]
3626
+ };
3627
+ });
3628
+ function ThrowExpression(state) {
3629
+ if (state.verbose)
3630
+ console.log("ENTER:", "ThrowExpression");
3631
+ if (state.tokenize) {
3632
+ return $TOKEN("ThrowExpression", state, ThrowExpression$0(state));
3633
+ } else {
3634
+ return ThrowExpression$0(state);
3635
+ }
3636
+ }
3637
+ var MaybeNestedExpression$0 = $TS($S($N(EOS), $Q(TrailingComment), AssignmentExpression), function($skip, $loc, $0, $1, $2, $3) {
3638
+ return [...$2, $3];
3639
+ });
3640
+ var MaybeNestedExpression$1 = $T($S($Y(EOS), ObjectLiteral), function(value) {
3641
+ return value[1];
3642
+ });
3047
3643
  function MaybeNestedExpression(state) {
3048
3644
  if (state.tokenize) {
3049
3645
  return $TOKEN("MaybeNestedExpression", state, MaybeNestedExpression$0(state) || MaybeNestedExpression$1(state));
@@ -3051,7 +3647,7 @@ var Civet = (() => {
3051
3647
  return MaybeNestedExpression$0(state) || MaybeNestedExpression$1(state);
3052
3648
  }
3053
3649
  }
3054
- var ImportDeclaration$0 = $T($S($EXPECT($L76, fail, 'ImportDeclaration "import type"'), NonIdContinue, __, ImportClause, __, FromClause), function(value) {
3650
+ var ImportDeclaration$0 = $T($S($EXPECT($L78, fail, 'ImportDeclaration "import type"'), NonIdContinue, __, ImportClause, __, FromClause), function(value) {
3055
3651
  return { "ts": true, "children": value };
3056
3652
  });
3057
3653
  var ImportDeclaration$1 = $S(Import, __, ImportClause, __, FromClause);
@@ -3086,7 +3682,19 @@ var Civet = (() => {
3086
3682
  return ImpliedImport$0(state);
3087
3683
  }
3088
3684
  }
3089
- var ImportClause$0 = $S(ImportedBinding, $E($S(__, Comma, __, $C(NameSpaceImport, NamedImports))));
3685
+ var ImportClause$0 = $TS($S(ImportedBinding, $E($S(__, Comma, __, $C(NameSpaceImport, NamedImports)))), function($skip, $loc, $0, $1, $2) {
3686
+ var binding = $1;
3687
+ var rest = $2;
3688
+ if (rest) {
3689
+ return {
3690
+ type: "Declaration",
3691
+ children: $0,
3692
+ names: [...binding.names, ...rest[3].names]
3693
+ };
3694
+ }
3695
+ $1.type = "Declaration";
3696
+ return $1;
3697
+ });
3090
3698
  var ImportClause$1 = NameSpaceImport;
3091
3699
  var ImportClause$2 = NamedImports;
3092
3700
  function ImportClause(state) {
@@ -3096,7 +3704,14 @@ var Civet = (() => {
3096
3704
  return ImportClause$0(state) || ImportClause$1(state) || ImportClause$2(state);
3097
3705
  }
3098
3706
  }
3099
- var NameSpaceImport$0 = $S(Star, __, As, NonIdContinue, __, ImportedBinding);
3707
+ var NameSpaceImport$0 = $TS($S(Star, __, As, __, ImportedBinding), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
3708
+ var binding = $5;
3709
+ return {
3710
+ type: "Declaration",
3711
+ children: $0,
3712
+ names: binding.names
3713
+ };
3714
+ });
3100
3715
  function NameSpaceImport(state) {
3101
3716
  if (state.verbose)
3102
3717
  console.log("ENTER:", "NameSpaceImport");
@@ -3106,7 +3721,17 @@ var Civet = (() => {
3106
3721
  return NameSpaceImport$0(state);
3107
3722
  }
3108
3723
  }
3109
- var NamedImports$0 = $S(OpenBrace, $Q(ImportSpecifier), $E($S(__, Comma)), __, CloseBrace);
3724
+ var NamedImports$0 = $TS($S(OpenBrace, $Q(ImportSpecifier), $E($S(__, Comma)), __, CloseBrace), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
3725
+ var specifiers = $2;
3726
+ const names = specifiers.flatMap(({ binding }) => {
3727
+ return binding.names;
3728
+ });
3729
+ return {
3730
+ type: "Declaration",
3731
+ children: $0,
3732
+ names
3733
+ };
3734
+ });
3110
3735
  function NamedImports(state) {
3111
3736
  if (state.verbose)
3112
3737
  console.log("ENTER:", "NamedImports");
@@ -3126,8 +3751,20 @@ var Civet = (() => {
3126
3751
  return FromClause$0(state);
3127
3752
  }
3128
3753
  }
3129
- var ImportSpecifier$0 = $S(__, ModuleExportName, __, As, NonIdContinue, __, ImportedBinding, ObjectPropertyDelimiter);
3130
- var ImportSpecifier$1 = $S(__, ImportedBinding, ObjectPropertyDelimiter);
3754
+ var ImportSpecifier$0 = $TS($S(__, ModuleExportName, __, As, __, ImportedBinding, ObjectPropertyDelimiter), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7) {
3755
+ var binding = $6;
3756
+ return {
3757
+ binding,
3758
+ children: $0
3759
+ };
3760
+ });
3761
+ var ImportSpecifier$1 = $TS($S(__, ImportedBinding, ObjectPropertyDelimiter), function($skip, $loc, $0, $1, $2, $3) {
3762
+ var binding = $2;
3763
+ return {
3764
+ binding,
3765
+ children: $0
3766
+ };
3767
+ });
3131
3768
  function ImportSpecifier(state) {
3132
3769
  if (state.tokenize) {
3133
3770
  return $TOKEN("ImportSpecifier", state, ImportSpecifier$0(state) || ImportSpecifier$1(state));
@@ -3189,7 +3826,7 @@ var Civet = (() => {
3189
3826
  return ImportedBinding$0(state);
3190
3827
  }
3191
3828
  }
3192
- var ExportDeclaration$0 = $S(Export, __, $EXPECT($L77, fail, 'ExportDeclaration "default"'), NonIdContinue, __, $C(HoistableDeclaration, ClassDeclaration, AssignmentExpression));
3829
+ var ExportDeclaration$0 = $S(Export, __, $EXPECT($L79, fail, 'ExportDeclaration "default"'), NonIdContinue, __, $C(HoistableDeclaration, ClassDeclaration, ExtendedExpression));
3193
3830
  var ExportDeclaration$1 = $S(Export, __, ExportFromClause, __, FromClause);
3194
3831
  var ExportDeclaration$2 = $S(Export, __, $C(NamedExports, VariableStatement, Declaration));
3195
3832
  function ExportDeclaration(state) {
@@ -3199,7 +3836,7 @@ var Civet = (() => {
3199
3836
  return ExportDeclaration$0(state) || ExportDeclaration$1(state) || ExportDeclaration$2(state);
3200
3837
  }
3201
3838
  }
3202
- var ExportFromClause$0 = $S(Star, $E($S(__, As, NonIdContinue, __, ModuleExportName)));
3839
+ var ExportFromClause$0 = $S(Star, $E($S(__, As, __, ModuleExportName)));
3203
3840
  var ExportFromClause$1 = NamedExports;
3204
3841
  function ExportFromClause(state) {
3205
3842
  if (state.tokenize) {
@@ -3249,18 +3886,43 @@ var Civet = (() => {
3249
3886
  return HoistableDeclaration$0(state);
3250
3887
  }
3251
3888
  }
3252
- var LexicalDeclaration$0 = $T($S(LetOrConst, __, LexicalBinding, $Q($S(__, Comma, __, LexicalBinding))), function(value) {
3253
- return { "type": "VariableDeclaration", "children": value };
3889
+ var LexicalDeclaration$0 = $TS($S(LetOrConst, LexicalBinding, $Q($S(__, Comma, LexicalBinding))), function($skip, $loc, $0, $1, $2, $3) {
3890
+ var binding = $2;
3891
+ var tail = $3;
3892
+ return {
3893
+ type: "Declaration",
3894
+ children: $0,
3895
+ names: [...binding.names].concat(tail.flatMap(([, , b]) => b.names))
3896
+ };
3254
3897
  });
3255
- var LexicalDeclaration$1 = $TS($S(InsertConst, $C(BindingPattern, BindingIdentifier), $E(TypeSuffix), __, ConstAssignment, AssignmentExpression), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6) {
3898
+ var LexicalDeclaration$1 = $TS($S(InsertConst, $C(BindingPattern, BindingIdentifier), $E(TypeSuffix), __, ConstAssignment, ExtendedExpression), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6) {
3256
3899
  var c = $1;
3900
+ var id = $2;
3257
3901
  var ca = $5;
3902
+ var e = $6;
3258
3903
  c.$loc = {
3259
3904
  pos: ca.$loc.pos - 1,
3260
3905
  length: ca.$loc.length + 1
3261
3906
  };
3907
+ let exp;
3908
+ if (e.type === "FunctionExpression") {
3909
+ exp = e;
3910
+ } else {
3911
+ exp = e[1];
3912
+ }
3913
+ if (exp?.children?.[0]?.token?.match(/^\s+$/))
3914
+ exp.children.shift();
3915
+ if (id.type === "Identifier" && exp?.type === "FunctionExpression") {
3916
+ if (exp.id.length === 0) {
3917
+ exp.id.push(" ", id, $3, $4);
3918
+ }
3919
+ exp.type = "Declaration";
3920
+ exp.names = id.names;
3921
+ return exp;
3922
+ }
3262
3923
  return {
3263
- type: "VariableDeclaration",
3924
+ type: "Declaration",
3925
+ names: id.names,
3264
3926
  children: $0
3265
3927
  };
3266
3928
  });
@@ -3271,7 +3933,7 @@ var Civet = (() => {
3271
3933
  return LexicalDeclaration$0(state) || LexicalDeclaration$1(state);
3272
3934
  }
3273
3935
  }
3274
- var ConstAssignment$0 = $TV($EXPECT($L78, fail, 'ConstAssignment ":="'), function($skip, $loc, $0, $1) {
3936
+ var ConstAssignment$0 = $TV($EXPECT($L80, fail, 'ConstAssignment ":="'), function($skip, $loc, $0, $1) {
3275
3937
  return { $loc, token: "=" };
3276
3938
  });
3277
3939
  function ConstAssignment(state) {
@@ -3283,8 +3945,19 @@ var Civet = (() => {
3283
3945
  return ConstAssignment$0(state);
3284
3946
  }
3285
3947
  }
3286
- var LexicalBinding$0 = $S(BindingPattern, $E(TypeSuffix), Initializer);
3287
- var LexicalBinding$1 = $S(BindingIdentifier, $E(TypeSuffix), $E(Initializer));
3948
+ var LexicalBinding$0 = $TS($S(BindingPattern, $E(TypeSuffix), Initializer), function($skip, $loc, $0, $1, $2, $3) {
3949
+ if ($2)
3950
+ $1.children.push($2);
3951
+ $1.children.push($3);
3952
+ return $1;
3953
+ });
3954
+ var LexicalBinding$1 = $TS($S(BindingIdentifier, $E(TypeSuffix), $E(Initializer)), function($skip, $loc, $0, $1, $2, $3) {
3955
+ if ($2)
3956
+ $1.children.push($2);
3957
+ if ($3)
3958
+ $1.children.push($3);
3959
+ return $1;
3960
+ });
3288
3961
  function LexicalBinding(state) {
3289
3962
  if (state.tokenize) {
3290
3963
  return $TOKEN("LexicalBinding", state, LexicalBinding$0(state) || LexicalBinding$1(state));
@@ -3292,7 +3965,7 @@ var Civet = (() => {
3292
3965
  return LexicalBinding$0(state) || LexicalBinding$1(state);
3293
3966
  }
3294
3967
  }
3295
- var Initializer$0 = $S(__, Equals, AssignmentExpression);
3968
+ var Initializer$0 = $S(__, Equals, ExtendedExpression);
3296
3969
  function Initializer(state) {
3297
3970
  if (state.verbose)
3298
3971
  console.log("ENTER:", "Initializer");
@@ -3302,8 +3975,9 @@ var Civet = (() => {
3302
3975
  return Initializer$0(state);
3303
3976
  }
3304
3977
  }
3305
- var VariableStatement$0 = $T($S(Var, __, VariableDeclarationList), function(value) {
3306
- return { "type": "VariableDeclaration", "children": value };
3978
+ var VariableStatement$0 = $TS($S(Var, __, VariableDeclarationList), function($skip, $loc, $0, $1, $2, $3) {
3979
+ $3.children.splice(0, 0, $1, ...$2);
3980
+ return $3;
3307
3981
  });
3308
3982
  function VariableStatement(state) {
3309
3983
  if (state.verbose)
@@ -3314,7 +3988,20 @@ var Civet = (() => {
3314
3988
  return VariableStatement$0(state);
3315
3989
  }
3316
3990
  }
3317
- var VariableDeclarationList$0 = $S(VariableDeclaration, $Q($S(__, Comma, __, VariableDeclaration)));
3991
+ var VariableDeclarationList$0 = $TS($S(VariableDeclaration, $Q($S(__, Comma, __, VariableDeclaration))), function($skip, $loc, $0, $1, $2) {
3992
+ let children;
3993
+ if ($2.length) {
3994
+ children = [$1, ...$2];
3995
+ } else {
3996
+ children = [$1];
3997
+ }
3998
+ const names = children.flatMap((c) => c.names || []);
3999
+ return {
4000
+ type: "Declaration",
4001
+ children,
4002
+ names
4003
+ };
4004
+ });
3318
4005
  function VariableDeclarationList(state) {
3319
4006
  if (state.verbose)
3320
4007
  console.log("ENTER:", "VariableDeclarationList");
@@ -3324,8 +4011,19 @@ var Civet = (() => {
3324
4011
  return VariableDeclarationList$0(state);
3325
4012
  }
3326
4013
  }
3327
- var VariableDeclaration$0 = $S(BindingPattern, $E(TypeSuffix), Initializer);
3328
- var VariableDeclaration$1 = $S(BindingIdentifier, $E(TypeSuffix), $E(Initializer));
4014
+ var VariableDeclaration$0 = $TS($S(BindingPattern, $E(TypeSuffix), Initializer), function($skip, $loc, $0, $1, $2, $3) {
4015
+ if ($2)
4016
+ $1.children.push($2);
4017
+ $1.children.push($3);
4018
+ return $1;
4019
+ });
4020
+ var VariableDeclaration$1 = $TS($S(BindingIdentifier, $E(TypeSuffix), $E(Initializer)), function($skip, $loc, $0, $1, $2, $3) {
4021
+ if ($2)
4022
+ $1.children.push($2);
4023
+ if ($3)
4024
+ $1.children.push($3);
4025
+ return $1;
4026
+ });
3329
4027
  function VariableDeclaration(state) {
3330
4028
  if (state.tokenize) {
3331
4029
  return $TOKEN("VariableDeclaration", state, VariableDeclaration$0(state) || VariableDeclaration$1(state));
@@ -3506,7 +4204,7 @@ var Civet = (() => {
3506
4204
  return TripleSingleStringCharacters$0(state);
3507
4205
  }
3508
4206
  }
3509
- var CoffeeStringSubstitution$0 = $S(CoffeeSubstitutionStart, Expression, __, CloseBrace);
4207
+ var CoffeeStringSubstitution$0 = $S(CoffeeSubstitutionStart, ExtendedExpression, __, CloseBrace);
3510
4208
  function CoffeeStringSubstitution(state) {
3511
4209
  if (state.verbose)
3512
4210
  console.log("ENTER:", "CoffeeStringSubstitution");
@@ -3557,7 +4255,7 @@ var Civet = (() => {
3557
4255
  return CoffeeDoubleQuotedStringCharacters$0(state);
3558
4256
  }
3559
4257
  }
3560
- var RegularExpressionLiteral$0 = $TV($TEXT($S($EXPECT($L46, fail, 'RegularExpressionLiteral "/"'), RegularExpressionBody, $EXPECT($L46, fail, 'RegularExpressionLiteral "/"'), RegularExpressionFlags)), function($skip, $loc, $0, $1) {
4258
+ var RegularExpressionLiteral$0 = $TV($TEXT($S($EXPECT($L47, fail, 'RegularExpressionLiteral "/"'), RegularExpressionBody, $EXPECT($L47, fail, 'RegularExpressionLiteral "/"'), RegularExpressionFlags)), function($skip, $loc, $0, $1) {
3561
4259
  return { $loc, token: $1 };
3562
4260
  });
3563
4261
  function RegularExpressionLiteral(state) {
@@ -3610,7 +4308,7 @@ var Civet = (() => {
3610
4308
  return TemplateLiteral$0(state) || TemplateLiteral$1(state);
3611
4309
  }
3612
4310
  }
3613
- var TemplateSubstitution$0 = $S(SubstitutionStart, Expression, __, CloseBrace);
4311
+ var TemplateSubstitution$0 = $S(SubstitutionStart, ExtendedExpression, __, CloseBrace);
3614
4312
  function TemplateSubstitution(state) {
3615
4313
  if (state.verbose)
3616
4314
  console.log("ENTER:", "TemplateSubstitution");
@@ -3645,12 +4343,13 @@ var Civet = (() => {
3645
4343
  }
3646
4344
  }
3647
4345
  var ReservedWord$0 = $S(CoffeeBooleansEnabled, $R$0($EXPECT($R23, fail, "ReservedWord /(?:on|off|yes|no)(?!\\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})/"));
4346
+ var ReservedWord$1 = $S(CoffeeIsntEnabled, $R$0($EXPECT($R24, fail, "ReservedWord /(?:isnt)(?!\\p{ID_Continue})/")));
4347
+ var ReservedWord$2 = $R$0($EXPECT($R25, 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})/"));
3649
4348
  function ReservedWord(state) {
3650
4349
  if (state.tokenize) {
3651
- return $TOKEN("ReservedWord", state, ReservedWord$0(state) || ReservedWord$1(state));
4350
+ return $TOKEN("ReservedWord", state, ReservedWord$0(state) || ReservedWord$1(state) || ReservedWord$2(state));
3652
4351
  } else {
3653
- return ReservedWord$0(state) || ReservedWord$1(state);
4352
+ return ReservedWord$0(state) || ReservedWord$1(state) || ReservedWord$2(state);
3654
4353
  }
3655
4354
  }
3656
4355
  var Comment$0 = MultiLineComment;
@@ -3662,7 +4361,7 @@ var Civet = (() => {
3662
4361
  return Comment$0(state) || Comment$1(state);
3663
4362
  }
3664
4363
  }
3665
- var SingleLineComment$0 = $TR($EXPECT($R25, fail, "SingleLineComment /\\/\\/[^\\r\\n]*/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
4364
+ var SingleLineComment$0 = $TR($EXPECT($R26, fail, "SingleLineComment /\\/\\/[^\\r\\n]*/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
3666
4365
  return { $loc, token: $0 };
3667
4366
  });
3668
4367
  var SingleLineComment$1 = $S(CoffeeCommentEnabled, CoffeeSingleLineComment);
@@ -3682,7 +4381,7 @@ var Civet = (() => {
3682
4381
  return MultiLineComment$0(state) || MultiLineComment$1(state);
3683
4382
  }
3684
4383
  }
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) {
4384
+ var JSMultiLineComment$0 = $TV($TEXT($S($EXPECT($L81, fail, 'JSMultiLineComment "/*"'), $Q($S($N($EXPECT($L82, fail, 'JSMultiLineComment "*/"')), $EXPECT($R27, fail, "JSMultiLineComment /./"))), $EXPECT($L82, fail, 'JSMultiLineComment "*/"'))), function($skip, $loc, $0, $1) {
3686
4385
  return { $loc, token: $1 };
3687
4386
  });
3688
4387
  function JSMultiLineComment(state) {
@@ -3694,7 +4393,7 @@ var Civet = (() => {
3694
4393
  return JSMultiLineComment$0(state);
3695
4394
  }
3696
4395
  }
3697
- var CoffeeSingleLineComment$0 = $TR($EXPECT($R27, fail, "CoffeeSingleLineComment /#([^\\r\\n]*)/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
4396
+ var CoffeeSingleLineComment$0 = $TR($EXPECT($R28, fail, "CoffeeSingleLineComment /#([^\\r\\n]*)/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
3698
4397
  return { $loc, token: `//${$1}` };
3699
4398
  });
3700
4399
  function CoffeeSingleLineComment(state) {
@@ -3706,7 +4405,7 @@ var Civet = (() => {
3706
4405
  return CoffeeSingleLineComment$0(state);
3707
4406
  }
3708
4407
  }
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) {
4408
+ var CoffeeMultiLineComment$0 = $TS($S($EXPECT($L83, fail, 'CoffeeMultiLineComment "###"'), $TEXT($Q($S($N($C($EXPECT($L83, fail, 'CoffeeMultiLineComment "###"'), $EXPECT($L82, fail, 'CoffeeMultiLineComment "*/"'))), $EXPECT($R27, fail, "CoffeeMultiLineComment /./")))), $EXPECT($L83, fail, 'CoffeeMultiLineComment "###"')), function($skip, $loc, $0, $1, $2, $3) {
3710
4409
  return { $loc, token: `/*${$2}*/` };
3711
4410
  });
3712
4411
  function CoffeeMultiLineComment(state) {
@@ -3718,7 +4417,7 @@ var Civet = (() => {
3718
4417
  return CoffeeMultiLineComment$0(state);
3719
4418
  }
3720
4419
  }
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) {
4420
+ var InlineComment$0 = $TV($TEXT($S($EXPECT($L81, fail, 'InlineComment "/*"'), $TEXT($Q($S($N($EXPECT($L82, fail, 'InlineComment "*/"')), $EXPECT($R29, fail, "InlineComment /[^\\r\\n]/")))), $EXPECT($L82, fail, 'InlineComment "*/"'))), function($skip, $loc, $0, $1) {
3722
4421
  return { $loc, token: $1 };
3723
4422
  });
3724
4423
  function InlineComment(state) {
@@ -3760,7 +4459,7 @@ var Civet = (() => {
3760
4459
  return _$0(state);
3761
4460
  }
3762
4461
  }
3763
- var NonNewlineWhitespace$0 = $TR($EXPECT($R29, fail, "NonNewlineWhitespace /[ \\t]+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
4462
+ var NonNewlineWhitespace$0 = $TR($EXPECT($R30, fail, "NonNewlineWhitespace /[ \\t]+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
3764
4463
  return { $loc, token: $0 };
3765
4464
  });
3766
4465
  function NonNewlineWhitespace(state) {
@@ -3782,7 +4481,7 @@ var Civet = (() => {
3782
4481
  return __$0(state);
3783
4482
  }
3784
4483
  }
3785
- var Whitespace$0 = $TR($EXPECT($R30, fail, "Whitespace /[\\s]+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
4484
+ var Whitespace$0 = $TR($EXPECT($R31, fail, "Whitespace /[\\s]+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
3786
4485
  return { $loc, token: $0 };
3787
4486
  });
3788
4487
  function Whitespace(state) {
@@ -3794,6 +4493,20 @@ var Civet = (() => {
3794
4493
  return Whitespace$0(state);
3795
4494
  }
3796
4495
  }
4496
+ var ExpressionDelimiter$0 = $TS($S($Q(TrailingComment), Semicolon, $Q(TrailingComment)), function($skip, $loc, $0, $1, $2, $3) {
4497
+ $2.token = ",";
4498
+ return $0;
4499
+ });
4500
+ var ExpressionDelimiter$1 = $TV($Y(EOS), function($skip, $loc, $0, $1) {
4501
+ return { $loc, token: "," };
4502
+ });
4503
+ function ExpressionDelimiter(state) {
4504
+ if (state.tokenize) {
4505
+ return $TOKEN("ExpressionDelimiter", state, ExpressionDelimiter$0(state) || ExpressionDelimiter$1(state));
4506
+ } else {
4507
+ return ExpressionDelimiter$0(state) || ExpressionDelimiter$1(state);
4508
+ }
4509
+ }
3797
4510
  var StatementDelimiter$0 = $S($Q(TrailingComment), Semicolon, $Q(TrailingComment));
3798
4511
  var StatementDelimiter$1 = $Y(EOS);
3799
4512
  function StatementDelimiter(state) {
@@ -3803,7 +4516,7 @@ var Civet = (() => {
3803
4516
  return StatementDelimiter$0(state) || StatementDelimiter$1(state);
3804
4517
  }
3805
4518
  }
3806
- var NonIdContinue$0 = $R$0($EXPECT($R31, fail, "NonIdContinue /(?!\\p{ID_Continue})/"));
4519
+ var NonIdContinue$0 = $R$0($EXPECT($R32, fail, "NonIdContinue /(?!\\p{ID_Continue})/"));
3807
4520
  function NonIdContinue(state) {
3808
4521
  if (state.verbose)
3809
4522
  console.log("ENTER:", "NonIdContinue");
@@ -3825,7 +4538,7 @@ var Civet = (() => {
3825
4538
  return Loc$0(state);
3826
4539
  }
3827
4540
  }
3828
- var As$0 = $TS($S($EXPECT($L82, fail, 'As "as"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4541
+ var As$0 = $TS($S($EXPECT($L84, fail, 'As "as"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3829
4542
  return { $loc, token: $1 };
3830
4543
  });
3831
4544
  function As(state) {
@@ -3837,7 +4550,7 @@ var Civet = (() => {
3837
4550
  return As$0(state);
3838
4551
  }
3839
4552
  }
3840
- var Async$0 = $TV($EXPECT($L83, fail, 'Async "async"'), function($skip, $loc, $0, $1) {
4553
+ var Async$0 = $TV($EXPECT($L85, fail, 'Async "async"'), function($skip, $loc, $0, $1) {
3841
4554
  return { $loc, token: $1 };
3842
4555
  });
3843
4556
  function Async(state) {
@@ -3849,7 +4562,7 @@ var Civet = (() => {
3849
4562
  return Async$0(state);
3850
4563
  }
3851
4564
  }
3852
- var Await$0 = $TS($S($EXPECT($L84, fail, 'Await "await"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4565
+ var Await$0 = $TS($S($EXPECT($L86, fail, 'Await "await"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3853
4566
  return { $loc, token: $1 };
3854
4567
  });
3855
4568
  function Await(state) {
@@ -3861,7 +4574,7 @@ var Civet = (() => {
3861
4574
  return Await$0(state);
3862
4575
  }
3863
4576
  }
3864
- var Backtick$0 = $TV($EXPECT($L85, fail, 'Backtick "`"'), function($skip, $loc, $0, $1) {
4577
+ var Backtick$0 = $TV($EXPECT($L87, fail, 'Backtick "`"'), function($skip, $loc, $0, $1) {
3865
4578
  return { $loc, token: $1 };
3866
4579
  });
3867
4580
  function Backtick(state) {
@@ -3873,7 +4586,7 @@ var Civet = (() => {
3873
4586
  return Backtick$0(state);
3874
4587
  }
3875
4588
  }
3876
- var Case$0 = $TS($S($EXPECT($L86, fail, 'Case "case"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4589
+ var Case$0 = $TS($S($EXPECT($L88, fail, 'Case "case"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3877
4590
  return { $loc, token: $1 };
3878
4591
  });
3879
4592
  function Case(state) {
@@ -3885,7 +4598,7 @@ var Civet = (() => {
3885
4598
  return Case$0(state);
3886
4599
  }
3887
4600
  }
3888
- var Catch$0 = $TV($EXPECT($L87, fail, 'Catch "catch"'), function($skip, $loc, $0, $1) {
4601
+ var Catch$0 = $TV($EXPECT($L89, fail, 'Catch "catch"'), function($skip, $loc, $0, $1) {
3889
4602
  return { $loc, token: $1 };
3890
4603
  });
3891
4604
  function Catch(state) {
@@ -3897,7 +4610,7 @@ var Civet = (() => {
3897
4610
  return Catch$0(state);
3898
4611
  }
3899
4612
  }
3900
- var Class$0 = $TV($EXPECT($L88, fail, 'Class "class"'), function($skip, $loc, $0, $1) {
4613
+ var Class$0 = $TV($EXPECT($L90, fail, 'Class "class"'), function($skip, $loc, $0, $1) {
3901
4614
  return { $loc, token: $1 };
3902
4615
  });
3903
4616
  function Class(state) {
@@ -3909,7 +4622,7 @@ var Civet = (() => {
3909
4622
  return Class$0(state);
3910
4623
  }
3911
4624
  }
3912
- var CloseBrace$0 = $TV($EXPECT($L26, fail, 'CloseBrace "}"'), function($skip, $loc, $0, $1) {
4625
+ var CloseBrace$0 = $TV($EXPECT($L27, fail, 'CloseBrace "}"'), function($skip, $loc, $0, $1) {
3913
4626
  return { $loc, token: $1 };
3914
4627
  });
3915
4628
  function CloseBrace(state) {
@@ -3921,7 +4634,7 @@ var Civet = (() => {
3921
4634
  return CloseBrace$0(state);
3922
4635
  }
3923
4636
  }
3924
- var CloseBracket$0 = $TV($EXPECT($L25, fail, 'CloseBracket "]"'), function($skip, $loc, $0, $1) {
4637
+ var CloseBracket$0 = $TV($EXPECT($L26, fail, 'CloseBracket "]"'), function($skip, $loc, $0, $1) {
3925
4638
  return { $loc, token: $1 };
3926
4639
  });
3927
4640
  function CloseBracket(state) {
@@ -3933,7 +4646,7 @@ var Civet = (() => {
3933
4646
  return CloseBracket$0(state);
3934
4647
  }
3935
4648
  }
3936
- var CloseParen$0 = $TV($EXPECT($L15, fail, 'CloseParen ")"'), function($skip, $loc, $0, $1) {
4649
+ var CloseParen$0 = $TV($EXPECT($L16, fail, 'CloseParen ")"'), function($skip, $loc, $0, $1) {
3937
4650
  return { $loc, token: $1 };
3938
4651
  });
3939
4652
  function CloseParen(state) {
@@ -3945,7 +4658,7 @@ var Civet = (() => {
3945
4658
  return CloseParen$0(state);
3946
4659
  }
3947
4660
  }
3948
- var CoffeeSubstitutionStart$0 = $TV($EXPECT($L89, fail, 'CoffeeSubstitutionStart "#{"'), function($skip, $loc, $0, $1) {
4661
+ var CoffeeSubstitutionStart$0 = $TV($EXPECT($L91, fail, 'CoffeeSubstitutionStart "#{"'), function($skip, $loc, $0, $1) {
3949
4662
  return { $loc, token: "${" };
3950
4663
  });
3951
4664
  function CoffeeSubstitutionStart(state) {
@@ -3957,7 +4670,7 @@ var Civet = (() => {
3957
4670
  return CoffeeSubstitutionStart$0(state);
3958
4671
  }
3959
4672
  }
3960
- var Colon$0 = $TV($EXPECT($L90, fail, 'Colon ":"'), function($skip, $loc, $0, $1) {
4673
+ var Colon$0 = $TV($EXPECT($L92, fail, 'Colon ":"'), function($skip, $loc, $0, $1) {
3961
4674
  return { $loc, token: $1 };
3962
4675
  });
3963
4676
  function Colon(state) {
@@ -3981,7 +4694,7 @@ var Civet = (() => {
3981
4694
  return ConstructorShorthand$0(state);
3982
4695
  }
3983
4696
  }
3984
- var Default$0 = $TS($S($EXPECT($L77, fail, 'Default "default"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4697
+ var Default$0 = $TS($S($EXPECT($L79, fail, 'Default "default"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3985
4698
  return { $loc, token: $1 };
3986
4699
  });
3987
4700
  function Default(state) {
@@ -3993,7 +4706,7 @@ var Civet = (() => {
3993
4706
  return Default$0(state);
3994
4707
  }
3995
4708
  }
3996
- var Delete$0 = $TS($S($EXPECT($L91, fail, 'Delete "delete"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4709
+ var Delete$0 = $TS($S($EXPECT($L93, fail, 'Delete "delete"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3997
4710
  return { $loc, token: $1 };
3998
4711
  });
3999
4712
  function Delete(state) {
@@ -4005,7 +4718,7 @@ var Civet = (() => {
4005
4718
  return Delete$0(state);
4006
4719
  }
4007
4720
  }
4008
- var Do$0 = $TS($S($EXPECT($L92, fail, 'Do "do"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4721
+ var Do$0 = $TS($S($EXPECT($L94, fail, 'Do "do"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4009
4722
  return { $loc, token: $1 };
4010
4723
  });
4011
4724
  function Do(state) {
@@ -4017,7 +4730,7 @@ var Civet = (() => {
4017
4730
  return Do$0(state);
4018
4731
  }
4019
4732
  }
4020
- var Dot$0 = $TV($EXPECT($L93, fail, 'Dot "."'), function($skip, $loc, $0, $1) {
4733
+ var Dot$0 = $TV($EXPECT($L9, fail, 'Dot "."'), function($skip, $loc, $0, $1) {
4021
4734
  return { $loc, token: $1 };
4022
4735
  });
4023
4736
  function Dot(state) {
@@ -4029,7 +4742,7 @@ var Civet = (() => {
4029
4742
  return Dot$0(state);
4030
4743
  }
4031
4744
  }
4032
- var DotDot$0 = $TV($EXPECT($L94, fail, 'DotDot ".."'), function($skip, $loc, $0, $1) {
4745
+ var DotDot$0 = $TV($EXPECT($L95, fail, 'DotDot ".."'), function($skip, $loc, $0, $1) {
4033
4746
  return { $loc, token: $1 };
4034
4747
  });
4035
4748
  function DotDot(state) {
@@ -4041,7 +4754,7 @@ var Civet = (() => {
4041
4754
  return DotDot$0(state);
4042
4755
  }
4043
4756
  }
4044
- var DotDotDot$0 = $TV($EXPECT($L95, fail, 'DotDotDot "..."'), function($skip, $loc, $0, $1) {
4757
+ var DotDotDot$0 = $TV($EXPECT($L96, fail, 'DotDotDot "..."'), function($skip, $loc, $0, $1) {
4045
4758
  return { $loc, token: $1 };
4046
4759
  });
4047
4760
  function DotDotDot(state) {
@@ -4053,7 +4766,7 @@ var Civet = (() => {
4053
4766
  return DotDotDot$0(state);
4054
4767
  }
4055
4768
  }
4056
- var DoubleQuote$0 = $TV($EXPECT($L96, fail, 'DoubleQuote "\\\\\\""'), function($skip, $loc, $0, $1) {
4769
+ var DoubleQuote$0 = $TV($EXPECT($L97, fail, 'DoubleQuote "\\\\\\""'), function($skip, $loc, $0, $1) {
4057
4770
  return { $loc, token: $1 };
4058
4771
  });
4059
4772
  function DoubleQuote(state) {
@@ -4065,7 +4778,7 @@ var Civet = (() => {
4065
4778
  return DoubleQuote$0(state);
4066
4779
  }
4067
4780
  }
4068
- var Else$0 = $TV($EXPECT($L97, fail, 'Else "else"'), function($skip, $loc, $0, $1) {
4781
+ var Else$0 = $TV($EXPECT($L98, fail, 'Else "else"'), function($skip, $loc, $0, $1) {
4069
4782
  return { $loc, token: $1 };
4070
4783
  });
4071
4784
  function Else(state) {
@@ -4077,7 +4790,7 @@ var Civet = (() => {
4077
4790
  return Else$0(state);
4078
4791
  }
4079
4792
  }
4080
- var Equals$0 = $TV($EXPECT($L43, fail, 'Equals "="'), function($skip, $loc, $0, $1) {
4793
+ var Equals$0 = $TV($EXPECT($L44, fail, 'Equals "="'), function($skip, $loc, $0, $1) {
4081
4794
  return { $loc, token: $1 };
4082
4795
  });
4083
4796
  function Equals(state) {
@@ -4089,7 +4802,7 @@ var Civet = (() => {
4089
4802
  return Equals$0(state);
4090
4803
  }
4091
4804
  }
4092
- var Export$0 = $TS($S($EXPECT($L98, fail, 'Export "export"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4805
+ var Export$0 = $TS($S($EXPECT($L99, fail, 'Export "export"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4093
4806
  return { $loc, token: $1 };
4094
4807
  });
4095
4808
  function Export(state) {
@@ -4101,7 +4814,7 @@ var Civet = (() => {
4101
4814
  return Export$0(state);
4102
4815
  }
4103
4816
  }
4104
- var For$0 = $TS($S($EXPECT($L99, fail, 'For "for"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4817
+ var For$0 = $TS($S($EXPECT($L100, fail, 'For "for"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4105
4818
  return { $loc, token: $1 };
4106
4819
  });
4107
4820
  function For(state) {
@@ -4113,7 +4826,7 @@ var Civet = (() => {
4113
4826
  return For$0(state);
4114
4827
  }
4115
4828
  }
4116
- var From$0 = $TS($S($EXPECT($L100, fail, 'From "from"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4829
+ var From$0 = $TS($S($EXPECT($L101, fail, 'From "from"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4117
4830
  return { $loc, token: $1 };
4118
4831
  });
4119
4832
  function From(state) {
@@ -4125,7 +4838,7 @@ var Civet = (() => {
4125
4838
  return From$0(state);
4126
4839
  }
4127
4840
  }
4128
- var Function$0 = $TV($EXPECT($L101, fail, 'Function "function"'), function($skip, $loc, $0, $1) {
4841
+ var Function$0 = $TV($EXPECT($L102, fail, 'Function "function"'), function($skip, $loc, $0, $1) {
4129
4842
  return { $loc, token: $1 };
4130
4843
  });
4131
4844
  function Function(state) {
@@ -4137,7 +4850,7 @@ var Civet = (() => {
4137
4850
  return Function$0(state);
4138
4851
  }
4139
4852
  }
4140
- var GetOrSet$0 = $TS($S($C($EXPECT($L102, fail, 'GetOrSet "get"'), $EXPECT($L103, fail, 'GetOrSet "set"')), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4853
+ var GetOrSet$0 = $TS($S($C($EXPECT($L103, fail, 'GetOrSet "get"'), $EXPECT($L104, fail, 'GetOrSet "set"')), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4141
4854
  return { $loc, token: $1 };
4142
4855
  });
4143
4856
  function GetOrSet(state) {
@@ -4149,7 +4862,7 @@ var Civet = (() => {
4149
4862
  return GetOrSet$0(state);
4150
4863
  }
4151
4864
  }
4152
- var If$0 = $TV($EXPECT($L104, fail, 'If "if"'), function($skip, $loc, $0, $1) {
4865
+ var If$0 = $TV($TEXT($S($EXPECT($L105, fail, 'If "if"'), $E($EXPECT($L106, fail, 'If " "')))), function($skip, $loc, $0, $1) {
4153
4866
  return { $loc, token: $1 };
4154
4867
  });
4155
4868
  function If(state) {
@@ -4161,7 +4874,7 @@ var Civet = (() => {
4161
4874
  return If$0(state);
4162
4875
  }
4163
4876
  }
4164
- var Import$0 = $TS($S($EXPECT($L10, fail, 'Import "import"'), $Y($EXPECT($R32, fail, "Import /\\s/"))), function($skip, $loc, $0, $1, $2) {
4877
+ var Import$0 = $TS($S($EXPECT($L11, fail, 'Import "import"'), $Y($EXPECT($R33, fail, "Import /\\s/"))), function($skip, $loc, $0, $1, $2) {
4165
4878
  return { $loc, token: $1 };
4166
4879
  });
4167
4880
  function Import(state) {
@@ -4173,7 +4886,7 @@ var Civet = (() => {
4173
4886
  return Import$0(state);
4174
4887
  }
4175
4888
  }
4176
- var In$0 = $TV($EXPECT($L67, fail, 'In "in"'), function($skip, $loc, $0, $1) {
4889
+ var In$0 = $TV($EXPECT($L69, fail, 'In "in"'), function($skip, $loc, $0, $1) {
4177
4890
  return { $loc, token: $1 };
4178
4891
  });
4179
4892
  function In(state) {
@@ -4185,7 +4898,7 @@ var Civet = (() => {
4185
4898
  return In$0(state);
4186
4899
  }
4187
4900
  }
4188
- var LetOrConst$0 = $TV($C($EXPECT($L105, fail, 'LetOrConst "let"'), $EXPECT($L106, fail, 'LetOrConst "const"')), function($skip, $loc, $0, $1) {
4901
+ var LetOrConst$0 = $TV($C($EXPECT($L107, fail, 'LetOrConst "let"'), $EXPECT($L108, fail, 'LetOrConst "const"')), function($skip, $loc, $0, $1) {
4189
4902
  return { $loc, token: $1 };
4190
4903
  });
4191
4904
  function LetOrConst(state) {
@@ -4197,7 +4910,7 @@ var Civet = (() => {
4197
4910
  return LetOrConst$0(state);
4198
4911
  }
4199
4912
  }
4200
- var Loop$0 = $TS($S($EXPECT($L107, fail, 'Loop "loop"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4913
+ var Loop$0 = $TS($S($EXPECT($L109, fail, 'Loop "loop"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4201
4914
  return { $loc, token: "while(true)" };
4202
4915
  });
4203
4916
  function Loop(state) {
@@ -4209,7 +4922,7 @@ var Civet = (() => {
4209
4922
  return Loop$0(state);
4210
4923
  }
4211
4924
  }
4212
- var New$0 = $TV($EXPECT($L108, fail, 'New "new"'), function($skip, $loc, $0, $1) {
4925
+ var New$0 = $TV($EXPECT($L110, fail, 'New "new"'), function($skip, $loc, $0, $1) {
4213
4926
  return { $loc, token: $1 };
4214
4927
  });
4215
4928
  function New(state) {
@@ -4221,7 +4934,19 @@ var Civet = (() => {
4221
4934
  return New$0(state);
4222
4935
  }
4223
4936
  }
4224
- var Of$0 = $TV($EXPECT($L109, fail, 'Of "of"'), function($skip, $loc, $0, $1) {
4937
+ var Not$0 = $TS($S(CoffeeNotEnabled, $EXPECT($L111, fail, 'Not "not"'), NonIdContinue, $E($EXPECT($L106, fail, 'Not " "'))), function($skip, $loc, $0, $1, $2, $3, $4) {
4938
+ return { $loc, token: "!" };
4939
+ });
4940
+ function Not(state) {
4941
+ if (state.verbose)
4942
+ console.log("ENTER:", "Not");
4943
+ if (state.tokenize) {
4944
+ return $TOKEN("Not", state, Not$0(state));
4945
+ } else {
4946
+ return Not$0(state);
4947
+ }
4948
+ }
4949
+ var Of$0 = $TV($EXPECT($L112, fail, 'Of "of"'), function($skip, $loc, $0, $1) {
4225
4950
  return { $loc, token: $1 };
4226
4951
  });
4227
4952
  function Of(state) {
@@ -4233,7 +4958,7 @@ var Civet = (() => {
4233
4958
  return Of$0(state);
4234
4959
  }
4235
4960
  }
4236
- var OpenBrace$0 = $TV($EXPECT($L110, fail, 'OpenBrace "{"'), function($skip, $loc, $0, $1) {
4961
+ var OpenBrace$0 = $TV($EXPECT($L113, fail, 'OpenBrace "{"'), function($skip, $loc, $0, $1) {
4237
4962
  return { $loc, token: $1 };
4238
4963
  });
4239
4964
  function OpenBrace(state) {
@@ -4245,7 +4970,7 @@ var Civet = (() => {
4245
4970
  return OpenBrace$0(state);
4246
4971
  }
4247
4972
  }
4248
- var OpenBracket$0 = $TV($EXPECT($L111, fail, 'OpenBracket "["'), function($skip, $loc, $0, $1) {
4973
+ var OpenBracket$0 = $TV($EXPECT($L114, fail, 'OpenBracket "["'), function($skip, $loc, $0, $1) {
4249
4974
  return { $loc, token: $1 };
4250
4975
  });
4251
4976
  function OpenBracket(state) {
@@ -4257,7 +4982,7 @@ var Civet = (() => {
4257
4982
  return OpenBracket$0(state);
4258
4983
  }
4259
4984
  }
4260
- var OpenParen$0 = $TV($EXPECT($L112, fail, 'OpenParen "("'), function($skip, $loc, $0, $1) {
4985
+ var OpenParen$0 = $TV($EXPECT($L115, fail, 'OpenParen "("'), function($skip, $loc, $0, $1) {
4261
4986
  return { $loc, token: $1 };
4262
4987
  });
4263
4988
  function OpenParen(state) {
@@ -4269,7 +4994,7 @@ var Civet = (() => {
4269
4994
  return OpenParen$0(state);
4270
4995
  }
4271
4996
  }
4272
- var QuestionMark$0 = $TV($EXPECT($L113, fail, 'QuestionMark "?"'), function($skip, $loc, $0, $1) {
4997
+ var QuestionMark$0 = $TV($EXPECT($L116, fail, 'QuestionMark "?"'), function($skip, $loc, $0, $1) {
4273
4998
  return { $loc, token: $1 };
4274
4999
  });
4275
5000
  function QuestionMark(state) {
@@ -4281,7 +5006,7 @@ var Civet = (() => {
4281
5006
  return QuestionMark$0(state);
4282
5007
  }
4283
5008
  }
4284
- var Return$0 = $TS($S($EXPECT($L114, fail, 'Return "return"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5009
+ var Return$0 = $TS($S($EXPECT($L117, fail, 'Return "return"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4285
5010
  return { $loc, token: $1 };
4286
5011
  });
4287
5012
  function Return(state) {
@@ -4293,7 +5018,7 @@ var Civet = (() => {
4293
5018
  return Return$0(state);
4294
5019
  }
4295
5020
  }
4296
- var Semicolon$0 = $TV($EXPECT($L71, fail, 'Semicolon ";"'), function($skip, $loc, $0, $1) {
5021
+ var Semicolon$0 = $TV($EXPECT($L73, fail, 'Semicolon ";"'), function($skip, $loc, $0, $1) {
4297
5022
  return { $loc, token: $1 };
4298
5023
  });
4299
5024
  function Semicolon(state) {
@@ -4305,7 +5030,7 @@ var Civet = (() => {
4305
5030
  return Semicolon$0(state);
4306
5031
  }
4307
5032
  }
4308
- var SingleQuote$0 = $TV($EXPECT($L115, fail, `SingleQuote "'"`), function($skip, $loc, $0, $1) {
5033
+ var SingleQuote$0 = $TV($EXPECT($L118, fail, `SingleQuote "'"`), function($skip, $loc, $0, $1) {
4309
5034
  return { $loc, token: $1 };
4310
5035
  });
4311
5036
  function SingleQuote(state) {
@@ -4317,7 +5042,7 @@ var Civet = (() => {
4317
5042
  return SingleQuote$0(state);
4318
5043
  }
4319
5044
  }
4320
- var Star$0 = $TV($EXPECT($L45, fail, 'Star "*"'), function($skip, $loc, $0, $1) {
5045
+ var Star$0 = $TV($EXPECT($L46, fail, 'Star "*"'), function($skip, $loc, $0, $1) {
4321
5046
  return { $loc, token: $1 };
4322
5047
  });
4323
5048
  function Star(state) {
@@ -4329,10 +5054,10 @@ var Civet = (() => {
4329
5054
  return Star$0(state);
4330
5055
  }
4331
5056
  }
4332
- var Static$0 = $TV($EXPECT($L116, fail, 'Static "static"'), function($skip, $loc, $0, $1) {
5057
+ var Static$0 = $TV($EXPECT($L119, fail, 'Static "static"'), function($skip, $loc, $0, $1) {
4333
5058
  return { $loc, token: $1 };
4334
5059
  });
4335
- var Static$1 = $TS($S($EXPECT($L8, fail, 'Static "@"'), $N($EXPECT($L112, fail, 'Static "("'))), function($skip, $loc, $0, $1, $2) {
5060
+ var Static$1 = $TS($S($EXPECT($L8, fail, 'Static "@"'), $N($EXPECT($L115, fail, 'Static "("'))), function($skip, $loc, $0, $1, $2) {
4336
5061
  return { $loc, token: "static " };
4337
5062
  });
4338
5063
  function Static(state) {
@@ -4342,7 +5067,7 @@ var Civet = (() => {
4342
5067
  return Static$0(state) || Static$1(state);
4343
5068
  }
4344
5069
  }
4345
- var SubstitutionStart$0 = $TV($EXPECT($L117, fail, 'SubstitutionStart "${"'), function($skip, $loc, $0, $1) {
5070
+ var SubstitutionStart$0 = $TV($EXPECT($L120, fail, 'SubstitutionStart "${"'), function($skip, $loc, $0, $1) {
4346
5071
  return { $loc, token: $1 };
4347
5072
  });
4348
5073
  function SubstitutionStart(state) {
@@ -4354,7 +5079,7 @@ var Civet = (() => {
4354
5079
  return SubstitutionStart$0(state);
4355
5080
  }
4356
5081
  }
4357
- var Switch$0 = $TS($S($EXPECT($L118, fail, 'Switch "switch"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5082
+ var Switch$0 = $TS($S($EXPECT($L121, fail, 'Switch "switch"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4358
5083
  return { $loc, token: $1 };
4359
5084
  });
4360
5085
  function Switch(state) {
@@ -4366,7 +5091,7 @@ var Civet = (() => {
4366
5091
  return Switch$0(state);
4367
5092
  }
4368
5093
  }
4369
- var Target$0 = $TV($EXPECT($L119, fail, 'Target "target"'), function($skip, $loc, $0, $1) {
5094
+ var Target$0 = $TV($EXPECT($L122, fail, 'Target "target"'), function($skip, $loc, $0, $1) {
4370
5095
  return { $loc, token: $1 };
4371
5096
  });
4372
5097
  function Target(state) {
@@ -4378,7 +5103,19 @@ var Civet = (() => {
4378
5103
  return Target$0(state);
4379
5104
  }
4380
5105
  }
4381
- var Throw$0 = $TS($S($EXPECT($L120, fail, 'Throw "throw"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5106
+ var Then$0 = $TS($S(__, $EXPECT($L123, fail, 'Then "then"'), NonIdContinue), function($skip, $loc, $0, $1, $2, $3) {
5107
+ return { $loc, token: "" };
5108
+ });
5109
+ function Then(state) {
5110
+ if (state.verbose)
5111
+ console.log("ENTER:", "Then");
5112
+ if (state.tokenize) {
5113
+ return $TOKEN("Then", state, Then$0(state));
5114
+ } else {
5115
+ return Then$0(state);
5116
+ }
5117
+ }
5118
+ var Throw$0 = $TS($S($EXPECT($L124, fail, 'Throw "throw"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4382
5119
  return { $loc, token: $1 };
4383
5120
  });
4384
5121
  function Throw(state) {
@@ -4390,7 +5127,7 @@ var Civet = (() => {
4390
5127
  return Throw$0(state);
4391
5128
  }
4392
5129
  }
4393
- var TripleDoubleQuote$0 = $TV($EXPECT($L121, fail, 'TripleDoubleQuote "\\\\\\"\\\\\\"\\\\\\""'), function($skip, $loc, $0, $1) {
5130
+ var TripleDoubleQuote$0 = $TV($EXPECT($L125, fail, 'TripleDoubleQuote "\\\\\\"\\\\\\"\\\\\\""'), function($skip, $loc, $0, $1) {
4394
5131
  return { $loc, token: "`" };
4395
5132
  });
4396
5133
  function TripleDoubleQuote(state) {
@@ -4402,7 +5139,7 @@ var Civet = (() => {
4402
5139
  return TripleDoubleQuote$0(state);
4403
5140
  }
4404
5141
  }
4405
- var TripleSingleQuote$0 = $TV($EXPECT($L122, fail, `TripleSingleQuote "'''"`), function($skip, $loc, $0, $1) {
5142
+ var TripleSingleQuote$0 = $TV($EXPECT($L126, fail, `TripleSingleQuote "'''"`), function($skip, $loc, $0, $1) {
4406
5143
  return { $loc, token: "`" };
4407
5144
  });
4408
5145
  function TripleSingleQuote(state) {
@@ -4414,7 +5151,7 @@ var Civet = (() => {
4414
5151
  return TripleSingleQuote$0(state);
4415
5152
  }
4416
5153
  }
4417
- var TripleTick$0 = $TV($EXPECT($L123, fail, 'TripleTick "```"'), function($skip, $loc, $0, $1) {
5154
+ var TripleTick$0 = $TV($EXPECT($L127, fail, 'TripleTick "```"'), function($skip, $loc, $0, $1) {
4418
5155
  return { $loc, token: "`" };
4419
5156
  });
4420
5157
  function TripleTick(state) {
@@ -4426,7 +5163,7 @@ var Civet = (() => {
4426
5163
  return TripleTick$0(state);
4427
5164
  }
4428
5165
  }
4429
- var Try$0 = $TV($EXPECT($L124, fail, 'Try "try"'), function($skip, $loc, $0, $1) {
5166
+ var Try$0 = $TV($EXPECT($L128, fail, 'Try "try"'), function($skip, $loc, $0, $1) {
4430
5167
  return { $loc, token: $1 };
4431
5168
  });
4432
5169
  function Try(state) {
@@ -4438,7 +5175,7 @@ var Civet = (() => {
4438
5175
  return Try$0(state);
4439
5176
  }
4440
5177
  }
4441
- var Typeof$0 = $TS($S($EXPECT($L125, fail, 'Typeof "typeof"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5178
+ var Typeof$0 = $TS($S($EXPECT($L129, fail, 'Typeof "typeof"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4442
5179
  return { $loc, token: $1 };
4443
5180
  });
4444
5181
  function Typeof(state) {
@@ -4450,7 +5187,7 @@ var Civet = (() => {
4450
5187
  return Typeof$0(state);
4451
5188
  }
4452
5189
  }
4453
- var Unless$0 = $TV($EXPECT($L126, fail, 'Unless "unless"'), function($skip, $loc, $0, $1) {
5190
+ var Unless$0 = $TV($EXPECT($L130, fail, 'Unless "unless"'), function($skip, $loc, $0, $1) {
4454
5191
  return { $loc, token: $1 };
4455
5192
  });
4456
5193
  function Unless(state) {
@@ -4462,7 +5199,7 @@ var Civet = (() => {
4462
5199
  return Unless$0(state);
4463
5200
  }
4464
5201
  }
4465
- var Until$0 = $TS($S($EXPECT($L127, fail, 'Until "until"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5202
+ var Until$0 = $TS($S($EXPECT($L131, fail, 'Until "until"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4466
5203
  return { $loc, token: $1 };
4467
5204
  });
4468
5205
  function Until(state) {
@@ -4474,7 +5211,7 @@ var Civet = (() => {
4474
5211
  return Until$0(state);
4475
5212
  }
4476
5213
  }
4477
- var Var$0 = $TV($EXPECT($L128, fail, 'Var "var"'), function($skip, $loc, $0, $1) {
5214
+ var Var$0 = $TV($EXPECT($L132, fail, 'Var "var"'), function($skip, $loc, $0, $1) {
4478
5215
  return { $loc, token: $1 };
4479
5216
  });
4480
5217
  function Var(state) {
@@ -4486,7 +5223,7 @@ var Civet = (() => {
4486
5223
  return Var$0(state);
4487
5224
  }
4488
5225
  }
4489
- var Void$0 = $TS($S($EXPECT($L129, fail, 'Void "void"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5226
+ var Void$0 = $TS($S($EXPECT($L133, fail, 'Void "void"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4490
5227
  return { $loc, token: $1 };
4491
5228
  });
4492
5229
  function Void(state) {
@@ -4498,7 +5235,7 @@ var Civet = (() => {
4498
5235
  return Void$0(state);
4499
5236
  }
4500
5237
  }
4501
- var When$0 = $TS($S($EXPECT($L130, fail, 'When "when"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5238
+ var When$0 = $TS($S($EXPECT($L134, fail, 'When "when"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4502
5239
  return { $loc, token: "case" };
4503
5240
  });
4504
5241
  function When(state) {
@@ -4510,7 +5247,7 @@ var Civet = (() => {
4510
5247
  return When$0(state);
4511
5248
  }
4512
5249
  }
4513
- var While$0 = $TS($S($EXPECT($L131, fail, 'While "while"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5250
+ var While$0 = $TS($S($EXPECT($L135, fail, 'While "while"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4514
5251
  return { $loc, token: $1 };
4515
5252
  });
4516
5253
  function While(state) {
@@ -4522,7 +5259,7 @@ var Civet = (() => {
4522
5259
  return While$0(state);
4523
5260
  }
4524
5261
  }
4525
- var Yield$0 = $TS($S($EXPECT($L132, fail, 'Yield "yield"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5262
+ var Yield$0 = $TS($S($EXPECT($L136, fail, 'Yield "yield"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4526
5263
  return { $loc, token: $1 };
4527
5264
  });
4528
5265
  function Yield(state) {
@@ -4548,7 +5285,7 @@ var Civet = (() => {
4548
5285
  return JSXElement$0(state) || JSXElement$1(state);
4549
5286
  }
4550
5287
  }
4551
- var JSXSelfClosingElement$0 = $S($EXPECT($L4, fail, 'JSXSelfClosingElement "<"'), $TEXT(JSXElementName), $E(JSXAttributes), __, $EXPECT($L133, fail, 'JSXSelfClosingElement "/>"'));
5288
+ var JSXSelfClosingElement$0 = $S($EXPECT($L4, fail, 'JSXSelfClosingElement "<"'), $TEXT(JSXElementName), $E(JSXAttributes), __, $EXPECT($L137, fail, 'JSXSelfClosingElement "/>"'));
4552
5289
  function JSXSelfClosingElement(state) {
4553
5290
  if (state.verbose)
4554
5291
  console.log("ENTER:", "JSXSelfClosingElement");
@@ -4558,7 +5295,7 @@ var Civet = (() => {
4558
5295
  return JSXSelfClosingElement$0(state);
4559
5296
  }
4560
5297
  }
4561
- var JSXOpeningElement$0 = $S($EXPECT($L4, fail, 'JSXOpeningElement "<"'), $TEXT(JSXElementName), $E(JSXAttributes), __, $EXPECT($L55, fail, 'JSXOpeningElement ">"'));
5298
+ var JSXOpeningElement$0 = $S($EXPECT($L4, fail, 'JSXOpeningElement "<"'), $TEXT(JSXElementName), $E(JSXAttributes), __, $EXPECT($L56, fail, 'JSXOpeningElement ">"'));
4562
5299
  function JSXOpeningElement(state) {
4563
5300
  if (state.verbose)
4564
5301
  console.log("ENTER:", "JSXOpeningElement");
@@ -4568,7 +5305,7 @@ var Civet = (() => {
4568
5305
  return JSXOpeningElement$0(state);
4569
5306
  }
4570
5307
  }
4571
- var JSXClosingElement$0 = $S($EXPECT($L134, fail, 'JSXClosingElement "</"'), __, $TEXT(JSXElementName), __, $EXPECT($L55, fail, 'JSXClosingElement ">"'));
5308
+ var JSXClosingElement$0 = $S($EXPECT($L138, fail, 'JSXClosingElement "</"'), __, $TEXT(JSXElementName), __, $EXPECT($L56, fail, 'JSXClosingElement ">"'));
4572
5309
  function JSXClosingElement(state) {
4573
5310
  if (state.verbose)
4574
5311
  console.log("ENTER:", "JSXClosingElement");
@@ -4578,7 +5315,7 @@ var Civet = (() => {
4578
5315
  return JSXClosingElement$0(state);
4579
5316
  }
4580
5317
  }
4581
- var JSXFragment$0 = $S($EXPECT($L135, fail, 'JSXFragment "<>"'), $E(JSXChildren), $EXPECT($L136, fail, 'JSXFragment "</>"'));
5318
+ var JSXFragment$0 = $S($EXPECT($L139, fail, 'JSXFragment "<>"'), $E(JSXChildren), $EXPECT($L140, fail, 'JSXFragment "</>"'));
4582
5319
  function JSXFragment(state) {
4583
5320
  if (state.verbose)
4584
5321
  console.log("ENTER:", "JSXFragment");
@@ -4598,7 +5335,7 @@ var Civet = (() => {
4598
5335
  return JSXElementName$0(state);
4599
5336
  }
4600
5337
  }
4601
- var JSXIdentifierName$0 = $R$0($EXPECT($R33, fail, "JSXIdentifierName /(?:\\p{ID_Start}|[_$])(?:\\p{ID_Continue}|[\\u200C\\u200D$-])*/"));
5338
+ var JSXIdentifierName$0 = $R$0($EXPECT($R34, fail, "JSXIdentifierName /(?:\\p{ID_Start}|[_$])(?:\\p{ID_Continue}|[\\u200C\\u200D$-])*/"));
4602
5339
  function JSXIdentifierName(state) {
4603
5340
  if (state.verbose)
4604
5341
  console.log("ENTER:", "JSXIdentifierName");
@@ -4618,7 +5355,7 @@ var Civet = (() => {
4618
5355
  return JSXAttributes$0(state);
4619
5356
  }
4620
5357
  }
4621
- var JSXAttribute$0 = $S(OpenBrace, __, DotDotDot, __, AssignmentExpression, __, CloseBrace);
5358
+ var JSXAttribute$0 = $S(OpenBrace, __, DotDotDot, ExtendedExpression, __, CloseBrace);
4622
5359
  var JSXAttribute$1 = $S(JSXAttributeName, $E(JSXAttributeInitializer));
4623
5360
  function JSXAttribute(state) {
4624
5361
  if (state.tokenize) {
@@ -4647,9 +5384,9 @@ var Civet = (() => {
4647
5384
  return JSXAttributeInitializer$0(state);
4648
5385
  }
4649
5386
  }
4650
- var JSXAttributeValue$0 = $R$0($EXPECT($R34, fail, 'JSXAttributeValue /"[^"]*"/'));
4651
- var JSXAttributeValue$1 = $R$0($EXPECT($R35, fail, "JSXAttributeValue /'[^']*'/"));
4652
- var JSXAttributeValue$2 = $S(OpenBrace, __, AssignmentExpression, __, CloseBrace);
5387
+ var JSXAttributeValue$0 = $R$0($EXPECT($R35, fail, 'JSXAttributeValue /"[^"]*"/'));
5388
+ var JSXAttributeValue$1 = $R$0($EXPECT($R36, fail, "JSXAttributeValue /'[^']*'/"));
5389
+ var JSXAttributeValue$2 = $S(OpenBrace, ExtendedExpression, __, CloseBrace);
4653
5390
  var JSXAttributeValue$3 = JSXElement;
4654
5391
  var JSXAttributeValue$4 = JSXFragment;
4655
5392
  function JSXAttributeValue(state) {
@@ -4680,7 +5417,7 @@ var Civet = (() => {
4680
5417
  return JSXChild$0(state) || JSXChild$1(state) || JSXChild$2(state) || JSXChild$3(state);
4681
5418
  }
4682
5419
  }
4683
- var JSXText$0 = $R$0($EXPECT($R36, fail, "JSXText /[^{}<>]+/"));
5420
+ var JSXText$0 = $R$0($EXPECT($R37, fail, "JSXText /[^{}<>]+/"));
4684
5421
  function JSXText(state) {
4685
5422
  if (state.verbose)
4686
5423
  console.log("ENTER:", "JSXText");
@@ -4690,7 +5427,7 @@ var Civet = (() => {
4690
5427
  return JSXText$0(state);
4691
5428
  }
4692
5429
  }
4693
- var JSXChildExpression$0 = $S(__, $E($S(DotDotDot, __)), AssignmentExpression);
5430
+ var JSXChildExpression$0 = $S(__, $E($S(DotDotDot, __)), ExtendedExpression);
4694
5431
  function JSXChildExpression(state) {
4695
5432
  if (state.verbose)
4696
5433
  console.log("ENTER:", "JSXChildExpression");
@@ -4712,7 +5449,7 @@ var Civet = (() => {
4712
5449
  return TypeDeclaration$0(state);
4713
5450
  }
4714
5451
  }
4715
- var TypeDeclarationModifier$0 = $S($EXPECT($L137, fail, 'TypeDeclarationModifier "declare"'), NonIdContinue);
5452
+ var TypeDeclarationModifier$0 = $S($EXPECT($L141, fail, 'TypeDeclarationModifier "declare"'), NonIdContinue);
4716
5453
  var TypeDeclarationModifier$1 = Export;
4717
5454
  function TypeDeclarationModifier(state) {
4718
5455
  if (state.tokenize) {
@@ -4732,7 +5469,7 @@ var Civet = (() => {
4732
5469
  return TypeDeclarationRest$0(state) || TypeDeclarationRest$1(state) || TypeDeclarationRest$2(state) || TypeDeclarationRest$3(state);
4733
5470
  }
4734
5471
  }
4735
- var TypeKeyword$0 = $S($EXPECT($L138, fail, 'TypeKeyword "type"'), NonIdContinue);
5472
+ var TypeKeyword$0 = $S($EXPECT($L142, fail, 'TypeKeyword "type"'), NonIdContinue);
4736
5473
  function TypeKeyword(state) {
4737
5474
  if (state.verbose)
4738
5475
  console.log("ENTER:", "TypeKeyword");
@@ -4742,7 +5479,7 @@ var Civet = (() => {
4742
5479
  return TypeKeyword$0(state);
4743
5480
  }
4744
5481
  }
4745
- var Interface$0 = $S($EXPECT($L139, fail, 'Interface "interface"'), NonIdContinue);
5482
+ var Interface$0 = $S($EXPECT($L143, fail, 'Interface "interface"'), NonIdContinue);
4746
5483
  function Interface(state) {
4747
5484
  if (state.verbose)
4748
5485
  console.log("ENTER:", "Interface");
@@ -4752,7 +5489,7 @@ var Civet = (() => {
4752
5489
  return Interface$0(state);
4753
5490
  }
4754
5491
  }
4755
- var Namespace$0 = $S($EXPECT($L140, fail, 'Namespace "namespace"'), NonIdContinue);
5492
+ var Namespace$0 = $S($EXPECT($L144, fail, 'Namespace "namespace"'), NonIdContinue);
4756
5493
  function Namespace(state) {
4757
5494
  if (state.verbose)
4758
5495
  console.log("ENTER:", "Namespace");
@@ -4852,7 +5589,7 @@ var Civet = (() => {
4852
5589
  return NestedTypeDeclaration$0(state);
4853
5590
  }
4854
5591
  }
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)));
5592
+ var TypeIndexSignature$0 = $S($E($S($R$0($EXPECT($R38, fail, "TypeIndexSignature /[+-]?/")), $EXPECT($L145, fail, 'TypeIndexSignature "readonly"'), __)), OpenBracket, TypeIndex, CloseBracket, $E($S(__, $R$0($EXPECT($R39, fail, "TypeIndexSignature /[+-]/")), QuestionMark)));
4856
5593
  function TypeIndexSignature(state) {
4857
5594
  if (state.verbose)
4858
5595
  console.log("ENTER:", "TypeIndexSignature");
@@ -4883,7 +5620,7 @@ var Civet = (() => {
4883
5620
  return TypeSuffix$0(state);
4884
5621
  }
4885
5622
  }
4886
- var ReturnTypeSuffix$0 = $TS($S(__, Colon, $E($S(__, $EXPECT($L142, fail, 'ReturnTypeSuffix "asserts"'), NonIdContinue)), TypePredicate), function($skip, $loc, $0, $1, $2, $3, $4) {
5623
+ var ReturnTypeSuffix$0 = $TS($S(__, Colon, $E($S(__, $EXPECT($L146, fail, 'ReturnTypeSuffix "asserts"'), NonIdContinue)), TypePredicate), function($skip, $loc, $0, $1, $2, $3, $4) {
4887
5624
  if (!$3)
4888
5625
  $0.splice(2, 1);
4889
5626
  if ($1.length === 0)
@@ -4903,7 +5640,7 @@ var Civet = (() => {
4903
5640
  return ReturnTypeSuffix$0(state);
4904
5641
  }
4905
5642
  }
4906
- var TypePredicate$0 = $TS($S(Type, $E($S(__, $EXPECT($L58, fail, 'TypePredicate "is"'), NonIdContinue, Type))), function($skip, $loc, $0, $1, $2) {
5643
+ var TypePredicate$0 = $TS($S(Type, $E($S(__, $EXPECT($L60, fail, 'TypePredicate "is"'), NonIdContinue, Type))), function($skip, $loc, $0, $1, $2) {
4907
5644
  if (!$2)
4908
5645
  return $1;
4909
5646
  return $0;
@@ -4966,9 +5703,9 @@ var Civet = (() => {
4966
5703
  return TypeUnarySuffix$0(state) || TypeUnarySuffix$1(state);
4967
5704
  }
4968
5705
  }
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"');
5706
+ var TypeUnaryOp$0 = $EXPECT($L147, fail, 'TypeUnaryOp "keyof"');
5707
+ var TypeUnaryOp$1 = $EXPECT($L129, fail, 'TypeUnaryOp "typeof"');
5708
+ var TypeUnaryOp$2 = $EXPECT($L148, fail, 'TypeUnaryOp "infer"');
4972
5709
  function TypeUnaryOp(state) {
4973
5710
  if (state.tokenize) {
4974
5711
  return $TOKEN("TypeUnaryOp", state, TypeUnaryOp$0(state) || TypeUnaryOp$1(state) || TypeUnaryOp$2(state));
@@ -5058,10 +5795,10 @@ var Civet = (() => {
5058
5795
  }
5059
5796
  }
5060
5797
  var TypeLiteral$0 = Literal;
5061
- var TypeLiteral$1 = $TV($EXPECT($L129, fail, 'TypeLiteral "void"'), function($skip, $loc, $0, $1) {
5798
+ var TypeLiteral$1 = $TV($EXPECT($L133, fail, 'TypeLiteral "void"'), function($skip, $loc, $0, $1) {
5062
5799
  return { $loc, token: "void" };
5063
5800
  });
5064
- var TypeLiteral$2 = $TV($EXPECT($L145, fail, 'TypeLiteral "[]"'), function($skip, $loc, $0, $1) {
5801
+ var TypeLiteral$2 = $TV($EXPECT($L149, fail, 'TypeLiteral "[]"'), function($skip, $loc, $0, $1) {
5065
5802
  return { $loc, token: "[]" };
5066
5803
  });
5067
5804
  function TypeLiteral(state) {
@@ -5071,10 +5808,10 @@ var Civet = (() => {
5071
5808
  return TypeLiteral$0(state) || TypeLiteral$1(state) || TypeLiteral$2(state);
5072
5809
  }
5073
5810
  }
5074
- var TypeBinaryOp$0 = $TV($EXPECT($L70, fail, 'TypeBinaryOp "|"'), function($skip, $loc, $0, $1) {
5811
+ var TypeBinaryOp$0 = $TV($EXPECT($L72, fail, 'TypeBinaryOp "|"'), function($skip, $loc, $0, $1) {
5075
5812
  return { $loc, token: "|" };
5076
5813
  });
5077
- var TypeBinaryOp$1 = $TV($EXPECT($L68, fail, 'TypeBinaryOp "&"'), function($skip, $loc, $0, $1) {
5814
+ var TypeBinaryOp$1 = $TV($EXPECT($L70, fail, 'TypeBinaryOp "&"'), function($skip, $loc, $0, $1) {
5078
5815
  return { $loc, token: "&" };
5079
5816
  });
5080
5817
  function TypeBinaryOp(state) {
@@ -5094,7 +5831,7 @@ var Civet = (() => {
5094
5831
  return FunctionType$0(state);
5095
5832
  }
5096
5833
  }
5097
- var TypeArguments$0 = $S(__, $EXPECT($L4, fail, 'TypeArguments "<"'), __, Type, $Q($S(__, Comma, __, Type)), $E($S(__, Comma)), __, $EXPECT($L55, fail, 'TypeArguments ">"'));
5834
+ var TypeArguments$0 = $S(__, $EXPECT($L4, fail, 'TypeArguments "<"'), __, Type, $Q($S(__, Comma, __, Type)), $E($S(__, Comma)), __, $EXPECT($L56, fail, 'TypeArguments ">"'));
5098
5835
  function TypeArguments(state) {
5099
5836
  if (state.verbose)
5100
5837
  console.log("ENTER:", "TypeArguments");
@@ -5104,7 +5841,7 @@ var Civet = (() => {
5104
5841
  return TypeArguments$0(state);
5105
5842
  }
5106
5843
  }
5107
- var TypeParameters$0 = $TS($S(__, $EXPECT($L4, fail, 'TypeParameters "<"'), __, Type, $Q($S(__, Comma, __, Type)), $E($S(__, Comma)), __, $EXPECT($L55, fail, 'TypeParameters ">"')), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8) {
5844
+ var TypeParameters$0 = $TS($S(__, $EXPECT($L4, fail, 'TypeParameters "<"'), __, Type, $Q($S(__, Comma, __, Type)), $E($S(__, Comma)), __, $EXPECT($L56, fail, 'TypeParameters ">"')), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8) {
5108
5845
  return { ts: true, children: $0 };
5109
5846
  });
5110
5847
  function TypeParameters(state) {
@@ -5137,8 +5874,8 @@ var Civet = (() => {
5137
5874
  }
5138
5875
  }
5139
5876
  var TypeParameterDelimiter$0 = $S($Q(_), Comma);
5140
- var TypeParameterDelimiter$1 = $Y($S($Q(_), $EXPECT($L55, fail, 'TypeParameterDelimiter ">"')));
5141
- var TypeParameterDelimiter$2 = $TV($Y($S(__, $EXPECT($L55, fail, 'TypeParameterDelimiter ">"'))), function($skip, $loc, $0, $1) {
5877
+ var TypeParameterDelimiter$1 = $Y($S($Q(_), $EXPECT($L56, fail, 'TypeParameterDelimiter ">"')));
5878
+ var TypeParameterDelimiter$2 = $TV($Y($S(__, $EXPECT($L56, fail, 'TypeParameterDelimiter ">"'))), function($skip, $loc, $0, $1) {
5142
5879
  return { $loc, token: "," };
5143
5880
  });
5144
5881
  var TypeParameterDelimiter$3 = $TV($Y(EOS), function($skip, $loc, $0, $1) {
@@ -5151,7 +5888,7 @@ var Civet = (() => {
5151
5888
  return TypeParameterDelimiter$0(state) || TypeParameterDelimiter$1(state) || TypeParameterDelimiter$2(state) || TypeParameterDelimiter$3(state);
5152
5889
  }
5153
5890
  }
5154
- var Shebang$0 = $S($R$0($EXPECT($R39, fail, "Shebang /#![^\\r\\n]*/")), EOL);
5891
+ var Shebang$0 = $S($R$0($EXPECT($R40, fail, "Shebang /#![^\\r\\n]*/")), EOL);
5155
5892
  function Shebang(state) {
5156
5893
  if (state.verbose)
5157
5894
  console.log("ENTER:", "Shebang");
@@ -5161,11 +5898,11 @@ var Civet = (() => {
5161
5898
  return Shebang$0(state);
5162
5899
  }
5163
5900
  }
5164
- var CivetPrologue$0 = $T($S($EXPECT($R40, fail, "CivetPrologue /[\\t ]*/"), DoubleQuote, CivetPrologueContent, DoubleQuote, $TEXT(StatementDelimiter), EOS), function(value) {
5901
+ var CivetPrologue$0 = $T($S($EXPECT($R41, fail, "CivetPrologue /[\\t ]*/"), DoubleQuote, CivetPrologueContent, DoubleQuote, $TEXT(StatementDelimiter), EOS), function(value) {
5165
5902
  var content = value[2];
5166
5903
  return content;
5167
5904
  });
5168
- var CivetPrologue$1 = $T($S($EXPECT($R40, fail, "CivetPrologue /[\\t ]*/"), SingleQuote, CivetPrologueContent, SingleQuote, $TEXT(StatementDelimiter), EOS), function(value) {
5905
+ var CivetPrologue$1 = $T($S($EXPECT($R41, fail, "CivetPrologue /[\\t ]*/"), SingleQuote, CivetPrologueContent, SingleQuote, $TEXT(StatementDelimiter), EOS), function(value) {
5169
5906
  var content = value[2];
5170
5907
  return content;
5171
5908
  });
@@ -5176,7 +5913,7 @@ var Civet = (() => {
5176
5913
  return CivetPrologue$0(state) || CivetPrologue$1(state);
5177
5914
  }
5178
5915
  }
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) {
5916
+ var CivetPrologueContent$0 = $TS($S($EXPECT($L150, fail, 'CivetPrologueContent "civet"'), $Q(CivetOption), $EXPECT($R42, fail, "CivetPrologueContent /[\\s]*/")), function($skip, $loc, $0, $1, $2, $3) {
5180
5917
  var options = $2;
5181
5918
  return {
5182
5919
  type: "CivetPrologue",
@@ -5193,7 +5930,7 @@ var Civet = (() => {
5193
5930
  return CivetPrologueContent$0(state);
5194
5931
  }
5195
5932
  }
5196
- var CivetOption$0 = $TR($EXPECT($R42, fail, "CivetOption /\\s+([+-]?)([a-zA-Z0-9-]+)/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
5933
+ var CivetOption$0 = $TR($EXPECT($R43, fail, "CivetOption /\\s+([+-]?)([a-zA-Z0-9-]+)/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
5197
5934
  const optionName = $2.replace(/-+([a-z]?)/g, (_2, l) => {
5198
5935
  if (l)
5199
5936
  return l.toUpperCase();
@@ -5211,7 +5948,7 @@ var Civet = (() => {
5211
5948
  return CivetOption$0(state);
5212
5949
  }
5213
5950
  }
5214
- var UnknownPrologue$0 = $S($R$0($EXPECT($R40, fail, "UnknownPrologue /[\\t ]*/")), BasicStringLiteral, $TEXT(StatementDelimiter), EOS);
5951
+ var UnknownPrologue$0 = $S($R$0($EXPECT($R41, fail, "UnknownPrologue /[\\t ]*/")), BasicStringLiteral, $TEXT(StatementDelimiter), EOS);
5215
5952
  function UnknownPrologue(state) {
5216
5953
  if (state.verbose)
5217
5954
  console.log("ENTER:", "UnknownPrologue");
@@ -5240,7 +5977,7 @@ var Civet = (() => {
5240
5977
  return EOS$0(state);
5241
5978
  }
5242
5979
  }
5243
- var EOL$0 = $TR($EXPECT($R43, fail, "EOL /\\r\\n|\\n|\\r|$/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
5980
+ var EOL$0 = $TR($EXPECT($R44, fail, "EOL /\\r\\n|\\n|\\r|$/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
5244
5981
  return { $loc, token: $0 };
5245
5982
  });
5246
5983
  function EOL(state) {
@@ -5438,6 +6175,34 @@ var Civet = (() => {
5438
6175
  return CoffeeInterpolationEnabled$0(state);
5439
6176
  }
5440
6177
  }
6178
+ var CoffeeIsntEnabled$0 = $TV($EXPECT($L0, fail, 'CoffeeIsntEnabled ""'), function($skip, $loc, $0, $1) {
6179
+ if (module.config.coffeeIsnt)
6180
+ return;
6181
+ return $skip;
6182
+ });
6183
+ function CoffeeIsntEnabled(state) {
6184
+ if (state.verbose)
6185
+ console.log("ENTER:", "CoffeeIsntEnabled");
6186
+ if (state.tokenize) {
6187
+ return $TOKEN("CoffeeIsntEnabled", state, CoffeeIsntEnabled$0(state));
6188
+ } else {
6189
+ return CoffeeIsntEnabled$0(state);
6190
+ }
6191
+ }
6192
+ var CoffeeNotEnabled$0 = $TV($EXPECT($L0, fail, 'CoffeeNotEnabled ""'), function($skip, $loc, $0, $1) {
6193
+ if (module.config.coffeeNot)
6194
+ return;
6195
+ return $skip;
6196
+ });
6197
+ function CoffeeNotEnabled(state) {
6198
+ if (state.verbose)
6199
+ console.log("ENTER:", "CoffeeNotEnabled");
6200
+ if (state.tokenize) {
6201
+ return $TOKEN("CoffeeNotEnabled", state, CoffeeNotEnabled$0(state));
6202
+ } else {
6203
+ return CoffeeNotEnabled$0(state);
6204
+ }
6205
+ }
5441
6206
  var Reset$0 = $TV($EXPECT($L0, fail, 'Reset ""'), function($skip, $loc, $0, $1) {
5442
6207
  module.currentIndent = 0;
5443
6208
  module.indentLevels = [0];
@@ -5448,6 +6213,8 @@ var Civet = (() => {
5448
6213
  coffeeComment: false,
5449
6214
  coffeeEq: false,
5450
6215
  coffeeInterpolation: false,
6216
+ coffeeIsnt: false,
6217
+ coffeeNot: false,
5451
6218
  implicitReturns: true
5452
6219
  };
5453
6220
  Object.defineProperty(module.config, "coffeeCompat", {
@@ -5458,14 +6225,16 @@ var Civet = (() => {
5458
6225
  this.coffeeComment = true;
5459
6226
  this.coffeeEq = true;
5460
6227
  this.coffeeInterpolation = true;
5461
- this.implicitReturns = true;
6228
+ this.coffeeIsnt = true;
6229
+ this.coffeeNot = true;
5462
6230
  } else {
5463
6231
  this.autoVar = false;
5464
6232
  this.coffeeBooleans = false;
5465
6233
  this.coffeeComment = false;
5466
6234
  this.coffeeEq = false;
5467
6235
  this.coffeeInterpolation = false;
5468
- this.implicitReturns = false;
6236
+ this.coffeeIsnt = false;
6237
+ this.coffeeNot = false;
5469
6238
  }
5470
6239
  }
5471
6240
  });
@@ -5497,7 +6266,7 @@ var Civet = (() => {
5497
6266
  node.children.unshift("return ");
5498
6267
  return;
5499
6268
  case "Identifier":
5500
- node.token = "return " + node.token;
6269
+ node.children.unshift("return ");
5501
6270
  return;
5502
6271
  case "BlockStatement":
5503
6272
  insertReturn(node.expressions[node.expressions.length - 1]);
@@ -5530,10 +6299,11 @@ var Civet = (() => {
5530
6299
  case "ContinueStatement":
5531
6300
  case "DebuggerStatement":
5532
6301
  case "EmptyStatement":
6302
+ case "ForStatement":
5533
6303
  case "IterationStatement":
5534
6304
  case "ReturnStatement":
5535
6305
  case "ThrowStatement":
5536
- case "VariableDeclaration":
6306
+ case "Declaration":
5537
6307
  return;
5538
6308
  case "BlockStatement":
5539
6309
  insertReturn(exp.expressions[exp.expressions.length - 1]);
@@ -5641,9 +6411,10 @@ var Civet = (() => {
5641
6411
  };
5642
6412
  module.insertTrimmingSpace = function(spacing, c) {
5643
6413
  let target = spacing;
5644
- while (Array.isArray(target)) {
5645
- target = target[0];
5646
- }
6414
+ if (Array.isArray(target))
6415
+ return module.insertTrimmingSpace(target[0], c);
6416
+ if (target.children)
6417
+ return module.insertTrimmingSpace(target.children[0], c);
5647
6418
  if (target.token) {
5648
6419
  target.token = target.token.replace(/^ ?/, c);
5649
6420
  }
@@ -5699,6 +6470,91 @@ var Civet = (() => {
5699
6470
  token: str
5700
6471
  };
5701
6472
  };
6473
+ function gatherNodes(node, predicate) {
6474
+ if (node == null)
6475
+ return [];
6476
+ if (Array.isArray(node)) {
6477
+ return node.flatMap((n) => gatherNodes(n, predicate));
6478
+ }
6479
+ if (predicate(node)) {
6480
+ return [node];
6481
+ }
6482
+ switch (node.type) {
6483
+ case "BlockStatement":
6484
+ return [];
6485
+ case "ForStatement":
6486
+ if (node.declaration.type === "Declaration")
6487
+ return [];
6488
+ return gatherNodes(node.declaration, predicate);
6489
+ default:
6490
+ return gatherNodes(node.children, predicate);
6491
+ }
6492
+ return [];
6493
+ }
6494
+ module.processProgram = function(statements) {
6495
+ if (module.config.autoVar) {
6496
+ module.autoVar(statements, []);
6497
+ }
6498
+ };
6499
+ function findDecs(statements) {
6500
+ const declarationNames = gatherNodes(statements, (node) => {
6501
+ if (node.type === "Declaration") {
6502
+ return true;
6503
+ }
6504
+ }).flatMap((d) => d.names);
6505
+ return new Set(declarationNames);
6506
+ }
6507
+ module.autoVar = function(statements, scopes, pushVar) {
6508
+ function hasDec(name) {
6509
+ return scopes.some((s) => s.has(name));
6510
+ }
6511
+ function findAssignments(statements2, decs2) {
6512
+ const assignmentStatements = gatherNodes(statements2, (node) => {
6513
+ return node.type === "AssignmentExpression";
6514
+ });
6515
+ const undeclaredIdentifiers = assignmentStatements.flatMap((a) => {
6516
+ return a.children[0].flatMap((x) => {
6517
+ return x[1].names || [];
6518
+ });
6519
+ });
6520
+ return undeclaredIdentifiers.filter((x, i, a) => {
6521
+ if (!hasDec(x))
6522
+ return a.indexOf(x) === i;
6523
+ });
6524
+ }
6525
+ if (!pushVar) {
6526
+ pushVar = function(name) {
6527
+ varIds.push(name);
6528
+ decs.add(name);
6529
+ };
6530
+ }
6531
+ const decs = findDecs(statements);
6532
+ scopes.push(decs);
6533
+ const varIds = [];
6534
+ findAssignments(statements, scopes).forEach(pushVar);
6535
+ const fnNodes = gatherNodes(statements, (s) => s.type === "FunctionExpression");
6536
+ const forNodes = gatherNodes(statements, (s) => s.type === "ForStatement");
6537
+ const blockNodes = new Set(gatherNodes(statements, (s) => s.type === "BlockStatement"));
6538
+ fnNodes.forEach(({ block }) => blockNodes.delete(block));
6539
+ forNodes.forEach(({ block }) => blockNodes.delete(block));
6540
+ blockNodes.forEach((block) => {
6541
+ module.autoVar(block.expressions, scopes, pushVar);
6542
+ });
6543
+ forNodes.forEach(({ block, declaration }) => {
6544
+ scopes.push(new Set(declaration.names));
6545
+ module.autoVar(block.expressions, scopes, pushVar);
6546
+ scopes.pop();
6547
+ });
6548
+ fnNodes.forEach(({ block, parameters }) => {
6549
+ scopes.push(new Set(parameters.names));
6550
+ module.autoVar(block.expressions, scopes);
6551
+ scopes.pop();
6552
+ });
6553
+ if (varIds.length) {
6554
+ const indent = statements[0][0];
6555
+ statements.unshift([indent, "var ", varIds.join(", "), "\n"]);
6556
+ }
6557
+ };
5702
6558
  return $0;
5703
6559
  });
5704
6560
  function Init(state) {
@@ -5710,7 +6566,7 @@ var Civet = (() => {
5710
6566
  return Init$0(state);
5711
6567
  }
5712
6568
  }
5713
- var Indent$0 = $TV($Q($C($EXPECT($L147, fail, 'Indent " "'), $EXPECT($L148, fail, 'Indent "\\\\t"'))), function($skip, $loc, $0, $1) {
6569
+ var Indent$0 = $TV($Q($C($EXPECT($L151, fail, 'Indent " "'), $EXPECT($L152, fail, 'Indent "\\\\t"'))), function($skip, $loc, $0, $1) {
5714
6570
  const level = $1.length;
5715
6571
  return {
5716
6572
  $loc,