@mojir/lits 2.0.19 → 2.0.20

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 (34) hide show
  1. package/dist/cli/cli.js +323 -441
  2. package/dist/cli/src/builtin/interface.d.ts +9 -5
  3. package/dist/cli/src/parser/index.d.ts +1 -2
  4. package/dist/cli/src/parser/interface.d.ts +0 -1
  5. package/dist/cli/src/tokenizer/algebraic/algebraicTokenizers.d.ts +1 -1
  6. package/dist/cli/src/tokenizer/algebraic/algebraicTokens.d.ts +2 -2
  7. package/dist/cli/src/tokenizer/common/commonTokenizers.d.ts +2 -2
  8. package/dist/cli/src/tokenizer/common/commonTokens.d.ts +2 -14
  9. package/dist/cli/src/tokenizer/polish/polishTokenizers.d.ts +1 -1
  10. package/dist/cli/src/tokenizer/polish/polishTokens.d.ts +2 -2
  11. package/dist/cli/src/tokenizer/tokens.d.ts +2 -2
  12. package/dist/cli/src/typeGuards/index.d.ts +1 -7
  13. package/dist/index.esm.js +322 -440
  14. package/dist/index.esm.js.map +1 -1
  15. package/dist/index.js +322 -440
  16. package/dist/index.js.map +1 -1
  17. package/dist/lits.iife.js +322 -440
  18. package/dist/lits.iife.js.map +1 -1
  19. package/dist/src/builtin/interface.d.ts +9 -5
  20. package/dist/src/parser/index.d.ts +1 -2
  21. package/dist/src/parser/interface.d.ts +0 -1
  22. package/dist/src/tokenizer/algebraic/algebraicTokenizers.d.ts +1 -1
  23. package/dist/src/tokenizer/algebraic/algebraicTokens.d.ts +2 -2
  24. package/dist/src/tokenizer/common/commonTokenizers.d.ts +2 -2
  25. package/dist/src/tokenizer/common/commonTokens.d.ts +2 -14
  26. package/dist/src/tokenizer/polish/polishTokenizers.d.ts +1 -1
  27. package/dist/src/tokenizer/polish/polishTokens.d.ts +2 -2
  28. package/dist/src/tokenizer/tokens.d.ts +2 -2
  29. package/dist/src/typeGuards/index.d.ts +1 -7
  30. package/dist/testFramework.esm.js +432 -550
  31. package/dist/testFramework.esm.js.map +1 -1
  32. package/dist/testFramework.js +432 -550
  33. package/dist/testFramework.js.map +1 -1
  34. package/package.json +1 -1
package/dist/cli/cli.js CHANGED
@@ -92,7 +92,7 @@ typeof SuppressedError === "function" ? SuppressedError : function (error, suppr
92
92
  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
93
93
  };
94
94
 
95
- var version = "2.0.19";
95
+ var version = "2.0.20";
96
96
 
97
97
  var AstNodeType;
