@danielx/civet 0.6.14 → 0.6.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/browser.js CHANGED
@@ -1148,6 +1148,7 @@ var Civet = (() => {
1148
1148
  case "AmpersandRef":
1149
1149
  case "Identifier":
1150
1150
  case "Literal":
1151
+ case "IterationExpression":
1151
1152
  case "CallExpression":
1152
1153
  case "MemberExpression":
1153
1154
  case "ParenthesizedExpression":
@@ -1424,6 +1425,46 @@ var Civet = (() => {
1424
1425
  tail.push(...splices.map((s) => [", ", s]), ...thisAssignments.map((a) => [", ", a]));
1425
1426
  }
1426
1427
  function processAssignments(statements) {
1428
+ gatherRecursiveAll(statements, (n) => n.type === "AssignmentExpression" || n.type === "UpdateExpression").forEach((exp) => {
1429
+ function extractAssignment(lhs) {
1430
+ let expr = lhs;
1431
+ while (expr.type === "ParenthesizedExpression") {
1432
+ expr = expr.expression;
1433
+ }
1434
+ if (expr.type === "AssignmentExpression" || expr.type === "UpdateExpression") {
1435
+ if (expr.type === "UpdateExpression" && expr.children[0] === expr.assigned) {
1436
+ post.push([", ", lhs]);
1437
+ } else {
1438
+ pre.push([lhs, ", "]);
1439
+ }
1440
+ return expr.assigned;
1441
+ }
1442
+ }
1443
+ const pre = [], post = [];
1444
+ switch (exp.type) {
1445
+ case "AssignmentExpression":
1446
+ if (!exp.lhs)
1447
+ return;
1448
+ exp.lhs.forEach((lhsPart, i) => {
1449
+ let newLhs2 = extractAssignment(lhsPart[1]);
1450
+ if (newLhs2) {
1451
+ lhsPart[1] = newLhs2;
1452
+ }
1453
+ });
1454
+ break;
1455
+ case "UpdateExpression":
1456
+ let newLhs = extractAssignment(exp.assigned);
1457
+ if (newLhs) {
1458
+ const i = exp.children.indexOf(exp.assigned);
1459
+ exp.assigned = exp.children[i] = newLhs;
1460
+ }
1461
+ break;
1462
+ }
1463
+ if (pre.length)
1464
+ exp.children.unshift(...pre);
1465
+ if (post.length)
1466
+ exp.children.push(...post);
1467
+ });
1427
1468
  gatherRecursiveAll(statements, (n) => n.type === "AssignmentExpression" && n.names === null).forEach((exp) => {
1428
1469
  let { lhs: $1, exp: $2 } = exp, tail = [], i = 0, len = $1.length;
1429
1470
  if ($1.some((left) => left[left.length - 1].special)) {
@@ -1433,7 +1474,14 @@ var Civet = (() => {
1433
1474
  const [, lhs, , op] = $1[0];
1434
1475
  const { call } = op;
1435
1476
  op[op.length - 1] = "=";
1436
- $2 = [call, "(", lhs, ", ", $2, ")"];
1477
+ const index2 = exp.children.indexOf($2);
1478
+ if (index2 < 0)
1479
+ throw new Error("Assertion error: exp not in AssignmentExpression");
1480
+ exp.children.splice(
1481
+ index2,
1482
+ 1,
1483
+ exp.exp = $2 = [call, "(", lhs, ", ", $2, ")"]
1484
+ );
1437
1485
  }
1438
1486
  let wrapped = false;
1439
1487
  while (i < len) {
@@ -1484,49 +1532,11 @@ var Civet = (() => {
1484
1532
  }
1485
1533
  i--;
1486
1534
  }
1487
- const names = $1.flatMap(([, l]) => l.names || []);
1488
- exp.children = [$1, $2, ...tail];
1489
- exp.names = names;
1490
- });
1491
- gatherRecursiveAll(statements, (n) => n.type === "AssignmentExpression" || n.type === "UpdateExpression").forEach((exp) => {
1492
- function extractAssignment(lhs) {
1493
- let expr = lhs;
1494
- while (expr.type === "ParenthesizedExpression") {
1495
- expr = expr.expression;
1496
- }
1497
- if (expr.type === "AssignmentExpression" || expr.type === "UpdateExpression") {
1498
- if (expr.type === "UpdateExpression" && expr.children[0] === expr.assigned) {
1499
- post.push([", ", lhs]);
1500
- } else {
1501
- pre.push([lhs, ", "]);
1502
- }
1503
- return expr.assigned;
1504
- }
1505
- }
1506
- const pre = [], post = [];
1507
- switch (exp.type) {
1508
- case "AssignmentExpression":
1509
- if (!exp.lhs)
1510
- return;
1511
- exp.lhs.forEach((lhsPart, i) => {
1512
- let newLhs2 = extractAssignment(lhsPart[1]);
1513
- if (newLhs2) {
1514
- lhsPart[1] = newLhs2;
1515
- }
1516
- });
1517
- break;
1518
- case "UpdateExpression":
1519
- let newLhs = extractAssignment(exp.assigned);
1520
- if (newLhs) {
1521
- const i = exp.children.indexOf(exp.assigned);
1522
- exp.assigned = exp.children[i] = newLhs;
1523
- }
1524
- break;
1525
- }
1526
- if (pre.length)
1527
- exp.children.unshift(...pre);
1528
- if (post.length)
1529
- exp.children.push(...post);
1535
+ exp.names = $1.flatMap(([, l]) => l.names || []);
1536
+ const index = exp.children.indexOf($2);
1537
+ if (index < 0)
1538
+ throw new Error("Assertion error: exp not in AssignmentExpression");
1539
+ exp.children.splice(index + 1, 0, ...tail);
1530
1540
  });
1531
1541
  }
1532
1542
  function attachPostfixStatementAsExpression(exp, post) {
@@ -1973,7 +1983,8 @@ var Civet = (() => {
1973
1983
  });
1974
1984
  }
1975
1985
  } else {
1976
- s.children = children;
1986
+ if (i === 0)
1987
+ s.children = children;
1977
1988
  }
1978
1989
  if (returns && (ref = needsRef(arg))) {
1979
1990
  usingRef = usingRef || ref;
@@ -2963,6 +2974,7 @@ ${input.slice(result.pos)}
2963
2974
  NonPipelineExtendedExpression,
2964
2975
  NonAssignmentExtendedExpression,
2965
2976
  NestedNonAssignmentExtendedExpression,
2977
+ ExpressionizedStatementWithTrailingCallExpressions,
2966
2978
  ExpressionizedStatement,
2967
2979
  Expression,
2968
2980
  Arguments,
@@ -2973,6 +2985,8 @@ ${input.slice(result.pos)}
2973
2985
  ArgumentsWithTrailingMemberExpressions,
2974
2986
  TrailingMemberExpressions,
2975
2987
  AllowedTrailingMemberExpressions,
2988
+ TrailingCallExpressions,
2989
+ AllowedTrailingCallExpressions,
2976
2990
  CommaDelimiter,
2977
2991
  ArgumentList,
2978
2992
  NonPipelineArgumentList,
@@ -4112,7 +4126,10 @@ ${input.slice(result.pos)}
4112
4126
  }
4113
4127
  }
4114
4128
  var NonAssignmentExtendedExpression$0 = NestedNonAssignmentExtendedExpression;
4115
- var NonAssignmentExtendedExpression$1 = $TS($S(__, ExpressionizedStatement), function($skip, $loc, $0, $1, $2) {
4129
+ var NonAssignmentExtendedExpression$1 = $TS($S(__, ExpressionizedStatementWithTrailingCallExpressions), function($skip, $loc, $0, $1, $2) {
4130
+ if ($2.length) {
4131
+ return [...$1, ...$2];
4132
+ }
4116
4133
  return {
4117
4134
  ...$2,
4118
4135
  children: [...$1, ...$2.children]
@@ -4140,11 +4157,17 @@ ${input.slice(result.pos)}
4140
4157
  return result;
4141
4158
  }
4142
4159
  }
4143
- var NestedNonAssignmentExtendedExpression$0 = $TS($S($Y(EOS), PushIndent, $E($S(Nested, ExpressionizedStatement)), PopIndent), function($skip, $loc, $0, $1, $2, $3, $4) {
4160
+ var NestedNonAssignmentExtendedExpression$0 = $TS($S($Y(EOS), PushIndent, $E($S(Nested, ExpressionizedStatementWithTrailingCallExpressions)), PopIndent, $E(AllowedTrailingCallExpressions)), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
4144
4161
  var expression = $3;
4145
- if (expression)
4162
+ var trailing = $5;
4163
+ if (!expression)
4164
+ return $skip;
4165
+ if (!trailing)
4146
4166
  return expression;
4147
- return $skip;
4167
+ return {
4168
+ type: "CallExpression",
4169
+ children: [expression, ...trailing.flat()]
4170
+ };
4148
4171
  });
4149
4172
  function NestedNonAssignmentExtendedExpression(state) {
4150
4173
  let eventData;
@@ -4168,6 +4191,39 @@ ${input.slice(result.pos)}
4168
4191
  return result;
4169
4192
  }
4170
4193
  }
4194
+ var ExpressionizedStatementWithTrailingCallExpressions$0 = $TS($S(ExpressionizedStatement, $E(AllowedTrailingCallExpressions)), function($skip, $loc, $0, $1, $2) {
4195
+ if (!$2)
4196
+ return $1;
4197
+ return {
4198
+ type: "CallExpression",
4199
+ children: [
4200
+ makeLeftHandSideExpression($1),
4201
+ $2
4202
+ ]
4203
+ };
4204
+ });
4205
+ function ExpressionizedStatementWithTrailingCallExpressions(state) {
4206
+ let eventData;
4207
+ if (state.events) {
4208
+ const result = state.events.enter?.("ExpressionizedStatementWithTrailingCallExpressions", state);
4209
+ if (result) {
4210
+ if (result.cache)
4211
+ return result.cache;
4212
+ eventData = result.data;
4213
+ }
4214
+ }
4215
+ if (state.tokenize) {
4216
+ const result = $TOKEN("ExpressionizedStatementWithTrailingCallExpressions", state, ExpressionizedStatementWithTrailingCallExpressions$0(state));
4217
+ if (state.events)
4218
+ state.events.exit?.("ExpressionizedStatementWithTrailingCallExpressions", state, result, eventData);
4219
+ return result;
4220
+ } else {
4221
+ const result = ExpressionizedStatementWithTrailingCallExpressions$0(state);
4222
+ if (state.events)
4223
+ state.events.exit?.("ExpressionizedStatementWithTrailingCallExpressions", state, result, eventData);
4224
+ return result;
4225
+ }
4226
+ }
4171
4227
  var ExpressionizedStatement$0 = DebuggerExpression;
4172
4228
  var ExpressionizedStatement$1 = IfExpression;
4173
4229
  var ExpressionizedStatement$2 = UnlessExpression;
@@ -4453,6 +4509,54 @@ ${input.slice(result.pos)}
4453
4509
  return result;
4454
4510
  }
4455
4511
  }
4512
+ var TrailingCallExpressions$0 = $P($S($C(Samedent, IndentedFurther), $Y($S($E($EXPECT($L5, fail, 'TrailingCallExpressions "?"')), $EXPECT($L6, fail, 'TrailingCallExpressions "."'), $N($R$0($EXPECT($R1, fail, "TrailingCallExpressions /[0-9]/"))))), $P(CallExpressionRest)));
4513
+ function TrailingCallExpressions(state) {
4514
+ let eventData;
4515
+ if (state.events) {
4516
+ const result = state.events.enter?.("TrailingCallExpressions", state);
4517
+ if (result) {
4518
+ if (result.cache)
4519
+ return result.cache;
4520
+ eventData = result.data;
4521
+ }
4522
+ }
4523
+ if (state.tokenize) {
4524
+ const result = $TOKEN("TrailingCallExpressions", state, TrailingCallExpressions$0(state));
4525
+ if (state.events)
4526
+ state.events.exit?.("TrailingCallExpressions", state, result, eventData);
4527
+ return result;
4528
+ } else {
4529
+ const result = TrailingCallExpressions$0(state);
4530
+ if (state.events)
4531
+ state.events.exit?.("TrailingCallExpressions", state, result, eventData);
4532
+ return result;
4533
+ }
4534
+ }
4535
+ var AllowedTrailingCallExpressions$0 = $T($S(TrailingMemberPropertyAllowed, TrailingCallExpressions), function(value) {
4536
+ return value[1];
4537
+ });
4538
+ function AllowedTrailingCallExpressions(state) {
4539
+ let eventData;
4540
+ if (state.events) {
4541
+ const result = state.events.enter?.("AllowedTrailingCallExpressions", state);
4542
+ if (result) {
4543
+ if (result.cache)
4544
+ return result.cache;
4545
+ eventData = result.data;
4546
+ }
4547
+ }
4548
+ if (state.tokenize) {
4549
+ const result = $TOKEN("AllowedTrailingCallExpressions", state, AllowedTrailingCallExpressions$0(state));
4550
+ if (state.events)
4551
+ state.events.exit?.("AllowedTrailingCallExpressions", state, result, eventData);
4552
+ return result;
4553
+ } else {
4554
+ const result = AllowedTrailingCallExpressions$0(state);
4555
+ if (state.events)
4556
+ state.events.exit?.("AllowedTrailingCallExpressions", state, result, eventData);
4557
+ return result;
4558
+ }
4559
+ }
4456
4560
  var CommaDelimiter$0 = $S($E($C(Samedent, IndentedFurther)), $Q(_), Comma);
4457
4561
  function CommaDelimiter(state) {
4458
4562
  let eventData;
@@ -4760,7 +4864,7 @@ ${input.slice(result.pos)}
4760
4864
  }
4761
4865
  var RHS$0 = ParenthesizedAssignment;
4762
4866
  var RHS$1 = UnaryExpression;
4763
- var RHS$2 = ExpressionizedStatement;
4867
+ var RHS$2 = ExpressionizedStatementWithTrailingCallExpressions;
4764
4868
  function RHS(state) {
4765
4869
  let eventData;
4766
4870
  if (state.events) {
package/dist/main.js CHANGED
@@ -1147,6 +1147,7 @@ var require_lib = __commonJS({
1147
1147
  case "AmpersandRef":
1148
1148
  case "Identifier":
1149
1149
  case "Literal":
1150
+ case "IterationExpression":
1150
1151
  case "CallExpression":
1151
1152
  case "MemberExpression":
1152
1153
  case "ParenthesizedExpression":
@@ -1423,6 +1424,46 @@ var require_lib = __commonJS({
1423
1424
  tail.push(...splices.map((s) => [", ", s]), ...thisAssignments.map((a) => [", ", a]));
1424
1425
  }
1425
1426
  function processAssignments(statements) {
1427
+ gatherRecursiveAll(statements, (n) => n.type === "AssignmentExpression" || n.type === "UpdateExpression").forEach((exp) => {
1428
+ function extractAssignment(lhs) {
1429
+ let expr = lhs;
1430
+ while (expr.type === "ParenthesizedExpression") {
1431
+ expr = expr.expression;
1432
+ }
1433
+ if (expr.type === "AssignmentExpression" || expr.type === "UpdateExpression") {
1434
+ if (expr.type === "UpdateExpression" && expr.children[0] === expr.assigned) {
1435
+ post.push([", ", lhs]);
1436
+ } else {
1437
+ pre.push([lhs, ", "]);
1438
+ }
1439
+ return expr.assigned;
1440
+ }
1441
+ }
1442
+ const pre = [], post = [];
1443
+ switch (exp.type) {
1444
+ case "AssignmentExpression":
1445
+ if (!exp.lhs)
1446
+ return;
1447
+ exp.lhs.forEach((lhsPart, i) => {
1448
+ let newLhs2 = extractAssignment(lhsPart[1]);
1449
+ if (newLhs2) {
1450
+ lhsPart[1] = newLhs2;
1451
+ }
1452
+ });
1453
+ break;
1454
+ case "UpdateExpression":
1455
+ let newLhs = extractAssignment(exp.assigned);
1456
+ if (newLhs) {
1457
+ const i = exp.children.indexOf(exp.assigned);
1458
+ exp.assigned = exp.children[i] = newLhs;
1459
+ }
1460
+ break;
1461
+ }
1462
+ if (pre.length)
1463
+ exp.children.unshift(...pre);
1464
+ if (post.length)
1465
+ exp.children.push(...post);
1466
+ });
1426
1467
  gatherRecursiveAll(statements, (n) => n.type === "AssignmentExpression" && n.names === null).forEach((exp) => {
1427
1468
  let { lhs: $1, exp: $2 } = exp, tail = [], i = 0, len = $1.length;
1428
1469
  if ($1.some((left) => left[left.length - 1].special)) {
@@ -1432,7 +1473,14 @@ var require_lib = __commonJS({
1432
1473
  const [, lhs, , op] = $1[0];
1433
1474
  const { call } = op;
1434
1475
  op[op.length - 1] = "=";
1435
- $2 = [call, "(", lhs, ", ", $2, ")"];
1476
+ const index2 = exp.children.indexOf($2);
1477
+ if (index2 < 0)
1478
+ throw new Error("Assertion error: exp not in AssignmentExpression");
1479
+ exp.children.splice(
1480
+ index2,
1481
+ 1,
1482
+ exp.exp = $2 = [call, "(", lhs, ", ", $2, ")"]
1483
+ );
1436
1484
  }
1437
1485
  let wrapped = false;
1438
1486
  while (i < len) {
@@ -1483,49 +1531,11 @@ var require_lib = __commonJS({
1483
1531
  }
1484
1532
  i--;
1485
1533
  }
1486
- const names = $1.flatMap(([, l]) => l.names || []);
1487
- exp.children = [$1, $2, ...tail];
1488
- exp.names = names;
1489
- });
1490
- gatherRecursiveAll(statements, (n) => n.type === "AssignmentExpression" || n.type === "UpdateExpression").forEach((exp) => {
1491
- function extractAssignment(lhs) {
1492
- let expr = lhs;
1493
- while (expr.type === "ParenthesizedExpression") {
1494
- expr = expr.expression;
1495
- }
1496
- if (expr.type === "AssignmentExpression" || expr.type === "UpdateExpression") {
1497
- if (expr.type === "UpdateExpression" && expr.children[0] === expr.assigned) {
1498
- post.push([", ", lhs]);
1499
- } else {
1500
- pre.push([lhs, ", "]);
1501
- }
1502
- return expr.assigned;
1503
- }
1504
- }
1505
- const pre = [], post = [];
1506
- switch (exp.type) {
1507
- case "AssignmentExpression":
1508
- if (!exp.lhs)
1509
- return;
1510
- exp.lhs.forEach((lhsPart, i) => {
1511
- let newLhs2 = extractAssignment(lhsPart[1]);
1512
- if (newLhs2) {
1513
- lhsPart[1] = newLhs2;
1514
- }
1515
- });
1516
- break;
1517
- case "UpdateExpression":
1518
- let newLhs = extractAssignment(exp.assigned);
1519
- if (newLhs) {
1520
- const i = exp.children.indexOf(exp.assigned);
1521
- exp.assigned = exp.children[i] = newLhs;
1522
- }
1523
- break;
1524
- }
1525
- if (pre.length)
1526
- exp.children.unshift(...pre);
1527
- if (post.length)
1528
- exp.children.push(...post);
1534
+ exp.names = $1.flatMap(([, l]) => l.names || []);
1535
+ const index = exp.children.indexOf($2);
1536
+ if (index < 0)
1537
+ throw new Error("Assertion error: exp not in AssignmentExpression");
1538
+ exp.children.splice(index + 1, 0, ...tail);
1529
1539
  });
1530
1540
  }
1531
1541
  function attachPostfixStatementAsExpression(exp, post) {
@@ -1972,7 +1982,8 @@ var require_lib = __commonJS({
1972
1982
  });
1973
1983
  }
1974
1984
  } else {
1975
- s.children = children;
1985
+ if (i === 0)
1986
+ s.children = children;
1976
1987
  }
1977
1988
  if (returns && (ref = needsRef(arg))) {
1978
1989
  usingRef = usingRef || ref;
@@ -2962,6 +2973,7 @@ ${input.slice(result.pos)}
2962
2973
  NonPipelineExtendedExpression,
2963
2974
  NonAssignmentExtendedExpression,
2964
2975
  NestedNonAssignmentExtendedExpression,
2976
+ ExpressionizedStatementWithTrailingCallExpressions,
2965
2977
  ExpressionizedStatement,
2966
2978
  Expression,
2967
2979
  Arguments,
@@ -2972,6 +2984,8 @@ ${input.slice(result.pos)}
2972
2984
  ArgumentsWithTrailingMemberExpressions,
2973
2985
  TrailingMemberExpressions,
2974
2986
  AllowedTrailingMemberExpressions,
2987
+ TrailingCallExpressions,
2988
+ AllowedTrailingCallExpressions,
2975
2989
  CommaDelimiter,
2976
2990
  ArgumentList,
2977
2991
  NonPipelineArgumentList,
@@ -4111,7 +4125,10 @@ ${input.slice(result.pos)}
4111
4125
  }
4112
4126
  }
4113
4127
  var NonAssignmentExtendedExpression$0 = NestedNonAssignmentExtendedExpression;
4114
- var NonAssignmentExtendedExpression$1 = $TS($S(__, ExpressionizedStatement), function($skip, $loc, $0, $1, $2) {
4128
+ var NonAssignmentExtendedExpression$1 = $TS($S(__, ExpressionizedStatementWithTrailingCallExpressions), function($skip, $loc, $0, $1, $2) {
4129
+ if ($2.length) {
4130
+ return [...$1, ...$2];
4131
+ }
4115
4132
  return {
4116
4133
  ...$2,
4117
4134
  children: [...$1, ...$2.children]
@@ -4139,11 +4156,17 @@ ${input.slice(result.pos)}
4139
4156
  return result;
4140
4157
  }
4141
4158
  }
4142
- var NestedNonAssignmentExtendedExpression$0 = $TS($S($Y(EOS), PushIndent, $E($S(Nested, ExpressionizedStatement)), PopIndent), function($skip, $loc, $0, $1, $2, $3, $4) {
4159
+ var NestedNonAssignmentExtendedExpression$0 = $TS($S($Y(EOS), PushIndent, $E($S(Nested, ExpressionizedStatementWithTrailingCallExpressions)), PopIndent, $E(AllowedTrailingCallExpressions)), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
4143
4160
  var expression = $3;
4144
- if (expression)
4161
+ var trailing = $5;
4162
+ if (!expression)
4163
+ return $skip;
4164
+ if (!trailing)
4145
4165
  return expression;
4146
- return $skip;
4166
+ return {
4167
+ type: "CallExpression",
4168
+ children: [expression, ...trailing.flat()]
4169
+ };
4147
4170
  });
4148
4171
  function NestedNonAssignmentExtendedExpression(state) {
4149
4172
  let eventData;
@@ -4167,6 +4190,39 @@ ${input.slice(result.pos)}
4167
4190
  return result;
4168
4191
  }
4169
4192
  }
4193
+ var ExpressionizedStatementWithTrailingCallExpressions$0 = $TS($S(ExpressionizedStatement, $E(AllowedTrailingCallExpressions)), function($skip, $loc, $0, $1, $2) {
4194
+ if (!$2)
4195
+ return $1;
4196
+ return {
4197
+ type: "CallExpression",
4198
+ children: [
4199
+ makeLeftHandSideExpression($1),
4200
+ $2
4201
+ ]
4202
+ };
4203
+ });
4204
+ function ExpressionizedStatementWithTrailingCallExpressions(state) {
4205
+ let eventData;
4206
+ if (state.events) {
4207
+ const result = state.events.enter?.("ExpressionizedStatementWithTrailingCallExpressions", state);
4208
+ if (result) {
4209
+ if (result.cache)
4210
+ return result.cache;
4211
+ eventData = result.data;
4212
+ }
4213
+ }
4214
+ if (state.tokenize) {
4215
+ const result = $TOKEN("ExpressionizedStatementWithTrailingCallExpressions", state, ExpressionizedStatementWithTrailingCallExpressions$0(state));
4216
+ if (state.events)
4217
+ state.events.exit?.("ExpressionizedStatementWithTrailingCallExpressions", state, result, eventData);
4218
+ return result;
4219
+ } else {
4220
+ const result = ExpressionizedStatementWithTrailingCallExpressions$0(state);
4221
+ if (state.events)
4222
+ state.events.exit?.("ExpressionizedStatementWithTrailingCallExpressions", state, result, eventData);
4223
+ return result;
4224
+ }
4225
+ }
4170
4226
  var ExpressionizedStatement$0 = DebuggerExpression;
4171
4227
  var ExpressionizedStatement$1 = IfExpression;
4172
4228
  var ExpressionizedStatement$2 = UnlessExpression;
@@ -4452,6 +4508,54 @@ ${input.slice(result.pos)}
4452
4508
  return result;
4453
4509
  }
4454
4510
  }
4511
+ var TrailingCallExpressions$0 = $P($S($C(Samedent, IndentedFurther), $Y($S($E($EXPECT($L5, fail, 'TrailingCallExpressions "?"')), $EXPECT($L6, fail, 'TrailingCallExpressions "."'), $N($R$0($EXPECT($R1, fail, "TrailingCallExpressions /[0-9]/"))))), $P(CallExpressionRest)));
4512
+ function TrailingCallExpressions(state) {
4513
+ let eventData;
4514
+ if (state.events) {
4515
+ const result = state.events.enter?.("TrailingCallExpressions", state);
4516
+ if (result) {
4517
+ if (result.cache)
4518
+ return result.cache;
4519
+ eventData = result.data;
4520
+ }
4521
+ }
4522
+ if (state.tokenize) {
4523
+ const result = $TOKEN("TrailingCallExpressions", state, TrailingCallExpressions$0(state));
4524
+ if (state.events)
4525
+ state.events.exit?.("TrailingCallExpressions", state, result, eventData);
4526
+ return result;
4527
+ } else {
4528
+ const result = TrailingCallExpressions$0(state);
4529
+ if (state.events)
4530
+ state.events.exit?.("TrailingCallExpressions", state, result, eventData);
4531
+ return result;
4532
+ }
4533
+ }
4534
+ var AllowedTrailingCallExpressions$0 = $T($S(TrailingMemberPropertyAllowed, TrailingCallExpressions), function(value) {
4535
+ return value[1];
4536
+ });
4537
+ function AllowedTrailingCallExpressions(state) {
4538
+ let eventData;
4539
+ if (state.events) {
4540
+ const result = state.events.enter?.("AllowedTrailingCallExpressions", state);
4541
+ if (result) {
4542
+ if (result.cache)
4543
+ return result.cache;
4544
+ eventData = result.data;
4545
+ }
4546
+ }
4547
+ if (state.tokenize) {
4548
+ const result = $TOKEN("AllowedTrailingCallExpressions", state, AllowedTrailingCallExpressions$0(state));
4549
+ if (state.events)
4550
+ state.events.exit?.("AllowedTrailingCallExpressions", state, result, eventData);
4551
+ return result;
4552
+ } else {
4553
+ const result = AllowedTrailingCallExpressions$0(state);
4554
+ if (state.events)
4555
+ state.events.exit?.("AllowedTrailingCallExpressions", state, result, eventData);
4556
+ return result;
4557
+ }
4558
+ }
4455
4559
  var CommaDelimiter$0 = $S($E($C(Samedent, IndentedFurther)), $Q(_), Comma);
4456
4560
  function CommaDelimiter(state) {
4457
4561
  let eventData;
@@ -4759,7 +4863,7 @@ ${input.slice(result.pos)}
4759
4863
  }
4760
4864
  var RHS$0 = ParenthesizedAssignment;
4761
4865
  var RHS$1 = UnaryExpression;
4762
- var RHS$2 = ExpressionizedStatement;
4866
+ var RHS$2 = ExpressionizedStatementWithTrailingCallExpressions;
4763
4867
  function RHS(state) {
4764
4868
  let eventData;
4765
4869
  if (state.events) {
package/dist/main.mjs CHANGED
@@ -1145,6 +1145,7 @@ var require_lib = __commonJS({
1145
1145
  case "AmpersandRef":
1146
1146
  case "Identifier":
1147
1147
  case "Literal":
1148
+ case "IterationExpression":
1148
1149
  case "CallExpression":
1149
1150
  case "MemberExpression":
1150
1151
  case "ParenthesizedExpression":
@@ -1421,6 +1422,46 @@ var require_lib = __commonJS({
1421
1422
  tail.push(...splices.map((s) => [", ", s]), ...thisAssignments.map((a) => [", ", a]));
1422
1423
  }
1423
1424
  function processAssignments(statements) {
1425
+ gatherRecursiveAll(statements, (n) => n.type === "AssignmentExpression" || n.type === "UpdateExpression").forEach((exp) => {
1426
+ function extractAssignment(lhs) {
1427
+ let expr = lhs;
1428
+ while (expr.type === "ParenthesizedExpression") {
1429
+ expr = expr.expression;
1430
+ }
1431
+ if (expr.type === "AssignmentExpression" || expr.type === "UpdateExpression") {
1432
+ if (expr.type === "UpdateExpression" && expr.children[0] === expr.assigned) {
1433
+ post.push([", ", lhs]);
1434
+ } else {
1435
+ pre.push([lhs, ", "]);
1436
+ }
1437
+ return expr.assigned;
1438
+ }
1439
+ }
1440
+ const pre = [], post = [];
1441
+ switch (exp.type) {
1442
+ case "AssignmentExpression":
1443
+ if (!exp.lhs)
1444
+ return;
1445
+ exp.lhs.forEach((lhsPart, i) => {
1446
+ let newLhs2 = extractAssignment(lhsPart[1]);
1447
+ if (newLhs2) {
1448
+ lhsPart[1] = newLhs2;
1449
+ }
1450
+ });
1451
+ break;
1452
+ case "UpdateExpression":
1453
+ let newLhs = extractAssignment(exp.assigned);
1454
+ if (newLhs) {
1455
+ const i = exp.children.indexOf(exp.assigned);
1456
+ exp.assigned = exp.children[i] = newLhs;
1457
+ }
1458
+ break;
1459
+ }
1460
+ if (pre.length)
1461
+ exp.children.unshift(...pre);
1462
+ if (post.length)
1463
+ exp.children.push(...post);
1464
+ });
1424
1465
  gatherRecursiveAll(statements, (n) => n.type === "AssignmentExpression" && n.names === null).forEach((exp) => {
1425
1466
  let { lhs: $1, exp: $2 } = exp, tail = [], i = 0, len = $1.length;
1426
1467
  if ($1.some((left) => left[left.length - 1].special)) {
@@ -1430,7 +1471,14 @@ var require_lib = __commonJS({
1430
1471
  const [, lhs, , op] = $1[0];
1431
1472
  const { call } = op;
1432
1473
  op[op.length - 1] = "=";
1433
- $2 = [call, "(", lhs, ", ", $2, ")"];
1474
+ const index2 = exp.children.indexOf($2);
1475
+ if (index2 < 0)
1476
+ throw new Error("Assertion error: exp not in AssignmentExpression");
1477
+ exp.children.splice(
1478
+ index2,
1479
+ 1,
1480
+ exp.exp = $2 = [call, "(", lhs, ", ", $2, ")"]
1481
+ );
1434
1482
  }
1435
1483
  let wrapped = false;
1436
1484
  while (i < len) {
@@ -1481,49 +1529,11 @@ var require_lib = __commonJS({
1481
1529
  }
1482
1530
  i--;
1483
1531
  }
1484
- const names = $1.flatMap(([, l]) => l.names || []);
1485
- exp.children = [$1, $2, ...tail];
1486
- exp.names = names;
1487
- });
1488
- gatherRecursiveAll(statements, (n) => n.type === "AssignmentExpression" || n.type === "UpdateExpression").forEach((exp) => {
1489
- function extractAssignment(lhs) {
1490
- let expr = lhs;
1491
- while (expr.type === "ParenthesizedExpression") {
1492
- expr = expr.expression;
1493
- }
1494
- if (expr.type === "AssignmentExpression" || expr.type === "UpdateExpression") {
1495
- if (expr.type === "UpdateExpression" && expr.children[0] === expr.assigned) {
1496
- post.push([", ", lhs]);
1497
- } else {
1498
- pre.push([lhs, ", "]);
1499
- }
1500
- return expr.assigned;
1501
- }
1502
- }
1503
- const pre = [], post = [];
1504
- switch (exp.type) {
1505
- case "AssignmentExpression":
1506
- if (!exp.lhs)
1507
- return;
1508
- exp.lhs.forEach((lhsPart, i) => {
1509
- let newLhs2 = extractAssignment(lhsPart[1]);
1510
- if (newLhs2) {
1511
- lhsPart[1] = newLhs2;
1512
- }
1513
- });
1514
- break;
1515
- case "UpdateExpression":
1516
- let newLhs = extractAssignment(exp.assigned);
1517
- if (newLhs) {
1518
- const i = exp.children.indexOf(exp.assigned);
1519
- exp.assigned = exp.children[i] = newLhs;
1520
- }
1521
- break;
1522
- }
1523
- if (pre.length)
1524
- exp.children.unshift(...pre);
1525
- if (post.length)
1526
- exp.children.push(...post);
1532
+ exp.names = $1.flatMap(([, l]) => l.names || []);
1533
+ const index = exp.children.indexOf($2);
1534
+ if (index < 0)
1535
+ throw new Error("Assertion error: exp not in AssignmentExpression");
1536
+ exp.children.splice(index + 1, 0, ...tail);
1527
1537
  });
1528
1538
  }
1529
1539
  function attachPostfixStatementAsExpression(exp, post) {
@@ -1970,7 +1980,8 @@ var require_lib = __commonJS({
1970
1980
  });
1971
1981
  }
1972
1982
  } else {
1973
- s.children = children;
1983
+ if (i === 0)
1984
+ s.children = children;
1974
1985
  }
1975
1986
  if (returns && (ref = needsRef(arg))) {
1976
1987
  usingRef = usingRef || ref;
@@ -2960,6 +2971,7 @@ ${input.slice(result.pos)}
2960
2971
  NonPipelineExtendedExpression,
2961
2972
  NonAssignmentExtendedExpression,
2962
2973
  NestedNonAssignmentExtendedExpression,
2974
+ ExpressionizedStatementWithTrailingCallExpressions,
2963
2975
  ExpressionizedStatement,
2964
2976
  Expression,
2965
2977
  Arguments,
@@ -2970,6 +2982,8 @@ ${input.slice(result.pos)}
2970
2982
  ArgumentsWithTrailingMemberExpressions,
2971
2983
  TrailingMemberExpressions,
2972
2984
  AllowedTrailingMemberExpressions,
2985
+ TrailingCallExpressions,
2986
+ AllowedTrailingCallExpressions,
2973
2987
  CommaDelimiter,
2974
2988
  ArgumentList,
2975
2989
  NonPipelineArgumentList,
@@ -4109,7 +4123,10 @@ ${input.slice(result.pos)}
4109
4123
  }
4110
4124
  }
4111
4125
  var NonAssignmentExtendedExpression$0 = NestedNonAssignmentExtendedExpression;
4112
- var NonAssignmentExtendedExpression$1 = $TS($S(__, ExpressionizedStatement), function($skip, $loc, $0, $1, $2) {
4126
+ var NonAssignmentExtendedExpression$1 = $TS($S(__, ExpressionizedStatementWithTrailingCallExpressions), function($skip, $loc, $0, $1, $2) {
4127
+ if ($2.length) {
4128
+ return [...$1, ...$2];
4129
+ }
4113
4130
  return {
4114
4131
  ...$2,
4115
4132
  children: [...$1, ...$2.children]
@@ -4137,11 +4154,17 @@ ${input.slice(result.pos)}
4137
4154
  return result;
4138
4155
  }
4139
4156
  }
4140
- var NestedNonAssignmentExtendedExpression$0 = $TS($S($Y(EOS), PushIndent, $E($S(Nested, ExpressionizedStatement)), PopIndent), function($skip, $loc, $0, $1, $2, $3, $4) {
4157
+ var NestedNonAssignmentExtendedExpression$0 = $TS($S($Y(EOS), PushIndent, $E($S(Nested, ExpressionizedStatementWithTrailingCallExpressions)), PopIndent, $E(AllowedTrailingCallExpressions)), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
4141
4158
  var expression = $3;
4142
- if (expression)
4159
+ var trailing = $5;
4160
+ if (!expression)
4161
+ return $skip;
4162
+ if (!trailing)
4143
4163
  return expression;
4144
- return $skip;
4164
+ return {
4165
+ type: "CallExpression",
4166
+ children: [expression, ...trailing.flat()]
4167
+ };
4145
4168
  });
4146
4169
  function NestedNonAssignmentExtendedExpression(state) {
4147
4170
  let eventData;
@@ -4165,6 +4188,39 @@ ${input.slice(result.pos)}
4165
4188
  return result;
4166
4189
  }
4167
4190
  }
4191
+ var ExpressionizedStatementWithTrailingCallExpressions$0 = $TS($S(ExpressionizedStatement, $E(AllowedTrailingCallExpressions)), function($skip, $loc, $0, $1, $2) {
4192
+ if (!$2)
4193
+ return $1;
4194
+ return {
4195
+ type: "CallExpression",
4196
+ children: [
4197
+ makeLeftHandSideExpression($1),
4198
+ $2
4199
+ ]
4200
+ };
4201
+ });
4202
+ function ExpressionizedStatementWithTrailingCallExpressions(state) {
4203
+ let eventData;
4204
+ if (state.events) {
4205
+ const result = state.events.enter?.("ExpressionizedStatementWithTrailingCallExpressions", state);
4206
+ if (result) {
4207
+ if (result.cache)
4208
+ return result.cache;
4209
+ eventData = result.data;
4210
+ }
4211
+ }
4212
+ if (state.tokenize) {
4213
+ const result = $TOKEN("ExpressionizedStatementWithTrailingCallExpressions", state, ExpressionizedStatementWithTrailingCallExpressions$0(state));
4214
+ if (state.events)
4215
+ state.events.exit?.("ExpressionizedStatementWithTrailingCallExpressions", state, result, eventData);
4216
+ return result;
4217
+ } else {
4218
+ const result = ExpressionizedStatementWithTrailingCallExpressions$0(state);
4219
+ if (state.events)
4220
+ state.events.exit?.("ExpressionizedStatementWithTrailingCallExpressions", state, result, eventData);
4221
+ return result;
4222
+ }
4223
+ }
4168
4224
  var ExpressionizedStatement$0 = DebuggerExpression;
4169
4225
  var ExpressionizedStatement$1 = IfExpression;
4170
4226
  var ExpressionizedStatement$2 = UnlessExpression;
@@ -4450,6 +4506,54 @@ ${input.slice(result.pos)}
4450
4506
  return result;
4451
4507
  }
4452
4508
  }
4509
+ var TrailingCallExpressions$0 = $P($S($C(Samedent, IndentedFurther), $Y($S($E($EXPECT($L5, fail, 'TrailingCallExpressions "?"')), $EXPECT($L6, fail, 'TrailingCallExpressions "."'), $N($R$0($EXPECT($R1, fail, "TrailingCallExpressions /[0-9]/"))))), $P(CallExpressionRest)));
4510
+ function TrailingCallExpressions(state) {
4511
+ let eventData;
4512
+ if (state.events) {
4513
+ const result = state.events.enter?.("TrailingCallExpressions", state);
4514
+ if (result) {
4515
+ if (result.cache)
4516
+ return result.cache;
4517
+ eventData = result.data;
4518
+ }
4519
+ }
4520
+ if (state.tokenize) {
4521
+ const result = $TOKEN("TrailingCallExpressions", state, TrailingCallExpressions$0(state));
4522
+ if (state.events)
4523
+ state.events.exit?.("TrailingCallExpressions", state, result, eventData);
4524
+ return result;
4525
+ } else {
4526
+ const result = TrailingCallExpressions$0(state);
4527
+ if (state.events)
4528
+ state.events.exit?.("TrailingCallExpressions", state, result, eventData);
4529
+ return result;
4530
+ }
4531
+ }
4532
+ var AllowedTrailingCallExpressions$0 = $T($S(TrailingMemberPropertyAllowed, TrailingCallExpressions), function(value) {
4533
+ return value[1];
4534
+ });
4535
+ function AllowedTrailingCallExpressions(state) {
4536
+ let eventData;
4537
+ if (state.events) {
4538
+ const result = state.events.enter?.("AllowedTrailingCallExpressions", state);
4539
+ if (result) {
4540
+ if (result.cache)
4541
+ return result.cache;
4542
+ eventData = result.data;
4543
+ }
4544
+ }
4545
+ if (state.tokenize) {
4546
+ const result = $TOKEN("AllowedTrailingCallExpressions", state, AllowedTrailingCallExpressions$0(state));
4547
+ if (state.events)
4548
+ state.events.exit?.("AllowedTrailingCallExpressions", state, result, eventData);
4549
+ return result;
4550
+ } else {
4551
+ const result = AllowedTrailingCallExpressions$0(state);
4552
+ if (state.events)
4553
+ state.events.exit?.("AllowedTrailingCallExpressions", state, result, eventData);
4554
+ return result;
4555
+ }
4556
+ }
4453
4557
  var CommaDelimiter$0 = $S($E($C(Samedent, IndentedFurther)), $Q(_), Comma);
4454
4558
  function CommaDelimiter(state) {
4455
4559
  let eventData;
@@ -4757,7 +4861,7 @@ ${input.slice(result.pos)}
4757
4861
  }
4758
4862
  var RHS$0 = ParenthesizedAssignment;
4759
4863
  var RHS$1 = UnaryExpression;
4760
- var RHS$2 = ExpressionizedStatement;
4864
+ var RHS$2 = ExpressionizedStatementWithTrailingCallExpressions;
4761
4865
  function RHS(state) {
4762
4866
  let eventData;
4763
4867
  if (state.events) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@danielx/civet",
3
- "version": "0.6.14",
3
+ "version": "0.6.15",
4
4
  "description": "CoffeeScript style syntax for TypeScript",
5
5
  "main": "dist/main.js",
6
6
  "module": "dist/main.mjs",