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