@danielx/civet 0.4.16 → 0.4.18

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,
@@ -537,10 +550,15 @@ var Civet = (() => {
537
550
  ForStatement,
538
551
  ForClause,
539
552
  ForStatementControl,
553
+ WhenCondition,
554
+ CoffeeForStatementParameters,
555
+ CoffeeForDeclaration,
556
+ ForStatementParameters,
540
557
  ForInOfDeclaration,
541
558
  ForDeclaration,
542
559
  ForBinding,
543
560
  SwitchStatement,
561
+ SwitchExpression,
544
562
  CaseBlock,
545
563
  NestedCaseClauses,
546
564
  NestedCaseClause,
@@ -558,6 +576,8 @@ var Civet = (() => {
558
576
  SuppressIndentedApplication,
559
577
  ExpressionStatement,
560
578
  KeywordStatement,
579
+ DebuggerExpression,
580
+ ThrowExpression,
561
581
  MaybeNestedExpression,
562
582
  ImportDeclaration,
563
583
  ImpliedImport,
@@ -623,9 +643,11 @@ var Civet = (() => {
623
643
  NonNewlineWhitespace,
624
644
  __,
625
645
  Whitespace,
646
+ ExpressionDelimiter,
626
647
  StatementDelimiter,
627
648
  NonIdContinue,
628
649
  Loc,
650
+ Ampersand,
629
651
  As,
630
652
  Async,
631
653
  Await,
@@ -659,6 +681,7 @@ var Civet = (() => {
659
681
  LetOrConst,
660
682
  Loop,
661
683
  New,
684
+ Not,
662
685
  Of,
663
686
  OpenBrace,
664
687
  OpenBracket,
@@ -672,6 +695,7 @@ var Civet = (() => {
672
695
  SubstitutionStart,
673
696
  Switch,
674
697
  Target,
698
+ Then,
675
699
  Throw,
676
700
  TripleDoubleQuote,
677
701
  TripleSingleQuote,
@@ -762,7 +786,11 @@ var Civet = (() => {
762
786
  InsertBreak,
763
787
  CoffeeCommentEnabled,
764
788
  CoffeeBooleansEnabled,
789
+ CoffeeForLoopsEnabled,
765
790
  CoffeeInterpolationEnabled,
791
+ CoffeeIsntEnabled,
792
+ CoffeeNotEnabled,
793
+ CoffeeOfEnabled,
766
794
  Reset,
767
795
  Init,
768
796
  Indent,
@@ -782,149 +810,154 @@ var Civet = (() => {
782
810
  var $L6 = $L("this");
783
811
  var $L7 = $L("#");
784
812
  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"));
813
+ var $L9 = $L(".");
814
+ var $L10 = $L("super");
815
+ var $L11 = $L("import");
816
+ var $L12 = $L("!");
817
+ var $L13 = $L("::");
818
+ var $L14 = $L("super[");
819
+ var $L15 = $L("import.meta");
820
+ var $L16 = $L(")");
821
+ var $L17 = $L("->");
822
+ var $L18 = $L("null");
823
+ var $L19 = $L("true");
824
+ var $L20 = $L("false");
825
+ var $L21 = $L("yes");
826
+ var $L22 = $L("on");
827
+ var $L23 = $L("no");
828
+ var $L24 = $L("off");
829
+ var $L25 = $L(",");
830
+ var $L26 = $L("]");
831
+ var $L27 = $L("}");
832
+ var $L28 = $L("**=");
833
+ var $L29 = $L("*=");
834
+ var $L30 = $L("/=");
835
+ var $L31 = $L("%=");
836
+ var $L32 = $L("+=");
837
+ var $L33 = $L("-=");
838
+ var $L34 = $L("<<=");
839
+ var $L35 = $L(">>>=");
840
+ var $L36 = $L(">>=");
841
+ var $L37 = $L("&&=");
842
+ var $L38 = $L("&=");
843
+ var $L39 = $L("^=");
844
+ var $L40 = $L("||=");
845
+ var $L41 = $L("|=");
846
+ var $L42 = $L("??=");
847
+ var $L43 = $L("?=");
848
+ var $L44 = $L("=");
849
+ var $L45 = $L("**");
850
+ var $L46 = $L("*");
851
+ var $L47 = $L("/");
852
+ var $L48 = $L("%");
853
+ var $L49 = $L("+");
854
+ var $L50 = $L("-");
855
+ var $L51 = $L("<=");
856
+ var $L52 = $L(">=");
857
+ var $L53 = $L("<<");
858
+ var $L54 = $L(">>>");
859
+ var $L55 = $L(">>");
860
+ var $L56 = $L(">");
861
+ var $L57 = $L("!==");
862
+ var $L58 = $L("!=");
863
+ var $L59 = $L("isnt");
864
+ var $L60 = $L("is");
865
+ var $L61 = $L("===");
866
+ var $L62 = $L("==");
867
+ var $L63 = $L("and");
868
+ var $L64 = $L("&&");
869
+ var $L65 = $L("of");
870
+ var $L66 = $L("or");
871
+ var $L67 = $L("||");
872
+ var $L68 = $L("??");
873
+ var $L69 = $L("instanceof");
874
+ var $L70 = $L("in");
875
+ var $L71 = $L("&");
876
+ var $L72 = $L("^");
877
+ var $L73 = $L("|");
878
+ var $L74 = $L(";");
879
+ var $L75 = $L("own");
880
+ var $L76 = $L("finally");
881
+ var $L77 = $L("break");
882
+ var $L78 = $L("continue");
883
+ var $L79 = $L("debugger");
884
+ var $L80 = $L("import type");
885
+ var $L81 = $L("default");
886
+ var $L82 = $L(":=");
887
+ var $L83 = $L("/*");
888
+ var $L84 = $L("*/");
889
+ var $L85 = $L("###");
890
+ var $L86 = $L("as");
891
+ var $L87 = $L("async");
892
+ var $L88 = $L("await");
893
+ var $L89 = $L("`");
894
+ var $L90 = $L("case");
895
+ var $L91 = $L("catch");
896
+ var $L92 = $L("class");
897
+ var $L93 = $L("#{");
898
+ var $L94 = $L(":");
899
+ var $L95 = $L("delete");
900
+ var $L96 = $L("do");
901
+ var $L97 = $L("..");
902
+ var $L98 = $L("...");
903
+ var $L99 = $L('"');
904
+ var $L100 = $L("else");
905
+ var $L101 = $L("export");
906
+ var $L102 = $L("for");
907
+ var $L103 = $L("from");
908
+ var $L104 = $L("function");
909
+ var $L105 = $L("get");
910
+ var $L106 = $L("set");
911
+ var $L107 = $L("if");
912
+ var $L108 = $L(" ");
913
+ var $L109 = $L("let");
914
+ var $L110 = $L("const");
915
+ var $L111 = $L("loop");
916
+ var $L112 = $L("new");
917
+ var $L113 = $L("not");
918
+ var $L114 = $L("{");
919
+ var $L115 = $L("[");
920
+ var $L116 = $L("(");
921
+ var $L117 = $L("?");
922
+ var $L118 = $L("return");
923
+ var $L119 = $L("'");
924
+ var $L120 = $L("static");
925
+ var $L121 = $L("${");
926
+ var $L122 = $L("switch");
927
+ var $L123 = $L("target");
928
+ var $L124 = $L("then");
929
+ var $L125 = $L("throw");
930
+ var $L126 = $L('"""');
931
+ var $L127 = $L("'''");
932
+ var $L128 = $L("```");
933
+ var $L129 = $L("try");
934
+ var $L130 = $L("typeof");
935
+ var $L131 = $L("unless");
936
+ var $L132 = $L("until");
937
+ var $L133 = $L("var");
938
+ var $L134 = $L("void");
939
+ var $L135 = $L("when");
940
+ var $L136 = $L("while");
941
+ var $L137 = $L("yield");
942
+ var $L138 = $L("/>");
943
+ var $L139 = $L("</");
944
+ var $L140 = $L("<>");
945
+ var $L141 = $L("</>");
946
+ var $L142 = $L("declare");
947
+ var $L143 = $L("type");
948
+ var $L144 = $L("interface");
949
+ var $L145 = $L("namespace");
950
+ var $L146 = $L("readonly");
951
+ var $L147 = $L("asserts");
952
+ var $L148 = $L("keyof");
953
+ var $L149 = $L("infer");
954
+ var $L150 = $L("[]");
955
+ var $L151 = $L("civet");
956
+ var $L152 = $L(" ");
957
+ var $L153 = $L(" ");
958
+ var $R0 = $R(new RegExp("(of|then|when)(?!\\p{ID_Continue}|[\\u200C\\u200D$])", "suy"));
926
959
  var $R1 = $R(new RegExp("(?:\\p{ID_Start}|[_$])(?:\\p{ID_Continue}|[\\u200C\\u200D$])*", "suy"));
927
- var $R2 = $R(new RegExp("[!~+-]", "suy"));
960
+ var $R2 = $R(new RegExp("[!~+-](?!\\s)", "suy"));
928
961
  var $R3 = $R(new RegExp("(?=[\\s\\)])", "suy"));
929
962
  var $R4 = $R(new RegExp('[^;"\\s]+', "suy"));
930
963
  var $R5 = $R(new RegExp("(?:0|[1-9](?:_[0-9]|[0-9])*)n", "suy"));
@@ -946,27 +979,32 @@ var Civet = (() => {
946
979
  var $R21 = $R(new RegExp("(?:\\$(?!\\{)|\\\\.|[^$`])+", "suy"));
947
980
  var $R22 = $R(new RegExp("(?:\\$(?!\\{)|`(?!``)|\\\\.|[^$`])+", "suy"));
948
981
  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), __);
982
+ var $R24 = $R(new RegExp("(?:isnt)(?!\\p{ID_Continue})", "suy"));
983
+ 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"));
984
+ var $R26 = $R(new RegExp("\\/\\/[^\\r\\n]*", "suy"));
985
+ var $R27 = $R(new RegExp(".", "suy"));
986
+ var $R28 = $R(new RegExp("#([^\\r\\n]*)", "suy"));
987
+ var $R29 = $R(new RegExp("[^\\r\\n]", "suy"));
988
+ var $R30 = $R(new RegExp("[ \\t]+", "suy"));
989
+ var $R31 = $R(new RegExp("[\\s]+", "suy"));
990
+ var $R32 = $R(new RegExp("(?!\\p{ID_Continue})", "suy"));
991
+ var $R33 = $R(new RegExp("\\s", "suy"));
992
+ var $R34 = $R(new RegExp("(?:\\p{ID_Start}|[_$])(?:\\p{ID_Continue}|[\\u200C\\u200D$-])*", "suy"));
993
+ var $R35 = $R(new RegExp('"[^"]*"', "suy"));
994
+ var $R36 = $R(new RegExp("'[^']*'", "suy"));
995
+ var $R37 = $R(new RegExp("[^{}<>]+", "suy"));
996
+ var $R38 = $R(new RegExp("[+-]?", "suy"));
997
+ var $R39 = $R(new RegExp("[+-]", "suy"));
998
+ var $R40 = $R(new RegExp("#![^\\r\\n]*", "suy"));
999
+ var $R41 = $R(new RegExp("[\\t ]*", "suy"));
1000
+ var $R42 = $R(new RegExp("[\\s]*", "suy"));
1001
+ var $R43 = $R(new RegExp("\\s+([+-]?)([a-zA-Z0-9-]+)", "suy"));
1002
+ var $R44 = $R(new RegExp("\\r\\n|\\n|\\r|$", "suy"));
1003
+ var Program$0 = $TS($S(Reset, Init, __, $Q(TopLevelStatement), __), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
1004
+ var statements = $4;
1005
+ module.processProgram(statements);
1006
+ return $0;
1007
+ });
970
1008
  function Program(state) {
971
1009
  if (state.verbose)
972
1010
  console.log("ENTER:", "Program");
@@ -986,6 +1024,31 @@ var Civet = (() => {
986
1024
  return TopLevelStatement$0(state);
987
1025
  }
988
1026
  }
1027
+ var ExtendedExpression$0 = $TS($S(__, ExpressionizedStatement), function($skip, $loc, $0, $1, $2) {
1028
+ if ($1.length) {
1029
+ $2.children.splice(0, 0, ...$1);
1030
+ }
1031
+ return $2;
1032
+ });
1033
+ var ExtendedExpression$1 = AssignmentExpression;
1034
+ function ExtendedExpression(state) {
1035
+ if (state.tokenize) {
1036
+ return $TOKEN("ExtendedExpression", state, ExtendedExpression$0(state) || ExtendedExpression$1(state));
1037
+ } else {
1038
+ return ExtendedExpression$0(state) || ExtendedExpression$1(state);
1039
+ }
1040
+ }
1041
+ var ExpressionizedStatement$0 = DebuggerExpression;
1042
+ var ExpressionizedStatement$1 = IfExpression;
1043
+ var ExpressionizedStatement$2 = SwitchExpression;
1044
+ var ExpressionizedStatement$3 = ThrowExpression;
1045
+ function ExpressionizedStatement(state) {
1046
+ if (state.tokenize) {
1047
+ return $TOKEN("ExpressionizedStatement", state, ExpressionizedStatement$0(state) || ExpressionizedStatement$1(state) || ExpressionizedStatement$2(state) || ExpressionizedStatement$3(state));
1048
+ } else {
1049
+ return ExpressionizedStatement$0(state) || ExpressionizedStatement$1(state) || ExpressionizedStatement$2(state) || ExpressionizedStatement$3(state);
1050
+ }
1051
+ }
989
1052
  var Expression$0 = $TS($S(AssignmentExpression, $Q($S(__, Comma, AssignmentExpression))), function($skip, $loc, $0, $1, $2) {
990
1053
  if ($2.length == 0)
991
1054
  return $1;
@@ -1057,7 +1120,7 @@ var Civet = (() => {
1057
1120
  return NestedArgument$0(state);
1058
1121
  }
1059
1122
  }
1060
- var InlineArgumentExpressions$0 = $TS($S($S($E(DotDotDot), AssignmentExpressionRest), $Q($S(__, Comma, $Q(TrailingComment), $E(DotDotDot), AssignmentExpressionRest))), function($skip, $loc, $0, $1, $2) {
1123
+ var InlineArgumentExpressions$0 = $TS($S($S($E(DotDotDot), ExtendedExpression), $Q($S(__, Comma, $Q(TrailingComment), $E(DotDotDot), ExtendedExpression))), function($skip, $loc, $0, $1, $2) {
1061
1124
  if ($2.length == 0)
1062
1125
  return $1;
1063
1126
  return $0;
@@ -1111,7 +1174,23 @@ var Civet = (() => {
1111
1174
  }
1112
1175
  var BinaryOpExpression$0 = $TS($S(UnaryExpression, $Q($S(__, BinaryOp, __, UnaryExpression))), function($skip, $loc, $0, $1, $2) {
1113
1176
  if ($2.length) {
1114
- return module.expandChainedComparisons($0);
1177
+ const expandedOps = module.expandChainedComparisons($0);
1178
+ let i = 2;
1179
+ while (i < expandedOps.length) {
1180
+ const op = expandedOps[i];
1181
+ if (op.type === "Ref") {
1182
+ const [a, wsOp, op2, wsB, b] = expandedOps.slice(i - 2, i + 3);
1183
+ module.insertTrimmingSpace(wsOp, "");
1184
+ module.insertTrimmingSpace(wsB, "");
1185
+ expandedOps.splice(i - 2, 5, {
1186
+ type: "Call",
1187
+ children: [wsOp, op2, ".call(", wsB, b, ", ", a, ") >= 0"]
1188
+ });
1189
+ } else {
1190
+ i += 4;
1191
+ }
1192
+ }
1193
+ return expandedOps;
1115
1194
  }
1116
1195
  return $1;
1117
1196
  });
@@ -1185,12 +1264,17 @@ var Civet = (() => {
1185
1264
  return UpdateExpressionSymbol$0(state);
1186
1265
  }
1187
1266
  }
1188
- var AssignmentExpression$0 = $TS($S($Q(TrailingComment), AssignmentExpressionRest), function($skip, $loc, $0, $1, $2) {
1189
- if ($1.length)
1267
+ var AssignmentExpression$0 = $TS($S($Q(TrailingComment), AssignmentExpressionTail), function($skip, $loc, $0, $1, $2) {
1268
+ if ($1.length) {
1269
+ if ($2.children) {
1270
+ $2.children.splice(0, 0, ...$1);
1271
+ return $2;
1272
+ }
1190
1273
  return $0;
1274
+ }
1191
1275
  return $2;
1192
1276
  });
1193
- var AssignmentExpression$1 = $S(__, AssignmentExpressionRest);
1277
+ var AssignmentExpression$1 = $S(__, AssignmentExpressionTail);
1194
1278
  function AssignmentExpression(state) {
1195
1279
  if (state.tokenize) {
1196
1280
  return $TOKEN("AssignmentExpression", state, AssignmentExpression$0(state) || AssignmentExpression$1(state));
@@ -1198,71 +1282,105 @@ var Civet = (() => {
1198
1282
  return AssignmentExpression$0(state) || AssignmentExpression$1(state);
1199
1283
  }
1200
1284
  }
1201
- var AssignmentExpressionRest$0 = AwaitExpression;
1202
- var AssignmentExpressionRest$1 = YieldExpression;
1203
- var AssignmentExpressionRest$2 = $S($E($S(Async, __)), ArrowFunction);
1204
- var AssignmentExpressionRest$3 = $TS($S($P($S(__, LeftHandSideExpression, __, AssignmentOp)), Expression), function($skip, $loc, $0, $1, $2) {
1205
- const lastAssignment = $1[$1.length - 1];
1206
- if (lastAssignment[3].token === "=") {
1207
- const lhs = lastAssignment[1];
1208
- if (Array.isArray(lhs) && lhs.length > 1) {
1209
- const props = lhs[lhs.length - 1];
1210
- if (Array.isArray(props)) {
1211
- const lastProp = props[props.length - 1];
1212
- if (lastProp.type === "SliceExpression") {
1213
- const { start, end, children: c } = lastProp;
1214
- c[0].token = ".splice(";
1215
- c[1] = start;
1216
- c[2] = ", ";
1217
- if (end)
1218
- c[3] = [end, " - ", start];
1219
- else
1220
- c[3] = ["1/0"];
1221
- c[4] = [", ...", $2];
1222
- c[5] = ")";
1223
- lastAssignment.pop();
1224
- if (module.isWhitespaceOrEmpty(lastAssignment[2]))
1285
+ var AssignmentExpressionTail$0 = YieldExpression;
1286
+ var AssignmentExpressionTail$1 = ArrowFunction;
1287
+ var AssignmentExpressionTail$2 = $TS($S($P($S(__, LeftHandSideExpression, __, AssignmentOp)), ExtendedExpression), function($skip, $loc, $0, $1, $2) {
1288
+ let tail = [], i = 0, len = $1.length;
1289
+ while (i < len) {
1290
+ const lastAssignment = $1[i++];
1291
+ const [, lhs, , op] = lastAssignment;
1292
+ if (op.token !== "=")
1293
+ continue;
1294
+ if (lhs.type === "ObjectExpression") {
1295
+ lhs.children.splice(0, 0, "(");
1296
+ tail.push(")");
1297
+ break;
1298
+ }
1299
+ }
1300
+ i = len - 1;
1301
+ while (i >= 0) {
1302
+ const lastAssignment = $1[i];
1303
+ if (lastAssignment[3].token === "=") {
1304
+ const lhs = lastAssignment[1];
1305
+ if (Array.isArray(lhs) && lhs.length > 1) {
1306
+ const props = lhs[lhs.length - 1];
1307
+ if (Array.isArray(props)) {
1308
+ const lastProp = props[props.length - 1];
1309
+ if (lastProp.type === "SliceExpression") {
1310
+ const { start, end, children: c } = lastProp;
1311
+ c[0].token = ".splice(";
1312
+ c[1] = start;
1313
+ c[2] = ", ";
1314
+ if (end)
1315
+ c[3] = [end, " - ", start];
1316
+ else
1317
+ c[3] = ["1/0"];
1318
+ c[4] = [", ...", $2];
1319
+ c[5] = ")";
1225
1320
  lastAssignment.pop();
1226
- return $1;
1321
+ if (module.isWhitespaceOrEmpty(lastAssignment[2]))
1322
+ lastAssignment.pop();
1323
+ if ($1.length > 1) {
1324
+ throw new Error("Not implemented yet! TODO: Handle multiple splice assignments");
1325
+ }
1326
+ return $1;
1327
+ }
1227
1328
  }
1228
1329
  }
1229
1330
  }
1331
+ i--;
1230
1332
  }
1333
+ const names = $1.flatMap(([, l]) => l.names || []);
1231
1334
  return {
1232
1335
  type: "AssignmentExpression",
1233
- children: $0
1336
+ children: [...$0, ...tail],
1337
+ names
1234
1338
  };
1235
1339
  });
1236
- var AssignmentExpressionRest$4 = ConditionalExpression;
1237
- function AssignmentExpressionRest(state) {
1340
+ var AssignmentExpressionTail$3 = ConditionalExpression;
1341
+ function AssignmentExpressionTail(state) {
1238
1342
  if (state.tokenize) {
1239
- return $TOKEN("AssignmentExpressionRest", state, AssignmentExpressionRest$0(state) || AssignmentExpressionRest$1(state) || AssignmentExpressionRest$2(state) || AssignmentExpressionRest$3(state) || AssignmentExpressionRest$4(state));
1343
+ return $TOKEN("AssignmentExpressionTail", state, AssignmentExpressionTail$0(state) || AssignmentExpressionTail$1(state) || AssignmentExpressionTail$2(state) || AssignmentExpressionTail$3(state));
1240
1344
  } else {
1241
- return AssignmentExpressionRest$0(state) || AssignmentExpressionRest$1(state) || AssignmentExpressionRest$2(state) || AssignmentExpressionRest$3(state) || AssignmentExpressionRest$4(state);
1345
+ return AssignmentExpressionTail$0(state) || AssignmentExpressionTail$1(state) || AssignmentExpressionTail$2(state) || AssignmentExpressionTail$3(state);
1242
1346
  }
1243
1347
  }
1244
- var AwaitExpression$0 = $S(Await, $Q(TrailingComment), AssignmentExpression);
1245
- function AwaitExpression(state) {
1348
+ var YieldExpression$0 = $S(Yield, YieldTail);
1349
+ function YieldExpression(state) {
1246
1350
  if (state.verbose)
1247
- console.log("ENTER:", "AwaitExpression");
1351
+ console.log("ENTER:", "YieldExpression");
1248
1352
  if (state.tokenize) {
1249
- return $TOKEN("AwaitExpression", state, AwaitExpression$0(state));
1353
+ return $TOKEN("YieldExpression", state, YieldExpression$0(state));
1250
1354
  } else {
1251
- return AwaitExpression$0(state);
1355
+ return YieldExpression$0(state);
1252
1356
  }
1253
1357
  }
1254
- var YieldExpression$0 = $S(Yield, $E($S($Q(TrailingComment), Star)), AssignmentExpression);
1255
- function YieldExpression(state) {
1358
+ var YieldTail$0 = $Y(EOS);
1359
+ var YieldTail$1 = $S($E($S($Q(TrailingComment), Star)), AssignmentExpression);
1360
+ function YieldTail(state) {
1361
+ if (state.tokenize) {
1362
+ return $TOKEN("YieldTail", state, YieldTail$0(state) || YieldTail$1(state));
1363
+ } else {
1364
+ return YieldTail$0(state) || YieldTail$1(state);
1365
+ }
1366
+ }
1367
+ var ArrowFunction$0 = $TS($S($E($S(Async, __)), ArrowFunctionTail), function($skip, $loc, $0, $1, $2) {
1368
+ if ($1)
1369
+ $2.children.unshift($1);
1370
+ return $2;
1371
+ });
1372
+ function ArrowFunction(state) {
1256
1373
  if (state.verbose)
1257
- console.log("ENTER:", "YieldExpression");
1374
+ console.log("ENTER:", "ArrowFunction");
1258
1375
  if (state.tokenize) {
1259
- return $TOKEN("YieldExpression", state, YieldExpression$0(state));
1376
+ return $TOKEN("ArrowFunction", state, ArrowFunction$0(state));
1260
1377
  } else {
1261
- return YieldExpression$0(state);
1378
+ return ArrowFunction$0(state);
1262
1379
  }
1263
1380
  }
1264
- var ArrowFunction$0 = ThinArrowFunction;
1265
- var ArrowFunction$1 = $TS($S(Parameters, $E(ReturnTypeSuffix), FatArrow, FatArrowBody), function($skip, $loc, $0, $1, $2, $3, $4) {
1381
+ var ArrowFunctionTail$0 = ThinArrowFunction;
1382
+ var ArrowFunctionTail$1 = $TS($S(Parameters, $E(ReturnTypeSuffix), FatArrow, FatArrowBody), function($skip, $loc, $0, $1, $2, $3, $4) {
1383
+ var parameters = $1;
1266
1384
  var suffix = $2;
1267
1385
  var expOrBlock = $4;
1268
1386
  const isVoid = suffix?.children?.[1]?.[0]?.[1]?.token === "void";
@@ -1271,15 +1389,19 @@ var Civet = (() => {
1271
1389
  module.addImplicitReturns(expOrBlock);
1272
1390
  }
1273
1391
  return {
1274
- type: "FunctionExpression",
1392
+ type: "ArrowFunction",
1393
+ parameters,
1394
+ returnType: suffix,
1395
+ ts: false,
1396
+ block: expOrBlock,
1275
1397
  children: $0
1276
1398
  };
1277
1399
  });
1278
- function ArrowFunction(state) {
1400
+ function ArrowFunctionTail(state) {
1279
1401
  if (state.tokenize) {
1280
- return $TOKEN("ArrowFunction", state, ArrowFunction$0(state) || ArrowFunction$1(state));
1402
+ return $TOKEN("ArrowFunctionTail", state, ArrowFunctionTail$0(state) || ArrowFunctionTail$1(state));
1281
1403
  } else {
1282
- return ArrowFunction$0(state) || ArrowFunction$1(state);
1404
+ return ArrowFunctionTail$0(state) || ArrowFunctionTail$1(state);
1283
1405
  }
1284
1406
  }
1285
1407
  var FatArrow$0 = $TS($S(__, $EXPECT($L3, fail, 'FatArrow "=>"')), function($skip, $loc, $0, $1, $2) {
@@ -1297,25 +1419,24 @@ var Civet = (() => {
1297
1419
  return FatArrow$0(state);
1298
1420
  }
1299
1421
  }
1300
- var FatArrowBody$0 = $T($S(__, OpenBrace, EOS, NestedBlockExpressions, __, CloseBrace), function(value) {
1422
+ var FatArrowBody$0 = $T($S(__, OpenBrace, EOS, NestedBlockStatements, __, CloseBrace), function(value) {
1301
1423
  var exps = value[3];
1302
1424
  return { "type": "BlockStatement", "expressions": exps, "children": value };
1303
1425
  });
1304
- var FatArrowBody$1 = $T($S(InsertOpenBrace, EOS, NestedBlockExpressions, InsertNewline, InsertIndent, InsertCloseBrace), function(value) {
1426
+ var FatArrowBody$1 = $T($S(InsertOpenBrace, EOS, NestedBlockStatements, InsertNewline, InsertIndent, InsertCloseBrace), function(value) {
1305
1427
  var exps = value[2];
1306
1428
  return { "type": "BlockStatement", "expressions": exps, "children": value };
1307
1429
  });
1308
1430
  var FatArrowBody$2 = AssignmentExpression;
1309
- var FatArrowBody$3 = $S(__, AssignmentExpression);
1310
- var FatArrowBody$4 = EmptyBlock;
1431
+ var FatArrowBody$3 = EmptyBlock;
1311
1432
  function FatArrowBody(state) {
1312
1433
  if (state.tokenize) {
1313
- return $TOKEN("FatArrowBody", state, FatArrowBody$0(state) || FatArrowBody$1(state) || FatArrowBody$2(state) || FatArrowBody$3(state) || FatArrowBody$4(state));
1434
+ return $TOKEN("FatArrowBody", state, FatArrowBody$0(state) || FatArrowBody$1(state) || FatArrowBody$2(state) || FatArrowBody$3(state));
1314
1435
  } else {
1315
- return FatArrowBody$0(state) || FatArrowBody$1(state) || FatArrowBody$2(state) || FatArrowBody$3(state) || FatArrowBody$4(state);
1436
+ return FatArrowBody$0(state) || FatArrowBody$1(state) || FatArrowBody$2(state) || FatArrowBody$3(state);
1316
1437
  }
1317
1438
  }
1318
- var ConditionalExpression$0 = $TS($S(ShortCircuitExpression, $E($S(__, QuestionMark, AssignmentExpression, __, Colon, AssignmentExpression))), function($skip, $loc, $0, $1, $2) {
1439
+ var ConditionalExpression$0 = $TS($S(ShortCircuitExpression, $E($S(__, QuestionMark, ExtendedExpression, __, Colon, ExtendedExpression))), function($skip, $loc, $0, $1, $2) {
1319
1440
  if ($2)
1320
1441
  return $0;
1321
1442
  return $1;
@@ -1348,7 +1469,7 @@ var Civet = (() => {
1348
1469
  var PrimaryExpression$6 = ClassExpression;
1349
1470
  var PrimaryExpression$7 = RegularExpressionLiteral;
1350
1471
  var PrimaryExpression$8 = TemplateLiteral;
1351
- var PrimaryExpression$9 = $S(OpenParen, Expression, __, CloseParen);
1472
+ var PrimaryExpression$9 = $S(OpenParen, ExtendedExpression, __, CloseParen);
1352
1473
  var PrimaryExpression$10 = JSXElement;
1353
1474
  var PrimaryExpression$11 = JSXFragment;
1354
1475
  function PrimaryExpression(state) {
@@ -1444,7 +1565,7 @@ var Civet = (() => {
1444
1565
  return ClassElement$0(state) || ClassElement$1(state);
1445
1566
  }
1446
1567
  }
1447
- var FieldDefinition$0 = $TS($S(InsertReadonly, ClassElementName, $E(TypeSuffix), __, ConstAssignment, AssignmentExpression), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6) {
1568
+ var FieldDefinition$0 = $TS($S(InsertReadonly, ClassElementName, $E(TypeSuffix), __, ConstAssignment, ExtendedExpression), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6) {
1448
1569
  var r = $1;
1449
1570
  var ca = $5;
1450
1571
  r.children[0].$loc = {
@@ -1487,27 +1608,22 @@ var Civet = (() => {
1487
1608
  return AtAccessor$0(state);
1488
1609
  }
1489
1610
  }
1490
- var LeftHandSideExpression$0 = NewExpression;
1491
- var LeftHandSideExpression$1 = CallExpression;
1611
+ var LeftHandSideExpression$0 = $TS($S($Q($S(New, $N($EXPECT($L9, fail, 'LeftHandSideExpression "."')), __)), CallExpression), function($skip, $loc, $0, $1, $2) {
1612
+ if ($1.length)
1613
+ return $0;
1614
+ return $2;
1615
+ });
1492
1616
  function LeftHandSideExpression(state) {
1493
- if (state.tokenize) {
1494
- return $TOKEN("LeftHandSideExpression", state, LeftHandSideExpression$0(state) || LeftHandSideExpression$1(state));
1495
- } else {
1496
- return LeftHandSideExpression$0(state) || LeftHandSideExpression$1(state);
1497
- }
1498
- }
1499
- var NewExpression$0 = $S($P($S(New, __)), CallExpression);
1500
- function NewExpression(state) {
1501
1617
  if (state.verbose)
1502
- console.log("ENTER:", "NewExpression");
1618
+ console.log("ENTER:", "LeftHandSideExpression");
1503
1619
  if (state.tokenize) {
1504
- return $TOKEN("NewExpression", state, NewExpression$0(state));
1620
+ return $TOKEN("LeftHandSideExpression", state, LeftHandSideExpression$0(state));
1505
1621
  } else {
1506
- return NewExpression$0(state);
1622
+ return LeftHandSideExpression$0(state);
1507
1623
  }
1508
1624
  }
1509
- var CallExpression$0 = $S($EXPECT($L9, fail, 'CallExpression "super"'), ArgumentsWithTrailingCallExpressions);
1510
- var CallExpression$1 = $S($EXPECT($L10, fail, 'CallExpression "import"'), __, OpenParen, AssignmentExpression, __, CloseParen);
1625
+ var CallExpression$0 = $S($EXPECT($L10, fail, 'CallExpression "super"'), ArgumentsWithTrailingCallExpressions);
1626
+ var CallExpression$1 = $S($EXPECT($L11, fail, 'CallExpression "import"'), __, OpenParen, ExtendedExpression, __, CloseParen);
1511
1627
  var CallExpression$2 = $TS($S(MemberExpression, $Q(CallExpressionRest)), function($skip, $loc, $0, $1, $2) {
1512
1628
  if ($2.length)
1513
1629
  return $0;
@@ -1540,7 +1656,7 @@ var Civet = (() => {
1540
1656
  return OptionalShorthand$0(state);
1541
1657
  }
1542
1658
  }
1543
- var NonNullAssertion$0 = $T($EXPECT($L11, fail, 'NonNullAssertion "!"'), function(value) {
1659
+ var NonNullAssertion$0 = $T($EXPECT($L12, fail, 'NonNullAssertion "!"'), function(value) {
1544
1660
  return { "ts": true, "children": value };
1545
1661
  });
1546
1662
  function NonNullAssertion(state) {
@@ -1552,7 +1668,7 @@ var Civet = (() => {
1552
1668
  return NonNullAssertion$0(state);
1553
1669
  }
1554
1670
  }
1555
- var AdditionalReservedWords$0 = $R$0($EXPECT($R0, fail, "AdditionalReservedWords /(of)(?!\\p{ID_Continue}|[\\u200C\\u200D$])/"));
1671
+ var AdditionalReservedWords$0 = $R$0($EXPECT($R0, fail, "AdditionalReservedWords /(of|then|when)(?!\\p{ID_Continue}|[\\u200C\\u200D$])/"));
1556
1672
  function AdditionalReservedWords(state) {
1557
1673
  if (state.verbose)
1558
1674
  console.log("ENTER:", "AdditionalReservedWords");
@@ -1567,8 +1683,8 @@ var Civet = (() => {
1567
1683
  return $0;
1568
1684
  return $1;
1569
1685
  });
1570
- var MemberExpression$1 = $S($Q(TrailingComment), SuperProperty);
1571
- var MemberExpression$2 = $S($Q(TrailingComment), MetaProperty);
1686
+ var MemberExpression$1 = SuperProperty;
1687
+ var MemberExpression$2 = MetaProperty;
1572
1688
  function MemberExpression(state) {
1573
1689
  if (state.tokenize) {
1574
1690
  return $TOKEN("MemberExpression", state, MemberExpression$0(state) || MemberExpression$1(state) || MemberExpression$2(state));
@@ -1577,12 +1693,20 @@ var Civet = (() => {
1577
1693
  }
1578
1694
  }
1579
1695
  var MemberExpressionRest$0 = $TS($S($E($C(OptionalShorthand, NonNullAssertion)), MemberBracketContent), function($skip, $loc, $0, $1, $2) {
1580
- if ($1)
1696
+ if ($1) {
1697
+ if ($1.length === 2 && $2.type === "SliceExpression") {
1698
+ $1.pop();
1699
+ }
1581
1700
  return $0;
1701
+ }
1702
+ return $2;
1703
+ });
1704
+ var MemberExpressionRest$1 = $TS($S($E($S($Y(EOS), IndentedFurther)), PropertyAccess), function($skip, $loc, $0, $1, $2) {
1705
+ if ($1)
1706
+ $2.children.unshift($1[1]);
1582
1707
  return $2;
1583
1708
  });
1584
- var MemberExpressionRest$1 = $S($E($S($Y(EOS), IndentedFurther)), PropertyAccess);
1585
- var MemberExpressionRest$2 = $TS($S($E($S($Y(EOS), IndentedFurther)), $EXPECT($L12, fail, 'MemberExpressionRest "::"'), $E(IdentifierName)), function($skip, $loc, $0, $1, $2, $3) {
1709
+ var MemberExpressionRest$2 = $TS($S($E($S($Y(EOS), IndentedFurther)), $EXPECT($L13, fail, 'MemberExpressionRest "::"'), $E(IdentifierName)), function($skip, $loc, $0, $1, $2, $3) {
1586
1710
  var id = $3;
1587
1711
  if (id)
1588
1712
  return [".prototype.", id];
@@ -1596,7 +1720,7 @@ var Civet = (() => {
1596
1720
  return MemberExpressionRest$0(state) || MemberExpressionRest$1(state) || MemberExpressionRest$2(state) || MemberExpressionRest$3(state);
1597
1721
  }
1598
1722
  }
1599
- var MemberBracketContent$0 = $TS($S(OpenBracket, Expression, $E($S($C(DotDotDot, DotDot), $E(Expression))), __, CloseBracket), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
1723
+ var MemberBracketContent$0 = $TS($S(OpenBracket, ExtendedExpression, $E($S($C(DotDotDot, DotDot), $E(ExtendedExpression))), __, CloseBracket), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
1600
1724
  if ($3) {
1601
1725
  const sep = $3[0];
1602
1726
  const end = $3[1];
@@ -1638,7 +1762,14 @@ var Civet = (() => {
1638
1762
  return MemberBracketContent$0(state);
1639
1763
  }
1640
1764
  }
1641
- var PropertyAccess$0 = $S($E($C(QuestionMark, NonNullAssertion)), Dot, $C(IdentifierName, PrivateIdentifier));
1765
+ var PropertyAccess$0 = $TS($S($E($C(QuestionMark, NonNullAssertion)), Dot, $C(IdentifierName, PrivateIdentifier)), function($skip, $loc, $0, $1, $2, $3) {
1766
+ var id = $3;
1767
+ id.type = "PropertyAccess";
1768
+ id.children.unshift($2);
1769
+ if ($1)
1770
+ id.children.unshift($1);
1771
+ return id;
1772
+ });
1642
1773
  function PropertyAccess(state) {
1643
1774
  if (state.verbose)
1644
1775
  console.log("ENTER:", "PropertyAccess");
@@ -1648,7 +1779,7 @@ var Civet = (() => {
1648
1779
  return PropertyAccess$0(state);
1649
1780
  }
1650
1781
  }
1651
- var SuperProperty$0 = $S($EXPECT($L13, fail, 'SuperProperty "super["'), Expression, __, CloseBracket);
1782
+ var SuperProperty$0 = $S($EXPECT($L14, fail, 'SuperProperty "super["'), ExtendedExpression, __, CloseBracket);
1652
1783
  function SuperProperty(state) {
1653
1784
  if (state.verbose)
1654
1785
  console.log("ENTER:", "SuperProperty");
@@ -1659,7 +1790,7 @@ var Civet = (() => {
1659
1790
  }
1660
1791
  }
1661
1792
  var MetaProperty$0 = $S(New, Dot, Target);
1662
- var MetaProperty$1 = $TV($EXPECT($L14, fail, 'MetaProperty "import.meta"'), function($skip, $loc, $0, $1) {
1793
+ var MetaProperty$1 = $TV($EXPECT($L15, fail, 'MetaProperty "import.meta"'), function($skip, $loc, $0, $1) {
1663
1794
  return { $loc, token: $1 };
1664
1795
  });
1665
1796
  function MetaProperty(state) {
@@ -1671,7 +1802,11 @@ var Civet = (() => {
1671
1802
  }
1672
1803
  var Parameters$0 = NonEmptyParameters;
1673
1804
  var Parameters$1 = $TV($EXPECT($L0, fail, 'Parameters ""'), function($skip, $loc, $0, $1) {
1674
- return { $loc, token: "()" };
1805
+ return {
1806
+ type: "Parameters",
1807
+ children: [{ $loc, token: "()" }],
1808
+ names: []
1809
+ };
1675
1810
  });
1676
1811
  function Parameters(state) {
1677
1812
  if (state.tokenize) {
@@ -1680,7 +1815,13 @@ var Civet = (() => {
1680
1815
  return Parameters$0(state) || Parameters$1(state);
1681
1816
  }
1682
1817
  }
1683
- var NonEmptyParameters$0 = $S($E(TypeParameters), OpenParen, $Q(ParameterElement), $E(FunctionRestParameter), __, CloseParen);
1818
+ var NonEmptyParameters$0 = $TS($S($E(TypeParameters), OpenParen, $Q(ParameterElement), $E(FunctionRestParameter), __, CloseParen), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6) {
1819
+ return {
1820
+ type: "Parameters",
1821
+ children: $0,
1822
+ names: $3.flatMap((p) => p.names)
1823
+ };
1824
+ });
1684
1825
  function NonEmptyParameters(state) {
1685
1826
  if (state.verbose)
1686
1827
  console.log("ENTER:", "NonEmptyParameters");
@@ -1700,7 +1841,13 @@ var Civet = (() => {
1700
1841
  return FunctionRestParameter$0(state);
1701
1842
  }
1702
1843
  }
1703
- var ParameterElement$0 = $S(__, $C(BindingIdentifier, BindingPattern), $E(TypeSuffix), $E(Initializer), ParameterElementDelimiter);
1844
+ var ParameterElement$0 = $TS($S($C(BindingIdentifier, BindingPattern), $E(TypeSuffix), $E(Initializer), ParameterElementDelimiter), function($skip, $loc, $0, $1, $2, $3, $4) {
1845
+ return {
1846
+ type: "Parameter",
1847
+ children: $0,
1848
+ names: $1.names
1849
+ };
1850
+ });
1704
1851
  function ParameterElement(state) {
1705
1852
  if (state.verbose)
1706
1853
  console.log("ENTER:", "ParameterElement");
@@ -1711,7 +1858,7 @@ var Civet = (() => {
1711
1858
  }
1712
1859
  }
1713
1860
  var ParameterElementDelimiter$0 = $S($Q(_), Comma);
1714
- var ParameterElementDelimiter$1 = $Y($S(__, $EXPECT($L15, fail, 'ParameterElementDelimiter ")"')));
1861
+ var ParameterElementDelimiter$1 = $Y($S(__, $EXPECT($L16, fail, 'ParameterElementDelimiter ")"')));
1715
1862
  var ParameterElementDelimiter$2 = $TV($Y(EOS), function($skip, $loc, $0, $1) {
1716
1863
  return { $loc, token: "," };
1717
1864
  });
@@ -1722,7 +1869,10 @@ var Civet = (() => {
1722
1869
  return ParameterElementDelimiter$0(state) || ParameterElementDelimiter$1(state) || ParameterElementDelimiter$2(state);
1723
1870
  }
1724
1871
  }
1725
- var BindingIdentifier$0 = $S(__, Identifier);
1872
+ var BindingIdentifier$0 = $TS($S(__, Identifier), function($skip, $loc, $0, $1, $2) {
1873
+ $2.children.unshift($1);
1874
+ return $2;
1875
+ });
1726
1876
  function BindingIdentifier(state) {
1727
1877
  if (state.verbose)
1728
1878
  console.log("ENTER:", "BindingIdentifier");
@@ -1732,8 +1882,16 @@ var Civet = (() => {
1732
1882
  return BindingIdentifier$0(state);
1733
1883
  }
1734
1884
  }
1735
- var BindingPattern$0 = $S(__, ObjectBindingPattern);
1736
- var BindingPattern$1 = $S(__, ArrayBindingPattern);
1885
+ var BindingPattern$0 = $TS($S(__, ObjectBindingPattern), function($skip, $loc, $0, $1, $2) {
1886
+ var p = $2;
1887
+ p.children.unshift($1);
1888
+ return p;
1889
+ });
1890
+ var BindingPattern$1 = $TS($S(__, ArrayBindingPattern), function($skip, $loc, $0, $1, $2) {
1891
+ var p = $2;
1892
+ p.children.unshift($1);
1893
+ return p;
1894
+ });
1737
1895
  function BindingPattern(state) {
1738
1896
  if (state.tokenize) {
1739
1897
  return $TOKEN("BindingPattern", state, BindingPattern$0(state) || BindingPattern$1(state));
@@ -1741,32 +1899,111 @@ var Civet = (() => {
1741
1899
  return BindingPattern$0(state) || BindingPattern$1(state);
1742
1900
  }
1743
1901
  }
1744
- var ObjectBindingPattern$0 = $S(OpenBrace, $Y(EOS), NestedBindingProperties, __, CloseBrace);
1745
- var ObjectBindingPattern$1 = $S(OpenBrace, $Q(BindingProperty), $E($S(__, BindingRestProperty)), __, CloseBrace);
1902
+ var ObjectBindingPattern$0 = $TS($S(OpenBrace, ObjectBindingPatternContent, __, CloseBrace), function($skip, $loc, $0, $1, $2, $3, $4) {
1903
+ var c = $2;
1904
+ c.children.unshift($1);
1905
+ c.children.push($3, $4);
1906
+ return c;
1907
+ });
1746
1908
  function ObjectBindingPattern(state) {
1909
+ if (state.verbose)
1910
+ console.log("ENTER:", "ObjectBindingPattern");
1911
+ if (state.tokenize) {
1912
+ return $TOKEN("ObjectBindingPattern", state, ObjectBindingPattern$0(state));
1913
+ } else {
1914
+ return ObjectBindingPattern$0(state);
1915
+ }
1916
+ }
1917
+ var ObjectBindingPatternContent$0 = $T($S($Y(EOS), NestedBindingProperties), function(value) {
1918
+ return value[1];
1919
+ });
1920
+ var ObjectBindingPatternContent$1 = $TS($S($Q(BindingProperty), $E($S(__, BindingRestProperty))), function($skip, $loc, $0, $1, $2) {
1921
+ var props = $1;
1922
+ var rest = $2;
1923
+ const names = props.flatMap((p) => p.names);
1924
+ if (rest) {
1925
+ props.push(...rest);
1926
+ names.push(...rest[1].names);
1927
+ }
1928
+ return {
1929
+ type: "BindingPattern",
1930
+ names,
1931
+ children: props
1932
+ };
1933
+ });
1934
+ function ObjectBindingPatternContent(state) {
1747
1935
  if (state.tokenize) {
1748
- return $TOKEN("ObjectBindingPattern", state, ObjectBindingPattern$0(state) || ObjectBindingPattern$1(state));
1936
+ return $TOKEN("ObjectBindingPatternContent", state, ObjectBindingPatternContent$0(state) || ObjectBindingPatternContent$1(state));
1749
1937
  } else {
1750
- return ObjectBindingPattern$0(state) || ObjectBindingPattern$1(state);
1938
+ return ObjectBindingPatternContent$0(state) || ObjectBindingPatternContent$1(state);
1751
1939
  }
1752
1940
  }
1753
- var ArrayBindingPattern$0 = $S(OpenBracket, $Y(EOS), NestedBindingElements, __, CloseBracket);
1754
- var ArrayBindingPattern$1 = $S(OpenBracket, $Q($C(BindingElement, Elision)), $E($S(__, BindingRestElement)), __, CloseBracket);
1941
+ var ArrayBindingPattern$0 = $TS($S(OpenBracket, ArrayBindingPatternContent, __, CloseBracket), function($skip, $loc, $0, $1, $2, $3, $4) {
1942
+ var c = $2;
1943
+ return {
1944
+ type: "BindingPattern",
1945
+ names: c.names,
1946
+ children: $0
1947
+ };
1948
+ });
1755
1949
  function ArrayBindingPattern(state) {
1950
+ if (state.verbose)
1951
+ console.log("ENTER:", "ArrayBindingPattern");
1952
+ if (state.tokenize) {
1953
+ return $TOKEN("ArrayBindingPattern", state, ArrayBindingPattern$0(state));
1954
+ } else {
1955
+ return ArrayBindingPattern$0(state);
1956
+ }
1957
+ }
1958
+ var ArrayBindingPatternContent$0 = $T($S($Y(EOS), NestedBindingElements), function(value) {
1959
+ return value[1];
1960
+ });
1961
+ var ArrayBindingPatternContent$1 = $TS($S($Q($C(BindingElement, Elision)), $E($S(__, BindingRestElement))), function($skip, $loc, $0, $1, $2) {
1962
+ var props = $1;
1963
+ var rest = $2;
1964
+ const names = props.flatMap((p) => p.names || []);
1965
+ if (rest) {
1966
+ props.push(...rest);
1967
+ names.push(...rest[1].names);
1968
+ }
1969
+ return {
1970
+ type: "BindingPattern",
1971
+ names,
1972
+ children: props
1973
+ };
1974
+ });
1975
+ function ArrayBindingPatternContent(state) {
1976
+ if (state.tokenize) {
1977
+ return $TOKEN("ArrayBindingPatternContent", state, ArrayBindingPatternContent$0(state) || ArrayBindingPatternContent$1(state));
1978
+ } else {
1979
+ return ArrayBindingPatternContent$0(state) || ArrayBindingPatternContent$1(state);
1980
+ }
1981
+ }
1982
+ var Elision$0 = $S(__, Comma);
1983
+ function Elision(state) {
1984
+ if (state.verbose)
1985
+ console.log("ENTER:", "Elision");
1756
1986
  if (state.tokenize) {
1757
- return $TOKEN("ArrayBindingPattern", state, ArrayBindingPattern$0(state) || ArrayBindingPattern$1(state));
1987
+ return $TOKEN("Elision", state, Elision$0(state));
1758
1988
  } else {
1759
- return ArrayBindingPattern$0(state) || ArrayBindingPattern$1(state);
1989
+ return Elision$0(state);
1760
1990
  }
1761
1991
  }
1762
- var NestedBindingProperties$0 = $TS($S(PushIndent, $Q(NestedBindingProperty), $E($S(Nested, BindingRestProperty)), PopIndent), function($skip, $loc, $0, $1, $2, $3, $4) {
1992
+ var NestedBindingProperties$0 = $TS($S(PushIndent, $Q(NestedBindingProperty), $E(NestedBindingRestProperty), PopIndent), function($skip, $loc, $0, $1, $2, $3, $4) {
1763
1993
  var props = $2;
1764
1994
  var rest = $3;
1765
- if (!props.length)
1995
+ if (!(props.length || rest))
1766
1996
  return $skip;
1767
- if (rest)
1997
+ const names = props.flatMap((p) => p.names);
1998
+ if (rest) {
1768
1999
  props.push(rest);
1769
- return props;
2000
+ names.push(...rest.names);
2001
+ }
2002
+ return {
2003
+ type: "BindingPattern",
2004
+ children: props,
2005
+ names
2006
+ };
1770
2007
  });
1771
2008
  function NestedBindingProperties(state) {
1772
2009
  if (state.verbose)
@@ -1777,7 +2014,10 @@ var Civet = (() => {
1777
2014
  return NestedBindingProperties$0(state);
1778
2015
  }
1779
2016
  }
1780
- var NestedBindingProperty$0 = $S(Nested, BindingProperty);
2017
+ var NestedBindingProperty$0 = $TS($S(Nested, BindingProperty), function($skip, $loc, $0, $1, $2) {
2018
+ $2.children.unshift($1);
2019
+ return $2;
2020
+ });
1781
2021
  function NestedBindingProperty(state) {
1782
2022
  if (state.verbose)
1783
2023
  console.log("ENTER:", "NestedBindingProperty");
@@ -1787,8 +2027,22 @@ var Civet = (() => {
1787
2027
  return NestedBindingProperty$0(state);
1788
2028
  }
1789
2029
  }
1790
- var BindingProperty$0 = $S(__, PropertyName, __, Colon, $C(BindingIdentifier, BindingPattern), $E(Initializer), ObjectPropertyDelimiter);
1791
- var BindingProperty$1 = $S(BindingIdentifier, $E(Initializer), ObjectPropertyDelimiter);
2030
+ var BindingProperty$0 = $TS($S(__, PropertyName, __, Colon, $C(BindingIdentifier, BindingPattern), $E(Initializer), ObjectPropertyDelimiter), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7) {
2031
+ var b = $5;
2032
+ return {
2033
+ type: "BindingPattern",
2034
+ names: b.names,
2035
+ children: $0
2036
+ };
2037
+ });
2038
+ var BindingProperty$1 = $TS($S(BindingIdentifier, $E(Initializer), ObjectPropertyDelimiter), function($skip, $loc, $0, $1, $2, $3) {
2039
+ var b = $1;
2040
+ return {
2041
+ type: "BindingPattern",
2042
+ names: b.names,
2043
+ children: $0
2044
+ };
2045
+ });
1792
2046
  function BindingProperty(state) {
1793
2047
  if (state.tokenize) {
1794
2048
  return $TOKEN("BindingProperty", state, BindingProperty$0(state) || BindingProperty$1(state));
@@ -1796,7 +2050,23 @@ var Civet = (() => {
1796
2050
  return BindingProperty$0(state) || BindingProperty$1(state);
1797
2051
  }
1798
2052
  }
1799
- var BindingRestProperty$0 = $S(DotDotDot, BindingIdentifier);
2053
+ var NestedBindingRestProperty$0 = $TS($S(Nested, BindingRestProperty), function($skip, $loc, $0, $1, $2) {
2054
+ $2.children.unshift($1);
2055
+ return $2;
2056
+ });
2057
+ function NestedBindingRestProperty(state) {
2058
+ if (state.verbose)
2059
+ console.log("ENTER:", "NestedBindingRestProperty");
2060
+ if (state.tokenize) {
2061
+ return $TOKEN("NestedBindingRestProperty", state, NestedBindingRestProperty$0(state));
2062
+ } else {
2063
+ return NestedBindingRestProperty$0(state);
2064
+ }
2065
+ }
2066
+ var BindingRestProperty$0 = $TS($S(DotDotDot, BindingIdentifier), function($skip, $loc, $0, $1, $2) {
2067
+ $2.children.unshift($1);
2068
+ return $2;
2069
+ });
1800
2070
  function BindingRestProperty(state) {
1801
2071
  if (state.verbose)
1802
2072
  console.log("ENTER:", "BindingRestProperty");
@@ -1809,11 +2079,18 @@ var Civet = (() => {
1809
2079
  var NestedBindingElements$0 = $TS($S(PushIndent, $Q(NestedBindingElement), $E($S(Nested, BindingRestElement)), PopIndent), function($skip, $loc, $0, $1, $2, $3, $4) {
1810
2080
  var props = $2;
1811
2081
  var rest = $3;
1812
- if (!props.length)
2082
+ if (!(props.length || rest))
1813
2083
  return $skip;
1814
- if (rest)
1815
- props.push(rest);
1816
- return props;
2084
+ const names = props.flatMap((p) => p.names);
2085
+ if (rest) {
2086
+ props.push(...rest);
2087
+ names.push(...rest[1].names);
2088
+ }
2089
+ return {
2090
+ type: "BindingPattern",
2091
+ children: props,
2092
+ names
2093
+ };
1817
2094
  });
1818
2095
  function NestedBindingElements(state) {
1819
2096
  if (state.verbose)
@@ -1824,7 +2101,10 @@ var Civet = (() => {
1824
2101
  return NestedBindingElements$0(state);
1825
2102
  }
1826
2103
  }
1827
- var NestedBindingElement$0 = $S(Nested, BindingElement);
2104
+ var NestedBindingElement$0 = $TS($S(Nested, BindingElement), function($skip, $loc, $0, $1, $2) {
2105
+ $2.children.unshift($1);
2106
+ return $2;
2107
+ });
1828
2108
  function NestedBindingElement(state) {
1829
2109
  if (state.verbose)
1830
2110
  console.log("ENTER:", "NestedBindingElement");
@@ -1834,7 +2114,14 @@ var Civet = (() => {
1834
2114
  return NestedBindingElement$0(state);
1835
2115
  }
1836
2116
  }
1837
- var BindingElement$0 = $S(__, $C(BindingIdentifier, BindingPattern), $E(Initializer), ArrayElementDelimiter);
2117
+ var BindingElement$0 = $TS($S($C(BindingIdentifier, BindingPattern), $E(Initializer), ArrayElementDelimiter), function($skip, $loc, $0, $1, $2, $3) {
2118
+ var binding = $1;
2119
+ return {
2120
+ type: "BindingPattern",
2121
+ names: binding.names,
2122
+ children: $0
2123
+ };
2124
+ });
1838
2125
  function BindingElement(state) {
1839
2126
  if (state.verbose)
1840
2127
  console.log("ENTER:", "BindingElement");
@@ -1844,7 +2131,11 @@ var Civet = (() => {
1844
2131
  return BindingElement$0(state);
1845
2132
  }
1846
2133
  }
1847
- var BindingRestElement$0 = $S(DotDotDot, __, $C(BindingIdentifier, BindingPattern));
2134
+ var BindingRestElement$0 = $TS($S(DotDotDot, $C(BindingIdentifier, BindingPattern)), function($skip, $loc, $0, $1, $2) {
2135
+ var binding = $2;
2136
+ binding.children.unshift($1);
2137
+ return binding;
2138
+ });
1848
2139
  function BindingRestElement(state) {
1849
2140
  if (state.verbose)
1850
2141
  console.log("ENTER:", "BindingRestElement");
@@ -1864,7 +2155,21 @@ var Civet = (() => {
1864
2155
  return FunctionDeclaration$0(state);
1865
2156
  }
1866
2157
  }
1867
- var FunctionSignature$0 = $S($E($S(Async, __)), Function, $E($S(Star, __)), $E(BindingIdentifier), __, Parameters, $E(ReturnTypeSuffix));
2158
+ 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) {
2159
+ var id = $4;
2160
+ var parameters = $6;
2161
+ id = id || [];
2162
+ $0[3] = id;
2163
+ return {
2164
+ type: "FunctionSignature",
2165
+ id,
2166
+ parameters,
2167
+ returnType: $7,
2168
+ ts: false,
2169
+ block: null,
2170
+ children: $0
2171
+ };
2172
+ });
1868
2173
  function FunctionSignature(state) {
1869
2174
  if (state.verbose)
1870
2175
  console.log("ENTER:", "FunctionSignature");
@@ -1874,25 +2179,28 @@ var Civet = (() => {
1874
2179
  return FunctionSignature$0(state);
1875
2180
  }
1876
2181
  }
1877
- var FunctionExpression$0 = ThinArrowFunction;
1878
- var FunctionExpression$1 = $TS($S(FunctionSignature, $E(BracedBlock)), function($skip, $loc, $0, $1, $2) {
2182
+ var FunctionExpression$0 = $TS($S(FunctionSignature, $E(BracedBlock)), function($skip, $loc, $0, $1, $2) {
2183
+ var signature = $1;
1879
2184
  var block = $2;
1880
2185
  if (!block) {
1881
- return {
1882
- type: "FunctionDeclaration",
1883
- ts: true,
1884
- children: $1
1885
- };
2186
+ signature.ts = true;
2187
+ return signature;
1886
2188
  }
1887
- const suffix = $1[$1.length - 1];
2189
+ const suffix = signature.returnType;
1888
2190
  const isVoid = suffix?.children?.[1]?.[0]?.[1]?.token === "void";
1889
2191
  if (module.config.implicitReturns && !isVoid) {
1890
2192
  module.addImplicitReturns(block);
1891
2193
  }
1892
- $1.push(block);
2194
+ $1.block = block;
2195
+ $1.children.push(block);
2196
+ $1.type = "FunctionExpression";
2197
+ return $1;
2198
+ });
2199
+ var FunctionExpression$1 = $TS($S(Ampersand, $P(MemberExpressionRest)), function($skip, $loc, $0, $1, $2) {
2200
+ $1.token = "$ => $";
1893
2201
  return {
1894
2202
  type: "FunctionExpression",
1895
- children: $1
2203
+ children: [$1, $2]
1896
2204
  };
1897
2205
  });
1898
2206
  function FunctionExpression(state) {
@@ -1903,7 +2211,7 @@ var Civet = (() => {
1903
2211
  }
1904
2212
  }
1905
2213
  var ThinArrowFunction$0 = $TS($S(Parameters, $E(ReturnTypeSuffix), $Q(_), Arrow, BracedOrEmptyBlock), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
1906
- var params = $1;
2214
+ var parameters = $1;
1907
2215
  var suffix = $2;
1908
2216
  var arrow = $4;
1909
2217
  var block = $5;
@@ -1911,11 +2219,18 @@ var Civet = (() => {
1911
2219
  if (module.config.implicitReturns && !isVoid) {
1912
2220
  block = module.addImplicitReturns(block);
1913
2221
  }
2222
+ const id = [];
1914
2223
  return {
1915
2224
  type: "FunctionExpression",
2225
+ id,
2226
+ parameters,
2227
+ returnType: suffix,
2228
+ ts: false,
2229
+ block,
1916
2230
  children: [
1917
2231
  { $loc: arrow.$loc, token: "function" },
1918
- params,
2232
+ id,
2233
+ parameters,
1919
2234
  suffix,
1920
2235
  block
1921
2236
  ]
@@ -1930,7 +2245,7 @@ var Civet = (() => {
1930
2245
  return ThinArrowFunction$0(state);
1931
2246
  }
1932
2247
  }
1933
- var Arrow$0 = $TV($EXPECT($L16, fail, 'Arrow "->"'), function($skip, $loc, $0, $1) {
2248
+ var Arrow$0 = $TV($EXPECT($L17, fail, 'Arrow "->"'), function($skip, $loc, $0, $1) {
1934
2249
  return { $loc, token: $1 };
1935
2250
  });
1936
2251
  function Arrow(state) {
@@ -1942,16 +2257,20 @@ var Civet = (() => {
1942
2257
  return Arrow$0(state);
1943
2258
  }
1944
2259
  }
1945
- var Block$0 = $T($S(__, OpenBrace, EOS, NestedBlockExpressions, __, CloseBrace), function(value) {
2260
+ var Block$0 = $T($S(__, OpenBrace, EOS, NestedBlockStatements, __, CloseBrace), function(value) {
1946
2261
  var exps = value[3];
1947
2262
  return { "type": "BlockStatement", "expressions": exps, "children": value };
1948
2263
  });
1949
- var Block$1 = $T($S(InsertOpenBrace, EOS, NestedBlockExpressions, InsertNewline, InsertIndent, InsertCloseBrace), function(value) {
2264
+ var Block$1 = $T($S(InsertOpenBrace, EOS, NestedBlockStatements, InsertNewline, InsertIndent, InsertCloseBrace), function(value) {
1950
2265
  var exps = value[2];
1951
2266
  return { "type": "BlockStatement", "expressions": exps, "children": value };
1952
2267
  });
1953
- var Block$2 = Statement;
1954
- var Block$3 = $S(__, Statement);
2268
+ var Block$2 = $T($S($E(Then), Statement), function(value) {
2269
+ return value[1];
2270
+ });
2271
+ var Block$3 = $T($S($E(Then), __, Statement), function(value) {
2272
+ return [value[1], value[2]];
2273
+ });
1955
2274
  function Block(state) {
1956
2275
  if (state.tokenize) {
1957
2276
  return $TOKEN("Block", state, Block$0(state) || Block$1(state) || Block$2(state) || Block$3(state));
@@ -1980,11 +2299,11 @@ var Civet = (() => {
1980
2299
  return EmptyBlock$0(state);
1981
2300
  }
1982
2301
  }
1983
- var BracedBlock$0 = $T($S(__, OpenBrace, EOS, NestedBlockExpressions, __, CloseBrace), function(value) {
1984
- var exps = value[3];
2302
+ var BracedBlock$0 = $T($S($Q(TrailingComment), OpenBrace, BracedContent, __, CloseBrace), function(value) {
2303
+ var exps = value[2];
1985
2304
  return { "type": "BlockStatement", "expressions": exps, "children": value };
1986
2305
  });
1987
- var BracedBlock$1 = $T($S(InsertOpenBrace, EOS, NestedBlockExpressions, InsertNewline, InsertIndent, InsertCloseBrace), function(value) {
2306
+ var BracedBlock$1 = $T($S(InsertOpenBrace, EOS, NestedBlockStatements, InsertNewline, InsertIndent, InsertCloseBrace), function(value) {
1988
2307
  var exps = value[2];
1989
2308
  return { "type": "BlockStatement", "expressions": exps, "children": value };
1990
2309
  });
@@ -2003,58 +2322,69 @@ var Civet = (() => {
2003
2322
  return BracedBlock$0(state) || BracedBlock$1(state) || BracedBlock$2(state);
2004
2323
  }
2005
2324
  }
2006
- 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) {
2007
- var exp = $2;
2008
- if (exp)
2009
- return exp;
2010
- return $skip;
2325
+ var BracedContent$0 = $T($S($Y(EOS), NestedBlockStatements), function(value) {
2326
+ return value[1];
2011
2327
  });
2012
- function SingleNestedExpression(state) {
2013
- if (state.verbose)
2014
- console.log("ENTER:", "SingleNestedExpression");
2328
+ var BracedContent$1 = $S($Q(TrailingComment), Statement);
2329
+ function BracedContent(state) {
2015
2330
  if (state.tokenize) {
2016
- return $TOKEN("SingleNestedExpression", state, SingleNestedExpression$0(state));
2331
+ return $TOKEN("BracedContent", state, BracedContent$0(state) || BracedContent$1(state));
2017
2332
  } else {
2018
- return SingleNestedExpression$0(state);
2333
+ return BracedContent$0(state) || BracedContent$1(state);
2019
2334
  }
2020
2335
  }
2021
- var NestedBlockExpressions$0 = $TS($S(PushIndent, $Q(BlockExpression), PopIndent), function($skip, $loc, $0, $1, $2, $3) {
2022
- var exps = $2;
2023
- if (!exps.length)
2336
+ var NestedBlockStatements$0 = $TS($S(PushIndent, $Q(NestedBlockStatement), PopIndent), function($skip, $loc, $0, $1, $2, $3) {
2337
+ var statements = $2;
2338
+ if (!statements.length)
2024
2339
  return $skip;
2025
- return exps;
2340
+ return statements;
2026
2341
  });
2027
- function NestedBlockExpressions(state) {
2342
+ function NestedBlockStatements(state) {
2028
2343
  if (state.verbose)
2029
- console.log("ENTER:", "NestedBlockExpressions");
2344
+ console.log("ENTER:", "NestedBlockStatements");
2030
2345
  if (state.tokenize) {
2031
- return $TOKEN("NestedBlockExpressions", state, NestedBlockExpressions$0(state));
2346
+ return $TOKEN("NestedBlockStatements", state, NestedBlockStatements$0(state));
2032
2347
  } else {
2033
- return NestedBlockExpressions$0(state);
2348
+ return NestedBlockStatements$0(state);
2034
2349
  }
2035
2350
  }
2036
- var BlockExpression$0 = $S(Nested, StatementListItem, StatementDelimiter);
2037
- function BlockExpression(state) {
2351
+ var NestedBlockStatement$0 = $S(Nested, StatementListItem, StatementDelimiter);
2352
+ function NestedBlockStatement(state) {
2038
2353
  if (state.verbose)
2039
- console.log("ENTER:", "BlockExpression");
2354
+ console.log("ENTER:", "NestedBlockStatement");
2040
2355
  if (state.tokenize) {
2041
- return $TOKEN("BlockExpression", state, BlockExpression$0(state));
2356
+ return $TOKEN("NestedBlockStatement", state, NestedBlockStatement$0(state));
2042
2357
  } else {
2043
- return BlockExpression$0(state);
2358
+ return NestedBlockStatement$0(state);
2044
2359
  }
2045
2360
  }
2046
- var Literal$0 = NullLiteral;
2047
- var Literal$1 = BooleanLiteral;
2048
- var Literal$2 = NumericLiteral;
2049
- var Literal$3 = StringLiteral;
2361
+ var Literal$0 = $TS($S(LiteralContent), function($skip, $loc, $0, $1) {
2362
+ return {
2363
+ type: "Literal",
2364
+ children: $0
2365
+ };
2366
+ });
2050
2367
  function Literal(state) {
2368
+ if (state.verbose)
2369
+ console.log("ENTER:", "Literal");
2370
+ if (state.tokenize) {
2371
+ return $TOKEN("Literal", state, Literal$0(state));
2372
+ } else {
2373
+ return Literal$0(state);
2374
+ }
2375
+ }
2376
+ var LiteralContent$0 = NullLiteral;
2377
+ var LiteralContent$1 = BooleanLiteral;
2378
+ var LiteralContent$2 = NumericLiteral;
2379
+ var LiteralContent$3 = StringLiteral;
2380
+ function LiteralContent(state) {
2051
2381
  if (state.tokenize) {
2052
- return $TOKEN("Literal", state, Literal$0(state) || Literal$1(state) || Literal$2(state) || Literal$3(state));
2382
+ return $TOKEN("LiteralContent", state, LiteralContent$0(state) || LiteralContent$1(state) || LiteralContent$2(state) || LiteralContent$3(state));
2053
2383
  } else {
2054
- return Literal$0(state) || Literal$1(state) || Literal$2(state) || Literal$3(state);
2384
+ return LiteralContent$0(state) || LiteralContent$1(state) || LiteralContent$2(state) || LiteralContent$3(state);
2055
2385
  }
2056
2386
  }
2057
- var NullLiteral$0 = $TV($EXPECT($L17, fail, 'NullLiteral "null"'), function($skip, $loc, $0, $1) {
2387
+ var NullLiteral$0 = $TV($EXPECT($L18, fail, 'NullLiteral "null"'), function($skip, $loc, $0, $1) {
2058
2388
  return { $loc, token: $1 };
2059
2389
  });
2060
2390
  function NullLiteral(state) {
@@ -2067,7 +2397,7 @@ var Civet = (() => {
2067
2397
  }
2068
2398
  }
2069
2399
  var BooleanLiteral$0 = CoffeeScriptBooleanLiteral;
2070
- var BooleanLiteral$1 = $TV($C($EXPECT($L18, fail, 'BooleanLiteral "true"'), $EXPECT($L19, fail, 'BooleanLiteral "false"')), function($skip, $loc, $0, $1) {
2400
+ var BooleanLiteral$1 = $TV($C($EXPECT($L19, fail, 'BooleanLiteral "true"'), $EXPECT($L20, fail, 'BooleanLiteral "false"')), function($skip, $loc, $0, $1) {
2071
2401
  return { $loc, token: $1 };
2072
2402
  });
2073
2403
  function BooleanLiteral(state) {
@@ -2077,10 +2407,10 @@ var Civet = (() => {
2077
2407
  return BooleanLiteral$0(state) || BooleanLiteral$1(state);
2078
2408
  }
2079
2409
  }
2080
- var CoffeeScriptBooleanLiteral$0 = $TV($C($EXPECT($L20, fail, 'CoffeeScriptBooleanLiteral "yes"'), $EXPECT($L21, fail, 'CoffeeScriptBooleanLiteral "on"')), function($skip, $loc, $0, $1) {
2410
+ var CoffeeScriptBooleanLiteral$0 = $TV($C($EXPECT($L21, fail, 'CoffeeScriptBooleanLiteral "yes"'), $EXPECT($L22, fail, 'CoffeeScriptBooleanLiteral "on"')), function($skip, $loc, $0, $1) {
2081
2411
  return { $loc, token: "true" };
2082
2412
  });
2083
- var CoffeeScriptBooleanLiteral$1 = $TV($C($EXPECT($L22, fail, 'CoffeeScriptBooleanLiteral "no"'), $EXPECT($L23, fail, 'CoffeeScriptBooleanLiteral "off"')), function($skip, $loc, $0, $1) {
2413
+ var CoffeeScriptBooleanLiteral$1 = $TV($C($EXPECT($L23, fail, 'CoffeeScriptBooleanLiteral "no"'), $EXPECT($L24, fail, 'CoffeeScriptBooleanLiteral "off"')), function($skip, $loc, $0, $1) {
2084
2414
  return { $loc, token: "false" };
2085
2415
  });
2086
2416
  function CoffeeScriptBooleanLiteral(state) {
@@ -2090,7 +2420,7 @@ var Civet = (() => {
2090
2420
  return CoffeeScriptBooleanLiteral$0(state) || CoffeeScriptBooleanLiteral$1(state);
2091
2421
  }
2092
2422
  }
2093
- var Comma$0 = $TV($EXPECT($L24, fail, 'Comma ","'), function($skip, $loc, $0, $1) {
2423
+ var Comma$0 = $TV($EXPECT($L25, fail, 'Comma ","'), function($skip, $loc, $0, $1) {
2094
2424
  return { $loc, token: $1 };
2095
2425
  });
2096
2426
  function Comma(state) {
@@ -2117,8 +2447,12 @@ var Civet = (() => {
2117
2447
  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) {
2118
2448
  return {
2119
2449
  type: "Identifier",
2120
- $loc,
2121
- token: $0
2450
+ name: $0,
2451
+ names: [$0],
2452
+ children: [{
2453
+ $loc,
2454
+ token: $0
2455
+ }]
2122
2456
  };
2123
2457
  });
2124
2458
  function IdentifierName(state) {
@@ -2140,19 +2474,44 @@ var Civet = (() => {
2140
2474
  return IdentifierReference$0(state);
2141
2475
  }
2142
2476
  }
2143
- var ArrayLiteral$0 = $S(OpenBracket, NestedElementList, __, CloseBracket);
2144
- var ArrayLiteral$1 = $S(OpenBracket, ElementList, __, CloseBracket);
2477
+ var ArrayLiteral$0 = $TS($S(OpenBracket, ArrayLiteralContent, __, CloseBracket), function($skip, $loc, $0, $1, $2, $3, $4) {
2478
+ let children;
2479
+ if (Array.isArray($2)) {
2480
+ children = [$1, ...$2, ...$3, $4];
2481
+ } else {
2482
+ children = [$1, $2, ...$3, $4];
2483
+ }
2484
+ const names = children.flatMap((c) => {
2485
+ return c.names || [];
2486
+ });
2487
+ return {
2488
+ type: "ArrayExpression",
2489
+ children,
2490
+ names
2491
+ };
2492
+ });
2145
2493
  function ArrayLiteral(state) {
2494
+ if (state.verbose)
2495
+ console.log("ENTER:", "ArrayLiteral");
2146
2496
  if (state.tokenize) {
2147
- return $TOKEN("ArrayLiteral", state, ArrayLiteral$0(state) || ArrayLiteral$1(state));
2497
+ return $TOKEN("ArrayLiteral", state, ArrayLiteral$0(state));
2148
2498
  } else {
2149
- return ArrayLiteral$0(state) || ArrayLiteral$1(state);
2499
+ return ArrayLiteral$0(state);
2500
+ }
2501
+ }
2502
+ var ArrayLiteralContent$0 = NestedElementList;
2503
+ var ArrayLiteralContent$1 = ElementList;
2504
+ function ArrayLiteralContent(state) {
2505
+ if (state.tokenize) {
2506
+ return $TOKEN("ArrayLiteralContent", state, ArrayLiteralContent$0(state) || ArrayLiteralContent$1(state));
2507
+ } else {
2508
+ return ArrayLiteralContent$0(state) || ArrayLiteralContent$1(state);
2150
2509
  }
2151
2510
  }
2152
2511
  var NestedElementList$0 = $TS($S(PushIndent, $Q(NestedElement), PopIndent), function($skip, $loc, $0, $1, $2, $3) {
2153
2512
  var elements = $2;
2154
2513
  if (elements.length)
2155
- return elements;
2514
+ return elements.flat();
2156
2515
  return $skip;
2157
2516
  });
2158
2517
  function NestedElementList(state) {
@@ -2164,7 +2523,13 @@ var Civet = (() => {
2164
2523
  return NestedElementList$0(state);
2165
2524
  }
2166
2525
  }
2167
- var NestedElement$0 = $S(Nested, InlineElementList, ArrayElementDelimiter);
2526
+ var NestedElement$0 = $TS($S(Nested, ElementList, ArrayElementDelimiter), function($skip, $loc, $0, $1, $2, $3) {
2527
+ const result = [...$1, ...$2];
2528
+ if ($3) {
2529
+ result.push($3);
2530
+ }
2531
+ return result;
2532
+ });
2168
2533
  function NestedElement(state) {
2169
2534
  if (state.verbose)
2170
2535
  console.log("ENTER:", "NestedElement");
@@ -2175,7 +2540,7 @@ var Civet = (() => {
2175
2540
  }
2176
2541
  }
2177
2542
  var ArrayElementDelimiter$0 = $S($Q(_), Comma);
2178
- var ArrayElementDelimiter$1 = $Y($S(__, $EXPECT($L25, fail, 'ArrayElementDelimiter "]"')));
2543
+ var ArrayElementDelimiter$1 = $Y($S(__, $EXPECT($L26, fail, 'ArrayElementDelimiter "]"')));
2179
2544
  var ArrayElementDelimiter$2 = $TV($Y(EOS), function($skip, $loc, $0, $1) {
2180
2545
  return { $loc, token: "," };
2181
2546
  });
@@ -2186,7 +2551,15 @@ var Civet = (() => {
2186
2551
  return ArrayElementDelimiter$0(state) || ArrayElementDelimiter$1(state) || ArrayElementDelimiter$2(state);
2187
2552
  }
2188
2553
  }
2189
- var ElementList$0 = $S(ArrayElementExpression, $Q($S(__, Comma, __, ArrayElementExpression)));
2554
+ var ElementList$0 = $TS($S(ArrayElementExpression, $Q(ElementListRest)), function($skip, $loc, $0, $1, $2) {
2555
+ if ($2.length) {
2556
+ return [].concat($1 || [], ...$2);
2557
+ }
2558
+ if ($1) {
2559
+ return [].concat($1);
2560
+ }
2561
+ return [];
2562
+ });
2190
2563
  function ElementList(state) {
2191
2564
  if (state.verbose)
2192
2565
  console.log("ENTER:", "ElementList");
@@ -2196,17 +2569,28 @@ var Civet = (() => {
2196
2569
  return ElementList$0(state);
2197
2570
  }
2198
2571
  }
2199
- var InlineElementList$0 = $S(ArrayElementExpression, $Q($S($Q(_), Comma, $Q(_), ArrayElementExpression)));
2200
- function InlineElementList(state) {
2572
+ var ElementListRest$0 = $TS($S(__, Comma, __, ArrayElementExpression), function($skip, $loc, $0, $1, $2, $3, $4) {
2573
+ const result = [...$1, $2, ...$3];
2574
+ if ($4) {
2575
+ result.push($4);
2576
+ }
2577
+ return result;
2578
+ });
2579
+ function ElementListRest(state) {
2201
2580
  if (state.verbose)
2202
- console.log("ENTER:", "InlineElementList");
2581
+ console.log("ENTER:", "ElementListRest");
2203
2582
  if (state.tokenize) {
2204
- return $TOKEN("InlineElementList", state, InlineElementList$0(state));
2583
+ return $TOKEN("ElementListRest", state, ElementListRest$0(state));
2205
2584
  } else {
2206
- return InlineElementList$0(state);
2585
+ return ElementListRest$0(state);
2207
2586
  }
2208
2587
  }
2209
- var ArrayElementExpression$0 = $E($S($E($S(DotDotDot, __)), AssignmentExpression));
2588
+ var ArrayElementExpression$0 = $TV($E($S($E($S(DotDotDot, __)), ExtendedExpression)), function($skip, $loc, $0, $1) {
2589
+ if ($1 && !$1[0]) {
2590
+ return $1[1];
2591
+ }
2592
+ return $1;
2593
+ });
2210
2594
  function ArrayElementExpression(state) {
2211
2595
  if (state.verbose)
2212
2596
  console.log("ENTER:", "ArrayElementExpression");
@@ -2216,28 +2600,69 @@ var Civet = (() => {
2216
2600
  return ArrayElementExpression$0(state);
2217
2601
  }
2218
2602
  }
2219
- var Elision$0 = $S(__, Comma);
2220
- function Elision(state) {
2603
+ var ObjectLiteral$0 = BracedObjectLiteral;
2604
+ var ObjectLiteral$1 = NestedObjectLiteral;
2605
+ function ObjectLiteral(state) {
2606
+ if (state.tokenize) {
2607
+ return $TOKEN("ObjectLiteral", state, ObjectLiteral$0(state) || ObjectLiteral$1(state));
2608
+ } else {
2609
+ return ObjectLiteral$0(state) || ObjectLiteral$1(state);
2610
+ }
2611
+ }
2612
+ var BracedObjectLiteral$0 = $TS($S(OpenBrace, $E(BracedObjectLiteralContent), __, CloseBrace), function($skip, $loc, $0, $1, $2, $3, $4) {
2613
+ if ($2) {
2614
+ $2.unshift($1);
2615
+ if ($3.length) {
2616
+ $2.push(...$3);
2617
+ }
2618
+ $2.push($4);
2619
+ return {
2620
+ type: "ObjectExpression",
2621
+ children: $2,
2622
+ names: $2.flatMap((c) => {
2623
+ return c.names || [];
2624
+ })
2625
+ };
2626
+ }
2627
+ return {
2628
+ type: "ObjectExpression",
2629
+ children: [$1, ...$3, $4],
2630
+ names: []
2631
+ };
2632
+ });
2633
+ function BracedObjectLiteral(state) {
2221
2634
  if (state.verbose)
2222
- console.log("ENTER:", "Elision");
2635
+ console.log("ENTER:", "BracedObjectLiteral");
2223
2636
  if (state.tokenize) {
2224
- return $TOKEN("Elision", state, Elision$0(state));
2637
+ return $TOKEN("BracedObjectLiteral", state, BracedObjectLiteral$0(state));
2225
2638
  } else {
2226
- return Elision$0(state);
2639
+ return BracedObjectLiteral$0(state);
2227
2640
  }
2228
2641
  }
2229
- var ObjectLiteral$0 = $S(OpenBrace, $Y(EOS), NestedPropertyDefinitions, __, CloseBrace);
2230
- var ObjectLiteral$1 = $S(OpenBrace, __, PropertyDefinitionList, __, $E($S(Comma, __)), CloseBrace);
2231
- var ObjectLiteral$2 = $S(OpenBrace, __, CloseBrace);
2232
- var ObjectLiteral$3 = NestedObjectLiteral;
2233
- function ObjectLiteral(state) {
2642
+ var BracedObjectLiteralContent$0 = $T($S($Y(EOS), NestedPropertyDefinitions), function(value) {
2643
+ return value[1];
2644
+ });
2645
+ var BracedObjectLiteralContent$1 = $TS($S(__, PropertyDefinitionList, $E($S(__, Comma))), function($skip, $loc, $0, $1, $2, $3) {
2646
+ if ($1.length) {
2647
+ $2.splice(0, 0, ...$1);
2648
+ }
2649
+ if ($3) {
2650
+ $2.push($3);
2651
+ }
2652
+ return $2;
2653
+ });
2654
+ function BracedObjectLiteralContent(state) {
2234
2655
  if (state.tokenize) {
2235
- return $TOKEN("ObjectLiteral", state, ObjectLiteral$0(state) || ObjectLiteral$1(state) || ObjectLiteral$2(state) || ObjectLiteral$3(state));
2656
+ return $TOKEN("BracedObjectLiteralContent", state, BracedObjectLiteralContent$0(state) || BracedObjectLiteralContent$1(state));
2236
2657
  } else {
2237
- return ObjectLiteral$0(state) || ObjectLiteral$1(state) || ObjectLiteral$2(state) || ObjectLiteral$3(state);
2658
+ return BracedObjectLiteralContent$0(state) || BracedObjectLiteralContent$1(state);
2238
2659
  }
2239
2660
  }
2240
- var NestedObjectLiteral$0 = $S(InsertOpenBrace, $Y(EOS), NestedPropertyDefinitions, InsertNewline, InsertIndent, InsertCloseBrace);
2661
+ var NestedObjectLiteral$0 = $TS($S(InsertOpenBrace, $Y(EOS), NestedPropertyDefinitions, InsertNewline, InsertIndent, InsertCloseBrace), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6) {
2662
+ $3.unshift($1);
2663
+ $3.push($4, $5, $6);
2664
+ return $3;
2665
+ });
2241
2666
  function NestedObjectLiteral(state) {
2242
2667
  if (state.verbose)
2243
2668
  console.log("ENTER:", "NestedObjectLiteral");
@@ -2251,7 +2676,7 @@ var Civet = (() => {
2251
2676
  var defs = $2;
2252
2677
  if (!defs.length)
2253
2678
  return $skip;
2254
- return defs;
2679
+ return defs.flat();
2255
2680
  });
2256
2681
  function NestedPropertyDefinitions(state) {
2257
2682
  if (state.verbose)
@@ -2262,7 +2687,13 @@ var Civet = (() => {
2262
2687
  return NestedPropertyDefinitions$0(state);
2263
2688
  }
2264
2689
  }
2265
- var NestedPropertyDefinition$0 = $S(Nested, PropertyDefinition, ObjectPropertyDelimiter);
2690
+ var NestedPropertyDefinition$0 = $TS($S(Nested, PropertyDefinition, ObjectPropertyDelimiter), function($skip, $loc, $0, $1, $2, $3) {
2691
+ const result = [...$1, $2];
2692
+ if ($3) {
2693
+ result.push($3);
2694
+ }
2695
+ return result;
2696
+ });
2266
2697
  function NestedPropertyDefinition(state) {
2267
2698
  if (state.verbose)
2268
2699
  console.log("ENTER:", "NestedPropertyDefinition");
@@ -2273,7 +2704,7 @@ var Civet = (() => {
2273
2704
  }
2274
2705
  }
2275
2706
  var ObjectPropertyDelimiter$0 = $S($Q(_), Comma);
2276
- var ObjectPropertyDelimiter$1 = $Y($S(__, $EXPECT($L26, fail, 'ObjectPropertyDelimiter "}"')));
2707
+ var ObjectPropertyDelimiter$1 = $Y($S(__, $EXPECT($L27, fail, 'ObjectPropertyDelimiter "}"')));
2277
2708
  var ObjectPropertyDelimiter$2 = $TV($Y(EOS), function($skip, $loc, $0, $1) {
2278
2709
  return { $loc, token: "," };
2279
2710
  });
@@ -2284,7 +2715,15 @@ var Civet = (() => {
2284
2715
  return ObjectPropertyDelimiter$0(state) || ObjectPropertyDelimiter$1(state) || ObjectPropertyDelimiter$2(state);
2285
2716
  }
2286
2717
  }
2287
- var PropertyDefinitionList$0 = $S(PropertyDefinition, $Q($S(__, Comma, __, PropertyDefinition)));
2718
+ var PropertyDefinitionList$0 = $TS($S(PropertyDefinition, $Q($S(__, Comma, __, PropertyDefinition))), function($skip, $loc, $0, $1, $2) {
2719
+ if ($2.length) {
2720
+ return [].concat($1 || [], ...$2);
2721
+ }
2722
+ if ($1) {
2723
+ return [].concat($1);
2724
+ }
2725
+ return [];
2726
+ });
2288
2727
  function PropertyDefinitionList(state) {
2289
2728
  if (state.verbose)
2290
2729
  console.log("ENTER:", "PropertyDefinitionList");
@@ -2294,9 +2733,16 @@ var Civet = (() => {
2294
2733
  return PropertyDefinitionList$0(state);
2295
2734
  }
2296
2735
  }
2297
- var PropertyDefinition$0 = $S(PropertyName, __, Colon, AssignmentExpression);
2736
+ var PropertyDefinition$0 = $TS($S(PropertyName, __, Colon, ExtendedExpression), function($skip, $loc, $0, $1, $2, $3, $4) {
2737
+ var exp = $4;
2738
+ return {
2739
+ type: "Property",
2740
+ children: $0,
2741
+ names: exp.names || []
2742
+ };
2743
+ });
2298
2744
  var PropertyDefinition$1 = MethodDefinition;
2299
- var PropertyDefinition$2 = $S(DotDotDot, AssignmentExpression);
2745
+ var PropertyDefinition$2 = $S(DotDotDot, ExtendedExpression);
2300
2746
  var PropertyDefinition$3 = IdentifierReference;
2301
2747
  function PropertyDefinition(state) {
2302
2748
  if (state.tokenize) {
@@ -2308,7 +2754,7 @@ var Civet = (() => {
2308
2754
  var PropertyName$0 = NumericLiteral;
2309
2755
  var PropertyName$1 = StringLiteral;
2310
2756
  var PropertyName$2 = IdentifierName;
2311
- var PropertyName$3 = $S(OpenBracket, AssignmentExpression, __, $EXPECT($L25, fail, 'PropertyName "]"'));
2757
+ var PropertyName$3 = $S(OpenBracket, ExtendedExpression, __, CloseBracket);
2312
2758
  function PropertyName(state) {
2313
2759
  if (state.tokenize) {
2314
2760
  return $TOKEN("PropertyName", state, PropertyName$0(state) || PropertyName$1(state) || PropertyName$2(state) || PropertyName$3(state));
@@ -2358,7 +2804,11 @@ var Civet = (() => {
2358
2804
  var MethodSignature$1 = $TS($S($E(MethodModifier), ClassElementName, $Q(_), NonEmptyParameters, $E(ReturnTypeSuffix)), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
2359
2805
  var name = $2;
2360
2806
  var suffix = $5;
2361
- name = name.token.match(/^(?:"|')/) ? name.token.slice(1, -1) : name.token;
2807
+ if (name.name) {
2808
+ name = name.name;
2809
+ } else if (name.token) {
2810
+ name = name.token.match(/^(?:"|')/) ? name.token.slice(1, -1) : name.token;
2811
+ }
2362
2812
  return {
2363
2813
  type: "MethodSignature",
2364
2814
  children: $0,
@@ -2385,8 +2835,13 @@ var Civet = (() => {
2385
2835
  }
2386
2836
  var PrivateIdentifier$0 = $TV($TEXT($S($EXPECT($L7, fail, 'PrivateIdentifier "#"'), IdentifierName)), function($skip, $loc, $0, $1) {
2387
2837
  return {
2388
- $loc,
2389
- token: $1
2838
+ type: "Identifier",
2839
+ name: $0,
2840
+ names: [$0],
2841
+ children: [{
2842
+ $loc,
2843
+ token: $0
2844
+ }]
2390
2845
  };
2391
2846
  });
2392
2847
  function PrivateIdentifier(state) {
@@ -2410,25 +2865,25 @@ var Civet = (() => {
2410
2865
  return AssignmentOp$0(state);
2411
2866
  }
2412
2867
  }
2413
- var AssignmentOpSymbol$0 = $EXPECT($L27, fail, 'AssignmentOpSymbol "**="');
2414
- var AssignmentOpSymbol$1 = $EXPECT($L28, fail, 'AssignmentOpSymbol "*="');
2415
- var AssignmentOpSymbol$2 = $EXPECT($L29, fail, 'AssignmentOpSymbol "/="');
2416
- var AssignmentOpSymbol$3 = $EXPECT($L30, fail, 'AssignmentOpSymbol "%="');
2417
- var AssignmentOpSymbol$4 = $EXPECT($L31, fail, 'AssignmentOpSymbol "+="');
2418
- var AssignmentOpSymbol$5 = $EXPECT($L32, fail, 'AssignmentOpSymbol "-="');
2419
- var AssignmentOpSymbol$6 = $EXPECT($L33, fail, 'AssignmentOpSymbol "<<="');
2420
- var AssignmentOpSymbol$7 = $EXPECT($L34, fail, 'AssignmentOpSymbol ">>>="');
2421
- var AssignmentOpSymbol$8 = $EXPECT($L35, fail, 'AssignmentOpSymbol ">>="');
2422
- var AssignmentOpSymbol$9 = $EXPECT($L36, fail, 'AssignmentOpSymbol "&&="');
2423
- var AssignmentOpSymbol$10 = $EXPECT($L37, fail, 'AssignmentOpSymbol "&="');
2424
- var AssignmentOpSymbol$11 = $EXPECT($L38, fail, 'AssignmentOpSymbol "^="');
2425
- var AssignmentOpSymbol$12 = $EXPECT($L39, fail, 'AssignmentOpSymbol "||="');
2426
- var AssignmentOpSymbol$13 = $EXPECT($L40, fail, 'AssignmentOpSymbol "|="');
2427
- var AssignmentOpSymbol$14 = $EXPECT($L41, fail, 'AssignmentOpSymbol "??="');
2428
- var AssignmentOpSymbol$15 = $T($EXPECT($L42, fail, 'AssignmentOpSymbol "?="'), function(value) {
2868
+ var AssignmentOpSymbol$0 = $EXPECT($L28, fail, 'AssignmentOpSymbol "**="');
2869
+ var AssignmentOpSymbol$1 = $EXPECT($L29, fail, 'AssignmentOpSymbol "*="');
2870
+ var AssignmentOpSymbol$2 = $EXPECT($L30, fail, 'AssignmentOpSymbol "/="');
2871
+ var AssignmentOpSymbol$3 = $EXPECT($L31, fail, 'AssignmentOpSymbol "%="');
2872
+ var AssignmentOpSymbol$4 = $EXPECT($L32, fail, 'AssignmentOpSymbol "+="');
2873
+ var AssignmentOpSymbol$5 = $EXPECT($L33, fail, 'AssignmentOpSymbol "-="');
2874
+ var AssignmentOpSymbol$6 = $EXPECT($L34, fail, 'AssignmentOpSymbol "<<="');
2875
+ var AssignmentOpSymbol$7 = $EXPECT($L35, fail, 'AssignmentOpSymbol ">>>="');
2876
+ var AssignmentOpSymbol$8 = $EXPECT($L36, fail, 'AssignmentOpSymbol ">>="');
2877
+ var AssignmentOpSymbol$9 = $EXPECT($L37, fail, 'AssignmentOpSymbol "&&="');
2878
+ var AssignmentOpSymbol$10 = $EXPECT($L38, fail, 'AssignmentOpSymbol "&="');
2879
+ var AssignmentOpSymbol$11 = $EXPECT($L39, fail, 'AssignmentOpSymbol "^="');
2880
+ var AssignmentOpSymbol$12 = $EXPECT($L40, fail, 'AssignmentOpSymbol "||="');
2881
+ var AssignmentOpSymbol$13 = $EXPECT($L41, fail, 'AssignmentOpSymbol "|="');
2882
+ var AssignmentOpSymbol$14 = $EXPECT($L42, fail, 'AssignmentOpSymbol "??="');
2883
+ var AssignmentOpSymbol$15 = $T($EXPECT($L43, fail, 'AssignmentOpSymbol "?="'), function(value) {
2429
2884
  return "??=";
2430
2885
  });
2431
- var AssignmentOpSymbol$16 = $EXPECT($L43, fail, 'AssignmentOpSymbol "="');
2886
+ var AssignmentOpSymbol$16 = $EXPECT($L44, fail, 'AssignmentOpSymbol "="');
2432
2887
  function AssignmentOpSymbol(state) {
2433
2888
  if (state.tokenize) {
2434
2889
  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));
@@ -2437,7 +2892,9 @@ var Civet = (() => {
2437
2892
  }
2438
2893
  }
2439
2894
  var BinaryOp$0 = $TS($S(BinaryOpSymbol), function($skip, $loc, $0, $1) {
2440
- return { $loc, token: $1 };
2895
+ if (typeof $1 === "string")
2896
+ return { $loc, token: $1 };
2897
+ return $1;
2441
2898
  });
2442
2899
  function BinaryOp(state) {
2443
2900
  if (state.verbose)
@@ -2448,68 +2905,80 @@ var Civet = (() => {
2448
2905
  return BinaryOp$0(state);
2449
2906
  }
2450
2907
  }
2451
- var BinaryOpSymbol$0 = $EXPECT($L44, fail, 'BinaryOpSymbol "**"');
2452
- var BinaryOpSymbol$1 = $EXPECT($L45, fail, 'BinaryOpSymbol "*"');
2453
- var BinaryOpSymbol$2 = $EXPECT($L46, fail, 'BinaryOpSymbol "/"');
2454
- var BinaryOpSymbol$3 = $EXPECT($L47, fail, 'BinaryOpSymbol "%"');
2455
- var BinaryOpSymbol$4 = $EXPECT($L48, fail, 'BinaryOpSymbol "+"');
2456
- var BinaryOpSymbol$5 = $EXPECT($L49, fail, 'BinaryOpSymbol "-"');
2457
- var BinaryOpSymbol$6 = $EXPECT($L50, fail, 'BinaryOpSymbol "<="');
2458
- var BinaryOpSymbol$7 = $EXPECT($L51, fail, 'BinaryOpSymbol ">="');
2459
- var BinaryOpSymbol$8 = $EXPECT($L52, fail, 'BinaryOpSymbol "<<"');
2908
+ var BinaryOpSymbol$0 = $EXPECT($L45, fail, 'BinaryOpSymbol "**"');
2909
+ var BinaryOpSymbol$1 = $EXPECT($L46, fail, 'BinaryOpSymbol "*"');
2910
+ var BinaryOpSymbol$2 = $EXPECT($L47, fail, 'BinaryOpSymbol "/"');
2911
+ var BinaryOpSymbol$3 = $EXPECT($L48, fail, 'BinaryOpSymbol "%"');
2912
+ var BinaryOpSymbol$4 = $EXPECT($L49, fail, 'BinaryOpSymbol "+"');
2913
+ var BinaryOpSymbol$5 = $EXPECT($L50, fail, 'BinaryOpSymbol "-"');
2914
+ var BinaryOpSymbol$6 = $EXPECT($L51, fail, 'BinaryOpSymbol "<="');
2915
+ var BinaryOpSymbol$7 = $EXPECT($L52, fail, 'BinaryOpSymbol ">="');
2916
+ var BinaryOpSymbol$8 = $EXPECT($L53, fail, 'BinaryOpSymbol "<<"');
2460
2917
  var BinaryOpSymbol$9 = $EXPECT($L4, fail, 'BinaryOpSymbol "<"');
2461
- var BinaryOpSymbol$10 = $EXPECT($L53, fail, 'BinaryOpSymbol ">>>"');
2462
- var BinaryOpSymbol$11 = $EXPECT($L54, fail, 'BinaryOpSymbol ">>"');
2463
- var BinaryOpSymbol$12 = $EXPECT($L55, fail, 'BinaryOpSymbol ">"');
2464
- var BinaryOpSymbol$13 = $EXPECT($L56, fail, 'BinaryOpSymbol "!=="');
2465
- var BinaryOpSymbol$14 = $TV($EXPECT($L57, fail, 'BinaryOpSymbol "!="'), function($skip, $loc, $0, $1) {
2918
+ var BinaryOpSymbol$10 = $EXPECT($L54, fail, 'BinaryOpSymbol ">>>"');
2919
+ var BinaryOpSymbol$11 = $EXPECT($L55, fail, 'BinaryOpSymbol ">>"');
2920
+ var BinaryOpSymbol$12 = $EXPECT($L56, fail, 'BinaryOpSymbol ">"');
2921
+ var BinaryOpSymbol$13 = $EXPECT($L57, fail, 'BinaryOpSymbol "!=="');
2922
+ var BinaryOpSymbol$14 = $TV($EXPECT($L58, fail, 'BinaryOpSymbol "!="'), function($skip, $loc, $0, $1) {
2466
2923
  if (module.config.coffeeEq)
2467
2924
  return "!==";
2468
2925
  return $1;
2469
2926
  });
2470
- var BinaryOpSymbol$15 = $T($S($EXPECT($L58, fail, 'BinaryOpSymbol "is"'), NonIdContinue), function(value) {
2927
+ var BinaryOpSymbol$15 = $TS($S($EXPECT($L59, fail, 'BinaryOpSymbol "isnt"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
2928
+ if (module.config.coffeeIsnt)
2929
+ return "!==";
2930
+ return $skip;
2931
+ });
2932
+ var BinaryOpSymbol$16 = $T($S($EXPECT($L60, fail, 'BinaryOpSymbol "is"'), NonIdContinue), function(value) {
2471
2933
  return "===";
2472
2934
  });
2473
- var BinaryOpSymbol$16 = $EXPECT($L59, fail, 'BinaryOpSymbol "==="');
2474
- var BinaryOpSymbol$17 = $TV($EXPECT($L60, fail, 'BinaryOpSymbol "=="'), function($skip, $loc, $0, $1) {
2935
+ var BinaryOpSymbol$17 = $EXPECT($L61, fail, 'BinaryOpSymbol "==="');
2936
+ var BinaryOpSymbol$18 = $TV($EXPECT($L62, fail, 'BinaryOpSymbol "=="'), function($skip, $loc, $0, $1) {
2475
2937
  if (module.config.coffeeEq)
2476
2938
  return "===";
2477
2939
  return $1;
2478
2940
  });
2479
- var BinaryOpSymbol$18 = $T($S($EXPECT($L61, fail, 'BinaryOpSymbol "and"'), NonIdContinue), function(value) {
2941
+ var BinaryOpSymbol$19 = $T($S($EXPECT($L63, fail, 'BinaryOpSymbol "and"'), NonIdContinue), function(value) {
2480
2942
  return "&&";
2481
2943
  });
2482
- var BinaryOpSymbol$19 = $EXPECT($L62, fail, 'BinaryOpSymbol "&&"');
2483
- var BinaryOpSymbol$20 = $T($S($EXPECT($L63, fail, 'BinaryOpSymbol "or"'), NonIdContinue), function(value) {
2944
+ var BinaryOpSymbol$20 = $EXPECT($L64, fail, 'BinaryOpSymbol "&&"');
2945
+ var BinaryOpSymbol$21 = $T($S(CoffeeOfEnabled, $EXPECT($L65, fail, 'BinaryOpSymbol "of"'), NonIdContinue), function(value) {
2946
+ return "in";
2947
+ });
2948
+ var BinaryOpSymbol$22 = $T($S($EXPECT($L66, fail, 'BinaryOpSymbol "or"'), NonIdContinue), function(value) {
2484
2949
  return "||";
2485
2950
  });
2486
- var BinaryOpSymbol$21 = $EXPECT($L64, fail, 'BinaryOpSymbol "||"');
2487
- var BinaryOpSymbol$22 = $EXPECT($L65, fail, 'BinaryOpSymbol "??"');
2488
- var BinaryOpSymbol$23 = $TS($S($EXPECT($L66, fail, 'BinaryOpSymbol "instanceof"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
2951
+ var BinaryOpSymbol$23 = $EXPECT($L67, fail, 'BinaryOpSymbol "||"');
2952
+ var BinaryOpSymbol$24 = $EXPECT($L68, fail, 'BinaryOpSymbol "??"');
2953
+ var BinaryOpSymbol$25 = $TS($S($EXPECT($L69, fail, 'BinaryOpSymbol "instanceof"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
2489
2954
  return $1;
2490
2955
  });
2491
- var BinaryOpSymbol$24 = $TS($S($EXPECT($L67, fail, 'BinaryOpSymbol "in"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
2956
+ var BinaryOpSymbol$26 = $TS($S(CoffeeOfEnabled, $EXPECT($L70, fail, 'BinaryOpSymbol "in"'), NonIdContinue), function($skip, $loc, $0, $1, $2, $3) {
2957
+ return module.getIndexOfRef();
2958
+ });
2959
+ var BinaryOpSymbol$27 = $TS($S($EXPECT($L70, fail, 'BinaryOpSymbol "in"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
2492
2960
  return $1;
2493
2961
  });
2494
- var BinaryOpSymbol$25 = $EXPECT($L68, fail, 'BinaryOpSymbol "&"');
2495
- var BinaryOpSymbol$26 = $EXPECT($L69, fail, 'BinaryOpSymbol "^"');
2496
- var BinaryOpSymbol$27 = $EXPECT($L70, fail, 'BinaryOpSymbol "|"');
2962
+ var BinaryOpSymbol$28 = $EXPECT($L71, fail, 'BinaryOpSymbol "&"');
2963
+ var BinaryOpSymbol$29 = $EXPECT($L72, fail, 'BinaryOpSymbol "^"');
2964
+ var BinaryOpSymbol$30 = $EXPECT($L73, fail, 'BinaryOpSymbol "|"');
2497
2965
  function BinaryOpSymbol(state) {
2498
2966
  if (state.tokenize) {
2499
- 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));
2967
+ 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) || BinaryOpSymbol$29(state) || BinaryOpSymbol$30(state));
2500
2968
  } else {
2501
- 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);
2969
+ 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) || BinaryOpSymbol$29(state) || BinaryOpSymbol$30(state);
2502
2970
  }
2503
2971
  }
2504
- var UnaryOp$0 = $TR($EXPECT($R2, fail, "UnaryOp /[!~+-]/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
2972
+ var UnaryOp$0 = $TR($EXPECT($R2, fail, "UnaryOp /[!~+-](?!\\s)/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
2505
2973
  return { $loc, token: $0 };
2506
2974
  });
2507
- var UnaryOp$1 = $S($C(Delete, Void, Typeof), __);
2975
+ var UnaryOp$1 = $S($C(Await, Delete, Void, Typeof), __);
2976
+ var UnaryOp$2 = Not;
2508
2977
  function UnaryOp(state) {
2509
2978
  if (state.tokenize) {
2510
- return $TOKEN("UnaryOp", state, UnaryOp$0(state) || UnaryOp$1(state));
2979
+ return $TOKEN("UnaryOp", state, UnaryOp$0(state) || UnaryOp$1(state) || UnaryOp$2(state));
2511
2980
  } else {
2512
- return UnaryOp$0(state) || UnaryOp$1(state);
2981
+ return UnaryOp$0(state) || UnaryOp$1(state) || UnaryOp$2(state);
2513
2982
  }
2514
2983
  }
2515
2984
  var ModuleItem$0 = ImportDeclaration;
@@ -2528,7 +2997,18 @@ var Civet = (() => {
2528
2997
  var ws = $2;
2529
2998
  var post = $3;
2530
2999
  if (post) {
2531
- post.children.push(statement);
3000
+ let block;
3001
+ if (post.type === "ForStatement") {
3002
+ if (post.blockPrefix?.length) {
3003
+ block = [" {", ...post.blockPrefix, ...statement, " }"];
3004
+ } else {
3005
+ block = statement;
3006
+ }
3007
+ } else {
3008
+ block = statement;
3009
+ }
3010
+ post.block = block;
3011
+ post.children.push(block);
2532
3012
  if (!module.isWhitespaceOrEmpty(ws))
2533
3013
  post.children.push(ws);
2534
3014
  return post;
@@ -2570,7 +3050,7 @@ var Civet = (() => {
2570
3050
  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);
2571
3051
  }
2572
3052
  }
2573
- var EmptyStatement$0 = $T($S($Q(TrailingComment), $Y($EXPECT($L71, fail, 'EmptyStatement ";"'))), function(value) {
3053
+ var EmptyStatement$0 = $T($S($Q(TrailingComment), $Y($EXPECT($L74, fail, 'EmptyStatement ";"'))), function(value) {
2574
3054
  return { "type": "EmptyStatement", "children": value[0] };
2575
3055
  });
2576
3056
  function EmptyStatement(state) {
@@ -2582,7 +3062,7 @@ var Civet = (() => {
2582
3062
  return EmptyStatement$0(state);
2583
3063
  }
2584
3064
  }
2585
- var BlockStatement$0 = $T($S(__, OpenBrace, EOS, NestedBlockExpressions, __, CloseBrace), function(value) {
3065
+ var BlockStatement$0 = $T($S(__, OpenBrace, EOS, NestedBlockStatements, __, CloseBrace, $N($S(__, $EXPECT($L44, fail, 'BlockStatement "="')))), function(value) {
2586
3066
  var exps = value[3];
2587
3067
  return { "type": "BlockStatement", "children": value, "expressions": exps };
2588
3068
  });
@@ -2595,7 +3075,7 @@ var Civet = (() => {
2595
3075
  return BlockStatement$0(state);
2596
3076
  }
2597
3077
  }
2598
- var IfStatement$0 = $TS($S(IfClause, Block, $E($S(__, Else, Block))), function($skip, $loc, $0, $1, $2, $3) {
3078
+ var IfStatement$0 = $TS($S($C(IfClause, UnlessClause), Block, $E($S(__, Else, Block))), function($skip, $loc, $0, $1, $2, $3) {
2599
3079
  var clause = $1;
2600
3080
  var block = $2;
2601
3081
  var e = $3;
@@ -2604,17 +3084,13 @@ var Civet = (() => {
2604
3084
  clause.children.push(e);
2605
3085
  return clause;
2606
3086
  });
2607
- var IfStatement$1 = $TS($S(UnlessClause, Block), function($skip, $loc, $0, $1, $2) {
2608
- var clause = $1;
2609
- var block = $2;
2610
- clause.children.push(block);
2611
- return clause;
2612
- });
2613
3087
  function IfStatement(state) {
3088
+ if (state.verbose)
3089
+ console.log("ENTER:", "IfStatement");
2614
3090
  if (state.tokenize) {
2615
- return $TOKEN("IfStatement", state, IfStatement$0(state) || IfStatement$1(state));
3091
+ return $TOKEN("IfStatement", state, IfStatement$0(state));
2616
3092
  } else {
2617
- return IfStatement$0(state) || IfStatement$1(state);
3093
+ return IfStatement$0(state);
2618
3094
  }
2619
3095
  }
2620
3096
  var IfClause$0 = $T($S(If, Condition), function(value) {
@@ -2655,6 +3131,72 @@ var Civet = (() => {
2655
3131
  return UnlessClause$0(state);
2656
3132
  }
2657
3133
  }
3134
+ var IfExpression$0 = $TS($S(IfClause, ExpressionBlock, $E($S(__, Else, ExpressionBlock))), function($skip, $loc, $0, $1, $2, $3) {
3135
+ var clause = $1;
3136
+ var b = $2;
3137
+ var e = $3;
3138
+ clause.children.shift();
3139
+ clause.children.push("?", b, ":");
3140
+ if (e) {
3141
+ e.splice(1, 1);
3142
+ clause.children.push(e);
3143
+ } else {
3144
+ clause.children.push("void 0");
3145
+ }
3146
+ clause.type = "IfExpression";
3147
+ return clause;
3148
+ });
3149
+ function IfExpression(state) {
3150
+ if (state.verbose)
3151
+ console.log("ENTER:", "IfExpression");
3152
+ if (state.tokenize) {
3153
+ return $TOKEN("IfExpression", state, IfExpression$0(state));
3154
+ } else {
3155
+ return IfExpression$0(state);
3156
+ }
3157
+ }
3158
+ var ExpressionBlock$0 = $TS($S(InsertOpenParen, EOS, NestedBlockExpressions, InsertNewline, InsertIndent, InsertCloseParen), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6) {
3159
+ var exps = $3;
3160
+ exps[exps.length - 1].pop();
3161
+ return {
3162
+ type: "BlockExpressions",
3163
+ expressions: exps,
3164
+ children: $0
3165
+ };
3166
+ });
3167
+ var ExpressionBlock$1 = $S($E(Then), ExtendedExpression);
3168
+ function ExpressionBlock(state) {
3169
+ if (state.tokenize) {
3170
+ return $TOKEN("ExpressionBlock", state, ExpressionBlock$0(state) || ExpressionBlock$1(state));
3171
+ } else {
3172
+ return ExpressionBlock$0(state) || ExpressionBlock$1(state);
3173
+ }
3174
+ }
3175
+ var NestedBlockExpressions$0 = $TS($S(PushIndent, $Q(NestedBlockExpression), PopIndent), function($skip, $loc, $0, $1, $2, $3) {
3176
+ var exps = $2;
3177
+ if (!exps.length)
3178
+ return $skip;
3179
+ return exps;
3180
+ });
3181
+ function NestedBlockExpressions(state) {
3182
+ if (state.verbose)
3183
+ console.log("ENTER:", "NestedBlockExpressions");
3184
+ if (state.tokenize) {
3185
+ return $TOKEN("NestedBlockExpressions", state, NestedBlockExpressions$0(state));
3186
+ } else {
3187
+ return NestedBlockExpressions$0(state);
3188
+ }
3189
+ }
3190
+ var NestedBlockExpression$0 = $S(Nested, ExtendedExpression, ExpressionDelimiter);
3191
+ function NestedBlockExpression(state) {
3192
+ if (state.verbose)
3193
+ console.log("ENTER:", "NestedBlockExpression");
3194
+ if (state.tokenize) {
3195
+ return $TOKEN("NestedBlockExpression", state, NestedBlockExpression$0(state));
3196
+ } else {
3197
+ return NestedBlockExpression$0(state);
3198
+ }
3199
+ }
2658
3200
  var IterationStatement$0 = LoopStatement;
2659
3201
  var IterationStatement$1 = DoWhileStatement;
2660
3202
  var IterationStatement$2 = WhileStatement;
@@ -2729,61 +3271,219 @@ var Civet = (() => {
2729
3271
  kind.token = "while";
2730
3272
  $0 = [kind, cond];
2731
3273
  }
2732
- return {
2733
- type: "IterationStatement",
2734
- children: $0
2735
- };
3274
+ return {
3275
+ type: "IterationStatement",
3276
+ children: $0
3277
+ };
3278
+ });
3279
+ function WhileClause(state) {
3280
+ if (state.verbose)
3281
+ console.log("ENTER:", "WhileClause");
3282
+ if (state.tokenize) {
3283
+ return $TOKEN("WhileClause", state, WhileClause$0(state));
3284
+ } else {
3285
+ return WhileClause$0(state);
3286
+ }
3287
+ }
3288
+ var ForStatement$0 = $TS($S(ForClause, Block), function($skip, $loc, $0, $1, $2) {
3289
+ var clause = $1;
3290
+ var block = $2;
3291
+ clause.children.push(block);
3292
+ clause.block = block;
3293
+ if (clause.blockPrefix) {
3294
+ block.expressions.splice(0, 0, ...clause.blockPrefix);
3295
+ }
3296
+ return clause;
3297
+ });
3298
+ function ForStatement(state) {
3299
+ if (state.verbose)
3300
+ console.log("ENTER:", "ForStatement");
3301
+ if (state.tokenize) {
3302
+ return $TOKEN("ForStatement", state, ForStatement$0(state));
3303
+ } else {
3304
+ return ForStatement$0(state);
3305
+ }
3306
+ }
3307
+ var ForClause$0 = $TS($S(For, __, ForStatementControl), function($skip, $loc, $0, $1, $2, $3) {
3308
+ var c = $3;
3309
+ const { children, declaration } = c;
3310
+ children.splice(0, 0, $1, ...$2);
3311
+ return {
3312
+ type: "ForStatement",
3313
+ children,
3314
+ declaration,
3315
+ block: null,
3316
+ blockPrefix: c.blockPrefix
3317
+ };
3318
+ });
3319
+ function ForClause(state) {
3320
+ if (state.verbose)
3321
+ console.log("ENTER:", "ForClause");
3322
+ if (state.tokenize) {
3323
+ return $TOKEN("ForClause", state, ForClause$0(state));
3324
+ } else {
3325
+ return ForClause$0(state);
3326
+ }
3327
+ }
3328
+ var ForStatementControl$0 = $T($S($N(CoffeeForLoopsEnabled), ForStatementParameters), function(value) {
3329
+ return value[1];
3330
+ });
3331
+ var ForStatementControl$1 = $TS($S(CoffeeForLoopsEnabled, CoffeeForStatementParameters, $E(WhenCondition)), function($skip, $loc, $0, $1, $2, $3) {
3332
+ if ($3) {
3333
+ const indent = "".padStart((module.currentIndent + 1) * 2);
3334
+ module.insertTrimmingSpace($3, "");
3335
+ $2.blockPrefix.push({
3336
+ type: "IfStatement",
3337
+ children: [indent, "if (!(", $3, ")) continue\n"]
3338
+ });
3339
+ }
3340
+ return $2;
2736
3341
  });
2737
- function WhileClause(state) {
3342
+ function ForStatementControl(state) {
3343
+ if (state.tokenize) {
3344
+ return $TOKEN("ForStatementControl", state, ForStatementControl$0(state) || ForStatementControl$1(state));
3345
+ } else {
3346
+ return ForStatementControl$0(state) || ForStatementControl$1(state);
3347
+ }
3348
+ }
3349
+ var WhenCondition$0 = $T($S(__, When, ExtendedExpression), function(value) {
3350
+ var exp = value[2];
3351
+ return exp;
3352
+ });
3353
+ function WhenCondition(state) {
2738
3354
  if (state.verbose)
2739
- console.log("ENTER:", "WhileClause");
3355
+ console.log("ENTER:", "WhenCondition");
2740
3356
  if (state.tokenize) {
2741
- return $TOKEN("WhileClause", state, WhileClause$0(state));
3357
+ return $TOKEN("WhenCondition", state, WhenCondition$0(state));
2742
3358
  } else {
2743
- return WhileClause$0(state);
3359
+ return WhenCondition$0(state);
2744
3360
  }
2745
3361
  }
2746
- var ForStatement$0 = $TS($S(ForClause, Block), function($skip, $loc, $0, $1, $2) {
2747
- var clause = $1;
2748
- var block = $2;
2749
- clause.children.push(block);
2750
- return clause;
3362
+ var CoffeeForStatementParameters$0 = $TS($S($E($S(Await, __)), InsertOpenParen, CoffeeForDeclaration, __, $C(In, Of, From), ExtendedExpression, InsertCloseParen), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7) {
3363
+ var declaration = $3;
3364
+ var kind = $5;
3365
+ var exp = $6;
3366
+ let blockPrefix = [];
3367
+ if (kind.token === "from") {
3368
+ kind.token = "of";
3369
+ } else if (kind.token === "of") {
3370
+ module.insertTrimmingSpace(declaration, "");
3371
+ module.insertTrimmingSpace(exp, "");
3372
+ if (declaration.own) {
3373
+ const indent = "".padStart((module.currentIndent + 1) * 2);
3374
+ const hasPropRef = module.getHasPropRef();
3375
+ blockPrefix.push([indent, "if (!", hasPropRef, ".call(", exp, ", ", declaration, ")) continue\n"]);
3376
+ }
3377
+ kind.token = "in ";
3378
+ } else if (kind.token === "in") {
3379
+ const counterRef = {
3380
+ type: "Ref",
3381
+ base: "i"
3382
+ };
3383
+ const lenRef = {
3384
+ type: "Ref",
3385
+ base: "len"
3386
+ };
3387
+ const expRef = exp.type === "Identifier" ? exp : {
3388
+ type: "Ref",
3389
+ base: "ref"
3390
+ };
3391
+ const varRef = declaration;
3392
+ module.insertTrimmingSpace(exp, "");
3393
+ const expRefDec = expRef !== exp ? [expRef, " = ", exp, ", "] : [];
3394
+ declaration = {
3395
+ type: "Declaration",
3396
+ children: ["let ", ...expRefDec, counterRef, " = 0, ", lenRef, " = ", expRef, ".length"],
3397
+ names: []
3398
+ };
3399
+ const indent = "".padStart((module.currentIndent + 1) * 2);
3400
+ blockPrefix.push([{
3401
+ type: "AssignmentExpression",
3402
+ children: [indent, varRef, " = ", expRef, "[", counterRef, "]\n"],
3403
+ names: varRef.names
3404
+ }]);
3405
+ return {
3406
+ declaration,
3407
+ children: [$1, $2, declaration, "; ", counterRef, " < ", lenRef, "; ", counterRef, "++", $7],
3408
+ blockPrefix
3409
+ };
3410
+ }
3411
+ return {
3412
+ declaration,
3413
+ children: $0,
3414
+ blockPrefix
3415
+ };
2751
3416
  });
2752
- function ForStatement(state) {
3417
+ function CoffeeForStatementParameters(state) {
2753
3418
  if (state.verbose)
2754
- console.log("ENTER:", "ForStatement");
3419
+ console.log("ENTER:", "CoffeeForStatementParameters");
2755
3420
  if (state.tokenize) {
2756
- return $TOKEN("ForStatement", state, ForStatement$0(state));
3421
+ return $TOKEN("CoffeeForStatementParameters", state, CoffeeForStatementParameters$0(state));
2757
3422
  } else {
2758
- return ForStatement$0(state);
3423
+ return CoffeeForStatementParameters$0(state);
2759
3424
  }
2760
3425
  }
2761
- var ForClause$0 = $T($S(For, __, ForStatementControl), function(value) {
2762
- return { "type": "IterationStatement", "children": value };
3426
+ var CoffeeForDeclaration$0 = $TS($S($E($S(__, $EXPECT($L75, fail, 'CoffeeForDeclaration "own"'))), ForBinding), function($skip, $loc, $0, $1, $2) {
3427
+ var own = $1;
3428
+ var binding = $2;
3429
+ if (own) {
3430
+ binding.own = true;
3431
+ }
3432
+ binding.type = "AssignmentExpression";
3433
+ return binding;
2763
3434
  });
2764
- function ForClause(state) {
3435
+ function CoffeeForDeclaration(state) {
2765
3436
  if (state.verbose)
2766
- console.log("ENTER:", "ForClause");
3437
+ console.log("ENTER:", "CoffeeForDeclaration");
2767
3438
  if (state.tokenize) {
2768
- return $TOKEN("ForClause", state, ForClause$0(state));
3439
+ return $TOKEN("CoffeeForDeclaration", state, CoffeeForDeclaration$0(state));
2769
3440
  } else {
2770
- return ForClause$0(state);
3441
+ return CoffeeForDeclaration$0(state);
2771
3442
  }
2772
3443
  }
2773
- var ForStatementControl$0 = $S(OpenParen, __, $C(LexicalDeclaration, VariableStatement, $E(Expression)), __, Semicolon, $E(Expression), Semicolon, $E(Expression), __, CloseParen);
2774
- var ForStatementControl$1 = $S(InsertOpenParen, __, $C(LexicalDeclaration, VariableStatement, $E(Expression)), __, Semicolon, $E(Expression), Semicolon, $E($S($N(EOS), Expression)), InsertCloseParen);
2775
- var ForStatementControl$2 = $S(OpenParen, __, ForInOfDeclaration, __, In, Expression, __, CloseParen);
2776
- var ForStatementControl$3 = $S(InsertOpenParen, ForInOfDeclaration, __, In, Expression, InsertCloseParen);
2777
- var ForStatementControl$4 = $S($E($S(Await, __)), OpenParen, __, ForInOfDeclaration, __, Of, AssignmentExpression, __, CloseParen);
2778
- var ForStatementControl$5 = $S($E($S(Await, __)), InsertOpenParen, ForInOfDeclaration, __, Of, AssignmentExpression, InsertCloseParen);
2779
- function ForStatementControl(state) {
3444
+ var ForStatementParameters$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) {
3445
+ var declaration = $3;
3446
+ return {
3447
+ declaration,
3448
+ children: $0
3449
+ };
3450
+ });
3451
+ var ForStatementParameters$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) {
3452
+ var declaration = $3;
3453
+ return {
3454
+ declaration,
3455
+ children: $0
3456
+ };
3457
+ });
3458
+ var ForStatementParameters$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) {
3459
+ var declaration = $4;
3460
+ return {
3461
+ declaration,
3462
+ children: $0
3463
+ };
3464
+ });
3465
+ var ForStatementParameters$3 = $TS($S($E($S(Await, __)), InsertOpenParen, ForInOfDeclaration, __, $C(In, Of), ExtendedExpression, InsertCloseParen), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7) {
3466
+ var declaration = $3;
3467
+ return {
3468
+ declaration,
3469
+ children: $0
3470
+ };
3471
+ });
3472
+ function ForStatementParameters(state) {
2780
3473
  if (state.tokenize) {
2781
- return $TOKEN("ForStatementControl", state, ForStatementControl$0(state) || ForStatementControl$1(state) || ForStatementControl$2(state) || ForStatementControl$3(state) || ForStatementControl$4(state) || ForStatementControl$5(state));
3474
+ return $TOKEN("ForStatementParameters", state, ForStatementParameters$0(state) || ForStatementParameters$1(state) || ForStatementParameters$2(state) || ForStatementParameters$3(state));
2782
3475
  } else {
2783
- return ForStatementControl$0(state) || ForStatementControl$1(state) || ForStatementControl$2(state) || ForStatementControl$3(state) || ForStatementControl$4(state) || ForStatementControl$5(state);
3476
+ return ForStatementParameters$0(state) || ForStatementParameters$1(state) || ForStatementParameters$2(state) || ForStatementParameters$3(state);
2784
3477
  }
2785
3478
  }
2786
- var ForInOfDeclaration$0 = $S(Var, ForBinding);
3479
+ var ForInOfDeclaration$0 = $TS($S(Var, ForBinding), function($skip, $loc, $0, $1, $2) {
3480
+ var binding = $2;
3481
+ return {
3482
+ type: "ForDeclaration",
3483
+ children: $0,
3484
+ names: binding.names
3485
+ };
3486
+ });
2787
3487
  var ForInOfDeclaration$1 = ForDeclaration;
2788
3488
  var ForInOfDeclaration$2 = LeftHandSideExpression;
2789
3489
  function ForInOfDeclaration(state) {
@@ -2793,8 +3493,24 @@ var Civet = (() => {
2793
3493
  return ForInOfDeclaration$0(state) || ForInOfDeclaration$1(state) || ForInOfDeclaration$2(state);
2794
3494
  }
2795
3495
  }
2796
- var ForDeclaration$0 = $S(LetOrConst, NonIdContinue, ForBinding);
2797
- var ForDeclaration$1 = $S(InsertConst, ForBinding, $R$0($EXPECT($R3, fail, "ForDeclaration /(?=[\\s\\)])/")));
3496
+ var ForDeclaration$0 = $TS($S(LetOrConst, NonIdContinue, ForBinding), function($skip, $loc, $0, $1, $2, $3) {
3497
+ var c = $1;
3498
+ var binding = $3;
3499
+ return {
3500
+ type: "ForDeclaration",
3501
+ children: [c, binding],
3502
+ names: binding.names
3503
+ };
3504
+ });
3505
+ var ForDeclaration$1 = $TS($S(InsertConst, ForBinding, $EXPECT($R3, fail, "ForDeclaration /(?=[\\s\\)])/")), function($skip, $loc, $0, $1, $2, $3) {
3506
+ var c = $1;
3507
+ var binding = $2;
3508
+ return {
3509
+ type: "ForDeclaration",
3510
+ children: [c, binding],
3511
+ names: binding.names
3512
+ };
3513
+ });
2798
3514
  function ForDeclaration(state) {
2799
3515
  if (state.tokenize) {
2800
3516
  return $TOKEN("ForDeclaration", state, ForDeclaration$0(state) || ForDeclaration$1(state));
@@ -2823,6 +3539,22 @@ var Civet = (() => {
2823
3539
  return SwitchStatement$0(state);
2824
3540
  }
2825
3541
  }
3542
+ var SwitchExpression$0 = $TV(SwitchStatement, function($skip, $loc, $0, $1) {
3543
+ var e = $0;
3544
+ module.addImplicitReturns(e.children[2]);
3545
+ e.type = "SwitchExpression";
3546
+ e.children = ["($=>{", e.children, "})()"];
3547
+ return e;
3548
+ });
3549
+ function SwitchExpression(state) {
3550
+ if (state.verbose)
3551
+ console.log("ENTER:", "SwitchExpression");
3552
+ if (state.tokenize) {
3553
+ return $TOKEN("SwitchExpression", state, SwitchExpression$0(state));
3554
+ } else {
3555
+ return SwitchExpression$0(state);
3556
+ }
3557
+ }
2826
3558
  var CaseBlock$0 = $TS($S(__, OpenBrace, $Y(EOS), NestedCaseClauses, __, CloseBrace), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6) {
2827
3559
  var clauses = $4;
2828
3560
  $0.splice(2, 1);
@@ -2876,19 +3608,19 @@ var Civet = (() => {
2876
3608
  return NestedCaseClause$0(state);
2877
3609
  }
2878
3610
  }
2879
- var CaseClause$0 = $T($S(Case, CaseExpressionList, $C(NestedBlockExpressions, NoExpressions)), function(value) {
3611
+ var CaseClause$0 = $T($S(Case, CaseExpressionList, $C(NestedBlockStatements, NoExpressions)), function(value) {
2880
3612
  var exps = value[2];
2881
3613
  return { "type": "CaseClause", "expressions": exps, "children": value };
2882
3614
  });
2883
- var CaseClause$1 = $T($S(When, CaseExpressionList, NestedBlockExpressions, InsertBreak), function(value) {
3615
+ var CaseClause$1 = $T($S(When, CaseExpressionList, NestedBlockStatements, InsertBreak), function(value) {
2884
3616
  var exps = value[2];
2885
3617
  return { "type": "WhenClause", "expressions": exps, "children": value };
2886
3618
  });
2887
- var CaseClause$2 = $T($S(Default, ImpliedColon, $C(NestedBlockExpressions, NoExpressions)), function(value) {
3619
+ var CaseClause$2 = $T($S(Default, ImpliedColon, $C(NestedBlockStatements, NoExpressions)), function(value) {
2888
3620
  var exps = value[2];
2889
3621
  return { "type": "DefaultClause", "expressions": exps, "children": value };
2890
3622
  });
2891
- var CaseClause$3 = $TS($S(Else, ImpliedColon, NestedBlockExpressions), function($skip, $loc, $0, $1, $2, $3) {
3623
+ var CaseClause$3 = $TS($S(Else, ImpliedColon, NestedBlockStatements), function($skip, $loc, $0, $1, $2, $3) {
2892
3624
  var exps = $3;
2893
3625
  $1.token = "default";
2894
3626
  return {
@@ -2990,7 +3722,7 @@ var Civet = (() => {
2990
3722
  return CatchBind$0(state) || CatchBind$1(state);
2991
3723
  }
2992
3724
  }
2993
- var Finally$0 = $S(__, $EXPECT($L72, fail, 'Finally "finally"'), BracedBlock);
3725
+ var Finally$0 = $S(__, $EXPECT($L76, fail, 'Finally "finally"'), BracedBlock);
2994
3726
  function Finally(state) {
2995
3727
  if (state.verbose)
2996
3728
  console.log("ENTER:", "Finally");
@@ -3009,7 +3741,7 @@ var Civet = (() => {
3009
3741
  return CatchParameter$0(state) || CatchParameter$1(state);
3010
3742
  }
3011
3743
  }
3012
- var Condition$0 = $S(__, OpenParen, Expression, __, CloseParen);
3744
+ var Condition$0 = $S(__, OpenParen, ExtendedExpression, __, CloseParen);
3013
3745
  var Condition$1 = $TS($S($N(EOS), __, InsertOpenParen, ExpressionWithIndentedApplicationSuppressed, InsertCloseParen), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
3014
3746
  $0.shift();
3015
3747
  return $0;
@@ -3021,7 +3753,7 @@ var Civet = (() => {
3021
3753
  return Condition$0(state) || Condition$1(state);
3022
3754
  }
3023
3755
  }
3024
- var ExpressionWithIndentedApplicationSuppressed$0 = $TS($S(SuppressIndentedApplication, $E(AssignmentExpression)), function($skip, $loc, $0, $1, $2) {
3756
+ var ExpressionWithIndentedApplicationSuppressed$0 = $TS($S(SuppressIndentedApplication, $E(ExtendedExpression)), function($skip, $loc, $0, $1, $2) {
3025
3757
  var exp = $2;
3026
3758
  module.suppressIndentedApplication = false;
3027
3759
  if (exp)
@@ -3059,19 +3791,19 @@ var Civet = (() => {
3059
3791
  return ExpressionStatement$0(state);
3060
3792
  }
3061
3793
  }
3062
- var KeywordStatement$0 = $T($S($EXPECT($L73, fail, 'KeywordStatement "break"'), NonIdContinue), function(value) {
3794
+ var KeywordStatement$0 = $T($S($EXPECT($L77, fail, 'KeywordStatement "break"'), NonIdContinue), function(value) {
3063
3795
  return { "type": "BreakStatement", "children": value };
3064
3796
  });
3065
- var KeywordStatement$1 = $T($S($EXPECT($L74, fail, 'KeywordStatement "continue"'), NonIdContinue), function(value) {
3797
+ var KeywordStatement$1 = $T($S($EXPECT($L78, fail, 'KeywordStatement "continue"'), NonIdContinue), function(value) {
3066
3798
  return { "type": "ContinueStatement", "children": value };
3067
3799
  });
3068
- var KeywordStatement$2 = $T($S($EXPECT($L75, fail, 'KeywordStatement "debugger"'), NonIdContinue), function(value) {
3800
+ var KeywordStatement$2 = $T($S($EXPECT($L79, fail, 'KeywordStatement "debugger"'), NonIdContinue), function(value) {
3069
3801
  return { "type": "DebuggerStatement", "children": value };
3070
3802
  });
3071
3803
  var KeywordStatement$3 = $T($S(Return, $E(MaybeNestedExpression)), function(value) {
3072
3804
  return { "type": "ReturnStatement", "children": value };
3073
3805
  });
3074
- var KeywordStatement$4 = $T($S(Throw, Expression), function(value) {
3806
+ var KeywordStatement$4 = $T($S(Throw, ExtendedExpression), function(value) {
3075
3807
  return { "type": "ThrowStatement", "children": value };
3076
3808
  });
3077
3809
  function KeywordStatement(state) {
@@ -3081,8 +3813,42 @@ var Civet = (() => {
3081
3813
  return KeywordStatement$0(state) || KeywordStatement$1(state) || KeywordStatement$2(state) || KeywordStatement$3(state) || KeywordStatement$4(state);
3082
3814
  }
3083
3815
  }
3084
- var MaybeNestedExpression$0 = $S($N(EOS), $Q(TrailingComment), Expression);
3085
- var MaybeNestedExpression$1 = $S($Y(EOS), ObjectLiteral);
3816
+ var DebuggerExpression$0 = $TS($S($EXPECT($L79, fail, 'DebuggerExpression "debugger"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3817
+ return {
3818
+ type: "DebuggerExpression",
3819
+ children: ["($=>{", $1, "})()"]
3820
+ };
3821
+ });
3822
+ function DebuggerExpression(state) {
3823
+ if (state.verbose)
3824
+ console.log("ENTER:", "DebuggerExpression");
3825
+ if (state.tokenize) {
3826
+ return $TOKEN("DebuggerExpression", state, DebuggerExpression$0(state));
3827
+ } else {
3828
+ return DebuggerExpression$0(state);
3829
+ }
3830
+ }
3831
+ var ThrowExpression$0 = $TS($S(Throw, ExtendedExpression), function($skip, $loc, $0, $1, $2) {
3832
+ return {
3833
+ type: "ThrowExpression",
3834
+ children: ["($=>{", ...$0, "})()"]
3835
+ };
3836
+ });
3837
+ function ThrowExpression(state) {
3838
+ if (state.verbose)
3839
+ console.log("ENTER:", "ThrowExpression");
3840
+ if (state.tokenize) {
3841
+ return $TOKEN("ThrowExpression", state, ThrowExpression$0(state));
3842
+ } else {
3843
+ return ThrowExpression$0(state);
3844
+ }
3845
+ }
3846
+ var MaybeNestedExpression$0 = $TS($S($N(EOS), $Q(TrailingComment), AssignmentExpression), function($skip, $loc, $0, $1, $2, $3) {
3847
+ return [...$2, $3];
3848
+ });
3849
+ var MaybeNestedExpression$1 = $T($S($Y(EOS), ObjectLiteral), function(value) {
3850
+ return value[1];
3851
+ });
3086
3852
  function MaybeNestedExpression(state) {
3087
3853
  if (state.tokenize) {
3088
3854
  return $TOKEN("MaybeNestedExpression", state, MaybeNestedExpression$0(state) || MaybeNestedExpression$1(state));
@@ -3090,7 +3856,7 @@ var Civet = (() => {
3090
3856
  return MaybeNestedExpression$0(state) || MaybeNestedExpression$1(state);
3091
3857
  }
3092
3858
  }
3093
- var ImportDeclaration$0 = $T($S($EXPECT($L76, fail, 'ImportDeclaration "import type"'), NonIdContinue, __, ImportClause, __, FromClause), function(value) {
3859
+ var ImportDeclaration$0 = $T($S($EXPECT($L80, fail, 'ImportDeclaration "import type"'), NonIdContinue, __, ImportClause, __, FromClause), function(value) {
3094
3860
  return { "ts": true, "children": value };
3095
3861
  });
3096
3862
  var ImportDeclaration$1 = $S(Import, __, ImportClause, __, FromClause);
@@ -3125,7 +3891,19 @@ var Civet = (() => {
3125
3891
  return ImpliedImport$0(state);
3126
3892
  }
3127
3893
  }
3128
- var ImportClause$0 = $S(ImportedBinding, $E($S(__, Comma, __, $C(NameSpaceImport, NamedImports))));
3894
+ var ImportClause$0 = $TS($S(ImportedBinding, $E($S(__, Comma, __, $C(NameSpaceImport, NamedImports)))), function($skip, $loc, $0, $1, $2) {
3895
+ var binding = $1;
3896
+ var rest = $2;
3897
+ if (rest) {
3898
+ return {
3899
+ type: "Declaration",
3900
+ children: $0,
3901
+ names: [...binding.names, ...rest[3].names]
3902
+ };
3903
+ }
3904
+ $1.type = "Declaration";
3905
+ return $1;
3906
+ });
3129
3907
  var ImportClause$1 = NameSpaceImport;
3130
3908
  var ImportClause$2 = NamedImports;
3131
3909
  function ImportClause(state) {
@@ -3135,7 +3913,14 @@ var Civet = (() => {
3135
3913
  return ImportClause$0(state) || ImportClause$1(state) || ImportClause$2(state);
3136
3914
  }
3137
3915
  }
3138
- var NameSpaceImport$0 = $S(Star, __, As, NonIdContinue, __, ImportedBinding);
3916
+ var NameSpaceImport$0 = $TS($S(Star, __, As, __, ImportedBinding), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
3917
+ var binding = $5;
3918
+ return {
3919
+ type: "Declaration",
3920
+ children: $0,
3921
+ names: binding.names
3922
+ };
3923
+ });
3139
3924
  function NameSpaceImport(state) {
3140
3925
  if (state.verbose)
3141
3926
  console.log("ENTER:", "NameSpaceImport");
@@ -3145,7 +3930,17 @@ var Civet = (() => {
3145
3930
  return NameSpaceImport$0(state);
3146
3931
  }
3147
3932
  }
3148
- var NamedImports$0 = $S(OpenBrace, $Q(ImportSpecifier), $E($S(__, Comma)), __, CloseBrace);
3933
+ var NamedImports$0 = $TS($S(OpenBrace, $Q(ImportSpecifier), $E($S(__, Comma)), __, CloseBrace), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
3934
+ var specifiers = $2;
3935
+ const names = specifiers.flatMap(({ binding }) => {
3936
+ return binding.names;
3937
+ });
3938
+ return {
3939
+ type: "Declaration",
3940
+ children: $0,
3941
+ names
3942
+ };
3943
+ });
3149
3944
  function NamedImports(state) {
3150
3945
  if (state.verbose)
3151
3946
  console.log("ENTER:", "NamedImports");
@@ -3165,8 +3960,20 @@ var Civet = (() => {
3165
3960
  return FromClause$0(state);
3166
3961
  }
3167
3962
  }
3168
- var ImportSpecifier$0 = $S(__, ModuleExportName, __, As, NonIdContinue, __, ImportedBinding, ObjectPropertyDelimiter);
3169
- var ImportSpecifier$1 = $S(__, ImportedBinding, ObjectPropertyDelimiter);
3963
+ var ImportSpecifier$0 = $TS($S(__, ModuleExportName, __, As, __, ImportedBinding, ObjectPropertyDelimiter), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7) {
3964
+ var binding = $6;
3965
+ return {
3966
+ binding,
3967
+ children: $0
3968
+ };
3969
+ });
3970
+ var ImportSpecifier$1 = $TS($S(__, ImportedBinding, ObjectPropertyDelimiter), function($skip, $loc, $0, $1, $2, $3) {
3971
+ var binding = $2;
3972
+ return {
3973
+ binding,
3974
+ children: $0
3975
+ };
3976
+ });
3170
3977
  function ImportSpecifier(state) {
3171
3978
  if (state.tokenize) {
3172
3979
  return $TOKEN("ImportSpecifier", state, ImportSpecifier$0(state) || ImportSpecifier$1(state));
@@ -3228,7 +4035,7 @@ var Civet = (() => {
3228
4035
  return ImportedBinding$0(state);
3229
4036
  }
3230
4037
  }
3231
- var ExportDeclaration$0 = $S(Export, __, $EXPECT($L77, fail, 'ExportDeclaration "default"'), NonIdContinue, __, $C(HoistableDeclaration, ClassDeclaration, AssignmentExpression));
4038
+ var ExportDeclaration$0 = $S(Export, __, $EXPECT($L81, fail, 'ExportDeclaration "default"'), NonIdContinue, __, $C(HoistableDeclaration, ClassDeclaration, ExtendedExpression));
3232
4039
  var ExportDeclaration$1 = $S(Export, __, ExportFromClause, __, FromClause);
3233
4040
  var ExportDeclaration$2 = $S(Export, __, $C(NamedExports, VariableStatement, Declaration));
3234
4041
  function ExportDeclaration(state) {
@@ -3238,7 +4045,7 @@ var Civet = (() => {
3238
4045
  return ExportDeclaration$0(state) || ExportDeclaration$1(state) || ExportDeclaration$2(state);
3239
4046
  }
3240
4047
  }
3241
- var ExportFromClause$0 = $S(Star, $E($S(__, As, NonIdContinue, __, ModuleExportName)));
4048
+ var ExportFromClause$0 = $S(Star, $E($S(__, As, __, ModuleExportName)));
3242
4049
  var ExportFromClause$1 = NamedExports;
3243
4050
  function ExportFromClause(state) {
3244
4051
  if (state.tokenize) {
@@ -3288,18 +4095,43 @@ var Civet = (() => {
3288
4095
  return HoistableDeclaration$0(state);
3289
4096
  }
3290
4097
  }
3291
- var LexicalDeclaration$0 = $T($S(LetOrConst, __, LexicalBinding, $Q($S(__, Comma, __, LexicalBinding))), function(value) {
3292
- return { "type": "VariableDeclaration", "children": value };
4098
+ var LexicalDeclaration$0 = $TS($S(LetOrConst, LexicalBinding, $Q($S(__, Comma, LexicalBinding))), function($skip, $loc, $0, $1, $2, $3) {
4099
+ var binding = $2;
4100
+ var tail = $3;
4101
+ return {
4102
+ type: "Declaration",
4103
+ children: $0,
4104
+ names: [...binding.names].concat(tail.flatMap(([, , b]) => b.names))
4105
+ };
3293
4106
  });
3294
- var LexicalDeclaration$1 = $TS($S(InsertConst, $C(BindingPattern, BindingIdentifier), $E(TypeSuffix), __, ConstAssignment, AssignmentExpression), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6) {
4107
+ var LexicalDeclaration$1 = $TS($S(InsertConst, $C(BindingPattern, BindingIdentifier), $E(TypeSuffix), __, ConstAssignment, ExtendedExpression), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6) {
3295
4108
  var c = $1;
4109
+ var id = $2;
3296
4110
  var ca = $5;
4111
+ var e = $6;
3297
4112
  c.$loc = {
3298
4113
  pos: ca.$loc.pos - 1,
3299
4114
  length: ca.$loc.length + 1
3300
4115
  };
4116
+ let exp;
4117
+ if (e.type === "FunctionExpression") {
4118
+ exp = e;
4119
+ } else {
4120
+ exp = e[1];
4121
+ }
4122
+ if (exp?.children?.[0]?.token?.match(/^\s+$/))
4123
+ exp.children.shift();
4124
+ if (id.type === "Identifier" && exp?.type === "FunctionExpression") {
4125
+ if (exp.id.length === 0) {
4126
+ exp.id.push(" ", id, $3, $4);
4127
+ }
4128
+ exp.type = "Declaration";
4129
+ exp.names = id.names;
4130
+ return exp;
4131
+ }
3301
4132
  return {
3302
- type: "VariableDeclaration",
4133
+ type: "Declaration",
4134
+ names: id.names,
3303
4135
  children: $0
3304
4136
  };
3305
4137
  });
@@ -3310,7 +4142,7 @@ var Civet = (() => {
3310
4142
  return LexicalDeclaration$0(state) || LexicalDeclaration$1(state);
3311
4143
  }
3312
4144
  }
3313
- var ConstAssignment$0 = $TV($EXPECT($L78, fail, 'ConstAssignment ":="'), function($skip, $loc, $0, $1) {
4145
+ var ConstAssignment$0 = $TV($EXPECT($L82, fail, 'ConstAssignment ":="'), function($skip, $loc, $0, $1) {
3314
4146
  return { $loc, token: "=" };
3315
4147
  });
3316
4148
  function ConstAssignment(state) {
@@ -3322,8 +4154,19 @@ var Civet = (() => {
3322
4154
  return ConstAssignment$0(state);
3323
4155
  }
3324
4156
  }
3325
- var LexicalBinding$0 = $S(BindingPattern, $E(TypeSuffix), Initializer);
3326
- var LexicalBinding$1 = $S(BindingIdentifier, $E(TypeSuffix), $E(Initializer));
4157
+ var LexicalBinding$0 = $TS($S(BindingPattern, $E(TypeSuffix), Initializer), function($skip, $loc, $0, $1, $2, $3) {
4158
+ if ($2)
4159
+ $1.children.push($2);
4160
+ $1.children.push($3);
4161
+ return $1;
4162
+ });
4163
+ var LexicalBinding$1 = $TS($S(BindingIdentifier, $E(TypeSuffix), $E(Initializer)), function($skip, $loc, $0, $1, $2, $3) {
4164
+ if ($2)
4165
+ $1.children.push($2);
4166
+ if ($3)
4167
+ $1.children.push($3);
4168
+ return $1;
4169
+ });
3327
4170
  function LexicalBinding(state) {
3328
4171
  if (state.tokenize) {
3329
4172
  return $TOKEN("LexicalBinding", state, LexicalBinding$0(state) || LexicalBinding$1(state));
@@ -3331,7 +4174,7 @@ var Civet = (() => {
3331
4174
  return LexicalBinding$0(state) || LexicalBinding$1(state);
3332
4175
  }
3333
4176
  }
3334
- var Initializer$0 = $S(__, Equals, AssignmentExpression);
4177
+ var Initializer$0 = $S(__, Equals, ExtendedExpression);
3335
4178
  function Initializer(state) {
3336
4179
  if (state.verbose)
3337
4180
  console.log("ENTER:", "Initializer");
@@ -3341,8 +4184,9 @@ var Civet = (() => {
3341
4184
  return Initializer$0(state);
3342
4185
  }
3343
4186
  }
3344
- var VariableStatement$0 = $T($S(Var, __, VariableDeclarationList), function(value) {
3345
- return { "type": "VariableDeclaration", "children": value };
4187
+ var VariableStatement$0 = $TS($S(Var, __, VariableDeclarationList), function($skip, $loc, $0, $1, $2, $3) {
4188
+ $3.children.splice(0, 0, $1, ...$2);
4189
+ return $3;
3346
4190
  });
3347
4191
  function VariableStatement(state) {
3348
4192
  if (state.verbose)
@@ -3353,7 +4197,20 @@ var Civet = (() => {
3353
4197
  return VariableStatement$0(state);
3354
4198
  }
3355
4199
  }
3356
- var VariableDeclarationList$0 = $S(VariableDeclaration, $Q($S(__, Comma, __, VariableDeclaration)));
4200
+ var VariableDeclarationList$0 = $TS($S(VariableDeclaration, $Q($S(__, Comma, __, VariableDeclaration))), function($skip, $loc, $0, $1, $2) {
4201
+ let children;
4202
+ if ($2.length) {
4203
+ children = [$1, ...$2];
4204
+ } else {
4205
+ children = [$1];
4206
+ }
4207
+ const names = children.flatMap((c) => c.names || []);
4208
+ return {
4209
+ type: "Declaration",
4210
+ children,
4211
+ names
4212
+ };
4213
+ });
3357
4214
  function VariableDeclarationList(state) {
3358
4215
  if (state.verbose)
3359
4216
  console.log("ENTER:", "VariableDeclarationList");
@@ -3363,8 +4220,19 @@ var Civet = (() => {
3363
4220
  return VariableDeclarationList$0(state);
3364
4221
  }
3365
4222
  }
3366
- var VariableDeclaration$0 = $S(BindingPattern, $E(TypeSuffix), Initializer);
3367
- var VariableDeclaration$1 = $S(BindingIdentifier, $E(TypeSuffix), $E(Initializer));
4223
+ var VariableDeclaration$0 = $TS($S(BindingPattern, $E(TypeSuffix), Initializer), function($skip, $loc, $0, $1, $2, $3) {
4224
+ if ($2)
4225
+ $1.children.push($2);
4226
+ $1.children.push($3);
4227
+ return $1;
4228
+ });
4229
+ var VariableDeclaration$1 = $TS($S(BindingIdentifier, $E(TypeSuffix), $E(Initializer)), function($skip, $loc, $0, $1, $2, $3) {
4230
+ if ($2)
4231
+ $1.children.push($2);
4232
+ if ($3)
4233
+ $1.children.push($3);
4234
+ return $1;
4235
+ });
3368
4236
  function VariableDeclaration(state) {
3369
4237
  if (state.tokenize) {
3370
4238
  return $TOKEN("VariableDeclaration", state, VariableDeclaration$0(state) || VariableDeclaration$1(state));
@@ -3545,7 +4413,7 @@ var Civet = (() => {
3545
4413
  return TripleSingleStringCharacters$0(state);
3546
4414
  }
3547
4415
  }
3548
- var CoffeeStringSubstitution$0 = $S(CoffeeSubstitutionStart, Expression, __, CloseBrace);
4416
+ var CoffeeStringSubstitution$0 = $S(CoffeeSubstitutionStart, ExtendedExpression, __, CloseBrace);
3549
4417
  function CoffeeStringSubstitution(state) {
3550
4418
  if (state.verbose)
3551
4419
  console.log("ENTER:", "CoffeeStringSubstitution");
@@ -3596,7 +4464,7 @@ var Civet = (() => {
3596
4464
  return CoffeeDoubleQuotedStringCharacters$0(state);
3597
4465
  }
3598
4466
  }
3599
- var RegularExpressionLiteral$0 = $TV($TEXT($S($EXPECT($L46, fail, 'RegularExpressionLiteral "/"'), RegularExpressionBody, $EXPECT($L46, fail, 'RegularExpressionLiteral "/"'), RegularExpressionFlags)), function($skip, $loc, $0, $1) {
4467
+ var RegularExpressionLiteral$0 = $TV($TEXT($S($EXPECT($L47, fail, 'RegularExpressionLiteral "/"'), RegularExpressionBody, $EXPECT($L47, fail, 'RegularExpressionLiteral "/"'), RegularExpressionFlags)), function($skip, $loc, $0, $1) {
3600
4468
  return { $loc, token: $1 };
3601
4469
  });
3602
4470
  function RegularExpressionLiteral(state) {
@@ -3649,7 +4517,7 @@ var Civet = (() => {
3649
4517
  return TemplateLiteral$0(state) || TemplateLiteral$1(state);
3650
4518
  }
3651
4519
  }
3652
- var TemplateSubstitution$0 = $S(SubstitutionStart, Expression, __, CloseBrace);
4520
+ var TemplateSubstitution$0 = $S(SubstitutionStart, ExtendedExpression, __, CloseBrace);
3653
4521
  function TemplateSubstitution(state) {
3654
4522
  if (state.verbose)
3655
4523
  console.log("ENTER:", "TemplateSubstitution");
@@ -3684,12 +4552,13 @@ var Civet = (() => {
3684
4552
  }
3685
4553
  }
3686
4554
  var ReservedWord$0 = $S(CoffeeBooleansEnabled, $R$0($EXPECT($R23, fail, "ReservedWord /(?:on|off|yes|no)(?!\\p{ID_Continue})/")));
3687
- 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})/"));
4555
+ var ReservedWord$1 = $S(CoffeeIsntEnabled, $R$0($EXPECT($R24, fail, "ReservedWord /(?:isnt)(?!\\p{ID_Continue})/")));
4556
+ 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})/"));
3688
4557
  function ReservedWord(state) {
3689
4558
  if (state.tokenize) {
3690
- return $TOKEN("ReservedWord", state, ReservedWord$0(state) || ReservedWord$1(state));
4559
+ return $TOKEN("ReservedWord", state, ReservedWord$0(state) || ReservedWord$1(state) || ReservedWord$2(state));
3691
4560
  } else {
3692
- return ReservedWord$0(state) || ReservedWord$1(state);
4561
+ return ReservedWord$0(state) || ReservedWord$1(state) || ReservedWord$2(state);
3693
4562
  }
3694
4563
  }
3695
4564
  var Comment$0 = MultiLineComment;
@@ -3701,7 +4570,7 @@ var Civet = (() => {
3701
4570
  return Comment$0(state) || Comment$1(state);
3702
4571
  }
3703
4572
  }
3704
- var SingleLineComment$0 = $TR($EXPECT($R25, fail, "SingleLineComment /\\/\\/[^\\r\\n]*/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
4573
+ var SingleLineComment$0 = $TR($EXPECT($R26, fail, "SingleLineComment /\\/\\/[^\\r\\n]*/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
3705
4574
  return { $loc, token: $0 };
3706
4575
  });
3707
4576
  var SingleLineComment$1 = $S(CoffeeCommentEnabled, CoffeeSingleLineComment);
@@ -3721,7 +4590,7 @@ var Civet = (() => {
3721
4590
  return MultiLineComment$0(state) || MultiLineComment$1(state);
3722
4591
  }
3723
4592
  }
3724
- 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) {
4593
+ var JSMultiLineComment$0 = $TV($TEXT($S($EXPECT($L83, fail, 'JSMultiLineComment "/*"'), $Q($S($N($EXPECT($L84, fail, 'JSMultiLineComment "*/"')), $EXPECT($R27, fail, "JSMultiLineComment /./"))), $EXPECT($L84, fail, 'JSMultiLineComment "*/"'))), function($skip, $loc, $0, $1) {
3725
4594
  return { $loc, token: $1 };
3726
4595
  });
3727
4596
  function JSMultiLineComment(state) {
@@ -3733,7 +4602,7 @@ var Civet = (() => {
3733
4602
  return JSMultiLineComment$0(state);
3734
4603
  }
3735
4604
  }
3736
- var CoffeeSingleLineComment$0 = $TR($EXPECT($R27, fail, "CoffeeSingleLineComment /#([^\\r\\n]*)/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
4605
+ var CoffeeSingleLineComment$0 = $TR($EXPECT($R28, fail, "CoffeeSingleLineComment /#([^\\r\\n]*)/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
3737
4606
  return { $loc, token: `//${$1}` };
3738
4607
  });
3739
4608
  function CoffeeSingleLineComment(state) {
@@ -3745,7 +4614,7 @@ var Civet = (() => {
3745
4614
  return CoffeeSingleLineComment$0(state);
3746
4615
  }
3747
4616
  }
3748
- 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) {
4617
+ var CoffeeMultiLineComment$0 = $TS($S($EXPECT($L85, fail, 'CoffeeMultiLineComment "###"'), $TEXT($Q($S($N($C($EXPECT($L85, fail, 'CoffeeMultiLineComment "###"'), $EXPECT($L84, fail, 'CoffeeMultiLineComment "*/"'))), $EXPECT($R27, fail, "CoffeeMultiLineComment /./")))), $EXPECT($L85, fail, 'CoffeeMultiLineComment "###"')), function($skip, $loc, $0, $1, $2, $3) {
3749
4618
  return { $loc, token: `/*${$2}*/` };
3750
4619
  });
3751
4620
  function CoffeeMultiLineComment(state) {
@@ -3757,7 +4626,7 @@ var Civet = (() => {
3757
4626
  return CoffeeMultiLineComment$0(state);
3758
4627
  }
3759
4628
  }
3760
- 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) {
4629
+ var InlineComment$0 = $TV($TEXT($S($EXPECT($L83, fail, 'InlineComment "/*"'), $TEXT($Q($S($N($EXPECT($L84, fail, 'InlineComment "*/"')), $EXPECT($R29, fail, "InlineComment /[^\\r\\n]/")))), $EXPECT($L84, fail, 'InlineComment "*/"'))), function($skip, $loc, $0, $1) {
3761
4630
  return { $loc, token: $1 };
3762
4631
  });
3763
4632
  function InlineComment(state) {
@@ -3799,7 +4668,7 @@ var Civet = (() => {
3799
4668
  return _$0(state);
3800
4669
  }
3801
4670
  }
3802
- var NonNewlineWhitespace$0 = $TR($EXPECT($R29, fail, "NonNewlineWhitespace /[ \\t]+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
4671
+ var NonNewlineWhitespace$0 = $TR($EXPECT($R30, fail, "NonNewlineWhitespace /[ \\t]+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
3803
4672
  return { $loc, token: $0 };
3804
4673
  });
3805
4674
  function NonNewlineWhitespace(state) {
@@ -3821,7 +4690,7 @@ var Civet = (() => {
3821
4690
  return __$0(state);
3822
4691
  }
3823
4692
  }
3824
- var Whitespace$0 = $TR($EXPECT($R30, fail, "Whitespace /[\\s]+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
4693
+ var Whitespace$0 = $TR($EXPECT($R31, fail, "Whitespace /[\\s]+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
3825
4694
  return { $loc, token: $0 };
3826
4695
  });
3827
4696
  function Whitespace(state) {
@@ -3833,6 +4702,20 @@ var Civet = (() => {
3833
4702
  return Whitespace$0(state);
3834
4703
  }
3835
4704
  }
4705
+ var ExpressionDelimiter$0 = $TS($S($Q(TrailingComment), Semicolon, $Q(TrailingComment)), function($skip, $loc, $0, $1, $2, $3) {
4706
+ $2.token = ",";
4707
+ return $0;
4708
+ });
4709
+ var ExpressionDelimiter$1 = $TV($Y(EOS), function($skip, $loc, $0, $1) {
4710
+ return { $loc, token: "," };
4711
+ });
4712
+ function ExpressionDelimiter(state) {
4713
+ if (state.tokenize) {
4714
+ return $TOKEN("ExpressionDelimiter", state, ExpressionDelimiter$0(state) || ExpressionDelimiter$1(state));
4715
+ } else {
4716
+ return ExpressionDelimiter$0(state) || ExpressionDelimiter$1(state);
4717
+ }
4718
+ }
3836
4719
  var StatementDelimiter$0 = $S($Q(TrailingComment), Semicolon, $Q(TrailingComment));
3837
4720
  var StatementDelimiter$1 = $Y(EOS);
3838
4721
  function StatementDelimiter(state) {
@@ -3842,7 +4725,7 @@ var Civet = (() => {
3842
4725
  return StatementDelimiter$0(state) || StatementDelimiter$1(state);
3843
4726
  }
3844
4727
  }
3845
- var NonIdContinue$0 = $R$0($EXPECT($R31, fail, "NonIdContinue /(?!\\p{ID_Continue})/"));
4728
+ var NonIdContinue$0 = $R$0($EXPECT($R32, fail, "NonIdContinue /(?!\\p{ID_Continue})/"));
3846
4729
  function NonIdContinue(state) {
3847
4730
  if (state.verbose)
3848
4731
  console.log("ENTER:", "NonIdContinue");
@@ -3864,7 +4747,19 @@ var Civet = (() => {
3864
4747
  return Loc$0(state);
3865
4748
  }
3866
4749
  }
3867
- var As$0 = $TS($S($EXPECT($L82, fail, 'As "as"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4750
+ var Ampersand$0 = $TV($EXPECT($L71, fail, 'Ampersand "&"'), function($skip, $loc, $0, $1) {
4751
+ return { $loc, token: $1 };
4752
+ });
4753
+ function Ampersand(state) {
4754
+ if (state.verbose)
4755
+ console.log("ENTER:", "Ampersand");
4756
+ if (state.tokenize) {
4757
+ return $TOKEN("Ampersand", state, Ampersand$0(state));
4758
+ } else {
4759
+ return Ampersand$0(state);
4760
+ }
4761
+ }
4762
+ var As$0 = $TS($S($EXPECT($L86, fail, 'As "as"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3868
4763
  return { $loc, token: $1 };
3869
4764
  });
3870
4765
  function As(state) {
@@ -3876,7 +4771,7 @@ var Civet = (() => {
3876
4771
  return As$0(state);
3877
4772
  }
3878
4773
  }
3879
- var Async$0 = $TV($EXPECT($L83, fail, 'Async "async"'), function($skip, $loc, $0, $1) {
4774
+ var Async$0 = $TV($EXPECT($L87, fail, 'Async "async"'), function($skip, $loc, $0, $1) {
3880
4775
  return { $loc, token: $1 };
3881
4776
  });
3882
4777
  function Async(state) {
@@ -3888,7 +4783,7 @@ var Civet = (() => {
3888
4783
  return Async$0(state);
3889
4784
  }
3890
4785
  }
3891
- var Await$0 = $TS($S($EXPECT($L84, fail, 'Await "await"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4786
+ var Await$0 = $TS($S($EXPECT($L88, fail, 'Await "await"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3892
4787
  return { $loc, token: $1 };
3893
4788
  });
3894
4789
  function Await(state) {
@@ -3900,7 +4795,7 @@ var Civet = (() => {
3900
4795
  return Await$0(state);
3901
4796
  }
3902
4797
  }
3903
- var Backtick$0 = $TV($EXPECT($L85, fail, 'Backtick "`"'), function($skip, $loc, $0, $1) {
4798
+ var Backtick$0 = $TV($EXPECT($L89, fail, 'Backtick "`"'), function($skip, $loc, $0, $1) {
3904
4799
  return { $loc, token: $1 };
3905
4800
  });
3906
4801
  function Backtick(state) {
@@ -3912,7 +4807,7 @@ var Civet = (() => {
3912
4807
  return Backtick$0(state);
3913
4808
  }
3914
4809
  }
3915
- var Case$0 = $TS($S($EXPECT($L86, fail, 'Case "case"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4810
+ var Case$0 = $TS($S($EXPECT($L90, fail, 'Case "case"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
3916
4811
  return { $loc, token: $1 };
3917
4812
  });
3918
4813
  function Case(state) {
@@ -3924,7 +4819,7 @@ var Civet = (() => {
3924
4819
  return Case$0(state);
3925
4820
  }
3926
4821
  }
3927
- var Catch$0 = $TV($EXPECT($L87, fail, 'Catch "catch"'), function($skip, $loc, $0, $1) {
4822
+ var Catch$0 = $TV($EXPECT($L91, fail, 'Catch "catch"'), function($skip, $loc, $0, $1) {
3928
4823
  return { $loc, token: $1 };
3929
4824
  });
3930
4825
  function Catch(state) {
@@ -3936,7 +4831,7 @@ var Civet = (() => {
3936
4831
  return Catch$0(state);
3937
4832
  }
3938
4833
  }
3939
- var Class$0 = $TV($EXPECT($L88, fail, 'Class "class"'), function($skip, $loc, $0, $1) {
4834
+ var Class$0 = $TV($EXPECT($L92, fail, 'Class "class"'), function($skip, $loc, $0, $1) {
3940
4835
  return { $loc, token: $1 };
3941
4836
  });
3942
4837
  function Class(state) {
@@ -3948,7 +4843,7 @@ var Civet = (() => {
3948
4843
  return Class$0(state);
3949
4844
  }
3950
4845
  }
3951
- var CloseBrace$0 = $TV($EXPECT($L26, fail, 'CloseBrace "}"'), function($skip, $loc, $0, $1) {
4846
+ var CloseBrace$0 = $TV($EXPECT($L27, fail, 'CloseBrace "}"'), function($skip, $loc, $0, $1) {
3952
4847
  return { $loc, token: $1 };
3953
4848
  });
3954
4849
  function CloseBrace(state) {
@@ -3960,7 +4855,7 @@ var Civet = (() => {
3960
4855
  return CloseBrace$0(state);
3961
4856
  }
3962
4857
  }
3963
- var CloseBracket$0 = $TV($EXPECT($L25, fail, 'CloseBracket "]"'), function($skip, $loc, $0, $1) {
4858
+ var CloseBracket$0 = $TV($EXPECT($L26, fail, 'CloseBracket "]"'), function($skip, $loc, $0, $1) {
3964
4859
  return { $loc, token: $1 };
3965
4860
  });
3966
4861
  function CloseBracket(state) {
@@ -3972,7 +4867,7 @@ var Civet = (() => {
3972
4867
  return CloseBracket$0(state);
3973
4868
  }
3974
4869
  }
3975
- var CloseParen$0 = $TV($EXPECT($L15, fail, 'CloseParen ")"'), function($skip, $loc, $0, $1) {
4870
+ var CloseParen$0 = $TV($EXPECT($L16, fail, 'CloseParen ")"'), function($skip, $loc, $0, $1) {
3976
4871
  return { $loc, token: $1 };
3977
4872
  });
3978
4873
  function CloseParen(state) {
@@ -3984,7 +4879,7 @@ var Civet = (() => {
3984
4879
  return CloseParen$0(state);
3985
4880
  }
3986
4881
  }
3987
- var CoffeeSubstitutionStart$0 = $TV($EXPECT($L89, fail, 'CoffeeSubstitutionStart "#{"'), function($skip, $loc, $0, $1) {
4882
+ var CoffeeSubstitutionStart$0 = $TV($EXPECT($L93, fail, 'CoffeeSubstitutionStart "#{"'), function($skip, $loc, $0, $1) {
3988
4883
  return { $loc, token: "${" };
3989
4884
  });
3990
4885
  function CoffeeSubstitutionStart(state) {
@@ -3996,7 +4891,7 @@ var Civet = (() => {
3996
4891
  return CoffeeSubstitutionStart$0(state);
3997
4892
  }
3998
4893
  }
3999
- var Colon$0 = $TV($EXPECT($L90, fail, 'Colon ":"'), function($skip, $loc, $0, $1) {
4894
+ var Colon$0 = $TV($EXPECT($L94, fail, 'Colon ":"'), function($skip, $loc, $0, $1) {
4000
4895
  return { $loc, token: $1 };
4001
4896
  });
4002
4897
  function Colon(state) {
@@ -4020,7 +4915,7 @@ var Civet = (() => {
4020
4915
  return ConstructorShorthand$0(state);
4021
4916
  }
4022
4917
  }
4023
- var Default$0 = $TS($S($EXPECT($L77, fail, 'Default "default"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4918
+ var Default$0 = $TS($S($EXPECT($L81, fail, 'Default "default"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4024
4919
  return { $loc, token: $1 };
4025
4920
  });
4026
4921
  function Default(state) {
@@ -4032,7 +4927,7 @@ var Civet = (() => {
4032
4927
  return Default$0(state);
4033
4928
  }
4034
4929
  }
4035
- var Delete$0 = $TS($S($EXPECT($L91, fail, 'Delete "delete"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4930
+ var Delete$0 = $TS($S($EXPECT($L95, fail, 'Delete "delete"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4036
4931
  return { $loc, token: $1 };
4037
4932
  });
4038
4933
  function Delete(state) {
@@ -4044,7 +4939,7 @@ var Civet = (() => {
4044
4939
  return Delete$0(state);
4045
4940
  }
4046
4941
  }
4047
- var Do$0 = $TS($S($EXPECT($L92, fail, 'Do "do"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4942
+ var Do$0 = $TS($S($EXPECT($L96, fail, 'Do "do"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4048
4943
  return { $loc, token: $1 };
4049
4944
  });
4050
4945
  function Do(state) {
@@ -4056,7 +4951,7 @@ var Civet = (() => {
4056
4951
  return Do$0(state);
4057
4952
  }
4058
4953
  }
4059
- var Dot$0 = $TV($EXPECT($L93, fail, 'Dot "."'), function($skip, $loc, $0, $1) {
4954
+ var Dot$0 = $TV($EXPECT($L9, fail, 'Dot "."'), function($skip, $loc, $0, $1) {
4060
4955
  return { $loc, token: $1 };
4061
4956
  });
4062
4957
  function Dot(state) {
@@ -4068,7 +4963,7 @@ var Civet = (() => {
4068
4963
  return Dot$0(state);
4069
4964
  }
4070
4965
  }
4071
- var DotDot$0 = $TV($EXPECT($L94, fail, 'DotDot ".."'), function($skip, $loc, $0, $1) {
4966
+ var DotDot$0 = $TV($EXPECT($L97, fail, 'DotDot ".."'), function($skip, $loc, $0, $1) {
4072
4967
  return { $loc, token: $1 };
4073
4968
  });
4074
4969
  function DotDot(state) {
@@ -4080,7 +4975,7 @@ var Civet = (() => {
4080
4975
  return DotDot$0(state);
4081
4976
  }
4082
4977
  }
4083
- var DotDotDot$0 = $TV($EXPECT($L95, fail, 'DotDotDot "..."'), function($skip, $loc, $0, $1) {
4978
+ var DotDotDot$0 = $TV($EXPECT($L98, fail, 'DotDotDot "..."'), function($skip, $loc, $0, $1) {
4084
4979
  return { $loc, token: $1 };
4085
4980
  });
4086
4981
  function DotDotDot(state) {
@@ -4092,7 +4987,7 @@ var Civet = (() => {
4092
4987
  return DotDotDot$0(state);
4093
4988
  }
4094
4989
  }
4095
- var DoubleQuote$0 = $TV($EXPECT($L96, fail, 'DoubleQuote "\\\\\\""'), function($skip, $loc, $0, $1) {
4990
+ var DoubleQuote$0 = $TV($EXPECT($L99, fail, 'DoubleQuote "\\\\\\""'), function($skip, $loc, $0, $1) {
4096
4991
  return { $loc, token: $1 };
4097
4992
  });
4098
4993
  function DoubleQuote(state) {
@@ -4104,7 +4999,7 @@ var Civet = (() => {
4104
4999
  return DoubleQuote$0(state);
4105
5000
  }
4106
5001
  }
4107
- var Else$0 = $TV($EXPECT($L97, fail, 'Else "else"'), function($skip, $loc, $0, $1) {
5002
+ var Else$0 = $TV($EXPECT($L100, fail, 'Else "else"'), function($skip, $loc, $0, $1) {
4108
5003
  return { $loc, token: $1 };
4109
5004
  });
4110
5005
  function Else(state) {
@@ -4116,7 +5011,7 @@ var Civet = (() => {
4116
5011
  return Else$0(state);
4117
5012
  }
4118
5013
  }
4119
- var Equals$0 = $TV($EXPECT($L43, fail, 'Equals "="'), function($skip, $loc, $0, $1) {
5014
+ var Equals$0 = $TV($EXPECT($L44, fail, 'Equals "="'), function($skip, $loc, $0, $1) {
4120
5015
  return { $loc, token: $1 };
4121
5016
  });
4122
5017
  function Equals(state) {
@@ -4128,7 +5023,7 @@ var Civet = (() => {
4128
5023
  return Equals$0(state);
4129
5024
  }
4130
5025
  }
4131
- var Export$0 = $TS($S($EXPECT($L98, fail, 'Export "export"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5026
+ var Export$0 = $TS($S($EXPECT($L101, fail, 'Export "export"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4132
5027
  return { $loc, token: $1 };
4133
5028
  });
4134
5029
  function Export(state) {
@@ -4140,7 +5035,7 @@ var Civet = (() => {
4140
5035
  return Export$0(state);
4141
5036
  }
4142
5037
  }
4143
- var For$0 = $TS($S($EXPECT($L99, fail, 'For "for"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5038
+ var For$0 = $TS($S($EXPECT($L102, fail, 'For "for"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4144
5039
  return { $loc, token: $1 };
4145
5040
  });
4146
5041
  function For(state) {
@@ -4152,7 +5047,7 @@ var Civet = (() => {
4152
5047
  return For$0(state);
4153
5048
  }
4154
5049
  }
4155
- var From$0 = $TS($S($EXPECT($L100, fail, 'From "from"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5050
+ var From$0 = $TS($S($EXPECT($L103, fail, 'From "from"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4156
5051
  return { $loc, token: $1 };
4157
5052
  });
4158
5053
  function From(state) {
@@ -4164,7 +5059,7 @@ var Civet = (() => {
4164
5059
  return From$0(state);
4165
5060
  }
4166
5061
  }
4167
- var Function$0 = $TV($EXPECT($L101, fail, 'Function "function"'), function($skip, $loc, $0, $1) {
5062
+ var Function$0 = $TV($EXPECT($L104, fail, 'Function "function"'), function($skip, $loc, $0, $1) {
4168
5063
  return { $loc, token: $1 };
4169
5064
  });
4170
5065
  function Function(state) {
@@ -4176,7 +5071,7 @@ var Civet = (() => {
4176
5071
  return Function$0(state);
4177
5072
  }
4178
5073
  }
4179
- var GetOrSet$0 = $TS($S($C($EXPECT($L102, fail, 'GetOrSet "get"'), $EXPECT($L103, fail, 'GetOrSet "set"')), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5074
+ var GetOrSet$0 = $TS($S($C($EXPECT($L105, fail, 'GetOrSet "get"'), $EXPECT($L106, fail, 'GetOrSet "set"')), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4180
5075
  return { $loc, token: $1 };
4181
5076
  });
4182
5077
  function GetOrSet(state) {
@@ -4188,7 +5083,7 @@ var Civet = (() => {
4188
5083
  return GetOrSet$0(state);
4189
5084
  }
4190
5085
  }
4191
- var If$0 = $TV($EXPECT($L104, fail, 'If "if"'), function($skip, $loc, $0, $1) {
5086
+ var If$0 = $TV($TEXT($S($EXPECT($L107, fail, 'If "if"'), $E($EXPECT($L108, fail, 'If " "')))), function($skip, $loc, $0, $1) {
4192
5087
  return { $loc, token: $1 };
4193
5088
  });
4194
5089
  function If(state) {
@@ -4200,7 +5095,7 @@ var Civet = (() => {
4200
5095
  return If$0(state);
4201
5096
  }
4202
5097
  }
4203
- var Import$0 = $TS($S($EXPECT($L10, fail, 'Import "import"'), $Y($EXPECT($R32, fail, "Import /\\s/"))), function($skip, $loc, $0, $1, $2) {
5098
+ var Import$0 = $TS($S($EXPECT($L11, fail, 'Import "import"'), $Y($EXPECT($R33, fail, "Import /\\s/"))), function($skip, $loc, $0, $1, $2) {
4204
5099
  return { $loc, token: $1 };
4205
5100
  });
4206
5101
  function Import(state) {
@@ -4212,7 +5107,7 @@ var Civet = (() => {
4212
5107
  return Import$0(state);
4213
5108
  }
4214
5109
  }
4215
- var In$0 = $TV($EXPECT($L67, fail, 'In "in"'), function($skip, $loc, $0, $1) {
5110
+ var In$0 = $TV($EXPECT($L70, fail, 'In "in"'), function($skip, $loc, $0, $1) {
4216
5111
  return { $loc, token: $1 };
4217
5112
  });
4218
5113
  function In(state) {
@@ -4224,7 +5119,7 @@ var Civet = (() => {
4224
5119
  return In$0(state);
4225
5120
  }
4226
5121
  }
4227
- var LetOrConst$0 = $TV($C($EXPECT($L105, fail, 'LetOrConst "let"'), $EXPECT($L106, fail, 'LetOrConst "const"')), function($skip, $loc, $0, $1) {
5122
+ var LetOrConst$0 = $TV($C($EXPECT($L109, fail, 'LetOrConst "let"'), $EXPECT($L110, fail, 'LetOrConst "const"')), function($skip, $loc, $0, $1) {
4228
5123
  return { $loc, token: $1 };
4229
5124
  });
4230
5125
  function LetOrConst(state) {
@@ -4236,7 +5131,7 @@ var Civet = (() => {
4236
5131
  return LetOrConst$0(state);
4237
5132
  }
4238
5133
  }
4239
- var Loop$0 = $TS($S($EXPECT($L107, fail, 'Loop "loop"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5134
+ var Loop$0 = $TS($S($EXPECT($L111, fail, 'Loop "loop"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4240
5135
  return { $loc, token: "while(true)" };
4241
5136
  });
4242
5137
  function Loop(state) {
@@ -4248,7 +5143,7 @@ var Civet = (() => {
4248
5143
  return Loop$0(state);
4249
5144
  }
4250
5145
  }
4251
- var New$0 = $TV($EXPECT($L108, fail, 'New "new"'), function($skip, $loc, $0, $1) {
5146
+ var New$0 = $TV($EXPECT($L112, fail, 'New "new"'), function($skip, $loc, $0, $1) {
4252
5147
  return { $loc, token: $1 };
4253
5148
  });
4254
5149
  function New(state) {
@@ -4260,7 +5155,19 @@ var Civet = (() => {
4260
5155
  return New$0(state);
4261
5156
  }
4262
5157
  }
4263
- var Of$0 = $TV($EXPECT($L109, fail, 'Of "of"'), function($skip, $loc, $0, $1) {
5158
+ var Not$0 = $TS($S(CoffeeNotEnabled, $EXPECT($L113, fail, 'Not "not"'), NonIdContinue, $E($EXPECT($L108, fail, 'Not " "'))), function($skip, $loc, $0, $1, $2, $3, $4) {
5159
+ return { $loc, token: "!" };
5160
+ });
5161
+ function Not(state) {
5162
+ if (state.verbose)
5163
+ console.log("ENTER:", "Not");
5164
+ if (state.tokenize) {
5165
+ return $TOKEN("Not", state, Not$0(state));
5166
+ } else {
5167
+ return Not$0(state);
5168
+ }
5169
+ }
5170
+ var Of$0 = $TV($EXPECT($L65, fail, 'Of "of"'), function($skip, $loc, $0, $1) {
4264
5171
  return { $loc, token: $1 };
4265
5172
  });
4266
5173
  function Of(state) {
@@ -4272,7 +5179,7 @@ var Civet = (() => {
4272
5179
  return Of$0(state);
4273
5180
  }
4274
5181
  }
4275
- var OpenBrace$0 = $TV($EXPECT($L110, fail, 'OpenBrace "{"'), function($skip, $loc, $0, $1) {
5182
+ var OpenBrace$0 = $TV($EXPECT($L114, fail, 'OpenBrace "{"'), function($skip, $loc, $0, $1) {
4276
5183
  return { $loc, token: $1 };
4277
5184
  });
4278
5185
  function OpenBrace(state) {
@@ -4284,7 +5191,7 @@ var Civet = (() => {
4284
5191
  return OpenBrace$0(state);
4285
5192
  }
4286
5193
  }
4287
- var OpenBracket$0 = $TV($EXPECT($L111, fail, 'OpenBracket "["'), function($skip, $loc, $0, $1) {
5194
+ var OpenBracket$0 = $TV($EXPECT($L115, fail, 'OpenBracket "["'), function($skip, $loc, $0, $1) {
4288
5195
  return { $loc, token: $1 };
4289
5196
  });
4290
5197
  function OpenBracket(state) {
@@ -4296,7 +5203,7 @@ var Civet = (() => {
4296
5203
  return OpenBracket$0(state);
4297
5204
  }
4298
5205
  }
4299
- var OpenParen$0 = $TV($EXPECT($L112, fail, 'OpenParen "("'), function($skip, $loc, $0, $1) {
5206
+ var OpenParen$0 = $TV($EXPECT($L116, fail, 'OpenParen "("'), function($skip, $loc, $0, $1) {
4300
5207
  return { $loc, token: $1 };
4301
5208
  });
4302
5209
  function OpenParen(state) {
@@ -4308,7 +5215,7 @@ var Civet = (() => {
4308
5215
  return OpenParen$0(state);
4309
5216
  }
4310
5217
  }
4311
- var QuestionMark$0 = $TV($EXPECT($L113, fail, 'QuestionMark "?"'), function($skip, $loc, $0, $1) {
5218
+ var QuestionMark$0 = $TV($EXPECT($L117, fail, 'QuestionMark "?"'), function($skip, $loc, $0, $1) {
4312
5219
  return { $loc, token: $1 };
4313
5220
  });
4314
5221
  function QuestionMark(state) {
@@ -4320,7 +5227,7 @@ var Civet = (() => {
4320
5227
  return QuestionMark$0(state);
4321
5228
  }
4322
5229
  }
4323
- var Return$0 = $TS($S($EXPECT($L114, fail, 'Return "return"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5230
+ var Return$0 = $TS($S($EXPECT($L118, fail, 'Return "return"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4324
5231
  return { $loc, token: $1 };
4325
5232
  });
4326
5233
  function Return(state) {
@@ -4332,7 +5239,7 @@ var Civet = (() => {
4332
5239
  return Return$0(state);
4333
5240
  }
4334
5241
  }
4335
- var Semicolon$0 = $TV($EXPECT($L71, fail, 'Semicolon ";"'), function($skip, $loc, $0, $1) {
5242
+ var Semicolon$0 = $TV($EXPECT($L74, fail, 'Semicolon ";"'), function($skip, $loc, $0, $1) {
4336
5243
  return { $loc, token: $1 };
4337
5244
  });
4338
5245
  function Semicolon(state) {
@@ -4344,7 +5251,7 @@ var Civet = (() => {
4344
5251
  return Semicolon$0(state);
4345
5252
  }
4346
5253
  }
4347
- var SingleQuote$0 = $TV($EXPECT($L115, fail, `SingleQuote "'"`), function($skip, $loc, $0, $1) {
5254
+ var SingleQuote$0 = $TV($EXPECT($L119, fail, `SingleQuote "'"`), function($skip, $loc, $0, $1) {
4348
5255
  return { $loc, token: $1 };
4349
5256
  });
4350
5257
  function SingleQuote(state) {
@@ -4356,7 +5263,7 @@ var Civet = (() => {
4356
5263
  return SingleQuote$0(state);
4357
5264
  }
4358
5265
  }
4359
- var Star$0 = $TV($EXPECT($L45, fail, 'Star "*"'), function($skip, $loc, $0, $1) {
5266
+ var Star$0 = $TV($EXPECT($L46, fail, 'Star "*"'), function($skip, $loc, $0, $1) {
4360
5267
  return { $loc, token: $1 };
4361
5268
  });
4362
5269
  function Star(state) {
@@ -4368,10 +5275,10 @@ var Civet = (() => {
4368
5275
  return Star$0(state);
4369
5276
  }
4370
5277
  }
4371
- var Static$0 = $TV($EXPECT($L116, fail, 'Static "static"'), function($skip, $loc, $0, $1) {
5278
+ var Static$0 = $TV($EXPECT($L120, fail, 'Static "static"'), function($skip, $loc, $0, $1) {
4372
5279
  return { $loc, token: $1 };
4373
5280
  });
4374
- var Static$1 = $TS($S($EXPECT($L8, fail, 'Static "@"'), $N($EXPECT($L112, fail, 'Static "("'))), function($skip, $loc, $0, $1, $2) {
5281
+ var Static$1 = $TS($S($EXPECT($L8, fail, 'Static "@"'), $N($EXPECT($L116, fail, 'Static "("'))), function($skip, $loc, $0, $1, $2) {
4375
5282
  return { $loc, token: "static " };
4376
5283
  });
4377
5284
  function Static(state) {
@@ -4381,7 +5288,7 @@ var Civet = (() => {
4381
5288
  return Static$0(state) || Static$1(state);
4382
5289
  }
4383
5290
  }
4384
- var SubstitutionStart$0 = $TV($EXPECT($L117, fail, 'SubstitutionStart "${"'), function($skip, $loc, $0, $1) {
5291
+ var SubstitutionStart$0 = $TV($EXPECT($L121, fail, 'SubstitutionStart "${"'), function($skip, $loc, $0, $1) {
4385
5292
  return { $loc, token: $1 };
4386
5293
  });
4387
5294
  function SubstitutionStart(state) {
@@ -4393,7 +5300,7 @@ var Civet = (() => {
4393
5300
  return SubstitutionStart$0(state);
4394
5301
  }
4395
5302
  }
4396
- var Switch$0 = $TS($S($EXPECT($L118, fail, 'Switch "switch"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5303
+ var Switch$0 = $TS($S($EXPECT($L122, fail, 'Switch "switch"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4397
5304
  return { $loc, token: $1 };
4398
5305
  });
4399
5306
  function Switch(state) {
@@ -4405,7 +5312,7 @@ var Civet = (() => {
4405
5312
  return Switch$0(state);
4406
5313
  }
4407
5314
  }
4408
- var Target$0 = $TV($EXPECT($L119, fail, 'Target "target"'), function($skip, $loc, $0, $1) {
5315
+ var Target$0 = $TV($EXPECT($L123, fail, 'Target "target"'), function($skip, $loc, $0, $1) {
4409
5316
  return { $loc, token: $1 };
4410
5317
  });
4411
5318
  function Target(state) {
@@ -4417,7 +5324,19 @@ var Civet = (() => {
4417
5324
  return Target$0(state);
4418
5325
  }
4419
5326
  }
4420
- var Throw$0 = $TS($S($EXPECT($L120, fail, 'Throw "throw"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5327
+ var Then$0 = $TS($S(__, $EXPECT($L124, fail, 'Then "then"'), NonIdContinue), function($skip, $loc, $0, $1, $2, $3) {
5328
+ return { $loc, token: "" };
5329
+ });
5330
+ function Then(state) {
5331
+ if (state.verbose)
5332
+ console.log("ENTER:", "Then");
5333
+ if (state.tokenize) {
5334
+ return $TOKEN("Then", state, Then$0(state));
5335
+ } else {
5336
+ return Then$0(state);
5337
+ }
5338
+ }
5339
+ var Throw$0 = $TS($S($EXPECT($L125, fail, 'Throw "throw"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4421
5340
  return { $loc, token: $1 };
4422
5341
  });
4423
5342
  function Throw(state) {
@@ -4429,7 +5348,7 @@ var Civet = (() => {
4429
5348
  return Throw$0(state);
4430
5349
  }
4431
5350
  }
4432
- var TripleDoubleQuote$0 = $TV($EXPECT($L121, fail, 'TripleDoubleQuote "\\\\\\"\\\\\\"\\\\\\""'), function($skip, $loc, $0, $1) {
5351
+ var TripleDoubleQuote$0 = $TV($EXPECT($L126, fail, 'TripleDoubleQuote "\\\\\\"\\\\\\"\\\\\\""'), function($skip, $loc, $0, $1) {
4433
5352
  return { $loc, token: "`" };
4434
5353
  });
4435
5354
  function TripleDoubleQuote(state) {
@@ -4441,7 +5360,7 @@ var Civet = (() => {
4441
5360
  return TripleDoubleQuote$0(state);
4442
5361
  }
4443
5362
  }
4444
- var TripleSingleQuote$0 = $TV($EXPECT($L122, fail, `TripleSingleQuote "'''"`), function($skip, $loc, $0, $1) {
5363
+ var TripleSingleQuote$0 = $TV($EXPECT($L127, fail, `TripleSingleQuote "'''"`), function($skip, $loc, $0, $1) {
4445
5364
  return { $loc, token: "`" };
4446
5365
  });
4447
5366
  function TripleSingleQuote(state) {
@@ -4453,7 +5372,7 @@ var Civet = (() => {
4453
5372
  return TripleSingleQuote$0(state);
4454
5373
  }
4455
5374
  }
4456
- var TripleTick$0 = $TV($EXPECT($L123, fail, 'TripleTick "```"'), function($skip, $loc, $0, $1) {
5375
+ var TripleTick$0 = $TV($EXPECT($L128, fail, 'TripleTick "```"'), function($skip, $loc, $0, $1) {
4457
5376
  return { $loc, token: "`" };
4458
5377
  });
4459
5378
  function TripleTick(state) {
@@ -4465,7 +5384,7 @@ var Civet = (() => {
4465
5384
  return TripleTick$0(state);
4466
5385
  }
4467
5386
  }
4468
- var Try$0 = $TV($EXPECT($L124, fail, 'Try "try"'), function($skip, $loc, $0, $1) {
5387
+ var Try$0 = $TV($EXPECT($L129, fail, 'Try "try"'), function($skip, $loc, $0, $1) {
4469
5388
  return { $loc, token: $1 };
4470
5389
  });
4471
5390
  function Try(state) {
@@ -4477,7 +5396,7 @@ var Civet = (() => {
4477
5396
  return Try$0(state);
4478
5397
  }
4479
5398
  }
4480
- var Typeof$0 = $TS($S($EXPECT($L125, fail, 'Typeof "typeof"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5399
+ var Typeof$0 = $TS($S($EXPECT($L130, fail, 'Typeof "typeof"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4481
5400
  return { $loc, token: $1 };
4482
5401
  });
4483
5402
  function Typeof(state) {
@@ -4489,7 +5408,7 @@ var Civet = (() => {
4489
5408
  return Typeof$0(state);
4490
5409
  }
4491
5410
  }
4492
- var Unless$0 = $TV($EXPECT($L126, fail, 'Unless "unless"'), function($skip, $loc, $0, $1) {
5411
+ var Unless$0 = $TV($EXPECT($L131, fail, 'Unless "unless"'), function($skip, $loc, $0, $1) {
4493
5412
  return { $loc, token: $1 };
4494
5413
  });
4495
5414
  function Unless(state) {
@@ -4501,7 +5420,7 @@ var Civet = (() => {
4501
5420
  return Unless$0(state);
4502
5421
  }
4503
5422
  }
4504
- var Until$0 = $TS($S($EXPECT($L127, fail, 'Until "until"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5423
+ var Until$0 = $TS($S($EXPECT($L132, fail, 'Until "until"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4505
5424
  return { $loc, token: $1 };
4506
5425
  });
4507
5426
  function Until(state) {
@@ -4513,7 +5432,7 @@ var Civet = (() => {
4513
5432
  return Until$0(state);
4514
5433
  }
4515
5434
  }
4516
- var Var$0 = $TV($EXPECT($L128, fail, 'Var "var"'), function($skip, $loc, $0, $1) {
5435
+ var Var$0 = $TV($EXPECT($L133, fail, 'Var "var"'), function($skip, $loc, $0, $1) {
4517
5436
  return { $loc, token: $1 };
4518
5437
  });
4519
5438
  function Var(state) {
@@ -4525,7 +5444,7 @@ var Civet = (() => {
4525
5444
  return Var$0(state);
4526
5445
  }
4527
5446
  }
4528
- var Void$0 = $TS($S($EXPECT($L129, fail, 'Void "void"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5447
+ var Void$0 = $TS($S($EXPECT($L134, fail, 'Void "void"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4529
5448
  return { $loc, token: $1 };
4530
5449
  });
4531
5450
  function Void(state) {
@@ -4537,7 +5456,7 @@ var Civet = (() => {
4537
5456
  return Void$0(state);
4538
5457
  }
4539
5458
  }
4540
- var When$0 = $TS($S($EXPECT($L130, fail, 'When "when"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5459
+ var When$0 = $TS($S($EXPECT($L135, fail, 'When "when"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4541
5460
  return { $loc, token: "case" };
4542
5461
  });
4543
5462
  function When(state) {
@@ -4549,7 +5468,7 @@ var Civet = (() => {
4549
5468
  return When$0(state);
4550
5469
  }
4551
5470
  }
4552
- var While$0 = $TS($S($EXPECT($L131, fail, 'While "while"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5471
+ var While$0 = $TS($S($EXPECT($L136, fail, 'While "while"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4553
5472
  return { $loc, token: $1 };
4554
5473
  });
4555
5474
  function While(state) {
@@ -4561,7 +5480,7 @@ var Civet = (() => {
4561
5480
  return While$0(state);
4562
5481
  }
4563
5482
  }
4564
- var Yield$0 = $TS($S($EXPECT($L132, fail, 'Yield "yield"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5483
+ var Yield$0 = $TS($S($EXPECT($L137, fail, 'Yield "yield"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4565
5484
  return { $loc, token: $1 };
4566
5485
  });
4567
5486
  function Yield(state) {
@@ -4587,7 +5506,7 @@ var Civet = (() => {
4587
5506
  return JSXElement$0(state) || JSXElement$1(state);
4588
5507
  }
4589
5508
  }
4590
- var JSXSelfClosingElement$0 = $S($EXPECT($L4, fail, 'JSXSelfClosingElement "<"'), $TEXT(JSXElementName), $E(JSXAttributes), __, $EXPECT($L133, fail, 'JSXSelfClosingElement "/>"'));
5509
+ var JSXSelfClosingElement$0 = $S($EXPECT($L4, fail, 'JSXSelfClosingElement "<"'), $TEXT(JSXElementName), $E(JSXAttributes), __, $EXPECT($L138, fail, 'JSXSelfClosingElement "/>"'));
4591
5510
  function JSXSelfClosingElement(state) {
4592
5511
  if (state.verbose)
4593
5512
  console.log("ENTER:", "JSXSelfClosingElement");
@@ -4597,7 +5516,7 @@ var Civet = (() => {
4597
5516
  return JSXSelfClosingElement$0(state);
4598
5517
  }
4599
5518
  }
4600
- var JSXOpeningElement$0 = $S($EXPECT($L4, fail, 'JSXOpeningElement "<"'), $TEXT(JSXElementName), $E(JSXAttributes), __, $EXPECT($L55, fail, 'JSXOpeningElement ">"'));
5519
+ var JSXOpeningElement$0 = $S($EXPECT($L4, fail, 'JSXOpeningElement "<"'), $TEXT(JSXElementName), $E(JSXAttributes), __, $EXPECT($L56, fail, 'JSXOpeningElement ">"'));
4601
5520
  function JSXOpeningElement(state) {
4602
5521
  if (state.verbose)
4603
5522
  console.log("ENTER:", "JSXOpeningElement");
@@ -4607,7 +5526,7 @@ var Civet = (() => {
4607
5526
  return JSXOpeningElement$0(state);
4608
5527
  }
4609
5528
  }
4610
- var JSXClosingElement$0 = $S($EXPECT($L134, fail, 'JSXClosingElement "</"'), __, $TEXT(JSXElementName), __, $EXPECT($L55, fail, 'JSXClosingElement ">"'));
5529
+ var JSXClosingElement$0 = $S($EXPECT($L139, fail, 'JSXClosingElement "</"'), __, $TEXT(JSXElementName), __, $EXPECT($L56, fail, 'JSXClosingElement ">"'));
4611
5530
  function JSXClosingElement(state) {
4612
5531
  if (state.verbose)
4613
5532
  console.log("ENTER:", "JSXClosingElement");
@@ -4617,7 +5536,7 @@ var Civet = (() => {
4617
5536
  return JSXClosingElement$0(state);
4618
5537
  }
4619
5538
  }
4620
- var JSXFragment$0 = $S($EXPECT($L135, fail, 'JSXFragment "<>"'), $E(JSXChildren), $EXPECT($L136, fail, 'JSXFragment "</>"'));
5539
+ var JSXFragment$0 = $S($EXPECT($L140, fail, 'JSXFragment "<>"'), $E(JSXChildren), $EXPECT($L141, fail, 'JSXFragment "</>"'));
4621
5540
  function JSXFragment(state) {
4622
5541
  if (state.verbose)
4623
5542
  console.log("ENTER:", "JSXFragment");
@@ -4637,7 +5556,7 @@ var Civet = (() => {
4637
5556
  return JSXElementName$0(state);
4638
5557
  }
4639
5558
  }
4640
- var JSXIdentifierName$0 = $R$0($EXPECT($R33, fail, "JSXIdentifierName /(?:\\p{ID_Start}|[_$])(?:\\p{ID_Continue}|[\\u200C\\u200D$-])*/"));
5559
+ var JSXIdentifierName$0 = $R$0($EXPECT($R34, fail, "JSXIdentifierName /(?:\\p{ID_Start}|[_$])(?:\\p{ID_Continue}|[\\u200C\\u200D$-])*/"));
4641
5560
  function JSXIdentifierName(state) {
4642
5561
  if (state.verbose)
4643
5562
  console.log("ENTER:", "JSXIdentifierName");
@@ -4657,7 +5576,7 @@ var Civet = (() => {
4657
5576
  return JSXAttributes$0(state);
4658
5577
  }
4659
5578
  }
4660
- var JSXAttribute$0 = $S(OpenBrace, __, DotDotDot, __, AssignmentExpression, __, CloseBrace);
5579
+ var JSXAttribute$0 = $S(OpenBrace, __, DotDotDot, ExtendedExpression, __, CloseBrace);
4661
5580
  var JSXAttribute$1 = $S(JSXAttributeName, $E(JSXAttributeInitializer));
4662
5581
  function JSXAttribute(state) {
4663
5582
  if (state.tokenize) {
@@ -4686,9 +5605,9 @@ var Civet = (() => {
4686
5605
  return JSXAttributeInitializer$0(state);
4687
5606
  }
4688
5607
  }
4689
- var JSXAttributeValue$0 = $R$0($EXPECT($R34, fail, 'JSXAttributeValue /"[^"]*"/'));
4690
- var JSXAttributeValue$1 = $R$0($EXPECT($R35, fail, "JSXAttributeValue /'[^']*'/"));
4691
- var JSXAttributeValue$2 = $S(OpenBrace, __, AssignmentExpression, __, CloseBrace);
5608
+ var JSXAttributeValue$0 = $R$0($EXPECT($R35, fail, 'JSXAttributeValue /"[^"]*"/'));
5609
+ var JSXAttributeValue$1 = $R$0($EXPECT($R36, fail, "JSXAttributeValue /'[^']*'/"));
5610
+ var JSXAttributeValue$2 = $S(OpenBrace, ExtendedExpression, __, CloseBrace);
4692
5611
  var JSXAttributeValue$3 = JSXElement;
4693
5612
  var JSXAttributeValue$4 = JSXFragment;
4694
5613
  function JSXAttributeValue(state) {
@@ -4719,7 +5638,7 @@ var Civet = (() => {
4719
5638
  return JSXChild$0(state) || JSXChild$1(state) || JSXChild$2(state) || JSXChild$3(state);
4720
5639
  }
4721
5640
  }
4722
- var JSXText$0 = $R$0($EXPECT($R36, fail, "JSXText /[^{}<>]+/"));
5641
+ var JSXText$0 = $R$0($EXPECT($R37, fail, "JSXText /[^{}<>]+/"));
4723
5642
  function JSXText(state) {
4724
5643
  if (state.verbose)
4725
5644
  console.log("ENTER:", "JSXText");
@@ -4729,7 +5648,7 @@ var Civet = (() => {
4729
5648
  return JSXText$0(state);
4730
5649
  }
4731
5650
  }
4732
- var JSXChildExpression$0 = $S(__, $E($S(DotDotDot, __)), AssignmentExpression);
5651
+ var JSXChildExpression$0 = $S(__, $E($S(DotDotDot, __)), ExtendedExpression);
4733
5652
  function JSXChildExpression(state) {
4734
5653
  if (state.verbose)
4735
5654
  console.log("ENTER:", "JSXChildExpression");
@@ -4751,7 +5670,7 @@ var Civet = (() => {
4751
5670
  return TypeDeclaration$0(state);
4752
5671
  }
4753
5672
  }
4754
- var TypeDeclarationModifier$0 = $S($EXPECT($L137, fail, 'TypeDeclarationModifier "declare"'), NonIdContinue);
5673
+ var TypeDeclarationModifier$0 = $S($EXPECT($L142, fail, 'TypeDeclarationModifier "declare"'), NonIdContinue);
4755
5674
  var TypeDeclarationModifier$1 = Export;
4756
5675
  function TypeDeclarationModifier(state) {
4757
5676
  if (state.tokenize) {
@@ -4771,7 +5690,7 @@ var Civet = (() => {
4771
5690
  return TypeDeclarationRest$0(state) || TypeDeclarationRest$1(state) || TypeDeclarationRest$2(state) || TypeDeclarationRest$3(state);
4772
5691
  }
4773
5692
  }
4774
- var TypeKeyword$0 = $S($EXPECT($L138, fail, 'TypeKeyword "type"'), NonIdContinue);
5693
+ var TypeKeyword$0 = $S($EXPECT($L143, fail, 'TypeKeyword "type"'), NonIdContinue);
4775
5694
  function TypeKeyword(state) {
4776
5695
  if (state.verbose)
4777
5696
  console.log("ENTER:", "TypeKeyword");
@@ -4781,7 +5700,7 @@ var Civet = (() => {
4781
5700
  return TypeKeyword$0(state);
4782
5701
  }
4783
5702
  }
4784
- var Interface$0 = $S($EXPECT($L139, fail, 'Interface "interface"'), NonIdContinue);
5703
+ var Interface$0 = $S($EXPECT($L144, fail, 'Interface "interface"'), NonIdContinue);
4785
5704
  function Interface(state) {
4786
5705
  if (state.verbose)
4787
5706
  console.log("ENTER:", "Interface");
@@ -4791,7 +5710,7 @@ var Civet = (() => {
4791
5710
  return Interface$0(state);
4792
5711
  }
4793
5712
  }
4794
- var Namespace$0 = $S($EXPECT($L140, fail, 'Namespace "namespace"'), NonIdContinue);
5713
+ var Namespace$0 = $S($EXPECT($L145, fail, 'Namespace "namespace"'), NonIdContinue);
4795
5714
  function Namespace(state) {
4796
5715
  if (state.verbose)
4797
5716
  console.log("ENTER:", "Namespace");
@@ -4891,7 +5810,7 @@ var Civet = (() => {
4891
5810
  return NestedTypeDeclaration$0(state);
4892
5811
  }
4893
5812
  }
4894
- 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)));
5813
+ var TypeIndexSignature$0 = $S($E($S($R$0($EXPECT($R38, fail, "TypeIndexSignature /[+-]?/")), $EXPECT($L146, fail, 'TypeIndexSignature "readonly"'), __)), OpenBracket, TypeIndex, CloseBracket, $E($S(__, $R$0($EXPECT($R39, fail, "TypeIndexSignature /[+-]/")), QuestionMark)));
4895
5814
  function TypeIndexSignature(state) {
4896
5815
  if (state.verbose)
4897
5816
  console.log("ENTER:", "TypeIndexSignature");
@@ -4922,7 +5841,7 @@ var Civet = (() => {
4922
5841
  return TypeSuffix$0(state);
4923
5842
  }
4924
5843
  }
4925
- var ReturnTypeSuffix$0 = $TS($S(__, Colon, $E($S(__, $EXPECT($L142, fail, 'ReturnTypeSuffix "asserts"'), NonIdContinue)), TypePredicate), function($skip, $loc, $0, $1, $2, $3, $4) {
5844
+ var ReturnTypeSuffix$0 = $TS($S(__, Colon, $E($S(__, $EXPECT($L147, fail, 'ReturnTypeSuffix "asserts"'), NonIdContinue)), TypePredicate), function($skip, $loc, $0, $1, $2, $3, $4) {
4926
5845
  if (!$3)
4927
5846
  $0.splice(2, 1);
4928
5847
  if ($1.length === 0)
@@ -4942,7 +5861,7 @@ var Civet = (() => {
4942
5861
  return ReturnTypeSuffix$0(state);
4943
5862
  }
4944
5863
  }
4945
- var TypePredicate$0 = $TS($S(Type, $E($S(__, $EXPECT($L58, fail, 'TypePredicate "is"'), NonIdContinue, Type))), function($skip, $loc, $0, $1, $2) {
5864
+ var TypePredicate$0 = $TS($S(Type, $E($S(__, $EXPECT($L60, fail, 'TypePredicate "is"'), NonIdContinue, Type))), function($skip, $loc, $0, $1, $2) {
4946
5865
  if (!$2)
4947
5866
  return $1;
4948
5867
  return $0;
@@ -5005,9 +5924,9 @@ var Civet = (() => {
5005
5924
  return TypeUnarySuffix$0(state) || TypeUnarySuffix$1(state);
5006
5925
  }
5007
5926
  }
5008
- var TypeUnaryOp$0 = $EXPECT($L143, fail, 'TypeUnaryOp "keyof"');
5009
- var TypeUnaryOp$1 = $EXPECT($L125, fail, 'TypeUnaryOp "typeof"');
5010
- var TypeUnaryOp$2 = $EXPECT($L144, fail, 'TypeUnaryOp "infer"');
5927
+ var TypeUnaryOp$0 = $EXPECT($L148, fail, 'TypeUnaryOp "keyof"');
5928
+ var TypeUnaryOp$1 = $EXPECT($L130, fail, 'TypeUnaryOp "typeof"');
5929
+ var TypeUnaryOp$2 = $EXPECT($L149, fail, 'TypeUnaryOp "infer"');
5011
5930
  function TypeUnaryOp(state) {
5012
5931
  if (state.tokenize) {
5013
5932
  return $TOKEN("TypeUnaryOp", state, TypeUnaryOp$0(state) || TypeUnaryOp$1(state) || TypeUnaryOp$2(state));
@@ -5097,10 +6016,10 @@ var Civet = (() => {
5097
6016
  }
5098
6017
  }
5099
6018
  var TypeLiteral$0 = Literal;
5100
- var TypeLiteral$1 = $TV($EXPECT($L129, fail, 'TypeLiteral "void"'), function($skip, $loc, $0, $1) {
6019
+ var TypeLiteral$1 = $TV($EXPECT($L134, fail, 'TypeLiteral "void"'), function($skip, $loc, $0, $1) {
5101
6020
  return { $loc, token: "void" };
5102
6021
  });
5103
- var TypeLiteral$2 = $TV($EXPECT($L145, fail, 'TypeLiteral "[]"'), function($skip, $loc, $0, $1) {
6022
+ var TypeLiteral$2 = $TV($EXPECT($L150, fail, 'TypeLiteral "[]"'), function($skip, $loc, $0, $1) {
5104
6023
  return { $loc, token: "[]" };
5105
6024
  });
5106
6025
  function TypeLiteral(state) {
@@ -5110,10 +6029,10 @@ var Civet = (() => {
5110
6029
  return TypeLiteral$0(state) || TypeLiteral$1(state) || TypeLiteral$2(state);
5111
6030
  }
5112
6031
  }
5113
- var TypeBinaryOp$0 = $TV($EXPECT($L70, fail, 'TypeBinaryOp "|"'), function($skip, $loc, $0, $1) {
6032
+ var TypeBinaryOp$0 = $TV($EXPECT($L73, fail, 'TypeBinaryOp "|"'), function($skip, $loc, $0, $1) {
5114
6033
  return { $loc, token: "|" };
5115
6034
  });
5116
- var TypeBinaryOp$1 = $TV($EXPECT($L68, fail, 'TypeBinaryOp "&"'), function($skip, $loc, $0, $1) {
6035
+ var TypeBinaryOp$1 = $TV($EXPECT($L71, fail, 'TypeBinaryOp "&"'), function($skip, $loc, $0, $1) {
5117
6036
  return { $loc, token: "&" };
5118
6037
  });
5119
6038
  function TypeBinaryOp(state) {
@@ -5133,7 +6052,7 @@ var Civet = (() => {
5133
6052
  return FunctionType$0(state);
5134
6053
  }
5135
6054
  }
5136
- var TypeArguments$0 = $S(__, $EXPECT($L4, fail, 'TypeArguments "<"'), __, Type, $Q($S(__, Comma, __, Type)), $E($S(__, Comma)), __, $EXPECT($L55, fail, 'TypeArguments ">"'));
6055
+ var TypeArguments$0 = $S(__, $EXPECT($L4, fail, 'TypeArguments "<"'), __, Type, $Q($S(__, Comma, __, Type)), $E($S(__, Comma)), __, $EXPECT($L56, fail, 'TypeArguments ">"'));
5137
6056
  function TypeArguments(state) {
5138
6057
  if (state.verbose)
5139
6058
  console.log("ENTER:", "TypeArguments");
@@ -5143,7 +6062,7 @@ var Civet = (() => {
5143
6062
  return TypeArguments$0(state);
5144
6063
  }
5145
6064
  }
5146
- 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) {
6065
+ 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) {
5147
6066
  return { ts: true, children: $0 };
5148
6067
  });
5149
6068
  function TypeParameters(state) {
@@ -5176,8 +6095,8 @@ var Civet = (() => {
5176
6095
  }
5177
6096
  }
5178
6097
  var TypeParameterDelimiter$0 = $S($Q(_), Comma);
5179
- var TypeParameterDelimiter$1 = $Y($S($Q(_), $EXPECT($L55, fail, 'TypeParameterDelimiter ">"')));
5180
- var TypeParameterDelimiter$2 = $TV($Y($S(__, $EXPECT($L55, fail, 'TypeParameterDelimiter ">"'))), function($skip, $loc, $0, $1) {
6098
+ var TypeParameterDelimiter$1 = $Y($S($Q(_), $EXPECT($L56, fail, 'TypeParameterDelimiter ">"')));
6099
+ var TypeParameterDelimiter$2 = $TV($Y($S(__, $EXPECT($L56, fail, 'TypeParameterDelimiter ">"'))), function($skip, $loc, $0, $1) {
5181
6100
  return { $loc, token: "," };
5182
6101
  });
5183
6102
  var TypeParameterDelimiter$3 = $TV($Y(EOS), function($skip, $loc, $0, $1) {
@@ -5190,7 +6109,7 @@ var Civet = (() => {
5190
6109
  return TypeParameterDelimiter$0(state) || TypeParameterDelimiter$1(state) || TypeParameterDelimiter$2(state) || TypeParameterDelimiter$3(state);
5191
6110
  }
5192
6111
  }
5193
- var Shebang$0 = $S($R$0($EXPECT($R39, fail, "Shebang /#![^\\r\\n]*/")), EOL);
6112
+ var Shebang$0 = $S($R$0($EXPECT($R40, fail, "Shebang /#![^\\r\\n]*/")), EOL);
5194
6113
  function Shebang(state) {
5195
6114
  if (state.verbose)
5196
6115
  console.log("ENTER:", "Shebang");
@@ -5200,11 +6119,11 @@ var Civet = (() => {
5200
6119
  return Shebang$0(state);
5201
6120
  }
5202
6121
  }
5203
- var CivetPrologue$0 = $T($S($EXPECT($R40, fail, "CivetPrologue /[\\t ]*/"), DoubleQuote, CivetPrologueContent, DoubleQuote, $TEXT(StatementDelimiter), EOS), function(value) {
6122
+ var CivetPrologue$0 = $T($S($EXPECT($R41, fail, "CivetPrologue /[\\t ]*/"), DoubleQuote, CivetPrologueContent, DoubleQuote, $TEXT(StatementDelimiter), EOS), function(value) {
5204
6123
  var content = value[2];
5205
6124
  return content;
5206
6125
  });
5207
- var CivetPrologue$1 = $T($S($EXPECT($R40, fail, "CivetPrologue /[\\t ]*/"), SingleQuote, CivetPrologueContent, SingleQuote, $TEXT(StatementDelimiter), EOS), function(value) {
6126
+ var CivetPrologue$1 = $T($S($EXPECT($R41, fail, "CivetPrologue /[\\t ]*/"), SingleQuote, CivetPrologueContent, SingleQuote, $TEXT(StatementDelimiter), EOS), function(value) {
5208
6127
  var content = value[2];
5209
6128
  return content;
5210
6129
  });
@@ -5215,7 +6134,7 @@ var Civet = (() => {
5215
6134
  return CivetPrologue$0(state) || CivetPrologue$1(state);
5216
6135
  }
5217
6136
  }
5218
- var CivetPrologueContent$0 = $TS($S($EXPECT($L146, fail, 'CivetPrologueContent "civet"'), $Q(CivetOption), $EXPECT($R41, fail, "CivetPrologueContent /[\\s]*/")), function($skip, $loc, $0, $1, $2, $3) {
6137
+ var CivetPrologueContent$0 = $TS($S($EXPECT($L151, fail, 'CivetPrologueContent "civet"'), $Q(CivetOption), $EXPECT($R42, fail, "CivetPrologueContent /[\\s]*/")), function($skip, $loc, $0, $1, $2, $3) {
5219
6138
  var options = $2;
5220
6139
  return {
5221
6140
  type: "CivetPrologue",
@@ -5232,7 +6151,7 @@ var Civet = (() => {
5232
6151
  return CivetPrologueContent$0(state);
5233
6152
  }
5234
6153
  }
5235
- 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) {
6154
+ 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) {
5236
6155
  const optionName = $2.replace(/-+([a-z]?)/g, (_2, l) => {
5237
6156
  if (l)
5238
6157
  return l.toUpperCase();
@@ -5250,7 +6169,7 @@ var Civet = (() => {
5250
6169
  return CivetOption$0(state);
5251
6170
  }
5252
6171
  }
5253
- var UnknownPrologue$0 = $S($R$0($EXPECT($R40, fail, "UnknownPrologue /[\\t ]*/")), BasicStringLiteral, $TEXT(StatementDelimiter), EOS);
6172
+ var UnknownPrologue$0 = $S($R$0($EXPECT($R41, fail, "UnknownPrologue /[\\t ]*/")), BasicStringLiteral, $TEXT(StatementDelimiter), EOS);
5254
6173
  function UnknownPrologue(state) {
5255
6174
  if (state.verbose)
5256
6175
  console.log("ENTER:", "UnknownPrologue");
@@ -5279,7 +6198,7 @@ var Civet = (() => {
5279
6198
  return EOS$0(state);
5280
6199
  }
5281
6200
  }
5282
- 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) {
6201
+ 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) {
5283
6202
  return { $loc, token: $0 };
5284
6203
  });
5285
6204
  function EOL(state) {
@@ -5463,6 +6382,20 @@ var Civet = (() => {
5463
6382
  return CoffeeBooleansEnabled$0(state);
5464
6383
  }
5465
6384
  }
6385
+ var CoffeeForLoopsEnabled$0 = $TV($EXPECT($L0, fail, 'CoffeeForLoopsEnabled ""'), function($skip, $loc, $0, $1) {
6386
+ if (module.config.coffeeForLoops)
6387
+ return;
6388
+ return $skip;
6389
+ });
6390
+ function CoffeeForLoopsEnabled(state) {
6391
+ if (state.verbose)
6392
+ console.log("ENTER:", "CoffeeForLoopsEnabled");
6393
+ if (state.tokenize) {
6394
+ return $TOKEN("CoffeeForLoopsEnabled", state, CoffeeForLoopsEnabled$0(state));
6395
+ } else {
6396
+ return CoffeeForLoopsEnabled$0(state);
6397
+ }
6398
+ }
5466
6399
  var CoffeeInterpolationEnabled$0 = $TV($EXPECT($L0, fail, 'CoffeeInterpolationEnabled ""'), function($skip, $loc, $0, $1) {
5467
6400
  if (module.config.coffeeInterpolation)
5468
6401
  return;
@@ -5477,6 +6410,48 @@ var Civet = (() => {
5477
6410
  return CoffeeInterpolationEnabled$0(state);
5478
6411
  }
5479
6412
  }
6413
+ var CoffeeIsntEnabled$0 = $TV($EXPECT($L0, fail, 'CoffeeIsntEnabled ""'), function($skip, $loc, $0, $1) {
6414
+ if (module.config.coffeeIsnt)
6415
+ return;
6416
+ return $skip;
6417
+ });
6418
+ function CoffeeIsntEnabled(state) {
6419
+ if (state.verbose)
6420
+ console.log("ENTER:", "CoffeeIsntEnabled");
6421
+ if (state.tokenize) {
6422
+ return $TOKEN("CoffeeIsntEnabled", state, CoffeeIsntEnabled$0(state));
6423
+ } else {
6424
+ return CoffeeIsntEnabled$0(state);
6425
+ }
6426
+ }
6427
+ var CoffeeNotEnabled$0 = $TV($EXPECT($L0, fail, 'CoffeeNotEnabled ""'), function($skip, $loc, $0, $1) {
6428
+ if (module.config.coffeeNot)
6429
+ return;
6430
+ return $skip;
6431
+ });
6432
+ function CoffeeNotEnabled(state) {
6433
+ if (state.verbose)
6434
+ console.log("ENTER:", "CoffeeNotEnabled");
6435
+ if (state.tokenize) {
6436
+ return $TOKEN("CoffeeNotEnabled", state, CoffeeNotEnabled$0(state));
6437
+ } else {
6438
+ return CoffeeNotEnabled$0(state);
6439
+ }
6440
+ }
6441
+ var CoffeeOfEnabled$0 = $TV($EXPECT($L0, fail, 'CoffeeOfEnabled ""'), function($skip, $loc, $0, $1) {
6442
+ if (module.config.coffeeOf)
6443
+ return;
6444
+ return $skip;
6445
+ });
6446
+ function CoffeeOfEnabled(state) {
6447
+ if (state.verbose)
6448
+ console.log("ENTER:", "CoffeeOfEnabled");
6449
+ if (state.tokenize) {
6450
+ return $TOKEN("CoffeeOfEnabled", state, CoffeeOfEnabled$0(state));
6451
+ } else {
6452
+ return CoffeeOfEnabled$0(state);
6453
+ }
6454
+ }
5480
6455
  var Reset$0 = $TV($EXPECT($L0, fail, 'Reset ""'), function($skip, $loc, $0, $1) {
5481
6456
  module.currentIndent = 0;
5482
6457
  module.indentLevels = [0];
@@ -5486,9 +6461,51 @@ var Civet = (() => {
5486
6461
  coffeeBooleans: false,
5487
6462
  coffeeComment: false,
5488
6463
  coffeeEq: false,
6464
+ coffeeForLoops: false,
5489
6465
  coffeeInterpolation: false,
6466
+ coffeeIsnt: false,
6467
+ coffeeNot: false,
6468
+ coffeeOf: false,
5490
6469
  implicitReturns: true
5491
6470
  };
6471
+ let indexOfRef, hasPropRef;
6472
+ module.prelude = [];
6473
+ module.getIndexOfRef = function() {
6474
+ if (indexOfRef)
6475
+ return indexOfRef;
6476
+ indexOfRef = {
6477
+ type: "Ref",
6478
+ base: "indexOf"
6479
+ };
6480
+ const typeSuffix = {
6481
+ ts: true,
6482
+ children: [": <T>(this: T[], searchElement: T) => boolean"]
6483
+ };
6484
+ const asAny = {
6485
+ ts: true,
6486
+ children: [" as any"]
6487
+ };
6488
+ module.prelude.push(["", "const ", indexOfRef, typeSuffix, " = [].indexOf", asAny, "\n"]);
6489
+ return indexOfRef;
6490
+ };
6491
+ module.getHasPropRef = function() {
6492
+ if (hasPropRef)
6493
+ return hasPropRef;
6494
+ hasPropRef = {
6495
+ type: "Ref",
6496
+ base: "hasProp"
6497
+ };
6498
+ const typeSuffix = {
6499
+ ts: true,
6500
+ children: [": <T>(this: T, prop: keyof T) => boolean"]
6501
+ };
6502
+ const asAny = {
6503
+ ts: true,
6504
+ children: [" as any"]
6505
+ };
6506
+ module.prelude.push(["", "const ", hasPropRef, typeSuffix, " = {}.hasOwnProperty", asAny, "\n"]);
6507
+ return hasPropRef;
6508
+ };
5492
6509
  Object.defineProperty(module.config, "coffeeCompat", {
5493
6510
  set(b) {
5494
6511
  if (b) {
@@ -5496,15 +6513,21 @@ var Civet = (() => {
5496
6513
  this.coffeeBooleans = true;
5497
6514
  this.coffeeComment = true;
5498
6515
  this.coffeeEq = true;
6516
+ this.coffeeForLoops = true;
5499
6517
  this.coffeeInterpolation = true;
5500
- this.implicitReturns = true;
6518
+ this.coffeeIsnt = true;
6519
+ this.coffeeNot = true;
6520
+ this.coffeeOf = true;
5501
6521
  } else {
5502
6522
  this.autoVar = false;
5503
6523
  this.coffeeBooleans = false;
5504
6524
  this.coffeeComment = false;
5505
6525
  this.coffeeEq = false;
6526
+ this.coffeeForLoops = false;
5506
6527
  this.coffeeInterpolation = false;
5507
- this.implicitReturns = false;
6528
+ this.coffeeIsnt = false;
6529
+ this.coffeeNot = false;
6530
+ this.coffeeOf = false;
5508
6531
  }
5509
6532
  }
5510
6533
  });
@@ -5536,7 +6559,7 @@ var Civet = (() => {
5536
6559
  node.children.unshift("return ");
5537
6560
  return;
5538
6561
  case "Identifier":
5539
- node.token = "return " + node.token;
6562
+ node.children.unshift("return ");
5540
6563
  return;
5541
6564
  case "BlockStatement":
5542
6565
  insertReturn(node.expressions[node.expressions.length - 1]);
@@ -5569,10 +6592,11 @@ var Civet = (() => {
5569
6592
  case "ContinueStatement":
5570
6593
  case "DebuggerStatement":
5571
6594
  case "EmptyStatement":
6595
+ case "ForStatement":
5572
6596
  case "IterationStatement":
5573
6597
  case "ReturnStatement":
5574
6598
  case "ThrowStatement":
5575
- case "VariableDeclaration":
6599
+ case "Declaration":
5576
6600
  return;
5577
6601
  case "BlockStatement":
5578
6602
  insertReturn(exp.expressions[exp.expressions.length - 1]);
@@ -5618,7 +6642,7 @@ var Civet = (() => {
5618
6642
  let chains = [];
5619
6643
  while (i < l) {
5620
6644
  const [, op] = binops[i];
5621
- if (relationalOps.includes(op.token)) {
6645
+ if (relationalOps.includes(op.token) || op.type === "Ref") {
5622
6646
  chains.push(i);
5623
6647
  } else if (lowerPrecedenceOps.includes(op.token)) {
5624
6648
  processChains();
@@ -5632,7 +6656,7 @@ var Civet = (() => {
5632
6656
  if (chains.length > 1) {
5633
6657
  chains.forEach((index, k) => {
5634
6658
  if (k > 0) {
5635
- results.push(" && ");
6659
+ results.push(" ", "&&", " ");
5636
6660
  }
5637
6661
  const [pre, op, post, exp] = binops[index];
5638
6662
  let endIndex;
@@ -5680,9 +6704,12 @@ var Civet = (() => {
5680
6704
  };
5681
6705
  module.insertTrimmingSpace = function(spacing, c) {
5682
6706
  let target = spacing;
5683
- while (Array.isArray(target)) {
5684
- target = target[0];
5685
- }
6707
+ if (!target)
6708
+ return;
6709
+ if (Array.isArray(target))
6710
+ return module.insertTrimmingSpace(target[0], c);
6711
+ if (target.children)
6712
+ return module.insertTrimmingSpace(target.children[0], c);
5686
6713
  if (target.token) {
5687
6714
  target.token = target.token.replace(/^ ?/, c);
5688
6715
  }
@@ -5738,6 +6765,137 @@ var Civet = (() => {
5738
6765
  token: str
5739
6766
  };
5740
6767
  };
6768
+ function gatherNodes(node, predicate) {
6769
+ if (node == null)
6770
+ return [];
6771
+ if (Array.isArray(node)) {
6772
+ return node.flatMap((n) => gatherNodes(n, predicate));
6773
+ }
6774
+ if (predicate(node)) {
6775
+ return [node];
6776
+ }
6777
+ switch (node.type) {
6778
+ case "BlockStatement":
6779
+ return [];
6780
+ case "ForStatement":
6781
+ const isDec = node.declaration?.type === "Declaration";
6782
+ return node.children.flatMap((n) => {
6783
+ if (isDec && n === node.declaration)
6784
+ return [];
6785
+ return gatherNodes(n, predicate);
6786
+ });
6787
+ default:
6788
+ return gatherNodes(node.children, predicate);
6789
+ }
6790
+ return [];
6791
+ }
6792
+ function gatherRecursive(node, predicate) {
6793
+ if (node == null)
6794
+ return [];
6795
+ if (Array.isArray(node)) {
6796
+ return node.flatMap((n) => gatherNodes(n, predicate));
6797
+ }
6798
+ if (predicate(node)) {
6799
+ return [node];
6800
+ }
6801
+ return gatherNodes(node.children, predicate);
6802
+ }
6803
+ module.processProgram = function(statements) {
6804
+ statements.unshift(...module.prelude);
6805
+ if (module.config.autoVar) {
6806
+ createVarDecs(statements, []);
6807
+ }
6808
+ populateRefs(statements);
6809
+ };
6810
+ function findDecs(statements) {
6811
+ const declarationNames = gatherNodes(statements, (node) => {
6812
+ if (node.type === "Declaration") {
6813
+ return true;
6814
+ }
6815
+ }).flatMap((d) => d.names);
6816
+ return new Set(declarationNames);
6817
+ }
6818
+ function populateRefs(statements) {
6819
+ const refNodes = gatherNodes(statements, ({ type }) => type === "Ref");
6820
+ const blockNodes = new Set(gatherNodes(statements, ({ type }) => type === "BlockStatement"));
6821
+ const forNodes = gatherNodes(statements, ({ type }) => type === "ForStatement");
6822
+ forNodes.forEach(({ declaration, block }) => {
6823
+ if (block.type === "BlockStatement") {
6824
+ populateRefs([declaration, ...block.children]);
6825
+ } else {
6826
+ populateRefs([declaration, ...block]);
6827
+ }
6828
+ blockNodes.delete(block);
6829
+ });
6830
+ blockNodes.forEach(({ expressions }) => populateRefs(expressions));
6831
+ if (refNodes.length) {
6832
+ const ids = gatherRecursive(statements, (s) => s.type === "Identifier");
6833
+ const names = new Set(ids.flatMap(({ names: names2 }) => names2 || []));
6834
+ refNodes.forEach((ref) => {
6835
+ const { type, base } = ref;
6836
+ if (type !== "Ref")
6837
+ return;
6838
+ ref.type = "Identifier";
6839
+ let n = 0;
6840
+ let name = base;
6841
+ while (names.has(name)) {
6842
+ n++;
6843
+ name = `${base}${n}`;
6844
+ }
6845
+ names.add(name);
6846
+ ref.children = ref.names = [name];
6847
+ });
6848
+ }
6849
+ }
6850
+ function createVarDecs(statements, scopes, pushVar) {
6851
+ function hasDec(name) {
6852
+ return scopes.some((s) => s.has(name));
6853
+ }
6854
+ function findAssignments(statements2, decs2) {
6855
+ const assignmentStatements = gatherNodes(statements2, (node) => {
6856
+ return node.type === "AssignmentExpression";
6857
+ });
6858
+ const undeclaredIdentifiers = assignmentStatements.flatMap((a) => {
6859
+ return a.names;
6860
+ });
6861
+ return undeclaredIdentifiers.filter((x, i, a) => {
6862
+ if (!hasDec(x))
6863
+ return a.indexOf(x) === i;
6864
+ });
6865
+ }
6866
+ if (!pushVar) {
6867
+ pushVar = function(name) {
6868
+ varIds.push(name);
6869
+ decs.add(name);
6870
+ };
6871
+ }
6872
+ const decs = findDecs(statements);
6873
+ scopes.push(decs);
6874
+ const varIds = [];
6875
+ findAssignments(statements, scopes).forEach(pushVar);
6876
+ const fnNodes = gatherNodes(statements, (s) => s.type === "FunctionExpression");
6877
+ const forNodes = gatherNodes(statements, (s) => s.type === "ForStatement");
6878
+ const blockNodes = new Set(gatherNodes(statements, (s) => s.type === "BlockStatement"));
6879
+ fnNodes.forEach(({ block }) => blockNodes.delete(block));
6880
+ forNodes.forEach(({ block }) => blockNodes.delete(block));
6881
+ blockNodes.forEach((block) => {
6882
+ createVarDecs(block.expressions, scopes, pushVar);
6883
+ });
6884
+ forNodes.forEach(({ block, declaration }) => {
6885
+ scopes.push(new Set(declaration.names));
6886
+ createVarDecs(block.expressions, scopes, pushVar);
6887
+ scopes.pop();
6888
+ });
6889
+ fnNodes.forEach(({ block, parameters }) => {
6890
+ scopes.push(new Set(parameters.names));
6891
+ createVarDecs(block.expressions, scopes);
6892
+ scopes.pop();
6893
+ });
6894
+ if (varIds.length) {
6895
+ const indent = statements[0][0];
6896
+ statements.unshift([indent, "var ", varIds.join(", "), "\n"]);
6897
+ }
6898
+ }
5741
6899
  return $0;
5742
6900
  });
5743
6901
  function Init(state) {
@@ -5749,7 +6907,7 @@ var Civet = (() => {
5749
6907
  return Init$0(state);
5750
6908
  }
5751
6909
  }
5752
- var Indent$0 = $TV($Q($C($EXPECT($L147, fail, 'Indent " "'), $EXPECT($L148, fail, 'Indent "\\\\t"'))), function($skip, $loc, $0, $1) {
6910
+ var Indent$0 = $TV($Q($C($EXPECT($L152, fail, 'Indent " "'), $EXPECT($L153, fail, 'Indent "\\\\t"'))), function($skip, $loc, $0, $1) {
5753
6911
  const level = $1.length;
5754
6912
  return {
5755
6913
  $loc,