@mojir/lits 2.0.19 → 2.0.21

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.
Files changed (38) hide show
  1. package/dist/cli/cli.js +339 -455
  2. package/dist/cli/src/Lits/Lits.d.ts +3 -1
  3. package/dist/cli/src/builtin/interface.d.ts +9 -5
  4. package/dist/cli/src/parser/index.d.ts +1 -2
  5. package/dist/cli/src/parser/interface.d.ts +0 -1
  6. package/dist/cli/src/tokenizer/algebraic/algebraicTokenizers.d.ts +1 -1
  7. package/dist/cli/src/tokenizer/algebraic/algebraicTokens.d.ts +2 -2
  8. package/dist/cli/src/tokenizer/common/commonTokenizers.d.ts +2 -2
  9. package/dist/cli/src/tokenizer/common/commonTokens.d.ts +2 -14
  10. package/dist/cli/src/tokenizer/minifyTokenStream.d.ts +2 -0
  11. package/dist/cli/src/tokenizer/polish/polishTokenizers.d.ts +1 -1
  12. package/dist/cli/src/tokenizer/polish/polishTokens.d.ts +2 -2
  13. package/dist/cli/src/tokenizer/tokens.d.ts +2 -2
  14. package/dist/cli/src/typeGuards/index.d.ts +1 -7
  15. package/dist/index.esm.js +338 -454
  16. package/dist/index.esm.js.map +1 -1
  17. package/dist/index.js +338 -454
  18. package/dist/index.js.map +1 -1
  19. package/dist/lits.iife.js +338 -454
  20. package/dist/lits.iife.js.map +1 -1
  21. package/dist/src/Lits/Lits.d.ts +3 -1
  22. package/dist/src/builtin/interface.d.ts +9 -5
  23. package/dist/src/parser/index.d.ts +1 -2
  24. package/dist/src/parser/interface.d.ts +0 -1
  25. package/dist/src/tokenizer/algebraic/algebraicTokenizers.d.ts +1 -1
  26. package/dist/src/tokenizer/algebraic/algebraicTokens.d.ts +2 -2
  27. package/dist/src/tokenizer/common/commonTokenizers.d.ts +2 -2
  28. package/dist/src/tokenizer/common/commonTokens.d.ts +2 -14
  29. package/dist/src/tokenizer/minifyTokenStream.d.ts +2 -0
  30. package/dist/src/tokenizer/polish/polishTokenizers.d.ts +1 -1
  31. package/dist/src/tokenizer/polish/polishTokens.d.ts +2 -2
  32. package/dist/src/tokenizer/tokens.d.ts +2 -2
  33. package/dist/src/typeGuards/index.d.ts +1 -7
  34. package/dist/testFramework.esm.js +448 -564
  35. package/dist/testFramework.esm.js.map +1 -1
  36. package/dist/testFramework.js +448 -564
  37. package/dist/testFramework.js.map +1 -1
  38. package/package.json +1 -1
@@ -277,9 +277,6 @@ var commonSimpleTokenTypes = [
277
277
  'RBrace',
278
278
  'RBracket',
279
279
  'RParen',
280
- 'AlgNotation',
281
- 'PolNotation',
282
- 'EndNotation',
283
280
  ];
284
281
  var commomValueTokenTypes = [
285
282
  'String',
@@ -369,20 +366,6 @@ function asRegexpShorthandToken(token) {
369
366
  assertRegexpShorthandToken(token);
370
367
  return token;
371
368
  }
372
- function isAlgebraicNotationToken(token) {
373
- return (token === null || token === void 0 ? void 0 : token[0]) === 'AlgNotation';
374
- }
375
- function isPolishNotationToken(token) {
376
- return (token === null || token === void 0 ? void 0 : token[0]) === 'PolNotation';
377
- }
378
- function isEndNotationToken(token) {
379
- return (token === null || token === void 0 ? void 0 : token[0]) === 'EndNotation';
380
- }
381
- function assertEndNotationToken(token) {
382
- if (!isEndNotationToken(token)) {
383
- throwUnexpectedToken('EndNotation', undefined, token);
384
- }
385
- }
386
369
 
387
370
  var algebraicSimpleTokenTypes = __spreadArray([], __read(commonSimpleTokenTypes), false);
388
371
  var algebraicOnlyValueTokenTypes = [
@@ -771,6 +754,128 @@ function asNumber(value, sourceCodeInfo, options) {
771
754
  return value;
772
755
  }
773
756
 
757
+ var bitwiseNormalExpression = {
758
+ '<<': {
759
+ evaluate: function (_a, sourceCodeInfo) {
760
+ var _b = __read(_a, 2), num = _b[0], count = _b[1];
761
+ assertNumber(num, sourceCodeInfo, { integer: true });
762
+ assertNumber(count, sourceCodeInfo, { integer: true, nonNegative: true });
763
+ return num << count;
764
+ },
765
+ paramCount: 2,
766
+ },
767
+ '>>': {
768
+ evaluate: function (_a, sourceCodeInfo) {
769
+ var _b = __read(_a, 2), num = _b[0], count = _b[1];
770
+ assertNumber(num, sourceCodeInfo, { integer: true });
771
+ assertNumber(count, sourceCodeInfo, { integer: true, nonNegative: true });
772
+ return num >> count;
773
+ },
774
+ paramCount: 2,
775
+ },
776
+ '>>>': {
777
+ evaluate: function (_a, sourceCodeInfo) {
778
+ var _b = __read(_a, 2), num = _b[0], count = _b[1];
779
+ assertNumber(num, sourceCodeInfo, { integer: true });
780
+ assertNumber(count, sourceCodeInfo, { integer: true, nonNegative: true });
781
+ return num >>> count;
782
+ },
783
+ paramCount: 2,
784
+ },
785
+ '~': {
786
+ evaluate: function (_a, sourceCodeInfo) {
787
+ var _b = __read(_a, 1), num = _b[0];
788
+ assertNumber(num, sourceCodeInfo, { integer: true });
789
+ return ~num;
790
+ },
791
+ paramCount: 1,
792
+ },
793
+ '&': {
794
+ evaluate: function (_a, sourceCodeInfo) {
795
+ var _b = __read(_a), first = _b[0], rest = _b.slice(1);
796
+ assertNumber(first, sourceCodeInfo, { integer: true });
797
+ return rest.reduce(function (result, value) {
798
+ assertNumber(value, sourceCodeInfo, { integer: true });
799
+ return result & value;
800
+ }, first);
801
+ },
802
+ paramCount: { min: 2 },
803
+ },
804
+ '&!': {
805
+ evaluate: function (_a, sourceCodeInfo) {
806
+ var _b = __read(_a), first = _b[0], rest = _b.slice(1);
807
+ assertNumber(first, sourceCodeInfo, { integer: true });
808
+ return rest.reduce(function (result, value) {
809
+ assertNumber(value, sourceCodeInfo, { integer: true });
810
+ return result & ~value;
811
+ }, first);
812
+ },
813
+ paramCount: { min: 2 },
814
+ },
815
+ '|': {
816
+ evaluate: function (_a, sourceCodeInfo) {
817
+ var _b = __read(_a), first = _b[0], rest = _b.slice(1);
818
+ assertNumber(first, sourceCodeInfo, { integer: true });
819
+ return rest.reduce(function (result, value) {
820
+ assertNumber(value, sourceCodeInfo, { integer: true });
821
+ return result | value;
822
+ }, first);
823
+ },
824
+ paramCount: { min: 2 },
825
+ },
826
+ '^': {
827
+ evaluate: function (_a, sourceCodeInfo) {
828
+ var _b = __read(_a), first = _b[0], rest = _b.slice(1);
829
+ assertNumber(first, sourceCodeInfo, { integer: true });
830
+ return rest.reduce(function (result, value) {
831
+ assertNumber(value, sourceCodeInfo, { integer: true });
832
+ return result ^ value;
833
+ }, first);
834
+ },
835
+ paramCount: { min: 2 },
836
+ },
837
+ 'bit_flip': {
838
+ evaluate: function (_a, sourceCodeInfo) {
839
+ var _b = __read(_a, 2), num = _b[0], index = _b[1];
840
+ assertNumber(num, sourceCodeInfo, { integer: true });
841
+ assertNumber(index, sourceCodeInfo, { integer: true, nonNegative: true });
842
+ var mask = 1 << index;
843
+ return (num ^= mask);
844
+ },
845
+ paramCount: 2,
846
+ },
847
+ 'bit_set': {
848
+ evaluate: function (_a, sourceCodeInfo) {
849
+ var _b = __read(_a, 2), num = _b[0], index = _b[1];
850
+ assertNumber(num, sourceCodeInfo, { integer: true });
851
+ assertNumber(index, sourceCodeInfo, { integer: true, nonNegative: true });
852
+ var mask = 1 << index;
853
+ return (num |= mask);
854
+ },
855
+ paramCount: 2,
856
+ },
857
+ 'bit_clear': {
858
+ evaluate: function (_a, sourceCodeInfo) {
859
+ var _b = __read(_a, 2), num = _b[0], index = _b[1];
860
+ assertNumber(num, sourceCodeInfo, { integer: true });
861
+ assertNumber(index, sourceCodeInfo, { integer: true, nonNegative: true });
862
+ var mask = 1 << index;
863
+ return (num &= ~mask);
864
+ },
865
+ paramCount: 2,
866
+ },
867
+ 'bit_test': {
868
+ evaluate: function (_a, sourceCodeInfo) {
869
+ var _b = __read(_a, 2), num = _b[0], index = _b[1];
870
+ assertNumber(num, sourceCodeInfo, { integer: true });
871
+ assertNumber(index, sourceCodeInfo, { integer: true, nonNegative: true });
872
+ var mask = 1 << index;
873
+ return !!(num & mask);
874
+ },
875
+ paramCount: 2,
876
+ },
877
+ };
878
+
774
879
  function getAssertionError(typeName, value, sourceCodeInfo) {
775
880
  return new LitsError("Expected ".concat(typeName, ", got ").concat(valueToString(value), "."), getSourceCodeInfo(value, sourceCodeInfo));
776
881
  }
@@ -922,20 +1027,6 @@ function withoutCommentNodes(astNodes) {
922
1027
  return astNodes.filter(function (n) { return n.t !== AstNodeType.Comment; });
923
1028
  }
924
1029
 
925
- function assertEvenNumberOfParams(node) {
926
- var _a;
927
- var length = withoutCommentNodes(node.p).length;
928
- if (length % 2 !== 0) {
929
- throw new LitsError("Wrong number of arguments, expected an even number, got ".concat(valueToString(length), "."), (_a = getTokenDebugData(node.token)) === null || _a === void 0 ? void 0 : _a.sourceCodeInfo);
930
- }
931
- }
932
- function assertOddNumberOfParams(node) {
933
- var _a;
934
- var length = withoutCommentNodes(node.p).length;
935
- if (length % 2 !== 1) {
936
- throw new LitsError("Wrong number of arguments, expected an odd number, got ".concat(valueToString(length), "."), (_a = getTokenDebugData(node.token)) === null || _a === void 0 ? void 0 : _a.sourceCodeInfo);
937
- }
938
- }
939
1030
  function assertNumberOfParams(count, node) {
940
1031
  var _a, _b;
941
1032
  assertCount({
@@ -967,9 +1058,17 @@ function assertCount(_a) {
967
1058
  }
968
1059
  }
969
1060
  else {
970
- var min = count.min, max = count.max;
971
- if (min === undefined && max === undefined)
972
- throw new LitsError('Min or max must be specified.', sourceCodeInfo);
1061
+ var min = count.min, max = count.max, even = count.even, odd = count.odd;
1062
+ if (even) {
1063
+ if (length % 2 !== 0) {
1064
+ throw new LitsError("Wrong number of arguments to \"".concat(name, "\",, expected an even number, got ").concat(valueToString(length), "."), sourceCodeInfo);
1065
+ }
1066
+ }
1067
+ if (odd) {
1068
+ if (length % 2 !== 1) {
1069
+ throw new LitsError("Wrong number of arguments to \"".concat(name, "\",, expected an odd number, got ").concat(valueToString(length), "."), sourceCodeInfo);
1070
+ }
1071
+ }
973
1072
  if (typeof min === 'number' && length < min) {
974
1073
  throw new LitsError("Wrong number of arguments to \"".concat(name, "\", expected at least ").concat(min, ", got ").concat(valueToString(length), "."), sourceCodeInfo);
975
1074
  }
@@ -979,128 +1078,6 @@ function assertCount(_a) {
979
1078
  }
980
1079
  }
981
1080
 
982
- var bitwiseNormalExpression = {
983
- '<<': {
984
- evaluate: function (_a, sourceCodeInfo) {
985
- var _b = __read(_a, 2), num = _b[0], count = _b[1];
986
- assertNumber(num, sourceCodeInfo, { integer: true });
987
- assertNumber(count, sourceCodeInfo, { integer: true, nonNegative: true });
988
- return num << count;
989
- },
990
- validate: function (node) { return assertNumberOfParams(2, node); },
991
- },
992
- '>>': {
993
- evaluate: function (_a, sourceCodeInfo) {
994
- var _b = __read(_a, 2), num = _b[0], count = _b[1];
995
- assertNumber(num, sourceCodeInfo, { integer: true });
996
- assertNumber(count, sourceCodeInfo, { integer: true, nonNegative: true });
997
- return num >> count;
998
- },
999
- validate: function (node) { return assertNumberOfParams(2, node); },
1000
- },
1001
- '>>>': {
1002
- evaluate: function (_a, sourceCodeInfo) {
1003
- var _b = __read(_a, 2), num = _b[0], count = _b[1];
1004
- assertNumber(num, sourceCodeInfo, { integer: true });
1005
- assertNumber(count, sourceCodeInfo, { integer: true, nonNegative: true });
1006
- return num >>> count;
1007
- },
1008
- validate: function (node) { return assertNumberOfParams(2, node); },
1009
- },
1010
- '~': {
1011
- evaluate: function (_a, sourceCodeInfo) {
1012
- var _b = __read(_a, 1), num = _b[0];
1013
- assertNumber(num, sourceCodeInfo, { integer: true });
1014
- return ~num;
1015
- },
1016
- validate: function (node) { return assertNumberOfParams(1, node); },
1017
- },
1018
- '&': {
1019
- evaluate: function (_a, sourceCodeInfo) {
1020
- var _b = __read(_a), first = _b[0], rest = _b.slice(1);
1021
- assertNumber(first, sourceCodeInfo, { integer: true });
1022
- return rest.reduce(function (result, value) {
1023
- assertNumber(value, sourceCodeInfo, { integer: true });
1024
- return result & value;
1025
- }, first);
1026
- },
1027
- validate: function (node) { return assertNumberOfParams({ min: 2 }, node); },
1028
- },
1029
- '&!': {
1030
- evaluate: function (_a, sourceCodeInfo) {
1031
- var _b = __read(_a), first = _b[0], rest = _b.slice(1);
1032
- assertNumber(first, sourceCodeInfo, { integer: true });
1033
- return rest.reduce(function (result, value) {
1034
- assertNumber(value, sourceCodeInfo, { integer: true });
1035
- return result & ~value;
1036
- }, first);
1037
- },
1038
- validate: function (node) { return assertNumberOfParams({ min: 2 }, node); },
1039
- },
1040
- '|': {
1041
- evaluate: function (_a, sourceCodeInfo) {
1042
- var _b = __read(_a), first = _b[0], rest = _b.slice(1);
1043
- assertNumber(first, sourceCodeInfo, { integer: true });
1044
- return rest.reduce(function (result, value) {
1045
- assertNumber(value, sourceCodeInfo, { integer: true });
1046
- return result | value;
1047
- }, first);
1048
- },
1049
- validate: function (node) { return assertNumberOfParams({ min: 2 }, node); },
1050
- },
1051
- '^': {
1052
- evaluate: function (_a, sourceCodeInfo) {
1053
- var _b = __read(_a), first = _b[0], rest = _b.slice(1);
1054
- assertNumber(first, sourceCodeInfo, { integer: true });
1055
- return rest.reduce(function (result, value) {
1056
- assertNumber(value, sourceCodeInfo, { integer: true });
1057
- return result ^ value;
1058
- }, first);
1059
- },
1060
- validate: function (node) { return assertNumberOfParams({ min: 2 }, node); },
1061
- },
1062
- 'bit_flip': {
1063
- evaluate: function (_a, sourceCodeInfo) {
1064
- var _b = __read(_a, 2), num = _b[0], index = _b[1];
1065
- assertNumber(num, sourceCodeInfo, { integer: true });
1066
- assertNumber(index, sourceCodeInfo, { integer: true, nonNegative: true });
1067
- var mask = 1 << index;
1068
- return (num ^= mask);
1069
- },
1070
- validate: function (node) { return assertNumberOfParams(2, node); },
1071
- },
1072
- 'bit_set': {
1073
- evaluate: function (_a, sourceCodeInfo) {
1074
- var _b = __read(_a, 2), num = _b[0], index = _b[1];
1075
- assertNumber(num, sourceCodeInfo, { integer: true });
1076
- assertNumber(index, sourceCodeInfo, { integer: true, nonNegative: true });
1077
- var mask = 1 << index;
1078
- return (num |= mask);
1079
- },
1080
- validate: function (node) { return assertNumberOfParams(2, node); },
1081
- },
1082
- 'bit_clear': {
1083
- evaluate: function (_a, sourceCodeInfo) {
1084
- var _b = __read(_a, 2), num = _b[0], index = _b[1];
1085
- assertNumber(num, sourceCodeInfo, { integer: true });
1086
- assertNumber(index, sourceCodeInfo, { integer: true, nonNegative: true });
1087
- var mask = 1 << index;
1088
- return (num &= ~mask);
1089
- },
1090
- validate: function (node) { return assertNumberOfParams(2, node); },
1091
- },
1092
- 'bit_test': {
1093
- evaluate: function (_a, sourceCodeInfo) {
1094
- var _b = __read(_a, 2), num = _b[0], index = _b[1];
1095
- assertNumber(num, sourceCodeInfo, { integer: true });
1096
- assertNumber(index, sourceCodeInfo, { integer: true, nonNegative: true });
1097
- var mask = 1 << index;
1098
- return !!(num & mask);
1099
- },
1100
- validate: function (node) { return assertNumberOfParams(2, node); },
1101
- },
1102
- };
1103
-
1104
1081
  function isLitsFunction(value) {
1105
1082
  if (value === null || typeof value !== 'object')
1106
1083
  return false;
@@ -1481,7 +1458,7 @@ var collectionNormalExpression = {
1481
1458
  var result = get(coll, key);
1482
1459
  return result === undefined ? defaultValue : result;
1483
1460
  },
1484
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
1461
+ paramCount: { min: 2, max: 3 },
1485
1462
  },
1486
1463
  'get_in': {
1487
1464
  evaluate: function (params, sourceCodeInfo) {
@@ -1516,7 +1493,7 @@ var collectionNormalExpression = {
1516
1493
  }
1517
1494
  return coll;
1518
1495
  },
1519
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
1496
+ paramCount: { min: 2, max: 3 },
1520
1497
  },
1521
1498
  'count': {
1522
1499
  evaluate: function (_a, sourceCodeInfo) {
@@ -1530,7 +1507,7 @@ var collectionNormalExpression = {
1530
1507
  return coll.length;
1531
1508
  return Object.keys(coll).length;
1532
1509
  },
1533
- validate: function (node) { return assertNumberOfParams(1, node); },
1510
+ paramCount: 1,
1534
1511
  },
1535
1512
  'contains?': {
1536
1513
  evaluate: function (_a, sourceCodeInfo) {
@@ -1547,7 +1524,7 @@ var collectionNormalExpression = {
1547
1524
  }
1548
1525
  return !!Object.getOwnPropertyDescriptor(coll, key);
1549
1526
  },
1550
- validate: function (node) { return assertNumberOfParams(2, node); },
1527
+ paramCount: 2,
1551
1528
  },
1552
1529
  'has?': {
1553
1530
  evaluate: function (_a, sourceCodeInfo) {
@@ -1568,7 +1545,7 @@ var collectionNormalExpression = {
1568
1545
  }
1569
1546
  return Object.values(coll).includes(value);
1570
1547
  },
1571
- validate: function (node) { return assertNumberOfParams(2, node); },
1548
+ paramCount: 2,
1572
1549
  },
1573
1550
  'has_some?': {
1574
1551
  evaluate: function (_a, sourceCodeInfo) {
@@ -1628,7 +1605,7 @@ var collectionNormalExpression = {
1628
1605
  }
1629
1606
  return false;
1630
1607
  },
1631
- validate: function (node) { return assertNumberOfParams(2, node); },
1608
+ paramCount: 2,
1632
1609
  },
1633
1610
  'has_every?': {
1634
1611
  evaluate: function (_a, sourceCodeInfo) {
@@ -1690,7 +1667,7 @@ var collectionNormalExpression = {
1690
1667
  }
1691
1668
  return true;
1692
1669
  },
1693
- validate: function (node) { return assertNumberOfParams(2, node); },
1670
+ paramCount: 2,
1694
1671
  },
1695
1672
  'assoc': {
1696
1673
  evaluate: function (_a, sourceCodeInfo) {
@@ -1700,7 +1677,7 @@ var collectionNormalExpression = {
1700
1677
  assertAny(value, sourceCodeInfo);
1701
1678
  return assoc(coll, key, value, sourceCodeInfo);
1702
1679
  },
1703
- validate: function (node) { return assertNumberOfParams(3, node); },
1680
+ paramCount: 3,
1704
1681
  },
1705
1682
  'assoc_in': {
1706
1683
  evaluate: function (_a, sourceCodeInfo) {
@@ -1725,7 +1702,7 @@ var collectionNormalExpression = {
1725
1702
  }
1726
1703
  return coll;
1727
1704
  },
1728
- validate: function (node) { return assertNumberOfParams(3, node); },
1705
+ paramCount: 3,
1729
1706
  },
1730
1707
  'update': {
1731
1708
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -1736,7 +1713,7 @@ var collectionNormalExpression = {
1736
1713
  assertLitsFunction(fn, sourceCodeInfo);
1737
1714
  return update(coll, key, fn, params, contextStack, executeFunction, sourceCodeInfo);
1738
1715
  },
1739
- validate: function (node) { return assertNumberOfParams({ min: 3 }, node); },
1716
+ paramCount: { min: 3 },
1740
1717
  },
1741
1718
  'update_in': {
1742
1719
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -1762,7 +1739,7 @@ var collectionNormalExpression = {
1762
1739
  }
1763
1740
  return coll;
1764
1741
  },
1765
- validate: function (node) { return assertNumberOfParams({ min: 3 }, node); },
1742
+ paramCount: { min: 3 },
1766
1743
  },
1767
1744
  'concat': {
1768
1745
  evaluate: function (params, sourceCodeInfo) {
@@ -1786,7 +1763,7 @@ var collectionNormalExpression = {
1786
1763
  }, {});
1787
1764
  }
1788
1765
  },
1789
- validate: function (node) { return assertNumberOfParams({ min: 1 }, node); },
1766
+ paramCount: { min: 1 },
1790
1767
  },
1791
1768
  'not_empty': {
1792
1769
  evaluate: function (_a, sourceCodeInfo) {
@@ -1800,7 +1777,7 @@ var collectionNormalExpression = {
1800
1777
  return coll.length > 0 ? coll : null;
1801
1778
  return Object.keys(coll).length > 0 ? coll : null;
1802
1779
  },
1803
- validate: function (node) { return assertNumberOfParams(1, node); },
1780
+ paramCount: 1,
1804
1781
  },
1805
1782
  'every?': {
1806
1783
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -1814,7 +1791,7 @@ var collectionNormalExpression = {
1814
1791
  return coll.split('').every(function (elem) { return executeFunction(fn, [elem], contextStack, sourceCodeInfo); });
1815
1792
  return Object.entries(coll).every(function (elem) { return executeFunction(fn, [elem], contextStack, sourceCodeInfo); });
1816
1793
  },
1817
- validate: function (node) { return assertNumberOfParams(2, node); },
1794
+ paramCount: 2,
1818
1795
  },
1819
1796
  'any?': {
1820
1797
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -1828,7 +1805,7 @@ var collectionNormalExpression = {
1828
1805
  return coll.split('').some(function (elem) { return executeFunction(fn, [elem], contextStack, sourceCodeInfo); });
1829
1806
  return Object.entries(coll).some(function (elem) { return executeFunction(fn, [elem], contextStack, sourceCodeInfo); });
1830
1807
  },
1831
- validate: function (node) { return assertNumberOfParams(2, node); },
1808
+ paramCount: 2,
1832
1809
  },
1833
1810
  'not_any?': {
1834
1811
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -1842,7 +1819,7 @@ var collectionNormalExpression = {
1842
1819
  return !coll.split('').some(function (elem) { return executeFunction(fn, [elem], contextStack, sourceCodeInfo); });
1843
1820
  return !Object.entries(coll).some(function (elem) { return executeFunction(fn, [elem], contextStack, sourceCodeInfo); });
1844
1821
  },
1845
- validate: function (node) { return assertNumberOfParams(2, node); },
1822
+ paramCount: 2,
1846
1823
  },
1847
1824
  'not_every?': {
1848
1825
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -1856,13 +1833,14 @@ var collectionNormalExpression = {
1856
1833
  return !coll.split('').every(function (elem) { return executeFunction(fn, [elem], contextStack, sourceCodeInfo); });
1857
1834
  return !Object.entries(coll).every(function (elem) { return executeFunction(fn, [elem], contextStack, sourceCodeInfo); });
1858
1835
  },
1859
- validate: function (node) { return assertNumberOfParams(2, node); },
1836
+ paramCount: 2,
1860
1837
  },
1861
1838
  };
1862
1839
 
1863
1840
  var arrayNormalExpression = {
1864
1841
  array: {
1865
1842
  evaluate: function (params) { return params; },
1843
+ paramCount: {},
1866
1844
  },
1867
1845
  range: {
1868
1846
  evaluate: function (params, sourceCodeInfo) {
@@ -1900,7 +1878,7 @@ var arrayNormalExpression = {
1900
1878
  result.push(i);
1901
1879
  return result;
1902
1880
  },
1903
- validate: function (node) { return assertNumberOfParams({ min: 1, max: 3 }, node); },
1881
+ paramCount: { min: 1, max: 3 },
1904
1882
  },
1905
1883
  repeat: {
1906
1884
  evaluate: function (_a, sourceCodeInfo) {
@@ -1911,7 +1889,7 @@ var arrayNormalExpression = {
1911
1889
  result.push(value);
1912
1890
  return result;
1913
1891
  },
1914
- validate: function (node) { return assertNumberOfParams(2, node); },
1892
+ paramCount: 2,
1915
1893
  },
1916
1894
  flatten: {
1917
1895
  evaluate: function (_a) {
@@ -1920,7 +1898,7 @@ var arrayNormalExpression = {
1920
1898
  return [];
1921
1899
  return seq.flat(Number.POSITIVE_INFINITY);
1922
1900
  },
1923
- validate: function (node) { return assertNumberOfParams(1, node); },
1901
+ paramCount: 1,
1924
1902
  },
1925
1903
  mapcat: {
1926
1904
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -1930,7 +1908,7 @@ var arrayNormalExpression = {
1930
1908
  assertLitsFunction(fn, sourceCodeInfo);
1931
1909
  return arr.map(function (elem) { return executeFunction(fn, [elem], contextStack, sourceCodeInfo); }).flat(1);
1932
1910
  },
1933
- validate: function (node) { return assertNumberOfParams(2, node); },
1911
+ paramCount: 2,
1934
1912
  },
1935
1913
  };
1936
1914
 
@@ -1945,7 +1923,7 @@ var sequenceNormalExpression = {
1945
1923
  assertSeq(seq, sourceCodeInfo);
1946
1924
  return i >= 0 && i < seq.length ? toAny(seq[i]) : defaultValue;
1947
1925
  },
1948
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
1926
+ paramCount: { min: 2, max: 3 },
1949
1927
  },
1950
1928
  'filter': {
1951
1929
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -1960,7 +1938,7 @@ var sequenceNormalExpression = {
1960
1938
  .filter(function (elem) { return executeFunction(fn, [elem], contextStack, sourceCodeInfo); })
1961
1939
  .join('');
1962
1940
  },
1963
- validate: function (node) { return assertNumberOfParams(2, node); },
1941
+ paramCount: 2,
1964
1942
  },
1965
1943
  'first': {
1966
1944
  evaluate: function (_a, sourceCodeInfo) {
@@ -1970,7 +1948,7 @@ var sequenceNormalExpression = {
1970
1948
  assertSeq(array, sourceCodeInfo);
1971
1949
  return toAny(array[0]);
1972
1950
  },
1973
- validate: function (node) { return assertNumberOfParams(1, node); },
1951
+ paramCount: 1,
1974
1952
  },
1975
1953
  'last': {
1976
1954
  evaluate: function (_a, sourceCodeInfo) {
@@ -1980,7 +1958,7 @@ var sequenceNormalExpression = {
1980
1958
  assertSeq(array, sourceCodeInfo);
1981
1959
  return toAny(array[array.length - 1]);
1982
1960
  },
1983
- validate: function (node) { return assertNumberOfParams(1, node); },
1961
+ paramCount: 1,
1984
1962
  },
1985
1963
  'map': {
1986
1964
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -2002,7 +1980,7 @@ var sequenceNormalExpression = {
2002
1980
  .join('');
2003
1981
  }
2004
1982
  },
2005
- validate: function (node) { return assertNumberOfParams(2, node); },
1983
+ paramCount: 2,
2006
1984
  },
2007
1985
  'pop': {
2008
1986
  evaluate: function (_a, sourceCodeInfo) {
@@ -2013,7 +1991,7 @@ var sequenceNormalExpression = {
2013
1991
  }
2014
1992
  return seq.slice(0, seq.length - 1);
2015
1993
  },
2016
- validate: function (node) { return assertNumberOfParams(1, node); },
1994
+ paramCount: 1,
2017
1995
  },
2018
1996
  'position': {
2019
1997
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -2032,7 +2010,7 @@ var sequenceNormalExpression = {
2032
2010
  return index !== -1 ? index : null;
2033
2011
  }
2034
2012
  },
2035
- validate: function (node) { return assertNumberOfParams(2, node); },
2013
+ paramCount: 2,
2036
2014
  },
2037
2015
  'index_of': {
2038
2016
  evaluate: function (_a, sourceCodeInfo) {
@@ -2051,7 +2029,7 @@ var sequenceNormalExpression = {
2051
2029
  return index !== -1 ? index : null;
2052
2030
  }
2053
2031
  },
2054
- validate: function (node) { return assertNumberOfParams(2, node); },
2032
+ paramCount: 2,
2055
2033
  },
2056
2034
  'last_index_of': {
2057
2035
  evaluate: function (_a, sourceCodeInfo) {
@@ -2070,7 +2048,7 @@ var sequenceNormalExpression = {
2070
2048
  return index !== -1 ? index : null;
2071
2049
  }
2072
2050
  },
2073
- validate: function (node) { return assertNumberOfParams(2, node); },
2051
+ paramCount: 2,
2074
2052
  },
2075
2053
  'push': {
2076
2054
  evaluate: function (_a, sourceCodeInfo) {
@@ -2084,7 +2062,7 @@ var sequenceNormalExpression = {
2084
2062
  return __spreadArray(__spreadArray([], __read(seq), false), __read(values), false);
2085
2063
  }
2086
2064
  },
2087
- validate: function (node) { return assertNumberOfParams({ min: 2 }, node); },
2065
+ paramCount: { min: 2 },
2088
2066
  },
2089
2067
  'reductions': {
2090
2068
  evaluate: function (params, sourceCodeInfo, contextStack, _a) {
@@ -2145,7 +2123,7 @@ var sequenceNormalExpression = {
2145
2123
  }
2146
2124
  }
2147
2125
  },
2148
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
2126
+ paramCount: { min: 2, max: 3 },
2149
2127
  },
2150
2128
  'reduce': {
2151
2129
  evaluate: function (params, sourceCodeInfo, contextStack, _a) {
@@ -2192,7 +2170,7 @@ var sequenceNormalExpression = {
2192
2170
  }
2193
2171
  }
2194
2172
  },
2195
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
2173
+ paramCount: { min: 2, max: 3 },
2196
2174
  },
2197
2175
  'reduce_right': {
2198
2176
  evaluate: function (params, sourceCodeInfo, contextStack, _a) {
@@ -2240,7 +2218,7 @@ var sequenceNormalExpression = {
2240
2218
  }
2241
2219
  }
2242
2220
  },
2243
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
2221
+ paramCount: { min: 2, max: 3 },
2244
2222
  },
2245
2223
  'rest': {
2246
2224
  evaluate: function (_a, sourceCodeInfo) {
@@ -2253,7 +2231,7 @@ var sequenceNormalExpression = {
2253
2231
  }
2254
2232
  return seq.substring(1);
2255
2233
  },
2256
- validate: function (node) { return assertNumberOfParams(1, node); },
2234
+ paramCount: 1,
2257
2235
  },
2258
2236
  'nthrest': {
2259
2237
  evaluate: function (_a, sourceCodeInfo) {
@@ -2265,7 +2243,7 @@ var sequenceNormalExpression = {
2265
2243
  return seq.slice(integerCount);
2266
2244
  return seq.substring(integerCount);
2267
2245
  },
2268
- validate: function (node) { return assertNumberOfParams(2, node); },
2246
+ paramCount: 2,
2269
2247
  },
2270
2248
  'next': {
2271
2249
  evaluate: function (_a, sourceCodeInfo) {
@@ -2280,7 +2258,7 @@ var sequenceNormalExpression = {
2280
2258
  return null;
2281
2259
  return seq.substring(1);
2282
2260
  },
2283
- validate: function (node) { return assertNumberOfParams(1, node); },
2261
+ paramCount: 1,
2284
2262
  },
2285
2263
  'nthnext': {
2286
2264
  evaluate: function (_a, sourceCodeInfo) {
@@ -2294,7 +2272,7 @@ var sequenceNormalExpression = {
2294
2272
  return seq.slice(integerCount);
2295
2273
  return seq.substring(integerCount);
2296
2274
  },
2297
- validate: function (node) { return assertNumberOfParams(2, node); },
2275
+ paramCount: 2,
2298
2276
  },
2299
2277
  'reverse': {
2300
2278
  evaluate: function (_a, sourceCodeInfo) {
@@ -2306,7 +2284,7 @@ var sequenceNormalExpression = {
2306
2284
  return __spreadArray([], __read(seq), false).reverse();
2307
2285
  return seq.split('').reverse().join('');
2308
2286
  },
2309
- validate: function (node) { return assertNumberOfParams(1, node); },
2287
+ paramCount: 1,
2310
2288
  },
2311
2289
  'second': {
2312
2290
  evaluate: function (_a, sourceCodeInfo) {
@@ -2316,7 +2294,7 @@ var sequenceNormalExpression = {
2316
2294
  assertSeq(seq, sourceCodeInfo);
2317
2295
  return toAny(seq[1]);
2318
2296
  },
2319
- validate: function (node) { return assertNumberOfParams(1, node); },
2297
+ paramCount: 1,
2320
2298
  },
2321
2299
  'shift': {
2322
2300
  evaluate: function (_a, sourceCodeInfo) {
@@ -2328,7 +2306,7 @@ var sequenceNormalExpression = {
2328
2306
  copy.shift();
2329
2307
  return copy;
2330
2308
  },
2331
- validate: function (node) { return assertNumberOfParams(1, node); },
2309
+ paramCount: 1,
2332
2310
  },
2333
2311
  'slice': {
2334
2312
  evaluate: function (params, sourceCodeInfo) {
@@ -2342,7 +2320,7 @@ var sequenceNormalExpression = {
2342
2320
  assertNumber(to, sourceCodeInfo, { integer: true });
2343
2321
  return seq.slice(from, to);
2344
2322
  },
2345
- validate: function (node) { return assertNumberOfParams({ min: 1, max: 3 }, node); },
2323
+ paramCount: { min: 1, max: 3 },
2346
2324
  },
2347
2325
  'some': {
2348
2326
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -2359,7 +2337,7 @@ var sequenceNormalExpression = {
2359
2337
  return (_c = seq.split('').find(function (elem) { return executeFunction(fn, [elem], contextStack, sourceCodeInfo); })) !== null && _c !== void 0 ? _c : null;
2360
2338
  return toAny(seq.find(function (elem) { return executeFunction(fn, [elem], contextStack, sourceCodeInfo); }));
2361
2339
  },
2362
- validate: function (node) { return assertNumberOfParams(2, node); },
2340
+ paramCount: 2,
2363
2341
  },
2364
2342
  'sort': {
2365
2343
  evaluate: function (params, sourceCodeInfo, contextStack, _a) {
@@ -2397,7 +2375,7 @@ var sequenceNormalExpression = {
2397
2375
  }
2398
2376
  return result;
2399
2377
  },
2400
- validate: function (node) { return assertNumberOfParams({ min: 1, max: 2 }, node); },
2378
+ paramCount: { min: 1, max: 2 },
2401
2379
  },
2402
2380
  'sort_by': {
2403
2381
  evaluate: function (params, sourceCodeInfo, contextStack, _a) {
@@ -2448,7 +2426,7 @@ var sequenceNormalExpression = {
2448
2426
  }
2449
2427
  return result;
2450
2428
  },
2451
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
2429
+ paramCount: { min: 2, max: 3 },
2452
2430
  },
2453
2431
  'take': {
2454
2432
  evaluate: function (_a, sourceCodeInfo) {
@@ -2458,7 +2436,7 @@ var sequenceNormalExpression = {
2458
2436
  var num = Math.max(Math.ceil(n), 0);
2459
2437
  return input.slice(0, num);
2460
2438
  },
2461
- validate: function (node) { return assertNumberOfParams(2, node); },
2439
+ paramCount: 2,
2462
2440
  },
2463
2441
  'take_last': {
2464
2442
  evaluate: function (_a, sourceCodeInfo) {
@@ -2469,7 +2447,7 @@ var sequenceNormalExpression = {
2469
2447
  var from = array.length - num;
2470
2448
  return array.slice(from);
2471
2449
  },
2472
- validate: function (node) { return assertNumberOfParams(2, node); },
2450
+ paramCount: 2,
2473
2451
  },
2474
2452
  'take_while': {
2475
2453
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -2497,7 +2475,7 @@ var sequenceNormalExpression = {
2497
2475
  }
2498
2476
  return typeof seq === 'string' ? result.join('') : result;
2499
2477
  },
2500
- validate: function (node) { return assertNumberOfParams(2, node); },
2478
+ paramCount: 2,
2501
2479
  },
2502
2480
  'drop': {
2503
2481
  evaluate: function (_a, sourceCodeInfo) {
@@ -2507,7 +2485,7 @@ var sequenceNormalExpression = {
2507
2485
  assertSeq(input, sourceCodeInfo);
2508
2486
  return input.slice(num);
2509
2487
  },
2510
- validate: function (node) { return assertNumberOfParams(2, node); },
2488
+ paramCount: 2,
2511
2489
  },
2512
2490
  'drop_last': {
2513
2491
  evaluate: function (_a, sourceCodeInfo) {
@@ -2518,7 +2496,7 @@ var sequenceNormalExpression = {
2518
2496
  var from = array.length - num;
2519
2497
  return array.slice(0, from);
2520
2498
  },
2521
- validate: function (node) { return assertNumberOfParams(2, node); },
2499
+ paramCount: 2,
2522
2500
  },
2523
2501
  'drop_while': {
2524
2502
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -2534,7 +2512,7 @@ var sequenceNormalExpression = {
2534
2512
  var from = charArray.findIndex(function (elem) { return !executeFunction(fn, [elem], contextStack, sourceCodeInfo); });
2535
2513
  return charArray.slice(from).join('');
2536
2514
  },
2537
- validate: function (node) { return assertNumberOfParams(2, node); },
2515
+ paramCount: 2,
2538
2516
  },
2539
2517
  'unshift': {
2540
2518
  evaluate: function (_a, sourceCodeInfo) {
@@ -2548,7 +2526,7 @@ var sequenceNormalExpression = {
2548
2526
  copy.unshift.apply(copy, __spreadArray([], __read(values), false));
2549
2527
  return copy;
2550
2528
  },
2551
- validate: function (node) { return assertNumberOfParams({ min: 2 }, node); },
2529
+ paramCount: { min: 2 },
2552
2530
  },
2553
2531
  'distinct': {
2554
2532
  evaluate: function (_a, sourceCodeInfo) {
@@ -2558,7 +2536,7 @@ var sequenceNormalExpression = {
2558
2536
  return Array.from(new Set(input));
2559
2537
  return Array.from(new Set(input.split(''))).join('');
2560
2538
  },
2561
- validate: function (node) { return assertNumberOfParams(1, node); },
2539
+ paramCount: 1,
2562
2540
  },
2563
2541
  'remove': {
2564
2542
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -2573,7 +2551,7 @@ var sequenceNormalExpression = {
2573
2551
  .filter(function (elem) { return !executeFunction(fn, [elem], contextStack, sourceCodeInfo); })
2574
2552
  .join('');
2575
2553
  },
2576
- validate: function (node) { return assertNumberOfParams(2, node); },
2554
+ paramCount: 2,
2577
2555
  },
2578
2556
  'remove_at': {
2579
2557
  evaluate: function (_a, sourceCodeInfo) {
@@ -2590,7 +2568,7 @@ var sequenceNormalExpression = {
2590
2568
  }
2591
2569
  return "".concat(input.substring(0, index)).concat(input.substring(index + 1));
2592
2570
  },
2593
- validate: function (node) { return assertNumberOfParams(2, node); },
2571
+ paramCount: 2,
2594
2572
  },
2595
2573
  'split_at': {
2596
2574
  evaluate: function (_a, sourceCodeInfo) {
@@ -2600,7 +2578,7 @@ var sequenceNormalExpression = {
2600
2578
  assertSeq(seq, sourceCodeInfo);
2601
2579
  return [seq.slice(0, intPos), seq.slice(intPos)];
2602
2580
  },
2603
- validate: function (node) { return assertNumberOfParams(2, node); },
2581
+ paramCount: 2,
2604
2582
  },
2605
2583
  'split_with': {
2606
2584
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -2615,7 +2593,7 @@ var sequenceNormalExpression = {
2615
2593
  return [seq, seqIsArray ? [] : ''];
2616
2594
  return [seq.slice(0, index), seq.slice(index)];
2617
2595
  },
2618
- validate: function (node) { return assertNumberOfParams(2, node); },
2596
+ paramCount: 2,
2619
2597
  },
2620
2598
  'frequencies': {
2621
2599
  evaluate: function (_a, sourceCodeInfo) {
@@ -2631,7 +2609,7 @@ var sequenceNormalExpression = {
2631
2609
  return result;
2632
2610
  }, {});
2633
2611
  },
2634
- validate: function (node) { return assertNumberOfParams(1, node); },
2612
+ paramCount: 1,
2635
2613
  },
2636
2614
  'group_by': {
2637
2615
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -2649,7 +2627,7 @@ var sequenceNormalExpression = {
2649
2627
  return result;
2650
2628
  }, {});
2651
2629
  },
2652
- validate: function (node) { return assertNumberOfParams(2, node); },
2630
+ paramCount: 2,
2653
2631
  },
2654
2632
  'partition': {
2655
2633
  evaluate: function (params, sourceCodeInfo) {
@@ -2661,7 +2639,7 @@ var sequenceNormalExpression = {
2661
2639
  : undefined;
2662
2640
  return partition(n, step, seq, pad, sourceCodeInfo);
2663
2641
  },
2664
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 4 }, node); },
2642
+ paramCount: { min: 2, max: 4 },
2665
2643
  },
2666
2644
  'partition_all': {
2667
2645
  evaluate: function (params, sourceCodeInfo) {
@@ -2670,7 +2648,7 @@ var sequenceNormalExpression = {
2670
2648
  var step = params.length === 3 ? toNonNegativeInteger(asNumber(params[2], sourceCodeInfo)) : n;
2671
2649
  return partition(n, step, seq, [], sourceCodeInfo);
2672
2650
  },
2673
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
2651
+ paramCount: { min: 2, max: 3 },
2674
2652
  },
2675
2653
  'partition_by': {
2676
2654
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -2691,7 +2669,7 @@ var sequenceNormalExpression = {
2691
2669
  }, []);
2692
2670
  return isStringSeq ? result.map(function (elem) { return elem.join(''); }) : result;
2693
2671
  },
2694
- validate: function (node) { return assertNumberOfParams(2, node); },
2672
+ paramCount: 2,
2695
2673
  },
2696
2674
  'ends_with?': {
2697
2675
  evaluate: function (_a, sourceCodeInfo) {
@@ -2703,7 +2681,7 @@ var sequenceNormalExpression = {
2703
2681
  }
2704
2682
  return str.at(-1) === search;
2705
2683
  },
2706
- validate: function (node) { return assertNumberOfParams(2, node); },
2684
+ paramCount: 2,
2707
2685
  },
2708
2686
  'starts_with?': {
2709
2687
  evaluate: function (_a, sourceCodeInfo) {
@@ -2715,7 +2693,7 @@ var sequenceNormalExpression = {
2715
2693
  }
2716
2694
  return str[0] === search;
2717
2695
  },
2718
- validate: function (node) { return assertNumberOfParams(2, node); },
2696
+ paramCount: 2,
2719
2697
  },
2720
2698
  'interleave': {
2721
2699
  evaluate: function (_a, sourceCodeInfo) {
@@ -2753,7 +2731,7 @@ var sequenceNormalExpression = {
2753
2731
  }
2754
2732
  return isStringSeq ? result.join('') : result;
2755
2733
  },
2756
- validate: function (node) { return assertNumberOfParams({ min: 1 }, node); },
2734
+ paramCount: { min: 1 },
2757
2735
  },
2758
2736
  'interpose': {
2759
2737
  evaluate: function (_a, sourceCodeInfo) {
@@ -2772,7 +2750,7 @@ var sequenceNormalExpression = {
2772
2750
  result.push(seq[seq.length - 1]);
2773
2751
  return result;
2774
2752
  },
2775
- validate: function (node) { return assertNumberOfParams(2, node); },
2753
+ paramCount: 2,
2776
2754
  },
2777
2755
  };
2778
2756
  function partition(n, step, seq, pad, sourceCodeInfo) {
@@ -2810,7 +2788,7 @@ var mathNormalExpression = {
2810
2788
  assertNumber(first, sourceCodeInfo);
2811
2789
  return first + 1;
2812
2790
  },
2813
- validate: function (node) { return assertNumberOfParams(1, node); },
2791
+ paramCount: 1,
2814
2792
  },
2815
2793
  'dec': {
2816
2794
  evaluate: function (_a, sourceCodeInfo) {
@@ -2818,7 +2796,7 @@ var mathNormalExpression = {
2818
2796
  assertNumber(first, sourceCodeInfo);
2819
2797
  return first - 1;
2820
2798
  },
2821
- validate: function (node) { return assertNumberOfParams(1, node); },
2799
+ paramCount: 1,
2822
2800
  },
2823
2801
  '+': {
2824
2802
  evaluate: function (params, sourceCodeInfo) {
@@ -2827,6 +2805,7 @@ var mathNormalExpression = {
2827
2805
  return result + param;
2828
2806
  }, 0);
2829
2807
  },
2808
+ paramCount: {},
2830
2809
  },
2831
2810
  '*': {
2832
2811
  evaluate: function (params, sourceCodeInfo) {
@@ -2835,6 +2814,7 @@ var mathNormalExpression = {
2835
2814
  return result * param;
2836
2815
  }, 1);
2837
2816
  },
2817
+ paramCount: {},
2838
2818
  },
2839
2819
  '/': {
2840
2820
  evaluate: function (params, sourceCodeInfo) {
@@ -2851,6 +2831,7 @@ var mathNormalExpression = {
2851
2831
  return result / param;
2852
2832
  }, first);
2853
2833
  },
2834
+ paramCount: {},
2854
2835
  },
2855
2836
  '-': {
2856
2837
  evaluate: function (params, sourceCodeInfo) {
@@ -2865,6 +2846,7 @@ var mathNormalExpression = {
2865
2846
  return result - param;
2866
2847
  }, first);
2867
2848
  },
2849
+ paramCount: {},
2868
2850
  },
2869
2851
  'quot': {
2870
2852
  evaluate: function (_a, sourceCodeInfo) {
@@ -2874,7 +2856,7 @@ var mathNormalExpression = {
2874
2856
  var quotient = Math.trunc(dividend / divisor);
2875
2857
  return quotient;
2876
2858
  },
2877
- validate: function (node) { return assertNumberOfParams(2, node); },
2859
+ paramCount: 2,
2878
2860
  },
2879
2861
  'mod': {
2880
2862
  evaluate: function (_a, sourceCodeInfo) {
@@ -2884,7 +2866,7 @@ var mathNormalExpression = {
2884
2866
  var quotient = Math.floor(dividend / divisor);
2885
2867
  return dividend - divisor * quotient;
2886
2868
  },
2887
- validate: function (node) { return assertNumberOfParams(2, node); },
2869
+ paramCount: 2,
2888
2870
  },
2889
2871
  '%': {
2890
2872
  evaluate: function (_a, sourceCodeInfo) {
@@ -2894,7 +2876,7 @@ var mathNormalExpression = {
2894
2876
  var quotient = Math.trunc(dividend / divisor);
2895
2877
  return dividend - divisor * quotient;
2896
2878
  },
2897
- validate: function (node) { return assertNumberOfParams(2, node); },
2879
+ paramCount: 2,
2898
2880
  },
2899
2881
  'sqrt': {
2900
2882
  evaluate: function (_a, sourceCodeInfo) {
@@ -2902,7 +2884,7 @@ var mathNormalExpression = {
2902
2884
  assertNumber(first, sourceCodeInfo);
2903
2885
  return Math.sqrt(first);
2904
2886
  },
2905
- validate: function (node) { return assertNumberOfParams(1, node); },
2887
+ paramCount: 1,
2906
2888
  },
2907
2889
  'cbrt': {
2908
2890
  evaluate: function (_a, sourceCodeInfo) {
@@ -2910,7 +2892,7 @@ var mathNormalExpression = {
2910
2892
  assertNumber(first, sourceCodeInfo);
2911
2893
  return Math.cbrt(first);
2912
2894
  },
2913
- validate: function (node) { return assertNumberOfParams(1, node); },
2895
+ paramCount: 1,
2914
2896
  },
2915
2897
  '**': {
2916
2898
  evaluate: function (_a, sourceCodeInfo) {
@@ -2919,7 +2901,7 @@ var mathNormalExpression = {
2919
2901
  assertNumber(second, sourceCodeInfo);
2920
2902
  return Math.pow(first, second);
2921
2903
  },
2922
- validate: function (node) { return assertNumberOfParams(2, node); },
2904
+ paramCount: 2,
2923
2905
  },
2924
2906
  'round': {
2925
2907
  evaluate: function (params, sourceCodeInfo) {
@@ -2931,7 +2913,7 @@ var mathNormalExpression = {
2931
2913
  var factor = Math.pow(10, decimals);
2932
2914
  return Math.round(value * factor) / factor;
2933
2915
  },
2934
- validate: function (node) { return assertNumberOfParams({ min: 1, max: 2 }, node); },
2916
+ paramCount: { min: 1, max: 2 },
2935
2917
  },
2936
2918
  'trunc': {
2937
2919
  evaluate: function (_a, sourceCodeInfo) {
@@ -2939,7 +2921,7 @@ var mathNormalExpression = {
2939
2921
  assertNumber(first, sourceCodeInfo);
2940
2922
  return Math.trunc(first);
2941
2923
  },
2942
- validate: function (node) { return assertNumberOfParams(1, node); },
2924
+ paramCount: 1,
2943
2925
  },
2944
2926
  'floor': {
2945
2927
  evaluate: function (_a, sourceCodeInfo) {
@@ -2947,7 +2929,7 @@ var mathNormalExpression = {
2947
2929
  assertNumber(first, sourceCodeInfo);
2948
2930
  return Math.floor(first);
2949
2931
  },
2950
- validate: function (node) { return assertNumberOfParams(1, node); },
2932
+ paramCount: 1,
2951
2933
  },
2952
2934
  'ceil': {
2953
2935
  evaluate: function (_a, sourceCodeInfo) {
@@ -2955,7 +2937,7 @@ var mathNormalExpression = {
2955
2937
  assertNumber(first, sourceCodeInfo);
2956
2938
  return Math.ceil(first);
2957
2939
  },
2958
- validate: function (node) { return assertNumberOfParams(1, node); },
2940
+ paramCount: 1,
2959
2941
  },
2960
2942
  'min': {
2961
2943
  evaluate: function (_a, sourceCodeInfo) {
@@ -2968,7 +2950,7 @@ var mathNormalExpression = {
2968
2950
  return Math.min(min, value);
2969
2951
  }, first);
2970
2952
  },
2971
- validate: function (node) { return assertNumberOfParams({ min: 1 }, node); },
2953
+ paramCount: { min: 1 },
2972
2954
  },
2973
2955
  'max': {
2974
2956
  evaluate: function (_a, sourceCodeInfo) {
@@ -2981,7 +2963,7 @@ var mathNormalExpression = {
2981
2963
  return Math.max(min, value);
2982
2964
  }, first);
2983
2965
  },
2984
- validate: function (node) { return assertNumberOfParams({ min: 1 }, node); },
2966
+ paramCount: { min: 1 },
2985
2967
  },
2986
2968
  'abs': {
2987
2969
  evaluate: function (_a, sourceCodeInfo) {
@@ -2989,7 +2971,7 @@ var mathNormalExpression = {
2989
2971
  assertNumber(value, sourceCodeInfo);
2990
2972
  return Math.abs(value);
2991
2973
  },
2992
- validate: function (node) { return assertNumberOfParams(1, node); },
2974
+ paramCount: 1,
2993
2975
  },
2994
2976
  'sign': {
2995
2977
  evaluate: function (_a, sourceCodeInfo) {
@@ -2997,67 +2979,67 @@ var mathNormalExpression = {
2997
2979
  assertNumber(value, sourceCodeInfo);
2998
2980
  return Math.sign(value);
2999
2981
  },
3000
- validate: function (node) { return assertNumberOfParams(1, node); },
2982
+ paramCount: 1,
3001
2983
  },
3002
2984
  'max_safe_integer': {
3003
2985
  evaluate: function () {
3004
2986
  return Number.MAX_SAFE_INTEGER;
3005
2987
  },
3006
- validate: function (node) { return assertNumberOfParams(0, node); },
2988
+ paramCount: 0,
3007
2989
  },
3008
2990
  'min_safe_integer': {
3009
2991
  evaluate: function () {
3010
2992
  return Number.MIN_SAFE_INTEGER;
3011
2993
  },
3012
- validate: function (node) { return assertNumberOfParams(0, node); },
2994
+ paramCount: 0,
3013
2995
  },
3014
2996
  'max_value': {
3015
2997
  evaluate: function () {
3016
2998
  return Number.MAX_VALUE;
3017
2999
  },
3018
- validate: function (node) { return assertNumberOfParams(0, node); },
3000
+ paramCount: 0,
3019
3001
  },
3020
3002
  'min_value': {
3021
3003
  evaluate: function () {
3022
3004
  return Number.MIN_VALUE;
3023
3005
  },
3024
- validate: function (node) { return assertNumberOfParams(0, node); },
3006
+ paramCount: 0,
3025
3007
  },
3026
3008
  'epsilon': {
3027
3009
  evaluate: function () {
3028
3010
  return Number.EPSILON;
3029
3011
  },
3030
- validate: function (node) { return assertNumberOfParams(0, node); },
3012
+ paramCount: 0,
3031
3013
  },
3032
3014
  'positive_infinity': {
3033
3015
  evaluate: function () {
3034
3016
  return Number.POSITIVE_INFINITY;
3035
3017
  },
3036
- validate: function (node) { return assertNumberOfParams(0, node); },
3018
+ paramCount: 0,
3037
3019
  },
3038
3020
  'negative_infinity': {
3039
3021
  evaluate: function () {
3040
3022
  return Number.NEGATIVE_INFINITY;
3041
3023
  },
3042
- validate: function (node) { return assertNumberOfParams(0, node); },
3024
+ paramCount: 0,
3043
3025
  },
3044
3026
  'nan': {
3045
3027
  evaluate: function () {
3046
3028
  return Number.NaN;
3047
3029
  },
3048
- validate: function (node) { return assertNumberOfParams(0, node); },
3030
+ paramCount: 0,
3049
3031
  },
3050
3032
  'e': {
3051
3033
  evaluate: function () {
3052
3034
  return Math.E;
3053
3035
  },
3054
- validate: function (node) { return assertNumberOfParams(0, node); },
3036
+ paramCount: 0,
3055
3037
  },
3056
3038
  'pi': {
3057
3039
  evaluate: function () {
3058
3040
  return Math.PI;
3059
3041
  },
3060
- validate: function (node) { return assertNumberOfParams(0, node); },
3042
+ paramCount: 0,
3061
3043
  },
3062
3044
  'exp': {
3063
3045
  evaluate: function (_a, sourceCodeInfo) {
@@ -3065,7 +3047,7 @@ var mathNormalExpression = {
3065
3047
  assertNumber(value, sourceCodeInfo);
3066
3048
  return Math.exp(value);
3067
3049
  },
3068
- validate: function (node) { return assertNumberOfParams(1, node); },
3050
+ paramCount: 1,
3069
3051
  },
3070
3052
  'log': {
3071
3053
  evaluate: function (_a, sourceCodeInfo) {
@@ -3073,7 +3055,7 @@ var mathNormalExpression = {
3073
3055
  assertNumber(value, sourceCodeInfo);
3074
3056
  return Math.log(value);
3075
3057
  },
3076
- validate: function (node) { return assertNumberOfParams(1, node); },
3058
+ paramCount: 1,
3077
3059
  },
3078
3060
  'log2': {
3079
3061
  evaluate: function (_a, sourceCodeInfo) {
@@ -3081,7 +3063,7 @@ var mathNormalExpression = {
3081
3063
  assertNumber(value, sourceCodeInfo);
3082
3064
  return Math.log2(value);
3083
3065
  },
3084
- validate: function (node) { return assertNumberOfParams(1, node); },
3066
+ paramCount: 1,
3085
3067
  },
3086
3068
  'log10': {
3087
3069
  evaluate: function (_a, sourceCodeInfo) {
@@ -3089,7 +3071,7 @@ var mathNormalExpression = {
3089
3071
  assertNumber(value, sourceCodeInfo);
3090
3072
  return Math.log10(value);
3091
3073
  },
3092
- validate: function (node) { return assertNumberOfParams(1, node); },
3074
+ paramCount: 1,
3093
3075
  },
3094
3076
  'sin': {
3095
3077
  evaluate: function (_a, sourceCodeInfo) {
@@ -3097,7 +3079,7 @@ var mathNormalExpression = {
3097
3079
  assertNumber(value, sourceCodeInfo);
3098
3080
  return Math.sin(value);
3099
3081
  },
3100
- validate: function (node) { return assertNumberOfParams(1, node); },
3082
+ paramCount: 1,
3101
3083
  },
3102
3084
  'asin': {
3103
3085
  evaluate: function (_a, sourceCodeInfo) {
@@ -3105,7 +3087,7 @@ var mathNormalExpression = {
3105
3087
  assertNumber(value, sourceCodeInfo);
3106
3088
  return Math.asin(value);
3107
3089
  },
3108
- validate: function (node) { return assertNumberOfParams(1, node); },
3090
+ paramCount: 1,
3109
3091
  },
3110
3092
  'sinh': {
3111
3093
  evaluate: function (_a, sourceCodeInfo) {
@@ -3113,7 +3095,7 @@ var mathNormalExpression = {
3113
3095
  assertNumber(value, sourceCodeInfo);
3114
3096
  return Math.sinh(value);
3115
3097
  },
3116
- validate: function (node) { return assertNumberOfParams(1, node); },
3098
+ paramCount: 1,
3117
3099
  },
3118
3100
  'asinh': {
3119
3101
  evaluate: function (_a, sourceCodeInfo) {
@@ -3121,7 +3103,7 @@ var mathNormalExpression = {
3121
3103
  assertNumber(value, sourceCodeInfo);
3122
3104
  return Math.asinh(value);
3123
3105
  },
3124
- validate: function (node) { return assertNumberOfParams(1, node); },
3106
+ paramCount: 1,
3125
3107
  },
3126
3108
  'cos': {
3127
3109
  evaluate: function (_a, sourceCodeInfo) {
@@ -3129,7 +3111,7 @@ var mathNormalExpression = {
3129
3111
  assertNumber(value, sourceCodeInfo);
3130
3112
  return Math.cos(value);
3131
3113
  },
3132
- validate: function (node) { return assertNumberOfParams(1, node); },
3114
+ paramCount: 1,
3133
3115
  },
3134
3116
  'acos': {
3135
3117
  evaluate: function (_a, sourceCodeInfo) {
@@ -3137,7 +3119,7 @@ var mathNormalExpression = {
3137
3119
  assertNumber(value, sourceCodeInfo);
3138
3120
  return Math.acos(value);
3139
3121
  },
3140
- validate: function (node) { return assertNumberOfParams(1, node); },
3122
+ paramCount: 1,
3141
3123
  },
3142
3124
  'cosh': {
3143
3125
  evaluate: function (_a, sourceCodeInfo) {
@@ -3145,7 +3127,7 @@ var mathNormalExpression = {
3145
3127
  assertNumber(value, sourceCodeInfo);
3146
3128
  return Math.cosh(value);
3147
3129
  },
3148
- validate: function (node) { return assertNumberOfParams(1, node); },
3130
+ paramCount: 1,
3149
3131
  },
3150
3132
  'acosh': {
3151
3133
  evaluate: function (_a, sourceCodeInfo) {
@@ -3153,7 +3135,7 @@ var mathNormalExpression = {
3153
3135
  assertNumber(value, sourceCodeInfo);
3154
3136
  return Math.acosh(value);
3155
3137
  },
3156
- validate: function (node) { return assertNumberOfParams(1, node); },
3138
+ paramCount: 1,
3157
3139
  },
3158
3140
  'tan': {
3159
3141
  evaluate: function (_a, sourceCodeInfo) {
@@ -3161,7 +3143,7 @@ var mathNormalExpression = {
3161
3143
  assertNumber(value, sourceCodeInfo);
3162
3144
  return Math.tan(value);
3163
3145
  },
3164
- validate: function (node) { return assertNumberOfParams(1, node); },
3146
+ paramCount: 1,
3165
3147
  },
3166
3148
  'atan': {
3167
3149
  evaluate: function (_a, sourceCodeInfo) {
@@ -3169,7 +3151,7 @@ var mathNormalExpression = {
3169
3151
  assertNumber(value, sourceCodeInfo);
3170
3152
  return Math.atan(value);
3171
3153
  },
3172
- validate: function (node) { return assertNumberOfParams(1, node); },
3154
+ paramCount: 1,
3173
3155
  },
3174
3156
  'tanh': {
3175
3157
  evaluate: function (_a, sourceCodeInfo) {
@@ -3177,7 +3159,7 @@ var mathNormalExpression = {
3177
3159
  assertNumber(value, sourceCodeInfo);
3178
3160
  return Math.tanh(value);
3179
3161
  },
3180
- validate: function (node) { return assertNumberOfParams(1, node); },
3162
+ paramCount: 1,
3181
3163
  },
3182
3164
  'atanh': {
3183
3165
  evaluate: function (_a, sourceCodeInfo) {
@@ -3185,7 +3167,7 @@ var mathNormalExpression = {
3185
3167
  assertNumber(value, sourceCodeInfo);
3186
3168
  return Math.atanh(value);
3187
3169
  },
3188
- validate: function (node) { return assertNumberOfParams(1, node); },
3170
+ paramCount: 1,
3189
3171
  },
3190
3172
  };
3191
3173
 
@@ -3200,7 +3182,7 @@ var miscNormalExpression = {
3200
3182
  }
3201
3183
  return true;
3202
3184
  },
3203
- validate: function (node) { return assertNumberOfParams({ min: 1 }, node); },
3185
+ paramCount: { min: 1 },
3204
3186
  },
3205
3187
  '==': {
3206
3188
  evaluate: function (_a) {
@@ -3222,14 +3204,14 @@ var miscNormalExpression = {
3222
3204
  }
3223
3205
  return true;
3224
3206
  },
3225
- validate: function (node) { return assertNumberOfParams({ min: 1 }, node); },
3207
+ paramCount: { min: 1 },
3226
3208
  },
3227
3209
  'equal?': {
3228
3210
  evaluate: function (_a, sourceCodeInfo) {
3229
3211
  var _b = __read(_a, 2), a = _b[0], b = _b[1];
3230
3212
  return deepEqual(asAny(a, sourceCodeInfo), asAny(b, sourceCodeInfo), sourceCodeInfo);
3231
3213
  },
3232
- validate: function (node) { return assertNumberOfParams({ min: 1 }, node); },
3214
+ paramCount: { min: 1 },
3233
3215
  },
3234
3216
  '>': {
3235
3217
  evaluate: function (_a) {
@@ -3253,7 +3235,7 @@ var miscNormalExpression = {
3253
3235
  }
3254
3236
  return true;
3255
3237
  },
3256
- validate: function (node) { return assertNumberOfParams({ min: 1 }, node); },
3238
+ paramCount: { min: 1 },
3257
3239
  },
3258
3240
  '<': {
3259
3241
  evaluate: function (_a) {
@@ -3277,7 +3259,7 @@ var miscNormalExpression = {
3277
3259
  }
3278
3260
  return true;
3279
3261
  },
3280
- validate: function (node) { return assertNumberOfParams({ min: 1 }, node); },
3262
+ paramCount: { min: 1 },
3281
3263
  },
3282
3264
  '>=': {
3283
3265
  evaluate: function (_a) {
@@ -3301,7 +3283,7 @@ var miscNormalExpression = {
3301
3283
  }
3302
3284
  return true;
3303
3285
  },
3304
- validate: function (node) { return assertNumberOfParams({ min: 1 }, node); },
3286
+ paramCount: { min: 1 },
3305
3287
  },
3306
3288
  '<=': {
3307
3289
  evaluate: function (_a) {
@@ -3325,14 +3307,14 @@ var miscNormalExpression = {
3325
3307
  }
3326
3308
  return true;
3327
3309
  },
3328
- validate: function (node) { return assertNumberOfParams({ min: 1 }, node); },
3310
+ paramCount: { min: 1 },
3329
3311
  },
3330
3312
  '!': {
3331
3313
  evaluate: function (_a) {
3332
3314
  var _b = __read(_a, 1), first = _b[0];
3333
3315
  return !first;
3334
3316
  },
3335
- validate: function (node) { return assertNumberOfParams(1, node); },
3317
+ paramCount: 1,
3336
3318
  },
3337
3319
  'epoch>iso_date': {
3338
3320
  evaluate: function (_a, sourceCodeInfo) {
@@ -3340,7 +3322,7 @@ var miscNormalExpression = {
3340
3322
  assertNumber(ms, sourceCodeInfo);
3341
3323
  return new Date(ms).toISOString();
3342
3324
  },
3343
- validate: function (node) { return assertNumberOfParams(1, node); },
3325
+ paramCount: 1,
3344
3326
  },
3345
3327
  'iso_date>epoch': {
3346
3328
  evaluate: function (_a, sourceCodeInfo) {
@@ -3350,7 +3332,7 @@ var miscNormalExpression = {
3350
3332
  assertNumber(ms, sourceCodeInfo, { finite: true });
3351
3333
  return ms;
3352
3334
  },
3353
- validate: function (node) { return assertNumberOfParams(1, node); },
3335
+ paramCount: 1,
3354
3336
  },
3355
3337
  'write!': {
3356
3338
  evaluate: function (params, sourceCodeInfo) {
@@ -3360,20 +3342,21 @@ var miscNormalExpression = {
3360
3342
  return asAny(params[params.length - 1], sourceCodeInfo);
3361
3343
  return null;
3362
3344
  },
3345
+ paramCount: {},
3363
3346
  },
3364
3347
  'boolean': {
3365
3348
  evaluate: function (_a) {
3366
3349
  var _b = __read(_a, 1), value = _b[0];
3367
3350
  return !!value;
3368
3351
  },
3369
- validate: function (node) { return assertNumberOfParams(1, node); },
3352
+ paramCount: 1,
3370
3353
  },
3371
3354
  'compare': {
3372
3355
  evaluate: function (_a) {
3373
3356
  var _b = __read(_a, 2), a = _b[0], b = _b[1];
3374
3357
  return compare(a, b);
3375
3358
  },
3376
- validate: function (node) { return assertNumberOfParams(2, node); },
3359
+ paramCount: 2,
3377
3360
  },
3378
3361
  'json_parse': {
3379
3362
  evaluate: function (_a, sourceCodeInfo) {
@@ -3382,7 +3365,7 @@ var miscNormalExpression = {
3382
3365
  // eslint-disable-next-line ts/no-unsafe-return
3383
3366
  return JSON.parse(first);
3384
3367
  },
3385
- validate: function (node) { return assertNumberOfParams(1, node); },
3368
+ paramCount: 1,
3386
3369
  },
3387
3370
  'json_stringify': {
3388
3371
  evaluate: function (_a, sourceCodeInfo) {
@@ -3393,7 +3376,7 @@ var miscNormalExpression = {
3393
3376
  assertNumber(second, sourceCodeInfo);
3394
3377
  return JSON.stringify(first, null, second);
3395
3378
  },
3396
- validate: function (node) { return assertNumberOfParams({ min: 1, max: 2 }, node); },
3379
+ paramCount: { min: 1, max: 2 },
3397
3380
  },
3398
3381
  };
3399
3382
 
@@ -3407,7 +3390,7 @@ var assertNormalExpression = {
3407
3390
  throw new AssertionError(message, sourceCodeInfo);
3408
3391
  return asAny(value, sourceCodeInfo);
3409
3392
  },
3410
- validate: function (node) { return assertNumberOfParams({ min: 1, max: 2 }, node); },
3393
+ paramCount: { min: 1, max: 2 },
3411
3394
  },
3412
3395
  'assert=': {
3413
3396
  evaluate: function (_a, sourceCodeInfo) {
@@ -3417,7 +3400,7 @@ var assertNormalExpression = {
3417
3400
  throw new AssertionError("Expected ".concat(first, " to be ").concat(second, ".").concat(message), sourceCodeInfo);
3418
3401
  return null;
3419
3402
  },
3420
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
3403
+ paramCount: { min: 2, max: 3 },
3421
3404
  },
3422
3405
  'assert!=': {
3423
3406
  evaluate: function (_a, sourceCodeInfo) {
@@ -3427,7 +3410,7 @@ var assertNormalExpression = {
3427
3410
  throw new AssertionError("Expected ".concat(first, " not to be ").concat(second, ".").concat(message), sourceCodeInfo);
3428
3411
  return null;
3429
3412
  },
3430
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
3413
+ paramCount: { min: 2, max: 3 },
3431
3414
  },
3432
3415
  'assert_equal': {
3433
3416
  evaluate: function (_a, sourceCodeInfo) {
@@ -3438,7 +3421,7 @@ var assertNormalExpression = {
3438
3421
  }
3439
3422
  return null;
3440
3423
  },
3441
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
3424
+ paramCount: { min: 2, max: 3 },
3442
3425
  },
3443
3426
  'assert_not_equal': {
3444
3427
  evaluate: function (_a, sourceCodeInfo) {
@@ -3449,7 +3432,7 @@ var assertNormalExpression = {
3449
3432
  }
3450
3433
  return null;
3451
3434
  },
3452
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
3435
+ paramCount: { min: 2, max: 3 },
3453
3436
  },
3454
3437
  'assert_gt': {
3455
3438
  evaluate: function (_a, sourceCodeInfo) {
@@ -3459,7 +3442,7 @@ var assertNormalExpression = {
3459
3442
  throw new AssertionError("Expected ".concat(first, " to be grater than ").concat(second, ".").concat(message), sourceCodeInfo);
3460
3443
  return null;
3461
3444
  },
3462
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
3445
+ paramCount: { min: 2, max: 3 },
3463
3446
  },
3464
3447
  'assert_gte': {
3465
3448
  evaluate: function (_a, sourceCodeInfo) {
@@ -3469,7 +3452,7 @@ var assertNormalExpression = {
3469
3452
  throw new AssertionError("Expected ".concat(first, " to be grater than or equal to ").concat(second, ".").concat(message), sourceCodeInfo);
3470
3453
  return null;
3471
3454
  },
3472
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
3455
+ paramCount: { min: 2, max: 3 },
3473
3456
  },
3474
3457
  'assert_lt': {
3475
3458
  evaluate: function (_a, sourceCodeInfo) {
@@ -3479,7 +3462,7 @@ var assertNormalExpression = {
3479
3462
  throw new AssertionError("Expected ".concat(first, " to be less than ").concat(second, ".").concat(message), sourceCodeInfo);
3480
3463
  return null;
3481
3464
  },
3482
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
3465
+ paramCount: { min: 2, max: 3 },
3483
3466
  },
3484
3467
  'assert_lte': {
3485
3468
  evaluate: function (_a, sourceCodeInfo) {
@@ -3489,7 +3472,7 @@ var assertNormalExpression = {
3489
3472
  throw new AssertionError("Expected ".concat(first, " to be less than or equal to ").concat(second, ".").concat(message), sourceCodeInfo);
3490
3473
  return null;
3491
3474
  },
3492
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
3475
+ paramCount: { min: 2, max: 3 },
3493
3476
  },
3494
3477
  'assert_true': {
3495
3478
  evaluate: function (_a, sourceCodeInfo) {
@@ -3499,7 +3482,7 @@ var assertNormalExpression = {
3499
3482
  throw new AssertionError("Expected ".concat(first, " to be true.").concat(message), sourceCodeInfo);
3500
3483
  return null;
3501
3484
  },
3502
- validate: function (node) { return assertNumberOfParams({ min: 1, max: 2 }, node); },
3485
+ paramCount: { min: 1, max: 2 },
3503
3486
  },
3504
3487
  'assert_false': {
3505
3488
  evaluate: function (_a, sourceCodeInfo) {
@@ -3509,7 +3492,7 @@ var assertNormalExpression = {
3509
3492
  throw new AssertionError("Expected ".concat(first, " to be false.").concat(message), sourceCodeInfo);
3510
3493
  return null;
3511
3494
  },
3512
- validate: function (node) { return assertNumberOfParams({ min: 1, max: 2 }, node); },
3495
+ paramCount: { min: 1, max: 2 },
3513
3496
  },
3514
3497
  'assert_truthy': {
3515
3498
  evaluate: function (_a, sourceCodeInfo) {
@@ -3519,7 +3502,7 @@ var assertNormalExpression = {
3519
3502
  throw new AssertionError("Expected ".concat(first, " to be truthy.").concat(message), sourceCodeInfo);
3520
3503
  return null;
3521
3504
  },
3522
- validate: function (node) { return assertNumberOfParams({ min: 1, max: 2 }, node); },
3505
+ paramCount: { min: 1, max: 2 },
3523
3506
  },
3524
3507
  'assert_falsy': {
3525
3508
  evaluate: function (_a, sourceCodeInfo) {
@@ -3529,7 +3512,7 @@ var assertNormalExpression = {
3529
3512
  throw new AssertionError("Expected ".concat(first, " to be falsy.").concat(message), sourceCodeInfo);
3530
3513
  return null;
3531
3514
  },
3532
- validate: function (node) { return assertNumberOfParams({ min: 1, max: 2 }, node); },
3515
+ paramCount: { min: 1, max: 2 },
3533
3516
  },
3534
3517
  'assert_null': {
3535
3518
  evaluate: function (_a, sourceCodeInfo) {
@@ -3539,7 +3522,7 @@ var assertNormalExpression = {
3539
3522
  throw new AssertionError("Expected ".concat(first, " to be nil.").concat(message), sourceCodeInfo);
3540
3523
  return null;
3541
3524
  },
3542
- validate: function (node) { return assertNumberOfParams({ min: 1, max: 2 }, node); },
3525
+ paramCount: { min: 1, max: 2 },
3543
3526
  },
3544
3527
  'assert_throws': {
3545
3528
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -3555,7 +3538,7 @@ var assertNormalExpression = {
3555
3538
  }
3556
3539
  throw new AssertionError("Expected function to throw.".concat(message), sourceCodeInfo);
3557
3540
  },
3558
- validate: function (node) { return assertNumberOfParams({ min: 1, max: 2 }, node); },
3541
+ paramCount: { min: 1, max: 2 },
3559
3542
  },
3560
3543
  'assert_throws_error': {
3561
3544
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -3576,7 +3559,7 @@ var assertNormalExpression = {
3576
3559
  }
3577
3560
  throw new AssertionError("Expected function to throw \"".concat(throwMessage, "\".").concat(message), sourceCodeInfo);
3578
3561
  },
3579
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
3562
+ paramCount: { min: 2, max: 3 },
3580
3563
  },
3581
3564
  'assert_not_throws': {
3582
3565
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -3592,7 +3575,7 @@ var assertNormalExpression = {
3592
3575
  }
3593
3576
  return null;
3594
3577
  },
3595
- validate: function (node) { return assertNumberOfParams({ min: 1, max: 2 }, node); },
3578
+ paramCount: { min: 1, max: 2 },
3596
3579
  },
3597
3580
  };
3598
3581
 
@@ -3608,7 +3591,7 @@ var objectNormalExpression = {
3608
3591
  }
3609
3592
  return result;
3610
3593
  },
3611
- validate: function (node) { return assertEvenNumberOfParams(node); },
3594
+ paramCount: { even: true },
3612
3595
  },
3613
3596
  keys: {
3614
3597
  evaluate: function (_a, sourceCodeInfo) {
@@ -3616,7 +3599,7 @@ var objectNormalExpression = {
3616
3599
  assertObj(obj, sourceCodeInfo);
3617
3600
  return Object.keys(obj);
3618
3601
  },
3619
- validate: function (node) { return assertNumberOfParams(1, node); },
3602
+ paramCount: 1,
3620
3603
  },
3621
3604
  vals: {
3622
3605
  evaluate: function (_a, sourceCodeInfo) {
@@ -3624,7 +3607,7 @@ var objectNormalExpression = {
3624
3607
  assertObj(obj, sourceCodeInfo);
3625
3608
  return Object.values(obj);
3626
3609
  },
3627
- validate: function (node) { return assertNumberOfParams(1, node); },
3610
+ paramCount: 1,
3628
3611
  },
3629
3612
  entries: {
3630
3613
  evaluate: function (_a, sourceCodeInfo) {
@@ -3632,7 +3615,7 @@ var objectNormalExpression = {
3632
3615
  assertObj(obj, sourceCodeInfo);
3633
3616
  return Object.entries(obj);
3634
3617
  },
3635
- validate: function (node) { return assertNumberOfParams(1, node); },
3618
+ paramCount: 1,
3636
3619
  },
3637
3620
  find: {
3638
3621
  evaluate: function (_a, sourceCodeInfo) {
@@ -3643,7 +3626,7 @@ var objectNormalExpression = {
3643
3626
  return [key, obj[key]];
3644
3627
  return null;
3645
3628
  },
3646
- validate: function (node) { return assertNumberOfParams(2, node); },
3629
+ paramCount: 2,
3647
3630
  },
3648
3631
  dissoc: {
3649
3632
  evaluate: function (_a, sourceCodeInfo) {
@@ -3654,7 +3637,7 @@ var objectNormalExpression = {
3654
3637
  delete newObj[key];
3655
3638
  return newObj;
3656
3639
  },
3657
- validate: function (node) { return assertNumberOfParams(2, node); },
3640
+ paramCount: 2,
3658
3641
  },
3659
3642
  merge: {
3660
3643
  evaluate: function (params, sourceCodeInfo) {
@@ -3667,7 +3650,7 @@ var objectNormalExpression = {
3667
3650
  return __assign(__assign({}, result), obj);
3668
3651
  }, __assign({}, first));
3669
3652
  },
3670
- validate: function (node) { return assertNumberOfParams({ min: 0 }, node); },
3653
+ paramCount: { min: 0 },
3671
3654
  },
3672
3655
  merge_with: {
3673
3656
  evaluate: function (params, sourceCodeInfo, contextStack, _a) {
@@ -3690,7 +3673,7 @@ var objectNormalExpression = {
3690
3673
  return result;
3691
3674
  }, __assign({}, first));
3692
3675
  },
3693
- validate: function (node) { return assertNumberOfParams({ min: 2 }, node); },
3676
+ paramCount: { min: 2 },
3694
3677
  },
3695
3678
  zipmap: {
3696
3679
  evaluate: function (_a, sourceCodeInfo) {
@@ -3705,7 +3688,7 @@ var objectNormalExpression = {
3705
3688
  }
3706
3689
  return result;
3707
3690
  },
3708
- validate: function (node) { return assertNumberOfParams(2, node); },
3691
+ paramCount: 2,
3709
3692
  },
3710
3693
  select_keys: {
3711
3694
  evaluate: function (_a, sourceCodeInfo) {
@@ -3718,7 +3701,7 @@ var objectNormalExpression = {
3718
3701
  return result;
3719
3702
  }, {});
3720
3703
  },
3721
- validate: function (node) { return assertNumberOfParams(2, node); },
3704
+ paramCount: 2,
3722
3705
  },
3723
3706
  };
3724
3707
 
@@ -3728,42 +3711,42 @@ var predicatesNormalExpression = {
3728
3711
  var _b = __read(_a, 1), first = _b[0];
3729
3712
  return isLitsFunction(first);
3730
3713
  },
3731
- validate: function (node) { return assertNumberOfParams(1, node); },
3714
+ paramCount: 1,
3732
3715
  },
3733
3716
  'string?': {
3734
3717
  evaluate: function (_a) {
3735
3718
  var _b = __read(_a, 1), first = _b[0];
3736
3719
  return typeof first === 'string';
3737
3720
  },
3738
- validate: function (node) { return assertNumberOfParams(1, node); },
3721
+ paramCount: 1,
3739
3722
  },
3740
3723
  'number?': {
3741
3724
  evaluate: function (_a) {
3742
3725
  var _b = __read(_a, 1), first = _b[0];
3743
3726
  return typeof first === 'number';
3744
3727
  },
3745
- validate: function (node) { return assertNumberOfParams(1, node); },
3728
+ paramCount: 1,
3746
3729
  },
3747
3730
  'integer?': {
3748
3731
  evaluate: function (_a) {
3749
3732
  var _b = __read(_a, 1), first = _b[0];
3750
3733
  return typeof first === 'number' && isNumber(first, { integer: true });
3751
3734
  },
3752
- validate: function (node) { return assertNumberOfParams(1, node); },
3735
+ paramCount: 1,
3753
3736
  },
3754
3737
  'boolean?': {
3755
3738
  evaluate: function (_a) {
3756
3739
  var _b = __read(_a, 1), first = _b[0];
3757
3740
  return typeof first === 'boolean';
3758
3741
  },
3759
- validate: function (node) { return assertNumberOfParams(1, node); },
3742
+ paramCount: 1,
3760
3743
  },
3761
3744
  'nil?': {
3762
3745
  evaluate: function (_a) {
3763
3746
  var _b = __read(_a, 1), first = _b[0];
3764
3747
  return first === null || first === undefined;
3765
3748
  },
3766
- validate: function (node) { return assertNumberOfParams(1, node); },
3749
+ paramCount: 1,
3767
3750
  },
3768
3751
  'zero?': {
3769
3752
  evaluate: function (_a, sourceCodeInfo) {
@@ -3771,7 +3754,7 @@ var predicatesNormalExpression = {
3771
3754
  assertNumber(first, sourceCodeInfo, { finite: true });
3772
3755
  return first === 0;
3773
3756
  },
3774
- validate: function (node) { return assertNumberOfParams(1, node); },
3757
+ paramCount: 1,
3775
3758
  },
3776
3759
  'pos?': {
3777
3760
  evaluate: function (_a, sourceCodeInfo) {
@@ -3779,7 +3762,7 @@ var predicatesNormalExpression = {
3779
3762
  assertNumber(first, sourceCodeInfo, { finite: true });
3780
3763
  return first > 0;
3781
3764
  },
3782
- validate: function (node) { return assertNumberOfParams(1, node); },
3765
+ paramCount: 1,
3783
3766
  },
3784
3767
  'neg?': {
3785
3768
  evaluate: function (_a, sourceCodeInfo) {
@@ -3787,7 +3770,7 @@ var predicatesNormalExpression = {
3787
3770
  assertNumber(first, sourceCodeInfo, { finite: true });
3788
3771
  return first < 0;
3789
3772
  },
3790
- validate: function (node) { return assertNumberOfParams(1, node); },
3773
+ paramCount: 1,
3791
3774
  },
3792
3775
  'even?': {
3793
3776
  evaluate: function (_a, sourceCodeInfo) {
@@ -3795,7 +3778,7 @@ var predicatesNormalExpression = {
3795
3778
  assertNumber(first, sourceCodeInfo, { finite: true });
3796
3779
  return first % 2 === 0;
3797
3780
  },
3798
- validate: function (node) { return assertNumberOfParams(1, node); },
3781
+ paramCount: 1,
3799
3782
  },
3800
3783
  'odd?': {
3801
3784
  evaluate: function (_a, sourceCodeInfo) {
@@ -3803,42 +3786,42 @@ var predicatesNormalExpression = {
3803
3786
  assertNumber(first, sourceCodeInfo, { finite: true });
3804
3787
  return isNumber(first, { integer: true }) && first % 2 !== 0;
3805
3788
  },
3806
- validate: function (node) { return assertNumberOfParams(1, node); },
3789
+ paramCount: 1,
3807
3790
  },
3808
3791
  'array?': {
3809
3792
  evaluate: function (_a) {
3810
3793
  var _b = __read(_a, 1), first = _b[0];
3811
3794
  return Array.isArray(first);
3812
3795
  },
3813
- validate: function (node) { return assertNumberOfParams(1, node); },
3796
+ paramCount: 1,
3814
3797
  },
3815
3798
  'coll?': {
3816
3799
  evaluate: function (_a) {
3817
3800
  var _b = __read(_a, 1), first = _b[0];
3818
3801
  return isColl(first);
3819
3802
  },
3820
- validate: function (node) { return assertNumberOfParams(1, node); },
3803
+ paramCount: 1,
3821
3804
  },
3822
3805
  'seq?': {
3823
3806
  evaluate: function (_a) {
3824
3807
  var _b = __read(_a, 1), first = _b[0];
3825
3808
  return isSeq(first);
3826
3809
  },
3827
- validate: function (node) { return assertNumberOfParams(1, node); },
3810
+ paramCount: 1,
3828
3811
  },
3829
3812
  'object?': {
3830
3813
  evaluate: function (_a) {
3831
3814
  var _b = __read(_a, 1), first = _b[0];
3832
3815
  return isObj(first);
3833
3816
  },
3834
- validate: function (node) { return assertNumberOfParams(1, node); },
3817
+ paramCount: 1,
3835
3818
  },
3836
3819
  'regexp?': {
3837
3820
  evaluate: function (_a) {
3838
3821
  var _b = __read(_a, 1), value = _b[0];
3839
3822
  return isRegularExpression(value);
3840
3823
  },
3841
- validate: function (node) { return assertNumberOfParams(1, node); },
3824
+ paramCount: 1,
3842
3825
  },
3843
3826
  'finite?': {
3844
3827
  evaluate: function (_a, sourceCodeInfo) {
@@ -3846,7 +3829,7 @@ var predicatesNormalExpression = {
3846
3829
  assertNumber(value, sourceCodeInfo);
3847
3830
  return Number.isFinite(value);
3848
3831
  },
3849
- validate: function (node) { return assertNumberOfParams(1, node); },
3832
+ paramCount: 1,
3850
3833
  },
3851
3834
  'nan?': {
3852
3835
  evaluate: function (_a, sourceCodeInfo) {
@@ -3854,7 +3837,7 @@ var predicatesNormalExpression = {
3854
3837
  assertNumber(value, sourceCodeInfo);
3855
3838
  return Number.isNaN(value);
3856
3839
  },
3857
- validate: function (node) { return assertNumberOfParams(1, node); },
3840
+ paramCount: 1,
3858
3841
  },
3859
3842
  'positive_infinity?': {
3860
3843
  evaluate: function (_a, sourceCodeInfo) {
@@ -3862,7 +3845,7 @@ var predicatesNormalExpression = {
3862
3845
  assertNumber(value, sourceCodeInfo);
3863
3846
  return value === Number.POSITIVE_INFINITY;
3864
3847
  },
3865
- validate: function (node) { return assertNumberOfParams(1, node); },
3848
+ paramCount: 1,
3866
3849
  },
3867
3850
  'negative_infinity?': {
3868
3851
  evaluate: function (_a, sourceCodeInfo) {
@@ -3870,21 +3853,21 @@ var predicatesNormalExpression = {
3870
3853
  assertNumber(value, sourceCodeInfo);
3871
3854
  return value === Number.NEGATIVE_INFINITY;
3872
3855
  },
3873
- validate: function (node) { return assertNumberOfParams(1, node); },
3856
+ paramCount: 1,
3874
3857
  },
3875
3858
  'true?': {
3876
3859
  evaluate: function (_a) {
3877
3860
  var _b = __read(_a, 1), value = _b[0];
3878
3861
  return value === true;
3879
3862
  },
3880
- validate: function (node) { return assertNumberOfParams(1, node); },
3863
+ paramCount: 1,
3881
3864
  },
3882
3865
  'false?': {
3883
3866
  evaluate: function (_a) {
3884
3867
  var _b = __read(_a, 1), value = _b[0];
3885
3868
  return value === false;
3886
3869
  },
3887
- validate: function (node) { return assertNumberOfParams(1, node); },
3870
+ paramCount: 1,
3888
3871
  },
3889
3872
  'empty?': {
3890
3873
  evaluate: function (_a, sourceCodeInfo) {
@@ -3898,7 +3881,7 @@ var predicatesNormalExpression = {
3898
3881
  return coll.length === 0;
3899
3882
  return Object.keys(coll).length === 0;
3900
3883
  },
3901
- validate: function (node) { return assertNumberOfParams(1, node); },
3884
+ paramCount: 1,
3902
3885
  },
3903
3886
  'not_empty?': {
3904
3887
  evaluate: function (_a, sourceCodeInfo) {
@@ -3912,7 +3895,7 @@ var predicatesNormalExpression = {
3912
3895
  return coll.length > 0;
3913
3896
  return Object.keys(coll).length > 0;
3914
3897
  },
3915
- validate: function (node) { return assertNumberOfParams(1, node); },
3898
+ paramCount: 1,
3916
3899
  },
3917
3900
  };
3918
3901
 
@@ -3931,7 +3914,7 @@ var regexpNormalExpression = {
3931
3914
  _b.f = flags,
3932
3915
  _b;
3933
3916
  },
3934
- validate: function (node) { return assertNumberOfParams({ min: 1, max: 2 }, node); },
3917
+ paramCount: { min: 1, max: 2 },
3935
3918
  },
3936
3919
  match: {
3937
3920
  evaluate: function (_a, sourceCodeInfo) {
@@ -3945,7 +3928,7 @@ var regexpNormalExpression = {
3945
3928
  return __spreadArray([], __read(match), false);
3946
3929
  return null;
3947
3930
  },
3948
- validate: function (node) { return assertNumberOfParams(2, node); },
3931
+ paramCount: 2,
3949
3932
  },
3950
3933
  replace: {
3951
3934
  evaluate: function (_a, sourceCodeInfo) {
@@ -3956,7 +3939,7 @@ var regexpNormalExpression = {
3956
3939
  var matcher = isRegularExpression(regexp) ? new RegExp(regexp.s, "".concat(regexp.f)) : regexp;
3957
3940
  return str.replace(matcher, value);
3958
3941
  },
3959
- validate: function (node) { return assertNumberOfParams(3, node); },
3942
+ paramCount: 3,
3960
3943
  },
3961
3944
  replace_all: {
3962
3945
  evaluate: function (_a, sourceCodeInfo) {
@@ -3967,7 +3950,7 @@ var regexpNormalExpression = {
3967
3950
  var matcher = isRegularExpression(regexp) ? new RegExp(regexp.s, "".concat(regexp.f.includes('g') ? regexp.f : "".concat(regexp.f, "g"))) : regexp;
3968
3951
  return str.replaceAll(matcher, value);
3969
3952
  },
3970
- validate: function (node) { return assertNumberOfParams(3, node); },
3953
+ paramCount: 3,
3971
3954
  },
3972
3955
  };
3973
3956
 
@@ -3983,7 +3966,7 @@ var stringNormalExpression = {
3983
3966
  assertNumber(third, sourceCodeInfo, { gte: second });
3984
3967
  return (first).substring(second, third);
3985
3968
  },
3986
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
3969
+ paramCount: { min: 2, max: 3 },
3987
3970
  },
3988
3971
  'string_repeat': {
3989
3972
  evaluate: function (_a, sourceCodeInfo) {
@@ -3992,7 +3975,7 @@ var stringNormalExpression = {
3992
3975
  assertNumber(count, sourceCodeInfo, { integer: true, nonNegative: true });
3993
3976
  return str.repeat(count);
3994
3977
  },
3995
- validate: function (node) { return assertNumberOfParams(2, node); },
3978
+ paramCount: 2,
3996
3979
  },
3997
3980
  'str': {
3998
3981
  evaluate: function (params) {
@@ -4007,6 +3990,7 @@ var stringNormalExpression = {
4007
3990
  return result + paramStr;
4008
3991
  }, '');
4009
3992
  },
3993
+ paramCount: {},
4010
3994
  },
4011
3995
  'number': {
4012
3996
  evaluate: function (_a, sourceCodeInfo) {
@@ -4017,7 +4001,7 @@ var stringNormalExpression = {
4017
4001
  throw new LitsError("Could not convert '".concat(str, "' to a number."), sourceCodeInfo);
4018
4002
  return number;
4019
4003
  },
4020
- validate: function (node) { return assertNumberOfParams(1, node); },
4004
+ paramCount: 1,
4021
4005
  },
4022
4006
  'from_char_code': {
4023
4007
  evaluate: function (_a, sourceCodeInfo) {
@@ -4031,7 +4015,7 @@ var stringNormalExpression = {
4031
4015
  throw new LitsError(error, sourceCodeInfo);
4032
4016
  }
4033
4017
  },
4034
- validate: function (node) { return assertNumberOfParams(1, node); },
4018
+ paramCount: 1,
4035
4019
  },
4036
4020
  'to_char_code': {
4037
4021
  evaluate: function (_a, sourceCodeInfo) {
@@ -4039,7 +4023,7 @@ var stringNormalExpression = {
4039
4023
  assertString(str, sourceCodeInfo, { nonEmpty: true });
4040
4024
  return asNonUndefined(str.codePointAt(0), sourceCodeInfo);
4041
4025
  },
4042
- validate: function (node) { return assertNumberOfParams(1, node); },
4026
+ paramCount: 1,
4043
4027
  },
4044
4028
  'lower_case': {
4045
4029
  evaluate: function (_a, sourceCodeInfo) {
@@ -4047,7 +4031,7 @@ var stringNormalExpression = {
4047
4031
  assertString(str, sourceCodeInfo);
4048
4032
  return str.toLowerCase();
4049
4033
  },
4050
- validate: function (node) { return assertNumberOfParams(1, node); },
4034
+ paramCount: 1,
4051
4035
  },
4052
4036
  'upper_case': {
4053
4037
  evaluate: function (_a, sourceCodeInfo) {
@@ -4055,7 +4039,7 @@ var stringNormalExpression = {
4055
4039
  assertString(str, sourceCodeInfo);
4056
4040
  return str.toUpperCase();
4057
4041
  },
4058
- validate: function (node) { return assertNumberOfParams(1, node); },
4042
+ paramCount: 1,
4059
4043
  },
4060
4044
  'trim': {
4061
4045
  evaluate: function (_a, sourceCodeInfo) {
@@ -4063,7 +4047,7 @@ var stringNormalExpression = {
4063
4047
  assertString(str, sourceCodeInfo);
4064
4048
  return str.trim();
4065
4049
  },
4066
- validate: function (node) { return assertNumberOfParams(1, node); },
4050
+ paramCount: 1,
4067
4051
  },
4068
4052
  'trim_left': {
4069
4053
  evaluate: function (_a, sourceCodeInfo) {
@@ -4071,7 +4055,7 @@ var stringNormalExpression = {
4071
4055
  assertString(str, sourceCodeInfo);
4072
4056
  return str.replace(/^\s+/, '');
4073
4057
  },
4074
- validate: function (node) { return assertNumberOfParams(1, node); },
4058
+ paramCount: 1,
4075
4059
  },
4076
4060
  'trim_right': {
4077
4061
  evaluate: function (_a, sourceCodeInfo) {
@@ -4079,7 +4063,7 @@ var stringNormalExpression = {
4079
4063
  assertString(str, sourceCodeInfo);
4080
4064
  return str.replace(/\s+$/, '');
4081
4065
  },
4082
- validate: function (node) { return assertNumberOfParams(1, node); },
4066
+ paramCount: 1,
4083
4067
  },
4084
4068
  '++': {
4085
4069
  evaluate: function (params, sourceCodeInfo) {
@@ -4103,7 +4087,7 @@ var stringNormalExpression = {
4103
4087
  return "".concat(acc).concat(str);
4104
4088
  }, first === null ? '' : "".concat(first));
4105
4089
  },
4106
- validate: function () { return undefined; },
4090
+ paramCount: {},
4107
4091
  },
4108
4092
  'join': {
4109
4093
  evaluate: function (_a, sourceCodeInfo) {
@@ -4113,7 +4097,7 @@ var stringNormalExpression = {
4113
4097
  assertString(delimiter, sourceCodeInfo);
4114
4098
  return stringList.join(delimiter);
4115
4099
  },
4116
- validate: function (node) { return assertNumberOfParams(2, node); },
4100
+ paramCount: 2,
4117
4101
  },
4118
4102
  'split': {
4119
4103
  evaluate: function (_a, sourceCodeInfo) {
@@ -4127,7 +4111,7 @@ var stringNormalExpression = {
4127
4111
  : new RegExp(stringOrRegExpValue.s, stringOrRegExpValue.f);
4128
4112
  return str.split(delimiter, limit);
4129
4113
  },
4130
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
4114
+ paramCount: { min: 2, max: 3 },
4131
4115
  },
4132
4116
  'split_lines': {
4133
4117
  evaluate: function (_a, sourceCodeInfo) {
@@ -4135,7 +4119,7 @@ var stringNormalExpression = {
4135
4119
  assertString(str, sourceCodeInfo);
4136
4120
  return str.split((/\r\n|\n|\r/)).filter(function (line) { return line !== ''; });
4137
4121
  },
4138
- validate: function (node) { return assertNumberOfParams(1, node); },
4122
+ paramCount: 1,
4139
4123
  },
4140
4124
  'pad_left': {
4141
4125
  evaluate: function (_a, sourceCodeInfo) {
@@ -4146,7 +4130,7 @@ var stringNormalExpression = {
4146
4130
  assertString(padString, sourceCodeInfo);
4147
4131
  return str.padStart(length, padString);
4148
4132
  },
4149
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
4133
+ paramCount: { min: 2, max: 3 },
4150
4134
  },
4151
4135
  'pad_right': {
4152
4136
  evaluate: function (_a, sourceCodeInfo) {
@@ -4157,7 +4141,7 @@ var stringNormalExpression = {
4157
4141
  assertString(padString, sourceCodeInfo);
4158
4142
  return str.padEnd(length, padString);
4159
4143
  },
4160
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
4144
+ paramCount: { min: 2, max: 3 },
4161
4145
  },
4162
4146
  'template': {
4163
4147
  evaluate: function (_a, sourceCodeInfo) {
@@ -4188,7 +4172,7 @@ var stringNormalExpression = {
4188
4172
  }
4189
4173
  }
4190
4174
  },
4191
- validate: function (node) { return assertNumberOfParams({ min: 1, max: 10 }, node); },
4175
+ paramCount: { min: 1, max: 10 },
4192
4176
  },
4193
4177
  'encode_base64': {
4194
4178
  evaluate: function (_a, sourceCodeInfo) {
@@ -4199,7 +4183,7 @@ var stringNormalExpression = {
4199
4183
  return String.fromCharCode(Number.parseInt(p1, 16));
4200
4184
  }));
4201
4185
  },
4202
- validate: function (node) { return assertNumberOfParams(1, node); },
4186
+ paramCount: 1,
4203
4187
  },
4204
4188
  'decode_base64': {
4205
4189
  evaluate: function (_a, sourceCodeInfo) {
@@ -4217,7 +4201,7 @@ var stringNormalExpression = {
4217
4201
  throw new LitsError(error, sourceCodeInfo);
4218
4202
  }
4219
4203
  },
4220
- validate: function (node) { return assertNumberOfParams(1, node); },
4204
+ paramCount: 1,
4221
4205
  },
4222
4206
  'encode_uri_component': {
4223
4207
  evaluate: function (_a, sourceCodeInfo) {
@@ -4225,7 +4209,7 @@ var stringNormalExpression = {
4225
4209
  assertString(value, sourceCodeInfo);
4226
4210
  return encodeURIComponent(value);
4227
4211
  },
4228
- validate: function (node) { return assertNumberOfParams(1, node); },
4212
+ paramCount: 1,
4229
4213
  },
4230
4214
  'decode_uri_component': {
4231
4215
  evaluate: function (_a, sourceCodeInfo) {
@@ -4238,7 +4222,7 @@ var stringNormalExpression = {
4238
4222
  throw new LitsError(error, sourceCodeInfo);
4239
4223
  }
4240
4224
  },
4241
- validate: function (node) { return assertNumberOfParams(1, node); },
4225
+ paramCount: 1,
4242
4226
  },
4243
4227
  'blank?': {
4244
4228
  evaluate: function (_a, sourceCodeInfo) {
@@ -4249,7 +4233,7 @@ var stringNormalExpression = {
4249
4233
  assertString(value, sourceCodeInfo);
4250
4234
  return blankRegexp.test(value);
4251
4235
  },
4252
- validate: function (node) { return assertNumberOfParams(1, node); },
4236
+ paramCount: 1,
4253
4237
  },
4254
4238
  'capitalize': {
4255
4239
  evaluate: function (_a, sourceCodeInfo) {
@@ -4257,7 +4241,7 @@ var stringNormalExpression = {
4257
4241
  assertString(str, sourceCodeInfo);
4258
4242
  return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();
4259
4243
  },
4260
- validate: function (node) { return assertNumberOfParams(1, node); },
4244
+ paramCount: 1,
4261
4245
  },
4262
4246
  };
4263
4247
  var doubleDollarRegexp = /\$\$/g;
@@ -4288,14 +4272,14 @@ var functionalNormalExpression = {
4288
4272
  var applyArray = __spreadArray(__spreadArray([], __read(params.slice(0, -1)), false), __read(last), false);
4289
4273
  return executeFunction(func, applyArray, contextStack, sourceCodeInfo);
4290
4274
  },
4291
- validate: function (node) { return assertNumberOfParams({ min: 2 }, node); },
4275
+ paramCount: { min: 2 },
4292
4276
  },
4293
4277
  identity: {
4294
4278
  evaluate: function (_a) {
4295
4279
  var _b = __read(_a, 1), value = _b[0];
4296
4280
  return toAny(value);
4297
4281
  },
4298
- validate: function (node) { return assertNumberOfParams(1, node); },
4282
+ paramCount: 1,
4299
4283
  },
4300
4284
  partial: {
4301
4285
  evaluate: function (_a, sourceCodeInfo) {
@@ -4309,7 +4293,7 @@ var functionalNormalExpression = {
4309
4293
  _b.p = params,
4310
4294
  _b;
4311
4295
  },
4312
- validate: function (node) { return assertNumberOfParams({ min: 1 }, node); },
4296
+ paramCount: { min: 1 },
4313
4297
  },
4314
4298
  comp: {
4315
4299
  evaluate: function (fns, sourceCodeInfo) {
@@ -4327,6 +4311,7 @@ var functionalNormalExpression = {
4327
4311
  _a.f = fns,
4328
4312
  _a;
4329
4313
  },
4314
+ paramCount: {},
4330
4315
  },
4331
4316
  constantly: {
4332
4317
  evaluate: function (_a, sourceCodeInfo) {
@@ -4339,7 +4324,7 @@ var functionalNormalExpression = {
4339
4324
  _b.v = toAny(value),
4340
4325
  _b;
4341
4326
  },
4342
- validate: function (node) { return assertNumberOfParams(1, node); },
4327
+ paramCount: 1,
4343
4328
  },
4344
4329
  juxt: {
4345
4330
  evaluate: function (fns, sourceCodeInfo) {
@@ -4351,7 +4336,7 @@ var functionalNormalExpression = {
4351
4336
  _a.f = fns,
4352
4337
  _a;
4353
4338
  },
4354
- validate: function (node) { return assertNumberOfParams({ min: 1 }, node); },
4339
+ paramCount: { min: 1 },
4355
4340
  },
4356
4341
  complement: {
4357
4342
  evaluate: function (_a, sourceCodeInfo) {
@@ -4364,7 +4349,7 @@ var functionalNormalExpression = {
4364
4349
  _b.f = toAny(fn),
4365
4350
  _b;
4366
4351
  },
4367
- validate: function (node) { return assertNumberOfParams(1, node); },
4352
+ paramCount: 1,
4368
4353
  },
4369
4354
  every_pred: {
4370
4355
  evaluate: function (fns, sourceCodeInfo) {
@@ -4376,7 +4361,7 @@ var functionalNormalExpression = {
4376
4361
  _a.f = fns,
4377
4362
  _a;
4378
4363
  },
4379
- validate: function (node) { return assertNumberOfParams({ min: 1 }, node); },
4364
+ paramCount: { min: 1 },
4380
4365
  },
4381
4366
  some_pred: {
4382
4367
  evaluate: function (fns, sourceCodeInfo) {
@@ -4388,7 +4373,7 @@ var functionalNormalExpression = {
4388
4373
  _a.f = fns,
4389
4374
  _a;
4390
4375
  },
4391
- validate: function (node) { return assertNumberOfParams({ min: 1 }, node); },
4376
+ paramCount: { min: 1 },
4392
4377
  },
4393
4378
  fnil: {
4394
4379
  evaluate: function (_a, sourceCodeInfo) {
@@ -4402,7 +4387,7 @@ var functionalNormalExpression = {
4402
4387
  _b.p = params,
4403
4388
  _b;
4404
4389
  },
4405
- validate: function (node) { return assertNumberOfParams({ min: 2 }, node); },
4390
+ paramCount: { min: 2 },
4406
4391
  },
4407
4392
  };
4408
4393
 
@@ -4421,7 +4406,7 @@ var andSpecialExpression = {
4421
4406
  };
4422
4407
  return node;
4423
4408
  },
4424
- validateParameterCount: function () { return undefined; },
4409
+ paramCount: {},
4425
4410
  evaluate: function (node, contextStack, _a) {
4426
4411
  var e_1, _b;
4427
4412
  var evaluateAstNode = _a.evaluateAstNode;
@@ -4465,14 +4450,14 @@ function getCommonPolishSpecialExpressionParser(name) {
4465
4450
 
4466
4451
  var commentSpecialExpression = {
4467
4452
  polishParse: getCommonPolishSpecialExpressionParser('comment'),
4468
- validateParameterCount: function () { return undefined; },
4453
+ paramCount: {},
4469
4454
  evaluate: function () { return null; },
4470
4455
  findUnresolvedIdentifiers: function () { return new Set(); },
4471
4456
  };
4472
4457
 
4473
4458
  var condSpecialExpression = {
4474
4459
  polishParse: getCommonPolishSpecialExpressionParser('cond'),
4475
- validateParameterCount: function (node) { return assertEvenNumberOfParams(node); },
4460
+ paramCount: { even: true },
4476
4461
  evaluate: function (node, contextStack, _a) {
4477
4462
  var e_1, _b;
4478
4463
  var evaluateAstNode = _a.evaluateAstNode;
@@ -4502,7 +4487,7 @@ var condSpecialExpression = {
4502
4487
 
4503
4488
  var switchSpecialExpression = {
4504
4489
  polishParse: getCommonPolishSpecialExpressionParser('switch'),
4505
- validateParameterCount: function (node) { return assertOddNumberOfParams(node); },
4490
+ paramCount: { odd: true },
4506
4491
  evaluate: function (node, contextStack, _a) {
4507
4492
  var e_1, _b;
4508
4493
  var evaluateAstNode = _a.evaluateAstNode;
@@ -4533,7 +4518,7 @@ var switchSpecialExpression = {
4533
4518
 
4534
4519
  var declaredSpecialExpression = {
4535
4520
  polishParse: getCommonPolishSpecialExpressionParser('defined?'),
4536
- validateParameterCount: function (node) { return assertNumberOfParams(1, node); },
4521
+ paramCount: 1,
4537
4522
  evaluate: function (node, contextStack) {
4538
4523
  var lookUpResult = contextStack.lookUp(node.p[0]);
4539
4524
  return lookUpResult !== null;
@@ -4580,7 +4565,7 @@ var defSpecialExpression = {
4580
4565
  assertSymbolNode(node.p[0], (_b = getTokenDebugData(node.token)) === null || _b === void 0 ? void 0 : _b.sourceCodeInfo);
4581
4566
  return node;
4582
4567
  },
4583
- validateParameterCount: function (node) { return assertNumberOfParams(2, node); },
4568
+ paramCount: 2,
4584
4569
  evaluate: function (node, contextStack, _a) {
4585
4570
  var _b;
4586
4571
  var evaluateAstNode = _a.evaluateAstNode, builtin = _a.builtin;
@@ -4605,7 +4590,7 @@ var defSpecialExpression = {
4605
4590
 
4606
4591
  var doSpecialExpression = {
4607
4592
  polishParse: getCommonPolishSpecialExpressionParser('do'),
4608
- validateParameterCount: function () { return undefined; },
4593
+ paramCount: {},
4609
4594
  evaluate: function (node, contextStack, _a) {
4610
4595
  var e_1, _b;
4611
4596
  var evaluateAstNode = _a.evaluateAstNode;
@@ -4677,7 +4662,7 @@ var defnSpecialExpression = {
4677
4662
  };
4678
4663
  return node;
4679
4664
  },
4680
- validateParameterCount: function () { return undefined; },
4665
+ paramCount: {},
4681
4666
  evaluate: function (node, contextStack, _a) {
4682
4667
  var _b;
4683
4668
  var _c, _d;
@@ -4716,7 +4701,7 @@ var fnSpecialExpression = {
4716
4701
  };
4717
4702
  return node;
4718
4703
  },
4719
- validateParameterCount: function () { return undefined; },
4704
+ paramCount: {},
4720
4705
  evaluate: function (node, contextStack, _a) {
4721
4706
  var _b;
4722
4707
  var _c;
@@ -4941,7 +4926,7 @@ function parseFunctionArguments(tokenStream, parseState, parsers) {
4941
4926
 
4942
4927
  var ifSpecialExpression = {
4943
4928
  polishParse: getCommonPolishSpecialExpressionParser('if'),
4944
- validateParameterCount: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
4929
+ paramCount: { min: 2, max: 3 },
4945
4930
  evaluate: function (node, contextStack, _a) {
4946
4931
  var _b;
4947
4932
  var evaluateAstNode = _a.evaluateAstNode;
@@ -4965,7 +4950,7 @@ var ifSpecialExpression = {
4965
4950
 
4966
4951
  var unlessSpecialExpression = {
4967
4952
  polishParse: getCommonPolishSpecialExpressionParser('unless'),
4968
- validateParameterCount: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
4953
+ paramCount: { min: 2, max: 3 },
4969
4954
  evaluate: function (node, contextStack, _a) {
4970
4955
  var _b;
4971
4956
  var evaluateAstNode = _a.evaluateAstNode;
@@ -5002,7 +4987,7 @@ var letSpecialExpression = {
5002
4987
  };
5003
4988
  return node;
5004
4989
  },
5005
- validateParameterCount: function (node) { return assertNumberOfParams(0, node); },
4990
+ paramCount: 0,
5006
4991
  evaluate: function (node, contextStack, _a) {
5007
4992
  var e_1, _b;
5008
4993
  var evaluateAstNode = _a.evaluateAstNode;
@@ -5057,7 +5042,7 @@ var loopSpecialExpression = {
5057
5042
  };
5058
5043
  return node;
5059
5044
  },
5060
- validateParameterCount: function () { return undefined; },
5045
+ paramCount: {},
5061
5046
  evaluate: function (node, contextStack, _a) {
5062
5047
  var _b;
5063
5048
  var evaluateAstNode = _a.evaluateAstNode;
@@ -5323,7 +5308,7 @@ var forSpecialExpression = {
5323
5308
  };
5324
5309
  return node;
5325
5310
  },
5326
- validateParameterCount: function (node) { return assertNumberOfParams(1, node); },
5311
+ paramCount: 1,
5327
5312
  evaluate: function (node, contextStack, helpers) { return evaluateLoop(true, node, contextStack, helpers.evaluateAstNode); },
5328
5313
  findUnresolvedIdentifiers: function (node, contextStack, _a) {
5329
5314
  var findUnresolvedIdentifiers = _a.findUnresolvedIdentifiers, builtin = _a.builtin;
@@ -5345,7 +5330,7 @@ var doseqSpecialExpression = {
5345
5330
  };
5346
5331
  return node;
5347
5332
  },
5348
- validateParameterCount: function (node) { return assertNumberOfParams(1, node); },
5333
+ paramCount: 1,
5349
5334
  evaluate: function (node, contextStack, helpers) {
5350
5335
  evaluateLoop(false, node, contextStack, helpers.evaluateAstNode);
5351
5336
  return null;
@@ -5358,7 +5343,7 @@ var doseqSpecialExpression = {
5358
5343
 
5359
5344
  var orSpecialExpression = {
5360
5345
  polishParse: getCommonPolishSpecialExpressionParser('||'),
5361
- validateParameterCount: function () { return undefined; },
5346
+ paramCount: {},
5362
5347
  evaluate: function (node, contextStack, _a) {
5363
5348
  var e_1, _b;
5364
5349
  var evaluateAstNode = _a.evaluateAstNode;
@@ -5388,7 +5373,7 @@ var orSpecialExpression = {
5388
5373
 
5389
5374
  var qqSpecialExpression = {
5390
5375
  polishParse: getCommonPolishSpecialExpressionParser('??'),
5391
- validateParameterCount: function (node) { return assertNumberOfParams({ min: 1, max: 2 }, node); },
5376
+ paramCount: { min: 1, max: 2 },
5392
5377
  evaluate: function (node, contextStack, _a) {
5393
5378
  var _b;
5394
5379
  var evaluateAstNode = _a.evaluateAstNode;
@@ -5420,7 +5405,7 @@ var recurSpecialExpression = {
5420
5405
  };
5421
5406
  return node;
5422
5407
  },
5423
- validateParameterCount: function () { return undefined; },
5408
+ paramCount: {},
5424
5409
  evaluate: function (node, contextStack, _a) {
5425
5410
  var evaluateAstNode = _a.evaluateAstNode;
5426
5411
  var params = node.p.map(function (paramNode) { return evaluateAstNode(paramNode, contextStack); });
@@ -5434,7 +5419,7 @@ var recurSpecialExpression = {
5434
5419
 
5435
5420
  var throwSpecialExpression = {
5436
5421
  polishParse: getCommonPolishSpecialExpressionParser('throw'),
5437
- validateParameterCount: function (node) { return assertNumberOfParams(1, node); },
5422
+ paramCount: 1,
5438
5423
  evaluate: function (node, contextStack, _a) {
5439
5424
  var _b, _c;
5440
5425
  var evaluateAstNode = _a.evaluateAstNode;
@@ -5475,7 +5460,7 @@ var trySpecialExpression = {
5475
5460
  };
5476
5461
  return node;
5477
5462
  },
5478
- validateParameterCount: function (node) { return assertNumberOfParams(1, node); },
5463
+ paramCount: 1,
5479
5464
  evaluate: function (node, contextStack, _a) {
5480
5465
  var _b;
5481
5466
  var _c;
@@ -5912,8 +5897,9 @@ function evaluate(ast, contextStack) {
5912
5897
  var e_1, _a;
5913
5898
  var result = null;
5914
5899
  var safeAstNode = ast.hasDebugData ? JSON.parse(JSON.stringify(ast)) : ast;
5915
- if (safeAstNode.hasDebugData)
5900
+ if (safeAstNode.hasDebugData) {
5916
5901
  removeCommenNodes(safeAstNode);
5902
+ }
5917
5903
  try {
5918
5904
  for (var _b = __values(safeAstNode.b), _c = _b.next(); !_c.done; _c = _b.next()) {
5919
5905
  var node = _c.value;
@@ -6119,6 +6105,20 @@ function analyze(ast, params) {
6119
6105
  };
6120
6106
  }
6121
6107
 
6108
+ function minifyTokenStream(tokenStream) {
6109
+ var tokens = tokenStream.tokens.filter(function (token) {
6110
+ if (isP_CommentToken(token)
6111
+ || isA_CommentToken(token)
6112
+ || isA_MultiLineCommentToken(token)
6113
+ || isA_WhitespaceToken(token)
6114
+ || isP_WhitespaceToken(token)) {
6115
+ return false;
6116
+ }
6117
+ return true;
6118
+ });
6119
+ return __assign(__assign({}, tokenStream), { tokens: tokens });
6120
+ }
6121
+
6122
6122
  function parseSymbol(tokenStream, parseState) {
6123
6123
  var _a;
6124
6124
  var tkn = asToken(tokenStream.tokens[parseState.position++]);
@@ -6308,7 +6308,6 @@ function getPrecedence(operatorSign) {
6308
6308
  }
6309
6309
  }
6310
6310
  function createNamedNormalExpressionNode(name, params, token) {
6311
- var _a;
6312
6311
  var node = {
6313
6312
  t: AstNodeType.NormalExpression,
6314
6313
  n: name,
@@ -6317,7 +6316,7 @@ function createNamedNormalExpressionNode(name, params, token) {
6317
6316
  };
6318
6317
  var builtinExpression = builtin.normalExpressions[node.n];
6319
6318
  if (builtinExpression) {
6320
- (_a = builtinExpression.validate) === null || _a === void 0 ? void 0 : _a.call(builtinExpression, __assign(__assign({}, node), { p: withoutCommentNodes(node.p) }));
6319
+ assertNumberOfParams(builtinExpression.paramCount, node);
6321
6320
  }
6322
6321
  return node;
6323
6322
  }
@@ -6418,7 +6417,7 @@ var AlgebraicParser = /** @class */ (function () {
6418
6417
  AlgebraicParser.prototype.parse = function () {
6419
6418
  var nodes = [];
6420
6419
  while (!this.isAtEnd()) {
6421
- nodes.push(this.parseExpression());
6420
+ nodes.push(this.parseExpression(0, true));
6422
6421
  if (!isA_OperatorToken(this.peek(), ';')) {
6423
6422
  break;
6424
6423
  }
@@ -6426,9 +6425,10 @@ var AlgebraicParser = /** @class */ (function () {
6426
6425
  }
6427
6426
  return nodes;
6428
6427
  };
6429
- AlgebraicParser.prototype.parseExpression = function (precedence) {
6430
- var _a;
6428
+ AlgebraicParser.prototype.parseExpression = function (precedence, moduleScope) {
6429
+ var _a, _b;
6431
6430
  if (precedence === void 0) { precedence = 0; }
6431
+ if (moduleScope === void 0) { moduleScope = false; }
6432
6432
  var firstToken = this.peek();
6433
6433
  var left;
6434
6434
  if (isA_SymbolToken(firstToken)) {
@@ -6464,6 +6464,9 @@ var AlgebraicParser = /** @class */ (function () {
6464
6464
  return this.parseFunction(firstToken);
6465
6465
  }
6466
6466
  else if (isA_ReservedSymbolToken(firstToken, 'export')) {
6467
+ if (!moduleScope) {
6468
+ throw new LitsError('export is only allowed in module scope', (_a = getTokenDebugData(firstToken)) === null || _a === void 0 ? void 0 : _a.sourceCodeInfo);
6469
+ }
6467
6470
  return this.parseExport(firstToken);
6468
6471
  }
6469
6472
  left || (left = this.parseOperand());
@@ -6501,7 +6504,7 @@ var AlgebraicParser = /** @class */ (function () {
6501
6504
  operator = this.peek();
6502
6505
  }
6503
6506
  if (!left) {
6504
- throw new LitsError('Expected operand', (_a = getTokenDebugData(this.peek())) === null || _a === void 0 ? void 0 : _a.sourceCodeInfo);
6507
+ throw new LitsError('Expected operand', (_b = getTokenDebugData(this.peek())) === null || _b === void 0 ? void 0 : _b.sourceCodeInfo);
6505
6508
  }
6506
6509
  return left;
6507
6510
  };
@@ -6609,32 +6612,6 @@ var AlgebraicParser = /** @class */ (function () {
6609
6612
  return parseReservedSymbol(this.tokenStream, this.parseState);
6610
6613
  case 'RegexpShorthand':
6611
6614
  return parseRegexpShorthand(this.tokenStream, this.parseState);
6612
- case 'PolNotation': {
6613
- this.parseState.algebraic = false;
6614
- var astNodes = [];
6615
- this.advance();
6616
- do {
6617
- astNodes.push(this.parseState.parseToken(this.tokenStream, this.parseState));
6618
- } while (!isEndNotationToken(this.peek()));
6619
- this.advance();
6620
- this.parseState.algebraic = true;
6621
- if (astNodes.length === 1) {
6622
- return astNodes[0];
6623
- }
6624
- return {
6625
- t: AstNodeType.SpecialExpression,
6626
- n: 'do',
6627
- p: astNodes,
6628
- token: getTokenDebugData(token) && token,
6629
- };
6630
- }
6631
- case 'AlgNotation': {
6632
- this.advance();
6633
- var node = this.parseOperand();
6634
- assertEndNotationToken(this.peek());
6635
- this.advance();
6636
- return node;
6637
- }
6638
6615
  default:
6639
6616
  throw new LitsError("Unknown token type: ".concat(tokenType), (_b = getTokenDebugData(token)) === null || _b === void 0 ? void 0 : _b.sourceCodeInfo);
6640
6617
  }
@@ -6739,7 +6716,7 @@ var AlgebraicParser = /** @class */ (function () {
6739
6716
  p: params,
6740
6717
  token: getTokenDebugData(symbol.token) && symbol.token,
6741
6718
  };
6742
- builtin.specialExpressions[node.n].validateParameterCount(node);
6719
+ assertNumberOfParams(builtin.specialExpressions[node.n].paramCount, node);
6743
6720
  return node;
6744
6721
  }
6745
6722
  case 'fn':
@@ -6792,7 +6769,7 @@ var AlgebraicParser = /** @class */ (function () {
6792
6769
  }
6793
6770
  };
6794
6771
  AlgebraicParser.prototype.parseFunctionArguments = function () {
6795
- var _a, _b, _c, _d, _e;
6772
+ var _a, _b, _c, _d;
6796
6773
  var firstToken = this.peek();
6797
6774
  if (isA_SymbolToken(firstToken)) {
6798
6775
  this.advance();
@@ -6807,62 +6784,54 @@ var AlgebraicParser = /** @class */ (function () {
6807
6784
  }
6808
6785
  this.advance();
6809
6786
  var rest = false;
6810
- var letBindingObject;
6811
6787
  var args = [];
6812
6788
  var restArg;
6813
- while (!this.isAtEnd() && !isRParenToken(this.peek())) {
6814
- if (letBindingObject) {
6815
- throw new LitsError('Expected right parentheses', (_a = getTokenDebugData(this.peek())) === null || _a === void 0 ? void 0 : _a.sourceCodeInfo);
6816
- }
6817
- if (isLBraceToken(this.peek())) {
6818
- letBindingObject = this.parseObject();
6819
- }
6820
- else {
6821
- if (isA_OperatorToken(this.peek(), '...')) {
6822
- if (rest) {
6823
- throw new LitsError('Multiple spread operators in lambda function', (_b = getTokenDebugData(this.peek())) === null || _b === void 0 ? void 0 : _b.sourceCodeInfo);
6824
- }
6825
- this.advance();
6826
- rest = true;
6827
- }
6828
- var symbolToken = this.peek();
6829
- if (!isA_SymbolToken(symbolToken)) {
6830
- throw new LitsError('Expected symbol', (_c = getTokenDebugData(this.peek())) === null || _c === void 0 ? void 0 : _c.sourceCodeInfo);
6831
- }
6789
+ while (!this.isAtEnd() && !isRParenToken(this.peek()) && !isA_SymbolToken(this.peek(), 'let')) {
6790
+ if (isA_OperatorToken(this.peek(), '...')) {
6832
6791
  if (rest) {
6833
- restArg = symbolToken[1];
6834
- }
6835
- else {
6836
- args.push(symbolToken[1]);
6792
+ throw new LitsError('Multiple spread operators in lambda function', (_a = getTokenDebugData(this.peek())) === null || _a === void 0 ? void 0 : _a.sourceCodeInfo);
6837
6793
  }
6838
6794
  this.advance();
6795
+ rest = true;
6796
+ }
6797
+ var symbolToken = this.peek();
6798
+ if (!isA_SymbolToken(symbolToken)) {
6799
+ throw new LitsError('Expected symbol', (_b = getTokenDebugData(this.peek())) === null || _b === void 0 ? void 0 : _b.sourceCodeInfo);
6839
6800
  }
6840
- if (!isA_OperatorToken(this.peek(), ',') && !isRParenToken(this.peek())) {
6841
- throw new LitsError('Expected comma or closing parenthesis', (_d = getTokenDebugData(this.peek())) === null || _d === void 0 ? void 0 : _d.sourceCodeInfo);
6801
+ if (rest) {
6802
+ restArg = symbolToken[1];
6803
+ }
6804
+ else {
6805
+ args.push(symbolToken[1]);
6806
+ }
6807
+ this.advance();
6808
+ if (!isA_OperatorToken(this.peek(), ',') && !isRParenToken(this.peek()) && !isA_SymbolToken(this.peek(), 'let')) {
6809
+ throw new LitsError('Expected comma or closing parenthesis', (_c = getTokenDebugData(this.peek())) === null || _c === void 0 ? void 0 : _c.sourceCodeInfo);
6842
6810
  }
6843
6811
  if (isA_OperatorToken(this.peek(), ',')) {
6844
6812
  this.advance();
6845
6813
  }
6846
6814
  }
6847
6815
  var arity = restArg !== undefined ? { min: args.length } : args.length;
6816
+ // let bindings, to be able to pass on values in the context down to the body
6817
+ // This is needed since lits is dynamically scoped
6818
+ // E.g.
6819
+ // x => y => x + y // would not work, x is not available in the second lambda
6820
+ // x => (y, let x = x) => x + y // would work, x is available in the second lambda
6821
+ var bindingNodess = [];
6822
+ var token = this.peek();
6823
+ while (isA_SymbolToken(token, 'let')) {
6824
+ var letNode = this.parseLet(token, true);
6825
+ bindingNodess.push(letNode.bs[0]);
6826
+ token = this.peek();
6827
+ }
6848
6828
  if (!isRParenToken(this.peek())) {
6849
- throw new LitsError('Expected closing parenthesis', (_e = getTokenDebugData(this.peek())) === null || _e === void 0 ? void 0 : _e.sourceCodeInfo);
6829
+ throw new LitsError('Expected closing parenthesis', (_d = getTokenDebugData(this.peek())) === null || _d === void 0 ? void 0 : _d.sourceCodeInfo);
6850
6830
  }
6851
- var letBindings = letBindingObject ? arrayToPairs(letBindingObject.p) : [];
6852
6831
  var functionArguments = {
6853
6832
  m: args,
6854
6833
  r: restArg,
6855
- b: letBindings.map(function (pair) {
6856
- var key = pair[0];
6857
- var value = pair[1];
6858
- return {
6859
- t: AstNodeType.Binding,
6860
- n: key.v,
6861
- v: value,
6862
- p: [],
6863
- token: getTokenDebugData(key.token) && key.token,
6864
- };
6865
- }),
6834
+ b: bindingNodess,
6866
6835
  };
6867
6836
  this.advance();
6868
6837
  return {
@@ -7312,6 +7281,7 @@ var AlgebraicParser = /** @class */ (function () {
7312
7281
  }
7313
7282
  assertA_ReservedSymbolToken(this.peek(), 'end');
7314
7283
  this.advance();
7284
+ assertA_OperatorToken(this.peek(), ';');
7315
7285
  var fnNode = {
7316
7286
  t: AstNodeType.SpecialExpression,
7317
7287
  n: 'fn',
@@ -7474,7 +7444,7 @@ function parseObjectLitteral(tokenStream, parseState) {
7474
7444
  p: params,
7475
7445
  token: getTokenDebugData(firstToken) && firstToken,
7476
7446
  };
7477
- assertEvenNumberOfParams(node);
7447
+ assertNumberOfParams({ even: true }, node);
7478
7448
  return node;
7479
7449
  }
7480
7450
  var placeholderRegexp = /^%([1-9]\d?)?$/;
@@ -7580,7 +7550,7 @@ function parseBinding(tokenStream, parseState) {
7580
7550
  return node;
7581
7551
  }
7582
7552
  function parseNormalExpression(tokenStream, parseState) {
7583
- var _a, _b;
7553
+ var _a;
7584
7554
  var startBracketToken = tokenStream.hasDebugData ? asLParenToken(tokenStream.tokens[parseState.position]) : undefined;
7585
7555
  parseState.position += 1;
7586
7556
  var fnNode = parseState.parseToken(tokenStream, parseState);
@@ -7604,7 +7574,7 @@ function parseNormalExpression(tokenStream, parseState) {
7604
7574
  };
7605
7575
  var builtinExpression = builtin.normalExpressions[node.n];
7606
7576
  if (builtinExpression) {
7607
- (_b = builtinExpression.validate) === null || _b === void 0 ? void 0 : _b.call(builtinExpression, __assign(__assign({}, node), { p: withoutCommentNodes(node.p) }));
7577
+ assertNumberOfParams(builtinExpression.paramCount, node);
7608
7578
  }
7609
7579
  return node;
7610
7580
  }
@@ -7613,7 +7583,7 @@ function parseSpecialExpression(tokenStream, parseState) {
7613
7583
  var firstToken = asLParenToken(tokenStream.tokens[parseState.position++]);
7614
7584
  var nameToken = asP_SymbolToken(tokenStream.tokens[parseState.position++]);
7615
7585
  var expressionName = nameToken[1];
7616
- var _b = asNonUndefined(builtin.specialExpressions[expressionName], (_a = getTokenDebugData(nameToken)) === null || _a === void 0 ? void 0 : _a.sourceCodeInfo), parse = _b.polishParse, validateParameterCount = _b.validateParameterCount;
7586
+ var _b = asNonUndefined(builtin.specialExpressions[expressionName], (_a = getTokenDebugData(nameToken)) === null || _a === void 0 ? void 0 : _a.sourceCodeInfo), parse = _b.polishParse, paramCount = _b.paramCount;
7617
7587
  var node = parse(tokenStream, parseState, firstToken, {
7618
7588
  parseExpression: parseExpression,
7619
7589
  parseTokensUntilClosingBracket: parseTokensUntilClosingBracket,
@@ -7622,7 +7592,7 @@ function parseSpecialExpression(tokenStream, parseState) {
7622
7592
  parseBindings: parseBindings,
7623
7593
  parseArgument: parseArgument,
7624
7594
  });
7625
- validateParameterCount(node);
7595
+ assertNumberOfParams(paramCount, node);
7626
7596
  return node;
7627
7597
  }
7628
7598
  function parsePolishToken(tokenStream, parseState) {
@@ -7652,47 +7622,12 @@ function parsePolishToken(tokenStream, parseState) {
7652
7622
  return parseFnShorthand(tokenStream, parseState);
7653
7623
  case 'P_Comment':
7654
7624
  return parseComment(tokenStream, parseState);
7655
- case 'AlgNotation': {
7656
- parseState.position += 1;
7657
- parseState.algebraic = true;
7658
- var algebraicParser = new AlgebraicParser(tokenStream, parseState);
7659
- var nodes = algebraicParser.parse();
7660
- assertEndNotationToken(tokenStream.tokens[parseState.position++]);
7661
- parseState.algebraic = false;
7662
- if (nodes.length === 1) {
7663
- return nodes[0];
7664
- }
7665
- return {
7666
- t: AstNodeType.SpecialExpression,
7667
- n: 'do',
7668
- p: nodes,
7669
- token: nodes[0].token,
7670
- };
7671
- }
7672
- case 'PolNotation': {
7673
- var astNodes = [];
7674
- parseState.position += 1;
7675
- do {
7676
- astNodes.push(parsePolishToken(tokenStream, parseState));
7677
- } while (!isEndNotationToken(asToken(tokenStream.tokens[parseState.position])));
7678
- parseState.position += 1;
7679
- if (astNodes.length === 1) {
7680
- return astNodes[0];
7681
- }
7682
- return {
7683
- t: AstNodeType.SpecialExpression,
7684
- n: 'do',
7685
- p: astNodes,
7686
- token: astNodes[0].token,
7687
- };
7688
- }
7689
7625
  case 'P_CollectionAccessor':
7690
7626
  case 'P_Modifier':
7691
7627
  case 'RParen':
7692
7628
  case 'RBracket':
7693
7629
  case 'RBrace':
7694
7630
  case 'P_Whitespace':
7695
- case 'EndNotation':
7696
7631
  break;
7697
7632
  /* v8 ignore next 2 */
7698
7633
  default:
@@ -7702,49 +7637,28 @@ function parsePolishToken(tokenStream, parseState) {
7702
7637
  }
7703
7638
 
7704
7639
  function parse(tokenStream) {
7705
- var _a;
7706
- var safeTokenStream = removeUnnecessaryTokens(tokenStream);
7640
+ tokenStream = minifyTokenStream(tokenStream);
7641
+ var algebraic = tokenStream.algebraic;
7707
7642
  var ast = {
7708
7643
  b: [],
7709
- hasDebugData: safeTokenStream.hasDebugData,
7644
+ hasDebugData: tokenStream.hasDebugData,
7710
7645
  };
7711
7646
  var parseState = {
7712
7647
  position: 0,
7713
- algebraic: (_a = safeTokenStream.algebraic) !== null && _a !== void 0 ? _a : false,
7714
7648
  parseToken: parseToken,
7715
7649
  };
7716
- while (parseState.position < safeTokenStream.tokens.length) {
7717
- ast.b.push(parseToken(safeTokenStream, parseState));
7650
+ if (algebraic) {
7651
+ var algebraicParser = new AlgebraicParser(tokenStream, parseState);
7652
+ ast.b = algebraicParser.parse();
7718
7653
  }
7719
- return ast;
7720
- }
7721
- function removeUnnecessaryTokens(tokenStream) {
7722
- var tokens = tokenStream.tokens.filter(function (token) {
7723
- if (isP_CommentToken(token)
7724
- || isA_CommentToken(token)
7725
- || isA_MultiLineCommentToken(token)
7726
- || isA_WhitespaceToken(token)
7727
- || isP_WhitespaceToken(token)) {
7728
- return false;
7654
+ else {
7655
+ while (parseState.position < tokenStream.tokens.length) {
7656
+ ast.b.push(parseToken(tokenStream, parseState));
7729
7657
  }
7730
- return true;
7731
- });
7732
- return __assign(__assign({}, tokenStream), { tokens: tokens });
7658
+ }
7659
+ return ast;
7733
7660
  }
7734
7661
  function parseToken(tokenStream, parseState) {
7735
- if (parseState.algebraic) {
7736
- var algebraicParser = new AlgebraicParser(tokenStream, parseState);
7737
- var nodes = algebraicParser.parse();
7738
- if (nodes.length === 1) {
7739
- return nodes[0];
7740
- }
7741
- return {
7742
- t: AstNodeType.SpecialExpression,
7743
- n: 'do',
7744
- p: nodes,
7745
- token: nodes[0].token,
7746
- };
7747
- }
7748
7662
  return parsePolishToken(tokenStream, parseState);
7749
7663
  }
7750
7664
 
@@ -7774,15 +7688,6 @@ var tokenizeLBrace = function (input, position) {
7774
7688
  var tokenizeRBrace = function (input, position) {
7775
7689
  return tokenizeSimpleToken('RBrace', '}', input, position);
7776
7690
  };
7777
- var tokenizePolishNotation = function (input, position) {
7778
- return tokenizeSimpleToken('PolNotation', '$`', input, position);
7779
- };
7780
- var tokenizeAlgebraicNotation = function (input, position) {
7781
- return tokenizeSimpleToken('AlgNotation', '@`', input, position);
7782
- };
7783
- var tokenizeEndNotation = function (input, position) {
7784
- return tokenizeSimpleToken('EndNotation', '`', input, position);
7785
- };
7786
7691
  var tokenizeString = function (input, position) {
7787
7692
  if (input[position] !== '"')
7788
7693
  return NO_MATCH;
@@ -7835,9 +7740,6 @@ function tokenizeSimpleToken(type, value, input, position) {
7835
7740
  return NO_MATCH;
7836
7741
  }
7837
7742
  var commonTokenizers = [
7838
- tokenizePolishNotation,
7839
- tokenizeAlgebraicNotation,
7840
- tokenizeEndNotation,
7841
7743
  tokenizeLParen,
7842
7744
  tokenizeRParen,
7843
7745
  tokenizeLBracket,
@@ -8347,7 +8249,6 @@ function getSugar() {
8347
8249
 
8348
8250
  function tokenize(input, params) {
8349
8251
  var debug = !!params.debug;
8350
- var notationStack = [params.algebraic ? 'algebraic' : 'polish'];
8351
8252
  var position = 0;
8352
8253
  var tokenStream = {
8353
8254
  tokens: [],
@@ -8356,7 +8257,7 @@ function tokenize(input, params) {
8356
8257
  algebraic: !!params.algebraic,
8357
8258
  };
8358
8259
  while (position < input.length) {
8359
- var tokenizers = notationStack.at(-1) === 'algebraic' ? algebraicTokenizers : polishTokenizers;
8260
+ var tokenizers = params.algebraic ? algebraicTokenizers : polishTokenizers;
8360
8261
  var tokenDescriptor = getCurrentToken(input, position, tokenizers);
8361
8262
  var debugData = debug
8362
8263
  ? {
@@ -8373,23 +8274,8 @@ function tokenize(input, params) {
8373
8274
  addTokenDebugData(token, debugData);
8374
8275
  }
8375
8276
  tokenStream.tokens.push(token);
8376
- if (isAlgebraicNotationToken(token)) {
8377
- notationStack.push('algebraic');
8378
- }
8379
- if (isPolishNotationToken(token)) {
8380
- notationStack.push('polish');
8381
- }
8382
- if (isEndNotationToken(token)) {
8383
- notationStack.pop();
8384
- if (notationStack.length < 1) {
8385
- throw new LitsError('Unexpected end directive `.', debugData === null || debugData === void 0 ? void 0 : debugData.sourceCodeInfo);
8386
- }
8387
- }
8388
8277
  }
8389
8278
  }
8390
- if (notationStack.length > 1) {
8391
- throw new LitsError('Missing end directive `.', createSourceCodeInfo(input, position, params.filePath));
8392
- }
8393
8279
  applySugar(tokenStream);
8394
8280
  return tokenStream;
8395
8281
  }
@@ -8474,9 +8360,6 @@ function untokenizeToken(token) {
8474
8360
  case 'RBracket': return ']';
8475
8361
  case 'LBrace': return '{';
8476
8362
  case 'RBrace': return '}';
8477
- case 'PolNotation': return '$`';
8478
- case 'AlgNotation': return '@`';
8479
- case 'EndNotation': return '`';
8480
8363
  case 'P_FnShorthand': return '#';
8481
8364
  /* v8 ignore next 2 */
8482
8365
  default:
@@ -8601,7 +8484,8 @@ var Lits = /** @class */ (function () {
8601
8484
  if (tokenizeParams === void 0) { tokenizeParams = {}; }
8602
8485
  var debug = this.debug;
8603
8486
  var algebraic = this.algebraic;
8604
- return tokenize(program, __assign(__assign({}, tokenizeParams), { debug: debug, algebraic: algebraic }));
8487
+ var tokenStream = tokenize(program, __assign(__assign({}, tokenizeParams), { debug: debug, algebraic: algebraic }));
8488
+ return tokenizeParams.minify ? minifyTokenStream(tokenStream) : tokenStream;
8605
8489
  };
8606
8490
  Lits.prototype.parse = function (tokenStream) {
8607
8491
  return parse(tokenStream);