@danielx/civet 0.4.19-pre.0 → 0.4.19-pre.2

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
@@ -435,6 +435,7 @@ var Civet = (() => {
435
435
  ConditionalExpression,
436
436
  ShortCircuitExpression,
437
437
  PrimaryExpression,
438
+ ParenthesizedExpression,
438
439
  ClassDeclaration,
439
440
  ClassExpression,
440
441
  ClassHeritage,
@@ -652,6 +653,7 @@ var Civet = (() => {
652
653
  Async,
653
654
  Await,
654
655
  Backtick,
656
+ By,
655
657
  Case,
656
658
  Catch,
657
659
  Class,
@@ -784,8 +786,9 @@ var Civet = (() => {
784
786
  InsertSpace,
785
787
  InsertDot,
786
788
  InsertBreak,
787
- CoffeeCommentEnabled,
788
789
  CoffeeBooleansEnabled,
790
+ CoffeeCommentEnabled,
791
+ CoffeeDoEnabled,
789
792
  CoffeeForLoopsEnabled,
790
793
  CoffeeInterpolationEnabled,
791
794
  CoffeeIsntEnabled,
@@ -891,70 +894,71 @@ var Civet = (() => {
891
894
  var $L87 = $L("async");
892
895
  var $L88 = $L("await");
893
896
  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(" ");
897
+ var $L90 = $L("by");
898
+ var $L91 = $L("case");
899
+ var $L92 = $L("catch");
900
+ var $L93 = $L("class");
901
+ var $L94 = $L("#{");
902
+ var $L95 = $L(":");
903
+ var $L96 = $L("delete");
904
+ var $L97 = $L("do");
905
+ var $L98 = $L("..");
906
+ var $L99 = $L("...");
907
+ var $L100 = $L('"');
908
+ var $L101 = $L("else");
909
+ var $L102 = $L("export");
910
+ var $L103 = $L("for");
911
+ var $L104 = $L("from");
912
+ var $L105 = $L("function");
913
+ var $L106 = $L("get");
914
+ var $L107 = $L("set");
915
+ var $L108 = $L("if");
916
+ var $L109 = $L(" ");
917
+ var $L110 = $L("let");
918
+ var $L111 = $L("const");
919
+ var $L112 = $L("loop");
920
+ var $L113 = $L("new");
921
+ var $L114 = $L("not");
922
+ var $L115 = $L("{");
923
+ var $L116 = $L("[");
924
+ var $L117 = $L("(");
925
+ var $L118 = $L("?");
926
+ var $L119 = $L("return");
927
+ var $L120 = $L("'");
928
+ var $L121 = $L("static");
929
+ var $L122 = $L("${");
930
+ var $L123 = $L("switch");
931
+ var $L124 = $L("target");
932
+ var $L125 = $L("then");
933
+ var $L126 = $L("throw");
934
+ var $L127 = $L('"""');
935
+ var $L128 = $L("'''");
936
+ var $L129 = $L("```");
937
+ var $L130 = $L("try");
938
+ var $L131 = $L("typeof");
939
+ var $L132 = $L("unless");
940
+ var $L133 = $L("until");
941
+ var $L134 = $L("var");
942
+ var $L135 = $L("void");
943
+ var $L136 = $L("when");
944
+ var $L137 = $L("while");
945
+ var $L138 = $L("yield");
946
+ var $L139 = $L("/>");
947
+ var $L140 = $L("</");
948
+ var $L141 = $L("<>");
949
+ var $L142 = $L("</>");
950
+ var $L143 = $L("declare");
951
+ var $L144 = $L("type");
952
+ var $L145 = $L("interface");
953
+ var $L146 = $L("namespace");
954
+ var $L147 = $L("readonly");
955
+ var $L148 = $L("asserts");
956
+ var $L149 = $L("keyof");
957
+ var $L150 = $L("infer");
958
+ var $L151 = $L("[]");
959
+ var $L152 = $L("civet");
960
+ var $L153 = $L(" ");
961
+ var $L154 = $L(" ");
958
962
  var $R0 = $R(new RegExp("(of|then|when)(?!\\p{ID_Continue}|[\\u200C\\u200D$])", "suy"));
959
963
  var $R1 = $R(new RegExp("[&]", "suy"));
960
964
  var $R2 = $R(new RegExp("[!~+-]+", "suy"));
@@ -982,26 +986,27 @@ var Civet = (() => {
982
986
  var $R24 = $R(new RegExp("(?:\\$(?!\\{)|`(?!``)|\\\\.|[^$`])+", "suy"));
983
987
  var $R25 = $R(new RegExp("(?:on|off|yes|no)(?!\\p{ID_Continue})", "suy"));
984
988
  var $R26 = $R(new RegExp("(?:isnt)(?!\\p{ID_Continue})", "suy"));
985
- var $R27 = $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"));
986
- var $R28 = $R(new RegExp("\\/\\/[^\\r\\n]*", "suy"));
987
- var $R29 = $R(new RegExp(".", "suy"));
988
- var $R30 = $R(new RegExp("#(?!##)([^\\r\\n]*)", "suy"));
989
- var $R31 = $R(new RegExp("[^\\r\\n]", "suy"));
990
- var $R32 = $R(new RegExp("[ \\t]+", "suy"));
991
- var $R33 = $R(new RegExp("[\\s]+", "suy"));
992
- var $R34 = $R(new RegExp("(?!\\p{ID_Continue})", "suy"));
993
- var $R35 = $R(new RegExp("\\s", "suy"));
994
- var $R36 = $R(new RegExp("(?:\\p{ID_Start}|[_$])(?:\\p{ID_Continue}|[\\u200C\\u200D$-])*", "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("[+-]?", "suy"));
999
- var $R41 = $R(new RegExp("[+-]", "suy"));
1000
- var $R42 = $R(new RegExp("#![^\\r\\n]*", "suy"));
1001
- var $R43 = $R(new RegExp("[\\t ]*", "suy"));
1002
- var $R44 = $R(new RegExp("[\\s]*", "suy"));
1003
- var $R45 = $R(new RegExp("\\s+([+-]?)([a-zA-Z0-9-]+)", "suy"));
1004
- var $R46 = $R(new RegExp("\\r\\n|\\n|\\r|$", "suy"));
989
+ var $R27 = $R(new RegExp("(?:by)(?!\\p{ID_Continue})", "suy"));
990
+ var $R28 = $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"));
991
+ var $R29 = $R(new RegExp("\\/\\/[^\\r\\n]*", "suy"));
992
+ var $R30 = $R(new RegExp(".", "suy"));
993
+ var $R31 = $R(new RegExp("#(?!##)([^\\r\\n]*)", "suy"));
994
+ var $R32 = $R(new RegExp("[^\\r\\n]", "suy"));
995
+ var $R33 = $R(new RegExp("[ \\t]+", "suy"));
996
+ var $R34 = $R(new RegExp("[\\s]+", "suy"));
997
+ var $R35 = $R(new RegExp("(?!\\p{ID_Continue})", "suy"));
998
+ var $R36 = $R(new RegExp("\\s", "suy"));
999
+ var $R37 = $R(new RegExp("(?:\\p{ID_Start}|[_$])(?:\\p{ID_Continue}|[\\u200C\\u200D$-])*", "suy"));
1000
+ var $R38 = $R(new RegExp('"[^"]*"', "suy"));
1001
+ var $R39 = $R(new RegExp("'[^']*'", "suy"));
1002
+ var $R40 = $R(new RegExp("[^{}<>]+", "suy"));
1003
+ var $R41 = $R(new RegExp("[+-]?", "suy"));
1004
+ var $R42 = $R(new RegExp("[+-]", "suy"));
1005
+ var $R43 = $R(new RegExp("#![^\\r\\n]*", "suy"));
1006
+ var $R44 = $R(new RegExp("[\\t ]*", "suy"));
1007
+ var $R45 = $R(new RegExp("[\\s]*", "suy"));
1008
+ var $R46 = $R(new RegExp("\\s+([+-]?)([a-zA-Z0-9-]+)", "suy"));
1009
+ var $R47 = $R(new RegExp("\\r\\n|\\n|\\r|$", "suy"));
1005
1010
  var Program$0 = $TS($S(Reset, Init, __, $Q(TopLevelStatement), __), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
1006
1011
  var statements = $4;
1007
1012
  module.processProgram(statements);
@@ -1222,13 +1227,17 @@ var Civet = (() => {
1222
1227
  return result;
1223
1228
  }
1224
1229
  });
1230
+ var UnaryExpression$1 = $TS($S(CoffeeDoEnabled, Do, __, $C($S(LeftHandSideExpression, $N($S(__, AssignmentOpSymbol))), ArrowFunction, ExtendedExpression)), function($skip, $loc, $0, $1, $2, $3, $4) {
1231
+ var ws = $3;
1232
+ var exp = $4;
1233
+ module.insertTrimmingSpace(ws, "");
1234
+ return ["(", ws, exp, ")()"];
1235
+ });
1225
1236
  function UnaryExpression(state) {
1226
- if (state.verbose)
1227
- console.log("ENTER:", "UnaryExpression");
1228
1237
  if (state.tokenize) {
1229
- return $TOKEN("UnaryExpression", state, UnaryExpression$0(state));
1238
+ return $TOKEN("UnaryExpression", state, UnaryExpression$0(state) || UnaryExpression$1(state));
1230
1239
  } else {
1231
- return UnaryExpression$0(state);
1240
+ return UnaryExpression$0(state) || UnaryExpression$1(state);
1232
1241
  }
1233
1242
  }
1234
1243
  var UnaryPostfix$0 = QuestionMark;
@@ -1472,7 +1481,7 @@ var Civet = (() => {
1472
1481
  var PrimaryExpression$6 = ClassExpression;
1473
1482
  var PrimaryExpression$7 = RegularExpressionLiteral;
1474
1483
  var PrimaryExpression$8 = TemplateLiteral;
1475
- var PrimaryExpression$9 = $S(OpenParen, ExtendedExpression, __, CloseParen);
1484
+ var PrimaryExpression$9 = ParenthesizedExpression;
1476
1485
  var PrimaryExpression$10 = JSXElement;
1477
1486
  var PrimaryExpression$11 = JSXFragment;
1478
1487
  function PrimaryExpression(state) {
@@ -1482,6 +1491,23 @@ var Civet = (() => {
1482
1491
  return PrimaryExpression$0(state) || PrimaryExpression$1(state) || PrimaryExpression$2(state) || PrimaryExpression$3(state) || PrimaryExpression$4(state) || PrimaryExpression$5(state) || PrimaryExpression$6(state) || PrimaryExpression$7(state) || PrimaryExpression$8(state) || PrimaryExpression$9(state) || PrimaryExpression$10(state) || PrimaryExpression$11(state);
1483
1492
  }
1484
1493
  }
1494
+ var ParenthesizedExpression$0 = $TS($S(OpenParen, ExtendedExpression, __, CloseParen), function($skip, $loc, $0, $1, $2, $3, $4) {
1495
+ var exp = $2;
1496
+ return {
1497
+ type: "ParenthesizedExpression",
1498
+ expression: exp,
1499
+ children: $0
1500
+ };
1501
+ });
1502
+ function ParenthesizedExpression(state) {
1503
+ if (state.verbose)
1504
+ console.log("ENTER:", "ParenthesizedExpression");
1505
+ if (state.tokenize) {
1506
+ return $TOKEN("ParenthesizedExpression", state, ParenthesizedExpression$0(state));
1507
+ } else {
1508
+ return ParenthesizedExpression$0(state);
1509
+ }
1510
+ }
1485
1511
  var ClassDeclaration$0 = ClassExpression;
1486
1512
  function ClassDeclaration(state) {
1487
1513
  if (state.verbose)
@@ -2542,12 +2568,59 @@ var Civet = (() => {
2542
2568
  const inclusive = range.token === "..";
2543
2569
  range.token = ",";
2544
2570
  if (s.type === "Literal" && e.type === "Literal") {
2545
- const start = JSON.parse(s.raw);
2546
- const end = JSON.parse(e.raw);
2547
- const step = end > start ? 1 : -1;
2548
- const length = Math.abs(end - start) + (inclusive ? 1 : 0);
2549
- if (length <= 20) {
2550
- return Array.from({ length }, (_2, i) => start + i * step).join(", ");
2571
+ let start, end;
2572
+ if (s.raw[0] === "'") {
2573
+ start = s.raw.match(/^'(.*)'$/)[1];
2574
+ } else {
2575
+ start = JSON.parse(s.raw);
2576
+ }
2577
+ if (e.raw[0] === "'") {
2578
+ end = e.raw.match(/^'(.*)'$/)[1];
2579
+ } else {
2580
+ end = JSON.parse(e.raw);
2581
+ }
2582
+ if (typeof start !== typeof end) {
2583
+ throw new Error("Range start and end must be of the same type");
2584
+ }
2585
+ if (typeof start === "string") {
2586
+ if (start.length !== 1 || end.length !== 1) {
2587
+ throw new Error("String range start and end must be a single character");
2588
+ }
2589
+ const startCode = start.charCodeAt(0);
2590
+ const endCode = end.charCodeAt(0);
2591
+ const step = startCode < endCode ? 1 : -1;
2592
+ const length = Math.abs(endCode - startCode) + (inclusive ? 1 : 0);
2593
+ if (length <= 26) {
2594
+ return {
2595
+ type: "RangeExpression",
2596
+ children: ["[", Array.from({ length }, (_2, i) => JSON.stringify(String.fromCharCode(startCode + i * step))).join(", "), "]"],
2597
+ inclusive,
2598
+ start: s,
2599
+ end: e
2600
+ };
2601
+ } else {
2602
+ const inclusiveAdjust2 = inclusive ? " + 1" : "";
2603
+ const children2 = ["((s, e) => {let step = e > s ? 1 : -1; return Array.from({length: Math.abs(e - s)", inclusiveAdjust2, "}, (_, i) => String.fromCharCode(s + i * step))})(", startCode.toString(), ws, range, endCode.toString(), ")"];
2604
+ return {
2605
+ type: "RangeExpression",
2606
+ children: children2,
2607
+ inclusive,
2608
+ start: s,
2609
+ end: e
2610
+ };
2611
+ }
2612
+ } else if (typeof start === "number") {
2613
+ const step = end > start ? 1 : -1;
2614
+ const length = Math.abs(end - start) + (inclusive ? 1 : 0);
2615
+ if (length <= 20) {
2616
+ return {
2617
+ type: "RangeExpression",
2618
+ children: ["[", Array.from({ length }, (_2, i) => start + i * step).join(", "), "]"],
2619
+ inclusive,
2620
+ start: s,
2621
+ end: e
2622
+ };
2623
+ }
2551
2624
  }
2552
2625
  }
2553
2626
  const inclusiveAdjust = inclusive ? " + 1" : "";
@@ -3172,14 +3245,8 @@ var Civet = (() => {
3172
3245
  var UnlessClause$0 = $TS($S(Unless, Condition), function($skip, $loc, $0, $1, $2) {
3173
3246
  var kind = $1;
3174
3247
  var condition = $2;
3175
- condition.forEach((c) => {
3176
- if (!c)
3177
- return;
3178
- if (c.token === "(")
3179
- c.token = "(!(";
3180
- if (c.token === ")")
3181
- c.token = "))";
3182
- });
3248
+ condition.children.unshift("(!");
3249
+ condition.children.push(")");
3183
3250
  kind.token = "if";
3184
3251
  return {
3185
3252
  type: "IfStatement",
@@ -3262,7 +3329,9 @@ var Civet = (() => {
3262
3329
  }
3263
3330
  }
3264
3331
  var IterationStatement$0 = LoopStatement;
3265
- var IterationStatement$1 = DoWhileStatement;
3332
+ var IterationStatement$1 = $T($S($N(CoffeeDoEnabled), DoWhileStatement), function(value) {
3333
+ return value[1];
3334
+ });
3266
3335
  var IterationStatement$2 = WhileStatement;
3267
3336
  var IterationStatement$3 = ForStatement;
3268
3337
  function IterationStatement(state) {
@@ -3326,14 +3395,14 @@ var Civet = (() => {
3326
3395
  return WhileStatement$0(state);
3327
3396
  }
3328
3397
  }
3329
- var WhileClause$0 = $TS($S($C(While, Until), Condition), function($skip, $loc, $0, $1, $2) {
3398
+ var WhileClause$0 = $TS($S($C(While, Until), $Q(TrailingComment), Condition), function($skip, $loc, $0, $1, $2, $3) {
3330
3399
  var kind = $1;
3331
- var cond = $2;
3400
+ var ws = $2;
3401
+ var cond = $3;
3332
3402
  if (kind.token === "until") {
3333
- cond[1] = "(!(";
3334
- cond[cond.length - 1] = "))";
3335
3403
  kind.token = "while";
3336
- $0 = [kind, cond];
3404
+ cond.children.unshift("(!");
3405
+ cond.children.push(")");
3337
3406
  }
3338
3407
  return {
3339
3408
  type: "IterationStatement",
@@ -3423,20 +3492,30 @@ var Civet = (() => {
3423
3492
  return WhenCondition$0(state);
3424
3493
  }
3425
3494
  }
3426
- 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) {
3495
+ var CoffeeForStatementParameters$0 = $TS($S($E($S(Await, __)), InsertOpenParen, CoffeeForDeclaration, __, $C(In, Of, From), ExtendedExpression, $E($S(__, By, ExtendedExpression)), InsertCloseParen), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8) {
3496
+ var open = $2;
3427
3497
  var declaration = $3;
3428
3498
  var kind = $5;
3429
3499
  var exp = $6;
3500
+ var step = $7;
3501
+ var close = $8;
3430
3502
  let blockPrefix = [];
3503
+ const indent = "".padStart((module.currentIndent + 1) * 2);
3431
3504
  if (kind.token === "from") {
3505
+ if (step) {
3506
+ throw new Error("Can't use 'by' with 'from' in CoffeeScript for loops");
3507
+ }
3432
3508
  kind.token = "of";
3433
3509
  } else if (kind.token === "of") {
3510
+ if (step) {
3511
+ throw new Error("Can't use 'by' with 'of' in CoffeeScript for loops");
3512
+ }
3434
3513
  module.insertTrimmingSpace(declaration, "");
3435
3514
  module.insertTrimmingSpace(exp, "");
3436
3515
  if (declaration.own) {
3437
- const indent = "".padStart((module.currentIndent + 1) * 2);
3516
+ const indent2 = "".padStart((module.currentIndent + 1) * 2);
3438
3517
  const hasPropRef = module.getHasPropRef();
3439
- blockPrefix.push([indent, "if (!", hasPropRef, ".call(", exp, ", ", declaration, ")) continue\n"]);
3518
+ blockPrefix.push([indent2, "if (!", hasPropRef, ".call(", exp, ", ", declaration, ")) continue\n"]);
3440
3519
  }
3441
3520
  kind.token = "in ";
3442
3521
  } else if (kind.token === "in") {
@@ -3448,10 +3527,79 @@ var Civet = (() => {
3448
3527
  type: "Ref",
3449
3528
  base: "len"
3450
3529
  };
3451
- const expRef = exp.type === "Identifier" ? exp : {
3452
- type: "Ref",
3453
- base: "ref"
3454
- };
3530
+ let expRef;
3531
+ switch (exp.type) {
3532
+ case "Identifier":
3533
+ expRef = exp;
3534
+ break;
3535
+ case "RangeExpression": {
3536
+ const { start, end, inclusive } = exp;
3537
+ const stepExp = step?.[2];
3538
+ let stepRef;
3539
+ if (stepExp) {
3540
+ module.insertTrimmingSpace(stepExp, "");
3541
+ if (stepExp.type === "Literal") {
3542
+ stepRef = stepExp;
3543
+ } else {
3544
+ stepRef = {
3545
+ type: "Ref",
3546
+ base: "step"
3547
+ };
3548
+ }
3549
+ }
3550
+ let startRef, endRef;
3551
+ if (start.type === "Literal") {
3552
+ startRef = start;
3553
+ } else if (start.type === "Identifier") {
3554
+ startRef = start;
3555
+ } else {
3556
+ startRef = {
3557
+ type: "Ref",
3558
+ base: "ref"
3559
+ };
3560
+ }
3561
+ if (end.type === "Literal") {
3562
+ endRef = end;
3563
+ } else if (end.type === "Identifier") {
3564
+ endRef = end;
3565
+ } else {
3566
+ endRef = {
3567
+ type: "Ref",
3568
+ base: "ref"
3569
+ };
3570
+ }
3571
+ const startRefDec = startRef !== start ? [startRef, " = ", start, ", "] : [];
3572
+ const endRefDec = endRef !== end ? [endRef, " = ", end, ", "] : [];
3573
+ const varRef2 = declaration;
3574
+ const ascDec = stepRef ? stepRef !== stepExp ? [", step = ", stepExp] : [] : [", asc = ", startRef, " <= ", endRef];
3575
+ declaration = {
3576
+ type: "Declaration",
3577
+ children: ["let ", ...startRefDec, ...endRefDec, counterRef, " = ", varRef2, " = ", startRef, ...ascDec],
3578
+ names: []
3579
+ };
3580
+ blockPrefix.push([{
3581
+ type: "AssignmentExpression",
3582
+ children: [],
3583
+ names: varRef2.names
3584
+ }]);
3585
+ const counterPart = inclusive ? [counterRef, " <= ", endRef, " : ", counterRef, " >= ", endRef] : [counterRef, " < ", endRef, " : ", counterRef, " > ", endRef];
3586
+ const condition = stepRef ? [stepRef, " !== 0 && (", stepRef, " > 0 ? ", ...counterPart, ")"] : ["asc ? ", ...counterPart];
3587
+ const increment = stepRef ? [varRef2, " = ", counterRef, " += ", stepRef] : [varRef2, " = asc ? ++", counterRef, " : --", counterRef];
3588
+ return {
3589
+ declaration,
3590
+ children: [$1, open, declaration, "; ", ...condition, "; ", ...increment, close],
3591
+ blockPrefix
3592
+ };
3593
+ }
3594
+ default:
3595
+ expRef = {
3596
+ type: "Ref",
3597
+ base: "ref"
3598
+ };
3599
+ }
3600
+ if (step) {
3601
+ throw new Error("by clause not yet implement in non-range for in loops");
3602
+ }
3455
3603
  const varRef = declaration;
3456
3604
  module.insertTrimmingSpace(exp, "");
3457
3605
  const expRefDec = expRef !== exp ? [expRef, " = ", exp, ", "] : [];
@@ -3460,7 +3608,6 @@ var Civet = (() => {
3460
3608
  children: ["let ", ...expRefDec, counterRef, " = 0, ", lenRef, " = ", expRef, ".length"],
3461
3609
  names: []
3462
3610
  };
3463
- const indent = "".padStart((module.currentIndent + 1) * 2);
3464
3611
  blockPrefix.push([{
3465
3612
  type: "AssignmentExpression",
3466
3613
  children: [indent, varRef, " = ", expRef, "[", counterRef, "]\n"],
@@ -3468,7 +3615,7 @@ var Civet = (() => {
3468
3615
  }]);
3469
3616
  return {
3470
3617
  declaration,
3471
- children: [$1, $2, declaration, "; ", counterRef, " < ", lenRef, "; ", counterRef, "++", $7],
3618
+ children: [$1, open, declaration, "; ", counterRef, " < ", lenRef, "; ", counterRef, "++", close],
3472
3619
  blockPrefix
3473
3620
  };
3474
3621
  }
@@ -3805,10 +3952,18 @@ var Civet = (() => {
3805
3952
  return CatchParameter$0(state) || CatchParameter$1(state);
3806
3953
  }
3807
3954
  }
3808
- var Condition$0 = $S(__, OpenParen, ExtendedExpression, __, CloseParen);
3809
- var Condition$1 = $TS($S($N(EOS), __, InsertOpenParen, ExpressionWithIndentedApplicationSuppressed, InsertCloseParen), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
3810
- $0.shift();
3811
- return $0;
3955
+ var Condition$0 = $T($S(ParenthesizedExpression, $N($S($Q(TrailingComment), $C(BinaryOp, AssignmentOp)))), function(value) {
3956
+ return value[0];
3957
+ });
3958
+ var Condition$1 = $TS($S(InsertOpenParen, ExpressionWithIndentedApplicationSuppressed, InsertCloseParen), function($skip, $loc, $0, $1, $2, $3) {
3959
+ var exp = $2;
3960
+ if (exp.type === "ParenthesizedExpression")
3961
+ return exp;
3962
+ module.insertTrimmingSpace(exp, "");
3963
+ return {
3964
+ type: "ParenthesizedExpression",
3965
+ children: $0
3966
+ };
3812
3967
  });
3813
3968
  function Condition(state) {
3814
3969
  if (state.tokenize) {
@@ -4617,12 +4772,13 @@ var Civet = (() => {
4617
4772
  }
4618
4773
  var ReservedWord$0 = $S(CoffeeBooleansEnabled, $R$0($EXPECT($R25, fail, "ReservedWord /(?:on|off|yes|no)(?!\\p{ID_Continue})/")));
4619
4774
  var ReservedWord$1 = $S(CoffeeIsntEnabled, $R$0($EXPECT($R26, fail, "ReservedWord /(?:isnt)(?!\\p{ID_Continue})/")));
4620
- var ReservedWord$2 = $R$0($EXPECT($R27, 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})/"));
4775
+ var ReservedWord$2 = $S(CoffeeForLoopsEnabled, $R$0($EXPECT($R27, fail, "ReservedWord /(?:by)(?!\\p{ID_Continue})/")));
4776
+ var ReservedWord$3 = $R$0($EXPECT($R28, 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})/"));
4621
4777
  function ReservedWord(state) {
4622
4778
  if (state.tokenize) {
4623
- return $TOKEN("ReservedWord", state, ReservedWord$0(state) || ReservedWord$1(state) || ReservedWord$2(state));
4779
+ return $TOKEN("ReservedWord", state, ReservedWord$0(state) || ReservedWord$1(state) || ReservedWord$2(state) || ReservedWord$3(state));
4624
4780
  } else {
4625
- return ReservedWord$0(state) || ReservedWord$1(state) || ReservedWord$2(state);
4781
+ return ReservedWord$0(state) || ReservedWord$1(state) || ReservedWord$2(state) || ReservedWord$3(state);
4626
4782
  }
4627
4783
  }
4628
4784
  var Comment$0 = MultiLineComment;
@@ -4634,7 +4790,7 @@ var Civet = (() => {
4634
4790
  return Comment$0(state) || Comment$1(state);
4635
4791
  }
4636
4792
  }
4637
- var SingleLineComment$0 = $TR($EXPECT($R28, fail, "SingleLineComment /\\/\\/[^\\r\\n]*/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
4793
+ var SingleLineComment$0 = $TR($EXPECT($R29, fail, "SingleLineComment /\\/\\/[^\\r\\n]*/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
4638
4794
  return { $loc, token: $0 };
4639
4795
  });
4640
4796
  var SingleLineComment$1 = $S(CoffeeCommentEnabled, CoffeeSingleLineComment);
@@ -4654,7 +4810,7 @@ var Civet = (() => {
4654
4810
  return MultiLineComment$0(state) || MultiLineComment$1(state);
4655
4811
  }
4656
4812
  }
4657
- var JSMultiLineComment$0 = $TV($TEXT($S($EXPECT($L83, fail, 'JSMultiLineComment "/*"'), $Q($S($N($EXPECT($L84, fail, 'JSMultiLineComment "*/"')), $EXPECT($R29, fail, "JSMultiLineComment /./"))), $EXPECT($L84, fail, 'JSMultiLineComment "*/"'))), function($skip, $loc, $0, $1) {
4813
+ var JSMultiLineComment$0 = $TV($TEXT($S($EXPECT($L83, fail, 'JSMultiLineComment "/*"'), $Q($S($N($EXPECT($L84, fail, 'JSMultiLineComment "*/"')), $EXPECT($R30, fail, "JSMultiLineComment /./"))), $EXPECT($L84, fail, 'JSMultiLineComment "*/"'))), function($skip, $loc, $0, $1) {
4658
4814
  return { $loc, token: $1 };
4659
4815
  });
4660
4816
  function JSMultiLineComment(state) {
@@ -4666,7 +4822,7 @@ var Civet = (() => {
4666
4822
  return JSMultiLineComment$0(state);
4667
4823
  }
4668
4824
  }
4669
- var CoffeeSingleLineComment$0 = $TR($EXPECT($R30, fail, "CoffeeSingleLineComment /#(?!##)([^\\r\\n]*)/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
4825
+ var CoffeeSingleLineComment$0 = $TR($EXPECT($R31, fail, "CoffeeSingleLineComment /#(?!##)([^\\r\\n]*)/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
4670
4826
  return { $loc, token: `//${$1}` };
4671
4827
  });
4672
4828
  function CoffeeSingleLineComment(state) {
@@ -4678,7 +4834,7 @@ var Civet = (() => {
4678
4834
  return CoffeeSingleLineComment$0(state);
4679
4835
  }
4680
4836
  }
4681
- var CoffeeMultiLineComment$0 = $TS($S($EXPECT($L85, fail, 'CoffeeMultiLineComment "###"'), $TEXT($Q($S($N($C($EXPECT($L85, fail, 'CoffeeMultiLineComment "###"'), $EXPECT($L84, fail, 'CoffeeMultiLineComment "*/"'))), $EXPECT($R29, fail, "CoffeeMultiLineComment /./")))), $EXPECT($L85, fail, 'CoffeeMultiLineComment "###"')), function($skip, $loc, $0, $1, $2, $3) {
4837
+ var CoffeeMultiLineComment$0 = $TS($S($EXPECT($L85, fail, 'CoffeeMultiLineComment "###"'), $TEXT($Q($S($N($C($EXPECT($L85, fail, 'CoffeeMultiLineComment "###"'), $EXPECT($L84, fail, 'CoffeeMultiLineComment "*/"'))), $EXPECT($R30, fail, "CoffeeMultiLineComment /./")))), $EXPECT($L85, fail, 'CoffeeMultiLineComment "###"')), function($skip, $loc, $0, $1, $2, $3) {
4682
4838
  return { $loc, token: `/*${$2}*/` };
4683
4839
  });
4684
4840
  function CoffeeMultiLineComment(state) {
@@ -4690,7 +4846,7 @@ var Civet = (() => {
4690
4846
  return CoffeeMultiLineComment$0(state);
4691
4847
  }
4692
4848
  }
4693
- var InlineComment$0 = $TV($TEXT($S($EXPECT($L83, fail, 'InlineComment "/*"'), $TEXT($Q($S($N($EXPECT($L84, fail, 'InlineComment "*/"')), $EXPECT($R31, fail, "InlineComment /[^\\r\\n]/")))), $EXPECT($L84, fail, 'InlineComment "*/"'))), function($skip, $loc, $0, $1) {
4849
+ var InlineComment$0 = $TV($TEXT($S($EXPECT($L83, fail, 'InlineComment "/*"'), $TEXT($Q($S($N($EXPECT($L84, fail, 'InlineComment "*/"')), $EXPECT($R32, fail, "InlineComment /[^\\r\\n]/")))), $EXPECT($L84, fail, 'InlineComment "*/"'))), function($skip, $loc, $0, $1) {
4694
4850
  return { $loc, token: $1 };
4695
4851
  });
4696
4852
  function InlineComment(state) {
@@ -4732,7 +4888,7 @@ var Civet = (() => {
4732
4888
  return _$0(state);
4733
4889
  }
4734
4890
  }
4735
- var NonNewlineWhitespace$0 = $TR($EXPECT($R32, fail, "NonNewlineWhitespace /[ \\t]+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
4891
+ var NonNewlineWhitespace$0 = $TR($EXPECT($R33, fail, "NonNewlineWhitespace /[ \\t]+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
4736
4892
  return { $loc, token: $0 };
4737
4893
  });
4738
4894
  function NonNewlineWhitespace(state) {
@@ -4754,7 +4910,7 @@ var Civet = (() => {
4754
4910
  return __$0(state);
4755
4911
  }
4756
4912
  }
4757
- var Whitespace$0 = $TR($EXPECT($R33, fail, "Whitespace /[\\s]+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
4913
+ var Whitespace$0 = $TR($EXPECT($R34, fail, "Whitespace /[\\s]+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
4758
4914
  return { $loc, token: $0 };
4759
4915
  });
4760
4916
  function Whitespace(state) {
@@ -4789,7 +4945,7 @@ var Civet = (() => {
4789
4945
  return StatementDelimiter$0(state) || StatementDelimiter$1(state);
4790
4946
  }
4791
4947
  }
4792
- var NonIdContinue$0 = $R$0($EXPECT($R34, fail, "NonIdContinue /(?!\\p{ID_Continue})/"));
4948
+ var NonIdContinue$0 = $R$0($EXPECT($R35, fail, "NonIdContinue /(?!\\p{ID_Continue})/"));
4793
4949
  function NonIdContinue(state) {
4794
4950
  if (state.verbose)
4795
4951
  console.log("ENTER:", "NonIdContinue");
@@ -4871,7 +5027,19 @@ var Civet = (() => {
4871
5027
  return Backtick$0(state);
4872
5028
  }
4873
5029
  }
4874
- var Case$0 = $TS($S($EXPECT($L90, fail, 'Case "case"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5030
+ var By$0 = $TS($S($EXPECT($L90, fail, 'By "by"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5031
+ return { $loc, token: $1 };
5032
+ });
5033
+ function By(state) {
5034
+ if (state.verbose)
5035
+ console.log("ENTER:", "By");
5036
+ if (state.tokenize) {
5037
+ return $TOKEN("By", state, By$0(state));
5038
+ } else {
5039
+ return By$0(state);
5040
+ }
5041
+ }
5042
+ var Case$0 = $TS($S($EXPECT($L91, fail, 'Case "case"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4875
5043
  return { $loc, token: $1 };
4876
5044
  });
4877
5045
  function Case(state) {
@@ -4883,7 +5051,7 @@ var Civet = (() => {
4883
5051
  return Case$0(state);
4884
5052
  }
4885
5053
  }
4886
- var Catch$0 = $TV($EXPECT($L91, fail, 'Catch "catch"'), function($skip, $loc, $0, $1) {
5054
+ var Catch$0 = $TV($EXPECT($L92, fail, 'Catch "catch"'), function($skip, $loc, $0, $1) {
4887
5055
  return { $loc, token: $1 };
4888
5056
  });
4889
5057
  function Catch(state) {
@@ -4895,7 +5063,7 @@ var Civet = (() => {
4895
5063
  return Catch$0(state);
4896
5064
  }
4897
5065
  }
4898
- var Class$0 = $TV($EXPECT($L92, fail, 'Class "class"'), function($skip, $loc, $0, $1) {
5066
+ var Class$0 = $TV($EXPECT($L93, fail, 'Class "class"'), function($skip, $loc, $0, $1) {
4899
5067
  return { $loc, token: $1 };
4900
5068
  });
4901
5069
  function Class(state) {
@@ -4943,7 +5111,7 @@ var Civet = (() => {
4943
5111
  return CloseParen$0(state);
4944
5112
  }
4945
5113
  }
4946
- var CoffeeSubstitutionStart$0 = $TV($EXPECT($L93, fail, 'CoffeeSubstitutionStart "#{"'), function($skip, $loc, $0, $1) {
5114
+ var CoffeeSubstitutionStart$0 = $TV($EXPECT($L94, fail, 'CoffeeSubstitutionStart "#{"'), function($skip, $loc, $0, $1) {
4947
5115
  return { $loc, token: "${" };
4948
5116
  });
4949
5117
  function CoffeeSubstitutionStart(state) {
@@ -4955,7 +5123,7 @@ var Civet = (() => {
4955
5123
  return CoffeeSubstitutionStart$0(state);
4956
5124
  }
4957
5125
  }
4958
- var Colon$0 = $TV($EXPECT($L94, fail, 'Colon ":"'), function($skip, $loc, $0, $1) {
5126
+ var Colon$0 = $TV($EXPECT($L95, fail, 'Colon ":"'), function($skip, $loc, $0, $1) {
4959
5127
  return { $loc, token: $1 };
4960
5128
  });
4961
5129
  function Colon(state) {
@@ -4991,7 +5159,7 @@ var Civet = (() => {
4991
5159
  return Default$0(state);
4992
5160
  }
4993
5161
  }
4994
- var Delete$0 = $TS($S($EXPECT($L95, fail, 'Delete "delete"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5162
+ var Delete$0 = $TS($S($EXPECT($L96, fail, 'Delete "delete"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
4995
5163
  return { $loc, token: $1 };
4996
5164
  });
4997
5165
  function Delete(state) {
@@ -5003,7 +5171,7 @@ var Civet = (() => {
5003
5171
  return Delete$0(state);
5004
5172
  }
5005
5173
  }
5006
- var Do$0 = $TS($S($EXPECT($L96, fail, 'Do "do"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5174
+ var Do$0 = $TS($S($EXPECT($L97, fail, 'Do "do"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5007
5175
  return { $loc, token: $1 };
5008
5176
  });
5009
5177
  function Do(state) {
@@ -5027,7 +5195,7 @@ var Civet = (() => {
5027
5195
  return Dot$0(state);
5028
5196
  }
5029
5197
  }
5030
- var DotDot$0 = $TV($EXPECT($L97, fail, 'DotDot ".."'), function($skip, $loc, $0, $1) {
5198
+ var DotDot$0 = $TV($EXPECT($L98, fail, 'DotDot ".."'), function($skip, $loc, $0, $1) {
5031
5199
  return { $loc, token: $1 };
5032
5200
  });
5033
5201
  function DotDot(state) {
@@ -5039,7 +5207,7 @@ var Civet = (() => {
5039
5207
  return DotDot$0(state);
5040
5208
  }
5041
5209
  }
5042
- var DotDotDot$0 = $TV($EXPECT($L98, fail, 'DotDotDot "..."'), function($skip, $loc, $0, $1) {
5210
+ var DotDotDot$0 = $TV($EXPECT($L99, fail, 'DotDotDot "..."'), function($skip, $loc, $0, $1) {
5043
5211
  return { $loc, token: $1 };
5044
5212
  });
5045
5213
  function DotDotDot(state) {
@@ -5051,7 +5219,7 @@ var Civet = (() => {
5051
5219
  return DotDotDot$0(state);
5052
5220
  }
5053
5221
  }
5054
- var DoubleQuote$0 = $TV($EXPECT($L99, fail, 'DoubleQuote "\\\\\\""'), function($skip, $loc, $0, $1) {
5222
+ var DoubleQuote$0 = $TV($EXPECT($L100, fail, 'DoubleQuote "\\\\\\""'), function($skip, $loc, $0, $1) {
5055
5223
  return { $loc, token: $1 };
5056
5224
  });
5057
5225
  function DoubleQuote(state) {
@@ -5063,7 +5231,7 @@ var Civet = (() => {
5063
5231
  return DoubleQuote$0(state);
5064
5232
  }
5065
5233
  }
5066
- var Else$0 = $TV($EXPECT($L100, fail, 'Else "else"'), function($skip, $loc, $0, $1) {
5234
+ var Else$0 = $TV($EXPECT($L101, fail, 'Else "else"'), function($skip, $loc, $0, $1) {
5067
5235
  return { $loc, token: $1 };
5068
5236
  });
5069
5237
  function Else(state) {
@@ -5087,7 +5255,7 @@ var Civet = (() => {
5087
5255
  return Equals$0(state);
5088
5256
  }
5089
5257
  }
5090
- var Export$0 = $TS($S($EXPECT($L101, fail, 'Export "export"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5258
+ var Export$0 = $TS($S($EXPECT($L102, fail, 'Export "export"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5091
5259
  return { $loc, token: $1 };
5092
5260
  });
5093
5261
  function Export(state) {
@@ -5099,7 +5267,7 @@ var Civet = (() => {
5099
5267
  return Export$0(state);
5100
5268
  }
5101
5269
  }
5102
- var For$0 = $TS($S($EXPECT($L102, fail, 'For "for"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5270
+ var For$0 = $TS($S($EXPECT($L103, fail, 'For "for"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5103
5271
  return { $loc, token: $1 };
5104
5272
  });
5105
5273
  function For(state) {
@@ -5111,7 +5279,7 @@ var Civet = (() => {
5111
5279
  return For$0(state);
5112
5280
  }
5113
5281
  }
5114
- var From$0 = $TS($S($EXPECT($L103, fail, 'From "from"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5282
+ var From$0 = $TS($S($EXPECT($L104, fail, 'From "from"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5115
5283
  return { $loc, token: $1 };
5116
5284
  });
5117
5285
  function From(state) {
@@ -5123,7 +5291,7 @@ var Civet = (() => {
5123
5291
  return From$0(state);
5124
5292
  }
5125
5293
  }
5126
- var Function$0 = $TV($EXPECT($L104, fail, 'Function "function"'), function($skip, $loc, $0, $1) {
5294
+ var Function$0 = $TV($EXPECT($L105, fail, 'Function "function"'), function($skip, $loc, $0, $1) {
5127
5295
  return { $loc, token: $1 };
5128
5296
  });
5129
5297
  function Function(state) {
@@ -5135,7 +5303,7 @@ var Civet = (() => {
5135
5303
  return Function$0(state);
5136
5304
  }
5137
5305
  }
5138
- var GetOrSet$0 = $TS($S($C($EXPECT($L105, fail, 'GetOrSet "get"'), $EXPECT($L106, fail, 'GetOrSet "set"')), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5306
+ var GetOrSet$0 = $TS($S($C($EXPECT($L106, fail, 'GetOrSet "get"'), $EXPECT($L107, fail, 'GetOrSet "set"')), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5139
5307
  return { $loc, token: $1 };
5140
5308
  });
5141
5309
  function GetOrSet(state) {
@@ -5147,7 +5315,7 @@ var Civet = (() => {
5147
5315
  return GetOrSet$0(state);
5148
5316
  }
5149
5317
  }
5150
- var If$0 = $TV($TEXT($S($EXPECT($L107, fail, 'If "if"'), $E($EXPECT($L108, fail, 'If " "')))), function($skip, $loc, $0, $1) {
5318
+ var If$0 = $TV($TEXT($S($EXPECT($L108, fail, 'If "if"'), $E($EXPECT($L109, fail, 'If " "')))), function($skip, $loc, $0, $1) {
5151
5319
  return { $loc, token: $1 };
5152
5320
  });
5153
5321
  function If(state) {
@@ -5159,7 +5327,7 @@ var Civet = (() => {
5159
5327
  return If$0(state);
5160
5328
  }
5161
5329
  }
5162
- var Import$0 = $TS($S($EXPECT($L11, fail, 'Import "import"'), $Y($EXPECT($R35, fail, "Import /\\s/"))), function($skip, $loc, $0, $1, $2) {
5330
+ var Import$0 = $TS($S($EXPECT($L11, fail, 'Import "import"'), $Y($EXPECT($R36, fail, "Import /\\s/"))), function($skip, $loc, $0, $1, $2) {
5163
5331
  return { $loc, token: $1 };
5164
5332
  });
5165
5333
  function Import(state) {
@@ -5183,7 +5351,7 @@ var Civet = (() => {
5183
5351
  return In$0(state);
5184
5352
  }
5185
5353
  }
5186
- var LetOrConst$0 = $TV($C($EXPECT($L109, fail, 'LetOrConst "let"'), $EXPECT($L110, fail, 'LetOrConst "const"')), function($skip, $loc, $0, $1) {
5354
+ var LetOrConst$0 = $TV($C($EXPECT($L110, fail, 'LetOrConst "let"'), $EXPECT($L111, fail, 'LetOrConst "const"')), function($skip, $loc, $0, $1) {
5187
5355
  return { $loc, token: $1 };
5188
5356
  });
5189
5357
  function LetOrConst(state) {
@@ -5195,7 +5363,7 @@ var Civet = (() => {
5195
5363
  return LetOrConst$0(state);
5196
5364
  }
5197
5365
  }
5198
- var Loop$0 = $TS($S($EXPECT($L111, fail, 'Loop "loop"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5366
+ var Loop$0 = $TS($S($EXPECT($L112, fail, 'Loop "loop"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5199
5367
  return { $loc, token: "while(true)" };
5200
5368
  });
5201
5369
  function Loop(state) {
@@ -5207,7 +5375,7 @@ var Civet = (() => {
5207
5375
  return Loop$0(state);
5208
5376
  }
5209
5377
  }
5210
- var New$0 = $TV($EXPECT($L112, fail, 'New "new"'), function($skip, $loc, $0, $1) {
5378
+ var New$0 = $TV($EXPECT($L113, fail, 'New "new"'), function($skip, $loc, $0, $1) {
5211
5379
  return { $loc, token: $1 };
5212
5380
  });
5213
5381
  function New(state) {
@@ -5219,7 +5387,7 @@ var Civet = (() => {
5219
5387
  return New$0(state);
5220
5388
  }
5221
5389
  }
5222
- 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) {
5390
+ var Not$0 = $TS($S(CoffeeNotEnabled, $EXPECT($L114, fail, 'Not "not"'), NonIdContinue, $E($EXPECT($L109, fail, 'Not " "'))), function($skip, $loc, $0, $1, $2, $3, $4) {
5223
5391
  return { $loc, token: "!" };
5224
5392
  });
5225
5393
  function Not(state) {
@@ -5243,7 +5411,7 @@ var Civet = (() => {
5243
5411
  return Of$0(state);
5244
5412
  }
5245
5413
  }
5246
- var OpenBrace$0 = $TV($EXPECT($L114, fail, 'OpenBrace "{"'), function($skip, $loc, $0, $1) {
5414
+ var OpenBrace$0 = $TV($EXPECT($L115, fail, 'OpenBrace "{"'), function($skip, $loc, $0, $1) {
5247
5415
  return { $loc, token: $1 };
5248
5416
  });
5249
5417
  function OpenBrace(state) {
@@ -5255,7 +5423,7 @@ var Civet = (() => {
5255
5423
  return OpenBrace$0(state);
5256
5424
  }
5257
5425
  }
5258
- var OpenBracket$0 = $TV($EXPECT($L115, fail, 'OpenBracket "["'), function($skip, $loc, $0, $1) {
5426
+ var OpenBracket$0 = $TV($EXPECT($L116, fail, 'OpenBracket "["'), function($skip, $loc, $0, $1) {
5259
5427
  return { $loc, token: $1 };
5260
5428
  });
5261
5429
  function OpenBracket(state) {
@@ -5267,7 +5435,7 @@ var Civet = (() => {
5267
5435
  return OpenBracket$0(state);
5268
5436
  }
5269
5437
  }
5270
- var OpenParen$0 = $TV($EXPECT($L116, fail, 'OpenParen "("'), function($skip, $loc, $0, $1) {
5438
+ var OpenParen$0 = $TV($EXPECT($L117, fail, 'OpenParen "("'), function($skip, $loc, $0, $1) {
5271
5439
  return { $loc, token: $1 };
5272
5440
  });
5273
5441
  function OpenParen(state) {
@@ -5279,7 +5447,7 @@ var Civet = (() => {
5279
5447
  return OpenParen$0(state);
5280
5448
  }
5281
5449
  }
5282
- var QuestionMark$0 = $TV($EXPECT($L117, fail, 'QuestionMark "?"'), function($skip, $loc, $0, $1) {
5450
+ var QuestionMark$0 = $TV($EXPECT($L118, fail, 'QuestionMark "?"'), function($skip, $loc, $0, $1) {
5283
5451
  return { $loc, token: $1 };
5284
5452
  });
5285
5453
  function QuestionMark(state) {
@@ -5291,7 +5459,7 @@ var Civet = (() => {
5291
5459
  return QuestionMark$0(state);
5292
5460
  }
5293
5461
  }
5294
- var Return$0 = $TS($S($EXPECT($L118, fail, 'Return "return"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5462
+ var Return$0 = $TS($S($EXPECT($L119, fail, 'Return "return"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5295
5463
  return { $loc, token: $1 };
5296
5464
  });
5297
5465
  function Return(state) {
@@ -5315,7 +5483,7 @@ var Civet = (() => {
5315
5483
  return Semicolon$0(state);
5316
5484
  }
5317
5485
  }
5318
- var SingleQuote$0 = $TV($EXPECT($L119, fail, `SingleQuote "'"`), function($skip, $loc, $0, $1) {
5486
+ var SingleQuote$0 = $TV($EXPECT($L120, fail, `SingleQuote "'"`), function($skip, $loc, $0, $1) {
5319
5487
  return { $loc, token: $1 };
5320
5488
  });
5321
5489
  function SingleQuote(state) {
@@ -5339,10 +5507,10 @@ var Civet = (() => {
5339
5507
  return Star$0(state);
5340
5508
  }
5341
5509
  }
5342
- var Static$0 = $TV($EXPECT($L120, fail, 'Static "static"'), function($skip, $loc, $0, $1) {
5510
+ var Static$0 = $TV($EXPECT($L121, fail, 'Static "static"'), function($skip, $loc, $0, $1) {
5343
5511
  return { $loc, token: $1 };
5344
5512
  });
5345
- var Static$1 = $TS($S($EXPECT($L8, fail, 'Static "@"'), $N($EXPECT($L116, fail, 'Static "("'))), function($skip, $loc, $0, $1, $2) {
5513
+ var Static$1 = $TS($S($EXPECT($L8, fail, 'Static "@"'), $N($EXPECT($L117, fail, 'Static "("'))), function($skip, $loc, $0, $1, $2) {
5346
5514
  return { $loc, token: "static " };
5347
5515
  });
5348
5516
  function Static(state) {
@@ -5352,7 +5520,7 @@ var Civet = (() => {
5352
5520
  return Static$0(state) || Static$1(state);
5353
5521
  }
5354
5522
  }
5355
- var SubstitutionStart$0 = $TV($EXPECT($L121, fail, 'SubstitutionStart "${"'), function($skip, $loc, $0, $1) {
5523
+ var SubstitutionStart$0 = $TV($EXPECT($L122, fail, 'SubstitutionStart "${"'), function($skip, $loc, $0, $1) {
5356
5524
  return { $loc, token: $1 };
5357
5525
  });
5358
5526
  function SubstitutionStart(state) {
@@ -5364,7 +5532,7 @@ var Civet = (() => {
5364
5532
  return SubstitutionStart$0(state);
5365
5533
  }
5366
5534
  }
5367
- var Switch$0 = $TS($S($EXPECT($L122, fail, 'Switch "switch"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5535
+ var Switch$0 = $TS($S($EXPECT($L123, fail, 'Switch "switch"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5368
5536
  return { $loc, token: $1 };
5369
5537
  });
5370
5538
  function Switch(state) {
@@ -5376,7 +5544,7 @@ var Civet = (() => {
5376
5544
  return Switch$0(state);
5377
5545
  }
5378
5546
  }
5379
- var Target$0 = $TV($EXPECT($L123, fail, 'Target "target"'), function($skip, $loc, $0, $1) {
5547
+ var Target$0 = $TV($EXPECT($L124, fail, 'Target "target"'), function($skip, $loc, $0, $1) {
5380
5548
  return { $loc, token: $1 };
5381
5549
  });
5382
5550
  function Target(state) {
@@ -5388,7 +5556,7 @@ var Civet = (() => {
5388
5556
  return Target$0(state);
5389
5557
  }
5390
5558
  }
5391
- var Then$0 = $TS($S(__, $EXPECT($L124, fail, 'Then "then"'), NonIdContinue), function($skip, $loc, $0, $1, $2, $3) {
5559
+ var Then$0 = $TS($S(__, $EXPECT($L125, fail, 'Then "then"'), NonIdContinue), function($skip, $loc, $0, $1, $2, $3) {
5392
5560
  return { $loc, token: "" };
5393
5561
  });
5394
5562
  function Then(state) {
@@ -5400,7 +5568,7 @@ var Civet = (() => {
5400
5568
  return Then$0(state);
5401
5569
  }
5402
5570
  }
5403
- var Throw$0 = $TS($S($EXPECT($L125, fail, 'Throw "throw"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5571
+ var Throw$0 = $TS($S($EXPECT($L126, fail, 'Throw "throw"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5404
5572
  return { $loc, token: $1 };
5405
5573
  });
5406
5574
  function Throw(state) {
@@ -5412,7 +5580,7 @@ var Civet = (() => {
5412
5580
  return Throw$0(state);
5413
5581
  }
5414
5582
  }
5415
- var TripleDoubleQuote$0 = $TV($EXPECT($L126, fail, 'TripleDoubleQuote "\\\\\\"\\\\\\"\\\\\\""'), function($skip, $loc, $0, $1) {
5583
+ var TripleDoubleQuote$0 = $TV($EXPECT($L127, fail, 'TripleDoubleQuote "\\\\\\"\\\\\\"\\\\\\""'), function($skip, $loc, $0, $1) {
5416
5584
  return { $loc, token: "`" };
5417
5585
  });
5418
5586
  function TripleDoubleQuote(state) {
@@ -5424,7 +5592,7 @@ var Civet = (() => {
5424
5592
  return TripleDoubleQuote$0(state);
5425
5593
  }
5426
5594
  }
5427
- var TripleSingleQuote$0 = $TV($EXPECT($L127, fail, `TripleSingleQuote "'''"`), function($skip, $loc, $0, $1) {
5595
+ var TripleSingleQuote$0 = $TV($EXPECT($L128, fail, `TripleSingleQuote "'''"`), function($skip, $loc, $0, $1) {
5428
5596
  return { $loc, token: "`" };
5429
5597
  });
5430
5598
  function TripleSingleQuote(state) {
@@ -5436,7 +5604,7 @@ var Civet = (() => {
5436
5604
  return TripleSingleQuote$0(state);
5437
5605
  }
5438
5606
  }
5439
- var TripleTick$0 = $TV($EXPECT($L128, fail, 'TripleTick "```"'), function($skip, $loc, $0, $1) {
5607
+ var TripleTick$0 = $TV($EXPECT($L129, fail, 'TripleTick "```"'), function($skip, $loc, $0, $1) {
5440
5608
  return { $loc, token: "`" };
5441
5609
  });
5442
5610
  function TripleTick(state) {
@@ -5448,7 +5616,7 @@ var Civet = (() => {
5448
5616
  return TripleTick$0(state);
5449
5617
  }
5450
5618
  }
5451
- var Try$0 = $TV($EXPECT($L129, fail, 'Try "try"'), function($skip, $loc, $0, $1) {
5619
+ var Try$0 = $TV($EXPECT($L130, fail, 'Try "try"'), function($skip, $loc, $0, $1) {
5452
5620
  return { $loc, token: $1 };
5453
5621
  });
5454
5622
  function Try(state) {
@@ -5460,7 +5628,7 @@ var Civet = (() => {
5460
5628
  return Try$0(state);
5461
5629
  }
5462
5630
  }
5463
- var Typeof$0 = $TS($S($EXPECT($L130, fail, 'Typeof "typeof"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5631
+ var Typeof$0 = $TS($S($EXPECT($L131, fail, 'Typeof "typeof"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5464
5632
  return { $loc, token: $1 };
5465
5633
  });
5466
5634
  function Typeof(state) {
@@ -5472,7 +5640,7 @@ var Civet = (() => {
5472
5640
  return Typeof$0(state);
5473
5641
  }
5474
5642
  }
5475
- var Unless$0 = $TV($EXPECT($L131, fail, 'Unless "unless"'), function($skip, $loc, $0, $1) {
5643
+ var Unless$0 = $TV($EXPECT($L132, fail, 'Unless "unless"'), function($skip, $loc, $0, $1) {
5476
5644
  return { $loc, token: $1 };
5477
5645
  });
5478
5646
  function Unless(state) {
@@ -5484,7 +5652,7 @@ var Civet = (() => {
5484
5652
  return Unless$0(state);
5485
5653
  }
5486
5654
  }
5487
- var Until$0 = $TS($S($EXPECT($L132, fail, 'Until "until"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5655
+ var Until$0 = $TS($S($EXPECT($L133, fail, 'Until "until"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5488
5656
  return { $loc, token: $1 };
5489
5657
  });
5490
5658
  function Until(state) {
@@ -5496,7 +5664,7 @@ var Civet = (() => {
5496
5664
  return Until$0(state);
5497
5665
  }
5498
5666
  }
5499
- var Var$0 = $TV($EXPECT($L133, fail, 'Var "var"'), function($skip, $loc, $0, $1) {
5667
+ var Var$0 = $TV($EXPECT($L134, fail, 'Var "var"'), function($skip, $loc, $0, $1) {
5500
5668
  return { $loc, token: $1 };
5501
5669
  });
5502
5670
  function Var(state) {
@@ -5508,7 +5676,7 @@ var Civet = (() => {
5508
5676
  return Var$0(state);
5509
5677
  }
5510
5678
  }
5511
- var Void$0 = $TS($S($EXPECT($L134, fail, 'Void "void"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5679
+ var Void$0 = $TS($S($EXPECT($L135, fail, 'Void "void"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5512
5680
  return { $loc, token: $1 };
5513
5681
  });
5514
5682
  function Void(state) {
@@ -5520,7 +5688,7 @@ var Civet = (() => {
5520
5688
  return Void$0(state);
5521
5689
  }
5522
5690
  }
5523
- var When$0 = $TS($S($EXPECT($L135, fail, 'When "when"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5691
+ var When$0 = $TS($S($EXPECT($L136, fail, 'When "when"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5524
5692
  return { $loc, token: "case" };
5525
5693
  });
5526
5694
  function When(state) {
@@ -5532,7 +5700,7 @@ var Civet = (() => {
5532
5700
  return When$0(state);
5533
5701
  }
5534
5702
  }
5535
- var While$0 = $TS($S($EXPECT($L136, fail, 'While "while"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5703
+ var While$0 = $TS($S($EXPECT($L137, fail, 'While "while"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5536
5704
  return { $loc, token: $1 };
5537
5705
  });
5538
5706
  function While(state) {
@@ -5544,7 +5712,7 @@ var Civet = (() => {
5544
5712
  return While$0(state);
5545
5713
  }
5546
5714
  }
5547
- var Yield$0 = $TS($S($EXPECT($L137, fail, 'Yield "yield"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5715
+ var Yield$0 = $TS($S($EXPECT($L138, fail, 'Yield "yield"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
5548
5716
  return { $loc, token: $1 };
5549
5717
  });
5550
5718
  function Yield(state) {
@@ -5570,7 +5738,7 @@ var Civet = (() => {
5570
5738
  return JSXElement$0(state) || JSXElement$1(state);
5571
5739
  }
5572
5740
  }
5573
- var JSXSelfClosingElement$0 = $S($EXPECT($L4, fail, 'JSXSelfClosingElement "<"'), $TEXT(JSXElementName), $E(JSXAttributes), __, $EXPECT($L138, fail, 'JSXSelfClosingElement "/>"'));
5741
+ var JSXSelfClosingElement$0 = $S($EXPECT($L4, fail, 'JSXSelfClosingElement "<"'), $TEXT(JSXElementName), $E(JSXAttributes), __, $EXPECT($L139, fail, 'JSXSelfClosingElement "/>"'));
5574
5742
  function JSXSelfClosingElement(state) {
5575
5743
  if (state.verbose)
5576
5744
  console.log("ENTER:", "JSXSelfClosingElement");
@@ -5590,7 +5758,7 @@ var Civet = (() => {
5590
5758
  return JSXOpeningElement$0(state);
5591
5759
  }
5592
5760
  }
5593
- var JSXClosingElement$0 = $S($EXPECT($L139, fail, 'JSXClosingElement "</"'), __, $TEXT(JSXElementName), __, $EXPECT($L56, fail, 'JSXClosingElement ">"'));
5761
+ var JSXClosingElement$0 = $S($EXPECT($L140, fail, 'JSXClosingElement "</"'), __, $TEXT(JSXElementName), __, $EXPECT($L56, fail, 'JSXClosingElement ">"'));
5594
5762
  function JSXClosingElement(state) {
5595
5763
  if (state.verbose)
5596
5764
  console.log("ENTER:", "JSXClosingElement");
@@ -5600,7 +5768,7 @@ var Civet = (() => {
5600
5768
  return JSXClosingElement$0(state);
5601
5769
  }
5602
5770
  }
5603
- var JSXFragment$0 = $S($EXPECT($L140, fail, 'JSXFragment "<>"'), $E(JSXChildren), $EXPECT($L141, fail, 'JSXFragment "</>"'));
5771
+ var JSXFragment$0 = $S($EXPECT($L141, fail, 'JSXFragment "<>"'), $E(JSXChildren), $EXPECT($L142, fail, 'JSXFragment "</>"'));
5604
5772
  function JSXFragment(state) {
5605
5773
  if (state.verbose)
5606
5774
  console.log("ENTER:", "JSXFragment");
@@ -5620,7 +5788,7 @@ var Civet = (() => {
5620
5788
  return JSXElementName$0(state);
5621
5789
  }
5622
5790
  }
5623
- var JSXIdentifierName$0 = $R$0($EXPECT($R36, fail, "JSXIdentifierName /(?:\\p{ID_Start}|[_$])(?:\\p{ID_Continue}|[\\u200C\\u200D$-])*/"));
5791
+ var JSXIdentifierName$0 = $R$0($EXPECT($R37, fail, "JSXIdentifierName /(?:\\p{ID_Start}|[_$])(?:\\p{ID_Continue}|[\\u200C\\u200D$-])*/"));
5624
5792
  function JSXIdentifierName(state) {
5625
5793
  if (state.verbose)
5626
5794
  console.log("ENTER:", "JSXIdentifierName");
@@ -5669,8 +5837,8 @@ var Civet = (() => {
5669
5837
  return JSXAttributeInitializer$0(state);
5670
5838
  }
5671
5839
  }
5672
- var JSXAttributeValue$0 = $R$0($EXPECT($R37, fail, 'JSXAttributeValue /"[^"]*"/'));
5673
- var JSXAttributeValue$1 = $R$0($EXPECT($R38, fail, "JSXAttributeValue /'[^']*'/"));
5840
+ var JSXAttributeValue$0 = $R$0($EXPECT($R38, fail, 'JSXAttributeValue /"[^"]*"/'));
5841
+ var JSXAttributeValue$1 = $R$0($EXPECT($R39, fail, "JSXAttributeValue /'[^']*'/"));
5674
5842
  var JSXAttributeValue$2 = $S(OpenBrace, ExtendedExpression, __, CloseBrace);
5675
5843
  var JSXAttributeValue$3 = JSXElement;
5676
5844
  var JSXAttributeValue$4 = JSXFragment;
@@ -5702,7 +5870,7 @@ var Civet = (() => {
5702
5870
  return JSXChild$0(state) || JSXChild$1(state) || JSXChild$2(state) || JSXChild$3(state);
5703
5871
  }
5704
5872
  }
5705
- var JSXText$0 = $R$0($EXPECT($R39, fail, "JSXText /[^{}<>]+/"));
5873
+ var JSXText$0 = $R$0($EXPECT($R40, fail, "JSXText /[^{}<>]+/"));
5706
5874
  function JSXText(state) {
5707
5875
  if (state.verbose)
5708
5876
  console.log("ENTER:", "JSXText");
@@ -5734,7 +5902,7 @@ var Civet = (() => {
5734
5902
  return TypeDeclaration$0(state);
5735
5903
  }
5736
5904
  }
5737
- var TypeDeclarationModifier$0 = $S($EXPECT($L142, fail, 'TypeDeclarationModifier "declare"'), NonIdContinue);
5905
+ var TypeDeclarationModifier$0 = $S($EXPECT($L143, fail, 'TypeDeclarationModifier "declare"'), NonIdContinue);
5738
5906
  var TypeDeclarationModifier$1 = Export;
5739
5907
  function TypeDeclarationModifier(state) {
5740
5908
  if (state.tokenize) {
@@ -5754,7 +5922,7 @@ var Civet = (() => {
5754
5922
  return TypeDeclarationRest$0(state) || TypeDeclarationRest$1(state) || TypeDeclarationRest$2(state) || TypeDeclarationRest$3(state);
5755
5923
  }
5756
5924
  }
5757
- var TypeKeyword$0 = $S($EXPECT($L143, fail, 'TypeKeyword "type"'), NonIdContinue);
5925
+ var TypeKeyword$0 = $S($EXPECT($L144, fail, 'TypeKeyword "type"'), NonIdContinue);
5758
5926
  function TypeKeyword(state) {
5759
5927
  if (state.verbose)
5760
5928
  console.log("ENTER:", "TypeKeyword");
@@ -5764,7 +5932,7 @@ var Civet = (() => {
5764
5932
  return TypeKeyword$0(state);
5765
5933
  }
5766
5934
  }
5767
- var Interface$0 = $S($EXPECT($L144, fail, 'Interface "interface"'), NonIdContinue);
5935
+ var Interface$0 = $S($EXPECT($L145, fail, 'Interface "interface"'), NonIdContinue);
5768
5936
  function Interface(state) {
5769
5937
  if (state.verbose)
5770
5938
  console.log("ENTER:", "Interface");
@@ -5774,7 +5942,7 @@ var Civet = (() => {
5774
5942
  return Interface$0(state);
5775
5943
  }
5776
5944
  }
5777
- var Namespace$0 = $S($EXPECT($L145, fail, 'Namespace "namespace"'), NonIdContinue);
5945
+ var Namespace$0 = $S($EXPECT($L146, fail, 'Namespace "namespace"'), NonIdContinue);
5778
5946
  function Namespace(state) {
5779
5947
  if (state.verbose)
5780
5948
  console.log("ENTER:", "Namespace");
@@ -5874,7 +6042,7 @@ var Civet = (() => {
5874
6042
  return NestedTypeDeclaration$0(state);
5875
6043
  }
5876
6044
  }
5877
- var TypeIndexSignature$0 = $S($E($S($R$0($EXPECT($R40, fail, "TypeIndexSignature /[+-]?/")), $EXPECT($L146, fail, 'TypeIndexSignature "readonly"'), __)), OpenBracket, TypeIndex, CloseBracket, $E($S(__, $R$0($EXPECT($R41, fail, "TypeIndexSignature /[+-]/")), QuestionMark)));
6045
+ var TypeIndexSignature$0 = $S($E($S($R$0($EXPECT($R41, fail, "TypeIndexSignature /[+-]?/")), $EXPECT($L147, fail, 'TypeIndexSignature "readonly"'), __)), OpenBracket, TypeIndex, CloseBracket, $E($S(__, $R$0($EXPECT($R42, fail, "TypeIndexSignature /[+-]/")), QuestionMark)));
5878
6046
  function TypeIndexSignature(state) {
5879
6047
  if (state.verbose)
5880
6048
  console.log("ENTER:", "TypeIndexSignature");
@@ -5905,7 +6073,7 @@ var Civet = (() => {
5905
6073
  return TypeSuffix$0(state);
5906
6074
  }
5907
6075
  }
5908
- var ReturnTypeSuffix$0 = $TS($S(__, Colon, $E($S(__, $EXPECT($L147, fail, 'ReturnTypeSuffix "asserts"'), NonIdContinue)), TypePredicate), function($skip, $loc, $0, $1, $2, $3, $4) {
6076
+ var ReturnTypeSuffix$0 = $TS($S(__, Colon, $E($S(__, $EXPECT($L148, fail, 'ReturnTypeSuffix "asserts"'), NonIdContinue)), TypePredicate), function($skip, $loc, $0, $1, $2, $3, $4) {
5909
6077
  if (!$3)
5910
6078
  $0.splice(2, 1);
5911
6079
  if ($1.length === 0)
@@ -5988,9 +6156,9 @@ var Civet = (() => {
5988
6156
  return TypeUnarySuffix$0(state) || TypeUnarySuffix$1(state);
5989
6157
  }
5990
6158
  }
5991
- var TypeUnaryOp$0 = $EXPECT($L148, fail, 'TypeUnaryOp "keyof"');
5992
- var TypeUnaryOp$1 = $EXPECT($L130, fail, 'TypeUnaryOp "typeof"');
5993
- var TypeUnaryOp$2 = $EXPECT($L149, fail, 'TypeUnaryOp "infer"');
6159
+ var TypeUnaryOp$0 = $EXPECT($L149, fail, 'TypeUnaryOp "keyof"');
6160
+ var TypeUnaryOp$1 = $EXPECT($L131, fail, 'TypeUnaryOp "typeof"');
6161
+ var TypeUnaryOp$2 = $EXPECT($L150, fail, 'TypeUnaryOp "infer"');
5994
6162
  function TypeUnaryOp(state) {
5995
6163
  if (state.tokenize) {
5996
6164
  return $TOKEN("TypeUnaryOp", state, TypeUnaryOp$0(state) || TypeUnaryOp$1(state) || TypeUnaryOp$2(state));
@@ -6080,10 +6248,10 @@ var Civet = (() => {
6080
6248
  }
6081
6249
  }
6082
6250
  var TypeLiteral$0 = Literal;
6083
- var TypeLiteral$1 = $TV($EXPECT($L134, fail, 'TypeLiteral "void"'), function($skip, $loc, $0, $1) {
6251
+ var TypeLiteral$1 = $TV($EXPECT($L135, fail, 'TypeLiteral "void"'), function($skip, $loc, $0, $1) {
6084
6252
  return { $loc, token: "void" };
6085
6253
  });
6086
- var TypeLiteral$2 = $TV($EXPECT($L150, fail, 'TypeLiteral "[]"'), function($skip, $loc, $0, $1) {
6254
+ var TypeLiteral$2 = $TV($EXPECT($L151, fail, 'TypeLiteral "[]"'), function($skip, $loc, $0, $1) {
6087
6255
  return { $loc, token: "[]" };
6088
6256
  });
6089
6257
  function TypeLiteral(state) {
@@ -6173,7 +6341,7 @@ var Civet = (() => {
6173
6341
  return TypeParameterDelimiter$0(state) || TypeParameterDelimiter$1(state) || TypeParameterDelimiter$2(state) || TypeParameterDelimiter$3(state);
6174
6342
  }
6175
6343
  }
6176
- var Shebang$0 = $S($R$0($EXPECT($R42, fail, "Shebang /#![^\\r\\n]*/")), EOL);
6344
+ var Shebang$0 = $S($R$0($EXPECT($R43, fail, "Shebang /#![^\\r\\n]*/")), EOL);
6177
6345
  function Shebang(state) {
6178
6346
  if (state.verbose)
6179
6347
  console.log("ENTER:", "Shebang");
@@ -6183,11 +6351,11 @@ var Civet = (() => {
6183
6351
  return Shebang$0(state);
6184
6352
  }
6185
6353
  }
6186
- var CivetPrologue$0 = $T($S($EXPECT($R43, fail, "CivetPrologue /[\\t ]*/"), DoubleQuote, CivetPrologueContent, DoubleQuote, $TEXT(StatementDelimiter), EOS), function(value) {
6354
+ var CivetPrologue$0 = $T($S($EXPECT($R44, fail, "CivetPrologue /[\\t ]*/"), DoubleQuote, CivetPrologueContent, DoubleQuote, $TEXT(StatementDelimiter), EOS), function(value) {
6187
6355
  var content = value[2];
6188
6356
  return content;
6189
6357
  });
6190
- var CivetPrologue$1 = $T($S($EXPECT($R43, fail, "CivetPrologue /[\\t ]*/"), SingleQuote, CivetPrologueContent, SingleQuote, $TEXT(StatementDelimiter), EOS), function(value) {
6358
+ var CivetPrologue$1 = $T($S($EXPECT($R44, fail, "CivetPrologue /[\\t ]*/"), SingleQuote, CivetPrologueContent, SingleQuote, $TEXT(StatementDelimiter), EOS), function(value) {
6191
6359
  var content = value[2];
6192
6360
  return content;
6193
6361
  });
@@ -6198,7 +6366,7 @@ var Civet = (() => {
6198
6366
  return CivetPrologue$0(state) || CivetPrologue$1(state);
6199
6367
  }
6200
6368
  }
6201
- var CivetPrologueContent$0 = $TS($S($EXPECT($L151, fail, 'CivetPrologueContent "civet"'), $Q(CivetOption), $EXPECT($R44, fail, "CivetPrologueContent /[\\s]*/")), function($skip, $loc, $0, $1, $2, $3) {
6369
+ var CivetPrologueContent$0 = $TS($S($EXPECT($L152, fail, 'CivetPrologueContent "civet"'), $Q(CivetOption), $EXPECT($R45, fail, "CivetPrologueContent /[\\s]*/")), function($skip, $loc, $0, $1, $2, $3) {
6202
6370
  var options = $2;
6203
6371
  return {
6204
6372
  type: "CivetPrologue",
@@ -6215,7 +6383,7 @@ var Civet = (() => {
6215
6383
  return CivetPrologueContent$0(state);
6216
6384
  }
6217
6385
  }
6218
- var CivetOption$0 = $TR($EXPECT($R45, fail, "CivetOption /\\s+([+-]?)([a-zA-Z0-9-]+)/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
6386
+ var CivetOption$0 = $TR($EXPECT($R46, fail, "CivetOption /\\s+([+-]?)([a-zA-Z0-9-]+)/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
6219
6387
  const optionName = $2.replace(/-+([a-z]?)/g, (_2, l) => {
6220
6388
  if (l)
6221
6389
  return l.toUpperCase();
@@ -6233,7 +6401,7 @@ var Civet = (() => {
6233
6401
  return CivetOption$0(state);
6234
6402
  }
6235
6403
  }
6236
- var UnknownPrologue$0 = $S($R$0($EXPECT($R43, fail, "UnknownPrologue /[\\t ]*/")), BasicStringLiteral, $TEXT(StatementDelimiter), EOS);
6404
+ var UnknownPrologue$0 = $S($R$0($EXPECT($R44, fail, "UnknownPrologue /[\\t ]*/")), BasicStringLiteral, $TEXT(StatementDelimiter), EOS);
6237
6405
  function UnknownPrologue(state) {
6238
6406
  if (state.verbose)
6239
6407
  console.log("ENTER:", "UnknownPrologue");
@@ -6262,7 +6430,7 @@ var Civet = (() => {
6262
6430
  return EOS$0(state);
6263
6431
  }
6264
6432
  }
6265
- var EOL$0 = $TR($EXPECT($R46, fail, "EOL /\\r\\n|\\n|\\r|$/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
6433
+ var EOL$0 = $TR($EXPECT($R47, fail, "EOL /\\r\\n|\\n|\\r|$/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
6266
6434
  return { $loc, token: $0 };
6267
6435
  });
6268
6436
  function EOL(state) {
@@ -6418,6 +6586,20 @@ var Civet = (() => {
6418
6586
  return InsertBreak$0(state);
6419
6587
  }
6420
6588
  }
6589
+ var CoffeeBooleansEnabled$0 = $TV($EXPECT($L0, fail, 'CoffeeBooleansEnabled ""'), function($skip, $loc, $0, $1) {
6590
+ if (module.config.coffeeBooleans)
6591
+ return;
6592
+ return $skip;
6593
+ });
6594
+ function CoffeeBooleansEnabled(state) {
6595
+ if (state.verbose)
6596
+ console.log("ENTER:", "CoffeeBooleansEnabled");
6597
+ if (state.tokenize) {
6598
+ return $TOKEN("CoffeeBooleansEnabled", state, CoffeeBooleansEnabled$0(state));
6599
+ } else {
6600
+ return CoffeeBooleansEnabled$0(state);
6601
+ }
6602
+ }
6421
6603
  var CoffeeCommentEnabled$0 = $TV($EXPECT($L0, fail, 'CoffeeCommentEnabled ""'), function($skip, $loc, $0, $1) {
6422
6604
  if (module.config.coffeeComment)
6423
6605
  return;
@@ -6432,18 +6614,18 @@ var Civet = (() => {
6432
6614
  return CoffeeCommentEnabled$0(state);
6433
6615
  }
6434
6616
  }
6435
- var CoffeeBooleansEnabled$0 = $TV($EXPECT($L0, fail, 'CoffeeBooleansEnabled ""'), function($skip, $loc, $0, $1) {
6436
- if (module.config.coffeeBooleans)
6617
+ var CoffeeDoEnabled$0 = $TV($EXPECT($L0, fail, 'CoffeeDoEnabled ""'), function($skip, $loc, $0, $1) {
6618
+ if (module.config.coffeeDo)
6437
6619
  return;
6438
6620
  return $skip;
6439
6621
  });
6440
- function CoffeeBooleansEnabled(state) {
6622
+ function CoffeeDoEnabled(state) {
6441
6623
  if (state.verbose)
6442
- console.log("ENTER:", "CoffeeBooleansEnabled");
6624
+ console.log("ENTER:", "CoffeeDoEnabled");
6443
6625
  if (state.tokenize) {
6444
- return $TOKEN("CoffeeBooleansEnabled", state, CoffeeBooleansEnabled$0(state));
6626
+ return $TOKEN("CoffeeDoEnabled", state, CoffeeDoEnabled$0(state));
6445
6627
  } else {
6446
- return CoffeeBooleansEnabled$0(state);
6628
+ return CoffeeDoEnabled$0(state);
6447
6629
  }
6448
6630
  }
6449
6631
  var CoffeeForLoopsEnabled$0 = $TV($EXPECT($L0, fail, 'CoffeeForLoopsEnabled ""'), function($skip, $loc, $0, $1) {
@@ -6524,6 +6706,7 @@ var Civet = (() => {
6524
6706
  autoVar: false,
6525
6707
  coffeeBooleans: false,
6526
6708
  coffeeComment: false,
6709
+ coffeeDo: false,
6527
6710
  coffeeEq: false,
6528
6711
  coffeeForLoops: false,
6529
6712
  coffeeInterpolation: false,
@@ -6576,6 +6759,7 @@ var Civet = (() => {
6576
6759
  this.autoVar = true;
6577
6760
  this.coffeeBooleans = true;
6578
6761
  this.coffeeComment = true;
6762
+ this.coffeeDo = true;
6579
6763
  this.coffeeEq = true;
6580
6764
  this.coffeeForLoops = true;
6581
6765
  this.coffeeInterpolation = true;
@@ -6586,6 +6770,7 @@ var Civet = (() => {
6586
6770
  this.autoVar = false;
6587
6771
  this.coffeeBooleans = false;
6588
6772
  this.coffeeComment = false;
6773
+ this.coffeeDo = false;
6589
6774
  this.coffeeEq = false;
6590
6775
  this.coffeeForLoops = false;
6591
6776
  this.coffeeInterpolation = false;
@@ -6994,7 +7179,7 @@ var Civet = (() => {
6994
7179
  return Init$0(state);
6995
7180
  }
6996
7181
  }
6997
- var Indent$0 = $TV($Q($C($EXPECT($L152, fail, 'Indent " "'), $EXPECT($L153, fail, 'Indent "\\\\t"'))), function($skip, $loc, $0, $1) {
7182
+ var Indent$0 = $TV($Q($C($EXPECT($L153, fail, 'Indent " "'), $EXPECT($L154, fail, 'Indent "\\\\t"'))), function($skip, $loc, $0, $1) {
6998
7183
  const level = $1.length;
6999
7184
  return {
7000
7185
  $loc,