@danielx/civet 0.6.89 → 0.6.91

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
@@ -41,213 +41,596 @@ var Civet = (() => {
41
41
  ));
42
42
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
43
43
 
44
- // source/parser/util.civet
45
- function addParentPointers(node, parent) {
46
- if (node == null)
47
- return;
48
- if (typeof node !== "object")
49
- return;
50
- if (Array.isArray(node)) {
51
- for (const child of node) {
52
- addParentPointers(child, parent);
53
- }
54
- return;
44
+ // source/parser/op.civet
45
+ function getPrecedence(op) {
46
+ if (typeof op === "string") {
47
+ return precedenceMap.get(op) ?? (() => {
48
+ throw new Error(`Unknown operator: ${op}`);
49
+ })();
50
+ } else if (typeof op.prec === "number") {
51
+ return op.prec;
52
+ } else {
53
+ return precedenceMap.get(op.prec ?? op.token) ?? (op.relational ? precedenceRelational : precedenceCustomDefault);
55
54
  }
56
- node = node;
57
- node.parent = parent;
58
- if (node.children) {
59
- for (const child of node.children) {
60
- addParentPointers(child, node);
55
+ }
56
+ function processBinaryOpExpression($0) {
57
+ return recurse(expandChainedComparisons($0));
58
+ function recurse(expandedOps) {
59
+ let i = 2;
60
+ while (i < expandedOps.length) {
61
+ let op = expandedOps[i];
62
+ if (op.special) {
63
+ let advanceLeft2 = function(allowEqual) {
64
+ while (start >= 4) {
65
+ const prevPrec = getPrecedence(expandedOps[start - 2]);
66
+ if (!(prevPrec > prec || allowEqual && prevPrec === prec)) {
67
+ return prevPrec === prec;
68
+ }
69
+ start -= 4;
70
+ }
71
+ return false;
72
+ }, advanceRight2 = function(allowEqual) {
73
+ while (end + 4 < expandedOps.length) {
74
+ const nextPrec = getPrecedence(expandedOps[end + 2]);
75
+ if (!(nextPrec > prec || allowEqual && nextPrec === prec)) {
76
+ return nextPrec === prec;
77
+ }
78
+ end += 4;
79
+ }
80
+ return false;
81
+ };
82
+ var advanceLeft = advanceLeft2, advanceRight = advanceRight2;
83
+ let start = i - 2, end = i + 2;
84
+ const prec = getPrecedence(op);
85
+ let error;
86
+ switch (op.assoc) {
87
+ case "left":
88
+ case void 0: {
89
+ advanceLeft2(true);
90
+ advanceRight2(false);
91
+ break;
92
+ }
93
+ case "right": {
94
+ advanceLeft2(false);
95
+ advanceRight2(true);
96
+ break;
97
+ }
98
+ case "non": {
99
+ if (advanceLeft2(false) || advanceRight2(false)) {
100
+ error = {
101
+ type: "Error",
102
+ message: `non-associative operator ${op.token} used at same precedence level without parenthesization`
103
+ };
104
+ }
105
+ ;
106
+ break;
107
+ }
108
+ case "arguments": {
109
+ if (advanceLeft2(false)) {
110
+ error = {
111
+ type: "Error",
112
+ message: `arguments operator ${op.token} used at same precedence level as ${expandedOps[start - 2].token} to the left`
113
+ };
114
+ }
115
+ advanceRight2(true);
116
+ break;
117
+ }
118
+ default: {
119
+ throw new Error(`Unsupported associativity: ${op.assoc}`);
120
+ }
121
+ }
122
+ let a = start === i - 2 ? expandedOps[start] : expandedOps.slice(start, i - 1);
123
+ let wsOp = expandedOps[i - 1];
124
+ let wsB = expandedOps[i + 1];
125
+ let b = end === i + 2 ? expandedOps[i + 2] : expandedOps.slice(i + 2, end + 1);
126
+ if (op.assoc === "arguments") {
127
+ let i2 = 2;
128
+ while (i2 < b.length) {
129
+ if (prec === getPrecedence(b[i2])) {
130
+ if (!(b[i2].token === op.token)) {
131
+ error ??= {
132
+ type: "Error",
133
+ message: `arguments operator ${op.token} used at same precedence level as ${b[i2].token} to the right`
134
+ };
135
+ }
136
+ b[i2] = ",";
137
+ }
138
+ i2 += 4;
139
+ }
140
+ } else {
141
+ b = recurse(b);
142
+ }
143
+ if (op.token === "instanceof" && b.type === "Literal" && b.children?.[0]?.type === "StringLiteral") {
144
+ a = ["typeof ", makeLeftHandSideExpression(a)];
145
+ if (op.negated) {
146
+ op = { ...op, token: "!==", negated: false };
147
+ } else {
148
+ op = { ...op, token: "===" };
149
+ }
150
+ }
151
+ if (op.asConst) {
152
+ a = makeAsConst(a);
153
+ b = makeAsConst(b);
154
+ }
155
+ let children;
156
+ if (op.call) {
157
+ wsOp = insertTrimmingSpace(wsOp, "");
158
+ if (op.reversed) {
159
+ wsB = insertTrimmingSpace(wsB, "");
160
+ children = [wsOp, op.call, "(", wsB, b, ", ", a, ")", op.suffix];
161
+ } else {
162
+ children = [wsOp, op.call, "(", a, ",", wsB, b, ")", op.suffix];
163
+ }
164
+ } else if (op.method) {
165
+ wsOp = insertTrimmingSpace(wsOp, "");
166
+ wsB = insertTrimmingSpace(wsB, "");
167
+ if (op.reversed) {
168
+ if (end !== i + 2)
169
+ b = makeLeftHandSideExpression(b);
170
+ b = dotNumericLiteral(b);
171
+ children = [wsB, b, wsOp, ".", op.method, "(", a, ")"];
172
+ } else {
173
+ if (start !== i - 2 || a.type === "NumericLiteral") {
174
+ a = makeLeftHandSideExpression(a);
175
+ }
176
+ a = dotNumericLiteral(a);
177
+ children = [a, wsOp, ".", op.method, "(", wsB, b, ")"];
178
+ }
179
+ } else if (op.token) {
180
+ children = [a, wsOp, op, wsB, b];
181
+ if (op.negated)
182
+ children = ["(", ...children, ")"];
183
+ } else {
184
+ throw new Error("Unknown operator: " + JSON.stringify(op));
185
+ }
186
+ if (op.negated)
187
+ children.unshift("!");
188
+ if (error != null) {
189
+ children.push(error);
190
+ }
191
+ expandedOps.splice(start, end - start + 1, {
192
+ children
193
+ });
194
+ i = start + 2;
195
+ } else {
196
+ i += 4;
197
+ }
61
198
  }
199
+ return expandedOps;
62
200
  }
201
+ ;
202
+ return recurse;
63
203
  }
64
- function clone(node) {
65
- removeParentPointers(node);
66
- return deepCopy(node);
204
+ function dotNumericLiteral(literal) {
205
+ if (literal?.type === "Literal" && /^[+-]?(?:0|[1-9](?:_[0-9]|[0-9])*)$/.test(literal.raw)) {
206
+ literal.children.push(".");
207
+ literal.raw += ".";
208
+ }
209
+ return literal;
67
210
  }
68
- function removeParentPointers(node) {
69
- if (node == null)
70
- return;
71
- if (typeof node !== "object")
72
- return;
73
- if (Array.isArray(node)) {
74
- for (const child of node) {
75
- removeParentPointers(child);
76
- }
77
- return;
211
+ function makeAsConst(node) {
212
+ if (Array.isArray(node) && node.length === 1) {
213
+ node = node[0];
78
214
  }
79
- node.parent = null;
80
- if (node.children) {
81
- for (const child of node.children) {
82
- removeParentPointers(child);
83
- }
215
+ if (node.type === "Literal" && node.raw !== "null" || node.type === "ArrayExpression" || node.type === "ObjectExpression") {
216
+ return { ...node, children: [...node.children, asConst] };
217
+ } else {
218
+ return node;
84
219
  }
85
220
  }
86
- function isEmptyBareBlock(node) {
87
- if (node?.type !== "BlockStatement")
88
- return false;
89
- const { bare, expressions } = node;
90
- return bare && (expressions.length === 0 || expressions.length === 1 && expressions[0][1]?.type === "EmptyStatement");
91
- }
92
- function isFunction(node) {
93
- const { type } = node;
94
- return type === "FunctionExpression" || type === "ArrowFunction" || type === "MethodDefinition" || !!node.async;
95
- }
96
- function isWhitespaceOrEmpty(node) {
97
- if (!node)
98
- return true;
99
- if (node.type === "Ref")
100
- return false;
101
- if (node.token)
102
- return node.token.match(/^\s*$/);
103
- if (node.children)
104
- node = node.children;
105
- if (!node.length)
106
- return true;
107
- if (typeof node === "string")
108
- return node.match(/^\s*$/);
109
- if (Array.isArray(node))
110
- return node.every(isWhitespaceOrEmpty);
111
- return;
112
- }
113
- function isExit(node) {
114
- return [
115
- "ReturnStatement",
116
- "ThrowStatement",
117
- "BreakStatement",
118
- "ContinueStatement"
119
- ].includes(node?.type);
120
- }
121
- function isComma(node) {
122
- if (node?.token === ",") {
123
- return node;
124
- } else if (Array.isArray(node) && node.at(-1)?.token === ",") {
125
- return node.at(-1);
221
+ function isExistence(exp) {
222
+ if (exp?.type === "ParenthesizedExpression" && exp.implicit) {
223
+ exp = exp.expression;
224
+ }
225
+ if (exp?.type === "Existence") {
226
+ return exp;
126
227
  }
127
228
  ;
128
229
  return;
129
230
  }
130
- function insertTrimmingSpace(target, c) {
131
- if (!target) {
132
- return target;
231
+ function isRelationalOp(op) {
232
+ return op.relational || getPrecedence(op) === precedenceRelational;
233
+ }
234
+ function expandChainedComparisons([first, binops]) {
235
+ if (!binops.length) {
236
+ return [first];
133
237
  }
134
- if (Array.isArray(target)) {
135
- if (target.length === 0) {
136
- return c;
238
+ const results = [];
239
+ let start = 0;
240
+ const chains = [];
241
+ var i = 0;
242
+ for (let i3 = 0, len2 = binops.length; i3 < len2; i3++) {
243
+ var i = i3;
244
+ var [, op] = binops[i3];
245
+ if (isRelationalOp(op)) {
246
+ chains.push(i);
247
+ } else if (getPrecedence(op) < precedenceRelational) {
248
+ processChains();
249
+ first = results.pop();
137
250
  }
138
- return target.map((e, i) => {
139
- if (i === 0) {
140
- return insertTrimmingSpace(e, c);
141
- }
142
- return e;
143
- });
144
251
  }
145
- if (target.children) {
146
- return {
147
- ...target,
148
- children: insertTrimmingSpace(target.children, c)
149
- };
252
+ processChains();
253
+ return results;
254
+ function processChains() {
255
+ if (chains.length > 0) {
256
+ first = expandExistence(first);
257
+ for (let i4 = 0, len3 = chains.length; i4 < len3; i4++) {
258
+ const k = i4;
259
+ const index = chains[i4];
260
+ if (k > 0) {
261
+ results.push(" ", "&&", " ");
262
+ }
263
+ const binop = binops[index];
264
+ const exp = binop[3] = expandExistence(binop[3]);
265
+ results.push(first);
266
+ const endIndex = chains[k + 1] ?? i + 1;
267
+ results.push(...binops.slice(start, endIndex).flat());
268
+ first = [exp].concat(binops.slice(index + 1, endIndex));
269
+ start = endIndex;
270
+ }
271
+ } else {
272
+ results.push(first);
273
+ results.push(...binops.slice(start, i + 1).flat());
274
+ start = i + 1;
275
+ }
276
+ chains.length = 0;
150
277
  }
151
- if (target.token) {
152
- return {
153
- ...target,
154
- token: target.token.replace(/^ ?/, c)
155
- };
278
+ function expandExistence(exp) {
279
+ let ref;
280
+ if (ref = isExistence(exp)) {
281
+ const existence = ref;
282
+ results.push(existence, " ", "&&", " ");
283
+ return existence.expression;
284
+ } else {
285
+ return exp;
286
+ }
156
287
  }
157
- return target;
158
- }
159
- function getTrimmingSpace(target) {
160
- if (!target)
161
- return;
162
- if (Array.isArray(target))
163
- return getTrimmingSpace(target[0]);
164
- if (target.children)
165
- return getTrimmingSpace(target.children[0]);
166
- if (target.token)
167
- return target.token.match(/^ ?/)[0];
168
- return;
288
+ ;
169
289
  }
170
- function literalValue(literal) {
171
- let { raw } = literal;
172
- switch (raw) {
173
- case "null":
174
- return null;
175
- case "true":
176
- return true;
177
- case "false":
178
- return false;
179
- }
180
- if (raw.startsWith('"') && raw.endsWith('"') || raw.startsWith("'") && raw.endsWith("'")) {
181
- return raw.slice(1, -1);
290
+ var precedenceOrder, precedenceMap, precedenceStep, precedenceRelational, precedenceCustomDefault, asConst;
291
+ var init_op = __esm({
292
+ "source/parser/op.civet"() {
293
+ "use strict";
294
+ init_util();
295
+ precedenceOrder = [
296
+ ["||", "??"],
297
+ ["^^"],
298
+ ["&&"],
299
+ ["|"],
300
+ ["^"],
301
+ ["&"],
302
+ // NOTE: Equality and inequality merged because of relational chaining
303
+ [
304
+ "==",
305
+ "!=",
306
+ "===",
307
+ "!==",
308
+ "<",
309
+ "<=",
310
+ ">",
311
+ ">=",
312
+ "in",
313
+ "instanceof"
314
+ ],
315
+ // NOTE: Extra in-between level for default custom operators
316
+ ["custom"],
317
+ ["<<", ">>", ">>>"],
318
+ ["+", "-"],
319
+ ["*", "/", "%"],
320
+ ["**"]
321
+ ];
322
+ precedenceMap = /* @__PURE__ */ new Map();
323
+ for (let i1 = 0, len = precedenceOrder.length; i1 < len; i1++) {
324
+ const prec = i1;
325
+ const ops = precedenceOrder[i1];
326
+ for (let i2 = 0, len1 = ops.length; i2 < len1; i2++) {
327
+ const op = ops[i2];
328
+ precedenceMap.set(op, prec);
329
+ }
330
+ }
331
+ precedenceStep = 1 / 64;
332
+ precedenceRelational = precedenceMap.get("==");
333
+ precedenceCustomDefault = precedenceMap.get("custom");
334
+ asConst = {
335
+ ts: true,
336
+ children: [" as const"]
337
+ };
182
338
  }
183
- const numeric = literal.children.find(
184
- (child) => child.type === "NumericLiteral"
185
- );
186
- if (numeric) {
187
- raw = raw.replace(/_/g, "");
188
- const { token } = numeric;
189
- if (token.endsWith("n")) {
190
- return BigInt(raw.slice(0, -1));
191
- } else if (token.match(/[\.eE]/)) {
192
- return parseFloat(raw);
193
- } else if (token.startsWith("0")) {
194
- switch (token.charAt(1).toLowerCase()) {
195
- case "x":
196
- return parseInt(raw.replace(/0[xX]/, ""), 16);
197
- case "b":
198
- return parseInt(raw.replace(/0[bB]/, ""), 2);
199
- case "o":
200
- return parseInt(raw.replace(/0[oO]/, ""), 8);
339
+ });
340
+
341
+ // source/parser/unary.civet
342
+ function processUnaryExpression(pre, exp, post) {
343
+ if (!(pre.length || post))
344
+ return exp;
345
+ if (post?.token === "?") {
346
+ post = {
347
+ $loc: post.$loc,
348
+ token: " != null"
349
+ };
350
+ if (pre.length) {
351
+ const lastPre = pre.at(-1);
352
+ if (lastPre.token === "!") {
353
+ post.token = " == null";
354
+ pre = pre.slice(0, -1);
355
+ } else if (lastPre.length === 2 && lastPre[0].token === "!") {
356
+ post.token = " == null";
357
+ pre = pre.slice(0, -1);
201
358
  }
202
359
  }
203
- return parseInt(raw, 10);
360
+ const existence = {
361
+ type: "Existence",
362
+ expression: exp,
363
+ children: [exp, post],
364
+ parent: void 0
365
+ };
366
+ exp = makeLeftHandSideExpression(existence);
367
+ if (pre.length) {
368
+ return {
369
+ type: "UnaryExpression",
370
+ children: [...pre, exp]
371
+ };
372
+ }
373
+ return exp;
204
374
  }
205
- throw new Error("Unrecognized literal " + JSON.stringify(literal));
206
- }
207
- function startsWith(target, value) {
208
- if (!target)
209
- return;
210
- if (Array.isArray(target)) {
211
- let i = 0;
212
- let l = target.length;
213
- while (i < l) {
214
- const t = target[i];
215
- if (t && (t.length || t.token || t.children)) {
216
- break;
375
+ if (exp.type === "Literal") {
376
+ if (pre.length === 1) {
377
+ const { token } = pre[0];
378
+ if (token === "-" || token === "+") {
379
+ const children = [pre[0], ...exp.children];
380
+ if (post)
381
+ exp.children.push(post);
382
+ return {
383
+ type: "Literal",
384
+ children,
385
+ raw: `${token}${exp.raw}`
386
+ };
217
387
  }
218
- i++;
219
388
  }
220
- if (i < l) {
221
- return startsWith(target[i], value);
389
+ }
390
+ let ref;
391
+ while (ref = pre.length) {
392
+ const l = ref;
393
+ const last = pre[l - 1];
394
+ if (last.type === "Await") {
395
+ if (last.op) {
396
+ if (exp.type !== "ParenthesizedExpression") {
397
+ exp = ["(", exp, ")"];
398
+ }
399
+ exp = {
400
+ type: "CallExpression",
401
+ children: [...last.children, "Promise", last.op, exp]
402
+ };
403
+ pre = pre.slice(0, -1);
404
+ } else {
405
+ exp = {
406
+ type: "AwaitExpression",
407
+ children: [...last.children, exp]
408
+ };
409
+ pre = pre.slice(0, -1);
410
+ }
411
+ } else {
412
+ break;
222
413
  }
223
414
  }
224
- if (target.children)
225
- return startsWith(target.children, value);
226
- if (target.token)
227
- return value.test(target.token);
228
- if (typeof target === "string")
229
- return value.test(target);
230
- return;
231
- }
232
- function hasAwait(exp) {
233
- return gatherRecursiveWithinFunction(exp, ({ type }) => type === "Await").length > 0;
234
- }
235
- function hasYield(exp) {
236
- return gatherRecursiveWithinFunction(exp, ({ type }) => type === "Yield").length > 0;
237
- }
238
- function hasImportDeclaration(exp) {
239
- return gatherRecursiveWithinFunction(exp, ({ type }) => type === "ImportDeclaration").length > 0;
415
+ return {
416
+ type: "UnaryExpression",
417
+ children: [...pre, exp, post]
418
+ };
240
419
  }
241
- function deepCopy(node) {
420
+ var init_unary = __esm({
421
+ "source/parser/unary.civet"() {
422
+ "use strict";
423
+ init_util();
424
+ }
425
+ });
426
+
427
+ // source/parser/util.civet
428
+ function addParentPointers(node, parent) {
242
429
  if (node == null)
243
- return node;
430
+ return;
244
431
  if (typeof node !== "object")
245
- return node;
432
+ return;
246
433
  if (Array.isArray(node)) {
247
- return node.map(deepCopy);
434
+ for (const child of node) {
435
+ addParentPointers(child, parent);
436
+ }
437
+ return;
248
438
  }
249
- return Object.fromEntries(
250
- Object.entries(node).map(([key, value]) => {
439
+ node = node;
440
+ node.parent = parent;
441
+ if (node.children) {
442
+ for (const child of node.children) {
443
+ addParentPointers(child, node);
444
+ }
445
+ }
446
+ }
447
+ function clone(node) {
448
+ removeParentPointers(node);
449
+ return deepCopy(node);
450
+ }
451
+ function removeParentPointers(node) {
452
+ if (node == null)
453
+ return;
454
+ if (typeof node !== "object")
455
+ return;
456
+ if (Array.isArray(node)) {
457
+ for (const child of node) {
458
+ removeParentPointers(child);
459
+ }
460
+ return;
461
+ }
462
+ node.parent = null;
463
+ if (node.children) {
464
+ for (const child of node.children) {
465
+ removeParentPointers(child);
466
+ }
467
+ }
468
+ }
469
+ function isEmptyBareBlock(node) {
470
+ if (node?.type !== "BlockStatement")
471
+ return false;
472
+ const { bare, expressions } = node;
473
+ return bare && (expressions.length === 0 || expressions.length === 1 && expressions[0][1]?.type === "EmptyStatement");
474
+ }
475
+ function isFunction(node) {
476
+ const { type } = node;
477
+ return type === "FunctionExpression" || type === "ArrowFunction" || type === "MethodDefinition" || !!node.async;
478
+ }
479
+ function isWhitespaceOrEmpty(node) {
480
+ if (!node)
481
+ return true;
482
+ if (node.type === "Ref")
483
+ return false;
484
+ if (node.token)
485
+ return node.token.match(/^\s*$/);
486
+ if (node.children)
487
+ node = node.children;
488
+ if (!node.length)
489
+ return true;
490
+ if (typeof node === "string")
491
+ return node.match(/^\s*$/);
492
+ if (Array.isArray(node))
493
+ return node.every(isWhitespaceOrEmpty);
494
+ return;
495
+ }
496
+ function isExit(node) {
497
+ return [
498
+ "ReturnStatement",
499
+ "ThrowStatement",
500
+ "BreakStatement",
501
+ "ContinueStatement"
502
+ ].includes(node?.type);
503
+ }
504
+ function isComma(node) {
505
+ if (node?.token === ",") {
506
+ return node;
507
+ } else if (Array.isArray(node) && node.at(-1)?.token === ",") {
508
+ return node.at(-1);
509
+ }
510
+ ;
511
+ return;
512
+ }
513
+ function insertTrimmingSpace(target, c) {
514
+ if (!target) {
515
+ return target;
516
+ }
517
+ if (Array.isArray(target)) {
518
+ if (target.length === 0) {
519
+ return c;
520
+ }
521
+ return target.map((e, i) => {
522
+ if (i === 0) {
523
+ return insertTrimmingSpace(e, c);
524
+ }
525
+ return e;
526
+ });
527
+ }
528
+ if (target.children) {
529
+ return {
530
+ ...target,
531
+ children: insertTrimmingSpace(target.children, c)
532
+ };
533
+ }
534
+ if (target.token) {
535
+ return {
536
+ ...target,
537
+ token: target.token.replace(/^ ?/, c)
538
+ };
539
+ }
540
+ return target;
541
+ }
542
+ function getTrimmingSpace(target) {
543
+ if (!target)
544
+ return;
545
+ if (Array.isArray(target))
546
+ return getTrimmingSpace(target[0]);
547
+ if (target.children)
548
+ return getTrimmingSpace(target.children[0]);
549
+ if (target.token)
550
+ return target.token.match(/^ ?/)[0];
551
+ return;
552
+ }
553
+ function literalValue(literal) {
554
+ let { raw } = literal;
555
+ switch (raw) {
556
+ case "null":
557
+ return null;
558
+ case "true":
559
+ return true;
560
+ case "false":
561
+ return false;
562
+ }
563
+ if (raw.startsWith('"') && raw.endsWith('"') || raw.startsWith("'") && raw.endsWith("'")) {
564
+ return raw.slice(1, -1);
565
+ }
566
+ const numeric = literal.children.find(
567
+ (child) => child.type === "NumericLiteral"
568
+ );
569
+ if (numeric) {
570
+ raw = raw.replace(/_/g, "");
571
+ const { token } = numeric;
572
+ if (token.endsWith("n")) {
573
+ return BigInt(raw.slice(0, -1));
574
+ } else if (token.match(/[\.eE]/)) {
575
+ return parseFloat(raw);
576
+ } else if (token.startsWith("0")) {
577
+ switch (token.charAt(1).toLowerCase()) {
578
+ case "x":
579
+ return parseInt(raw.replace(/0[xX]/, ""), 16);
580
+ case "b":
581
+ return parseInt(raw.replace(/0[bB]/, ""), 2);
582
+ case "o":
583
+ return parseInt(raw.replace(/0[oO]/, ""), 8);
584
+ }
585
+ }
586
+ return parseInt(raw, 10);
587
+ }
588
+ throw new Error("Unrecognized literal " + JSON.stringify(literal));
589
+ }
590
+ function startsWith(target, value) {
591
+ if (!target)
592
+ return;
593
+ if (Array.isArray(target)) {
594
+ let i = 0;
595
+ let l = target.length;
596
+ while (i < l) {
597
+ const t = target[i];
598
+ if (t && (t.length || t.token || t.children)) {
599
+ break;
600
+ }
601
+ i++;
602
+ }
603
+ if (i < l) {
604
+ return startsWith(target[i], value);
605
+ }
606
+ }
607
+ if (target.children)
608
+ return startsWith(target.children, value);
609
+ if (target.token)
610
+ return value.test(target.token);
611
+ if (typeof target === "string")
612
+ return value.test(target);
613
+ return;
614
+ }
615
+ function hasAwait(exp) {
616
+ return gatherRecursiveWithinFunction(exp, ({ type }) => type === "Await").length > 0;
617
+ }
618
+ function hasYield(exp) {
619
+ return gatherRecursiveWithinFunction(exp, ({ type }) => type === "Yield").length > 0;
620
+ }
621
+ function hasImportDeclaration(exp) {
622
+ return gatherRecursiveWithinFunction(exp, ({ type }) => type === "ImportDeclaration").length > 0;
623
+ }
624
+ function deepCopy(node) {
625
+ if (node == null)
626
+ return node;
627
+ if (typeof node !== "object")
628
+ return node;
629
+ if (Array.isArray(node)) {
630
+ return node.map(deepCopy);
631
+ }
632
+ return Object.fromEntries(
633
+ Object.entries(node).map(([key, value]) => {
251
634
  return [key, deepCopy(value)];
252
635
  })
253
636
  );
@@ -276,6 +659,92 @@ var Civet = (() => {
276
659
  parameters
277
660
  };
278
661
  }
662
+ function makeAmpersandFunctionExpression(prefix, rhs) {
663
+ let ref, body, typeSuffix;
664
+ if (!rhs) {
665
+ body = ref = makeRef("$");
666
+ } else {
667
+ ({ ref, typeSuffix } = rhs);
668
+ if (!ref) {
669
+ throw new Error("Could not find ref in ampersand shorthand block");
670
+ }
671
+ body = rhs;
672
+ }
673
+ if (prefix.length) {
674
+ body = {
675
+ type: "UnaryExpression",
676
+ children: [processUnaryExpression(prefix, body, void 0)]
677
+ };
678
+ }
679
+ const parameters = {
680
+ type: "Parameters",
681
+ children: typeSuffix ? ["(", ref, typeSuffix, ")"] : [ref],
682
+ names: []
683
+ };
684
+ const expressions = [body];
685
+ const block = {
686
+ bare: true,
687
+ expressions,
688
+ children: [expressions]
689
+ };
690
+ const children = [parameters, " => ", block];
691
+ const async = hasAwait(body);
692
+ if (async) {
693
+ children.unshift("async ");
694
+ }
695
+ return {
696
+ type: "ArrowFunction",
697
+ signature: {
698
+ modifier: {
699
+ async
700
+ }
701
+ },
702
+ children,
703
+ ref,
704
+ body,
705
+ ampersandBlock: true,
706
+ block,
707
+ parameters
708
+ };
709
+ }
710
+ function makeAmpersandBlockRHSBody(typeSuffix, callExpRest, unaryPostfix, assign, binopRHS) {
711
+ const ref = makeRef("$");
712
+ let exp = {
713
+ type: "AmpersandRef",
714
+ children: [ref],
715
+ names: [],
716
+ ref
717
+ };
718
+ if (callExpRest) {
719
+ exp.children.push(...callExpRest[1]);
720
+ }
721
+ if (unaryPostfix) {
722
+ exp = processUnaryExpression([], exp, unaryPostfix);
723
+ }
724
+ if (assign) {
725
+ const [op1, more, rhs] = assign;
726
+ const lhs = [
727
+ [void 0, exp, ...op1],
728
+ ...more.map((x) => [x[0], x[1], ...x[2]])
729
+ ];
730
+ exp = {
731
+ type: "AssignmentExpression",
732
+ children: [lhs, rhs],
733
+ names: null,
734
+ lhs,
735
+ assigned: exp,
736
+ exp: rhs
737
+ };
738
+ }
739
+ if (binopRHS) {
740
+ exp = {
741
+ children: processBinaryOpExpression([exp, binopRHS[1]])
742
+ };
743
+ }
744
+ exp.ref = ref;
745
+ exp.typeSuffix = typeSuffix;
746
+ return exp;
747
+ }
279
748
  function makeLeftHandSideExpression(expression) {
280
749
  if (expression.parenthesized) {
281
750
  return expression;
@@ -453,7 +922,9 @@ var Civet = (() => {
453
922
  const children = expression ? ["return ", expression] : ["return"];
454
923
  return makeNode({
455
924
  type: "ReturnStatement",
456
- children
925
+ children,
926
+ expression,
927
+ parent: expression?.parent
457
928
  });
458
929
  }
459
930
  var assert, typeNeedsNoParens;
@@ -461,6 +932,8 @@ var Civet = (() => {
461
932
  "source/parser/util.civet"() {
462
933
  "use strict";
463
934
  init_traversal();
935
+ init_op();
936
+ init_unary();
464
937
  assert = {
465
938
  equal(a, b, msg) {
466
939
  if (a !== b) {
@@ -694,503 +1167,200 @@ var Civet = (() => {
694
1167
  const index = expressions.findIndex((exp) => {
695
1168
  return exp === node || Array.isArray(exp) && exp[1] === node;
696
1169
  });
697
- if (index < 0) {
698
- throw new Error("Couldn't find expression in block for hoistable declaration.");
699
- }
700
- const statement = [expressions[index][0], dec, ";"];
701
- expressions[index][0] = "";
702
- expressions.splice(index, 0, statement);
703
- addParentPointers(dec, block);
704
- }
705
- function processBlocks(statements) {
706
- insertSemicolon(statements);
707
- gatherRecursive(statements, ($) => $.type === "BlockStatement").forEach(function({ expressions }) {
708
- return processBlocks(expressions);
709
- });
710
- }
711
- function insertSemicolon(statements) {
712
- const l = statements.length;
713
- for (let i1 = 0, len = statements.length; i1 < len; i1++) {
714
- const i = i1;
715
- const s = statements[i1];
716
- if (i < l - 1) {
717
- if (needsPrecedingSemicolon(statements[i + 1])) {
718
- const delim = s[2];
719
- if (!delim) {
720
- s[2] = ";";
721
- } else if (typeof delim === "string" && !delim.match(/;/)) {
722
- s[2] = `;${delim}`;
723
- }
724
- }
725
- }
726
- }
727
- }
728
- function needsPrecedingSemicolon(exp) {
729
- let following;
730
- if (Array.isArray(exp)) {
731
- [, following] = exp;
732
- } else {
733
- following = exp;
734
- }
735
- if (!following) {
736
- return false;
737
- }
738
- if (Array.isArray(following)) {
739
- return needsPrecedingSemicolon(following[0]);
740
- }
741
- switch (following.type) {
742
- case "ParenthesizedExpression":
743
- case "ArrayExpression":
744
- case "ArrowFunction":
745
- case "TemplateLiteral":
746
- case "RegularExpressionLiteral":
747
- case "RangeExpression": {
748
- return true;
749
- }
750
- case "AssignmentExpression": {
751
- return startsWith(following, /^(\[|\()/);
752
- }
753
- case "Literal": {
754
- return following.raw?.startsWith("-") || following.raw?.startsWith("+");
755
- }
756
- case "PipelineExpression":
757
- case "UnwrappedExpression": {
758
- return needsPrecedingSemicolon(following.children[1]);
759
- }
760
- default: {
761
- if (following.children) {
762
- return needsPrecedingSemicolon(following.children[0]);
763
- }
764
- ;
765
- return;
766
- }
767
- }
768
- }
769
- var init_block = __esm({
770
- "source/parser/block.civet"() {
771
- "use strict";
772
- init_util();
773
- init_traversal();
774
- }
775
- });
776
-
777
- // source/parser/binding.civet
778
- function adjustAtBindings(statements, asThis = false) {
779
- gatherRecursiveAll(statements, (n) => n.type === "AtBindingProperty").forEach((binding) => {
780
- const { ref } = binding;
781
- if (asThis) {
782
- const atBinding = binding.binding;
783
- atBinding.children.pop();
784
- atBinding.type = void 0;
785
- binding.children.unshift(ref.id, ": this.", ref.base);
786
- binding.type = "Property";
787
- binding.ref = void 0;
788
- return;
789
- }
790
- if (ref.names[0] !== ref.base) {
791
- return binding.children.unshift(ref.base, ": ");
792
- }
793
- ;
794
- return;
795
- });
796
- }
797
- function adjustBindingElements(elements) {
798
- const names = elements.flatMap((p) => p.names || []), { length } = elements;
799
- let blockPrefix, restIndex = -1, restCount = 0;
800
- elements.forEach(({ type }, i) => {
801
- if (type === "BindingRestElement") {
802
- if (restIndex < 0)
803
- restIndex = i;
804
- return restCount++;
805
- }
806
- ;
807
- return;
808
- });
809
- if (restCount === 0) {
810
- return {
811
- children: elements,
812
- names,
813
- blockPrefix,
814
- length
815
- };
816
- } else if (restCount === 1) {
817
- const rest = elements[restIndex];
818
- const after = elements.slice(restIndex + 1);
819
- const restIdentifier = rest.binding.ref || rest.binding;
820
- names.push(...rest.names || []);
821
- let l = after.length;
822
- if (l) {
823
- if (arrayElementHasTrailingComma(after[l - 1]))
824
- l++;
825
- blockPrefix = {
826
- type: "PostRestBindingElements",
827
- children: ["[", insertTrimmingSpace(after, ""), "] = ", restIdentifier, ".splice(-", l.toString(), ")"],
828
- names: after.flatMap((p) => p.names)
829
- };
830
- }
831
- return {
832
- names,
833
- children: [...elements.slice(0, restIndex), {
834
- ...rest,
835
- children: rest.children.slice(0, -1)
836
- // remove trailing comma
837
- }],
838
- blockPrefix,
839
- length
840
- };
841
- }
842
- const err = {
843
- type: "Error",
844
- children: ["Multiple rest elements in array pattern"]
845
- };
846
- return {
847
- names,
848
- children: [...elements, err],
849
- blockPrefix,
850
- length
851
- };
852
- }
853
- function gatherBindingCode(statements, opts) {
854
- const thisAssignments = [];
855
- const splices = [];
856
- function insertRestSplices(s, p, thisAssignments2) {
857
- gatherRecursiveAll(s, (n) => n.blockPrefix || opts?.injectParamProps && n.accessModifier || n.type === "AtBinding").forEach((n) => {
858
- if (n.type === "AtBinding") {
859
- const { ref } = n;
860
- const { id } = ref;
861
- thisAssignments2.push([`this.${id} = `, ref]);
862
- return;
863
- }
864
- if (opts?.injectParamProps && n.type === "Parameter" && n.accessModifier) {
865
- n.names.forEach((id) => ({
866
- push: thisAssignments2.push({
867
- type: "AssignmentExpression",
868
- children: [`this.${id} = `, id],
869
- js: true
870
- })
871
- }));
872
- return;
873
- }
874
- const { blockPrefix } = n;
875
- p.push(blockPrefix);
876
- return insertRestSplices(blockPrefix, p, thisAssignments2);
877
- });
878
- }
879
- insertRestSplices(statements, splices, thisAssignments);
880
- return [splices, thisAssignments];
881
- }
882
- function arrayElementHasTrailingComma(elementNode) {
883
- const lastChild = elementNode.children.at(-1);
884
- return lastChild && lastChild[lastChild.length - 1]?.token === ",";
885
- }
886
- var init_binding = __esm({
887
- "source/parser/binding.civet"() {
888
- "use strict";
889
- init_traversal();
890
- init_util();
891
- }
892
- });
893
-
894
- // source/parser/op.civet
895
- function getPrecedence(op) {
896
- if (typeof op === "string") {
897
- return precedenceMap.get(op) ?? (() => {
898
- throw new Error(`Unknown operator: ${op}`);
899
- })();
900
- } else if (typeof op.prec === "number") {
901
- return op.prec;
902
- } else {
903
- return precedenceMap.get(op.prec ?? op.token) ?? (op.relational ? precedenceRelational : precedenceCustomDefault);
904
- }
905
- }
906
- function processBinaryOpExpression($0) {
907
- return recurse(expandChainedComparisons($0));
908
- function recurse(expandedOps) {
909
- let i = 2;
910
- while (i < expandedOps.length) {
911
- let op = expandedOps[i];
912
- if (op.special) {
913
- let advanceLeft2 = function(allowEqual) {
914
- while (start >= 4) {
915
- const prevPrec = getPrecedence(expandedOps[start - 2]);
916
- if (!(prevPrec > prec || allowEqual && prevPrec === prec)) {
917
- return prevPrec === prec;
918
- }
919
- start -= 4;
920
- }
921
- return false;
922
- }, advanceRight2 = function(allowEqual) {
923
- while (end + 4 < expandedOps.length) {
924
- const nextPrec = getPrecedence(expandedOps[end + 2]);
925
- if (!(nextPrec > prec || allowEqual && nextPrec === prec)) {
926
- return nextPrec === prec;
927
- }
928
- end += 4;
929
- }
930
- return false;
931
- };
932
- var advanceLeft = advanceLeft2, advanceRight = advanceRight2;
933
- let start = i - 2, end = i + 2;
934
- const prec = getPrecedence(op);
935
- let error;
936
- switch (op.assoc) {
937
- case "left":
938
- case void 0: {
939
- advanceLeft2(true);
940
- advanceRight2(false);
941
- break;
942
- }
943
- case "right": {
944
- advanceLeft2(false);
945
- advanceRight2(true);
946
- break;
947
- }
948
- case "non": {
949
- if (advanceLeft2(false) || advanceRight2(false)) {
950
- error = {
951
- type: "Error",
952
- message: `non-associative operator ${op.token} used at same precedence level without parenthesization`
953
- };
954
- }
955
- ;
956
- break;
957
- }
958
- case "arguments": {
959
- if (advanceLeft2(false)) {
960
- error = {
961
- type: "Error",
962
- message: `arguments operator ${op.token} used at same precedence level as ${expandedOps[start - 2].token} to the left`
963
- };
964
- }
965
- advanceRight2(true);
966
- break;
967
- }
968
- default: {
969
- throw new Error(`Unsupported associativity: ${op.assoc}`);
970
- }
971
- }
972
- let a = start === i - 2 ? expandedOps[start] : expandedOps.slice(start, i - 1);
973
- let wsOp = expandedOps[i - 1];
974
- let wsB = expandedOps[i + 1];
975
- let b = end === i + 2 ? expandedOps[i + 2] : expandedOps.slice(i + 2, end + 1);
976
- if (op.assoc === "arguments") {
977
- let i2 = 2;
978
- while (i2 < b.length) {
979
- if (prec === getPrecedence(b[i2])) {
980
- if (!(b[i2].token === op.token)) {
981
- error ??= {
982
- type: "Error",
983
- message: `arguments operator ${op.token} used at same precedence level as ${b[i2].token} to the right`
984
- };
985
- }
986
- b[i2] = ",";
987
- }
988
- i2 += 4;
989
- }
990
- } else {
991
- b = recurse(b);
992
- }
993
- if (op.token === "instanceof" && b.type === "Literal" && b.children?.[0]?.type === "StringLiteral") {
994
- a = ["typeof ", makeLeftHandSideExpression(a)];
995
- if (op.negated) {
996
- op = { ...op, token: "!==", negated: false };
997
- } else {
998
- op = { ...op, token: "===" };
999
- }
1000
- }
1001
- if (op.asConst) {
1002
- a = makeAsConst(a);
1003
- b = makeAsConst(b);
1004
- }
1005
- let children;
1006
- if (op.call) {
1007
- wsOp = insertTrimmingSpace(wsOp, "");
1008
- if (op.reversed) {
1009
- wsB = insertTrimmingSpace(wsB, "");
1010
- children = [wsOp, op.call, "(", wsB, b, ", ", a, ")", op.suffix];
1011
- } else {
1012
- children = [wsOp, op.call, "(", a, ",", wsB, b, ")", op.suffix];
1013
- }
1014
- } else if (op.method) {
1015
- wsOp = insertTrimmingSpace(wsOp, "");
1016
- wsB = insertTrimmingSpace(wsB, "");
1017
- if (op.reversed) {
1018
- if (end !== i + 2)
1019
- b = makeLeftHandSideExpression(b);
1020
- b = dotNumericLiteral(b);
1021
- children = [wsB, b, wsOp, ".", op.method, "(", a, ")"];
1022
- } else {
1023
- if (start !== i - 2 || a.type === "NumericLiteral") {
1024
- a = makeLeftHandSideExpression(a);
1025
- }
1026
- a = dotNumericLiteral(a);
1027
- children = [a, wsOp, ".", op.method, "(", wsB, b, ")"];
1028
- }
1029
- } else if (op.token) {
1030
- children = [a, wsOp, op, wsB, b];
1031
- if (op.negated)
1032
- children = ["(", ...children, ")"];
1033
- } else {
1034
- throw new Error("Unknown operator: " + JSON.stringify(op));
1035
- }
1036
- if (op.negated)
1037
- children.unshift("!");
1038
- if (error != null) {
1039
- children.push(error);
1170
+ if (index < 0) {
1171
+ throw new Error("Couldn't find expression in block for hoistable declaration.");
1172
+ }
1173
+ const statement = [expressions[index][0], dec, ";"];
1174
+ expressions[index][0] = "";
1175
+ expressions.splice(index, 0, statement);
1176
+ addParentPointers(dec, block);
1177
+ }
1178
+ function processBlocks(statements) {
1179
+ insertSemicolon(statements);
1180
+ gatherRecursive(statements, ($) => $.type === "BlockStatement").forEach(function({ expressions }) {
1181
+ return processBlocks(expressions);
1182
+ });
1183
+ }
1184
+ function insertSemicolon(statements) {
1185
+ const l = statements.length;
1186
+ for (let i1 = 0, len = statements.length; i1 < len; i1++) {
1187
+ const i = i1;
1188
+ const s = statements[i1];
1189
+ if (i < l - 1) {
1190
+ if (needsPrecedingSemicolon(statements[i + 1])) {
1191
+ const delim = s[2];
1192
+ if (!delim) {
1193
+ s[2] = ";";
1194
+ } else if (typeof delim === "string" && !delim.match(/;/)) {
1195
+ s[2] = `;${delim}`;
1040
1196
  }
1041
- expandedOps.splice(start, end - start + 1, {
1042
- children
1043
- });
1044
- i = start + 2;
1045
- } else {
1046
- i += 4;
1047
1197
  }
1048
1198
  }
1049
- return expandedOps;
1050
- }
1051
- ;
1052
- return recurse;
1053
- }
1054
- function dotNumericLiteral(literal) {
1055
- if (literal?.type === "Literal" && /^[+-]?(?:0|[1-9](?:_[0-9]|[0-9])*)$/.test(literal.raw)) {
1056
- literal.children.push(".");
1057
- literal.raw += ".";
1058
1199
  }
1059
- return literal;
1060
1200
  }
1061
- function makeAsConst(node) {
1062
- if (Array.isArray(node) && node.length === 1) {
1063
- node = node[0];
1064
- }
1065
- if (node.type === "Literal" && node.raw !== "null" || node.type === "ArrayExpression" || node.type === "ObjectExpression") {
1066
- return { ...node, children: [...node.children, asConst] };
1201
+ function needsPrecedingSemicolon(exp) {
1202
+ let following;
1203
+ if (Array.isArray(exp)) {
1204
+ [, following] = exp;
1067
1205
  } else {
1068
- return node;
1206
+ following = exp;
1069
1207
  }
1070
- }
1071
- function isExistence(exp) {
1072
- if (exp.type === "ParenthesizedExpression" && exp.implicit) {
1073
- exp = exp.expression;
1208
+ if (!following) {
1209
+ return false;
1074
1210
  }
1075
- if (exp.type === "Existence") {
1076
- return exp;
1211
+ if (Array.isArray(following)) {
1212
+ return needsPrecedingSemicolon(following[0]);
1077
1213
  }
1078
- ;
1079
- return;
1080
- }
1081
- function isRelationalOp(op) {
1082
- return op.relational || getPrecedence(op) === precedenceRelational;
1083
- }
1084
- function expandChainedComparisons([first, binops]) {
1085
- const results = [];
1086
- let i = 0;
1087
- const l = binops.length;
1088
- let start = 0;
1089
- let chains = [];
1090
- let op;
1091
- while (i < l) {
1092
- [, op] = binops[i];
1093
- if (isRelationalOp(op)) {
1094
- chains.push(i);
1095
- } else if (getPrecedence(op) < precedenceRelational) {
1096
- processChains(op);
1097
- first = void 0;
1214
+ switch (following.type) {
1215
+ case "ParenthesizedExpression":
1216
+ case "ArrayExpression":
1217
+ case "ArrowFunction":
1218
+ case "TemplateLiteral":
1219
+ case "RegularExpressionLiteral":
1220
+ case "RangeExpression": {
1221
+ return true;
1098
1222
  }
1099
- i++;
1100
- }
1101
- if (op != null) {
1102
- processChains(op);
1103
- }
1104
- return results;
1105
- function processChains(op2) {
1106
- if (first && isRelationalOp(op2)) {
1107
- first = expandExistence(first);
1223
+ case "AssignmentExpression": {
1224
+ return startsWith(following, /^(\[|\()/);
1108
1225
  }
1109
- if (chains.length > 1) {
1110
- chains.forEach((index, k) => {
1111
- if (k > 0) {
1112
- results.push(" ", "&&", " ");
1113
- }
1114
- const binop = binops[index];
1115
- let [, , , exp] = binop;
1116
- exp = binop[3] = expandExistence(exp);
1117
- let endIndex;
1118
- if (k < chains.length - 1) {
1119
- endIndex = chains[k + 1];
1120
- } else {
1121
- endIndex = i + 1;
1122
- }
1123
- results.push(first, ...binops.slice(start, endIndex).flat());
1124
- first = [exp].concat(binops.slice(index + 1, endIndex));
1125
- return start = endIndex;
1126
- });
1127
- } else {
1128
- if (first) {
1129
- results.push(first);
1130
- }
1131
- results.push(...binops.slice(start, i + 1).flat());
1132
- start = i + 1;
1226
+ case "Literal": {
1227
+ return following.raw?.startsWith("-") || following.raw?.startsWith("+");
1133
1228
  }
1134
- chains.length = 0;
1135
- }
1136
- function expandExistence(exp) {
1137
- const existence = isExistence(exp);
1138
- if (existence) {
1139
- results.push(existence, " ", "&&", " ");
1140
- return existence.expression;
1229
+ case "PipelineExpression":
1230
+ case "UnwrappedExpression": {
1231
+ return needsPrecedingSemicolon(following.children[1]);
1232
+ }
1233
+ default: {
1234
+ if (following.children) {
1235
+ return needsPrecedingSemicolon(following.children[0]);
1236
+ }
1237
+ ;
1238
+ return;
1141
1239
  }
1142
- return exp;
1143
1240
  }
1144
- ;
1145
1241
  }
1146
- var precedenceOrder, precedenceMap, precedenceStep, precedenceRelational, precedenceCustomDefault, asConst;
1147
- var init_op = __esm({
1148
- "source/parser/op.civet"() {
1242
+ var init_block = __esm({
1243
+ "source/parser/block.civet"() {
1149
1244
  "use strict";
1150
1245
  init_util();
1151
- precedenceOrder = [
1152
- ["||", "??"],
1153
- ["^^"],
1154
- ["&&"],
1155
- ["|"],
1156
- ["^"],
1157
- ["&"],
1158
- // NOTE: Equality and inequality merged because of relational chaining
1159
- [
1160
- "==",
1161
- "!=",
1162
- "===",
1163
- "!==",
1164
- "<",
1165
- "<=",
1166
- ">",
1167
- ">=",
1168
- "in",
1169
- "instanceof"
1170
- ],
1171
- // NOTE: Extra in-between level for default custom operators
1172
- ["custom"],
1173
- ["<<", ">>", ">>>"],
1174
- ["+", "-"],
1175
- ["*", "/", "%"],
1176
- ["**"]
1177
- ];
1178
- precedenceMap = /* @__PURE__ */ new Map();
1179
- for (let i1 = 0, len = precedenceOrder.length; i1 < len; i1++) {
1180
- const prec = i1;
1181
- const ops = precedenceOrder[i1];
1182
- for (let i2 = 0, len1 = ops.length; i2 < len1; i2++) {
1183
- const op = ops[i2];
1184
- precedenceMap.set(op, prec);
1246
+ init_traversal();
1247
+ }
1248
+ });
1249
+
1250
+ // source/parser/binding.civet
1251
+ function adjustAtBindings(statements, asThis = false) {
1252
+ gatherRecursiveAll(statements, (n) => n.type === "AtBindingProperty").forEach((binding) => {
1253
+ const { ref } = binding;
1254
+ if (asThis) {
1255
+ const atBinding = binding.binding;
1256
+ atBinding.children.pop();
1257
+ atBinding.type = void 0;
1258
+ binding.children.unshift(ref.id, ": this.", ref.base);
1259
+ binding.type = "Property";
1260
+ binding.ref = void 0;
1261
+ return;
1262
+ }
1263
+ if (ref.names[0] !== ref.base) {
1264
+ return binding.children.unshift(ref.base, ": ");
1265
+ }
1266
+ ;
1267
+ return;
1268
+ });
1269
+ }
1270
+ function adjustBindingElements(elements) {
1271
+ const names = elements.flatMap((p) => p.names || []), { length } = elements;
1272
+ let blockPrefix, restIndex = -1, restCount = 0;
1273
+ elements.forEach(({ type }, i) => {
1274
+ if (type === "BindingRestElement") {
1275
+ if (restIndex < 0)
1276
+ restIndex = i;
1277
+ return restCount++;
1278
+ }
1279
+ ;
1280
+ return;
1281
+ });
1282
+ if (restCount === 0) {
1283
+ return {
1284
+ children: elements,
1285
+ names,
1286
+ blockPrefix,
1287
+ length
1288
+ };
1289
+ } else if (restCount === 1) {
1290
+ const rest = elements[restIndex];
1291
+ const after = elements.slice(restIndex + 1);
1292
+ const restIdentifier = rest.binding.ref || rest.binding;
1293
+ names.push(...rest.names || []);
1294
+ let l = after.length;
1295
+ if (l) {
1296
+ if (arrayElementHasTrailingComma(after[l - 1]))
1297
+ l++;
1298
+ blockPrefix = {
1299
+ type: "PostRestBindingElements",
1300
+ children: ["[", insertTrimmingSpace(after, ""), "] = ", restIdentifier, ".splice(-", l.toString(), ")"],
1301
+ names: after.flatMap((p) => p.names)
1302
+ };
1303
+ }
1304
+ return {
1305
+ names,
1306
+ children: [...elements.slice(0, restIndex), {
1307
+ ...rest,
1308
+ children: rest.children.slice(0, -1)
1309
+ // remove trailing comma
1310
+ }],
1311
+ blockPrefix,
1312
+ length
1313
+ };
1314
+ }
1315
+ const err = {
1316
+ type: "Error",
1317
+ children: ["Multiple rest elements in array pattern"]
1318
+ };
1319
+ return {
1320
+ names,
1321
+ children: [...elements, err],
1322
+ blockPrefix,
1323
+ length
1324
+ };
1325
+ }
1326
+ function gatherBindingCode(statements, opts) {
1327
+ const thisAssignments = [];
1328
+ const splices = [];
1329
+ function insertRestSplices(s, p, thisAssignments2) {
1330
+ gatherRecursiveAll(s, (n) => n.blockPrefix || opts?.injectParamProps && n.accessModifier || n.type === "AtBinding").forEach((n) => {
1331
+ if (n.type === "AtBinding") {
1332
+ const { ref } = n;
1333
+ const { id } = ref;
1334
+ thisAssignments2.push([`this.${id} = `, ref]);
1335
+ return;
1336
+ }
1337
+ if (opts?.injectParamProps && n.type === "Parameter" && n.accessModifier) {
1338
+ n.names.forEach((id) => ({
1339
+ push: thisAssignments2.push({
1340
+ type: "AssignmentExpression",
1341
+ children: [`this.${id} = `, id],
1342
+ js: true
1343
+ })
1344
+ }));
1345
+ return;
1185
1346
  }
1186
- }
1187
- precedenceStep = 1 / 64;
1188
- precedenceRelational = precedenceMap.get("==");
1189
- precedenceCustomDefault = precedenceMap.get("custom");
1190
- asConst = {
1191
- ts: true,
1192
- children: [" as const"]
1193
- };
1347
+ const { blockPrefix } = n;
1348
+ p.push(blockPrefix);
1349
+ return insertRestSplices(blockPrefix, p, thisAssignments2);
1350
+ });
1351
+ }
1352
+ insertRestSplices(statements, splices, thisAssignments);
1353
+ return [splices, thisAssignments];
1354
+ }
1355
+ function arrayElementHasTrailingComma(elementNode) {
1356
+ const lastChild = elementNode.children.at(-1);
1357
+ return lastChild && lastChild[lastChild.length - 1]?.token === ",";
1358
+ }
1359
+ var init_binding = __esm({
1360
+ "source/parser/binding.civet"() {
1361
+ "use strict";
1362
+ init_traversal();
1363
+ init_util();
1194
1364
  }
1195
1365
  });
1196
1366
 
@@ -1900,7 +2070,7 @@ var Civet = (() => {
1900
2070
  return;
1901
2071
  case "IfStatement":
1902
2072
  insertReturn(exp.then);
1903
- if (exp.else)
2073
+ if (exp.else && exp.else.length !== 0)
1904
2074
  insertReturn(exp.else[2]);
1905
2075
  else
1906
2076
  exp.children.push(["", {
@@ -2193,7 +2363,8 @@ var Civet = (() => {
2193
2363
  }
2194
2364
  const { decl, bindings } = condition.declaration;
2195
2365
  const binding = bindings[0];
2196
- const { pattern, suffix, initializer, splices, thisAssignments } = binding;
2366
+ let { pattern, suffix, initializer, splices, thisAssignments } = binding;
2367
+ const nullCheck = suffix?.optional && !suffix.t && !suffix.nonnull;
2197
2368
  let ref = prependStatementExpressionBlock(initializer, parent);
2198
2369
  if (ref) {
2199
2370
  Object.assign(condition, {
@@ -2207,11 +2378,16 @@ var Civet = (() => {
2207
2378
  ref = makeRef();
2208
2379
  const grandparent = condition.parent?.parent;
2209
2380
  const children = (
2210
- // Check that the declaration is a plain assignment (no pattern-matching) and the immediate grandchild of an `if` or `while`
2381
+ // Wrap declaration that is a plain assignment (no pattern-matching) and the immediate grandchild of an `if` or `while`
2382
+ // to satisfy eslint's no-cond-assign rule
2211
2383
  // More complex conditions (triggered by pattern matching or `until`/`unless`) don't need double parens
2212
- // @ts-ignore Just because pattern might not have a type at runtime doesn't mean it's unsafe
2213
- pattern.type === "Identifier" && (grandparent?.type === "IfStatement" || grandparent?.type === "WhileStatement") ? ["(", ref, initializer, ")"] : [ref, initializer]
2384
+ pattern.type === "Identifier" && (grandparent?.type === "IfStatement" || grandparent?.type === "IterationStatement") && !nullCheck ? ["(", ref, initializer, ")"] : [ref, initializer]
2214
2385
  );
2386
+ if (nullCheck) {
2387
+ children.unshift("(");
2388
+ children.push(") != null");
2389
+ suffix = void 0;
2390
+ }
2215
2391
  Object.assign(condition, {
2216
2392
  type: "AssignmentExpression",
2217
2393
  children,
@@ -2450,91 +2626,6 @@ var Civet = (() => {
2450
2626
  }
2451
2627
  });
2452
2628
 
2453
- // source/parser/unary.civet
2454
- function processUnaryExpression(pre, exp, post) {
2455
- if (!(pre.length || post))
2456
- return exp;
2457
- if (post?.token === "?") {
2458
- post = {
2459
- $loc: post.$loc,
2460
- token: " != null"
2461
- };
2462
- if (pre.length) {
2463
- const lastPre = pre[pre.length - 1];
2464
- if (lastPre.token === "!") {
2465
- post.token = " == null";
2466
- pre = pre.slice(0, -1);
2467
- } else if (lastPre.length === 2 && lastPre[0].token === "!") {
2468
- post.token = " == null";
2469
- pre = pre.slice(0, -1);
2470
- }
2471
- }
2472
- const existence = {
2473
- type: "Existence",
2474
- expression: exp,
2475
- children: [exp, post]
2476
- };
2477
- exp = makeLeftHandSideExpression(existence);
2478
- if (pre.length) {
2479
- return {
2480
- type: "UnaryExpression",
2481
- children: [...pre, exp]
2482
- };
2483
- }
2484
- return exp;
2485
- }
2486
- if (exp.type === "Literal") {
2487
- if (pre.length === 1) {
2488
- const { token } = pre[0];
2489
- if (token === "-" || token === "+") {
2490
- const children = [pre[0], ...exp.children];
2491
- if (post)
2492
- exp.children.push(post);
2493
- return {
2494
- type: "Literal",
2495
- children,
2496
- raw: `${token}${exp.raw}`
2497
- };
2498
- }
2499
- }
2500
- }
2501
- let ref;
2502
- while (ref = pre.length) {
2503
- const l = ref;
2504
- const last = pre[l - 1];
2505
- if (last.type === "Await") {
2506
- if (last.op) {
2507
- if (exp.type !== "ParenthesizedExpression") {
2508
- exp = ["(", exp, ")"];
2509
- }
2510
- exp = {
2511
- type: "CallExpression",
2512
- children: [...last.children, "Promise", last.op, exp]
2513
- };
2514
- pre = pre.slice(0, -1);
2515
- } else {
2516
- exp = {
2517
- type: "AwaitExpression",
2518
- children: [...last.children, exp]
2519
- };
2520
- pre = pre.slice(0, -1);
2521
- }
2522
- } else {
2523
- break;
2524
- }
2525
- }
2526
- return {
2527
- type: "UnaryExpression",
2528
- children: [...pre, exp, post]
2529
- };
2530
- }
2531
- var init_unary = __esm({
2532
- "source/parser/unary.civet"() {
2533
- "use strict";
2534
- init_util();
2535
- }
2536
- });
2537
-
2538
2629
  // source/parser/pipe.civet
2539
2630
  function constructInvocation(fn, arg) {
2540
2631
  const fnArr = [fn.leadingComment, fn.expr, fn.trailingComment];
@@ -2751,10 +2842,13 @@ var Civet = (() => {
2751
2842
  function forRange(open, forDeclaration, range, stepExp, close) {
2752
2843
  const { start, end, inclusive } = range;
2753
2844
  const counterRef = makeRef("i");
2845
+ const infinite = end.type === "Identifier" && end.name === "Infinity";
2754
2846
  let stepRef;
2755
2847
  if (stepExp) {
2756
2848
  stepExp = insertTrimmingSpace(stepExp, "");
2757
2849
  stepRef = maybeRef(stepExp, "step");
2850
+ } else if (infinite) {
2851
+ stepExp = stepRef = "1";
2758
2852
  }
2759
2853
  let startRef = maybeRef(start, "start");
2760
2854
  let endRef = maybeRef(end, "end");
@@ -2784,7 +2878,7 @@ var Civet = (() => {
2784
2878
  } else {
2785
2879
  const value = "StringLiteral" === start.subtype ? ["String.fromCharCode(", counterRef, ")"] : counterRef;
2786
2880
  blockPrefix = [
2787
- ["", forDeclaration, " = ", value, ";"]
2881
+ ["", [forDeclaration, " = ", value], ";"]
2788
2882
  ];
2789
2883
  }
2790
2884
  } else if (forDeclaration) {
@@ -2796,8 +2890,8 @@ var Civet = (() => {
2796
2890
  names: forDeclaration?.names
2797
2891
  };
2798
2892
  const counterPart = inclusive ? [counterRef, " <= ", endRef, " : ", counterRef, " >= ", endRef] : [counterRef, " < ", endRef, " : ", counterRef, " > ", endRef];
2799
- const condition = stepRef ? [stepRef, " !== 0 && (", stepRef, " > 0 ? ", ...counterPart, ")"] : ascRef ? [ascRef, " ? ", ...counterPart] : asc ? counterPart.slice(0, 3) : counterPart.slice(4);
2800
- const increment = stepRef ? [...varAssign, counterRef, " += ", stepRef] : ascRef ? [...varAssign, ascRef, " ? ++", counterRef, " : --", counterRef] : [...varAssign, asc ? "++" : "--", counterRef];
2893
+ const condition = infinite ? [] : stepRef ? [stepRef, " !== 0 && (", stepRef, " > 0 ? ", ...counterPart, ")"] : ascRef ? [ascRef, " ? ", ...counterPart] : asc ? counterPart.slice(0, 3) : counterPart.slice(4);
2894
+ const increment = infinite ? [...varAssign, "++", counterRef] : stepRef ? [...varAssign, counterRef, " += ", stepRef] : ascRef ? [...varAssign, ascRef, " ? ++", counterRef, " : --", counterRef] : [...varAssign, asc ? "++" : "--", counterRef];
2801
2895
  return {
2802
2896
  declaration,
2803
2897
  children: [open, declaration, "; ", ...condition, "; ", ...increment, close],
@@ -3288,7 +3382,9 @@ var Civet = (() => {
3288
3382
  isWhitespaceOrEmpty: () => isWhitespaceOrEmpty,
3289
3383
  lastAccessInCallExpression: () => lastAccessInCallExpression,
3290
3384
  literalValue: () => literalValue,
3385
+ makeAmpersandBlockRHSBody: () => makeAmpersandBlockRHSBody,
3291
3386
  makeAmpersandFunction: () => makeAmpersandFunction,
3387
+ makeAmpersandFunctionExpression: () => makeAmpersandFunctionExpression,
3292
3388
  makeEmptyBlock: () => makeEmptyBlock,
3293
3389
  makeExpressionStatement: () => makeExpressionStatement,
3294
3390
  makeGetterMethod: () => makeGetterMethod,
@@ -4251,6 +4347,7 @@ var Civet = (() => {
4251
4347
  assert.equal(m.JSXTagStack.length, 1, "JSXTagStack");
4252
4348
  addParentPointers(root);
4253
4349
  const { expressions: statements } = root;
4350
+ processPartialPlaceholders(statements);
4254
4351
  processNegativeIndexAccess(statements);
4255
4352
  processTypes(statements);
4256
4353
  processDeclarationConditions(statements, m.getRef);
@@ -4295,6 +4392,43 @@ var Civet = (() => {
4295
4392
  });
4296
4393
  }
4297
4394
  }
4395
+ function processPartialPlaceholders(statements) {
4396
+ const partialMap = /* @__PURE__ */ new Map();
4397
+ gatherRecursiveAll(statements, ($3) => $3.type === "PartialPlaceholder").forEach((_exp) => {
4398
+ const exp = _exp;
4399
+ let { ancestor } = findAncestor(exp, ($4) => $4?.type === "Call");
4400
+ ancestor = ancestor?.parent;
4401
+ while (ancestor?.parent?.type === "UnaryExpression") {
4402
+ ancestor = ancestor.parent;
4403
+ }
4404
+ if (ancestor) {
4405
+ if (partialMap.has(ancestor)) {
4406
+ return partialMap.get(ancestor).push(exp);
4407
+ } else {
4408
+ return partialMap.set(ancestor, [exp]);
4409
+ }
4410
+ } else {
4411
+ return replaceNode(exp, {
4412
+ type: "Error",
4413
+ message: "Partial placeholder outside of call expression",
4414
+ parent: exp.parent
4415
+ });
4416
+ }
4417
+ });
4418
+ for (const [ancestor, placeholders] of partialMap) {
4419
+ let ref = makeRef("$");
4420
+ placeholders.forEach((exp) => {
4421
+ return replaceNode(exp.children.at(-1), ref);
4422
+ });
4423
+ const rhs = {
4424
+ ref,
4425
+ children: [ancestor]
4426
+ };
4427
+ const fnExp = makeAmpersandFunctionExpression([], rhs);
4428
+ replaceNode(ancestor, fnExp);
4429
+ }
4430
+ return;
4431
+ }
4298
4432
  function reorderBindingRestProperty(props) {
4299
4433
  const names = props.flatMap((p) => p.names);
4300
4434
  let restIndex = -1;
@@ -5005,11 +5139,11 @@ ${input.slice(result.pos)}
5005
5139
  WRHS,
5006
5140
  SingleLineBinaryOpRHS,
5007
5141
  RHS,
5008
- ParenthesizedAssignment,
5009
5142
  UnaryExpression,
5010
5143
  UnaryWithoutParenthesizedAssignment,
5011
5144
  UnaryBody,
5012
5145
  UnaryWithoutParenthesizedAssignmentBody,
5146
+ ParenthesizedAssignment,
5013
5147
  UnaryPostfix,
5014
5148
  TypePostfix,
5015
5149
  Tuple,
@@ -5037,6 +5171,7 @@ ${input.slice(result.pos)}
5037
5171
  PipelineTailItem,
5038
5172
  PrimaryExpression,
5039
5173
  ParenthesizedExpression,
5174
+ PartialPlaceholder,
5040
5175
  ClassDeclaration,
5041
5176
  ClassExpression,
5042
5177
  ClassBinding,
@@ -5081,6 +5216,7 @@ ${input.slice(result.pos)}
5081
5216
  MemberBracketContent,
5082
5217
  SliceParameters,
5083
5218
  AccessStart,
5219
+ ImplicitAccessStart,
5084
5220
  PropertyAccessModifier,
5085
5221
  PropertyAccess,
5086
5222
  PropertyGlob,
@@ -5215,6 +5351,7 @@ ${input.slice(result.pos)}
5215
5351
  BinaryOp,
5216
5352
  _BinaryOp,
5217
5353
  BinaryOpSymbol,
5354
+ ActualIn,
5218
5355
  CoffeeOfOp,
5219
5356
  NotOp,
5220
5357
  Xor,
@@ -5495,6 +5632,7 @@ ${input.slice(result.pos)}
5495
5632
  TripleTick,
5496
5633
  Try,
5497
5634
  Typeof,
5635
+ Undefined,
5498
5636
  Unless,
5499
5637
  Until,
5500
5638
  Using,
@@ -5895,123 +6033,126 @@ ${input.slice(result.pos)}
5895
6033
  var $L199 = $L("```");
5896
6034
  var $L200 = $L("try");
5897
6035
  var $L201 = $L("typeof");
5898
- var $L202 = $L("unless");
5899
- var $L203 = $L("until");
5900
- var $L204 = $L("using");
5901
- var $L205 = $L("var");
5902
- var $L206 = $L("void");
5903
- var $L207 = $L("when");
5904
- var $L208 = $L("while");
5905
- var $L209 = $L("yield");
5906
- var $L210 = $L("/>");
5907
- var $L211 = $L("</");
5908
- var $L212 = $L("<>");
5909
- var $L213 = $L("</>");
5910
- var $L214 = $L("<!--");
5911
- var $L215 = $L("-->");
5912
- var $L216 = $L("type");
5913
- var $L217 = $L("enum");
5914
- var $L218 = $L("interface");
5915
- var $L219 = $L("global");
5916
- var $L220 = $L("module");
5917
- var $L221 = $L("namespace");
5918
- var $L222 = $L("asserts");
5919
- var $L223 = $L("keyof");
5920
- var $L224 = $L("???");
5921
- var $L225 = $L("[]");
5922
- var $L226 = $L("civet");
6036
+ var $L202 = $L("undefined");
6037
+ var $L203 = $L("unless");
6038
+ var $L204 = $L("until");
6039
+ var $L205 = $L("using");
6040
+ var $L206 = $L("var");
6041
+ var $L207 = $L("void");
6042
+ var $L208 = $L("when");
6043
+ var $L209 = $L("while");
6044
+ var $L210 = $L("yield");
6045
+ var $L211 = $L("/>");
6046
+ var $L212 = $L("</");
6047
+ var $L213 = $L("<>");
6048
+ var $L214 = $L("</>");
6049
+ var $L215 = $L("<!--");
6050
+ var $L216 = $L("-->");
6051
+ var $L217 = $L("type");
6052
+ var $L218 = $L("enum");
6053
+ var $L219 = $L("interface");
6054
+ var $L220 = $L("global");
6055
+ var $L221 = $L("module");
6056
+ var $L222 = $L("namespace");
6057
+ var $L223 = $L("asserts");
6058
+ var $L224 = $L("keyof");
6059
+ var $L225 = $L("???");
6060
+ var $L226 = $L("[]");
6061
+ var $L227 = $L("civet");
5923
6062
  var $R0 = $R(new RegExp("(?=async|debugger|if|unless|do|for|loop|until|while|switch|throw|try)", "suy"));
5924
6063
  var $R1 = $R(new RegExp("(as|of|satisfies|then|when|implements|xor|xnor)(?!\\p{ID_Continue}|[\\u200C\\u200D$])", "suy"));
5925
6064
  var $R2 = $R(new RegExp("[0-9]", "suy"));
5926
6065
  var $R3 = $R(new RegExp("(?!\\p{ID_Start}|[_$0-9(\\[{])", "suy"));
5927
6066
  var $R4 = $R(new RegExp("[ \\t]", "suy"));
5928
- var $R5 = $R(new RegExp("(?=['\"`])", "suy"));
5929
- var $R6 = $R(new RegExp("(?=[\\/?])", "suy"));
5930
- var $R7 = $R(new RegExp("(?=[\\/\\[{?.!@'\u2019:])", "suy"));
5931
- var $R8 = $R(new RegExp("[)}]", "suy"));
5932
- var $R9 = $R(new RegExp("\\+\\+|--|[\\+-]\\S", "suy"));
5933
- var $R10 = $R(new RegExp("[&]", "suy"));
5934
- var $R11 = $R(new RegExp(`(?=[0-9.'"tfyno])`, "suy"));
5935
- var $R12 = $R(new RegExp("(?=true|false|yes|no|on|off)", "suy"));
5936
- var $R13 = $R(new RegExp("(?=\\p{ID_Start}|[_$])", "suy"));
5937
- var $R14 = $R(new RegExp("(?:\\p{ID_Start}|[_$])(?:\\p{ID_Continue}|[\\u200C\\u200D$])*", "suy"));
5938
- var $R15 = $R(new RegExp("(?=\\[)", "suy"));
5939
- var $R16 = $R(new RegExp("[!+-]?", "suy"));
5940
- var $R17 = $R(new RegExp("[+-]", "suy"));
5941
- var $R18 = $R(new RegExp("(?=\\p{ID_Start}|[_$^\xAB\xBB\u22D9\u2264\u2265\u2208\u220B\u2209\u220C\u2263\u2261\u2262\u2260=\u2016\u2047&|*\\/!?%<>\u29FA+-])", "suy"));
5942
- var $R19 = $R(new RegExp("!\\^\\^?", "suy"));
5943
- var $R20 = $R(new RegExp("(?!\\+\\+|--)[!~+-](?!\\s)", "suy"));
5944
- var $R21 = $R(new RegExp("[:.]", "suy"));
5945
- var $R22 = $R(new RegExp("(?=for|if|loop|unless|until|while)", "suy"));
5946
- var $R23 = $R(new RegExp("(?=loop|do|for|until|while)", "suy"));
5947
- var $R24 = $R(new RegExp("(?=[\\s\\),])", "suy"));
5948
- var $R25 = $R(new RegExp('[^;"\\s]+', "suy"));
5949
- var $R26 = $R(new RegExp("(?=[0-9.])", "suy"));
5950
- var $R27 = $R(new RegExp("(?:0|[1-9](?:_[0-9]|[0-9])*)n", "suy"));
5951
- var $R28 = $R(new RegExp("(?:0|[1-9](?:_[0-9]|[0-9])*)(?=\\.(?:\\p{ID_Start}|[_$]))", "suy"));
5952
- var $R29 = $R(new RegExp("(?:0|[1-9](?:_[0-9]|[0-9])*)(?:\\.(?:[0-9](?:_[0-9]|[0-9])*))?", "suy"));
5953
- var $R30 = $R(new RegExp("(?:\\.[0-9](?:_[0-9]|[0-9])*)", "suy"));
5954
- var $R31 = $R(new RegExp("(?:[eE][+-]?[0-9]+(?:_[0-9]|[0-9])*)", "suy"));
5955
- var $R32 = $R(new RegExp("0[bB][01](?:[01]|_[01])*n?", "suy"));
5956
- var $R33 = $R(new RegExp("0[oO][0-7](?:[0-7]|_[0-7])*n?", "suy"));
5957
- var $R34 = $R(new RegExp("0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_[0-9a-fA-F])*n?", "suy"));
5958
- var $R35 = $R(new RegExp("(?=[0-9])", "suy"));
5959
- var $R36 = $R(new RegExp("(?:0|[1-9](?:_[0-9]|[0-9])*)", "suy"));
5960
- var $R37 = $R(new RegExp('(?:\\\\.|[^"])*', "suy"));
5961
- var $R38 = $R(new RegExp("(?:\\\\.|[^'])*", "suy"));
5962
- var $R39 = $R(new RegExp('(?:"(?!"")|#(?!\\{)|\\\\.|[^#"])+', "suy"));
5963
- var $R40 = $R(new RegExp("(?:'(?!'')|\\\\.|[^'])*", "suy"));
5964
- var $R41 = $R(new RegExp('(?:\\\\.|#(?!\\{)|[^"#])+', "suy"));
5965
- var $R42 = $R(new RegExp("(?:\\\\.|[^\\]])*", "suy"));
5966
- var $R43 = $R(new RegExp("(?:\\\\.)", "suy"));
5967
- var $R44 = $R(new RegExp("[\\s]+", "suy"));
5968
- var $R45 = $R(new RegExp("\\/(?!\\/\\/)", "suy"));
5969
- var $R46 = $R(new RegExp("[^[\\/\\s#\\\\]+", "suy"));
5970
- var $R47 = $R(new RegExp("[*\\/\\r\\n]", "suy"));
5971
- var $R48 = $R(new RegExp("(?:\\\\.|[^[\\/\\r\\n])+", "suy"));
5972
- var $R49 = $R(new RegExp("(?:\\p{ID_Continue}|[\\u200C\\u200D$])*", "suy"));
5973
- var $R50 = $R(new RegExp("(?=[`'\"])", "suy"));
5974
- var $R51 = $R(new RegExp("(?:\\$(?!\\{)|\\\\.|[^$`])+", "suy"));
5975
- var $R52 = $R(new RegExp("(?:\\$(?!\\{)|`(?!``)|\\\\.|[^$`])+", "suy"));
5976
- var $R53 = $R(new RegExp("(?:on|off|yes|no)(?!\\p{ID_Continue})", "suy"));
5977
- var $R54 = $R(new RegExp("(?:isnt)(?!\\p{ID_Continue})", "suy"));
5978
- var $R55 = $R(new RegExp("(?:by)(?!\\p{ID_Continue})", "suy"));
5979
- var $R56 = $R(new RegExp("(?:of)(?!\\p{ID_Continue})", "suy"));
5980
- var $R57 = $R(new RegExp("(?:and|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|let|loop|new|not|null|or|private|protected|public|return|static|super|switch|this|throw|true|try|typeof|unless|until|var|void|while|with|yield)(?!\\p{ID_Continue})", "suy"));
5981
- var $R58 = $R(new RegExp("(?=\\/|#)", "suy"));
5982
- var $R59 = $R(new RegExp("\\/\\/(?!\\/)[^\\r\\n]*", "suy"));
5983
- var $R60 = $R(new RegExp(".", "suy"));
5984
- var $R61 = $R(new RegExp("#(?!##(?!#))([^\\r\\n]*)", "suy"));
5985
- var $R62 = $R(new RegExp("[^]*?###", "suy"));
5986
- var $R63 = $R(new RegExp("###(?!#)", "suy"));
5987
- var $R64 = $R(new RegExp("\\/\\*(?:(?!\\*\\/)[^\\r\\n])*\\*\\/", "suy"));
5988
- var $R65 = $R(new RegExp("(?=[ \\t\\/\\\\])", "suy"));
5989
- var $R66 = $R(new RegExp("[ \\t]+", "suy"));
5990
- var $R67 = $R(new RegExp("(?=\\s|\\/|#)", "suy"));
5991
- var $R68 = $R(new RegExp("(?!\\p{ID_Continue})", "suy"));
5992
- var $R69 = $R(new RegExp("['\u2019]s", "suy"));
5993
- var $R70 = $R(new RegExp("\\s", "suy"));
5994
- var $R71 = $R(new RegExp("(?=[<])", "suy"));
5995
- var $R72 = $R(new RegExp("(?:\\p{ID_Start}|[_$])(?:\\p{ID_Continue}|[\\u200C\\u200D$-])*", "suy"));
5996
- var $R73 = $R(new RegExp("[!+-]", "suy"));
5997
- var $R74 = $R(new RegExp("[\\s>]|\\/>", "suy"));
5998
- var $R75 = $R(new RegExp("(?:[\\w\\-:]+|\\([^()]*\\)|\\[[^\\[\\]]*\\])+", "suy"));
5999
- var $R76 = $R(new RegExp(`"[^"]*"|'[^']*'`, "suy"));
6000
- var $R77 = $R(new RegExp("[<>]", "suy"));
6001
- var $R78 = $R(new RegExp("[!~+-](?!\\s|[!~+-]*&)", "suy"));
6002
- var $R79 = $R(new RegExp("(?:-[^-]|[^-]*)*", "suy"));
6003
- var $R80 = $R(new RegExp("[^{}<>\\r\\n]+", "suy"));
6004
- var $R81 = $R(new RegExp("[+-]?", "suy"));
6005
- var $R82 = $R(new RegExp("(?=if|unless)", "suy"));
6006
- var $R83 = $R(new RegExp("#![^\\r\\n]*", "suy"));
6007
- var $R84 = $R(new RegExp("[\\t ]*", "suy"));
6008
- var $R85 = $R(new RegExp("[ \\t]*", "suy"));
6009
- var $R86 = $R(new RegExp("[\\s]*", "suy"));
6010
- var $R87 = $R(new RegExp("\\s+([+-]?)([a-zA-Z0-9-]+)(\\s*=\\s*([a-zA-Z0-9.+-]*))?", "suy"));
6011
- var $R88 = $R(new RegExp("\\/\\/\\/[^\\r\\n]*", "suy"));
6012
- var $R89 = $R(new RegExp("(?=[ \\t\\r\\n\\/#]|$)", "suy"));
6013
- var $R90 = $R(new RegExp("\\r\\n|\\n|\\r|$", "suy"));
6014
- var $R91 = $R(new RegExp("[^]*", "suy"));
6067
+ var $R5 = $R(new RegExp("(?:\\p{ID_Continue}|[\\u200C\\u200D$.])", "suy"));
6068
+ var $R6 = $R(new RegExp("(?=['\"`])", "suy"));
6069
+ var $R7 = $R(new RegExp("(?=[\\/?])", "suy"));
6070
+ var $R8 = $R(new RegExp("(?=[\\/\\[{?.!@#'\u2019:])", "suy"));
6071
+ var $R9 = $R(new RegExp("[)}]", "suy"));
6072
+ var $R10 = $R(new RegExp("[+-]", "suy"));
6073
+ var $R11 = $R(new RegExp("\\+\\+|--|[\\+-]\\S", "suy"));
6074
+ var $R12 = $R(new RegExp("[&]", "suy"));
6075
+ var $R13 = $R(new RegExp(`(?=[0-9.'"tfyno])`, "suy"));
6076
+ var $R14 = $R(new RegExp("(?=true|false|yes|no|on|off)", "suy"));
6077
+ var $R15 = $R(new RegExp("(?=\\p{ID_Start}|[_$])", "suy"));
6078
+ var $R16 = $R(new RegExp("(?:\\p{ID_Start}|[_$])(?:\\p{ID_Continue}|[\\u200C\\u200D$])*", "suy"));
6079
+ var $R17 = $R(new RegExp("(?=\\[)", "suy"));
6080
+ var $R18 = $R(new RegExp("[!+-]?", "suy"));
6081
+ var $R19 = $R(new RegExp("(?=\\p{ID_Start}|[_$^\xAB\xBB\u22D9\u2264\u2265\u2208\u220B\u2209\u220C\u2263\u2261\u2262\u2260=\u2016\u2047&|*\\/!?%<>\u29FA+-])", "suy"));
6082
+ var $R20 = $R(new RegExp("!\\^\\^?", "suy"));
6083
+ var $R21 = $R(new RegExp("(?!\\+\\+|--)[!~+-](?!\\s)", "suy"));
6084
+ var $R22 = $R(new RegExp("[:.]", "suy"));
6085
+ var $R23 = $R(new RegExp("(?=for|if|loop|unless|until|while)", "suy"));
6086
+ var $R24 = $R(new RegExp("(?=loop|do|for|until|while)", "suy"));
6087
+ var $R25 = $R(new RegExp("(?=[\\s\\),])", "suy"));
6088
+ var $R26 = $R(new RegExp('[^;"\\s]+', "suy"));
6089
+ var $R27 = $R(new RegExp("(?=[0-9.])", "suy"));
6090
+ var $R28 = $R(new RegExp("(?:0|[1-9](?:_[0-9]|[0-9])*)n", "suy"));
6091
+ var $R29 = $R(new RegExp("(?:0|[1-9](?:_[0-9]|[0-9])*)(?=\\.(?:\\p{ID_Start}|[_$]))", "suy"));
6092
+ var $R30 = $R(new RegExp("(?:0|[1-9](?:_[0-9]|[0-9])*)(?:\\.(?:[0-9](?:_[0-9]|[0-9])*))?", "suy"));
6093
+ var $R31 = $R(new RegExp("(?:\\.[0-9](?:_[0-9]|[0-9])*)", "suy"));
6094
+ var $R32 = $R(new RegExp("(?:[eE][+-]?[0-9]+(?:_[0-9]|[0-9])*)", "suy"));
6095
+ var $R33 = $R(new RegExp("0[bB][01](?:[01]|_[01])*n?", "suy"));
6096
+ var $R34 = $R(new RegExp("0[oO][0-7](?:[0-7]|_[0-7])*n?", "suy"));
6097
+ var $R35 = $R(new RegExp("0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_[0-9a-fA-F])*n?", "suy"));
6098
+ var $R36 = $R(new RegExp("(?=[0-9])", "suy"));
6099
+ var $R37 = $R(new RegExp("(?:0|[1-9](?:_[0-9]|[0-9])*)", "suy"));
6100
+ var $R38 = $R(new RegExp('(?:\\\\.|[^"])*', "suy"));
6101
+ var $R39 = $R(new RegExp("(?:\\\\.|[^'])*", "suy"));
6102
+ var $R40 = $R(new RegExp('(?:"(?!"")|#(?!\\{)|\\\\.|[^#"])+', "suy"));
6103
+ var $R41 = $R(new RegExp("(?:'(?!'')|\\\\.|[^'])*", "suy"));
6104
+ var $R42 = $R(new RegExp('(?:\\\\.|#(?!\\{)|[^"#])+', "suy"));
6105
+ var $R43 = $R(new RegExp("(?:\\\\.|[^\\]])*", "suy"));
6106
+ var $R44 = $R(new RegExp("(?:\\\\.)", "suy"));
6107
+ var $R45 = $R(new RegExp("[\\s]+", "suy"));
6108
+ var $R46 = $R(new RegExp("\\/(?!\\/\\/)", "suy"));
6109
+ var $R47 = $R(new RegExp("[^[\\/\\s#\\\\]+", "suy"));
6110
+ var $R48 = $R(new RegExp("[*\\/\\r\\n]", "suy"));
6111
+ var $R49 = $R(new RegExp("(?:\\\\.|[^[\\/\\r\\n])+", "suy"));
6112
+ var $R50 = $R(new RegExp("(?:\\p{ID_Continue}|[\\u200C\\u200D$])*", "suy"));
6113
+ var $R51 = $R(new RegExp("(?=[`'\"])", "suy"));
6114
+ var $R52 = $R(new RegExp("(?:\\$(?!\\{)|\\\\.|[^$`])+", "suy"));
6115
+ var $R53 = $R(new RegExp("(?:\\$(?!\\{)|`(?!``)|\\\\.|[^$`])+", "suy"));
6116
+ var $R54 = $R(new RegExp("(?:on|off|yes|no)(?!\\p{ID_Continue})", "suy"));
6117
+ var $R55 = $R(new RegExp("(?:isnt)(?!\\p{ID_Continue})", "suy"));
6118
+ var $R56 = $R(new RegExp("(?:by)(?!\\p{ID_Continue})", "suy"));
6119
+ var $R57 = $R(new RegExp("(?:of)(?!\\p{ID_Continue})", "suy"));
6120
+ var $R58 = $R(new RegExp("(?:and|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|let|loop|new|not|null|or|private|protected|public|return|static|super|switch|this|throw|true|try|typeof|unless|until|var|void|while|with|yield)(?!\\p{ID_Continue})", "suy"));
6121
+ var $R59 = $R(new RegExp("(?=\\/|#)", "suy"));
6122
+ var $R60 = $R(new RegExp("\\/\\/(?!\\/)[^\\r\\n]*", "suy"));
6123
+ var $R61 = $R(new RegExp(".", "suy"));
6124
+ var $R62 = $R(new RegExp("#(?!##(?!#))([^\\r\\n]*)", "suy"));
6125
+ var $R63 = $R(new RegExp("[^]*?###", "suy"));
6126
+ var $R64 = $R(new RegExp("###(?!#)", "suy"));
6127
+ var $R65 = $R(new RegExp("\\/\\*(?:(?!\\*\\/)[^\\r\\n])*\\*\\/", "suy"));
6128
+ var $R66 = $R(new RegExp("(?=[ \\t\\/\\\\])", "suy"));
6129
+ var $R67 = $R(new RegExp("[ \\t]+", "suy"));
6130
+ var $R68 = $R(new RegExp("(?=\\s|\\/|#)", "suy"));
6131
+ var $R69 = $R(new RegExp("(?!\\p{ID_Continue})", "suy"));
6132
+ var $R70 = $R(new RegExp("[=:]", "suy"));
6133
+ var $R71 = $R(new RegExp("['\u2019]s", "suy"));
6134
+ var $R72 = $R(new RegExp("\\s", "suy"));
6135
+ var $R73 = $R(new RegExp("(?=[<])", "suy"));
6136
+ var $R74 = $R(new RegExp("(?:\\p{ID_Start}|[_$])(?:\\p{ID_Continue}|[\\u200C\\u200D$-])*", "suy"));
6137
+ var $R75 = $R(new RegExp("[!+-]", "suy"));
6138
+ var $R76 = $R(new RegExp("[\\s>]|\\/>", "suy"));
6139
+ var $R77 = $R(new RegExp("(?:[\\w\\-:]+|\\([^()]*\\)|\\[[^\\[\\]]*\\])+", "suy"));
6140
+ var $R78 = $R(new RegExp(`"[^"]*"|'[^']*'`, "suy"));
6141
+ var $R79 = $R(new RegExp("[<>]", "suy"));
6142
+ var $R80 = $R(new RegExp("[!~+-](?!\\s|[!~+-]*&)", "suy"));
6143
+ var $R81 = $R(new RegExp("(?:-[^-]|[^-]*)*", "suy"));
6144
+ var $R82 = $R(new RegExp("[^{}<>\\r\\n]+", "suy"));
6145
+ var $R83 = $R(new RegExp("[+-]?", "suy"));
6146
+ var $R84 = $R(new RegExp("(?=if|unless)", "suy"));
6147
+ var $R85 = $R(new RegExp("#![^\\r\\n]*", "suy"));
6148
+ var $R86 = $R(new RegExp("[\\t ]*", "suy"));
6149
+ var $R87 = $R(new RegExp("[ \\t]*", "suy"));
6150
+ var $R88 = $R(new RegExp("[\\s]*", "suy"));
6151
+ var $R89 = $R(new RegExp("\\s+([+-]?)([a-zA-Z0-9-]+)(\\s*=\\s*([a-zA-Z0-9.+-]*))?", "suy"));
6152
+ var $R90 = $R(new RegExp("\\/\\/\\/[^\\r\\n]*", "suy"));
6153
+ var $R91 = $R(new RegExp("(?=[ \\t\\r\\n\\/#]|$)", "suy"));
6154
+ var $R92 = $R(new RegExp("\\r\\n|\\n|\\r|$", "suy"));
6155
+ var $R93 = $R(new RegExp("[^]*", "suy"));
6015
6156
  var Program$0 = $TS($S(Reset, Init, $E(EOS), TopLevelStatements, __), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
6016
6157
  var statements = $4;
6017
6158
  processProgram({
@@ -6424,17 +6565,12 @@ ${input.slice(result.pos)}
6424
6565
  function SingleLineBinaryOpRHS(ctx, state) {
6425
6566
  return $EVENT(ctx, state, "SingleLineBinaryOpRHS", SingleLineBinaryOpRHS$0);
6426
6567
  }
6427
- var RHS$0 = ParenthesizedAssignment;
6428
- var RHS$1 = UnaryExpression;
6429
- var RHS$2 = ExpressionizedStatementWithTrailingCallExpressions;
6430
- var RHS$$ = [RHS$0, RHS$1, RHS$2];
6568
+ var RHS$0 = UnaryExpression;
6569
+ var RHS$1 = ExpressionizedStatementWithTrailingCallExpressions;
6570
+ var RHS$$ = [RHS$0, RHS$1];
6431
6571
  function RHS(ctx, state) {
6432
6572
  return $EVENT_C(ctx, state, "RHS", RHS$$);
6433
6573
  }
6434
- var ParenthesizedAssignment$0 = $S(InsertOpenParen, ActualAssignment, InsertCloseParen);
6435
- function ParenthesizedAssignment(ctx, state) {
6436
- return $EVENT(ctx, state, "ParenthesizedAssignment", ParenthesizedAssignment$0);
6437
- }
6438
6574
  var UnaryExpression$0 = AmpersandFunctionExpression;
6439
6575
  var UnaryExpression$1 = $TS($S($Q(UnaryOp), UnaryBody, $E(UnaryPostfix)), function($skip, $loc, $0, $1, $2, $3) {
6440
6576
  var pre = $1;
@@ -6476,6 +6612,10 @@ ${input.slice(result.pos)}
6476
6612
  function UnaryWithoutParenthesizedAssignmentBody(ctx, state) {
6477
6613
  return $EVENT_C(ctx, state, "UnaryWithoutParenthesizedAssignmentBody", UnaryWithoutParenthesizedAssignmentBody$$);
6478
6614
  }
6615
+ var ParenthesizedAssignment$0 = $S(InsertOpenParen, $C(ActualAssignment, ArrowFunction), InsertCloseParen);
6616
+ function ParenthesizedAssignment(ctx, state) {
6617
+ return $EVENT(ctx, state, "ParenthesizedAssignment", ParenthesizedAssignment$0);
6618
+ }
6479
6619
  var UnaryPostfix$0 = QuestionMark;
6480
6620
  var UnaryPostfix$1 = $P(TypePostfix);
6481
6621
  var UnaryPostfix$$ = [UnaryPostfix$0, UnaryPostfix$1];
@@ -6788,8 +6928,9 @@ ${input.slice(result.pos)}
6788
6928
  var PrimaryExpression$7 = ClassExpression;
6789
6929
  var PrimaryExpression$8 = RegularExpressionLiteral;
6790
6930
  var PrimaryExpression$9 = ParenthesizedExpression;
6791
- var PrimaryExpression$10 = JSXImplicitFragment;
6792
- var PrimaryExpression$$ = [PrimaryExpression$0, PrimaryExpression$1, PrimaryExpression$2, PrimaryExpression$3, PrimaryExpression$4, PrimaryExpression$5, PrimaryExpression$6, PrimaryExpression$7, PrimaryExpression$8, PrimaryExpression$9, PrimaryExpression$10];
6931
+ var PrimaryExpression$10 = PartialPlaceholder;
6932
+ var PrimaryExpression$11 = JSXImplicitFragment;
6933
+ var PrimaryExpression$$ = [PrimaryExpression$0, PrimaryExpression$1, PrimaryExpression$2, PrimaryExpression$3, PrimaryExpression$4, PrimaryExpression$5, PrimaryExpression$6, PrimaryExpression$7, PrimaryExpression$8, PrimaryExpression$9, PrimaryExpression$10, PrimaryExpression$11];
6793
6934
  function PrimaryExpression(ctx, state) {
6794
6935
  return $EVENT_C(ctx, state, "PrimaryExpression", PrimaryExpression$$);
6795
6936
  }
@@ -6823,6 +6964,16 @@ ${input.slice(result.pos)}
6823
6964
  function ParenthesizedExpression(ctx, state) {
6824
6965
  return $EVENT(ctx, state, "ParenthesizedExpression", ParenthesizedExpression$0);
6825
6966
  }
6967
+ var PartialPlaceholder$0 = $TS($S(Dot, $N($EXPECT($R5, "PartialPlaceholder /(?:\\p{ID_Continue}|[\\u200C\\u200D$.])/"))), function($skip, $loc, $0, $1, $2) {
6968
+ var dot = $1;
6969
+ return {
6970
+ type: "PartialPlaceholder",
6971
+ children: [dot]
6972
+ };
6973
+ });
6974
+ function PartialPlaceholder(ctx, state) {
6975
+ return $EVENT(ctx, state, "PartialPlaceholder", PartialPlaceholder$0);
6976
+ }
6826
6977
  var ClassDeclaration$0 = $TS($S(ClassExpression), function($skip, $loc, $0, $1) {
6827
6978
  if ($1.id)
6828
6979
  return $1;
@@ -7127,7 +7278,8 @@ ${input.slice(result.pos)}
7127
7278
  return $EVENT_C(ctx, state, "FieldDefinition", FieldDefinition$$);
7128
7279
  }
7129
7280
  var ThisLiteral$0 = This;
7130
- var ThisLiteral$1 = $TS($S(AtThis, $TEXT($S($E(Hash), IdentifierName))), function($skip, $loc, $0, $1, $2) {
7281
+ var ThisLiteral$1 = HashThis;
7282
+ var ThisLiteral$2 = $TS($S(AtThis, $TEXT($S($E(Hash), IdentifierName))), function($skip, $loc, $0, $1, $2) {
7131
7283
  var at = $1;
7132
7284
  var id = $2;
7133
7285
  return {
@@ -7140,20 +7292,20 @@ ${input.slice(result.pos)}
7140
7292
  thisShorthand: true
7141
7293
  };
7142
7294
  });
7143
- var ThisLiteral$2 = AtThis;
7144
- var ThisLiteral$3 = HashThis;
7295
+ var ThisLiteral$3 = AtThis;
7145
7296
  var ThisLiteral$$ = [ThisLiteral$0, ThisLiteral$1, ThisLiteral$2, ThisLiteral$3];
7146
7297
  function ThisLiteral(ctx, state) {
7147
7298
  return $EVENT_C(ctx, state, "ThisLiteral", ThisLiteral$$);
7148
7299
  }
7149
- var HashThis$0 = $TS($S(LengthShorthand, $E($S($Y($S($P(_), $C($S(Not, __, In), In))), $EXPECT($L0, 'HashThis ""')))), function($skip, $loc, $0, $1, $2) {
7150
- var id = $1;
7151
- var beforeIn = $2;
7152
- if (beforeIn != null)
7300
+ var HashThis$0 = $TS($S($E(AtThis), LengthShorthand, $E($S($Y($S(_, $E($S(Not, __)), ActualIn)), $EXPECT($L0, 'HashThis ""')))), function($skip, $loc, $0, $1, $2, $3) {
7301
+ var at = $1;
7302
+ var id = $2;
7303
+ var beforeIn = $3;
7304
+ if (beforeIn != null && at == null)
7153
7305
  return ['"', id.name, '"'];
7154
7306
  return {
7155
7307
  type: "MemberExpression",
7156
- children: ["this", {
7308
+ children: [at ?? "this", {
7157
7309
  type: "PropertyAccess",
7158
7310
  name: id.name,
7159
7311
  children: [".", id]
@@ -7161,7 +7313,7 @@ ${input.slice(result.pos)}
7161
7313
  thisShorthand: true
7162
7314
  };
7163
7315
  });
7164
- var HashThis$1 = $TS($S(PrivateIdentifier, $Y($S($P(_), $C($S(Not, __, In), In)))), function($skip, $loc, $0, $1, $2) {
7316
+ var HashThis$1 = $TS($S(PrivateIdentifier, $Y($S(_, $E($S(Not, __)), ActualIn))), function($skip, $loc, $0, $1, $2) {
7165
7317
  var id = $1;
7166
7318
  return id;
7167
7319
  });
@@ -7255,7 +7407,7 @@ ${input.slice(result.pos)}
7255
7407
  var CallExpressionRest$1 = $T($S(TypeArguments, $N($C(IdentifierName, NumericLiteral))), function(value) {
7256
7408
  return value[0];
7257
7409
  });
7258
- var CallExpressionRest$2 = $TS($S($EXPECT($R5, "CallExpressionRest /(?=['\"`])/"), $C(TemplateLiteral, StringLiteral)), function($skip, $loc, $0, $1, $2) {
7410
+ var CallExpressionRest$2 = $TS($S($EXPECT($R6, "CallExpressionRest /(?=['\"`])/"), $C(TemplateLiteral, StringLiteral)), function($skip, $loc, $0, $1, $2) {
7259
7411
  var literal = $2;
7260
7412
  if (literal.type === "StringLiteral") {
7261
7413
  literal = "`" + literal.token.slice(1, -1).replace(/(`|\$\{)/g, "\\$1") + "`";
@@ -7278,7 +7430,7 @@ ${input.slice(result.pos)}
7278
7430
  function CallExpressionRest(ctx, state) {
7279
7431
  return $EVENT_C(ctx, state, "CallExpressionRest", CallExpressionRest$$);
7280
7432
  }
7281
- var OptionalShorthand$0 = $TS($S($EXPECT($R6, "OptionalShorthand /(?=[\\/?])/"), $Q(InlineComment), QuestionMark, OptionalDot), function($skip, $loc, $0, $1, $2, $3, $4) {
7433
+ var OptionalShorthand$0 = $TS($S($EXPECT($R7, "OptionalShorthand /(?=[\\/?])/"), $Q(InlineComment), QuestionMark, OptionalDot), function($skip, $loc, $0, $1, $2, $3, $4) {
7282
7434
  var comments = $2;
7283
7435
  var q = $3;
7284
7436
  var d = $4;
@@ -7332,7 +7484,7 @@ ${input.slice(result.pos)}
7332
7484
  function MemberBase(ctx, state) {
7333
7485
  return $EVENT_C(ctx, state, "MemberBase", MemberBase$$);
7334
7486
  }
7335
- var MemberExpressionRest$0 = $TS($S($EXPECT($R7, "MemberExpressionRest /(?=[\\/\\[{?.!@'\u2019:])/"), $Q(InlineComment), MemberExpressionRestBody), function($skip, $loc, $0, $1, $2, $3) {
7487
+ var MemberExpressionRest$0 = $TS($S($EXPECT($R8, "MemberExpressionRest /(?=[\\/\\[{?.!@#'\u2019:])/"), $Q(InlineComment), MemberExpressionRestBody), function($skip, $loc, $0, $1, $2, $3) {
7336
7488
  var comments = $2;
7337
7489
  var body = $3;
7338
7490
  if (Array.isArray(body))
@@ -7465,16 +7617,27 @@ ${input.slice(result.pos)}
7465
7617
  var AccessStart$0 = $TS($S($E(PropertyAccessModifier), Dot, $N(Dot)), function($skip, $loc, $0, $1, $2, $3) {
7466
7618
  var modifier = $1;
7467
7619
  var dot = $2;
7468
- let children = modifier ? [modifier, dot] : [dot];
7469
7620
  return {
7470
7621
  type: "AccessStart",
7471
- children,
7622
+ children: modifier ? [modifier, dot] : [dot],
7472
7623
  optional: modifier?.token === "?"
7473
7624
  };
7474
7625
  });
7475
7626
  function AccessStart(ctx, state) {
7476
7627
  return $EVENT(ctx, state, "AccessStart", AccessStart$0);
7477
7628
  }
7629
+ var ImplicitAccessStart$0 = $TS($S($E(PropertyAccessModifier), InsertDot, $N(Dot)), function($skip, $loc, $0, $1, $2, $3) {
7630
+ var modifier = $1;
7631
+ var dot = $2;
7632
+ return {
7633
+ type: "AccessStart",
7634
+ children: modifier ? [modifier, dot] : [dot],
7635
+ optional: modifier?.token === "?"
7636
+ };
7637
+ });
7638
+ function ImplicitAccessStart(ctx, state) {
7639
+ return $EVENT(ctx, state, "ImplicitAccessStart", ImplicitAccessStart$0);
7640
+ }
7478
7641
  var PropertyAccessModifier$0 = QuestionMark;
7479
7642
  var PropertyAccessModifier$1 = NonNullAssertion;
7480
7643
  var PropertyAccessModifier$$ = [PropertyAccessModifier$0, PropertyAccessModifier$1];
@@ -7516,15 +7679,24 @@ ${input.slice(result.pos)}
7516
7679
  var dot = $1;
7517
7680
  var comments = $2;
7518
7681
  var id = $3;
7519
- const children = [dot, ...comments, ...id.children];
7520
7682
  return {
7521
7683
  type: "PropertyAccess",
7522
7684
  name: id.name,
7523
7685
  dot,
7524
- children
7686
+ children: [dot, ...comments, ...id.children]
7687
+ };
7688
+ });
7689
+ var PropertyAccess$3 = $TS($S(ImplicitAccessStart, $C(PrivateIdentifier, LengthShorthand)), function($skip, $loc, $0, $1, $2) {
7690
+ var dot = $1;
7691
+ var id = $2;
7692
+ return {
7693
+ type: "PropertyAccess",
7694
+ name: id.name,
7695
+ dot,
7696
+ children: [dot, ...id.children]
7525
7697
  };
7526
7698
  });
7527
- var PropertyAccess$3 = $TS($S(CoffeePrototypeEnabled, DoubleColon, $E(IdentifierName)), function($skip, $loc, $0, $1, $2, $3) {
7699
+ var PropertyAccess$4 = $TS($S(CoffeePrototypeEnabled, DoubleColon, $E(IdentifierName)), function($skip, $loc, $0, $1, $2, $3) {
7528
7700
  var p = $2;
7529
7701
  var id = $3;
7530
7702
  if (id) {
@@ -7545,7 +7717,7 @@ ${input.slice(result.pos)}
7545
7717
  };
7546
7718
  }
7547
7719
  });
7548
- var PropertyAccess$$ = [PropertyAccess$0, PropertyAccess$1, PropertyAccess$2, PropertyAccess$3];
7720
+ var PropertyAccess$$ = [PropertyAccess$0, PropertyAccess$1, PropertyAccess$2, PropertyAccess$3, PropertyAccess$4];
7549
7721
  function PropertyAccess(ctx, state) {
7550
7722
  return $EVENT_C(ctx, state, "PropertyAccess", PropertyAccess$$);
7551
7723
  }
@@ -7796,7 +7968,7 @@ ${input.slice(result.pos)}
7796
7968
  return $EVENT(ctx, state, "ParameterElement", ParameterElement$0);
7797
7969
  }
7798
7970
  var ParameterElementDelimiter$0 = $S($E(_), Comma);
7799
- var ParameterElementDelimiter$1 = $Y($S(__, $R$0($EXPECT($R8, "ParameterElementDelimiter /[)}]/"))));
7971
+ var ParameterElementDelimiter$1 = $Y($S(__, $R$0($EXPECT($R9, "ParameterElementDelimiter /[)}]/"))));
7800
7972
  var ParameterElementDelimiter$2 = $T($S($Y(EOS), InsertComma), function(value) {
7801
7973
  return value[1];
7802
7974
  });
@@ -7865,7 +8037,23 @@ ${input.slice(result.pos)}
7865
8037
  expression
7866
8038
  };
7867
8039
  });
7868
- var PinPattern$$ = [PinPattern$0, PinPattern$1];
8040
+ var PinPattern$2 = $TV($S($EXPECT($R10, "PinPattern /[+-]/"), NumericLiteral), function($skip, $loc, $0, $1) {
8041
+ var expression = $0;
8042
+ return {
8043
+ type: "PinPattern",
8044
+ children: [expression],
8045
+ expression
8046
+ };
8047
+ });
8048
+ var PinPattern$3 = $TV(Undefined, function($skip, $loc, $0, $1) {
8049
+ var expression = $0;
8050
+ return {
8051
+ type: "PinPattern",
8052
+ children: [expression],
8053
+ expression
8054
+ };
8055
+ });
8056
+ var PinPattern$$ = [PinPattern$0, PinPattern$1, PinPattern$2, PinPattern$3];
7869
8057
  function PinPattern(ctx, state) {
7870
8058
  return $EVENT_C(ctx, state, "PinPattern", PinPattern$$);
7871
8059
  }
@@ -8300,7 +8488,7 @@ ${input.slice(result.pos)}
8300
8488
  parameters
8301
8489
  };
8302
8490
  });
8303
- var FunctionExpression$4 = $TS($S(OpenParen, __, $N($EXPECT($R9, "FunctionExpression /\\+\\+|--|[\\+-]\\S/")), BinaryOp, __, NonPipelineAssignmentExpression, CloseParen), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7) {
8491
+ var FunctionExpression$4 = $TS($S(OpenParen, __, $N($EXPECT($R11, "FunctionExpression /\\+\\+|--|[\\+-]\\S/")), BinaryOp, __, NonPipelineAssignmentExpression, CloseParen), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7) {
8304
8492
  var open = $1;
8305
8493
  var ws1 = $2;
8306
8494
  var op = $4;
@@ -8343,52 +8531,7 @@ ${input.slice(result.pos)}
8343
8531
  var rhs = $3;
8344
8532
  if (!prefix.length && !rhs)
8345
8533
  return $skip;
8346
- let body, ref, typeSuffix;
8347
- if (!rhs) {
8348
- body = ref = makeRef("$");
8349
- } else {
8350
- ({ ref, typeSuffix } = rhs);
8351
- if (!ref) {
8352
- throw new Error("Could not find ref in ampersand shorthand block");
8353
- }
8354
- body = rhs;
8355
- }
8356
- if (prefix.length) {
8357
- body = {
8358
- type: "UnaryExpression",
8359
- children: [processUnaryExpression(prefix, body, void 0)]
8360
- };
8361
- }
8362
- const parameters = {
8363
- type: "Parameters",
8364
- children: typeSuffix ? ["(", ref, typeSuffix, ")"] : [ref],
8365
- names: []
8366
- };
8367
- const expressions = [body];
8368
- const block = {
8369
- bare: true,
8370
- expressions,
8371
- children: [expressions]
8372
- };
8373
- const children = [parameters, " => ", block];
8374
- const async = hasAwait(body);
8375
- if (async) {
8376
- children.unshift("async ");
8377
- }
8378
- return {
8379
- type: "ArrowFunction",
8380
- signature: {
8381
- modifier: {
8382
- async
8383
- }
8384
- },
8385
- children,
8386
- ref,
8387
- body,
8388
- ampersandBlock: true,
8389
- block,
8390
- parameters
8391
- };
8534
+ return makeAmpersandFunctionExpression(prefix, rhs);
8392
8535
  });
8393
8536
  function AmpersandFunctionExpression(ctx, state) {
8394
8537
  return $EVENT(ctx, state, "AmpersandFunctionExpression", AmpersandFunctionExpression$0);
@@ -8514,7 +8657,7 @@ ${input.slice(result.pos)}
8514
8657
  function AmpersandTypeSuffix(ctx, state) {
8515
8658
  return $EVENT(ctx, state, "AmpersandTypeSuffix", AmpersandTypeSuffix$0);
8516
8659
  }
8517
- var AmpersandBlockRHSBody$0 = $TS($S($E(AmpersandTypeSuffix), $E($S($N(_), $P(CallExpressionRest))), $E(UnaryPostfix), $E($S(WAssignmentOp, $Q($S(NotDedented, UpdateExpression, WAssignmentOp)), NonPipelineExtendedExpression)), $E($S($N($EXPECT($R10, "AmpersandBlockRHSBody /[&]/")), $P(BinaryOpRHS)))), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
8660
+ var AmpersandBlockRHSBody$0 = $TS($S($E(AmpersandTypeSuffix), $E($S($N(_), $P(CallExpressionRest))), $E(UnaryPostfix), $E($S(WAssignmentOp, $Q($S(NotDedented, UpdateExpression, WAssignmentOp)), NonPipelineExtendedExpression)), $E($S($N($EXPECT($R12, "AmpersandBlockRHSBody /[&]/")), $P(BinaryOpRHS)))), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
8518
8661
  var typeSuffix = $1;
8519
8662
  var callExpRest = $2;
8520
8663
  var unaryPostfix = $3;
@@ -8522,42 +8665,7 @@ ${input.slice(result.pos)}
8522
8665
  var binopRHS = $5;
8523
8666
  if (!typeSuffix && !callExpRest && !binopRHS && !unaryPostfix)
8524
8667
  return $skip;
8525
- const ref = makeRef("$");
8526
- let exp = {
8527
- type: "AmpersandRef",
8528
- children: [ref],
8529
- names: [],
8530
- ref
8531
- };
8532
- if (callExpRest) {
8533
- exp.children.push(...callExpRest[1]);
8534
- }
8535
- if (unaryPostfix) {
8536
- exp = processUnaryExpression([], exp, unaryPostfix);
8537
- }
8538
- if (assign) {
8539
- const [op1, more, rhs] = assign;
8540
- const lhs = [
8541
- [void 0, exp, ...op1],
8542
- ...more.map((x) => [x[0], x[1], ...x[2]])
8543
- ];
8544
- exp = {
8545
- type: "AssignmentExpression",
8546
- children: [lhs, rhs],
8547
- names: null,
8548
- lhs,
8549
- assigned: exp,
8550
- exp: rhs
8551
- };
8552
- }
8553
- if (binopRHS) {
8554
- exp = {
8555
- children: processBinaryOpExpression([exp, binopRHS[1]])
8556
- };
8557
- }
8558
- exp.ref = ref;
8559
- exp.typeSuffix = typeSuffix;
8560
- return exp;
8668
+ return makeAmpersandBlockRHSBody(typeSuffix, callExpRest, unaryPostfix, assign, binopRHS);
8561
8669
  });
8562
8670
  function AmpersandBlockRHSBody(ctx, state) {
8563
8671
  return $EVENT(ctx, state, "AmpersandBlockRHSBody", AmpersandBlockRHSBody$0);
@@ -8958,7 +9066,7 @@ ${input.slice(result.pos)}
8958
9066
  function BlockStatementPart(ctx, state) {
8959
9067
  return $EVENT(ctx, state, "BlockStatementPart", BlockStatementPart$0);
8960
9068
  }
8961
- var Literal$0 = $TS($S($EXPECT($R11, `Literal /(?=[0-9.'"tfyno])/`), LiteralContent), function($skip, $loc, $0, $1, $2) {
9069
+ var Literal$0 = $TS($S($EXPECT($R13, `Literal /(?=[0-9.'"tfyno])/`), LiteralContent), function($skip, $loc, $0, $1, $2) {
8962
9070
  var literal = $2;
8963
9071
  return {
8964
9072
  type: "Literal",
@@ -8984,7 +9092,7 @@ ${input.slice(result.pos)}
8984
9092
  function NullLiteral(ctx, state) {
8985
9093
  return $EVENT(ctx, state, "NullLiteral", NullLiteral$0);
8986
9094
  }
8987
- var BooleanLiteral$0 = $T($S($EXPECT($R12, "BooleanLiteral /(?=true|false|yes|no|on|off)/"), _BooleanLiteral), function(value) {
9095
+ var BooleanLiteral$0 = $T($S($EXPECT($R14, "BooleanLiteral /(?=true|false|yes|no|on|off)/"), _BooleanLiteral), function(value) {
8988
9096
  return value[1];
8989
9097
  });
8990
9098
  function BooleanLiteral(ctx, state) {
@@ -9010,14 +9118,14 @@ ${input.slice(result.pos)}
9010
9118
  function CoffeeScriptBooleanLiteral(ctx, state) {
9011
9119
  return $EVENT_C(ctx, state, "CoffeeScriptBooleanLiteral", CoffeeScriptBooleanLiteral$$);
9012
9120
  }
9013
- var Identifier$0 = $T($S($EXPECT($R13, "Identifier /(?=\\p{ID_Start}|[_$])/"), $N(ReservedWord), IdentifierName), function(value) {
9121
+ var Identifier$0 = $T($S($EXPECT($R15, "Identifier /(?=\\p{ID_Start}|[_$])/"), $N(ReservedWord), IdentifierName), function(value) {
9014
9122
  var id = value[2];
9015
9123
  return id;
9016
9124
  });
9017
9125
  function Identifier(ctx, state) {
9018
9126
  return $EVENT(ctx, state, "Identifier", Identifier$0);
9019
9127
  }
9020
- var IdentifierName$0 = $TR($EXPECT($R14, "IdentifierName /(?:\\p{ID_Start}|[_$])(?:\\p{ID_Continue}|[\\u200C\\u200D$])*/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
9128
+ var IdentifierName$0 = $TR($EXPECT($R16, "IdentifierName /(?:\\p{ID_Start}|[_$])(?:\\p{ID_Continue}|[\\u200C\\u200D$])*/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
9021
9129
  return {
9022
9130
  type: "Identifier",
9023
9131
  name: $0,
@@ -9039,7 +9147,7 @@ ${input.slice(result.pos)}
9039
9147
  function UpcomingAssignment(ctx, state) {
9040
9148
  return $EVENT(ctx, state, "UpcomingAssignment", UpcomingAssignment$0);
9041
9149
  }
9042
- var ArrayLiteral$0 = $T($S($EXPECT($R15, "ArrayLiteral /(?=\\[)/"), _ArrayLiteral), function(value) {
9150
+ var ArrayLiteral$0 = $T($S($EXPECT($R17, "ArrayLiteral /(?=\\[)/"), _ArrayLiteral), function(value) {
9043
9151
  return value[1];
9044
9152
  });
9045
9153
  function ArrayLiteral(ctx, state) {
@@ -9140,8 +9248,26 @@ ${input.slice(result.pos)}
9140
9248
  end: e
9141
9249
  };
9142
9250
  });
9251
+ var RangeExpression$1 = $TS($S(ExtendedExpression, __, DotDot, $Y($S(__, CloseBracket))), function($skip, $loc, $0, $1, $2, $3, $4) {
9252
+ var s = $1;
9253
+ var ws = $2;
9254
+ return {
9255
+ type: "RangeExpression",
9256
+ children: ["[]", {
9257
+ type: "Error",
9258
+ message: "Infinite range [x..] is only valid in for loops"
9259
+ }],
9260
+ start: s,
9261
+ end: {
9262
+ type: "Identifier",
9263
+ name: "Infinity",
9264
+ children: ["Infinity"]
9265
+ }
9266
+ };
9267
+ });
9268
+ var RangeExpression$$ = [RangeExpression$0, RangeExpression$1];
9143
9269
  function RangeExpression(ctx, state) {
9144
- return $EVENT(ctx, state, "RangeExpression", RangeExpression$0);
9270
+ return $EVENT_C(ctx, state, "RangeExpression", RangeExpression$$);
9145
9271
  }
9146
9272
  var ArrayLiteralContent$0 = RangeExpression;
9147
9273
  var ArrayLiteralContent$1 = $S(NestedElementList, $Y($S(__, CloseBracket)));
@@ -9237,7 +9363,7 @@ ${input.slice(result.pos)}
9237
9363
  var ArrayElementExpression$1 = $T($S(ImplicitObjectLiteral, $Y(ArrayElementDelimiter)), function(value) {
9238
9364
  return value[0];
9239
9365
  });
9240
- var ArrayElementExpression$2 = $TS($S($E(ExtendedExpression), __, DotDotDot, $Y(ArrayElementDelimiter)), function($skip, $loc, $0, $1, $2, $3, $4) {
9366
+ var ArrayElementExpression$2 = $TS($S(ExtendedExpression, $E(_), DotDotDot, $Y(ArrayElementDelimiter)), function($skip, $loc, $0, $1, $2, $3, $4) {
9241
9367
  var exp = $1;
9242
9368
  var ws = $2;
9243
9369
  var dots = $3;
@@ -9246,7 +9372,7 @@ ${input.slice(result.pos)}
9246
9372
  }
9247
9373
  return {
9248
9374
  type: "SpreadElement",
9249
- children: [...ws, dots, exp],
9375
+ children: [ws, dots, exp],
9250
9376
  names: exp.names
9251
9377
  };
9252
9378
  });
@@ -9463,7 +9589,7 @@ ${input.slice(result.pos)}
9463
9589
  children: [ws, ...prop.children]
9464
9590
  };
9465
9591
  });
9466
- var PropertyDefinition$1 = $TS($S($E(_), $TEXT($EXPECT($R16, "PropertyDefinition /[!+-]?/")), PropertyName, $Y(ObjectPropertyDelimiter)), function($skip, $loc, $0, $1, $2, $3, $4) {
9592
+ var PropertyDefinition$1 = $TS($S($E(_), $TEXT($EXPECT($R18, "PropertyDefinition /[!+-]?/")), PropertyName, $Y(ObjectPropertyDelimiter)), function($skip, $loc, $0, $1, $2, $3, $4) {
9467
9593
  var ws = $1;
9468
9594
  var toggle = $2;
9469
9595
  var id = $3;
@@ -9648,7 +9774,7 @@ ${input.slice(result.pos)}
9648
9774
  implicit: true
9649
9775
  };
9650
9776
  });
9651
- var ComputedPropertyName$2 = $TS($S(InsertOpenBracket, $EXPECT($R17, "ComputedPropertyName /[+-]/"), NumericLiteral, InsertCloseBracket), function($skip, $loc, $0, $1, $2, $3, $4) {
9777
+ var ComputedPropertyName$2 = $TS($S(InsertOpenBracket, $EXPECT($R10, "ComputedPropertyName /[+-]/"), NumericLiteral, InsertCloseBracket), function($skip, $loc, $0, $1, $2, $3, $4) {
9652
9778
  const expression = [$2, $3];
9653
9779
  return {
9654
9780
  type: "ComputedPropertyName",
@@ -9657,7 +9783,18 @@ ${input.slice(result.pos)}
9657
9783
  implicit: true
9658
9784
  };
9659
9785
  });
9660
- var ComputedPropertyName$$ = [ComputedPropertyName$0, ComputedPropertyName$1, ComputedPropertyName$2];
9786
+ var ComputedPropertyName$3 = $TS($S(InsertOpenBracket, PartialPlaceholder, InsertCloseBracket), function($skip, $loc, $0, $1, $2, $3) {
9787
+ var open = $1;
9788
+ var expression = $2;
9789
+ var close = $3;
9790
+ return {
9791
+ type: "ComputedPropertyName",
9792
+ expression,
9793
+ children: [open, expression, close],
9794
+ implicit: true
9795
+ };
9796
+ });
9797
+ var ComputedPropertyName$$ = [ComputedPropertyName$0, ComputedPropertyName$1, ComputedPropertyName$2, ComputedPropertyName$3];
9661
9798
  function ComputedPropertyName(ctx, state) {
9662
9799
  return $EVENT_C(ctx, state, "ComputedPropertyName", ComputedPropertyName$$);
9663
9800
  }
@@ -10027,7 +10164,7 @@ ${input.slice(result.pos)}
10027
10164
  function IdentifierBinaryOp(ctx, state) {
10028
10165
  return $EVENT(ctx, state, "IdentifierBinaryOp", IdentifierBinaryOp$0);
10029
10166
  }
10030
- var BinaryOp$0 = $T($S($EXPECT($R18, "BinaryOp /(?=\\p{ID_Start}|[_$^\xAB\xBB\u22D9\u2264\u2265\u2208\u220B\u2209\u220C\u2263\u2261\u2262\u2260=\u2016\u2047&|*\\/!?%<>\u29FA+-])/"), _BinaryOp), function(value) {
10167
+ var BinaryOp$0 = $T($S($EXPECT($R19, "BinaryOp /(?=\\p{ID_Start}|[_$^\xAB\xBB\u22D9\u2264\u2265\u2208\u220B\u2209\u220C\u2263\u2261\u2262\u2260=\u2016\u2047&|*\\/!?%<>\u29FA+-])/"), _BinaryOp), function(value) {
10031
10168
  var op = value[1];
10032
10169
  return op;
10033
10170
  });
@@ -10162,7 +10299,7 @@ ${input.slice(result.pos)}
10162
10299
  prec: "^^"
10163
10300
  };
10164
10301
  });
10165
- var BinaryOpSymbol$35 = $TV($C($EXPECT($R19, "BinaryOpSymbol /!\\^\\^?/"), $S($EXPECT($L101, 'BinaryOpSymbol "xnor"'), NonIdContinue)), function($skip, $loc, $0, $1) {
10302
+ var BinaryOpSymbol$35 = $TV($C($EXPECT($R20, "BinaryOpSymbol /!\\^\\^?/"), $S($EXPECT($L101, 'BinaryOpSymbol "xnor"'), NonIdContinue)), function($skip, $loc, $0, $1) {
10166
10303
  return {
10167
10304
  call: module.getRef("xnor"),
10168
10305
  special: true,
@@ -10256,6 +10393,16 @@ ${input.slice(result.pos)}
10256
10393
  function BinaryOpSymbol(ctx, state) {
10257
10394
  return $EVENT_C(ctx, state, "BinaryOpSymbol", BinaryOpSymbol$$);
10258
10395
  }
10396
+ var ActualIn$0 = $T($S(CoffeeOfEnabled, Of), function(value) {
10397
+ return value[1];
10398
+ });
10399
+ var ActualIn$1 = $T($S($N(CoffeeOfEnabled), In), function(value) {
10400
+ return value[1];
10401
+ });
10402
+ var ActualIn$$ = [ActualIn$0, ActualIn$1];
10403
+ function ActualIn(ctx, state) {
10404
+ return $EVENT_C(ctx, state, "ActualIn", ActualIn$$);
10405
+ }
10259
10406
  var CoffeeOfOp$0 = $T($S(Of), function(value) {
10260
10407
  return "in";
10261
10408
  });
@@ -10316,24 +10463,24 @@ ${input.slice(result.pos)}
10316
10463
  function Xor(ctx, state) {
10317
10464
  return $EVENT_C(ctx, state, "Xor", Xor$$);
10318
10465
  }
10319
- var Xnor$0 = $R$0($EXPECT($R19, "Xnor /!\\^\\^?/"));
10466
+ var Xnor$0 = $R$0($EXPECT($R20, "Xnor /!\\^\\^?/"));
10320
10467
  var Xnor$1 = $EXPECT($L101, 'Xnor "xnor"');
10321
10468
  var Xnor$$ = [Xnor$0, Xnor$1];
10322
10469
  function Xnor(ctx, state) {
10323
10470
  return $EVENT_C(ctx, state, "Xnor", Xnor$$);
10324
10471
  }
10325
- var UnaryOp$0 = $TR($EXPECT($R20, "UnaryOp /(?!\\+\\+|--)[!~+-](?!\\s)/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
10472
+ var UnaryOp$0 = $TR($EXPECT($R21, "UnaryOp /(?!\\+\\+|--)[!~+-](?!\\s)/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
10326
10473
  return { $loc, token: $0 };
10327
10474
  });
10328
10475
  var UnaryOp$1 = AwaitOp;
10329
- var UnaryOp$2 = $TS($S($C(Delete, Void, Typeof), $N($EXPECT($R21, "UnaryOp /[:.]/")), $E(_)), function($skip, $loc, $0, $1, $2, $3) {
10476
+ var UnaryOp$2 = $TS($S($C(Delete, Void, Typeof), $N($EXPECT($R22, "UnaryOp /[:.]/")), $E(_)), function($skip, $loc, $0, $1, $2, $3) {
10330
10477
  var op = $1;
10331
10478
  var ws = $3;
10332
10479
  if (!ws)
10333
10480
  return [op, [" "]];
10334
10481
  return [op, ws];
10335
10482
  });
10336
- var UnaryOp$3 = $T($S(Not, $N($EXPECT($R21, "UnaryOp /[:.]/")), $E($EXPECT($L16, 'UnaryOp " "')), $E(_)), function(value) {
10483
+ var UnaryOp$3 = $T($S(Not, $N($EXPECT($R22, "UnaryOp /[:.]/")), $E($EXPECT($L16, 'UnaryOp " "')), $E(_)), function(value) {
10337
10484
  return [value[0], value[3]];
10338
10485
  });
10339
10486
  var UnaryOp$$ = [UnaryOp$0, UnaryOp$1, UnaryOp$2, UnaryOp$3];
@@ -10428,7 +10575,7 @@ ${input.slice(result.pos)}
10428
10575
  function NonPipelinePostfixedExpression(ctx, state) {
10429
10576
  return $EVENT(ctx, state, "NonPipelinePostfixedExpression", NonPipelinePostfixedExpression$0);
10430
10577
  }
10431
- var PostfixStatement$0 = $T($S($EXPECT($R22, "PostfixStatement /(?=for|if|loop|unless|until|while)/"), _PostfixStatement), function(value) {
10578
+ var PostfixStatement$0 = $T($S($EXPECT($R23, "PostfixStatement /(?=for|if|loop|unless|until|while)/"), _PostfixStatement), function(value) {
10432
10579
  return value[1];
10433
10580
  });
10434
10581
  function PostfixStatement(ctx, state) {
@@ -10561,7 +10708,7 @@ ${input.slice(result.pos)}
10561
10708
  function UnlessClause(ctx, state) {
10562
10709
  return $EVENT(ctx, state, "UnlessClause", UnlessClause$0);
10563
10710
  }
10564
- var IterationStatement$0 = $T($S($EXPECT($R23, "IterationStatement /(?=loop|do|for|until|while)/"), _IterationStatement), function(value) {
10711
+ var IterationStatement$0 = $T($S($EXPECT($R24, "IterationStatement /(?=loop|do|for|until|while)/"), _IterationStatement), function(value) {
10565
10712
  return value[1];
10566
10713
  });
10567
10714
  function IterationStatement(ctx, state) {
@@ -10914,7 +11061,7 @@ ${input.slice(result.pos)}
10914
11061
  names: binding.names
10915
11062
  };
10916
11063
  });
10917
- var ForDeclaration$1 = $TS($S(InsertConst, ForBinding, $EXPECT($R24, "ForDeclaration /(?=[\\s\\),])/")), function($skip, $loc, $0, $1, $2, $3) {
11064
+ var ForDeclaration$1 = $TS($S(InsertConst, ForBinding, $EXPECT($R25, "ForDeclaration /(?=[\\s\\),])/")), function($skip, $loc, $0, $1, $2, $3) {
10918
11065
  var c = $1;
10919
11066
  var binding = $2;
10920
11067
  return {
@@ -11743,7 +11890,7 @@ ${input.slice(result.pos)}
11743
11890
  function UnprocessedModuleSpecifier(ctx, state) {
11744
11891
  return $EVENT_C(ctx, state, "UnprocessedModuleSpecifier", UnprocessedModuleSpecifier$$);
11745
11892
  }
11746
- var UnquotedSpecifier$0 = $TV($EXPECT($R25, 'UnquotedSpecifier /[^;"\\s]+/'), function($skip, $loc, $0, $1) {
11893
+ var UnquotedSpecifier$0 = $TV($EXPECT($R26, 'UnquotedSpecifier /[^;"\\s]+/'), function($skip, $loc, $0, $1) {
11747
11894
  var spec = $0;
11748
11895
  return { $loc, token: `"${spec}"` };
11749
11896
  });
@@ -11996,7 +12143,7 @@ ${input.slice(result.pos)}
11996
12143
  function VariableDeclarationList(ctx, state) {
11997
12144
  return $EVENT(ctx, state, "VariableDeclarationList", VariableDeclarationList$0);
11998
12145
  }
11999
- var NumericLiteral$0 = $TS($S($EXPECT($R26, "NumericLiteral /(?=[0-9.])/"), NumericLiteralKind), function($skip, $loc, $0, $1, $2) {
12146
+ var NumericLiteral$0 = $TS($S($EXPECT($R27, "NumericLiteral /(?=[0-9.])/"), NumericLiteralKind), function($skip, $loc, $0, $1, $2) {
12000
12147
  var token = $2;
12001
12148
  return { type: "NumericLiteral", $loc, token };
12002
12149
  });
@@ -12012,36 +12159,36 @@ ${input.slice(result.pos)}
12012
12159
  function NumericLiteralKind(ctx, state) {
12013
12160
  return $EVENT_C(ctx, state, "NumericLiteralKind", NumericLiteralKind$$);
12014
12161
  }
12015
- var DecimalBigIntegerLiteral$0 = $R$0($EXPECT($R27, "DecimalBigIntegerLiteral /(?:0|[1-9](?:_[0-9]|[0-9])*)n/"));
12162
+ var DecimalBigIntegerLiteral$0 = $R$0($EXPECT($R28, "DecimalBigIntegerLiteral /(?:0|[1-9](?:_[0-9]|[0-9])*)n/"));
12016
12163
  function DecimalBigIntegerLiteral(ctx, state) {
12017
12164
  return $EVENT(ctx, state, "DecimalBigIntegerLiteral", DecimalBigIntegerLiteral$0);
12018
12165
  }
12019
- var DecimalLiteral$0 = $TV($TEXT($EXPECT($R28, "DecimalLiteral /(?:0|[1-9](?:_[0-9]|[0-9])*)(?=\\.(?:\\p{ID_Start}|[_$]))/")), function($skip, $loc, $0, $1) {
12166
+ var DecimalLiteral$0 = $TV($TEXT($EXPECT($R29, "DecimalLiteral /(?:0|[1-9](?:_[0-9]|[0-9])*)(?=\\.(?:\\p{ID_Start}|[_$]))/")), function($skip, $loc, $0, $1) {
12020
12167
  return $1 + ".";
12021
12168
  });
12022
- var DecimalLiteral$1 = $TEXT($S($EXPECT($R29, "DecimalLiteral /(?:0|[1-9](?:_[0-9]|[0-9])*)(?:\\.(?:[0-9](?:_[0-9]|[0-9])*))?/"), $E(ExponentPart)));
12023
- var DecimalLiteral$2 = $TEXT($S($EXPECT($R30, "DecimalLiteral /(?:\\.[0-9](?:_[0-9]|[0-9])*)/"), $E(ExponentPart)));
12169
+ var DecimalLiteral$1 = $TEXT($S($EXPECT($R30, "DecimalLiteral /(?:0|[1-9](?:_[0-9]|[0-9])*)(?:\\.(?:[0-9](?:_[0-9]|[0-9])*))?/"), $E(ExponentPart)));
12170
+ var DecimalLiteral$2 = $TEXT($S($EXPECT($R31, "DecimalLiteral /(?:\\.[0-9](?:_[0-9]|[0-9])*)/"), $E(ExponentPart)));
12024
12171
  var DecimalLiteral$$ = [DecimalLiteral$0, DecimalLiteral$1, DecimalLiteral$2];
12025
12172
  function DecimalLiteral(ctx, state) {
12026
12173
  return $EVENT_C(ctx, state, "DecimalLiteral", DecimalLiteral$$);
12027
12174
  }
12028
- var ExponentPart$0 = $R$0($EXPECT($R31, "ExponentPart /(?:[eE][+-]?[0-9]+(?:_[0-9]|[0-9])*)/"));
12175
+ var ExponentPart$0 = $R$0($EXPECT($R32, "ExponentPart /(?:[eE][+-]?[0-9]+(?:_[0-9]|[0-9])*)/"));
12029
12176
  function ExponentPart(ctx, state) {
12030
12177
  return $EVENT(ctx, state, "ExponentPart", ExponentPart$0);
12031
12178
  }
12032
- var BinaryIntegerLiteral$0 = $R$0($EXPECT($R32, "BinaryIntegerLiteral /0[bB][01](?:[01]|_[01])*n?/"));
12179
+ var BinaryIntegerLiteral$0 = $R$0($EXPECT($R33, "BinaryIntegerLiteral /0[bB][01](?:[01]|_[01])*n?/"));
12033
12180
  function BinaryIntegerLiteral(ctx, state) {
12034
12181
  return $EVENT(ctx, state, "BinaryIntegerLiteral", BinaryIntegerLiteral$0);
12035
12182
  }
12036
- var OctalIntegerLiteral$0 = $R$0($EXPECT($R33, "OctalIntegerLiteral /0[oO][0-7](?:[0-7]|_[0-7])*n?/"));
12183
+ var OctalIntegerLiteral$0 = $R$0($EXPECT($R34, "OctalIntegerLiteral /0[oO][0-7](?:[0-7]|_[0-7])*n?/"));
12037
12184
  function OctalIntegerLiteral(ctx, state) {
12038
12185
  return $EVENT(ctx, state, "OctalIntegerLiteral", OctalIntegerLiteral$0);
12039
12186
  }
12040
- var HexIntegerLiteral$0 = $R$0($EXPECT($R34, "HexIntegerLiteral /0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_[0-9a-fA-F])*n?/"));
12187
+ var HexIntegerLiteral$0 = $R$0($EXPECT($R35, "HexIntegerLiteral /0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_[0-9a-fA-F])*n?/"));
12041
12188
  function HexIntegerLiteral(ctx, state) {
12042
12189
  return $EVENT(ctx, state, "HexIntegerLiteral", HexIntegerLiteral$0);
12043
12190
  }
12044
- var IntegerLiteral$0 = $TS($S($EXPECT($R35, "IntegerLiteral /(?=[0-9])/"), IntegerLiteralKind), function($skip, $loc, $0, $1, $2) {
12191
+ var IntegerLiteral$0 = $TS($S($EXPECT($R36, "IntegerLiteral /(?=[0-9])/"), IntegerLiteralKind), function($skip, $loc, $0, $1, $2) {
12045
12192
  var token = $2;
12046
12193
  return { $loc, token };
12047
12194
  });
@@ -12057,7 +12204,7 @@ ${input.slice(result.pos)}
12057
12204
  function IntegerLiteralKind(ctx, state) {
12058
12205
  return $EVENT_C(ctx, state, "IntegerLiteralKind", IntegerLiteralKind$$);
12059
12206
  }
12060
- var DecimalIntegerLiteral$0 = $R$0($EXPECT($R36, "DecimalIntegerLiteral /(?:0|[1-9](?:_[0-9]|[0-9])*)/"));
12207
+ var DecimalIntegerLiteral$0 = $R$0($EXPECT($R37, "DecimalIntegerLiteral /(?:0|[1-9](?:_[0-9]|[0-9])*)/"));
12061
12208
  function DecimalIntegerLiteral(ctx, state) {
12062
12209
  return $EVENT(ctx, state, "DecimalIntegerLiteral", DecimalIntegerLiteral$0);
12063
12210
  }
@@ -12081,25 +12228,25 @@ ${input.slice(result.pos)}
12081
12228
  function StringLiteral(ctx, state) {
12082
12229
  return $EVENT_C(ctx, state, "StringLiteral", StringLiteral$$);
12083
12230
  }
12084
- var DoubleStringCharacters$0 = $TR($EXPECT($R37, 'DoubleStringCharacters /(?:\\\\.|[^"])*/'), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12231
+ var DoubleStringCharacters$0 = $TR($EXPECT($R38, 'DoubleStringCharacters /(?:\\\\.|[^"])*/'), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12085
12232
  return { $loc, token: $0 };
12086
12233
  });
12087
12234
  function DoubleStringCharacters(ctx, state) {
12088
12235
  return $EVENT(ctx, state, "DoubleStringCharacters", DoubleStringCharacters$0);
12089
12236
  }
12090
- var SingleStringCharacters$0 = $TR($EXPECT($R38, "SingleStringCharacters /(?:\\\\.|[^'])*/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12237
+ var SingleStringCharacters$0 = $TR($EXPECT($R39, "SingleStringCharacters /(?:\\\\.|[^'])*/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12091
12238
  return { $loc, token: $0 };
12092
12239
  });
12093
12240
  function SingleStringCharacters(ctx, state) {
12094
12241
  return $EVENT(ctx, state, "SingleStringCharacters", SingleStringCharacters$0);
12095
12242
  }
12096
- var TripleDoubleStringCharacters$0 = $TR($EXPECT($R39, 'TripleDoubleStringCharacters /(?:"(?!"")|#(?!\\{)|\\\\.|[^#"])+/'), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12243
+ var TripleDoubleStringCharacters$0 = $TR($EXPECT($R40, 'TripleDoubleStringCharacters /(?:"(?!"")|#(?!\\{)|\\\\.|[^#"])+/'), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12097
12244
  return { $loc, token: $0 };
12098
12245
  });
12099
12246
  function TripleDoubleStringCharacters(ctx, state) {
12100
12247
  return $EVENT(ctx, state, "TripleDoubleStringCharacters", TripleDoubleStringCharacters$0);
12101
12248
  }
12102
- var TripleSingleStringCharacters$0 = $TR($EXPECT($R40, "TripleSingleStringCharacters /(?:'(?!'')|\\\\.|[^'])*/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12249
+ var TripleSingleStringCharacters$0 = $TR($EXPECT($R41, "TripleSingleStringCharacters /(?:'(?!'')|\\\\.|[^'])*/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12103
12250
  return { $loc, token: $0 };
12104
12251
  });
12105
12252
  function TripleSingleStringCharacters(ctx, state) {
@@ -12122,7 +12269,7 @@ ${input.slice(result.pos)}
12122
12269
  function CoffeeInterpolatedDoubleQuotedString(ctx, state) {
12123
12270
  return $EVENT(ctx, state, "CoffeeInterpolatedDoubleQuotedString", CoffeeInterpolatedDoubleQuotedString$0);
12124
12271
  }
12125
- var CoffeeDoubleQuotedStringCharacters$0 = $TR($EXPECT($R41, 'CoffeeDoubleQuotedStringCharacters /(?:\\\\.|#(?!\\{)|[^"#])+/'), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12272
+ var CoffeeDoubleQuotedStringCharacters$0 = $TR($EXPECT($R42, 'CoffeeDoubleQuotedStringCharacters /(?:\\\\.|#(?!\\{)|[^"#])+/'), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12126
12273
  return { $loc, token: $0 };
12127
12274
  });
12128
12275
  function CoffeeDoubleQuotedStringCharacters(ctx, state) {
@@ -12142,7 +12289,7 @@ ${input.slice(result.pos)}
12142
12289
  function RegularExpressionClass(ctx, state) {
12143
12290
  return $EVENT(ctx, state, "RegularExpressionClass", RegularExpressionClass$0);
12144
12291
  }
12145
- var RegularExpressionClassCharacters$0 = $TR($EXPECT($R42, "RegularExpressionClassCharacters /(?:\\\\.|[^\\]])*/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12292
+ var RegularExpressionClassCharacters$0 = $TR($EXPECT($R43, "RegularExpressionClassCharacters /(?:\\\\.|[^\\]])*/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12146
12293
  return { $loc, token: $0 };
12147
12294
  });
12148
12295
  function RegularExpressionClassCharacters(ctx, state) {
@@ -12199,7 +12346,7 @@ ${input.slice(result.pos)}
12199
12346
  var HeregexPart$2 = $T($S(TemplateSubstitution), function(value) {
12200
12347
  return { "type": "Substitution", "children": value[0] };
12201
12348
  });
12202
- var HeregexPart$3 = $TR($EXPECT($R43, "HeregexPart /(?:\\\\.)/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12349
+ var HeregexPart$3 = $TR($EXPECT($R44, "HeregexPart /(?:\\\\.)/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12203
12350
  let token = $0;
12204
12351
  switch ($0[1]) {
12205
12352
  case "\n":
@@ -12217,13 +12364,13 @@ ${input.slice(result.pos)}
12217
12364
  var HeregexPart$4 = $TS($S(HeregexComment), function($skip, $loc, $0, $1) {
12218
12365
  return { $loc, token: "" };
12219
12366
  });
12220
- var HeregexPart$5 = $TR($EXPECT($R44, "HeregexPart /[\\s]+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12367
+ var HeregexPart$5 = $TR($EXPECT($R45, "HeregexPart /[\\s]+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12221
12368
  return { $loc, token: "" };
12222
12369
  });
12223
- var HeregexPart$6 = $TR($EXPECT($R45, "HeregexPart /\\/(?!\\/\\/)/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12370
+ var HeregexPart$6 = $TR($EXPECT($R46, "HeregexPart /\\/(?!\\/\\/)/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12224
12371
  return { $loc, token: "\\/" };
12225
12372
  });
12226
- var HeregexPart$7 = $TR($EXPECT($R46, "HeregexPart /[^[\\/\\s#\\\\]+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12373
+ var HeregexPart$7 = $TR($EXPECT($R47, "HeregexPart /[^[\\/\\s#\\\\]+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12227
12374
  return { $loc, token: $0 };
12228
12375
  });
12229
12376
  var HeregexPart$$ = [HeregexPart$0, HeregexPart$1, HeregexPart$2, HeregexPart$3, HeregexPart$4, HeregexPart$5, HeregexPart$6, HeregexPart$7];
@@ -12236,7 +12383,7 @@ ${input.slice(result.pos)}
12236
12383
  function HeregexComment(ctx, state) {
12237
12384
  return $EVENT_C(ctx, state, "HeregexComment", HeregexComment$$);
12238
12385
  }
12239
- var RegularExpressionBody$0 = $S($N($R$0($EXPECT($R47, "RegularExpressionBody /[*\\/\\r\\n]/"))), $Q(RegExpPart));
12386
+ var RegularExpressionBody$0 = $S($N($R$0($EXPECT($R48, "RegularExpressionBody /[*\\/\\r\\n]/"))), $Q(RegExpPart));
12240
12387
  function RegularExpressionBody(ctx, state) {
12241
12388
  return $EVENT(ctx, state, "RegularExpressionBody", RegularExpressionBody$0);
12242
12389
  }
@@ -12246,15 +12393,15 @@ ${input.slice(result.pos)}
12246
12393
  function RegExpPart(ctx, state) {
12247
12394
  return $EVENT_C(ctx, state, "RegExpPart", RegExpPart$$);
12248
12395
  }
12249
- var RegExpCharacter$0 = $R$0($EXPECT($R48, "RegExpCharacter /(?:\\\\.|[^[\\/\\r\\n])+/"));
12396
+ var RegExpCharacter$0 = $R$0($EXPECT($R49, "RegExpCharacter /(?:\\\\.|[^[\\/\\r\\n])+/"));
12250
12397
  function RegExpCharacter(ctx, state) {
12251
12398
  return $EVENT(ctx, state, "RegExpCharacter", RegExpCharacter$0);
12252
12399
  }
12253
- var RegularExpressionFlags$0 = $R$0($EXPECT($R49, "RegularExpressionFlags /(?:\\p{ID_Continue}|[\\u200C\\u200D$])*/"));
12400
+ var RegularExpressionFlags$0 = $R$0($EXPECT($R50, "RegularExpressionFlags /(?:\\p{ID_Continue}|[\\u200C\\u200D$])*/"));
12254
12401
  function RegularExpressionFlags(ctx, state) {
12255
12402
  return $EVENT(ctx, state, "RegularExpressionFlags", RegularExpressionFlags$0);
12256
12403
  }
12257
- var TemplateLiteral$0 = $T($S($EXPECT($R50, "TemplateLiteral /(?=[`'\"])/"), _TemplateLiteral), function(value) {
12404
+ var TemplateLiteral$0 = $T($S($EXPECT($R51, "TemplateLiteral /(?=[`'\"])/"), _TemplateLiteral), function(value) {
12258
12405
  return value[1];
12259
12406
  });
12260
12407
  function TemplateLiteral(ctx, state) {
@@ -12294,28 +12441,28 @@ ${input.slice(result.pos)}
12294
12441
  function TemplateSubstitution(ctx, state) {
12295
12442
  return $EVENT(ctx, state, "TemplateSubstitution", TemplateSubstitution$0);
12296
12443
  }
12297
- var TemplateCharacters$0 = $TR($EXPECT($R51, "TemplateCharacters /(?:\\$(?!\\{)|\\\\.|[^$`])+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12444
+ var TemplateCharacters$0 = $TR($EXPECT($R52, "TemplateCharacters /(?:\\$(?!\\{)|\\\\.|[^$`])+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12298
12445
  return { $loc, token: $0 };
12299
12446
  });
12300
12447
  function TemplateCharacters(ctx, state) {
12301
12448
  return $EVENT(ctx, state, "TemplateCharacters", TemplateCharacters$0);
12302
12449
  }
12303
- var TemplateBlockCharacters$0 = $TR($EXPECT($R52, "TemplateBlockCharacters /(?:\\$(?!\\{)|`(?!``)|\\\\.|[^$`])+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12450
+ var TemplateBlockCharacters$0 = $TR($EXPECT($R53, "TemplateBlockCharacters /(?:\\$(?!\\{)|`(?!``)|\\\\.|[^$`])+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12304
12451
  return { $loc, token: $0 };
12305
12452
  });
12306
12453
  function TemplateBlockCharacters(ctx, state) {
12307
12454
  return $EVENT(ctx, state, "TemplateBlockCharacters", TemplateBlockCharacters$0);
12308
12455
  }
12309
- var ReservedWord$0 = $S($R$0($EXPECT($R53, "ReservedWord /(?:on|off|yes|no)(?!\\p{ID_Continue})/")), CoffeeBooleansEnabled);
12310
- var ReservedWord$1 = $S($R$0($EXPECT($R54, "ReservedWord /(?:isnt)(?!\\p{ID_Continue})/")), CoffeeIsntEnabled);
12311
- var ReservedWord$2 = $S($R$0($EXPECT($R55, "ReservedWord /(?:by)(?!\\p{ID_Continue})/")), CoffeeForLoopsEnabled);
12312
- var ReservedWord$3 = $S($R$0($EXPECT($R56, "ReservedWord /(?:of)(?!\\p{ID_Continue})/")), CoffeeOfEnabled);
12313
- var ReservedWord$4 = $R$0($EXPECT($R57, "ReservedWord /(?:and|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|let|loop|new|not|null|or|private|protected|public|return|static|super|switch|this|throw|true|try|typeof|unless|until|var|void|while|with|yield)(?!\\p{ID_Continue})/"));
12456
+ var ReservedWord$0 = $S($R$0($EXPECT($R54, "ReservedWord /(?:on|off|yes|no)(?!\\p{ID_Continue})/")), CoffeeBooleansEnabled);
12457
+ var ReservedWord$1 = $S($R$0($EXPECT($R55, "ReservedWord /(?:isnt)(?!\\p{ID_Continue})/")), CoffeeIsntEnabled);
12458
+ var ReservedWord$2 = $S($R$0($EXPECT($R56, "ReservedWord /(?:by)(?!\\p{ID_Continue})/")), CoffeeForLoopsEnabled);
12459
+ var ReservedWord$3 = $S($R$0($EXPECT($R57, "ReservedWord /(?:of)(?!\\p{ID_Continue})/")), CoffeeOfEnabled);
12460
+ var ReservedWord$4 = $R$0($EXPECT($R58, "ReservedWord /(?:and|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|let|loop|new|not|null|or|private|protected|public|return|static|super|switch|this|throw|true|try|typeof|unless|until|var|void|while|with|yield)(?!\\p{ID_Continue})/"));
12314
12461
  var ReservedWord$$ = [ReservedWord$0, ReservedWord$1, ReservedWord$2, ReservedWord$3, ReservedWord$4];
12315
12462
  function ReservedWord(ctx, state) {
12316
12463
  return $EVENT_C(ctx, state, "ReservedWord", ReservedWord$$);
12317
12464
  }
12318
- var Comment$0 = $T($S($EXPECT($R58, "Comment /(?=\\/|#)/"), _Comment), function(value) {
12465
+ var Comment$0 = $T($S($EXPECT($R59, "Comment /(?=\\/|#)/"), _Comment), function(value) {
12319
12466
  return value[1];
12320
12467
  });
12321
12468
  function Comment(ctx, state) {
@@ -12333,7 +12480,7 @@ ${input.slice(result.pos)}
12333
12480
  function SingleLineComment(ctx, state) {
12334
12481
  return $EVENT_C(ctx, state, "SingleLineComment", SingleLineComment$$);
12335
12482
  }
12336
- var JSSingleLineComment$0 = $TR($EXPECT($R59, "JSSingleLineComment /\\/\\/(?!\\/)[^\\r\\n]*/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12483
+ var JSSingleLineComment$0 = $TR($EXPECT($R60, "JSSingleLineComment /\\/\\/(?!\\/)[^\\r\\n]*/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12337
12484
  return { type: "Comment", $loc, token: $0 };
12338
12485
  });
12339
12486
  function JSSingleLineComment(ctx, state) {
@@ -12345,30 +12492,30 @@ ${input.slice(result.pos)}
12345
12492
  function MultiLineComment(ctx, state) {
12346
12493
  return $EVENT_C(ctx, state, "MultiLineComment", MultiLineComment$$);
12347
12494
  }
12348
- var JSMultiLineComment$0 = $TV($TEXT($S($EXPECT($L123, 'JSMultiLineComment "/*"'), $Q($S($N($EXPECT($L124, 'JSMultiLineComment "*/"')), $EXPECT($R60, "JSMultiLineComment /./"))), $EXPECT($L124, 'JSMultiLineComment "*/"'))), function($skip, $loc, $0, $1) {
12495
+ var JSMultiLineComment$0 = $TV($TEXT($S($EXPECT($L123, 'JSMultiLineComment "/*"'), $Q($S($N($EXPECT($L124, 'JSMultiLineComment "*/"')), $EXPECT($R61, "JSMultiLineComment /./"))), $EXPECT($L124, 'JSMultiLineComment "*/"'))), function($skip, $loc, $0, $1) {
12349
12496
  return { type: "Comment", $loc, token: $1 };
12350
12497
  });
12351
12498
  function JSMultiLineComment(ctx, state) {
12352
12499
  return $EVENT(ctx, state, "JSMultiLineComment", JSMultiLineComment$0);
12353
12500
  }
12354
- var CoffeeSingleLineComment$0 = $TR($EXPECT($R61, "CoffeeSingleLineComment /#(?!##(?!#))([^\\r\\n]*)/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12501
+ var CoffeeSingleLineComment$0 = $TR($EXPECT($R62, "CoffeeSingleLineComment /#(?!##(?!#))([^\\r\\n]*)/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12355
12502
  return { type: "Comment", $loc, token: `//${$1}` };
12356
12503
  });
12357
12504
  function CoffeeSingleLineComment(ctx, state) {
12358
12505
  return $EVENT(ctx, state, "CoffeeSingleLineComment", CoffeeSingleLineComment$0);
12359
12506
  }
12360
- var CoffeeMultiLineComment$0 = $TS($S(CoffeeHereCommentStart, $TEXT($EXPECT($R62, "CoffeeMultiLineComment /[^]*?###/"))), function($skip, $loc, $0, $1, $2) {
12507
+ var CoffeeMultiLineComment$0 = $TS($S(CoffeeHereCommentStart, $TEXT($EXPECT($R63, "CoffeeMultiLineComment /[^]*?###/"))), function($skip, $loc, $0, $1, $2) {
12361
12508
  $2 = $2.slice(0, $2.length - 3).replace(/\*\//g, "* /");
12362
12509
  return { type: "Comment", $loc, token: `/*${$2}*/` };
12363
12510
  });
12364
12511
  function CoffeeMultiLineComment(ctx, state) {
12365
12512
  return $EVENT(ctx, state, "CoffeeMultiLineComment", CoffeeMultiLineComment$0);
12366
12513
  }
12367
- var CoffeeHereCommentStart$0 = $R$0($EXPECT($R63, "CoffeeHereCommentStart /###(?!#)/"));
12514
+ var CoffeeHereCommentStart$0 = $R$0($EXPECT($R64, "CoffeeHereCommentStart /###(?!#)/"));
12368
12515
  function CoffeeHereCommentStart(ctx, state) {
12369
12516
  return $EVENT(ctx, state, "CoffeeHereCommentStart", CoffeeHereCommentStart$0);
12370
12517
  }
12371
- var InlineComment$0 = $TR($EXPECT($R64, "InlineComment /\\/\\*(?:(?!\\*\\/)[^\\r\\n])*\\*\\//"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12518
+ var InlineComment$0 = $TR($EXPECT($R65, "InlineComment /\\/\\*(?:(?!\\*\\/)[^\\r\\n])*\\*\\//"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12372
12519
  return { $loc, token: $0 };
12373
12520
  });
12374
12521
  function InlineComment(ctx, state) {
@@ -12382,13 +12529,13 @@ ${input.slice(result.pos)}
12382
12529
  function TrailingComment(ctx, state) {
12383
12530
  return $EVENT(ctx, state, "TrailingComment", TrailingComment$0);
12384
12531
  }
12385
- var _$0 = $T($S($EXPECT($R65, "_ /(?=[ \\t\\/\\\\])/"), $P($C(NonNewlineWhitespace, InlineComment))), function(value) {
12532
+ var _$0 = $T($S($EXPECT($R66, "_ /(?=[ \\t\\/\\\\])/"), $P($C(NonNewlineWhitespace, InlineComment))), function(value) {
12386
12533
  return value[1];
12387
12534
  });
12388
12535
  function _(ctx, state) {
12389
12536
  return $EVENT(ctx, state, "_", _$0);
12390
12537
  }
12391
- var NonNewlineWhitespace$0 = $TR($EXPECT($R66, "NonNewlineWhitespace /[ \\t]+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12538
+ var NonNewlineWhitespace$0 = $TR($EXPECT($R67, "NonNewlineWhitespace /[ \\t]+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12392
12539
  return { $loc, token: $0 };
12393
12540
  });
12394
12541
  var NonNewlineWhitespace$1 = $T($S($EXPECT($L125, 'NonNewlineWhitespace "\\\\\\\\"'), CoffeeLineContinuationEnabled, EOL), function(value) {
@@ -12405,7 +12552,7 @@ ${input.slice(result.pos)}
12405
12552
  function Trimmed_(ctx, state) {
12406
12553
  return $EVENT(ctx, state, "Trimmed_", Trimmed_$0);
12407
12554
  }
12408
- var __$0 = $T($S($EXPECT($R67, "__ /(?=\\s|\\/|#)/"), $Q($C(Whitespace, Comment))), function(value) {
12555
+ var __$0 = $T($S($EXPECT($R68, "__ /(?=\\s|\\/|#)/"), $Q($C(Whitespace, Comment))), function(value) {
12409
12556
  return value[1];
12410
12557
  });
12411
12558
  var __$1 = $EXPECT($L0, '__ ""');
@@ -12413,7 +12560,7 @@ ${input.slice(result.pos)}
12413
12560
  function __(ctx, state) {
12414
12561
  return $EVENT_C(ctx, state, "__", __$$);
12415
12562
  }
12416
- var Whitespace$0 = $TR($EXPECT($R44, "Whitespace /[\\s]+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12563
+ var Whitespace$0 = $TR($EXPECT($R45, "Whitespace /[\\s]+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12417
12564
  return { $loc, token: $0 };
12418
12565
  });
12419
12566
  function Whitespace(ctx, state) {
@@ -12451,7 +12598,7 @@ ${input.slice(result.pos)}
12451
12598
  function SemicolonDelimiter(ctx, state) {
12452
12599
  return $EVENT(ctx, state, "SemicolonDelimiter", SemicolonDelimiter$0);
12453
12600
  }
12454
- var NonIdContinue$0 = $R$0($EXPECT($R68, "NonIdContinue /(?!\\p{ID_Continue})/"));
12601
+ var NonIdContinue$0 = $R$0($EXPECT($R69, "NonIdContinue /(?!\\p{ID_Continue})/"));
12455
12602
  function NonIdContinue(ctx, state) {
12456
12603
  return $EVENT(ctx, state, "NonIdContinue", NonIdContinue$0);
12457
12604
  }
@@ -12569,7 +12716,7 @@ ${input.slice(result.pos)}
12569
12716
  function CoffeeSubstitutionStart(ctx, state) {
12570
12717
  return $EVENT(ctx, state, "CoffeeSubstitutionStart", CoffeeSubstitutionStart$0);
12571
12718
  }
12572
- var Colon$0 = $TS($S($EXPECT($L15, 'Colon ":"'), $N($EXPECT($L3, 'Colon "="'))), function($skip, $loc, $0, $1, $2) {
12719
+ var Colon$0 = $TS($S($EXPECT($L15, 'Colon ":"'), $N($EXPECT($R70, "Colon /[=:]/"))), function($skip, $loc, $0, $1, $2) {
12573
12720
  return { $loc, token: $1 };
12574
12721
  });
12575
12722
  function Colon(ctx, state) {
@@ -12614,7 +12761,7 @@ ${input.slice(result.pos)}
12614
12761
  var Dot$0 = $TV($EXPECT($L7, 'Dot "."'), function($skip, $loc, $0, $1) {
12615
12762
  return { $loc, token: $1 };
12616
12763
  });
12617
- var Dot$1 = $TS($S($EXPECT($R69, "Dot /['\u2019]s/"), _), function($skip, $loc, $0, $1, $2) {
12764
+ var Dot$1 = $TS($S($EXPECT($R71, "Dot /['\u2019]s/"), _), function($skip, $loc, $0, $1, $2) {
12618
12765
  var ws = $2;
12619
12766
  return [
12620
12767
  { $loc, token: "." },
@@ -12735,7 +12882,7 @@ ${input.slice(result.pos)}
12735
12882
  function If(ctx, state) {
12736
12883
  return $EVENT(ctx, state, "If", If$0);
12737
12884
  }
12738
- var Import$0 = $TS($S($EXPECT($L20, 'Import "import"'), $Y($EXPECT($R70, "Import /\\s/"))), function($skip, $loc, $0, $1, $2) {
12885
+ var Import$0 = $TS($S($EXPECT($L20, 'Import "import"'), $Y($EXPECT($R72, "Import /\\s/"))), function($skip, $loc, $0, $1, $2) {
12739
12886
  return { $loc, token: $1 };
12740
12887
  });
12741
12888
  function Import(ctx, state) {
@@ -13004,49 +13151,55 @@ ${input.slice(result.pos)}
13004
13151
  function Typeof(ctx, state) {
13005
13152
  return $EVENT(ctx, state, "Typeof", Typeof$0);
13006
13153
  }
13007
- var Unless$0 = $TS($S($EXPECT($L202, 'Unless "unless"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
13154
+ var Undefined$0 = $TS($S($EXPECT($L202, 'Undefined "undefined"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
13155
+ return { $loc, token: $1 };
13156
+ });
13157
+ function Undefined(ctx, state) {
13158
+ return $EVENT(ctx, state, "Undefined", Undefined$0);
13159
+ }
13160
+ var Unless$0 = $TS($S($EXPECT($L203, 'Unless "unless"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
13008
13161
  return { $loc, token: $1, negated: true };
13009
13162
  });
13010
13163
  function Unless(ctx, state) {
13011
13164
  return $EVENT(ctx, state, "Unless", Unless$0);
13012
13165
  }
13013
- var Until$0 = $TS($S($EXPECT($L203, 'Until "until"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
13166
+ var Until$0 = $TS($S($EXPECT($L204, 'Until "until"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
13014
13167
  return { $loc, token: $1 };
13015
13168
  });
13016
13169
  function Until(ctx, state) {
13017
13170
  return $EVENT(ctx, state, "Until", Until$0);
13018
13171
  }
13019
- var Using$0 = $TS($S($EXPECT($L204, 'Using "using"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
13172
+ var Using$0 = $TS($S($EXPECT($L205, 'Using "using"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
13020
13173
  return { $loc, token: $1 };
13021
13174
  });
13022
13175
  function Using(ctx, state) {
13023
13176
  return $EVENT(ctx, state, "Using", Using$0);
13024
13177
  }
13025
- var Var$0 = $TS($S($EXPECT($L205, 'Var "var"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
13178
+ var Var$0 = $TS($S($EXPECT($L206, 'Var "var"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
13026
13179
  return { $loc, token: $1 };
13027
13180
  });
13028
13181
  function Var(ctx, state) {
13029
13182
  return $EVENT(ctx, state, "Var", Var$0);
13030
13183
  }
13031
- var Void$0 = $TS($S($EXPECT($L206, 'Void "void"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
13184
+ var Void$0 = $TS($S($EXPECT($L207, 'Void "void"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
13032
13185
  return { $loc, token: $1 };
13033
13186
  });
13034
13187
  function Void(ctx, state) {
13035
13188
  return $EVENT(ctx, state, "Void", Void$0);
13036
13189
  }
13037
- var When$0 = $TS($S($EXPECT($L207, 'When "when"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
13190
+ var When$0 = $TS($S($EXPECT($L208, 'When "when"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
13038
13191
  return { $loc, token: "case" };
13039
13192
  });
13040
13193
  function When(ctx, state) {
13041
13194
  return $EVENT(ctx, state, "When", When$0);
13042
13195
  }
13043
- var While$0 = $TS($S($EXPECT($L208, 'While "while"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
13196
+ var While$0 = $TS($S($EXPECT($L209, 'While "while"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
13044
13197
  return { $loc, token: $1 };
13045
13198
  });
13046
13199
  function While(ctx, state) {
13047
13200
  return $EVENT(ctx, state, "While", While$0);
13048
13201
  }
13049
- var Yield$0 = $TS($S($EXPECT($L209, 'Yield "yield"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
13202
+ var Yield$0 = $TS($S($EXPECT($L210, 'Yield "yield"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
13050
13203
  return { $loc, token: $1, type: "Yield" };
13051
13204
  });
13052
13205
  function Yield(ctx, state) {
@@ -13075,7 +13228,7 @@ ${input.slice(result.pos)}
13075
13228
  function JSXImplicitFragment(ctx, state) {
13076
13229
  return $EVENT(ctx, state, "JSXImplicitFragment", JSXImplicitFragment$0);
13077
13230
  }
13078
- var JSXTag$0 = $T($S($EXPECT($R71, "JSXTag /(?=[<])/"), _JSXTag), function(value) {
13231
+ var JSXTag$0 = $T($S($EXPECT($R73, "JSXTag /(?=[<])/"), _JSXTag), function(value) {
13079
13232
  return value[1];
13080
13233
  });
13081
13234
  function JSXTag(ctx, state) {
@@ -13125,7 +13278,7 @@ ${input.slice(result.pos)}
13125
13278
  function JSXElement(ctx, state) {
13126
13279
  return $EVENT_C(ctx, state, "JSXElement", JSXElement$$);
13127
13280
  }
13128
- var JSXSelfClosingElement$0 = $TS($S($EXPECT($L17, 'JSXSelfClosingElement "<"'), JSXElementName, $E(TypeArguments), $E(JSXAttributes), $E(Whitespace), $EXPECT($L210, 'JSXSelfClosingElement "/>"')), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6) {
13281
+ var JSXSelfClosingElement$0 = $TS($S($EXPECT($L17, 'JSXSelfClosingElement "<"'), JSXElementName, $E(TypeArguments), $E(JSXAttributes), $E(Whitespace), $EXPECT($L211, 'JSXSelfClosingElement "/>"')), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6) {
13129
13282
  return { type: "JSXElement", children: $0, tag: $2 };
13130
13283
  });
13131
13284
  function JSXSelfClosingElement(ctx, state) {
@@ -13159,7 +13312,7 @@ ${input.slice(result.pos)}
13159
13312
  function JSXOptionalClosingElement(ctx, state) {
13160
13313
  return $EVENT_C(ctx, state, "JSXOptionalClosingElement", JSXOptionalClosingElement$$);
13161
13314
  }
13162
- var JSXClosingElement$0 = $S($EXPECT($L211, 'JSXClosingElement "</"'), $E(Whitespace), JSXElementName, $E(Whitespace), $EXPECT($L45, 'JSXClosingElement ">"'));
13315
+ var JSXClosingElement$0 = $S($EXPECT($L212, 'JSXClosingElement "</"'), $E(Whitespace), JSXElementName, $E(Whitespace), $EXPECT($L45, 'JSXClosingElement ">"'));
13163
13316
  function JSXClosingElement(ctx, state) {
13164
13317
  return $EVENT(ctx, state, "JSXClosingElement", JSXClosingElement$0);
13165
13318
  }
@@ -13180,7 +13333,7 @@ ${input.slice(result.pos)}
13180
13333
  ];
13181
13334
  return { type: "JSXFragment", children: parts, jsxChildren: children.jsxChildren };
13182
13335
  });
13183
- var JSXFragment$1 = $TS($S(CoffeeJSXEnabled, $EXPECT($L212, 'JSXFragment "<>"'), $E(JSXChildren), $E(Whitespace), JSXClosingFragment), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
13336
+ var JSXFragment$1 = $TS($S(CoffeeJSXEnabled, $EXPECT($L213, 'JSXFragment "<>"'), $E(JSXChildren), $E(Whitespace), JSXClosingFragment), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
13184
13337
  var children = $3;
13185
13338
  $0 = $0.slice(1);
13186
13339
  return {
@@ -13193,7 +13346,7 @@ ${input.slice(result.pos)}
13193
13346
  function JSXFragment(ctx, state) {
13194
13347
  return $EVENT_C(ctx, state, "JSXFragment", JSXFragment$$);
13195
13348
  }
13196
- var PushJSXOpeningFragment$0 = $TV($EXPECT($L212, 'PushJSXOpeningFragment "<>"'), function($skip, $loc, $0, $1) {
13349
+ var PushJSXOpeningFragment$0 = $TV($EXPECT($L213, 'PushJSXOpeningFragment "<>"'), function($skip, $loc, $0, $1) {
13197
13350
  module.JSXTagStack.push("");
13198
13351
  return $1;
13199
13352
  });
@@ -13210,7 +13363,7 @@ ${input.slice(result.pos)}
13210
13363
  function JSXOptionalClosingFragment(ctx, state) {
13211
13364
  return $EVENT_C(ctx, state, "JSXOptionalClosingFragment", JSXOptionalClosingFragment$$);
13212
13365
  }
13213
- var JSXClosingFragment$0 = $EXPECT($L213, 'JSXClosingFragment "</>"');
13366
+ var JSXClosingFragment$0 = $EXPECT($L214, 'JSXClosingFragment "</>"');
13214
13367
  function JSXClosingFragment(ctx, state) {
13215
13368
  return $EVENT(ctx, state, "JSXClosingFragment", JSXClosingFragment$0);
13216
13369
  }
@@ -13222,7 +13375,7 @@ ${input.slice(result.pos)}
13222
13375
  function JSXElementName(ctx, state) {
13223
13376
  return $EVENT_C(ctx, state, "JSXElementName", JSXElementName$$);
13224
13377
  }
13225
- var JSXIdentifierName$0 = $R$0($EXPECT($R72, "JSXIdentifierName /(?:\\p{ID_Start}|[_$])(?:\\p{ID_Continue}|[\\u200C\\u200D$-])*/"));
13378
+ var JSXIdentifierName$0 = $R$0($EXPECT($R74, "JSXIdentifierName /(?:\\p{ID_Start}|[_$])(?:\\p{ID_Continue}|[\\u200C\\u200D$-])*/"));
13226
13379
  function JSXIdentifierName(ctx, state) {
13227
13380
  return $EVENT(ctx, state, "JSXIdentifierName", JSXIdentifierName$0);
13228
13381
  }
@@ -13401,7 +13554,7 @@ ${input.slice(result.pos)}
13401
13554
  class: $2
13402
13555
  };
13403
13556
  });
13404
- var JSXAttribute$7 = $TS($S($TEXT($EXPECT($R73, "JSXAttribute /[!+-]/")), JSXAttributeName, $Y(JSXAttributeSpace)), function($skip, $loc, $0, $1, $2, $3) {
13557
+ var JSXAttribute$7 = $TS($S($TEXT($EXPECT($R75, "JSXAttribute /[!+-]/")), JSXAttributeName, $Y(JSXAttributeSpace)), function($skip, $loc, $0, $1, $2, $3) {
13405
13558
  var toggle = $1;
13406
13559
  var id = $2;
13407
13560
  const value = toggle === "+" ? "true" : "false";
@@ -13411,11 +13564,11 @@ ${input.slice(result.pos)}
13411
13564
  function JSXAttribute(ctx, state) {
13412
13565
  return $EVENT_C(ctx, state, "JSXAttribute", JSXAttribute$$);
13413
13566
  }
13414
- var JSXAttributeSpace$0 = $R$0($EXPECT($R74, "JSXAttributeSpace /[\\s>]|\\/>/"));
13567
+ var JSXAttributeSpace$0 = $R$0($EXPECT($R76, "JSXAttributeSpace /[\\s>]|\\/>/"));
13415
13568
  function JSXAttributeSpace(ctx, state) {
13416
13569
  return $EVENT(ctx, state, "JSXAttributeSpace", JSXAttributeSpace$0);
13417
13570
  }
13418
- var JSXShorthandString$0 = $TR($EXPECT($R75, "JSXShorthandString /(?:[\\w\\-:]+|\\([^()]*\\)|\\[[^\\[\\]]*\\])+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
13571
+ var JSXShorthandString$0 = $TR($EXPECT($R77, "JSXShorthandString /(?:[\\w\\-:]+|\\([^()]*\\)|\\[[^\\[\\]]*\\])+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
13419
13572
  return quoteString($0);
13420
13573
  });
13421
13574
  var JSXShorthandString$1 = $TS($S(TemplateLiteral), function($skip, $loc, $0, $1) {
@@ -13449,7 +13602,7 @@ ${input.slice(result.pos)}
13449
13602
  }
13450
13603
  return [open, value, close];
13451
13604
  });
13452
- var JSXAttributeValue$4 = $R$0($EXPECT($R76, `JSXAttributeValue /"[^"]*"|'[^']*'/`));
13605
+ var JSXAttributeValue$4 = $R$0($EXPECT($R78, `JSXAttributeValue /"[^"]*"|'[^']*'/`));
13453
13606
  var JSXAttributeValue$$ = [JSXAttributeValue$0, JSXAttributeValue$1, JSXAttributeValue$2, JSXAttributeValue$3, JSXAttributeValue$4];
13454
13607
  function JSXAttributeValue(ctx, state) {
13455
13608
  return $EVENT_C(ctx, state, "JSXAttributeValue", JSXAttributeValue$$);
@@ -13462,7 +13615,7 @@ ${input.slice(result.pos)}
13462
13615
  function InlineJSXAttributeValue(ctx, state) {
13463
13616
  return $EVENT(ctx, state, "InlineJSXAttributeValue", InlineJSXAttributeValue$0);
13464
13617
  }
13465
- var InlineJSXBinaryOpRHS$0 = $TS($S($N($EXPECT($R77, "InlineJSXBinaryOpRHS /[<>]/")), BinaryOp, InlineJSXUnaryExpression), function($skip, $loc, $0, $1, $2, $3) {
13618
+ var InlineJSXBinaryOpRHS$0 = $TS($S($N($EXPECT($R79, "InlineJSXBinaryOpRHS /[<>]/")), BinaryOp, InlineJSXUnaryExpression), function($skip, $loc, $0, $1, $2, $3) {
13466
13619
  var op = $2;
13467
13620
  var rhs = $3;
13468
13621
  return [[], op, [], rhs];
@@ -13479,7 +13632,7 @@ ${input.slice(result.pos)}
13479
13632
  function InlineJSXUnaryExpression(ctx, state) {
13480
13633
  return $EVENT(ctx, state, "InlineJSXUnaryExpression", InlineJSXUnaryExpression$0);
13481
13634
  }
13482
- var InlineJSXUnaryOp$0 = $TR($EXPECT($R78, "InlineJSXUnaryOp /[!~+-](?!\\s|[!~+-]*&)/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
13635
+ var InlineJSXUnaryOp$0 = $TR($EXPECT($R80, "InlineJSXUnaryOp /[!~+-](?!\\s|[!~+-]*&)/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
13483
13636
  return { $loc, token: $0 };
13484
13637
  });
13485
13638
  function InlineJSXUnaryOp(ctx, state) {
@@ -13689,19 +13842,19 @@ ${input.slice(result.pos)}
13689
13842
  function JSXChild(ctx, state) {
13690
13843
  return $EVENT_C(ctx, state, "JSXChild", JSXChild$$);
13691
13844
  }
13692
- var JSXComment$0 = $TS($S($EXPECT($L214, 'JSXComment "<!--"'), JSXCommentContent, $EXPECT($L215, 'JSXComment "-->"')), function($skip, $loc, $0, $1, $2, $3) {
13845
+ var JSXComment$0 = $TS($S($EXPECT($L215, 'JSXComment "<!--"'), JSXCommentContent, $EXPECT($L216, 'JSXComment "-->"')), function($skip, $loc, $0, $1, $2, $3) {
13693
13846
  return ["{/*", $2, "*/}"];
13694
13847
  });
13695
13848
  function JSXComment(ctx, state) {
13696
13849
  return $EVENT(ctx, state, "JSXComment", JSXComment$0);
13697
13850
  }
13698
- var JSXCommentContent$0 = $TR($EXPECT($R79, "JSXCommentContent /(?:-[^-]|[^-]*)*/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
13851
+ var JSXCommentContent$0 = $TR($EXPECT($R81, "JSXCommentContent /(?:-[^-]|[^-]*)*/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
13699
13852
  return { $loc, token: $0.replace(/\*\//g, "* /") };
13700
13853
  });
13701
13854
  function JSXCommentContent(ctx, state) {
13702
13855
  return $EVENT(ctx, state, "JSXCommentContent", JSXCommentContent$0);
13703
13856
  }
13704
- var JSXText$0 = $TR($EXPECT($R80, "JSXText /[^{}<>\\r\\n]+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
13857
+ var JSXText$0 = $TR($EXPECT($R82, "JSXText /[^{}<>\\r\\n]+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
13705
13858
  return {
13706
13859
  type: "JSXText",
13707
13860
  token: $0,
@@ -13876,37 +14029,37 @@ ${input.slice(result.pos)}
13876
14029
  function InterfaceExtendsTarget(ctx, state) {
13877
14030
  return $EVENT(ctx, state, "InterfaceExtendsTarget", InterfaceExtendsTarget$0);
13878
14031
  }
13879
- var TypeKeyword$0 = $TS($S($EXPECT($L216, 'TypeKeyword "type"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14032
+ var TypeKeyword$0 = $TS($S($EXPECT($L217, 'TypeKeyword "type"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
13880
14033
  return { $loc, token: $1 };
13881
14034
  });
13882
14035
  function TypeKeyword(ctx, state) {
13883
14036
  return $EVENT(ctx, state, "TypeKeyword", TypeKeyword$0);
13884
14037
  }
13885
- var Enum$0 = $TS($S($EXPECT($L217, 'Enum "enum"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14038
+ var Enum$0 = $TS($S($EXPECT($L218, 'Enum "enum"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
13886
14039
  return { $loc, token: $1 };
13887
14040
  });
13888
14041
  function Enum(ctx, state) {
13889
14042
  return $EVENT(ctx, state, "Enum", Enum$0);
13890
14043
  }
13891
- var Interface$0 = $TS($S($EXPECT($L218, 'Interface "interface"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14044
+ var Interface$0 = $TS($S($EXPECT($L219, 'Interface "interface"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
13892
14045
  return { $loc, token: $1 };
13893
14046
  });
13894
14047
  function Interface(ctx, state) {
13895
14048
  return $EVENT(ctx, state, "Interface", Interface$0);
13896
14049
  }
13897
- var Global$0 = $TS($S($EXPECT($L219, 'Global "global"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14050
+ var Global$0 = $TS($S($EXPECT($L220, 'Global "global"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
13898
14051
  return { $loc, token: $1 };
13899
14052
  });
13900
14053
  function Global(ctx, state) {
13901
14054
  return $EVENT(ctx, state, "Global", Global$0);
13902
14055
  }
13903
- var Module$0 = $TS($S($EXPECT($L220, 'Module "module"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14056
+ var Module$0 = $TS($S($EXPECT($L221, 'Module "module"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
13904
14057
  return { $loc, token: $1 };
13905
14058
  });
13906
14059
  function Module(ctx, state) {
13907
14060
  return $EVENT(ctx, state, "Module", Module$0);
13908
14061
  }
13909
- var Namespace$0 = $TS($S($EXPECT($L221, 'Namespace "namespace"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14062
+ var Namespace$0 = $TS($S($EXPECT($L222, 'Namespace "namespace"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
13910
14063
  return { $loc, token: $1 };
13911
14064
  });
13912
14065
  function Namespace(ctx, state) {
@@ -14122,7 +14275,7 @@ ${input.slice(result.pos)}
14122
14275
  function TypeProperty(ctx, state) {
14123
14276
  return $EVENT(ctx, state, "TypeProperty", TypeProperty$0);
14124
14277
  }
14125
- var TypeIndexSignature$0 = $S($E($S($R$0($EXPECT($R81, "TypeIndexSignature /[+-]?/")), Readonly, NotDedented)), OpenBracket, TypeIndex, CloseBracket, $E($S(__, $R$0($EXPECT($R17, "TypeIndexSignature /[+-]/")), $Y($S($E(_), QuestionMark)))));
14278
+ var TypeIndexSignature$0 = $S($E($S($R$0($EXPECT($R83, "TypeIndexSignature /[+-]?/")), Readonly, NotDedented)), OpenBracket, TypeIndex, CloseBracket, $E($S(__, $R$0($EXPECT($R10, "TypeIndexSignature /[+-]/")), $Y($S($E(_), QuestionMark)))));
14126
14279
  function TypeIndexSignature(ctx, state) {
14127
14280
  return $EVENT(ctx, state, "TypeIndexSignature", TypeIndexSignature$0);
14128
14281
  }
@@ -14142,11 +14295,13 @@ ${input.slice(result.pos)}
14142
14295
  return { "type": "TypeSuffix", "ts": true, "optional": optional, "children": value };
14143
14296
  });
14144
14297
  var TypeSuffix$2 = $TS($S(NonNullAssertion, $E(_), $E($S(Colon, MaybeIndentedType))), function($skip, $loc, $0, $1, $2, $3) {
14298
+ var nonnull = $1;
14145
14299
  var ct = $3;
14146
14300
  const [colon, t] = ct ?? [];
14147
14301
  return {
14148
14302
  type: "TypeSuffix",
14149
14303
  ts: true,
14304
+ nonnull,
14150
14305
  t,
14151
14306
  children: [$1, $2, colon, t]
14152
14307
  };
@@ -14180,7 +14335,7 @@ ${input.slice(result.pos)}
14180
14335
  function ReturnTypeSuffix(ctx, state) {
14181
14336
  return $EVENT(ctx, state, "ReturnTypeSuffix", ReturnTypeSuffix$0);
14182
14337
  }
14183
- var ReturnType$0 = $TS($S($E($S(__, $EXPECT($L222, 'ReturnType "asserts"'), NonIdContinue)), TypePredicate), function($skip, $loc, $0, $1, $2) {
14338
+ var ReturnType$0 = $TS($S($E($S(__, $EXPECT($L223, 'ReturnType "asserts"'), NonIdContinue)), TypePredicate), function($skip, $loc, $0, $1, $2) {
14184
14339
  var asserts = $1;
14185
14340
  var t = $2;
14186
14341
  if (asserts) {
@@ -14259,7 +14414,7 @@ ${input.slice(result.pos)}
14259
14414
  function TypeUnarySuffix(ctx, state) {
14260
14415
  return $EVENT_C(ctx, state, "TypeUnarySuffix", TypeUnarySuffix$$);
14261
14416
  }
14262
- var TypeUnaryOp$0 = $S($EXPECT($L223, 'TypeUnaryOp "keyof"'), NonIdContinue);
14417
+ var TypeUnaryOp$0 = $S($EXPECT($L224, 'TypeUnaryOp "keyof"'), NonIdContinue);
14263
14418
  var TypeUnaryOp$1 = $S($EXPECT($L184, 'TypeUnaryOp "readonly"'), NonIdContinue);
14264
14419
  var TypeUnaryOp$$ = [TypeUnaryOp$0, TypeUnaryOp$1];
14265
14420
  function TypeUnaryOp(ctx, state) {
@@ -14290,7 +14445,7 @@ ${input.slice(result.pos)}
14290
14445
  function TypeIndexedAccess(ctx, state) {
14291
14446
  return $EVENT_C(ctx, state, "TypeIndexedAccess", TypeIndexedAccess$$);
14292
14447
  }
14293
- var UnknownAlias$0 = $TV($EXPECT($L224, 'UnknownAlias "???"'), function($skip, $loc, $0, $1) {
14448
+ var UnknownAlias$0 = $TV($EXPECT($L225, 'UnknownAlias "???"'), function($skip, $loc, $0, $1) {
14294
14449
  return { $loc, token: "unknown" };
14295
14450
  });
14296
14451
  function UnknownAlias(ctx, state) {
@@ -14416,7 +14571,7 @@ ${input.slice(result.pos)}
14416
14571
  function NestedType(ctx, state) {
14417
14572
  return $EVENT(ctx, state, "NestedType", NestedType$0);
14418
14573
  }
14419
- var TypeConditional$0 = $TS($S($E(_), $EXPECT($R82, "TypeConditional /(?=if|unless)/"), TypeIfThenElse), function($skip, $loc, $0, $1, $2, $3) {
14574
+ var TypeConditional$0 = $TS($S($E(_), $EXPECT($R84, "TypeConditional /(?=if|unless)/"), TypeIfThenElse), function($skip, $loc, $0, $1, $2, $3) {
14420
14575
  return [$1, expressionizeTypeIf($3)];
14421
14576
  });
14422
14577
  var TypeConditional$1 = $TS($S(TypeCondition, NotDedented, QuestionMark, Type, __, Colon, Type), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7) {
@@ -14496,17 +14651,17 @@ ${input.slice(result.pos)}
14496
14651
  }
14497
14652
  var TypeLiteral$0 = TypeTemplateLiteral;
14498
14653
  var TypeLiteral$1 = Literal;
14499
- var TypeLiteral$2 = $TS($S($EXPECT($R17, "TypeLiteral /[+-]/"), NumericLiteral), function($skip, $loc, $0, $1, $2) {
14654
+ var TypeLiteral$2 = $TS($S($EXPECT($R10, "TypeLiteral /[+-]/"), NumericLiteral), function($skip, $loc, $0, $1, $2) {
14500
14655
  var sign = $1;
14501
14656
  var num = $2;
14502
14657
  if (sign[0] === "+")
14503
14658
  return num;
14504
14659
  return $0;
14505
14660
  });
14506
- var TypeLiteral$3 = $TS($S($EXPECT($L206, 'TypeLiteral "void"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14661
+ var TypeLiteral$3 = $TS($S($EXPECT($L207, 'TypeLiteral "void"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14507
14662
  return { type: "VoidType", $loc, token: $1 };
14508
14663
  });
14509
- var TypeLiteral$4 = $TV($EXPECT($L225, 'TypeLiteral "[]"'), function($skip, $loc, $0, $1) {
14664
+ var TypeLiteral$4 = $TV($EXPECT($L226, 'TypeLiteral "[]"'), function($skip, $loc, $0, $1) {
14510
14665
  return { $loc, token: "[]" };
14511
14666
  });
14512
14667
  var TypeLiteral$$ = [TypeLiteral$0, TypeLiteral$1, TypeLiteral$2, TypeLiteral$3, TypeLiteral$4];
@@ -14616,15 +14771,15 @@ ${input.slice(result.pos)}
14616
14771
  function ThisType(ctx, state) {
14617
14772
  return $EVENT(ctx, state, "ThisType", ThisType$0);
14618
14773
  }
14619
- var Shebang$0 = $S($R$0($EXPECT($R83, "Shebang /#![^\\r\\n]*/")), EOL);
14774
+ var Shebang$0 = $S($R$0($EXPECT($R85, "Shebang /#![^\\r\\n]*/")), EOL);
14620
14775
  function Shebang(ctx, state) {
14621
14776
  return $EVENT(ctx, state, "Shebang", Shebang$0);
14622
14777
  }
14623
- var CivetPrologue$0 = $T($S($EXPECT($R84, "CivetPrologue /[\\t ]*/"), DoubleQuote, CivetPrologueContent, DoubleQuote, SimpleStatementDelimiter, $EXPECT($R85, "CivetPrologue /[ \\t]*/"), $C(EOL, $Y(RestOfLine))), function(value) {
14778
+ var CivetPrologue$0 = $T($S($EXPECT($R86, "CivetPrologue /[\\t ]*/"), DoubleQuote, CivetPrologueContent, DoubleQuote, SimpleStatementDelimiter, $EXPECT($R87, "CivetPrologue /[ \\t]*/"), $C(EOL, $Y(RestOfLine))), function(value) {
14624
14779
  var content = value[2];
14625
14780
  return content;
14626
14781
  });
14627
- var CivetPrologue$1 = $T($S($EXPECT($R84, "CivetPrologue /[\\t ]*/"), SingleQuote, CivetPrologueContent, SingleQuote, SimpleStatementDelimiter, $EXPECT($R85, "CivetPrologue /[ \\t]*/"), $C(EOL, $Y(RestOfLine))), function(value) {
14782
+ var CivetPrologue$1 = $T($S($EXPECT($R86, "CivetPrologue /[\\t ]*/"), SingleQuote, CivetPrologueContent, SingleQuote, SimpleStatementDelimiter, $EXPECT($R87, "CivetPrologue /[ \\t]*/"), $C(EOL, $Y(RestOfLine))), function(value) {
14628
14783
  var content = value[2];
14629
14784
  return content;
14630
14785
  });
@@ -14632,7 +14787,7 @@ ${input.slice(result.pos)}
14632
14787
  function CivetPrologue(ctx, state) {
14633
14788
  return $EVENT_C(ctx, state, "CivetPrologue", CivetPrologue$$);
14634
14789
  }
14635
- var CivetPrologueContent$0 = $TS($S($EXPECT($L226, 'CivetPrologueContent "civet"'), NonIdContinue, $Q(CivetOption), $EXPECT($R86, "CivetPrologueContent /[\\s]*/")), function($skip, $loc, $0, $1, $2, $3, $4) {
14790
+ var CivetPrologueContent$0 = $TS($S($EXPECT($L227, 'CivetPrologueContent "civet"'), NonIdContinue, $Q(CivetOption), $EXPECT($R88, "CivetPrologueContent /[\\s]*/")), function($skip, $loc, $0, $1, $2, $3, $4) {
14636
14791
  var options = $3;
14637
14792
  return {
14638
14793
  type: "CivetPrologue",
@@ -14643,7 +14798,7 @@ ${input.slice(result.pos)}
14643
14798
  function CivetPrologueContent(ctx, state) {
14644
14799
  return $EVENT(ctx, state, "CivetPrologueContent", CivetPrologueContent$0);
14645
14800
  }
14646
- var CivetOption$0 = $TR($EXPECT($R87, "CivetOption /\\s+([+-]?)([a-zA-Z0-9-]+)(\\s*=\\s*([a-zA-Z0-9.+-]*))?/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
14801
+ var CivetOption$0 = $TR($EXPECT($R89, "CivetOption /\\s+([+-]?)([a-zA-Z0-9-]+)(\\s*=\\s*([a-zA-Z0-9.+-]*))?/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
14647
14802
  const optionName = $2.replace(/-+([a-z]?)/g, (_2, l) => {
14648
14803
  if (l)
14649
14804
  return l.toUpperCase();
@@ -14660,11 +14815,11 @@ ${input.slice(result.pos)}
14660
14815
  function CivetOption(ctx, state) {
14661
14816
  return $EVENT(ctx, state, "CivetOption", CivetOption$0);
14662
14817
  }
14663
- var UnknownPrologue$0 = $S($R$0($EXPECT($R84, "UnknownPrologue /[\\t ]*/")), StringLiteral, $TEXT(SimpleStatementDelimiter), EOS);
14818
+ var UnknownPrologue$0 = $S($R$0($EXPECT($R86, "UnknownPrologue /[\\t ]*/")), StringLiteral, $TEXT(SimpleStatementDelimiter), EOS);
14664
14819
  function UnknownPrologue(ctx, state) {
14665
14820
  return $EVENT(ctx, state, "UnknownPrologue", UnknownPrologue$0);
14666
14821
  }
14667
- var TripleSlashDirective$0 = $S($R$0($EXPECT($R88, "TripleSlashDirective /\\/\\/\\/[^\\r\\n]*/")), $E(EOS));
14822
+ var TripleSlashDirective$0 = $S($R$0($EXPECT($R90, "TripleSlashDirective /\\/\\/\\/[^\\r\\n]*/")), $E(EOS));
14668
14823
  function TripleSlashDirective(ctx, state) {
14669
14824
  return $EVENT(ctx, state, "TripleSlashDirective", TripleSlashDirective$0);
14670
14825
  }
@@ -14680,13 +14835,13 @@ ${input.slice(result.pos)}
14680
14835
  function PrologueString(ctx, state) {
14681
14836
  return $EVENT_C(ctx, state, "PrologueString", PrologueString$$);
14682
14837
  }
14683
- var EOS$0 = $T($S($EXPECT($R89, "EOS /(?=[ \\t\\r\\n\\/#]|$)/"), $P(RestOfLine)), function(value) {
14838
+ var EOS$0 = $T($S($EXPECT($R91, "EOS /(?=[ \\t\\r\\n\\/#]|$)/"), $P(RestOfLine)), function(value) {
14684
14839
  return value[1];
14685
14840
  });
14686
14841
  function EOS(ctx, state) {
14687
14842
  return $EVENT(ctx, state, "EOS", EOS$0);
14688
14843
  }
14689
- var EOL$0 = $TR($EXPECT($R90, "EOL /\\r\\n|\\n|\\r|$/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
14844
+ var EOL$0 = $TR($EXPECT($R92, "EOL /\\r\\n|\\n|\\r|$/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
14690
14845
  return { $loc, token: $0 };
14691
14846
  });
14692
14847
  function EOL(ctx, state) {
@@ -15258,11 +15413,11 @@ ${input.slice(result.pos)}
15258
15413
  function Prologue(ctx, state) {
15259
15414
  return $EVENT(ctx, state, "Prologue", Prologue$0);
15260
15415
  }
15261
- var ProloguePrefix$0 = $S(Prologue, $R$0($EXPECT($R91, "ProloguePrefix /[^]*/")));
15416
+ var ProloguePrefix$0 = $S(Prologue, $R$0($EXPECT($R93, "ProloguePrefix /[^]*/")));
15262
15417
  function ProloguePrefix(ctx, state) {
15263
15418
  return $EVENT(ctx, state, "ProloguePrefix", ProloguePrefix$0);
15264
15419
  }
15265
- var Indent$0 = $TR($EXPECT($R85, "Indent /[ \\t]*/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
15420
+ var Indent$0 = $TR($EXPECT($R87, "Indent /[ \\t]*/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
15266
15421
  const level = getIndentLevel($0, module.config.tab);
15267
15422
  return {
15268
15423
  $loc,
@@ -15410,11 +15565,11 @@ ${input.slice(result.pos)}
15410
15565
  exports.WRHS = WRHS;
15411
15566
  exports.SingleLineBinaryOpRHS = SingleLineBinaryOpRHS;
15412
15567
  exports.RHS = RHS;
15413
- exports.ParenthesizedAssignment = ParenthesizedAssignment;
15414
15568
  exports.UnaryExpression = UnaryExpression;
15415
15569
  exports.UnaryWithoutParenthesizedAssignment = UnaryWithoutParenthesizedAssignment;
15416
15570
  exports.UnaryBody = UnaryBody;
15417
15571
  exports.UnaryWithoutParenthesizedAssignmentBody = UnaryWithoutParenthesizedAssignmentBody;
15572
+ exports.ParenthesizedAssignment = ParenthesizedAssignment;
15418
15573
  exports.UnaryPostfix = UnaryPostfix;
15419
15574
  exports.TypePostfix = TypePostfix;
15420
15575
  exports.Tuple = Tuple;
@@ -15442,6 +15597,7 @@ ${input.slice(result.pos)}
15442
15597
  exports.PipelineTailItem = PipelineTailItem;
15443
15598
  exports.PrimaryExpression = PrimaryExpression;
15444
15599
  exports.ParenthesizedExpression = ParenthesizedExpression;
15600
+ exports.PartialPlaceholder = PartialPlaceholder;
15445
15601
  exports.ClassDeclaration = ClassDeclaration;
15446
15602
  exports.ClassExpression = ClassExpression;
15447
15603
  exports.ClassBinding = ClassBinding;
@@ -15486,6 +15642,7 @@ ${input.slice(result.pos)}
15486
15642
  exports.MemberBracketContent = MemberBracketContent;
15487
15643
  exports.SliceParameters = SliceParameters;
15488
15644
  exports.AccessStart = AccessStart;
15645
+ exports.ImplicitAccessStart = ImplicitAccessStart;
15489
15646
  exports.PropertyAccessModifier = PropertyAccessModifier;
15490
15647
  exports.PropertyAccess = PropertyAccess;
15491
15648
  exports.PropertyGlob = PropertyGlob;
@@ -15620,6 +15777,7 @@ ${input.slice(result.pos)}
15620
15777
  exports.BinaryOp = BinaryOp;
15621
15778
  exports._BinaryOp = _BinaryOp;
15622
15779
  exports.BinaryOpSymbol = BinaryOpSymbol;
15780
+ exports.ActualIn = ActualIn;
15623
15781
  exports.CoffeeOfOp = CoffeeOfOp;
15624
15782
  exports.NotOp = NotOp;
15625
15783
  exports.Xor = Xor;
@@ -15900,6 +16058,7 @@ ${input.slice(result.pos)}
15900
16058
  exports.TripleTick = TripleTick;
15901
16059
  exports.Try = Try;
15902
16060
  exports.Typeof = Typeof;
16061
+ exports.Undefined = Undefined;
15903
16062
  exports.Unless = Unless;
15904
16063
  exports.Until = Until;
15905
16064
  exports.Using = Using;
@@ -16116,6 +16275,13 @@ ${input.slice(result.pos)}
16116
16275
  var import_parser = __toESM(require_parser());
16117
16276
 
16118
16277
  // source/generate.civet
16278
+ function stringify(node) {
16279
+ try {
16280
+ return JSON.stringify(node);
16281
+ } catch (e) {
16282
+ return `${node}`;
16283
+ }
16284
+ }
16119
16285
  function gen(node, options) {
16120
16286
  if (node === null || node === void 0) {
16121
16287
  return "";
@@ -16149,16 +16315,16 @@ ${input.slice(result.pos)}
16149
16315
  if (!node.children) {
16150
16316
  switch (node.type) {
16151
16317
  case "Ref": {
16152
- throw new Error(`Unpopulated ref ${JSON.stringify(node)}`);
16318
+ throw new Error(`Unpopulated ref ${stringify(node)}`);
16153
16319
  }
16154
16320
  }
16155
16321
  debugger;
16156
- throw new Error(`Unknown node ${JSON.stringify(node)}`);
16322
+ throw new Error(`Unknown node ${stringify(node)}`);
16157
16323
  }
16158
16324
  return gen(node.children, options);
16159
16325
  }
16160
16326
  debugger;
16161
- throw new Error(`Unknown node ${JSON.stringify(node)}`);
16327
+ throw new Error(`Unknown node ${stringify(node)}`);
16162
16328
  }
16163
16329
  var generate_default = gen;
16164
16330
  function prune(node) {