98
98
  (function (AstNodeType) {
@@ -282,9 +282,6 @@ var commonSimpleTokenTypes = [
282
282
  'RBrace',
283
283
  'RBracket',
284
284
  'RParen',
285
- 'AlgNotation',
286
- 'PolNotation',
287
- 'EndNotation',
288
285
  ];
289
286
  var commomValueTokenTypes = [
290
287
  'String',
@@ -374,20 +371,6 @@ function asRegexpShorthandToken(token) {
374
371
  assertRegexpShorthandToken(token);
375
372
  return token;
376
373
  }
377
- function isAlgebraicNotationToken(token) {
378
- return (token === null || token === void 0 ? void 0 : token[0]) === 'AlgNotation';
379
- }
380
- function isPolishNotationToken(token) {
381
- return (token === null || token === void 0 ? void 0 : token[0]) === 'PolNotation';
382
- }
383
- function isEndNotationToken(token) {
384
- return (token === null || token === void 0 ? void 0 : token[0]) === 'EndNotation';
385
- }
386
- function assertEndNotationToken(token) {
387
- if (!isEndNotationToken(token)) {
388
- throwUnexpectedToken('EndNotation', undefined, token);
389
- }
390
- }
391
374
 
392
375
  var algebraicSimpleTokenTypes = __spreadArray([], __read(commonSimpleTokenTypes), false);
393
376
  var algebraicOnlyValueTokenTypes = [
@@ -847,20 +830,6 @@ function withoutCommentNodes(astNodes) {
847
830
  return astNodes.filter(function (n) { return n.t !== AstNodeType.Comment; });
848
831
  }
849
832
 
850
- function assertEvenNumberOfParams(node) {
851
- var _a;
852
- var length = withoutCommentNodes(node.p).length;
853
- if (length % 2 !== 0) {
854
- 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);
855
- }
856
- }
857
- function assertOddNumberOfParams(node) {
858
- var _a;
859
- var length = withoutCommentNodes(node.p).length;
860
- if (length % 2 !== 1) {
861
- 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);
862
- }
863
- }
864
833
  function assertNumberOfParams(count, node) {
865
834
  var _a, _b;
866
835
  assertCount({
@@ -892,9 +861,17 @@ function assertCount(_a) {
892
861
  }
893
862
  }
894
863
  else {
895
- var min = count.min, max = count.max;
896
- if (min === undefined && max === undefined)
897
- throw new LitsError('Min or max must be specified.', sourceCodeInfo);
864
+ var min = count.min, max = count.max, even = count.even, odd = count.odd;
865
+ if (even) {
866
+ if (length % 2 !== 0) {
867
+ throw new LitsError("Wrong number of arguments to \"".concat(name, "\",, expected an even number, got ").concat(valueToString(length), "."), sourceCodeInfo);
868
+ }
869
+ }
870
+ if (odd) {
871
+ if (length % 2 !== 1) {
872
+ throw new LitsError("Wrong number of arguments to \"".concat(name, "\",, expected an odd number, got ").concat(valueToString(length), "."), sourceCodeInfo);
873
+ }
874
+ }
898
875
  if (typeof min === 'number' && length < min) {
899
876
  throw new LitsError("Wrong number of arguments to \"".concat(name, "\", expected at least ").concat(min, ", got ").concat(valueToString(length), "."), sourceCodeInfo);
900
877
  }
@@ -1005,7 +982,7 @@ var bitwiseNormalExpression = {
1005
982
  assertNumber(count, sourceCodeInfo, { integer: true, nonNegative: true });
1006
983
  return num << count;
1007
984
  },
1008
- validate: function (node) { return assertNumberOfParams(2, node); },
985
+ paramCount: 2,
1009
986
  },
1010
987
  '>>': {
1011
988
  evaluate: function (_a, sourceCodeInfo) {
@@ -1014,7 +991,7 @@ var bitwiseNormalExpression = {
1014
991
  assertNumber(count, sourceCodeInfo, { integer: true, nonNegative: true });
1015
992
  return num >> count;
1016
993
  },
1017
- validate: function (node) { return assertNumberOfParams(2, node); },
994
+ paramCount: 2,
1018
995
  },
1019
996
  '>>>': {
1020
997
  evaluate: function (_a, sourceCodeInfo) {
@@ -1023,7 +1000,7 @@ var bitwiseNormalExpression = {
1023
1000
  assertNumber(count, sourceCodeInfo, { integer: true, nonNegative: true });
1024
1001
  return num >>> count;
1025
1002
  },
1026
- validate: function (node) { return assertNumberOfParams(2, node); },
1003
+ paramCount: 2,
1027
1004
  },
1028
1005
  '~': {
1029
1006
  evaluate: function (_a, sourceCodeInfo) {
@@ -1031,7 +1008,7 @@ var bitwiseNormalExpression = {
1031
1008
  assertNumber(num, sourceCodeInfo, { integer: true });
1032
1009
  return ~num;
1033
1010
  },
1034
- validate: function (node) { return assertNumberOfParams(1, node); },
1011
+ paramCount: 1,
1035
1012
  },
1036
1013
  '&': {
1037
1014
  evaluate: function (_a, sourceCodeInfo) {
@@ -1042,7 +1019,7 @@ var bitwiseNormalExpression = {
1042
1019
  return result & value;
1043
1020
  }, first);
1044
1021
  },
1045
- validate: function (node) { return assertNumberOfParams({ min: 2 }, node); },
1022
+ paramCount: { min: 2 },
1046
1023
  },
1047
1024
  '&!': {
1048
1025
  evaluate: function (_a, sourceCodeInfo) {
@@ -1053,7 +1030,7 @@ var bitwiseNormalExpression = {
1053
1030
  return result & ~value;
1054
1031
  }, first);
1055
1032
  },
1056
- validate: function (node) { return assertNumberOfParams({ min: 2 }, node); },
1033
+ paramCount: { min: 2 },
1057
1034
  },
1058
1035
  '|': {
1059
1036
  evaluate: function (_a, sourceCodeInfo) {
@@ -1064,7 +1041,7 @@ var bitwiseNormalExpression = {
1064
1041
  return result | value;
1065
1042
  }, first);
1066
1043
  },
1067
- validate: function (node) { return assertNumberOfParams({ min: 2 }, node); },
1044
+ paramCount: { min: 2 },
1068
1045
  },
1069
1046
  '^': {
1070
1047
  evaluate: function (_a, sourceCodeInfo) {
@@ -1075,7 +1052,7 @@ var bitwiseNormalExpression = {
1075
1052
  return result ^ value;
1076
1053
  }, first);
1077
1054
  },
1078
- validate: function (node) { return assertNumberOfParams({ min: 2 }, node); },
1055
+ paramCount: { min: 2 },
1079
1056
  },
1080
1057
  'bit_flip': {
1081
1058
  evaluate: function (_a, sourceCodeInfo) {
@@ -1085,7 +1062,7 @@ var bitwiseNormalExpression = {
1085
1062
  var mask = 1 << index;
1086
1063
  return (num ^= mask);
1087
1064
  },
1088
- validate: function (node) { return assertNumberOfParams(2, node); },
1065
+ paramCount: 2,
1089
1066
  },
1090
1067
  'bit_set': {
1091
1068
  evaluate: function (_a, sourceCodeInfo) {
@@ -1095,7 +1072,7 @@ var bitwiseNormalExpression = {
1095
1072
  var mask = 1 << index;
1096
1073
  return (num |= mask);
1097
1074
  },
1098
- validate: function (node) { return assertNumberOfParams(2, node); },
1075
+ paramCount: 2,
1099
1076
  },
1100
1077
  'bit_clear': {
1101
1078
  evaluate: function (_a, sourceCodeInfo) {
@@ -1105,7 +1082,7 @@ var bitwiseNormalExpression = {
1105
1082
  var mask = 1 << index;
1106
1083
  return (num &= ~mask);
1107
1084
  },
1108
- validate: function (node) { return assertNumberOfParams(2, node); },
1085
+ paramCount: 2,
1109
1086
  },
1110
1087
  'bit_test': {
1111
1088
  evaluate: function (_a, sourceCodeInfo) {
@@ -1115,7 +1092,7 @@ var bitwiseNormalExpression = {
1115
1092
  var mask = 1 << index;
1116
1093
  return !!(num & mask);
1117
1094
  },
1118
- validate: function (node) { return assertNumberOfParams(2, node); },
1095
+ paramCount: 2,
1119
1096
  },
1120
1097
  };
1121
1098
 
@@ -1486,7 +1463,7 @@ var collectionNormalExpression = {
1486
1463
  var result = get(coll, key);
1487
1464
  return result === undefined ? defaultValue : result;
1488
1465
  },
1489
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
1466
+ paramCount: { min: 2, max: 3 },
1490
1467
  },
1491
1468
  'get_in': {
1492
1469
  evaluate: function (params, sourceCodeInfo) {
@@ -1521,7 +1498,7 @@ var collectionNormalExpression = {
1521
1498
  }
1522
1499
  return coll;
1523
1500
  },
1524
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
1501
+ paramCount: { min: 2, max: 3 },
1525
1502
  },
1526
1503
  'count': {
1527
1504
  evaluate: function (_a, sourceCodeInfo) {
@@ -1535,7 +1512,7 @@ var collectionNormalExpression = {
1535
1512
  return coll.length;
1536
1513
  return Object.keys(coll).length;
1537
1514
  },
1538
- validate: function (node) { return assertNumberOfParams(1, node); },
1515
+ paramCount: 1,
1539
1516
  },
1540
1517
  'contains?': {
1541
1518
  evaluate: function (_a, sourceCodeInfo) {
@@ -1552,7 +1529,7 @@ var collectionNormalExpression = {
1552
1529
  }
1553
1530
  return !!Object.getOwnPropertyDescriptor(coll, key);
1554
1531
  },
1555
- validate: function (node) { return assertNumberOfParams(2, node); },
1532
+ paramCount: 2,
1556
1533
  },
1557
1534
  'has?': {
1558
1535
  evaluate: function (_a, sourceCodeInfo) {
@@ -1573,7 +1550,7 @@ var collectionNormalExpression = {
1573
1550
  }
1574
1551
  return Object.values(coll).includes(value);
1575
1552
  },
1576
- validate: function (node) { return assertNumberOfParams(2, node); },
1553
+ paramCount: 2,
1577
1554
  },
1578
1555
  'has_some?': {
1579
1556
  evaluate: function (_a, sourceCodeInfo) {
@@ -1633,7 +1610,7 @@ var collectionNormalExpression = {
1633
1610
  }
1634
1611
  return false;
1635
1612
  },
1636
- validate: function (node) { return assertNumberOfParams(2, node); },
1613
+ paramCount: 2,
1637
1614
  },
1638
1615
  'has_every?': {
1639
1616
  evaluate: function (_a, sourceCodeInfo) {
@@ -1695,7 +1672,7 @@ var collectionNormalExpression = {
1695
1672
  }
1696
1673
  return true;
1697
1674
  },
1698
- validate: function (node) { return assertNumberOfParams(2, node); },
1675
+ paramCount: 2,
1699
1676
  },
1700
1677
  'assoc': {
1701
1678
  evaluate: function (_a, sourceCodeInfo) {
@@ -1705,7 +1682,7 @@ var collectionNormalExpression = {
1705
1682
  assertAny(value, sourceCodeInfo);
1706
1683
  return assoc(coll, key, value, sourceCodeInfo);
1707
1684
  },
1708
- validate: function (node) { return assertNumberOfParams(3, node); },
1685
+ paramCount: 3,
1709
1686
  },
1710
1687
  'assoc_in': {
1711
1688
  evaluate: function (_a, sourceCodeInfo) {
@@ -1730,7 +1707,7 @@ var collectionNormalExpression = {
1730
1707
  }
1731
1708
  return coll;
1732
1709
  },
1733
- validate: function (node) { return assertNumberOfParams(3, node); },
1710
+ paramCount: 3,
1734
1711
  },
1735
1712
  'update': {
1736
1713
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -1741,7 +1718,7 @@ var collectionNormalExpression = {
1741
1718
  assertLitsFunction(fn, sourceCodeInfo);
1742
1719
  return update(coll, key, fn, params, contextStack, executeFunction, sourceCodeInfo);
1743
1720
  },
1744
- validate: function (node) { return assertNumberOfParams({ min: 3 }, node); },
1721
+ paramCount: { min: 3 },
1745
1722
  },
1746
1723
  'update_in': {
1747
1724
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -1767,7 +1744,7 @@ var collectionNormalExpression = {
1767
1744
  }
1768
1745
  return coll;
1769
1746
  },
1770
- validate: function (node) { return assertNumberOfParams({ min: 3 }, node); },
1747
+ paramCount: { min: 3 },
1771
1748
  },
1772
1749
  'concat': {
1773
1750
  evaluate: function (params, sourceCodeInfo) {
@@ -1791,7 +1768,7 @@ var collectionNormalExpression = {
1791
1768
  }, {});
1792
1769
  }
1793
1770
  },
1794
- validate: function (node) { return assertNumberOfParams({ min: 1 }, node); },
1771
+ paramCount: { min: 1 },
1795
1772
  },
1796
1773
  'not_empty': {
1797
1774
  evaluate: function (_a, sourceCodeInfo) {
@@ -1805,7 +1782,7 @@ var collectionNormalExpression = {
1805
1782
  return coll.length > 0 ? coll : null;
1806
1783
  return Object.keys(coll).length > 0 ? coll : null;
1807
1784
  },
1808
- validate: function (node) { return assertNumberOfParams(1, node); },
1785
+ paramCount: 1,
1809
1786
  },
1810
1787
  'every?': {
1811
1788
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -1819,7 +1796,7 @@ var collectionNormalExpression = {
1819
1796
  return coll.split('').every(function (elem) { return executeFunction(fn, [elem], contextStack, sourceCodeInfo); });
1820
1797
  return Object.entries(coll).every(function (elem) { return executeFunction(fn, [elem], contextStack, sourceCodeInfo); });
1821
1798
  },
1822
- validate: function (node) { return assertNumberOfParams(2, node); },
1799
+ paramCount: 2,
1823
1800
  },
1824
1801
  'any?': {
1825
1802
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -1833,7 +1810,7 @@ var collectionNormalExpression = {
1833
1810
  return coll.split('').some(function (elem) { return executeFunction(fn, [elem], contextStack, sourceCodeInfo); });
1834
1811
  return Object.entries(coll).some(function (elem) { return executeFunction(fn, [elem], contextStack, sourceCodeInfo); });
1835
1812
  },
1836
- validate: function (node) { return assertNumberOfParams(2, node); },
1813
+ paramCount: 2,
1837
1814
  },
1838
1815
  'not_any?': {
1839
1816
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -1847,7 +1824,7 @@ var collectionNormalExpression = {
1847
1824
  return !coll.split('').some(function (elem) { return executeFunction(fn, [elem], contextStack, sourceCodeInfo); });
1848
1825
  return !Object.entries(coll).some(function (elem) { return executeFunction(fn, [elem], contextStack, sourceCodeInfo); });
1849
1826
  },
1850
- validate: function (node) { return assertNumberOfParams(2, node); },
1827
+ paramCount: 2,
1851
1828
  },
1852
1829
  'not_every?': {
1853
1830
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -1861,13 +1838,14 @@ var collectionNormalExpression = {
1861
1838
  return !coll.split('').every(function (elem) { return executeFunction(fn, [elem], contextStack, sourceCodeInfo); });
1862
1839
  return !Object.entries(coll).every(function (elem) { return executeFunction(fn, [elem], contextStack, sourceCodeInfo); });
1863
1840
  },
1864
- validate: function (node) { return assertNumberOfParams(2, node); },
1841
+ paramCount: 2,
1865
1842
  },
1866
1843
  };
1867
1844
 
1868
1845
  var arrayNormalExpression = {
1869
1846
  array: {
1870
1847
  evaluate: function (params) { return params; },
1848
+ paramCount: {},
1871
1849
  },
1872
1850
  range: {
1873
1851
  evaluate: function (params, sourceCodeInfo) {
@@ -1905,7 +1883,7 @@ var arrayNormalExpression = {
1905
1883
  result.push(i);
1906
1884
  return result;
1907
1885
  },
1908
- validate: function (node) { return assertNumberOfParams({ min: 1, max: 3 }, node); },
1886
+ paramCount: { min: 1, max: 3 },
1909
1887
  },
1910
1888
  repeat: {
1911
1889
  evaluate: function (_a, sourceCodeInfo) {
@@ -1916,7 +1894,7 @@ var arrayNormalExpression = {
1916
1894
  result.push(value);
1917
1895
  return result;
1918
1896
  },
1919
- validate: function (node) { return assertNumberOfParams(2, node); },
1897
+ paramCount: 2,
1920
1898
  },
1921
1899
  flatten: {
1922
1900
  evaluate: function (_a) {
@@ -1925,7 +1903,7 @@ var arrayNormalExpression = {
1925
1903
  return [];
1926
1904
  return seq.flat(Number.POSITIVE_INFINITY);
1927
1905
  },
1928
- validate: function (node) { return assertNumberOfParams(1, node); },
1906
+ paramCount: 1,
1929
1907
  },
1930
1908
  mapcat: {
1931
1909
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -1935,7 +1913,7 @@ var arrayNormalExpression = {
1935
1913
  assertLitsFunction(fn, sourceCodeInfo);
1936
1914
  return arr.map(function (elem) { return executeFunction(fn, [elem], contextStack, sourceCodeInfo); }).flat(1);
1937
1915
  },
1938
- validate: function (node) { return assertNumberOfParams(2, node); },
1916
+ paramCount: 2,
1939
1917
  },
1940
1918
  };
1941
1919
 
@@ -1950,7 +1928,7 @@ var sequenceNormalExpression = {
1950
1928
  assertSeq(seq, sourceCodeInfo);
1951
1929
  return i >= 0 && i < seq.length ? toAny(seq[i]) : defaultValue;
1952
1930
  },
1953
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
1931
+ paramCount: { min: 2, max: 3 },
1954
1932
  },
1955
1933
  'filter': {
1956
1934
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -1965,7 +1943,7 @@ var sequenceNormalExpression = {
1965
1943
  .filter(function (elem) { return executeFunction(fn, [elem], contextStack, sourceCodeInfo); })
1966
1944
  .join('');
1967
1945
  },
1968
- validate: function (node) { return assertNumberOfParams(2, node); },
1946
+ paramCount: 2,
1969
1947
  },
1970
1948
  'first': {
1971
1949
  evaluate: function (_a, sourceCodeInfo) {
@@ -1975,7 +1953,7 @@ var sequenceNormalExpression = {
1975
1953
  assertSeq(array, sourceCodeInfo);
1976
1954
  return toAny(array[0]);
1977
1955
  },
1978
- validate: function (node) { return assertNumberOfParams(1, node); },
1956
+ paramCount: 1,
1979
1957
  },
1980
1958
  'last': {
1981
1959
  evaluate: function (_a, sourceCodeInfo) {
@@ -1985,7 +1963,7 @@ var sequenceNormalExpression = {
1985
1963
  assertSeq(array, sourceCodeInfo);
1986
1964
  return toAny(array[array.length - 1]);
1987
1965
  },
1988
- validate: function (node) { return assertNumberOfParams(1, node); },
1966
+ paramCount: 1,
1989
1967
  },
1990
1968
  'map': {
1991
1969
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -2007,7 +1985,7 @@ var sequenceNormalExpression = {
2007
1985
  .join('');
2008
1986
  }
2009
1987
  },
2010
- validate: function (node) { return assertNumberOfParams(2, node); },
1988
+ paramCount: 2,
2011
1989
  },
2012
1990
  'pop': {
2013
1991
  evaluate: function (_a, sourceCodeInfo) {
@@ -2018,7 +1996,7 @@ var sequenceNormalExpression = {
2018
1996
  }
2019
1997
  return seq.slice(0, seq.length - 1);
2020
1998
  },
2021
- validate: function (node) { return assertNumberOfParams(1, node); },
1999
+ paramCount: 1,
2022
2000
  },
2023
2001
  'position': {
2024
2002
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -2037,7 +2015,7 @@ var sequenceNormalExpression = {
2037
2015
  return index !== -1 ? index : null;
2038
2016
  }
2039
2017
  },
2040
- validate: function (node) { return assertNumberOfParams(2, node); },
2018
+ paramCount: 2,
2041
2019
  },
2042
2020
  'index_of': {
2043
2021
  evaluate: function (_a, sourceCodeInfo) {
@@ -2056,7 +2034,7 @@ var sequenceNormalExpression = {
2056
2034
  return index !== -1 ? index : null;
2057
2035
  }
2058
2036
  },
2059
- validate: function (node) { return assertNumberOfParams(2, node); },
2037
+ paramCount: 2,
2060
2038
  },
2061
2039
  'last_index_of': {
2062
2040
  evaluate: function (_a, sourceCodeInfo) {
@@ -2075,7 +2053,7 @@ var sequenceNormalExpression = {
2075
2053
  return index !== -1 ? index : null;
2076
2054
  }
2077
2055
  },
2078
- validate: function (node) { return assertNumberOfParams(2, node); },
2056
+ paramCount: 2,
2079
2057
  },
2080
2058
  'push': {
2081
2059
  evaluate: function (_a, sourceCodeInfo) {
@@ -2089,7 +2067,7 @@ var sequenceNormalExpression = {
2089
2067
  return __spreadArray(__spreadArray([], __read(seq), false), __read(values), false);
2090
2068
  }
2091
2069
  },
2092
- validate: function (node) { return assertNumberOfParams({ min: 2 }, node); },
2070
+ paramCount: { min: 2 },
2093
2071
  },
2094
2072
  'reductions': {
2095
2073
  evaluate: function (params, sourceCodeInfo, contextStack, _a) {
@@ -2150,7 +2128,7 @@ var sequenceNormalExpression = {
2150
2128
  }
2151
2129
  }
2152
2130
  },
2153
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
2131
+ paramCount: { min: 2, max: 3 },
2154
2132
  },
2155
2133
  'reduce': {
2156
2134
  evaluate: function (params, sourceCodeInfo, contextStack, _a) {
@@ -2197,7 +2175,7 @@ var sequenceNormalExpression = {
2197
2175
  }
2198
2176
  }
2199
2177
  },
2200
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
2178
+ paramCount: { min: 2, max: 3 },
2201
2179
  },
2202
2180
  'reduce_right': {
2203
2181
  evaluate: function (params, sourceCodeInfo, contextStack, _a) {
@@ -2245,7 +2223,7 @@ var sequenceNormalExpression = {
2245
2223
  }
2246
2224
  }
2247
2225
  },
2248
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
2226
+ paramCount: { min: 2, max: 3 },
2249
2227
  },
2250
2228
  'rest': {
2251
2229
  evaluate: function (_a, sourceCodeInfo) {
@@ -2258,7 +2236,7 @@ var sequenceNormalExpression = {
2258
2236
  }
2259
2237
  return seq.substring(1);
2260
2238
  },
2261
- validate: function (node) { return assertNumberOfParams(1, node); },
2239
+ paramCount: 1,
2262
2240
  },
2263
2241
  'nthrest': {
2264
2242
  evaluate: function (_a, sourceCodeInfo) {
@@ -2270,7 +2248,7 @@ var sequenceNormalExpression = {
2270
2248
  return seq.slice(integerCount);
2271
2249
  return seq.substring(integerCount);
2272
2250
  },
2273
- validate: function (node) { return assertNumberOfParams(2, node); },
2251
+ paramCount: 2,
2274
2252
  },
2275
2253
  'next': {
2276
2254
  evaluate: function (_a, sourceCodeInfo) {
@@ -2285,7 +2263,7 @@ var sequenceNormalExpression = {
2285
2263
  return null;
2286
2264
  return seq.substring(1);
2287
2265
  },
2288
- validate: function (node) { return assertNumberOfParams(1, node); },
2266
+ paramCount: 1,
2289
2267
  },
2290
2268
  'nthnext': {
2291
2269
  evaluate: function (_a, sourceCodeInfo) {
@@ -2299,7 +2277,7 @@ var sequenceNormalExpression = {
2299
2277
  return seq.slice(integerCount);
2300
2278
  return seq.substring(integerCount);
2301
2279
  },
2302
- validate: function (node) { return assertNumberOfParams(2, node); },
2280
+ paramCount: 2,
2303
2281
  },
2304
2282
  'reverse': {
2305
2283
  evaluate: function (_a, sourceCodeInfo) {
@@ -2311,7 +2289,7 @@ var sequenceNormalExpression = {
2311
2289
  return __spreadArray([], __read(seq), false).reverse();
2312
2290
  return seq.split('').reverse().join('');
2313
2291
  },
2314
- validate: function (node) { return assertNumberOfParams(1, node); },
2292
+ paramCount: 1,
2315
2293
  },
2316
2294
  'second': {
2317
2295
  evaluate: function (_a, sourceCodeInfo) {
@@ -2321,7 +2299,7 @@ var sequenceNormalExpression = {
2321
2299
  assertSeq(seq, sourceCodeInfo);
2322
2300
  return toAny(seq[1]);
2323
2301
  },
2324
- validate: function (node) { return assertNumberOfParams(1, node); },
2302
+ paramCount: 1,
2325
2303
  },
2326
2304
  'shift': {
2327
2305
  evaluate: function (_a, sourceCodeInfo) {
@@ -2333,7 +2311,7 @@ var sequenceNormalExpression = {
2333
2311
  copy.shift();
2334
2312
  return copy;
2335
2313
  },
2336
- validate: function (node) { return assertNumberOfParams(1, node); },
2314
+ paramCount: 1,
2337
2315
  },
2338
2316
  'slice': {
2339
2317
  evaluate: function (params, sourceCodeInfo) {
@@ -2347,7 +2325,7 @@ var sequenceNormalExpression = {
2347
2325
  assertNumber(to, sourceCodeInfo, { integer: true });
2348
2326
  return seq.slice(from, to);
2349
2327
  },
2350
- validate: function (node) { return assertNumberOfParams({ min: 1, max: 3 }, node); },
2328
+ paramCount: { min: 1, max: 3 },
2351
2329
  },
2352
2330
  'some': {
2353
2331
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -2364,7 +2342,7 @@ var sequenceNormalExpression = {
2364
2342
  return (_c = seq.split('').find(function (elem) { return executeFunction(fn, [elem], contextStack, sourceCodeInfo); })) !== null && _c !== void 0 ? _c : null;
2365
2343
  return toAny(seq.find(function (elem) { return executeFunction(fn, [elem], contextStack, sourceCodeInfo); }));
2366
2344
  },
2367
- validate: function (node) { return assertNumberOfParams(2, node); },
2345
+ paramCount: 2,
2368
2346
  },
2369
2347
  'sort': {
2370
2348
  evaluate: function (params, sourceCodeInfo, contextStack, _a) {
@@ -2402,7 +2380,7 @@ var sequenceNormalExpression = {
2402
2380
  }
2403
2381
  return result;
2404
2382
  },
2405
- validate: function (node) { return assertNumberOfParams({ min: 1, max: 2 }, node); },
2383
+ paramCount: { min: 1, max: 2 },
2406
2384
  },
2407
2385
  'sort_by': {
2408
2386
  evaluate: function (params, sourceCodeInfo, contextStack, _a) {
@@ -2453,7 +2431,7 @@ var sequenceNormalExpression = {
2453
2431
  }
2454
2432
  return result;
2455
2433
  },
2456
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
2434
+ paramCount: { min: 2, max: 3 },
2457
2435
  },
2458
2436
  'take': {
2459
2437
  evaluate: function (_a, sourceCodeInfo) {
@@ -2463,7 +2441,7 @@ var sequenceNormalExpression = {
2463
2441
  var num = Math.max(Math.ceil(n), 0);
2464
2442
  return input.slice(0, num);
2465
2443
  },
2466
- validate: function (node) { return assertNumberOfParams(2, node); },
2444
+ paramCount: 2,
2467
2445
  },
2468
2446
  'take_last': {
2469
2447
  evaluate: function (_a, sourceCodeInfo) {
@@ -2474,7 +2452,7 @@ var sequenceNormalExpression = {
2474
2452
  var from = array.length - num;
2475
2453
  return array.slice(from);
2476
2454
  },
2477
- validate: function (node) { return assertNumberOfParams(2, node); },
2455
+ paramCount: 2,
2478
2456
  },
2479
2457
  'take_while': {
2480
2458
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -2502,7 +2480,7 @@ var sequenceNormalExpression = {
2502
2480
  }
2503
2481
  return typeof seq === 'string' ? result.join('') : result;
2504
2482
  },
2505
- validate: function (node) { return assertNumberOfParams(2, node); },
2483
+ paramCount: 2,
2506
2484
  },
2507
2485
  'drop': {
2508
2486
  evaluate: function (_a, sourceCodeInfo) {
@@ -2512,7 +2490,7 @@ var sequenceNormalExpression = {
2512
2490
  assertSeq(input, sourceCodeInfo);
2513
2491
  return input.slice(num);
2514
2492
  },
2515
- validate: function (node) { return assertNumberOfParams(2, node); },
2493
+ paramCount: 2,
2516
2494
  },
2517
2495
  'drop_last': {
2518
2496
  evaluate: function (_a, sourceCodeInfo) {
@@ -2523,7 +2501,7 @@ var sequenceNormalExpression = {
2523
2501
  var from = array.length - num;
2524
2502
  return array.slice(0, from);
2525
2503
  },
2526
- validate: function (node) { return assertNumberOfParams(2, node); },
2504
+ paramCount: 2,
2527
2505
  },
2528
2506
  'drop_while': {
2529
2507
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -2539,7 +2517,7 @@ var sequenceNormalExpression = {
2539
2517
  var from = charArray.findIndex(function (elem) { return !executeFunction(fn, [elem], contextStack, sourceCodeInfo); });
2540
2518
  return charArray.slice(from).join('');
2541
2519
  },
2542
- validate: function (node) { return assertNumberOfParams(2, node); },
2520
+ paramCount: 2,
2543
2521
  },
2544
2522
  'unshift': {
2545
2523
  evaluate: function (_a, sourceCodeInfo) {
@@ -2553,7 +2531,7 @@ var sequenceNormalExpression = {
2553
2531
  copy.unshift.apply(copy, __spreadArray([], __read(values), false));
2554
2532
  return copy;
2555
2533
  },
2556
- validate: function (node) { return assertNumberOfParams({ min: 2 }, node); },
2534
+ paramCount: { min: 2 },
2557
2535
  },
2558
2536
  'distinct': {
2559
2537
  evaluate: function (_a, sourceCodeInfo) {
@@ -2563,7 +2541,7 @@ var sequenceNormalExpression = {
2563
2541
  return Array.from(new Set(input));
2564
2542
  return Array.from(new Set(input.split(''))).join('');
2565
2543
  },
2566
- validate: function (node) { return assertNumberOfParams(1, node); },
2544
+ paramCount: 1,
2567
2545
  },
2568
2546
  'remove': {
2569
2547
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -2578,7 +2556,7 @@ var sequenceNormalExpression = {
2578
2556
  .filter(function (elem) { return !executeFunction(fn, [elem], contextStack, sourceCodeInfo); })
2579
2557
  .join('');
2580
2558
  },
2581
- validate: function (node) { return assertNumberOfParams(2, node); },
2559
+ paramCount: 2,
2582
2560
  },
2583
2561
  'remove_at': {
2584
2562
  evaluate: function (_a, sourceCodeInfo) {
@@ -2595,7 +2573,7 @@ var sequenceNormalExpression = {
2595
2573
  }
2596
2574
  return "".concat(input.substring(0, index)).concat(input.substring(index + 1));
2597
2575
  },
2598
- validate: function (node) { return assertNumberOfParams(2, node); },
2576
+ paramCount: 2,
2599
2577
  },
2600
2578
  'split_at': {
2601
2579
  evaluate: function (_a, sourceCodeInfo) {
@@ -2605,7 +2583,7 @@ var sequenceNormalExpression = {
2605
2583
  assertSeq(seq, sourceCodeInfo);
2606
2584
  return [seq.slice(0, intPos), seq.slice(intPos)];
2607
2585
  },
2608
- validate: function (node) { return assertNumberOfParams(2, node); },
2586
+ paramCount: 2,
2609
2587
  },
2610
2588
  'split_with': {
2611
2589
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -2620,7 +2598,7 @@ var sequenceNormalExpression = {
2620
2598
  return [seq, seqIsArray ? [] : ''];
2621
2599
  return [seq.slice(0, index), seq.slice(index)];
2622
2600
  },
2623
- validate: function (node) { return assertNumberOfParams(2, node); },
2601
+ paramCount: 2,
2624
2602
  },
2625
2603
  'frequencies': {
2626
2604
  evaluate: function (_a, sourceCodeInfo) {
@@ -2636,7 +2614,7 @@ var sequenceNormalExpression = {
2636
2614
  return result;
2637
2615
  }, {});
2638
2616
  },
2639
- validate: function (node) { return assertNumberOfParams(1, node); },
2617
+ paramCount: 1,
2640
2618
  },
2641
2619
  'group_by': {
2642
2620
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -2654,7 +2632,7 @@ var sequenceNormalExpression = {
2654
2632
  return result;
2655
2633
  }, {});
2656
2634
  },
2657
- validate: function (node) { return assertNumberOfParams(2, node); },
2635
+ paramCount: 2,
2658
2636
  },
2659
2637
  'partition': {
2660
2638
  evaluate: function (params, sourceCodeInfo) {
@@ -2666,7 +2644,7 @@ var sequenceNormalExpression = {
2666
2644
  : undefined;
2667
2645
  return partition(n, step, seq, pad, sourceCodeInfo);
2668
2646
  },
2669
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 4 }, node); },
2647
+ paramCount: { min: 2, max: 4 },
2670
2648
  },
2671
2649
  'partition_all': {
2672
2650
  evaluate: function (params, sourceCodeInfo) {
@@ -2675,7 +2653,7 @@ var sequenceNormalExpression = {
2675
2653
  var step = params.length === 3 ? toNonNegativeInteger(asNumber(params[2], sourceCodeInfo)) : n;
2676
2654
  return partition(n, step, seq, [], sourceCodeInfo);
2677
2655
  },
2678
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
2656
+ paramCount: { min: 2, max: 3 },
2679
2657
  },
2680
2658
  'partition_by': {
2681
2659
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -2696,7 +2674,7 @@ var sequenceNormalExpression = {
2696
2674
  }, []);
2697
2675
  return isStringSeq ? result.map(function (elem) { return elem.join(''); }) : result;
2698
2676
  },
2699
- validate: function (node) { return assertNumberOfParams(2, node); },
2677
+ paramCount: 2,
2700
2678
  },
2701
2679
  'ends_with?': {
2702
2680
  evaluate: function (_a, sourceCodeInfo) {
@@ -2708,7 +2686,7 @@ var sequenceNormalExpression = {
2708
2686
  }
2709
2687
  return str.at(-1) === search;
2710
2688
  },
2711
- validate: function (node) { return assertNumberOfParams(2, node); },
2689
+ paramCount: 2,
2712
2690
  },
2713
2691
  'starts_with?': {
2714
2692
  evaluate: function (_a, sourceCodeInfo) {
@@ -2720,7 +2698,7 @@ var sequenceNormalExpression = {
2720
2698
  }
2721
2699
  return str[0] === search;
2722
2700
  },
2723
- validate: function (node) { return assertNumberOfParams(2, node); },
2701
+ paramCount: 2,
2724
2702
  },
2725
2703
  'interleave': {
2726
2704
  evaluate: function (_a, sourceCodeInfo) {
@@ -2758,7 +2736,7 @@ var sequenceNormalExpression = {
2758
2736
  }
2759
2737
  return isStringSeq ? result.join('') : result;
2760
2738
  },
2761
- validate: function (node) { return assertNumberOfParams({ min: 1 }, node); },
2739
+ paramCount: { min: 1 },
2762
2740
  },
2763
2741
  'interpose': {
2764
2742
  evaluate: function (_a, sourceCodeInfo) {
@@ -2777,7 +2755,7 @@ var sequenceNormalExpression = {
2777
2755
  result.push(seq[seq.length - 1]);
2778
2756
  return result;
2779
2757
  },
2780
- validate: function (node) { return assertNumberOfParams(2, node); },
2758
+ paramCount: 2,
2781
2759
  },
2782
2760
  };
2783
2761
  function partition(n, step, seq, pad, sourceCodeInfo) {
@@ -2815,7 +2793,7 @@ var mathNormalExpression = {
2815
2793
  assertNumber(first, sourceCodeInfo);
2816
2794
  return first + 1;
2817
2795
  },
2818
- validate: function (node) { return assertNumberOfParams(1, node); },
2796
+ paramCount: 1,
2819
2797
  },
2820
2798
  'dec': {
2821
2799
  evaluate: function (_a, sourceCodeInfo) {
@@ -2823,7 +2801,7 @@ var mathNormalExpression = {
2823
2801
  assertNumber(first, sourceCodeInfo);
2824
2802
  return first - 1;
2825
2803
  },
2826
- validate: function (node) { return assertNumberOfParams(1, node); },
2804
+ paramCount: 1,
2827
2805
  },
2828
2806
  '+': {
2829
2807
  evaluate: function (params, sourceCodeInfo) {
@@ -2832,6 +2810,7 @@ var mathNormalExpression = {
2832
2810
  return result + param;
2833
2811
  }, 0);
2834
2812
  },
2813
+ paramCount: {},
2835
2814
  },
2836
2815
  '*': {
2837
2816
  evaluate: function (params, sourceCodeInfo) {
@@ -2840,6 +2819,7 @@ var mathNormalExpression = {
2840
2819
  return result * param;
2841
2820
  }, 1);
2842
2821
  },
2822
+ paramCount: {},
2843
2823
  },
2844
2824
  '/': {
2845
2825
  evaluate: function (params, sourceCodeInfo) {
@@ -2856,6 +2836,7 @@ var mathNormalExpression = {
2856
2836
  return result / param;
2857
2837
  }, first);
2858
2838
  },
2839
+ paramCount: {},
2859
2840
  },
2860
2841
  '-': {
2861
2842
  evaluate: function (params, sourceCodeInfo) {
@@ -2870,6 +2851,7 @@ var mathNormalExpression = {
2870
2851
  return result - param;
2871
2852
  }, first);
2872
2853
  },
2854
+ paramCount: {},
2873
2855
  },
2874
2856
  'quot': {
2875
2857
  evaluate: function (_a, sourceCodeInfo) {
@@ -2879,7 +2861,7 @@ var mathNormalExpression = {
2879
2861
  var quotient = Math.trunc(dividend / divisor);
2880
2862
  return quotient;
2881
2863
  },
2882
- validate: function (node) { return assertNumberOfParams(2, node); },
2864
+ paramCount: 2,
2883
2865
  },
2884
2866
  'mod': {
2885
2867
  evaluate: function (_a, sourceCodeInfo) {
@@ -2889,7 +2871,7 @@ var mathNormalExpression = {
2889
2871
  var quotient = Math.floor(dividend / divisor);
2890
2872
  return dividend - divisor * quotient;
2891
2873
  },
2892
- validate: function (node) { return assertNumberOfParams(2, node); },
2874
+ paramCount: 2,
2893
2875
  },
2894
2876
  '%': {
2895
2877
  evaluate: function (_a, sourceCodeInfo) {
@@ -2899,7 +2881,7 @@ var mathNormalExpression = {
2899
2881
  var quotient = Math.trunc(dividend / divisor);
2900
2882
  return dividend - divisor * quotient;
2901
2883
  },
2902
- validate: function (node) { return assertNumberOfParams(2, node); },
2884
+ paramCount: 2,
2903
2885
  },
2904
2886
  'sqrt': {
2905
2887
  evaluate: function (_a, sourceCodeInfo) {
@@ -2907,7 +2889,7 @@ var mathNormalExpression = {
2907
2889
  assertNumber(first, sourceCodeInfo);
2908
2890
  return Math.sqrt(first);
2909
2891
  },
2910
- validate: function (node) { return assertNumberOfParams(1, node); },
2892
+ paramCount: 1,
2911
2893
  },
2912
2894
  'cbrt': {
2913
2895
  evaluate: function (_a, sourceCodeInfo) {
@@ -2915,7 +2897,7 @@ var mathNormalExpression = {
2915
2897
  assertNumber(first, sourceCodeInfo);
2916
2898
  return Math.cbrt(first);
2917
2899
  },
2918
- validate: function (node) { return assertNumberOfParams(1, node); },
2900
+ paramCount: 1,
2919
2901
  },
2920
2902
  '**': {
2921
2903
  evaluate: function (_a, sourceCodeInfo) {
@@ -2924,7 +2906,7 @@ var mathNormalExpression = {
2924
2906
  assertNumber(second, sourceCodeInfo);
2925
2907
  return Math.pow(first, second);
2926
2908
  },
2927
- validate: function (node) { return assertNumberOfParams(2, node); },
2909
+ paramCount: 2,
2928
2910
  },
2929
2911
  'round': {
2930
2912
  evaluate: function (params, sourceCodeInfo) {
@@ -2936,7 +2918,7 @@ var mathNormalExpression = {
2936
2918
  var factor = Math.pow(10, decimals);
2937
2919
  return Math.round(value * factor) / factor;
2938
2920
  },
2939
- validate: function (node) { return assertNumberOfParams({ min: 1, max: 2 }, node); },
2921
+ paramCount: { min: 1, max: 2 },
2940
2922
  },
2941
2923
  'trunc': {
2942
2924
  evaluate: function (_a, sourceCodeInfo) {
@@ -2944,7 +2926,7 @@ var mathNormalExpression = {
2944
2926
  assertNumber(first, sourceCodeInfo);
2945
2927
  return Math.trunc(first);
2946
2928
  },
2947
- validate: function (node) { return assertNumberOfParams(1, node); },
2929
+ paramCount: 1,
2948
2930
  },
2949
2931
  'floor': {
2950
2932
  evaluate: function (_a, sourceCodeInfo) {
@@ -2952,7 +2934,7 @@ var mathNormalExpression = {
2952
2934
  assertNumber(first, sourceCodeInfo);
2953
2935
  return Math.floor(first);
2954
2936
  },
2955
- validate: function (node) { return assertNumberOfParams(1, node); },
2937
+ paramCount: 1,
2956
2938
  },
2957
2939
  'ceil': {
2958
2940
  evaluate: function (_a, sourceCodeInfo) {
@@ -2960,7 +2942,7 @@ var mathNormalExpression = {
2960
2942
  assertNumber(first, sourceCodeInfo);
2961
2943
  return Math.ceil(first);
2962
2944
  },
2963
- validate: function (node) { return assertNumberOfParams(1, node); },
2945
+ paramCount: 1,
2964
2946
  },
2965
2947
  'min': {
2966
2948
  evaluate: function (_a, sourceCodeInfo) {
@@ -2973,7 +2955,7 @@ var mathNormalExpression = {
2973
2955
  return Math.min(min, value);
2974
2956
  }, first);
2975
2957
  },
2976
- validate: function (node) { return assertNumberOfParams({ min: 1 }, node); },
2958
+ paramCount: { min: 1 },
2977
2959
  },
2978
2960
  'max': {
2979
2961
  evaluate: function (_a, sourceCodeInfo) {
@@ -2986,7 +2968,7 @@ var mathNormalExpression = {
2986
2968
  return Math.max(min, value);
2987
2969
  }, first);
2988
2970
  },
2989
- validate: function (node) { return assertNumberOfParams({ min: 1 }, node); },
2971
+ paramCount: { min: 1 },
2990
2972
  },
2991
2973
  'abs': {
2992
2974
  evaluate: function (_a, sourceCodeInfo) {
@@ -2994,7 +2976,7 @@ var mathNormalExpression = {
2994
2976
  assertNumber(value, sourceCodeInfo);
2995
2977
  return Math.abs(value);
2996
2978
  },
2997
- validate: function (node) { return assertNumberOfParams(1, node); },
2979
+ paramCount: 1,
2998
2980
  },
2999
2981
  'sign': {
3000
2982
  evaluate: function (_a, sourceCodeInfo) {
@@ -3002,67 +2984,67 @@ var mathNormalExpression = {
3002
2984
  assertNumber(value, sourceCodeInfo);
3003
2985
  return Math.sign(value);
3004
2986
  },
3005
- validate: function (node) { return assertNumberOfParams(1, node); },
2987
+ paramCount: 1,
3006
2988
  },
3007
2989
  'max_safe_integer': {
3008
2990
  evaluate: function () {
3009
2991
  return Number.MAX_SAFE_INTEGER;
3010
2992
  },
3011
- validate: function (node) { return assertNumberOfParams(0, node); },
2993
+ paramCount: 0,
3012
2994
  },
3013
2995
  'min_safe_integer': {
3014
2996
  evaluate: function () {
3015
2997
  return Number.MIN_SAFE_INTEGER;
3016
2998
  },
3017
- validate: function (node) { return assertNumberOfParams(0, node); },
2999
+ paramCount: 0,
3018
3000
  },
3019
3001
  'max_value': {
3020
3002
  evaluate: function () {
3021
3003
  return Number.MAX_VALUE;
3022
3004
  },
3023
- validate: function (node) { return assertNumberOfParams(0, node); },
3005
+ paramCount: 0,
3024
3006
  },
3025
3007
  'min_value': {
3026
3008
  evaluate: function () {
3027
3009
  return Number.MIN_VALUE;
3028
3010
  },
3029
- validate: function (node) { return assertNumberOfParams(0, node); },
3011
+ paramCount: 0,
3030
3012
  },
3031
3013
  'epsilon': {
3032
3014
  evaluate: function () {
3033
3015
  return Number.EPSILON;
3034
3016
  },
3035
- validate: function (node) { return assertNumberOfParams(0, node); },
3017
+ paramCount: 0,
3036
3018
  },
3037
3019
  'positive_infinity': {
3038
3020
  evaluate: function () {
3039
3021
  return Number.POSITIVE_INFINITY;
3040
3022
  },
3041
- validate: function (node) { return assertNumberOfParams(0, node); },
3023
+ paramCount: 0,
3042
3024
  },
3043
3025
  'negative_infinity': {
3044
3026
  evaluate: function () {
3045
3027
  return Number.NEGATIVE_INFINITY;
3046
3028
  },
3047
- validate: function (node) { return assertNumberOfParams(0, node); },
3029
+ paramCount: 0,
3048
3030
  },
3049
3031
  'nan': {
3050
3032
  evaluate: function () {
3051
3033
  return Number.NaN;
3052
3034
  },
3053
- validate: function (node) { return assertNumberOfParams(0, node); },
3035
+ paramCount: 0,
3054
3036
  },
3055
3037
  'e': {
3056
3038
  evaluate: function () {
3057
3039
  return Math.E;
3058
3040
  },
3059
- validate: function (node) { return assertNumberOfParams(0, node); },
3041
+ paramCount: 0,
3060
3042
  },
3061
3043
  'pi': {
3062
3044
  evaluate: function () {
3063
3045
  return Math.PI;
3064
3046
  },
3065
- validate: function (node) { return assertNumberOfParams(0, node); },
3047
+ paramCount: 0,
3066
3048
  },
3067
3049
  'exp': {
3068
3050
  evaluate: function (_a, sourceCodeInfo) {
@@ -3070,7 +3052,7 @@ var mathNormalExpression = {
3070
3052
  assertNumber(value, sourceCodeInfo);
3071
3053
  return Math.exp(value);
3072
3054
  },
3073
- validate: function (node) { return assertNumberOfParams(1, node); },
3055
+ paramCount: 1,
3074
3056
  },
3075
3057
  'log': {
3076
3058
  evaluate: function (_a, sourceCodeInfo) {
@@ -3078,7 +3060,7 @@ var mathNormalExpression = {
3078
3060
  assertNumber(value, sourceCodeInfo);
3079
3061
  return Math.log(value);
3080
3062
  },
3081
- validate: function (node) { return assertNumberOfParams(1, node); },
3063
+ paramCount: 1,
3082
3064
  },
3083
3065
  'log2': {
3084
3066
  evaluate: function (_a, sourceCodeInfo) {
@@ -3086,7 +3068,7 @@ var mathNormalExpression = {
3086
3068
  assertNumber(value, sourceCodeInfo);
3087
3069
  return Math.log2(value);
3088
3070
  },
3089
- validate: function (node) { return assertNumberOfParams(1, node); },
3071
+ paramCount: 1,
3090
3072
  },
3091
3073
  'log10': {
3092
3074
  evaluate: function (_a, sourceCodeInfo) {
@@ -3094,7 +3076,7 @@ var mathNormalExpression = {
3094
3076
  assertNumber(value, sourceCodeInfo);
3095
3077
  return Math.log10(value);
3096
3078
  },
3097
- validate: function (node) { return assertNumberOfParams(1, node); },
3079
+ paramCount: 1,
3098
3080
  },
3099
3081
  'sin': {
3100
3082
  evaluate: function (_a, sourceCodeInfo) {
@@ -3102,7 +3084,7 @@ var mathNormalExpression = {
3102
3084
  assertNumber(value, sourceCodeInfo);
3103
3085
  return Math.sin(value);
3104
3086
  },
3105
- validate: function (node) { return assertNumberOfParams(1, node); },
3087
+ paramCount: 1,
3106
3088
  },
3107
3089
  'asin': {
3108
3090
  evaluate: function (_a, sourceCodeInfo) {
@@ -3110,7 +3092,7 @@ var mathNormalExpression = {
3110
3092
  assertNumber(value, sourceCodeInfo);
3111
3093
  return Math.asin(value);
3112
3094
  },
3113
- validate: function (node) { return assertNumberOfParams(1, node); },
3095
+ paramCount: 1,
3114
3096
  },
3115
3097
  'sinh': {
3116
3098
  evaluate: function (_a, sourceCodeInfo) {
@@ -3118,7 +3100,7 @@ var mathNormalExpression = {
3118
3100
  assertNumber(value, sourceCodeInfo);
3119
3101
  return Math.sinh(value);
3120
3102
  },
3121
- validate: function (node) { return assertNumberOfParams(1, node); },
3103
+ paramCount: 1,
3122
3104
  },
3123
3105
  'asinh': {
3124
3106
  evaluate: function (_a, sourceCodeInfo) {
@@ -3126,7 +3108,7 @@ var mathNormalExpression = {
3126
3108
  assertNumber(value, sourceCodeInfo);
3127
3109
  return Math.asinh(value);
3128
3110
  },
3129
- validate: function (node) { return assertNumberOfParams(1, node); },
3111
+ paramCount: 1,
3130
3112
  },
3131
3113
  'cos': {
3132
3114
  evaluate: function (_a, sourceCodeInfo) {
@@ -3134,7 +3116,7 @@ var mathNormalExpression = {
3134
3116
  assertNumber(value, sourceCodeInfo);
3135
3117
  return Math.cos(value);
3136
3118
  },
3137
- validate: function (node) { return assertNumberOfParams(1, node); },
3119
+ paramCount: 1,
3138
3120
  },
3139
3121
  'acos': {
3140
3122
  evaluate: function (_a, sourceCodeInfo) {
@@ -3142,7 +3124,7 @@ var mathNormalExpression = {
3142
3124
  assertNumber(value, sourceCodeInfo);
3143
3125
  return Math.acos(value);
3144
3126
  },
3145
- validate: function (node) { return assertNumberOfParams(1, node); },
3127
+ paramCount: 1,
3146
3128
  },
3147
3129
  'cosh': {
3148
3130
  evaluate: function (_a, sourceCodeInfo) {
@@ -3150,7 +3132,7 @@ var mathNormalExpression = {
3150
3132
  assertNumber(value, sourceCodeInfo);
3151
3133
  return Math.cosh(value);
3152
3134
  },
3153
- validate: function (node) { return assertNumberOfParams(1, node); },
3135
+ paramCount: 1,
3154
3136
  },
3155
3137
  'acosh': {
3156
3138
  evaluate: function (_a, sourceCodeInfo) {
@@ -3158,7 +3140,7 @@ var mathNormalExpression = {
3158
3140
  assertNumber(value, sourceCodeInfo);
3159
3141
  return Math.acosh(value);
3160
3142
  },
3161
- validate: function (node) { return assertNumberOfParams(1, node); },
3143
+ paramCount: 1,
3162
3144
  },
3163
3145
  'tan': {
3164
3146
  evaluate: function (_a, sourceCodeInfo) {
@@ -3166,7 +3148,7 @@ var mathNormalExpression = {
3166
3148
  assertNumber(value, sourceCodeInfo);
3167
3149
  return Math.tan(value);
3168
3150
  },
3169
- validate: function (node) { return assertNumberOfParams(1, node); },
3151
+ paramCount: 1,
3170
3152
  },
3171
3153
  'atan': {
3172
3154
  evaluate: function (_a, sourceCodeInfo) {
@@ -3174,7 +3156,7 @@ var mathNormalExpression = {
3174
3156
  assertNumber(value, sourceCodeInfo);
3175
3157
  return Math.atan(value);
3176
3158
  },
3177
- validate: function (node) { return assertNumberOfParams(1, node); },
3159
+ paramCount: 1,
3178
3160
  },
3179
3161
  'tanh': {
3180
3162
  evaluate: function (_a, sourceCodeInfo) {
@@ -3182,7 +3164,7 @@ var mathNormalExpression = {
3182
3164
  assertNumber(value, sourceCodeInfo);
3183
3165
  return Math.tanh(value);
3184
3166
  },
3185
- validate: function (node) { return assertNumberOfParams(1, node); },
3167
+ paramCount: 1,
3186
3168
  },
3187
3169
  'atanh': {
3188
3170
  evaluate: function (_a, sourceCodeInfo) {
@@ -3190,7 +3172,7 @@ var mathNormalExpression = {
3190
3172
  assertNumber(value, sourceCodeInfo);
3191
3173
  return Math.atanh(value);
3192
3174
  },
3193
- validate: function (node) { return assertNumberOfParams(1, node); },
3175
+ paramCount: 1,
3194
3176
  },
3195
3177
  };
3196
3178
 
@@ -3205,7 +3187,7 @@ var miscNormalExpression = {
3205
3187
  }
3206
3188
  return true;
3207
3189
  },
3208
- validate: function (node) { return assertNumberOfParams({ min: 1 }, node); },
3190
+ paramCount: { min: 1 },
3209
3191
  },
3210
3192
  '==': {
3211
3193
  evaluate: function (_a) {
@@ -3227,14 +3209,14 @@ var miscNormalExpression = {
3227
3209
  }
3228
3210
  return true;
3229
3211
  },
3230
- validate: function (node) { return assertNumberOfParams({ min: 1 }, node); },
3212
+ paramCount: { min: 1 },
3231
3213
  },
3232
3214
  'equal?': {
3233
3215
  evaluate: function (_a, sourceCodeInfo) {
3234
3216
  var _b = __read(_a, 2), a = _b[0], b = _b[1];
3235
3217
  return deepEqual(asAny(a, sourceCodeInfo), asAny(b, sourceCodeInfo), sourceCodeInfo);
3236
3218
  },
3237
- validate: function (node) { return assertNumberOfParams({ min: 1 }, node); },
3219
+ paramCount: { min: 1 },
3238
3220
  },
3239
3221
  '>': {
3240
3222
  evaluate: function (_a) {
@@ -3258,7 +3240,7 @@ var miscNormalExpression = {
3258
3240
  }
3259
3241
  return true;
3260
3242
  },
3261
- validate: function (node) { return assertNumberOfParams({ min: 1 }, node); },
3243
+ paramCount: { min: 1 },
3262
3244
  },
3263
3245
  '<': {
3264
3246
  evaluate: function (_a) {
@@ -3282,7 +3264,7 @@ var miscNormalExpression = {
3282
3264
  }
3283
3265
  return true;
3284
3266
  },
3285
- validate: function (node) { return assertNumberOfParams({ min: 1 }, node); },
3267
+ paramCount: { min: 1 },
3286
3268
  },
3287
3269
  '>=': {
3288
3270
  evaluate: function (_a) {
@@ -3306,7 +3288,7 @@ var miscNormalExpression = {
3306
3288
  }
3307
3289
  return true;
3308
3290
  },
3309
- validate: function (node) { return assertNumberOfParams({ min: 1 }, node); },
3291
+ paramCount: { min: 1 },
3310
3292
  },
3311
3293
  '<=': {
3312
3294
  evaluate: function (_a) {
@@ -3330,14 +3312,14 @@ var miscNormalExpression = {
3330
3312
  }
3331
3313
  return true;
3332
3314
  },
3333
- validate: function (node) { return assertNumberOfParams({ min: 1 }, node); },
3315
+ paramCount: { min: 1 },
3334
3316
  },
3335
3317
  '!': {
3336
3318
  evaluate: function (_a) {
3337
3319
  var _b = __read(_a, 1), first = _b[0];
3338
3320
  return !first;
3339
3321
  },
3340
- validate: function (node) { return assertNumberOfParams(1, node); },
3322
+ paramCount: 1,
3341
3323
  },
3342
3324
  'epoch>iso_date': {
3343
3325
  evaluate: function (_a, sourceCodeInfo) {
@@ -3345,7 +3327,7 @@ var miscNormalExpression = {
3345
3327
  assertNumber(ms, sourceCodeInfo);
3346
3328
  return new Date(ms).toISOString();
3347
3329
  },
3348
- validate: function (node) { return assertNumberOfParams(1, node); },
3330
+ paramCount: 1,
3349
3331
  },
3350
3332
  'iso_date>epoch': {
3351
3333
  evaluate: function (_a, sourceCodeInfo) {
@@ -3355,7 +3337,7 @@ var miscNormalExpression = {
3355
3337
  assertNumber(ms, sourceCodeInfo, { finite: true });
3356
3338
  return ms;
3357
3339
  },
3358
- validate: function (node) { return assertNumberOfParams(1, node); },
3340
+ paramCount: 1,
3359
3341
  },
3360
3342
  'write!': {
3361
3343
  evaluate: function (params, sourceCodeInfo) {
@@ -3365,20 +3347,21 @@ var miscNormalExpression = {
3365
3347
  return asAny(params[params.length - 1], sourceCodeInfo);
3366
3348
  return null;
3367
3349
  },
3350
+ paramCount: {},
3368
3351
  },
3369
3352
  'boolean': {
3370
3353
  evaluate: function (_a) {
3371
3354
  var _b = __read(_a, 1), value = _b[0];
3372
3355
  return !!value;
3373
3356
  },
3374
- validate: function (node) { return assertNumberOfParams(1, node); },
3357
+ paramCount: 1,
3375
3358
  },
3376
3359
  'compare': {
3377
3360
  evaluate: function (_a) {
3378
3361
  var _b = __read(_a, 2), a = _b[0], b = _b[1];
3379
3362
  return compare(a, b);
3380
3363
  },
3381
- validate: function (node) { return assertNumberOfParams(2, node); },
3364
+ paramCount: 2,
3382
3365
  },
3383
3366
  'json_parse': {
3384
3367
  evaluate: function (_a, sourceCodeInfo) {
@@ -3387,7 +3370,7 @@ var miscNormalExpression = {
3387
3370
  // eslint-disable-next-line ts/no-unsafe-return
3388
3371
  return JSON.parse(first);
3389
3372
  },
3390
- validate: function (node) { return assertNumberOfParams(1, node); },
3373
+ paramCount: 1,
3391
3374
  },
3392
3375
  'json_stringify': {
3393
3376
  evaluate: function (_a, sourceCodeInfo) {
@@ -3398,7 +3381,7 @@ var miscNormalExpression = {
3398
3381
  assertNumber(second, sourceCodeInfo);
3399
3382
  return JSON.stringify(first, null, second);
3400
3383
  },
3401
- validate: function (node) { return assertNumberOfParams({ min: 1, max: 2 }, node); },
3384
+ paramCount: { min: 1, max: 2 },
3402
3385
  },
3403
3386
  };
3404
3387
 
@@ -3412,7 +3395,7 @@ var assertNormalExpression = {
3412
3395
  throw new AssertionError(message, sourceCodeInfo);
3413
3396
  return asAny(value, sourceCodeInfo);
3414
3397
  },
3415
- validate: function (node) { return assertNumberOfParams({ min: 1, max: 2 }, node); },
3398
+ paramCount: { min: 1, max: 2 },
3416
3399
  },
3417
3400
  'assert=': {
3418
3401
  evaluate: function (_a, sourceCodeInfo) {
@@ -3422,7 +3405,7 @@ var assertNormalExpression = {
3422
3405
  throw new AssertionError("Expected ".concat(first, " to be ").concat(second, ".").concat(message), sourceCodeInfo);
3423
3406
  return null;
3424
3407
  },
3425
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
3408
+ paramCount: { min: 2, max: 3 },
3426
3409
  },
3427
3410
  'assert!=': {
3428
3411
  evaluate: function (_a, sourceCodeInfo) {
@@ -3432,7 +3415,7 @@ var assertNormalExpression = {
3432
3415
  throw new AssertionError("Expected ".concat(first, " not to be ").concat(second, ".").concat(message), sourceCodeInfo);
3433
3416
  return null;
3434
3417
  },
3435
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
3418
+ paramCount: { min: 2, max: 3 },
3436
3419
  },
3437
3420
  'assert_equal': {
3438
3421
  evaluate: function (_a, sourceCodeInfo) {
@@ -3443,7 +3426,7 @@ var assertNormalExpression = {
3443
3426
  }
3444
3427
  return null;
3445
3428
  },
3446
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
3429
+ paramCount: { min: 2, max: 3 },
3447
3430
  },
3448
3431
  'assert_not_equal': {
3449
3432
  evaluate: function (_a, sourceCodeInfo) {
@@ -3454,7 +3437,7 @@ var assertNormalExpression = {
3454
3437
  }
3455
3438
  return null;
3456
3439
  },
3457
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
3440
+ paramCount: { min: 2, max: 3 },
3458
3441
  },
3459
3442
  'assert_gt': {
3460
3443
  evaluate: function (_a, sourceCodeInfo) {
@@ -3464,7 +3447,7 @@ var assertNormalExpression = {
3464
3447
  throw new AssertionError("Expected ".concat(first, " to be grater than ").concat(second, ".").concat(message), sourceCodeInfo);
3465
3448
  return null;
3466
3449
  },
3467
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
3450
+ paramCount: { min: 2, max: 3 },
3468
3451
  },
3469
3452
  'assert_gte': {
3470
3453
  evaluate: function (_a, sourceCodeInfo) {
@@ -3474,7 +3457,7 @@ var assertNormalExpression = {
3474
3457
  throw new AssertionError("Expected ".concat(first, " to be grater than or equal to ").concat(second, ".").concat(message), sourceCodeInfo);
3475
3458
  return null;
3476
3459
  },
3477
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
3460
+ paramCount: { min: 2, max: 3 },
3478
3461
  },
3479
3462
  'assert_lt': {
3480
3463
  evaluate: function (_a, sourceCodeInfo) {
@@ -3484,7 +3467,7 @@ var assertNormalExpression = {
3484
3467
  throw new AssertionError("Expected ".concat(first, " to be less than ").concat(second, ".").concat(message), sourceCodeInfo);
3485
3468
  return null;
3486
3469
  },
3487
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
3470
+ paramCount: { min: 2, max: 3 },
3488
3471
  },
3489
3472
  'assert_lte': {
3490
3473
  evaluate: function (_a, sourceCodeInfo) {
@@ -3494,7 +3477,7 @@ var assertNormalExpression = {
3494
3477
  throw new AssertionError("Expected ".concat(first, " to be less than or equal to ").concat(second, ".").concat(message), sourceCodeInfo);
3495
3478
  return null;
3496
3479
  },
3497
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
3480
+ paramCount: { min: 2, max: 3 },
3498
3481
  },
3499
3482
  'assert_true': {
3500
3483
  evaluate: function (_a, sourceCodeInfo) {
@@ -3504,7 +3487,7 @@ var assertNormalExpression = {
3504
3487
  throw new AssertionError("Expected ".concat(first, " to be true.").concat(message), sourceCodeInfo);
3505
3488
  return null;
3506
3489
  },
3507
- validate: function (node) { return assertNumberOfParams({ min: 1, max: 2 }, node); },
3490
+ paramCount: { min: 1, max: 2 },
3508
3491
  },
3509
3492
  'assert_false': {
3510
3493
  evaluate: function (_a, sourceCodeInfo) {
@@ -3514,7 +3497,7 @@ var assertNormalExpression = {
3514
3497
  throw new AssertionError("Expected ".concat(first, " to be false.").concat(message), sourceCodeInfo);
3515
3498
  return null;
3516
3499
  },
3517
- validate: function (node) { return assertNumberOfParams({ min: 1, max: 2 }, node); },
3500
+ paramCount: { min: 1, max: 2 },
3518
3501
  },
3519
3502
  'assert_truthy': {
3520
3503
  evaluate: function (_a, sourceCodeInfo) {
@@ -3524,7 +3507,7 @@ var assertNormalExpression = {
3524
3507
  throw new AssertionError("Expected ".concat(first, " to be truthy.").concat(message), sourceCodeInfo);
3525
3508
  return null;
3526
3509
  },
3527
- validate: function (node) { return assertNumberOfParams({ min: 1, max: 2 }, node); },
3510
+ paramCount: { min: 1, max: 2 },
3528
3511
  },
3529
3512
  'assert_falsy': {
3530
3513
  evaluate: function (_a, sourceCodeInfo) {
@@ -3534,7 +3517,7 @@ var assertNormalExpression = {
3534
3517
  throw new AssertionError("Expected ".concat(first, " to be falsy.").concat(message), sourceCodeInfo);
3535
3518
  return null;
3536
3519
  },
3537
- validate: function (node) { return assertNumberOfParams({ min: 1, max: 2 }, node); },
3520
+ paramCount: { min: 1, max: 2 },
3538
3521
  },
3539
3522
  'assert_null': {
3540
3523
  evaluate: function (_a, sourceCodeInfo) {
@@ -3544,7 +3527,7 @@ var assertNormalExpression = {
3544
3527
  throw new AssertionError("Expected ".concat(first, " to be nil.").concat(message), sourceCodeInfo);
3545
3528
  return null;
3546
3529
  },
3547
- validate: function (node) { return assertNumberOfParams({ min: 1, max: 2 }, node); },
3530
+ paramCount: { min: 1, max: 2 },
3548
3531
  },
3549
3532
  'assert_throws': {
3550
3533
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -3560,7 +3543,7 @@ var assertNormalExpression = {
3560
3543
  }
3561
3544
  throw new AssertionError("Expected function to throw.".concat(message), sourceCodeInfo);
3562
3545
  },
3563
- validate: function (node) { return assertNumberOfParams({ min: 1, max: 2 }, node); },
3546
+ paramCount: { min: 1, max: 2 },
3564
3547
  },
3565
3548
  'assert_throws_error': {
3566
3549
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -3581,7 +3564,7 @@ var assertNormalExpression = {
3581
3564
  }
3582
3565
  throw new AssertionError("Expected function to throw \"".concat(throwMessage, "\".").concat(message), sourceCodeInfo);
3583
3566
  },
3584
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
3567
+ paramCount: { min: 2, max: 3 },
3585
3568
  },
3586
3569
  'assert_not_throws': {
3587
3570
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -3597,7 +3580,7 @@ var assertNormalExpression = {
3597
3580
  }
3598
3581
  return null;
3599
3582
  },
3600
- validate: function (node) { return assertNumberOfParams({ min: 1, max: 2 }, node); },
3583
+ paramCount: { min: 1, max: 2 },
3601
3584
  },
3602
3585
  };
3603
3586
 
@@ -3613,7 +3596,7 @@ var objectNormalExpression = {
3613
3596
  }
3614
3597
  return result;
3615
3598
  },
3616
- validate: function (node) { return assertEvenNumberOfParams(node); },
3599
+ paramCount: { even: true },
3617
3600
  },
3618
3601
  keys: {
3619
3602
  evaluate: function (_a, sourceCodeInfo) {
@@ -3621,7 +3604,7 @@ var objectNormalExpression = {
3621
3604
  assertObj(obj, sourceCodeInfo);
3622
3605
  return Object.keys(obj);
3623
3606
  },
3624
- validate: function (node) { return assertNumberOfParams(1, node); },
3607
+ paramCount: 1,
3625
3608
  },
3626
3609
  vals: {
3627
3610
  evaluate: function (_a, sourceCodeInfo) {
@@ -3629,7 +3612,7 @@ var objectNormalExpression = {
3629
3612
  assertObj(obj, sourceCodeInfo);
3630
3613
  return Object.values(obj);
3631
3614
  },
3632
- validate: function (node) { return assertNumberOfParams(1, node); },
3615
+ paramCount: 1,
3633
3616
  },
3634
3617
  entries: {
3635
3618
  evaluate: function (_a, sourceCodeInfo) {
@@ -3637,7 +3620,7 @@ var objectNormalExpression = {
3637
3620
  assertObj(obj, sourceCodeInfo);
3638
3621
  return Object.entries(obj);
3639
3622
  },
3640
- validate: function (node) { return assertNumberOfParams(1, node); },
3623
+ paramCount: 1,
3641
3624
  },
3642
3625
  find: {
3643
3626
  evaluate: function (_a, sourceCodeInfo) {
@@ -3648,7 +3631,7 @@ var objectNormalExpression = {
3648
3631
  return [key, obj[key]];
3649
3632
  return null;
3650
3633
  },
3651
- validate: function (node) { return assertNumberOfParams(2, node); },
3634
+ paramCount: 2,
3652
3635
  },
3653
3636
  dissoc: {
3654
3637
  evaluate: function (_a, sourceCodeInfo) {
@@ -3659,7 +3642,7 @@ var objectNormalExpression = {
3659
3642
  delete newObj[key];
3660
3643
  return newObj;
3661
3644
  },
3662
- validate: function (node) { return assertNumberOfParams(2, node); },
3645
+ paramCount: 2,
3663
3646
  },
3664
3647
  merge: {
3665
3648
  evaluate: function (params, sourceCodeInfo) {
@@ -3672,7 +3655,7 @@ var objectNormalExpression = {
3672
3655
  return __assign(__assign({}, result), obj);
3673
3656
  }, __assign({}, first));
3674
3657
  },
3675
- validate: function (node) { return assertNumberOfParams({ min: 0 }, node); },
3658
+ paramCount: { min: 0 },
3676
3659
  },
3677
3660
  merge_with: {
3678
3661
  evaluate: function (params, sourceCodeInfo, contextStack, _a) {
@@ -3695,7 +3678,7 @@ var objectNormalExpression = {
3695
3678
  return result;
3696
3679
  }, __assign({}, first));
3697
3680
  },
3698
- validate: function (node) { return assertNumberOfParams({ min: 2 }, node); },
3681
+ paramCount: { min: 2 },
3699
3682
  },
3700
3683
  zipmap: {
3701
3684
  evaluate: function (_a, sourceCodeInfo) {
@@ -3710,7 +3693,7 @@ var objectNormalExpression = {
3710
3693
  }
3711
3694
  return result;
3712
3695
  },
3713
- validate: function (node) { return assertNumberOfParams(2, node); },
3696
+ paramCount: 2,
3714
3697
  },
3715
3698
  select_keys: {
3716
3699
  evaluate: function (_a, sourceCodeInfo) {
@@ -3723,7 +3706,7 @@ var objectNormalExpression = {
3723
3706
  return result;
3724
3707
  }, {});
3725
3708
  },
3726
- validate: function (node) { return assertNumberOfParams(2, node); },
3709
+ paramCount: 2,
3727
3710
  },
3728
3711
  };
3729
3712
 
@@ -3733,42 +3716,42 @@ var predicatesNormalExpression = {
3733
3716
  var _b = __read(_a, 1), first = _b[0];
3734
3717
  return isLitsFunction(first);
3735
3718
  },
3736
- validate: function (node) { return assertNumberOfParams(1, node); },
3719
+ paramCount: 1,
3737
3720
  },
3738
3721
  'string?': {
3739
3722
  evaluate: function (_a) {
3740
3723
  var _b = __read(_a, 1), first = _b[0];
3741
3724
  return typeof first === 'string';
3742
3725
  },
3743
- validate: function (node) { return assertNumberOfParams(1, node); },
3726
+ paramCount: 1,
3744
3727
  },
3745
3728
  'number?': {
3746
3729
  evaluate: function (_a) {
3747
3730
  var _b = __read(_a, 1), first = _b[0];
3748
3731
  return typeof first === 'number';
3749
3732
  },
3750
- validate: function (node) { return assertNumberOfParams(1, node); },
3733
+ paramCount: 1,
3751
3734
  },
3752
3735
  'integer?': {
3753
3736
  evaluate: function (_a) {
3754
3737
  var _b = __read(_a, 1), first = _b[0];
3755
3738
  return typeof first === 'number' && isNumber(first, { integer: true });
3756
3739
  },
3757
- validate: function (node) { return assertNumberOfParams(1, node); },
3740
+ paramCount: 1,
3758
3741
  },
3759
3742
  'boolean?': {
3760
3743
  evaluate: function (_a) {
3761
3744
  var _b = __read(_a, 1), first = _b[0];
3762
3745
  return typeof first === 'boolean';
3763
3746
  },
3764
- validate: function (node) { return assertNumberOfParams(1, node); },
3747
+ paramCount: 1,
3765
3748
  },
3766
3749
  'nil?': {
3767
3750
  evaluate: function (_a) {
3768
3751
  var _b = __read(_a, 1), first = _b[0];
3769
3752
  return first === null || first === undefined;
3770
3753
  },
3771
- validate: function (node) { return assertNumberOfParams(1, node); },
3754
+ paramCount: 1,
3772
3755
  },
3773
3756
  'zero?': {
3774
3757
  evaluate: function (_a, sourceCodeInfo) {
@@ -3776,7 +3759,7 @@ var predicatesNormalExpression = {
3776
3759
  assertNumber(first, sourceCodeInfo, { finite: true });
3777
3760
  return first === 0;
3778
3761
  },
3779
- validate: function (node) { return assertNumberOfParams(1, node); },
3762
+ paramCount: 1,
3780
3763
  },
3781
3764
  'pos?': {
3782
3765
  evaluate: function (_a, sourceCodeInfo) {
@@ -3784,7 +3767,7 @@ var predicatesNormalExpression = {
3784
3767
  assertNumber(first, sourceCodeInfo, { finite: true });
3785
3768
  return first > 0;
3786
3769
  },
3787
- validate: function (node) { return assertNumberOfParams(1, node); },
3770
+ paramCount: 1,
3788
3771
  },
3789
3772
  'neg?': {
3790
3773
  evaluate: function (_a, sourceCodeInfo) {
@@ -3792,7 +3775,7 @@ var predicatesNormalExpression = {
3792
3775
  assertNumber(first, sourceCodeInfo, { finite: true });
3793
3776
  return first < 0;
3794
3777
  },
3795
- validate: function (node) { return assertNumberOfParams(1, node); },
3778
+ paramCount: 1,
3796
3779
  },
3797
3780
  'even?': {
3798
3781
  evaluate: function (_a, sourceCodeInfo) {
@@ -3800,7 +3783,7 @@ var predicatesNormalExpression = {
3800
3783
  assertNumber(first, sourceCodeInfo, { finite: true });
3801
3784
  return first % 2 === 0;
3802
3785
  },
3803
- validate: function (node) { return assertNumberOfParams(1, node); },
3786
+ paramCount: 1,
3804
3787
  },
3805
3788
  'odd?': {
3806
3789
  evaluate: function (_a, sourceCodeInfo) {
@@ -3808,42 +3791,42 @@ var predicatesNormalExpression = {
3808
3791
  assertNumber(first, sourceCodeInfo, { finite: true });
3809
3792
  return isNumber(first, { integer: true }) && first % 2 !== 0;
3810
3793
  },
3811
- validate: function (node) { return assertNumberOfParams(1, node); },
3794
+ paramCount: 1,
3812
3795
  },
3813
3796
  'array?': {
3814
3797
  evaluate: function (_a) {
3815
3798
  var _b = __read(_a, 1), first = _b[0];
3816
3799
  return Array.isArray(first);
3817
3800
  },
3818
- validate: function (node) { return assertNumberOfParams(1, node); },
3801
+ paramCount: 1,
3819
3802
  },
3820
3803
  'coll?': {
3821
3804
  evaluate: function (_a) {
3822
3805
  var _b = __read(_a, 1), first = _b[0];
3823
3806
  return isColl(first);
3824
3807
  },
3825
- validate: function (node) { return assertNumberOfParams(1, node); },
3808
+ paramCount: 1,
3826
3809
  },
3827
3810
  'seq?': {
3828
3811
  evaluate: function (_a) {
3829
3812
  var _b = __read(_a, 1), first = _b[0];
3830
3813
  return isSeq(first);
3831
3814
  },
3832
- validate: function (node) { return assertNumberOfParams(1, node); },
3815
+ paramCount: 1,
3833
3816
  },
3834
3817
  'object?': {
3835
3818
  evaluate: function (_a) {
3836
3819
  var _b = __read(_a, 1), first = _b[0];
3837
3820
  return isObj(first);
3838
3821
  },
3839
- validate: function (node) { return assertNumberOfParams(1, node); },
3822
+ paramCount: 1,
3840
3823
  },
3841
3824
  'regexp?': {
3842
3825
  evaluate: function (_a) {
3843
3826
  var _b = __read(_a, 1), value = _b[0];
3844
3827
  return isRegularExpression(value);
3845
3828
  },
3846
- validate: function (node) { return assertNumberOfParams(1, node); },
3829
+ paramCount: 1,
3847
3830
  },
3848
3831
  'finite?': {
3849
3832
  evaluate: function (_a, sourceCodeInfo) {
@@ -3851,7 +3834,7 @@ var predicatesNormalExpression = {
3851
3834
  assertNumber(value, sourceCodeInfo);
3852
3835
  return Number.isFinite(value);
3853
3836
  },
3854
- validate: function (node) { return assertNumberOfParams(1, node); },
3837
+ paramCount: 1,
3855
3838
  },
3856
3839
  'nan?': {
3857
3840
  evaluate: function (_a, sourceCodeInfo) {
@@ -3859,7 +3842,7 @@ var predicatesNormalExpression = {
3859
3842
  assertNumber(value, sourceCodeInfo);
3860
3843
  return Number.isNaN(value);
3861
3844
  },
3862
- validate: function (node) { return assertNumberOfParams(1, node); },
3845
+ paramCount: 1,
3863
3846
  },
3864
3847
  'positive_infinity?': {
3865
3848
  evaluate: function (_a, sourceCodeInfo) {
@@ -3867,7 +3850,7 @@ var predicatesNormalExpression = {
3867
3850
  assertNumber(value, sourceCodeInfo);
3868
3851
  return value === Number.POSITIVE_INFINITY;
3869
3852
  },
3870
- validate: function (node) { return assertNumberOfParams(1, node); },
3853
+ paramCount: 1,
3871
3854
  },
3872
3855
  'negative_infinity?': {
3873
3856
  evaluate: function (_a, sourceCodeInfo) {
@@ -3875,21 +3858,21 @@ var predicatesNormalExpression = {
3875
3858
  assertNumber(value, sourceCodeInfo);
3876
3859
  return value === Number.NEGATIVE_INFINITY;
3877
3860
  },
3878
- validate: function (node) { return assertNumberOfParams(1, node); },
3861
+ paramCount: 1,
3879
3862
  },
3880
3863
  'true?': {
3881
3864
  evaluate: function (_a) {
3882
3865
  var _b = __read(_a, 1), value = _b[0];
3883
3866
  return value === true;
3884
3867
  },
3885
- validate: function (node) { return assertNumberOfParams(1, node); },
3868
+ paramCount: 1,
3886
3869
  },
3887
3870
  'false?': {
3888
3871
  evaluate: function (_a) {
3889
3872
  var _b = __read(_a, 1), value = _b[0];
3890
3873
  return value === false;
3891
3874
  },
3892
- validate: function (node) { return assertNumberOfParams(1, node); },
3875
+ paramCount: 1,
3893
3876
  },
3894
3877
  'empty?': {
3895
3878
  evaluate: function (_a, sourceCodeInfo) {
@@ -3903,7 +3886,7 @@ var predicatesNormalExpression = {
3903
3886
  return coll.length === 0;
3904
3887
  return Object.keys(coll).length === 0;
3905
3888
  },
3906
- validate: function (node) { return assertNumberOfParams(1, node); },
3889
+ paramCount: 1,
3907
3890
  },
3908
3891
  'not_empty?': {
3909
3892
  evaluate: function (_a, sourceCodeInfo) {
@@ -3917,7 +3900,7 @@ var predicatesNormalExpression = {
3917
3900
  return coll.length > 0;
3918
3901
  return Object.keys(coll).length > 0;
3919
3902
  },
3920
- validate: function (node) { return assertNumberOfParams(1, node); },
3903
+ paramCount: 1,
3921
3904
  },
3922
3905
  };
3923
3906
 
@@ -3936,7 +3919,7 @@ var regexpNormalExpression = {
3936
3919
  _b.f = flags,
3937
3920
  _b;
3938
3921
  },
3939
- validate: function (node) { return assertNumberOfParams({ min: 1, max: 2 }, node); },
3922
+ paramCount: { min: 1, max: 2 },
3940
3923
  },
3941
3924
  match: {
3942
3925
  evaluate: function (_a, sourceCodeInfo) {
@@ -3950,7 +3933,7 @@ var regexpNormalExpression = {
3950
3933
  return __spreadArray([], __read(match), false);
3951
3934
  return null;
3952
3935
  },
3953
- validate: function (node) { return assertNumberOfParams(2, node); },
3936
+ paramCount: 2,
3954
3937
  },
3955
3938
  replace: {
3956
3939
  evaluate: function (_a, sourceCodeInfo) {
@@ -3961,7 +3944,7 @@ var regexpNormalExpression = {
3961
3944
  var matcher = isRegularExpression(regexp) ? new RegExp(regexp.s, "".concat(regexp.f)) : regexp;
3962
3945
  return str.replace(matcher, value);
3963
3946
  },
3964
- validate: function (node) { return assertNumberOfParams(3, node); },
3947
+ paramCount: 3,
3965
3948
  },
3966
3949
  replace_all: {
3967
3950
  evaluate: function (_a, sourceCodeInfo) {
@@ -3972,7 +3955,7 @@ var regexpNormalExpression = {
3972
3955
  var matcher = isRegularExpression(regexp) ? new RegExp(regexp.s, "".concat(regexp.f.includes('g') ? regexp.f : "".concat(regexp.f, "g"))) : regexp;
3973
3956
  return str.replaceAll(matcher, value);
3974
3957
  },
3975
- validate: function (node) { return assertNumberOfParams(3, node); },
3958
+ paramCount: 3,
3976
3959
  },
3977
3960
  };
3978
3961
 
@@ -3988,7 +3971,7 @@ var stringNormalExpression = {
3988
3971
  assertNumber(third, sourceCodeInfo, { gte: second });
3989
3972
  return (first).substring(second, third);
3990
3973
  },
3991
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
3974
+ paramCount: { min: 2, max: 3 },
3992
3975
  },
3993
3976
  'string_repeat': {
3994
3977
  evaluate: function (_a, sourceCodeInfo) {
@@ -3997,7 +3980,7 @@ var stringNormalExpression = {
3997
3980
  assertNumber(count, sourceCodeInfo, { integer: true, nonNegative: true });
3998
3981
  return str.repeat(count);
3999
3982
  },
4000
- validate: function (node) { return assertNumberOfParams(2, node); },
3983
+ paramCount: 2,
4001
3984
  },
4002
3985
  'str': {
4003
3986
  evaluate: function (params) {
@@ -4012,6 +3995,7 @@ var stringNormalExpression = {
4012
3995
  return result + paramStr;
4013
3996
  }, '');
4014
3997
  },
3998
+ paramCount: {},
4015
3999
  },
4016
4000
  'number': {
4017
4001
  evaluate: function (_a, sourceCodeInfo) {
@@ -4022,7 +4006,7 @@ var stringNormalExpression = {
4022
4006
  throw new LitsError("Could not convert '".concat(str, "' to a number."), sourceCodeInfo);
4023
4007
  return number;
4024
4008
  },
4025
- validate: function (node) { return assertNumberOfParams(1, node); },
4009
+ paramCount: 1,
4026
4010
  },
4027
4011
  'from_char_code': {
4028
4012
  evaluate: function (_a, sourceCodeInfo) {
@@ -4036,7 +4020,7 @@ var stringNormalExpression = {
4036
4020
  throw new LitsError(error, sourceCodeInfo);
4037
4021
  }
4038
4022
  },
4039
- validate: function (node) { return assertNumberOfParams(1, node); },
4023
+ paramCount: 1,
4040
4024
  },
4041
4025
  'to_char_code': {
4042
4026
  evaluate: function (_a, sourceCodeInfo) {
@@ -4044,7 +4028,7 @@ var stringNormalExpression = {
4044
4028
  assertString(str, sourceCodeInfo, { nonEmpty: true });
4045
4029
  return asNonUndefined(str.codePointAt(0), sourceCodeInfo);
4046
4030
  },
4047
- validate: function (node) { return assertNumberOfParams(1, node); },
4031
+ paramCount: 1,
4048
4032
  },
4049
4033
  'lower_case': {
4050
4034
  evaluate: function (_a, sourceCodeInfo) {
@@ -4052,7 +4036,7 @@ var stringNormalExpression = {
4052
4036
  assertString(str, sourceCodeInfo);
4053
4037
  return str.toLowerCase();
4054
4038
  },
4055
- validate: function (node) { return assertNumberOfParams(1, node); },
4039
+ paramCount: 1,
4056
4040
  },
4057
4041
  'upper_case': {
4058
4042
  evaluate: function (_a, sourceCodeInfo) {
@@ -4060,7 +4044,7 @@ var stringNormalExpression = {
4060
4044
  assertString(str, sourceCodeInfo);
4061
4045
  return str.toUpperCase();
4062
4046
  },
4063
- validate: function (node) { return assertNumberOfParams(1, node); },
4047
+ paramCount: 1,
4064
4048
  },
4065
4049
  'trim': {
4066
4050
  evaluate: function (_a, sourceCodeInfo) {
@@ -4068,7 +4052,7 @@ var stringNormalExpression = {
4068
4052
  assertString(str, sourceCodeInfo);
4069
4053
  return str.trim();
4070
4054
  },
4071
- validate: function (node) { return assertNumberOfParams(1, node); },
4055
+ paramCount: 1,
4072
4056
  },
4073
4057
  'trim_left': {
4074
4058
  evaluate: function (_a, sourceCodeInfo) {
@@ -4076,7 +4060,7 @@ var stringNormalExpression = {
4076
4060
  assertString(str, sourceCodeInfo);
4077
4061
  return str.replace(/^\s+/, '');
4078
4062
  },
4079
- validate: function (node) { return assertNumberOfParams(1, node); },
4063
+ paramCount: 1,
4080
4064
  },
4081
4065
  'trim_right': {
4082
4066
  evaluate: function (_a, sourceCodeInfo) {
@@ -4084,7 +4068,7 @@ var stringNormalExpression = {
4084
4068
  assertString(str, sourceCodeInfo);
4085
4069
  return str.replace(/\s+$/, '');
4086
4070
  },
4087
- validate: function (node) { return assertNumberOfParams(1, node); },
4071
+ paramCount: 1,
4088
4072
  },
4089
4073
  '++': {
4090
4074
  evaluate: function (params, sourceCodeInfo) {
@@ -4108,7 +4092,7 @@ var stringNormalExpression = {
4108
4092
  return "".concat(acc).concat(str);
4109
4093
  }, first === null ? '' : "".concat(first));
4110
4094
  },
4111
- validate: function () { return undefined; },
4095
+ paramCount: {},
4112
4096
  },
4113
4097
  'join': {
4114
4098
  evaluate: function (_a, sourceCodeInfo) {
@@ -4118,7 +4102,7 @@ var stringNormalExpression = {
4118
4102
  assertString(delimiter, sourceCodeInfo);
4119
4103
  return stringList.join(delimiter);
4120
4104
  },
4121
- validate: function (node) { return assertNumberOfParams(2, node); },
4105
+ paramCount: 2,
4122
4106
  },
4123
4107
  'split': {
4124
4108
  evaluate: function (_a, sourceCodeInfo) {
@@ -4132,7 +4116,7 @@ var stringNormalExpression = {
4132
4116
  : new RegExp(stringOrRegExpValue.s, stringOrRegExpValue.f);
4133
4117
  return str.split(delimiter, limit);
4134
4118
  },
4135
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
4119
+ paramCount: { min: 2, max: 3 },
4136
4120
  },
4137
4121
  'split_lines': {
4138
4122
  evaluate: function (_a, sourceCodeInfo) {
@@ -4140,7 +4124,7 @@ var stringNormalExpression = {
4140
4124
  assertString(str, sourceCodeInfo);
4141
4125
  return str.split((/\r\n|\n|\r/)).filter(function (line) { return line !== ''; });
4142
4126
  },
4143
- validate: function (node) { return assertNumberOfParams(1, node); },
4127
+ paramCount: 1,
4144
4128
  },
4145
4129
  'pad_left': {
4146
4130
  evaluate: function (_a, sourceCodeInfo) {
@@ -4151,7 +4135,7 @@ var stringNormalExpression = {
4151
4135
  assertString(padString, sourceCodeInfo);
4152
4136
  return str.padStart(length, padString);
4153
4137
  },
4154
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
4138
+ paramCount: { min: 2, max: 3 },
4155
4139
  },
4156
4140
  'pad_right': {
4157
4141
  evaluate: function (_a, sourceCodeInfo) {
@@ -4162,7 +4146,7 @@ var stringNormalExpression = {
4162
4146
  assertString(padString, sourceCodeInfo);
4163
4147
  return str.padEnd(length, padString);
4164
4148
  },
4165
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
4149
+ paramCount: { min: 2, max: 3 },
4166
4150
  },
4167
4151
  'template': {
4168
4152
  evaluate: function (_a, sourceCodeInfo) {
@@ -4193,7 +4177,7 @@ var stringNormalExpression = {
4193
4177
  }
4194
4178
  }
4195
4179
  },
4196
- validate: function (node) { return assertNumberOfParams({ min: 1, max: 10 }, node); },
4180
+ paramCount: { min: 1, max: 10 },
4197
4181
  },
4198
4182
  'encode_base64': {
4199
4183
  evaluate: function (_a, sourceCodeInfo) {
@@ -4204,7 +4188,7 @@ var stringNormalExpression = {
4204
4188
  return String.fromCharCode(Number.parseInt(p1, 16));
4205
4189
  }));
4206
4190
  },
4207
- validate: function (node) { return assertNumberOfParams(1, node); },
4191
+ paramCount: 1,
4208
4192
  },
4209
4193
  'decode_base64': {
4210
4194
  evaluate: function (_a, sourceCodeInfo) {
@@ -4222,7 +4206,7 @@ var stringNormalExpression = {
4222
4206
  throw new LitsError(error, sourceCodeInfo);
4223
4207
  }
4224
4208
  },
4225
- validate: function (node) { return assertNumberOfParams(1, node); },
4209
+ paramCount: 1,
4226
4210
  },
4227
4211
  'encode_uri_component': {
4228
4212
  evaluate: function (_a, sourceCodeInfo) {
@@ -4230,7 +4214,7 @@ var stringNormalExpression = {
4230
4214
  assertString(value, sourceCodeInfo);
4231
4215
  return encodeURIComponent(value);
4232
4216
  },
4233
- validate: function (node) { return assertNumberOfParams(1, node); },
4217
+ paramCount: 1,
4234
4218
  },
4235
4219
  'decode_uri_component': {
4236
4220
  evaluate: function (_a, sourceCodeInfo) {
@@ -4243,7 +4227,7 @@ var stringNormalExpression = {
4243
4227
  throw new LitsError(error, sourceCodeInfo);
4244
4228
  }
4245
4229
  },
4246
- validate: function (node) { return assertNumberOfParams(1, node); },
4230
+ paramCount: 1,
4247
4231
  },
4248
4232
  'blank?': {
4249
4233
  evaluate: function (_a, sourceCodeInfo) {
@@ -4254,7 +4238,7 @@ var stringNormalExpression = {
4254
4238
  assertString(value, sourceCodeInfo);
4255
4239
  return blankRegexp.test(value);
4256
4240
  },
4257
- validate: function (node) { return assertNumberOfParams(1, node); },
4241
+ paramCount: 1,
4258
4242
  },
4259
4243
  'capitalize': {
4260
4244
  evaluate: function (_a, sourceCodeInfo) {
@@ -4262,7 +4246,7 @@ var stringNormalExpression = {
4262
4246
  assertString(str, sourceCodeInfo);
4263
4247
  return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();
4264
4248
  },
4265
- validate: function (node) { return assertNumberOfParams(1, node); },
4249
+ paramCount: 1,
4266
4250
  },
4267
4251
  };
4268
4252
  var doubleDollarRegexp = /\$\$/g;
@@ -4293,14 +4277,14 @@ var functionalNormalExpression = {
4293
4277
  var applyArray = __spreadArray(__spreadArray([], __read(params.slice(0, -1)), false), __read(last), false);
4294
4278
  return executeFunction(func, applyArray, contextStack, sourceCodeInfo);
4295
4279
  },
4296
- validate: function (node) { return assertNumberOfParams({ min: 2 }, node); },
4280
+ paramCount: { min: 2 },
4297
4281
  },
4298
4282
  identity: {
4299
4283
  evaluate: function (_a) {
4300
4284
  var _b = __read(_a, 1), value = _b[0];
4301
4285
  return toAny(value);
4302
4286
  },
4303
- validate: function (node) { return assertNumberOfParams(1, node); },
4287
+ paramCount: 1,
4304
4288
  },
4305
4289
  partial: {
4306
4290
  evaluate: function (_a, sourceCodeInfo) {
@@ -4314,7 +4298,7 @@ var functionalNormalExpression = {
4314
4298
  _b.p = params,
4315
4299
  _b;
4316
4300
  },
4317
- validate: function (node) { return assertNumberOfParams({ min: 1 }, node); },
4301
+ paramCount: { min: 1 },
4318
4302
  },
4319
4303
  comp: {
4320
4304
  evaluate: function (fns, sourceCodeInfo) {
@@ -4332,6 +4316,7 @@ var functionalNormalExpression = {
4332
4316
  _a.f = fns,
4333
4317
  _a;
4334
4318
  },
4319
+ paramCount: {},
4335
4320
  },
4336
4321
  constantly: {
4337
4322
  evaluate: function (_a, sourceCodeInfo) {
@@ -4344,7 +4329,7 @@ var functionalNormalExpression = {
4344
4329
  _b.v = toAny(value),
4345
4330
  _b;
4346
4331
  },
4347
- validate: function (node) { return assertNumberOfParams(1, node); },
4332
+ paramCount: 1,
4348
4333
  },
4349
4334
  juxt: {
4350
4335
  evaluate: function (fns, sourceCodeInfo) {
@@ -4356,7 +4341,7 @@ var functionalNormalExpression = {
4356
4341
  _a.f = fns,
4357
4342
  _a;
4358
4343
  },
4359
- validate: function (node) { return assertNumberOfParams({ min: 1 }, node); },
4344
+ paramCount: { min: 1 },
4360
4345
  },
4361
4346
  complement: {
4362
4347
  evaluate: function (_a, sourceCodeInfo) {
@@ -4369,7 +4354,7 @@ var functionalNormalExpression = {
4369
4354
  _b.f = toAny(fn),
4370
4355
  _b;
4371
4356
  },
4372
- validate: function (node) { return assertNumberOfParams(1, node); },
4357
+ paramCount: 1,
4373
4358
  },
4374
4359
  every_pred: {
4375
4360
  evaluate: function (fns, sourceCodeInfo) {
@@ -4381,7 +4366,7 @@ var functionalNormalExpression = {
4381
4366
  _a.f = fns,
4382
4367
  _a;
4383
4368
  },
4384
- validate: function (node) { return assertNumberOfParams({ min: 1 }, node); },
4369
+ paramCount: { min: 1 },
4385
4370
  },
4386
4371
  some_pred: {
4387
4372
  evaluate: function (fns, sourceCodeInfo) {
@@ -4393,7 +4378,7 @@ var functionalNormalExpression = {
4393
4378
  _a.f = fns,
4394
4379
  _a;
4395
4380
  },
4396
- validate: function (node) { return assertNumberOfParams({ min: 1 }, node); },
4381
+ paramCount: { min: 1 },
4397
4382
  },
4398
4383
  fnil: {
4399
4384
  evaluate: function (_a, sourceCodeInfo) {
@@ -4407,7 +4392,7 @@ var functionalNormalExpression = {
4407
4392
  _b.p = params,
4408
4393
  _b;
4409
4394
  },
4410
- validate: function (node) { return assertNumberOfParams({ min: 2 }, node); },
4395
+ paramCount: { min: 2 },
4411
4396
  },
4412
4397
  };
4413
4398
 
@@ -4426,7 +4411,7 @@ var andSpecialExpression = {
4426
4411
  };
4427
4412
  return node;
4428
4413
  },
4429
- validateParameterCount: function () { return undefined; },
4414
+ paramCount: {},
4430
4415
  evaluate: function (node, contextStack, _a) {
4431
4416
  var e_1, _b;
4432
4417
  var evaluateAstNode = _a.evaluateAstNode;
@@ -4470,14 +4455,14 @@ function getCommonPolishSpecialExpressionParser(name) {
4470
4455
 
4471
4456
  var commentSpecialExpression = {
4472
4457
  polishParse: getCommonPolishSpecialExpressionParser('comment'),
4473
- validateParameterCount: function () { return undefined; },
4458
+ paramCount: {},
4474
4459
  evaluate: function () { return null; },
4475
4460
  findUnresolvedIdentifiers: function () { return new Set(); },
4476
4461
  };
4477
4462
 
4478
4463
  var condSpecialExpression = {
4479
4464
  polishParse: getCommonPolishSpecialExpressionParser('cond'),
4480
- validateParameterCount: function (node) { return assertEvenNumberOfParams(node); },
4465
+ paramCount: { even: true },
4481
4466
  evaluate: function (node, contextStack, _a) {
4482
4467
  var e_1, _b;
4483
4468
  var evaluateAstNode = _a.evaluateAstNode;
@@ -4507,7 +4492,7 @@ var condSpecialExpression = {
4507
4492
 
4508
4493
  var switchSpecialExpression = {
4509
4494
  polishParse: getCommonPolishSpecialExpressionParser('switch'),
4510
- validateParameterCount: function (node) { return assertOddNumberOfParams(node); },
4495
+ paramCount: { odd: true },
4511
4496
  evaluate: function (node, contextStack, _a) {
4512
4497
  var e_1, _b;
4513
4498
  var evaluateAstNode = _a.evaluateAstNode;
@@ -4538,7 +4523,7 @@ var switchSpecialExpression = {
4538
4523
 
4539
4524
  var declaredSpecialExpression = {
4540
4525
  polishParse: getCommonPolishSpecialExpressionParser('defined?'),
4541
- validateParameterCount: function (node) { return assertNumberOfParams(1, node); },
4526
+ paramCount: 1,
4542
4527
  evaluate: function (node, contextStack) {
4543
4528
  var lookUpResult = contextStack.lookUp(node.p[0]);
4544
4529
  return lookUpResult !== null;
@@ -4586,7 +4571,7 @@ var defSpecialExpression = {
4586
4571
  assertSymbolNode(node.p[0], (_b = getTokenDebugData(node.token)) === null || _b === void 0 ? void 0 : _b.sourceCodeInfo);
4587
4572
  return node;
4588
4573
  },
4589
- validateParameterCount: function (node) { return assertNumberOfParams(2, node); },
4574
+ paramCount: 2,
4590
4575
  evaluate: function (node, contextStack, _a) {
4591
4576
  var _b;
4592
4577
  var evaluateAstNode = _a.evaluateAstNode, builtin = _a.builtin;
@@ -4611,7 +4596,7 @@ var defSpecialExpression = {
4611
4596
 
4612
4597
  var doSpecialExpression = {
4613
4598
  polishParse: getCommonPolishSpecialExpressionParser('do'),
4614
- validateParameterCount: function () { return undefined; },
4599
+ paramCount: {},
4615
4600
  evaluate: function (node, contextStack, _a) {
4616
4601
  var e_1, _b;
4617
4602
  var evaluateAstNode = _a.evaluateAstNode;
@@ -4683,7 +4668,7 @@ var defnSpecialExpression = {
4683
4668
  };
4684
4669
  return node;
4685
4670
  },
4686
- validateParameterCount: function () { return undefined; },
4671
+ paramCount: {},
4687
4672
  evaluate: function (node, contextStack, _a) {
4688
4673
  var _b;
4689
4674
  var _c, _d;
@@ -4722,7 +4707,7 @@ var fnSpecialExpression = {
4722
4707
  };
4723
4708
  return node;
4724
4709
  },
4725
- validateParameterCount: function () { return undefined; },
4710
+ paramCount: {},
4726
4711
  evaluate: function (node, contextStack, _a) {
4727
4712
  var _b;
4728
4713
  var _c;
@@ -4947,7 +4932,7 @@ function parseFunctionArguments(tokenStream, parseState, parsers) {
4947
4932
 
4948
4933
  var ifSpecialExpression = {
4949
4934
  polishParse: getCommonPolishSpecialExpressionParser('if'),
4950
- validateParameterCount: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
4935
+ paramCount: { min: 2, max: 3 },
4951
4936
  evaluate: function (node, contextStack, _a) {
4952
4937
  var _b;
4953
4938
  var evaluateAstNode = _a.evaluateAstNode;
@@ -4971,7 +4956,7 @@ var ifSpecialExpression = {
4971
4956
 
4972
4957
  var unlessSpecialExpression = {
4973
4958
  polishParse: getCommonPolishSpecialExpressionParser('unless'),
4974
- validateParameterCount: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
4959
+ paramCount: { min: 2, max: 3 },
4975
4960
  evaluate: function (node, contextStack, _a) {
4976
4961
  var _b;
4977
4962
  var evaluateAstNode = _a.evaluateAstNode;
@@ -5008,7 +4993,7 @@ var letSpecialExpression = {
5008
4993
  };
5009
4994
  return node;
5010
4995
  },
5011
- validateParameterCount: function (node) { return assertNumberOfParams(0, node); },
4996
+ paramCount: 0,
5012
4997
  evaluate: function (node, contextStack, _a) {
5013
4998
  var e_1, _b;
5014
4999
  var evaluateAstNode = _a.evaluateAstNode;
@@ -5063,7 +5048,7 @@ var loopSpecialExpression = {
5063
5048
  };
5064
5049
  return node;
5065
5050
  },
5066
- validateParameterCount: function () { return undefined; },
5051
+ paramCount: {},
5067
5052
  evaluate: function (node, contextStack, _a) {
5068
5053
  var _b;
5069
5054
  var evaluateAstNode = _a.evaluateAstNode;
@@ -5329,7 +5314,7 @@ var forSpecialExpression = {
5329
5314
  };
5330
5315
  return node;
5331
5316
  },
5332
- validateParameterCount: function (node) { return assertNumberOfParams(1, node); },
5317
+ paramCount: 1,
5333
5318
  evaluate: function (node, contextStack, helpers) { return evaluateLoop(true, node, contextStack, helpers.evaluateAstNode); },
5334
5319
  findUnresolvedIdentifiers: function (node, contextStack, _a) {
5335
5320
  var findUnresolvedIdentifiers = _a.findUnresolvedIdentifiers, builtin = _a.builtin;
@@ -5351,7 +5336,7 @@ var doseqSpecialExpression = {
5351
5336
  };
5352
5337
  return node;
5353
5338
  },
5354
- validateParameterCount: function (node) { return assertNumberOfParams(1, node); },
5339
+ paramCount: 1,
5355
5340
  evaluate: function (node, contextStack, helpers) {
5356
5341
  evaluateLoop(false, node, contextStack, helpers.evaluateAstNode);
5357
5342
  return null;
@@ -5364,7 +5349,7 @@ var doseqSpecialExpression = {
5364
5349
 
5365
5350
  var orSpecialExpression = {
5366
5351
  polishParse: getCommonPolishSpecialExpressionParser('||'),
5367
- validateParameterCount: function () { return undefined; },
5352
+ paramCount: {},
5368
5353
  evaluate: function (node, contextStack, _a) {
5369
5354
  var e_1, _b;
5370
5355
  var evaluateAstNode = _a.evaluateAstNode;
@@ -5394,7 +5379,7 @@ var orSpecialExpression = {
5394
5379
 
5395
5380
  var qqSpecialExpression = {
5396
5381
  polishParse: getCommonPolishSpecialExpressionParser('??'),
5397
- validateParameterCount: function (node) { return assertNumberOfParams({ min: 1, max: 2 }, node); },
5382
+ paramCount: { min: 1, max: 2 },
5398
5383
  evaluate: function (node, contextStack, _a) {
5399
5384
  var _b;
5400
5385
  var evaluateAstNode = _a.evaluateAstNode;
@@ -5426,7 +5411,7 @@ var recurSpecialExpression = {
5426
5411
  };
5427
5412
  return node;
5428
5413
  },
5429
- validateParameterCount: function () { return undefined; },
5414
+ paramCount: {},
5430
5415
  evaluate: function (node, contextStack, _a) {
5431
5416
  var evaluateAstNode = _a.evaluateAstNode;
5432
5417
  var params = node.p.map(function (paramNode) { return evaluateAstNode(paramNode, contextStack); });
@@ -5440,7 +5425,7 @@ var recurSpecialExpression = {
5440
5425
 
5441
5426
  var throwSpecialExpression = {
5442
5427
  polishParse: getCommonPolishSpecialExpressionParser('throw'),
5443
- validateParameterCount: function (node) { return assertNumberOfParams(1, node); },
5428
+ paramCount: 1,
5444
5429
  evaluate: function (node, contextStack, _a) {
5445
5430
  var _b, _c;
5446
5431
  var evaluateAstNode = _a.evaluateAstNode;
@@ -5481,7 +5466,7 @@ var trySpecialExpression = {
5481
5466
  };
5482
5467
  return node;
5483
5468
  },
5484
- validateParameterCount: function (node) { return assertNumberOfParams(1, node); },
5469
+ paramCount: 1,
5485
5470
  evaluate: function (node, contextStack, _a) {
5486
5471
  var _b;
5487
5472
  var _c;
@@ -5918,8 +5903,9 @@ function evaluate(ast, contextStack) {
5918
5903
  var e_1, _a;
5919
5904
  var result = null;
5920
5905
  var safeAstNode = ast.hasDebugData ? JSON.parse(JSON.stringify(ast)) : ast;
5921
- if (safeAstNode.hasDebugData)
5906
+ if (safeAstNode.hasDebugData) {
5922
5907
  removeCommenNodes(safeAstNode);
5908
+ }
5923
5909
  try {
5924
5910
  for (var _b = __values(safeAstNode.b), _c = _b.next(); !_c.done; _c = _b.next()) {
5925
5911
  var node = _c.value;
@@ -6314,7 +6300,6 @@ function getPrecedence(operatorSign) {
6314
6300
  }
6315
6301
  }
6316
6302
  function createNamedNormalExpressionNode(name, params, token) {
6317
- var _a;
6318
6303
  var node = {
6319
6304
  t: AstNodeType.NormalExpression,
6320
6305
  n: name,
@@ -6323,7 +6308,7 @@ function createNamedNormalExpressionNode(name, params, token) {
6323
6308
  };
6324
6309
  var builtinExpression = builtin.normalExpressions[node.n];
6325
6310
  if (builtinExpression) {
6326
- (_a = builtinExpression.validate) === null || _a === void 0 ? void 0 : _a.call(builtinExpression, __assign(__assign({}, node), { p: withoutCommentNodes(node.p) }));
6311
+ assertNumberOfParams(builtinExpression.paramCount, node);
6327
6312
  }
6328
6313
  return node;
6329
6314
  }
@@ -6424,7 +6409,7 @@ var AlgebraicParser = /** @class */ (function () {
6424
6409
  AlgebraicParser.prototype.parse = function () {
6425
6410
  var nodes = [];
6426
6411
  while (!this.isAtEnd()) {
6427
- nodes.push(this.parseExpression());
6412
+ nodes.push(this.parseExpression(0, true));
6428
6413
  if (!isA_OperatorToken(this.peek(), ';')) {
6429
6414
  break;
6430
6415
  }
@@ -6432,9 +6417,10 @@ var AlgebraicParser = /** @class */ (function () {
6432
6417
  }
6433
6418
  return nodes;
6434
6419
  };
6435
- AlgebraicParser.prototype.parseExpression = function (precedence) {
6436
- var _a;
6420
+ AlgebraicParser.prototype.parseExpression = function (precedence, moduleScope) {
6421
+ var _a, _b;
6437
6422
  if (precedence === void 0) { precedence = 0; }
6423
+ if (moduleScope === void 0) { moduleScope = false; }
6438
6424
  var firstToken = this.peek();
6439
6425
  var left;
6440
6426
  if (isA_SymbolToken(firstToken)) {
@@ -6470,6 +6456,9 @@ var AlgebraicParser = /** @class */ (function () {
6470
6456
  return this.parseFunction(firstToken);
6471
6457
  }
6472
6458
  else if (isA_ReservedSymbolToken(firstToken, 'export')) {
6459
+ if (!moduleScope) {
6460
+ throw new LitsError('export is only allowed in module scope', (_a = getTokenDebugData(firstToken)) === null || _a === void 0 ? void 0 : _a.sourceCodeInfo);
6461
+ }
6473
6462
  return this.parseExport(firstToken);
6474
6463
  }
6475
6464
  left || (left = this.parseOperand());
@@ -6507,7 +6496,7 @@ var AlgebraicParser = /** @class */ (function () {
6507
6496
  operator = this.peek();
6508
6497
  }
6509
6498
  if (!left) {
6510
- throw new LitsError('Expected operand', (_a = getTokenDebugData(this.peek())) === null || _a === void 0 ? void 0 : _a.sourceCodeInfo);
6499
+ throw new LitsError('Expected operand', (_b = getTokenDebugData(this.peek())) === null || _b === void 0 ? void 0 : _b.sourceCodeInfo);
6511
6500
  }
6512
6501
  return left;
6513
6502
  };
@@ -6615,32 +6604,6 @@ var AlgebraicParser = /** @class */ (function () {
6615
6604
  return parseReservedSymbol(this.tokenStream, this.parseState);
6616
6605
  case 'RegexpShorthand':
6617
6606
  return parseRegexpShorthand(this.tokenStream, this.parseState);
6618
- case 'PolNotation': {
6619
- this.parseState.algebraic = false;
6620
- var astNodes = [];
6621
- this.advance();
6622
- do {
6623
- astNodes.push(this.parseState.parseToken(this.tokenStream, this.parseState));
6624
- } while (!isEndNotationToken(this.peek()));
6625
- this.advance();
6626
- this.parseState.algebraic = true;
6627
- if (astNodes.length === 1) {
6628
- return astNodes[0];
6629
- }
6630
- return {
6631
- t: AstNodeType.SpecialExpression,
6632
- n: 'do',
6633
- p: astNodes,
6634
- token: getTokenDebugData(token) && token,
6635
- };
6636
- }
6637
- case 'AlgNotation': {
6638
- this.advance();
6639
- var node = this.parseOperand();
6640
- assertEndNotationToken(this.peek());
6641
- this.advance();
6642
- return node;
6643
- }
6644
6607
  default:
6645
6608
  throw new LitsError("Unknown token type: ".concat(tokenType), (_b = getTokenDebugData(token)) === null || _b === void 0 ? void 0 : _b.sourceCodeInfo);
6646
6609
  }
@@ -6745,7 +6708,7 @@ var AlgebraicParser = /** @class */ (function () {
6745
6708
  p: params,
6746
6709
  token: getTokenDebugData(symbol.token) && symbol.token,
6747
6710
  };
6748
- builtin.specialExpressions[node.n].validateParameterCount(node);
6711
+ assertNumberOfParams(builtin.specialExpressions[node.n].paramCount, node);
6749
6712
  return node;
6750
6713
  }
6751
6714
  case 'fn':
@@ -6798,7 +6761,7 @@ var AlgebraicParser = /** @class */ (function () {
6798
6761
  }
6799
6762
  };
6800
6763
  AlgebraicParser.prototype.parseFunctionArguments = function () {
6801
- var _a, _b, _c, _d, _e;
6764
+ var _a, _b, _c, _d;
6802
6765
  var firstToken = this.peek();
6803
6766
  if (isA_SymbolToken(firstToken)) {
6804
6767
  this.advance();
@@ -6813,62 +6776,54 @@ var AlgebraicParser = /** @class */ (function () {
6813
6776
  }
6814
6777
  this.advance();
6815
6778
  var rest = false;
6816
- var letBindingObject;
6817
6779
  var args = [];
6818
6780
  var restArg;
6819
- while (!this.isAtEnd() && !isRParenToken(this.peek())) {
6820
- if (letBindingObject) {
6821
- throw new LitsError('Expected right parentheses', (_a = getTokenDebugData(this.peek())) === null || _a === void 0 ? void 0 : _a.sourceCodeInfo);
6822
- }
6823
- if (isLBraceToken(this.peek())) {
6824
- letBindingObject = this.parseObject();
6825
- }
6826
- else {
6827
- if (isA_OperatorToken(this.peek(), '...')) {
6828
- if (rest) {
6829
- throw new LitsError('Multiple spread operators in lambda function', (_b = getTokenDebugData(this.peek())) === null || _b === void 0 ? void 0 : _b.sourceCodeInfo);
6830
- }
6831
- this.advance();
6832
- rest = true;
6833
- }
6834
- var symbolToken = this.peek();
6835
- if (!isA_SymbolToken(symbolToken)) {
6836
- throw new LitsError('Expected symbol', (_c = getTokenDebugData(this.peek())) === null || _c === void 0 ? void 0 : _c.sourceCodeInfo);
6837
- }
6781
+ while (!this.isAtEnd() && !isRParenToken(this.peek()) && !isA_SymbolToken(this.peek(), 'let')) {
6782
+ if (isA_OperatorToken(this.peek(), '...')) {
6838
6783
  if (rest) {
6839
- restArg = symbolToken[1];
6840
- }
6841
- else {
6842
- args.push(symbolToken[1]);
6784
+ throw new LitsError('Multiple spread operators in lambda function', (_a = getTokenDebugData(this.peek())) === null || _a === void 0 ? void 0 : _a.sourceCodeInfo);
6843
6785
  }
6844
6786
  this.advance();
6787
+ rest = true;
6845
6788
  }
6846
- if (!isA_OperatorToken(this.peek(), ',') && !isRParenToken(this.peek())) {
6847
- throw new LitsError('Expected comma or closing parenthesis', (_d = getTokenDebugData(this.peek())) === null || _d === void 0 ? void 0 : _d.sourceCodeInfo);
6789
+ var symbolToken = this.peek();
6790
+ if (!isA_SymbolToken(symbolToken)) {
6791
+ throw new LitsError('Expected symbol', (_b = getTokenDebugData(this.peek())) === null || _b === void 0 ? void 0 : _b.sourceCodeInfo);
6792
+ }
6793
+ if (rest) {
6794
+ restArg = symbolToken[1];
6795
+ }
6796
+ else {
6797
+ args.push(symbolToken[1]);
6798
+ }
6799
+ this.advance();
6800
+ if (!isA_OperatorToken(this.peek(), ',') && !isRParenToken(this.peek()) && !isA_SymbolToken(this.peek(), 'let')) {
6801
+ throw new LitsError('Expected comma or closing parenthesis', (_c = getTokenDebugData(this.peek())) === null || _c === void 0 ? void 0 : _c.sourceCodeInfo);
6848
6802
  }
6849
6803
  if (isA_OperatorToken(this.peek(), ',')) {
6850
6804
  this.advance();
6851
6805
  }
6852
6806
  }
6853
6807
  var arity = restArg !== undefined ? { min: args.length } : args.length;
6808
+ // let bindings, to be able to pass on values in the context down to the body
6809
+ // This is needed since lits is dynamically scoped
6810
+ // E.g.
6811
+ // x => y => x + y // would not work, x is not available in the second lambda
6812
+ // x => (y, let x = x) => x + y // would work, x is available in the second lambda
6813
+ var bindingNodess = [];
6814
+ var token = this.peek();
6815
+ while (isA_SymbolToken(token, 'let')) {
6816
+ var letNode = this.parseLet(token, true);
6817
+ bindingNodess.push(letNode.bs[0]);
6818
+ token = this.peek();
6819
+ }
6854
6820
  if (!isRParenToken(this.peek())) {
6855
- throw new LitsError('Expected closing parenthesis', (_e = getTokenDebugData(this.peek())) === null || _e === void 0 ? void 0 : _e.sourceCodeInfo);
6821
+ throw new LitsError('Expected closing parenthesis', (_d = getTokenDebugData(this.peek())) === null || _d === void 0 ? void 0 : _d.sourceCodeInfo);
6856
6822
  }
6857
- var letBindings = letBindingObject ? arrayToPairs(letBindingObject.p) : [];
6858
6823
  var functionArguments = {
6859
6824
  m: args,
6860
6825
  r: restArg,
6861
- b: letBindings.map(function (pair) {
6862
- var key = pair[0];
6863
- var value = pair[1];
6864
- return {
6865
- t: AstNodeType.Binding,
6866
- n: key.v,
6867
- v: value,
6868
- p: [],
6869
- token: getTokenDebugData(key.token) && key.token,
6870
- };
6871
- }),
6826
+ b: bindingNodess,
6872
6827
  };
6873
6828
  this.advance();
6874
6829
  return {
@@ -7318,6 +7273,7 @@ var AlgebraicParser = /** @class */ (function () {
7318
7273
  }
7319
7274
  assertA_ReservedSymbolToken(this.peek(), 'end');
7320
7275
  this.advance();
7276
+ assertA_OperatorToken(this.peek(), ';');
7321
7277
  var fnNode = {
7322
7278
  t: AstNodeType.SpecialExpression,
7323
7279
  n: 'fn',
@@ -7480,7 +7436,7 @@ function parseObjectLitteral(tokenStream, parseState) {
7480
7436
  p: params,
7481
7437
  token: getTokenDebugData(firstToken) && firstToken,
7482
7438
  };
7483
- assertEvenNumberOfParams(node);
7439
+ assertNumberOfParams({ even: true }, node);
7484
7440
  return node;
7485
7441
  }
7486
7442
  var placeholderRegexp = /^%([1-9]\d?)?$/;
@@ -7586,7 +7542,7 @@ function parseBinding(tokenStream, parseState) {
7586
7542
  return node;
7587
7543
  }
7588
7544
  function parseNormalExpression(tokenStream, parseState) {
7589
- var _a, _b;
7545
+ var _a;
7590
7546
  var startBracketToken = tokenStream.hasDebugData ? asLParenToken(tokenStream.tokens[parseState.position]) : undefined;
7591
7547
  parseState.position += 1;
7592
7548
  var fnNode = parseState.parseToken(tokenStream, parseState);
@@ -7610,7 +7566,7 @@ function parseNormalExpression(tokenStream, parseState) {
7610
7566
  };
7611
7567
  var builtinExpression = builtin.normalExpressions[node.n];
7612
7568
  if (builtinExpression) {
7613
- (_b = builtinExpression.validate) === null || _b === void 0 ? void 0 : _b.call(builtinExpression, __assign(__assign({}, node), { p: withoutCommentNodes(node.p) }));
7569
+ assertNumberOfParams(builtinExpression.paramCount, node);
7614
7570
  }
7615
7571
  return node;
7616
7572
  }
@@ -7619,7 +7575,7 @@ function parseSpecialExpression(tokenStream, parseState) {
7619
7575
  var firstToken = asLParenToken(tokenStream.tokens[parseState.position++]);
7620
7576
  var nameToken = asP_SymbolToken(tokenStream.tokens[parseState.position++]);
7621
7577
  var expressionName = nameToken[1];
7622
- var _b = asNonUndefined(builtin.specialExpressions[expressionName], (_a = getTokenDebugData(nameToken)) === null || _a === void 0 ? void 0 : _a.sourceCodeInfo), parse = _b.polishParse, validateParameterCount = _b.validateParameterCount;
7578
+ var _b = asNonUndefined(builtin.specialExpressions[expressionName], (_a = getTokenDebugData(nameToken)) === null || _a === void 0 ? void 0 : _a.sourceCodeInfo), parse = _b.polishParse, paramCount = _b.paramCount;
7623
7579
  var node = parse(tokenStream, parseState, firstToken, {
7624
7580
  parseExpression: parseExpression,
7625
7581
  parseTokensUntilClosingBracket: parseTokensUntilClosingBracket,
@@ -7628,7 +7584,7 @@ function parseSpecialExpression(tokenStream, parseState) {
7628
7584
  parseBindings: parseBindings,
7629
7585
  parseArgument: parseArgument,
7630
7586
  });
7631
- validateParameterCount(node);
7587
+ assertNumberOfParams(paramCount, node);
7632
7588
  return node;
7633
7589
  }
7634
7590
  function parsePolishToken(tokenStream, parseState) {
@@ -7658,47 +7614,12 @@ function parsePolishToken(tokenStream, parseState) {
7658
7614
  return parseFnShorthand(tokenStream, parseState);
7659
7615
  case 'P_Comment':
7660
7616
  return parseComment(tokenStream, parseState);
7661
- case 'AlgNotation': {
7662
- parseState.position += 1;
7663
- parseState.algebraic = true;
7664
- var algebraicParser = new AlgebraicParser(tokenStream, parseState);
7665
- var nodes = algebraicParser.parse();
7666
- assertEndNotationToken(tokenStream.tokens[parseState.position++]);
7667
- parseState.algebraic = false;
7668
- if (nodes.length === 1) {
7669
- return nodes[0];
7670
- }
7671
- return {
7672
- t: AstNodeType.SpecialExpression,
7673
- n: 'do',
7674
- p: nodes,
7675
- token: nodes[0].token,
7676
- };
7677
- }
7678
- case 'PolNotation': {
7679
- var astNodes = [];
7680
- parseState.position += 1;
7681
- do {
7682
- astNodes.push(parsePolishToken(tokenStream, parseState));
7683
- } while (!isEndNotationToken(asToken(tokenStream.tokens[parseState.position])));
7684
- parseState.position += 1;
7685
- if (astNodes.length === 1) {
7686
- return astNodes[0];
7687
- }
7688
- return {
7689
- t: AstNodeType.SpecialExpression,
7690
- n: 'do',
7691
- p: astNodes,
7692
- token: astNodes[0].token,
7693
- };
7694
- }
7695
7617
  case 'P_CollectionAccessor':
7696
7618
  case 'P_Modifier':
7697
7619
  case 'RParen':
7698
7620
  case 'RBracket':
7699
7621
  case 'RBrace':
7700
7622
  case 'P_Whitespace':
7701
- case 'EndNotation':
7702
7623
  break;
7703
7624
  /* v8 ignore next 2 */
7704
7625
  default:
@@ -7708,19 +7629,24 @@ function parsePolishToken(tokenStream, parseState) {
7708
7629
  }
7709
7630
 
7710
7631
  function parse(tokenStream) {
7711
- var _a;
7712
- var safeTokenStream = removeUnnecessaryTokens(tokenStream);
7632
+ tokenStream = removeUnnecessaryTokens(tokenStream);
7633
+ var algebraic = tokenStream.algebraic;
7713
7634
  var ast = {
7714
7635
  b: [],
7715
- hasDebugData: safeTokenStream.hasDebugData,
7636
+ hasDebugData: tokenStream.hasDebugData,
7716
7637
  };
7717
7638
  var parseState = {
7718
7639
  position: 0,
7719
- algebraic: (_a = safeTokenStream.algebraic) !== null && _a !== void 0 ? _a : false,
7720
7640
  parseToken: parseToken,
7721
7641
  };
7722
- while (parseState.position < safeTokenStream.tokens.length) {
7723
- ast.b.push(parseToken(safeTokenStream, parseState));
7642
+ if (algebraic) {
7643
+ var algebraicParser = new AlgebraicParser(tokenStream, parseState);
7644
+ ast.b = algebraicParser.parse();
7645
+ }
7646
+ else {
7647
+ while (parseState.position < tokenStream.tokens.length) {
7648
+ ast.b.push(parseToken(tokenStream, parseState));
7649
+ }
7724
7650
  }
7725
7651
  return ast;
7726
7652
  }
@@ -7738,19 +7664,6 @@ function removeUnnecessaryTokens(tokenStream) {
7738
7664
  return __assign(__assign({}, tokenStream), { tokens: tokens });
7739
7665
  }
7740
7666
  function parseToken(tokenStream, parseState) {
7741
- if (parseState.algebraic) {
7742
- var algebraicParser = new AlgebraicParser(tokenStream, parseState);
7743
- var nodes = algebraicParser.parse();
7744
- if (nodes.length === 1) {
7745
- return nodes[0];
7746
- }
7747
- return {
7748
- t: AstNodeType.SpecialExpression,
7749
- n: 'do',
7750
- p: nodes,
7751
- token: nodes[0].token,
7752
- };
7753
- }
7754
7667
  return parsePolishToken(tokenStream, parseState);
7755
7668
  }
7756
7669
 
@@ -7781,15 +7694,6 @@ var tokenizeLBrace = function (input, position) {
7781
7694
  var tokenizeRBrace = function (input, position) {
7782
7695
  return tokenizeSimpleToken('RBrace', '}', input, position);
7783
7696
  };
7784
- var tokenizePolishNotation = function (input, position) {
7785
- return tokenizeSimpleToken('PolNotation', '$`', input, position);
7786
- };
7787
- var tokenizeAlgebraicNotation = function (input, position) {
7788
- return tokenizeSimpleToken('AlgNotation', '@`', input, position);
7789
- };
7790
- var tokenizeEndNotation = function (input, position) {
7791
- return tokenizeSimpleToken('EndNotation', '`', input, position);
7792
- };
7793
7697
  var tokenizeString = function (input, position) {
7794
7698
  if (input[position] !== '"')
7795
7699
  return NO_MATCH;
@@ -7842,9 +7746,6 @@ function tokenizeSimpleToken(type, value, input, position) {
7842
7746
  return NO_MATCH;
7843
7747
  }
7844
7748
  var commonTokenizers = [
7845
- tokenizePolishNotation,
7846
- tokenizeAlgebraicNotation,
7847
- tokenizeEndNotation,
7848
7749
  tokenizeLParen,
7849
7750
  tokenizeRParen,
7850
7751
  tokenizeLBracket,
@@ -8354,7 +8255,6 @@ function getSugar() {
8354
8255
 
8355
8256
  function tokenize(input, params) {
8356
8257
  var debug = !!params.debug;
8357
- var notationStack = [params.algebraic ? 'algebraic' : 'polish'];
8358
8258
  var position = 0;
8359
8259
  var tokenStream = {
8360
8260
  tokens: [],
@@ -8363,7 +8263,7 @@ function tokenize(input, params) {
8363
8263
  algebraic: !!params.algebraic,
8364
8264
  };
8365
8265
  while (position < input.length) {
8366
- var tokenizers = notationStack.at(-1) === 'algebraic' ? algebraicTokenizers : polishTokenizers;
8266
+ var tokenizers = params.algebraic ? algebraicTokenizers : polishTokenizers;
8367
8267
  var tokenDescriptor = getCurrentToken(input, position, tokenizers);
8368
8268
  var debugData = debug
8369
8269
  ? {
@@ -8380,23 +8280,8 @@ function tokenize(input, params) {
8380
8280
  addTokenDebugData(token, debugData);
8381
8281
  }
8382
8282
  tokenStream.tokens.push(token);
8383
- if (isAlgebraicNotationToken(token)) {
8384
- notationStack.push('algebraic');
8385
- }
8386
- if (isPolishNotationToken(token)) {
8387
- notationStack.push('polish');
8388
- }
8389
- if (isEndNotationToken(token)) {
8390
- notationStack.pop();
8391
- if (notationStack.length < 1) {
8392
- throw new LitsError('Unexpected end directive `.', debugData === null || debugData === void 0 ? void 0 : debugData.sourceCodeInfo);
8393
- }
8394
- }
8395
8283
  }
8396
8284
  }
8397
- if (notationStack.length > 1) {
8398
- throw new LitsError('Missing end directive `.', createSourceCodeInfo(input, position, params.filePath));
8399
- }
8400
8285
  applySugar(tokenStream);
8401
8286
  return tokenStream;
8402
8287
  }
@@ -8481,9 +8366,6 @@ function untokenizeToken(token) {
8481
8366
  case 'RBracket': return ']';
8482
8367
  case 'LBrace': return '{';
8483
8368
  case 'RBrace': return '}';
8484
- case 'PolNotation': return '$`';
8485
- case 'AlgNotation': return '@`';
8486
- case 'EndNotation': return '`';
8487
8369
  case 'P_FnShorthand': return '#';
8488
8370
  /* v8 ignore next 2 */
8489
8371
  default: