@mojir/lits 2.1.0 → 2.1.2

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 (93) hide show
  1. package/README.md +392 -109
  2. package/dist/cli/cli.js +879 -946
  3. package/dist/cli/reference/api.d.ts +0 -1
  4. package/dist/cli/reference/index.d.ts +208 -208
  5. package/dist/cli/src/builtin/bindingNode.d.ts +3 -2
  6. package/dist/cli/src/builtin/index.d.ts +10 -50
  7. package/dist/cli/src/builtin/interface.d.ts +10 -17
  8. package/dist/cli/src/builtin/normalExpressions/index.d.ts +4 -1
  9. package/dist/cli/src/builtin/specialExpressionTypes.d.ts +25 -0
  10. package/dist/cli/src/builtin/specialExpressions/and.d.ts +3 -3
  11. package/dist/cli/src/builtin/specialExpressions/array.d.ts +3 -3
  12. package/dist/cli/src/builtin/specialExpressions/cond.d.ts +3 -3
  13. package/dist/cli/src/builtin/specialExpressions/def.d.ts +3 -6
  14. package/dist/cli/src/builtin/specialExpressions/defined.d.ts +5 -0
  15. package/dist/cli/src/builtin/specialExpressions/do.d.ts +3 -3
  16. package/dist/cli/src/builtin/specialExpressions/functions.d.ts +5 -13
  17. package/dist/cli/src/builtin/specialExpressions/if.d.ts +3 -3
  18. package/dist/cli/src/builtin/specialExpressions/let.d.ts +3 -6
  19. package/dist/cli/src/builtin/specialExpressions/loop.d.ts +3 -4
  20. package/dist/cli/src/builtin/specialExpressions/loops.d.ts +5 -14
  21. package/dist/cli/src/builtin/specialExpressions/object.d.ts +3 -3
  22. package/dist/cli/src/builtin/specialExpressions/or.d.ts +3 -3
  23. package/dist/cli/src/builtin/specialExpressions/qq.d.ts +3 -3
  24. package/dist/cli/src/builtin/specialExpressions/recur.d.ts +3 -3
  25. package/dist/cli/src/builtin/specialExpressions/switch.d.ts +3 -3
  26. package/dist/cli/src/builtin/specialExpressions/throw.d.ts +3 -3
  27. package/dist/cli/src/builtin/specialExpressions/try.d.ts +3 -5
  28. package/dist/cli/src/builtin/specialExpressions/unless.d.ts +3 -3
  29. package/dist/cli/src/builtin/utils.d.ts +2 -5
  30. package/dist/cli/src/constants/constants.d.ts +15 -3
  31. package/dist/cli/src/evaluator/ContextStack.d.ts +3 -3
  32. package/dist/cli/src/evaluator/functionExecutors.d.ts +3 -3
  33. package/dist/cli/src/evaluator/index.d.ts +2 -2
  34. package/dist/cli/src/evaluator/interface.d.ts +3 -3
  35. package/dist/cli/src/getUndefinedSymbols/index.d.ts +3 -3
  36. package/dist/cli/src/parser/Parser.d.ts +7 -5
  37. package/dist/cli/src/parser/types.d.ts +33 -96
  38. package/dist/cli/src/typeGuards/astNode.d.ts +19 -16
  39. package/dist/cli/src/typeGuards/index.d.ts +2 -5
  40. package/dist/cli/src/typeGuards/litsFunction.d.ts +2 -2
  41. package/dist/cli/src/utils/index.d.ts +0 -1
  42. package/dist/index.esm.js +849 -913
  43. package/dist/index.esm.js.map +1 -1
  44. package/dist/index.js +849 -913
  45. package/dist/index.js.map +1 -1
  46. package/dist/lits.iife.js +849 -913
  47. package/dist/lits.iife.js.map +1 -1
  48. package/dist/reference/api.d.ts +0 -1
  49. package/dist/reference/index.d.ts +208 -208
  50. package/dist/src/builtin/bindingNode.d.ts +3 -2
  51. package/dist/src/builtin/index.d.ts +10 -50
  52. package/dist/src/builtin/interface.d.ts +10 -17
  53. package/dist/src/builtin/normalExpressions/index.d.ts +4 -1
  54. package/dist/src/builtin/specialExpressionTypes.d.ts +25 -0
  55. package/dist/src/builtin/specialExpressions/and.d.ts +3 -3
  56. package/dist/src/builtin/specialExpressions/array.d.ts +3 -3
  57. package/dist/src/builtin/specialExpressions/cond.d.ts +3 -3
  58. package/dist/src/builtin/specialExpressions/def.d.ts +3 -6
  59. package/dist/src/builtin/specialExpressions/defined.d.ts +5 -0
  60. package/dist/src/builtin/specialExpressions/do.d.ts +3 -3
  61. package/dist/src/builtin/specialExpressions/functions.d.ts +5 -13
  62. package/dist/src/builtin/specialExpressions/if.d.ts +3 -3
  63. package/dist/src/builtin/specialExpressions/let.d.ts +3 -6
  64. package/dist/src/builtin/specialExpressions/loop.d.ts +3 -4
  65. package/dist/src/builtin/specialExpressions/loops.d.ts +5 -14
  66. package/dist/src/builtin/specialExpressions/object.d.ts +3 -3
  67. package/dist/src/builtin/specialExpressions/or.d.ts +3 -3
  68. package/dist/src/builtin/specialExpressions/qq.d.ts +3 -3
  69. package/dist/src/builtin/specialExpressions/recur.d.ts +3 -3
  70. package/dist/src/builtin/specialExpressions/switch.d.ts +3 -3
  71. package/dist/src/builtin/specialExpressions/throw.d.ts +3 -3
  72. package/dist/src/builtin/specialExpressions/try.d.ts +3 -5
  73. package/dist/src/builtin/specialExpressions/unless.d.ts +3 -3
  74. package/dist/src/builtin/utils.d.ts +2 -5
  75. package/dist/src/constants/constants.d.ts +15 -3
  76. package/dist/src/evaluator/ContextStack.d.ts +3 -3
  77. package/dist/src/evaluator/functionExecutors.d.ts +3 -3
  78. package/dist/src/evaluator/index.d.ts +2 -2
  79. package/dist/src/evaluator/interface.d.ts +3 -3
  80. package/dist/src/getUndefinedSymbols/index.d.ts +3 -3
  81. package/dist/src/parser/Parser.d.ts +7 -5
  82. package/dist/src/parser/types.d.ts +33 -96
  83. package/dist/src/typeGuards/astNode.d.ts +19 -16
  84. package/dist/src/typeGuards/index.d.ts +2 -5
  85. package/dist/src/typeGuards/litsFunction.d.ts +2 -2
  86. package/dist/src/utils/index.d.ts +0 -1
  87. package/dist/testFramework.esm.js +865 -909
  88. package/dist/testFramework.esm.js.map +1 -1
  89. package/dist/testFramework.js +865 -909
  90. package/dist/testFramework.js.map +1 -1
  91. package/package.json +1 -1
  92. package/dist/cli/src/builtin/specialExpressions/declared.d.ts +0 -5
  93. package/dist/src/builtin/specialExpressions/declared.d.ts +0 -5
@@ -1,4 +1,5 @@
1
1
  import type { Any } from '../interface';
2
- import type { AstNode, BindingNode, BindingTarget } from '../parser/types';
3
- export declare function evalueateBindingNodeValues(input: BindingNode | BindingTarget, value: Any, evaluate: (astNode: AstNode) => Any): Record<string, Any>;
2
+ import { type BindingTarget, type Node } from '../parser/types';
3
+ export declare function walkDefaults(bindingTarget: BindingTarget, onDefault: (Node: Node) => void): void;
4
+ export declare function evalueateBindingNodeValues(target: BindingTarget, value: Any, evaluate: (Node: Node) => Any): Record<string, Any>;
4
5
  export declare function getAllBindingTargetNames(bindingTarget: BindingTarget): Record<string, true>;
@@ -1,54 +1,14 @@
1
1
  import type { Builtin } from './interface';
2
- import type { AndNode } from './specialExpressions/and';
3
- import type { CondNode } from './specialExpressions/cond';
4
- import type { SwitchNode } from './specialExpressions/switch';
5
- import type { DeclaredNode } from './specialExpressions/declared';
6
- import type { DefNode } from './specialExpressions/def';
7
- import type { DoNode } from './specialExpressions/do';
8
- import type { DefnNode, FnNode, FunctionNode } from './specialExpressions/functions';
9
- import type { IfNode } from './specialExpressions/if';
10
- import type { UnlessNode } from './specialExpressions/unless';
11
- import type { LetNode } from './specialExpressions/let';
12
- import type { LoopNode } from './specialExpressions/loop';
13
- import type { DoSeqNode, ForNode } from './specialExpressions/loops';
14
- import type { OrNode } from './specialExpressions/or';
15
- import type { QqNode } from './specialExpressions/qq';
16
- import type { RecurNode } from './specialExpressions/recur';
17
- import type { ThrowNode } from './specialExpressions/throw';
18
- import type { TryNode } from './specialExpressions/try';
19
- import type { ArrayNode } from './specialExpressions/array';
20
- import type { ObjectNode } from './specialExpressions/object';
21
- declare const specialExpressions: {
22
- readonly '&&': import("./interface").BuiltinSpecialExpression<import("../interface").Any, AndNode>;
23
- readonly cond: import("./interface").BuiltinSpecialExpression<import("../interface").Any, CondNode>;
24
- readonly switch: import("./interface").BuiltinSpecialExpression<import("../interface").Any, SwitchNode>;
25
- readonly def: import("./interface").BuiltinSpecialExpression<null, DefNode>;
26
- readonly defn: import("./interface").BuiltinSpecialExpression<null, DefnNode>;
27
- readonly function: import("./interface").BuiltinSpecialExpression<null, FunctionNode>;
28
- readonly do: import("./interface").BuiltinSpecialExpression<import("../interface").Any, DoNode>;
29
- readonly doseq: import("./interface").BuiltinSpecialExpression<null, DoSeqNode>;
30
- readonly for: import("./interface").BuiltinSpecialExpression<import("../interface").Any, ForNode>;
31
- readonly fn: import("./interface").BuiltinSpecialExpression<import("../parser/types").LitsFunction, FnNode>;
32
- readonly if: import("./interface").BuiltinSpecialExpression<import("../interface").Any, IfNode>;
33
- readonly unless: import("./interface").BuiltinSpecialExpression<import("../interface").Any, UnlessNode>;
34
- readonly let: import("./interface").BuiltinSpecialExpression<import("../interface").Any, LetNode>;
35
- readonly loop: import("./interface").BuiltinSpecialExpression<import("../interface").Any, LoopNode>;
36
- readonly '||': import("./interface").BuiltinSpecialExpression<import("../interface").Any, OrNode>;
37
- readonly recur: import("./interface").BuiltinSpecialExpression<null, RecurNode>;
38
- readonly throw: import("./interface").BuiltinSpecialExpression<null, ThrowNode>;
39
- readonly try: import("./interface").BuiltinSpecialExpression<import("../interface").Any, TryNode>;
40
- readonly 'defined?': import("./interface").BuiltinSpecialExpression<boolean, DeclaredNode>;
41
- readonly '??': import("./interface").BuiltinSpecialExpression<import("../interface").Any, QqNode>;
42
- readonly array: import("./interface").BuiltinSpecialExpression<import("../interface").Any, ArrayNode>;
43
- readonly object: import("./interface").BuiltinSpecialExpression<import("../interface").Any, ObjectNode>;
44
- };
45
- export type SpecialExpressionName = keyof typeof specialExpressions;
46
- export type CommonSpecialExpressionName = keyof Pick<typeof specialExpressions, '??' | '&&' | 'cond' | 'switch' | 'defined?' | 'do' | 'if' | 'unless' | '||' | 'throw' | 'array' | 'object'>;
47
- export type BuiltinSpecialExpressions = typeof specialExpressions;
48
- export type BuiltinSpecialExpression = typeof specialExpressions[SpecialExpressionName];
49
- export type BuiltinCommonSpecialExpression = typeof specialExpressions[CommonSpecialExpressionName];
50
- export type SpecialExpressionNode = AndNode | CondNode | SwitchNode | DefNode | DefnNode | FunctionNode | DoNode | DoSeqNode | ForNode | FnNode | IfNode | UnlessNode | LetNode | LoopNode | OrNode | RecurNode | ThrowNode | TryNode | DeclaredNode | QqNode | ArrayNode | ObjectNode;
2
+ import { specialExpressionTypes } from './specialExpressionTypes';
3
+ export declare const specialExpressions: readonly [import("./interface").BuiltinSpecialExpression<import("../interface").Any, import("./specialExpressions/qq").QqNode>, import("./interface").BuiltinSpecialExpression<import("../interface").Any, import("./specialExpressions/and").AndNode>, import("./interface").BuiltinSpecialExpression<import("../interface").Any, import("./specialExpressions/or").OrNode>, import("./interface").BuiltinSpecialExpression<import("../interface").Any, import("./specialExpressions/array").ArrayNode>, import("./interface").BuiltinSpecialExpression<import("../interface").Any, import("./specialExpressions/cond").CondNode>, import("./interface").BuiltinSpecialExpression<null, import("./specialExpressions/def").DefNode>, import("./interface").BuiltinSpecialExpression<boolean, import("./specialExpressions/defined").DefinedNode>, import("./interface").BuiltinSpecialExpression<null, import("./specialExpressions/functions").DefnNode>, import("./interface").BuiltinSpecialExpression<import("../interface").Any, import("./specialExpressions/do").DoNode>, import("./interface").BuiltinSpecialExpression<null, import("./specialExpressions/loops").DoSeqNode>, import("./interface").BuiltinSpecialExpression<import("../parser/types").LitsFunction, import("./specialExpressions/functions").FnNode>, import("./interface").BuiltinSpecialExpression<import("../interface").Any, import("./specialExpressions/loops").ForNode>, import("./interface").BuiltinSpecialExpression<null, import("./specialExpressions/functions").FunctionNode>, import("./interface").BuiltinSpecialExpression<import("../interface").Any, import("./specialExpressions/if").IfNode>, import("./interface").BuiltinSpecialExpression<import("../interface").Any, import("./specialExpressions/let").LetNode>, import("./interface").BuiltinSpecialExpression<import("../interface").Any, import("./specialExpressions/loop").LoopNode>, import("./interface").BuiltinSpecialExpression<import("../interface").Any, import("./specialExpressions/object").ObjectNode>, import("./interface").BuiltinSpecialExpression<null, import("./specialExpressions/recur").RecurNode>, import("./interface").BuiltinSpecialExpression<import("../interface").Any, import("./specialExpressions/switch").SwitchNode>, import("./interface").BuiltinSpecialExpression<null, import("./specialExpressions/throw").ThrowNode>, import("./interface").BuiltinSpecialExpression<import("../interface").Any, import("./specialExpressions/try").TryNode>, import("./interface").BuiltinSpecialExpression<import("../interface").Any, import("./specialExpressions/unless").UnlessNode>];
4
+ export type SpecialExpressions = typeof specialExpressions;
5
+ export type SpecialExpression = SpecialExpressions[number];
6
+ export type SpecialExpressionName = keyof typeof specialExpressionTypes;
7
+ export type CommonSpecialExpressionType = [
8
+ typeof specialExpressionTypes['??'] | typeof specialExpressionTypes['&&'] | typeof specialExpressionTypes['cond'] | typeof specialExpressionTypes['switch'] | typeof specialExpressionTypes['defined?'] | typeof specialExpressionTypes['do'] | typeof specialExpressionTypes['if'] | typeof specialExpressionTypes['unless'] | typeof specialExpressionTypes['||'] | typeof specialExpressionTypes['throw'] | typeof specialExpressionTypes['array'] | typeof specialExpressionTypes['object']
9
+ ];
10
+ export type SpecialExpressionType = typeof specialExpressionTypes[SpecialExpressionName];
51
11
  export declare const builtin: Builtin;
52
12
  export declare const normalExpressionKeys: string[];
53
13
  export declare const specialExpressionKeys: string[];
54
- export {};
14
+ export declare const specialExpressionNameSet: Set<string>;
@@ -1,10 +1,10 @@
1
- import type { GetUndefinedSymbols, UndefinedSymbols } from '../getUndefinedSymbols';
2
1
  import type { ContextStack } from '../evaluator/ContextStack';
3
- import type { EvaluateAstNode, ExecuteFunction } from '../evaluator/interface';
2
+ import type { EvaluateNode, ExecuteFunction } from '../evaluator/interface';
3
+ import type { GetUndefinedSymbols, UndefinedSymbols } from '../getUndefinedSymbols';
4
4
  import type { Any, Arr } from '../interface';
5
- import type { ParseArgument, ParseBinding, ParseBindings, ParseExpression, ParseToken, ParseTokensUntilClosingBracket } from '../parser/types';
5
+ import type { SpecialExpressionNode } from '../parser/types';
6
6
  import type { SourceCodeInfo } from '../tokenizer/token';
7
- import type { BuiltinSpecialExpressions, SpecialExpressionNode } from '.';
7
+ import type { SpecialExpressions } from '.';
8
8
  export type Count = number | {
9
9
  min?: number;
10
10
  max?: number;
@@ -14,22 +14,15 @@ export type Count = number | {
14
14
  export type NormalExpressionEvaluator<T> = (params: Arr, sourceCodeInfo: SourceCodeInfo | undefined, contextStack: ContextStack, { executeFunction }: {
15
15
  executeFunction: ExecuteFunction;
16
16
  }) => T;
17
- interface BuiltinNormalExpression<T> {
17
+ export interface BuiltinNormalExpression<T> {
18
18
  evaluate: NormalExpressionEvaluator<T>;
19
19
  paramCount: Count;
20
20
  aliases?: string[];
21
21
  }
22
- export interface ParserHelpers {
23
- parseExpression: ParseExpression;
24
- parseTokensUntilClosingBracket: ParseTokensUntilClosingBracket;
25
- parseToken: ParseToken;
26
- parseBinding: ParseBinding;
27
- parseBindings: ParseBindings;
28
- parseArgument: ParseArgument;
29
- }
30
22
  export type BuiltinNormalExpressions = Record<string, BuiltinNormalExpression<Any>>;
23
+ export type BuiltingAllNormalExpressions = BuiltinNormalExpression<Any>[];
31
24
  export interface EvaluateHelpers {
32
- evaluateAstNode: EvaluateAstNode;
25
+ evaluateNode: EvaluateNode;
33
26
  builtin: Builtin;
34
27
  getUndefinedSymbols: GetUndefinedSymbols;
35
28
  }
@@ -39,11 +32,11 @@ export interface BuiltinSpecialExpression<T, N extends SpecialExpressionNode> {
39
32
  getUndefinedSymbols: (node: N, contextStack: ContextStack, params: {
40
33
  getUndefinedSymbols: GetUndefinedSymbols;
41
34
  builtin: Builtin;
42
- evaluateAstNode: EvaluateAstNode;
35
+ evaluateNode: EvaluateNode;
43
36
  }) => UndefinedSymbols;
44
37
  }
45
38
  export interface Builtin {
46
39
  normalExpressions: BuiltinNormalExpressions;
47
- specialExpressions: BuiltinSpecialExpressions;
40
+ allNormalExpressions: BuiltingAllNormalExpressions;
41
+ specialExpressions: SpecialExpressions;
48
42
  }
49
- export {};
@@ -1,2 +1,5 @@
1
- import type { BuiltinNormalExpressions } from '../interface';
1
+ import type { BuiltinNormalExpression, BuiltinNormalExpressions } from '../interface';
2
+ import type { Any } from '../../interface';
2
3
  export declare const normalExpressions: BuiltinNormalExpressions;
4
+ export declare const normalExpressionTypes: Record<string, number>;
5
+ export declare const allNormalExpressions: BuiltinNormalExpression<Any>[];
@@ -0,0 +1,25 @@
1
+ export declare const specialExpressionTypes: {
2
+ readonly '??': 0;
3
+ readonly '&&': 1;
4
+ readonly '||': 2;
5
+ readonly array: 3;
6
+ readonly cond: 4;
7
+ readonly '0_def': 5;
8
+ readonly 'defined?': 6;
9
+ readonly '0_defn': 7;
10
+ readonly do: 8;
11
+ readonly doseq: 9;
12
+ readonly '0_fn': 10;
13
+ readonly for: 11;
14
+ readonly function: 12;
15
+ readonly if: 13;
16
+ readonly let: 14;
17
+ readonly loop: 15;
18
+ readonly object: 16;
19
+ readonly recur: 17;
20
+ readonly switch: 18;
21
+ readonly throw: 19;
22
+ readonly try: 20;
23
+ readonly unless: 21;
24
+ };
25
+ export type SpecialExpressionTypes = typeof specialExpressionTypes;
@@ -1,6 +1,6 @@
1
1
  import type { Any } from '../../interface';
2
- import type { CommonSpecialExpressionNode } from '../../parser/types';
2
+ import type { Node, SpecialExpressionNode } from '../../parser/types';
3
3
  import type { BuiltinSpecialExpression } from '../interface';
4
- export interface AndNode extends CommonSpecialExpressionNode<'&&'> {
5
- }
4
+ import type { specialExpressionTypes } from '../specialExpressionTypes';
5
+ export type AndNode = SpecialExpressionNode<[typeof specialExpressionTypes['&&'], Node[]]>;
6
6
  export declare const andSpecialExpression: BuiltinSpecialExpression<Any, AndNode>;
@@ -1,6 +1,6 @@
1
1
  import type { Any } from '../../interface';
2
- import type { CommonSpecialExpressionNode } from '../../parser/types';
2
+ import type { Node, SpecialExpressionNode } from '../../parser/types';
3
3
  import type { BuiltinSpecialExpression } from '../interface';
4
- export interface ArrayNode extends CommonSpecialExpressionNode<'array'> {
5
- }
4
+ import type { specialExpressionTypes } from '../specialExpressionTypes';
5
+ export type ArrayNode = SpecialExpressionNode<[typeof specialExpressionTypes['array'], Node[]]>;
6
6
  export declare const arraySpecialExpression: BuiltinSpecialExpression<Any, ArrayNode>;
@@ -1,6 +1,6 @@
1
1
  import type { Any } from '../../interface';
2
- import type { CommonSpecialExpressionNode } from '../../parser/types';
2
+ import type { Node, SpecialExpressionNode } from '../../parser/types';
3
3
  import type { BuiltinSpecialExpression } from '../interface';
4
- export interface CondNode extends CommonSpecialExpressionNode<'cond'> {
5
- }
4
+ import type { specialExpressionTypes } from '../specialExpressionTypes';
5
+ export type CondNode = SpecialExpressionNode<[typeof specialExpressionTypes['cond'], [Node, Node][]]>;
6
6
  export declare const condSpecialExpression: BuiltinSpecialExpression<Any, CondNode>;
@@ -1,8 +1,5 @@
1
- import type { BindingNode, GenericNode } from '../../parser/types';
1
+ import type { BindingNode, SpecialExpressionNode } from '../../parser/types';
2
2
  import type { BuiltinSpecialExpression } from '../interface';
3
- export interface DefNode extends GenericNode {
4
- name: 'def';
5
- type: 'SpecialExpression';
6
- bindingNode: BindingNode;
7
- }
3
+ import type { specialExpressionTypes } from '../specialExpressionTypes';
4
+ export type DefNode = SpecialExpressionNode<[typeof specialExpressionTypes['0_def'], BindingNode]>;
8
5
  export declare const defSpecialExpression: BuiltinSpecialExpression<null, DefNode>;
@@ -0,0 +1,5 @@
1
+ import type { SpecialExpressionNode, SymbolNode } from '../../parser/types';
2
+ import type { BuiltinSpecialExpression } from '../interface';
3
+ import type { specialExpressionTypes } from '../specialExpressionTypes';
4
+ export type DefinedNode = SpecialExpressionNode<[typeof specialExpressionTypes['defined?'], SymbolNode]>;
5
+ export declare const definedSpecialExpression: BuiltinSpecialExpression<boolean, DefinedNode>;
@@ -1,6 +1,6 @@
1
1
  import type { Any } from '../../interface';
2
- import type { CommonSpecialExpressionNode } from '../../parser/types';
2
+ import type { Node, SpecialExpressionNode } from '../../parser/types';
3
3
  import type { BuiltinSpecialExpression } from '../interface';
4
- export interface DoNode extends CommonSpecialExpressionNode<'do'> {
5
- }
4
+ import type { specialExpressionTypes } from '../specialExpressionTypes';
5
+ export type DoNode = SpecialExpressionNode<[typeof specialExpressionTypes['do'], Node[]]>;
6
6
  export declare const doSpecialExpression: BuiltinSpecialExpression<Any, DoNode>;
@@ -1,18 +1,10 @@
1
- import type { AstNode, CommonSpecialExpressionNode, LitsFunction, SymbolNode } from '../../parser/types';
1
+ import type { LitsFunction, SpecialExpressionNode, SymbolNode } from '../../parser/types';
2
2
  import type { BuiltinSpecialExpression } from '../interface';
3
3
  import type { Function } from '../utils';
4
- export interface DefnNode extends CommonSpecialExpressionNode<'defn'> {
5
- functionName: SymbolNode;
6
- function: Function;
7
- }
8
- export interface FunctionNode extends CommonSpecialExpressionNode<'function'> {
9
- functionName: SymbolNode;
10
- function: Function;
11
- }
12
- export interface FnNode extends CommonSpecialExpressionNode<'fn'> {
13
- params: AstNode[];
14
- function: Function;
15
- }
4
+ import type { specialExpressionTypes } from '../specialExpressionTypes';
5
+ export type DefnNode = SpecialExpressionNode<[typeof specialExpressionTypes['0_defn'], SymbolNode, Function]>;
6
+ export type FunctionNode = SpecialExpressionNode<[typeof specialExpressionTypes['function'], SymbolNode, Function]>;
7
+ export type FnNode = SpecialExpressionNode<[typeof specialExpressionTypes['0_fn'], Function]>;
16
8
  export declare const functionSpecialExpression: BuiltinSpecialExpression<null, FunctionNode>;
17
9
  export declare const defnSpecialExpression: BuiltinSpecialExpression<null, DefnNode>;
18
10
  export declare const fnSpecialExpression: BuiltinSpecialExpression<LitsFunction, FnNode>;
@@ -1,6 +1,6 @@
1
1
  import type { Any } from '../../interface';
2
- import type { CommonSpecialExpressionNode } from '../../parser/types';
2
+ import type { Node, SpecialExpressionNode } from '../../parser/types';
3
3
  import type { BuiltinSpecialExpression } from '../interface';
4
- export interface IfNode extends CommonSpecialExpressionNode<'if'> {
5
- }
4
+ import type { specialExpressionTypes } from '../specialExpressionTypes';
5
+ export type IfNode = SpecialExpressionNode<[typeof specialExpressionTypes['if'], [Node, Node, Node?]]>;
6
6
  export declare const ifSpecialExpression: BuiltinSpecialExpression<Any, IfNode>;
@@ -1,9 +1,6 @@
1
1
  import type { Any } from '../../interface';
2
- import type { BindingNode, GenericNode } from '../../parser/types';
2
+ import type { BindingNode, SpecialExpressionNode } from '../../parser/types';
3
3
  import type { BuiltinSpecialExpression } from '../interface';
4
- export interface LetNode extends GenericNode {
5
- type: 'SpecialExpression';
6
- bindingNode: BindingNode;
7
- name: 'let';
8
- }
4
+ import type { specialExpressionTypes } from '../specialExpressionTypes';
5
+ export type LetNode = SpecialExpressionNode<[typeof specialExpressionTypes['let'], BindingNode]>;
9
6
  export declare const letSpecialExpression: BuiltinSpecialExpression<Any, LetNode>;
@@ -1,7 +1,6 @@
1
1
  import type { Any } from '../../interface';
2
- import type { BindingNode, CommonSpecialExpressionNode } from '../../parser/types';
2
+ import type { BindingNode, Node, SpecialExpressionNode } from '../../parser/types';
3
3
  import type { BuiltinSpecialExpression } from '../interface';
4
- export interface LoopNode extends CommonSpecialExpressionNode<'loop'> {
5
- bindingNodes: BindingNode[];
6
- }
4
+ import type { specialExpressionTypes } from '../specialExpressionTypes';
5
+ export type LoopNode = SpecialExpressionNode<[typeof specialExpressionTypes['loop'], BindingNode[], Node[]]>;
7
6
  export declare const loopSpecialExpression: BuiltinSpecialExpression<Any, LoopNode>;
@@ -1,18 +1,9 @@
1
1
  import type { Any } from '../../interface';
2
- import type { AstNode, BindingNode, CommonSpecialExpressionNode } from '../../parser/types';
2
+ import type { BindingNode, Node, SpecialExpressionNode } from '../../parser/types';
3
3
  import type { BuiltinSpecialExpression } from '../interface';
4
- export interface ForNode extends CommonSpecialExpressionNode<'for'> {
5
- l: LoopBindingNode[];
6
- }
7
- export interface DoSeqNode extends CommonSpecialExpressionNode<'doseq'> {
8
- l: LoopBindingNode[];
9
- }
10
- export interface LoopBindingNode {
11
- b: BindingNode;
12
- m: Array<'&let' | '&when' | '&while'>;
13
- l?: BindingNode[];
14
- wn?: AstNode;
15
- we?: AstNode;
16
- }
4
+ import type { specialExpressionTypes } from '../specialExpressionTypes';
5
+ export type LoopBindingNode = [BindingNode, BindingNode[], Node?, Node?];
6
+ export type ForNode = SpecialExpressionNode<[typeof specialExpressionTypes['for'], LoopBindingNode[], Node[]]>;
7
+ export type DoSeqNode = SpecialExpressionNode<[typeof specialExpressionTypes['doseq'], LoopBindingNode[], Node[]]>;
17
8
  export declare const forSpecialExpression: BuiltinSpecialExpression<Any, ForNode>;
18
9
  export declare const doseqSpecialExpression: BuiltinSpecialExpression<null, DoSeqNode>;
@@ -1,6 +1,6 @@
1
1
  import type { Any } from '../../interface';
2
- import type { CommonSpecialExpressionNode } from '../../parser/types';
2
+ import type { Node, SpecialExpressionNode } from '../../parser/types';
3
3
  import type { BuiltinSpecialExpression } from '../interface';
4
- export interface ObjectNode extends CommonSpecialExpressionNode<'object'> {
5
- }
4
+ import type { specialExpressionTypes } from '../specialExpressionTypes';
5
+ export type ObjectNode = SpecialExpressionNode<[typeof specialExpressionTypes['object'], Node[]]>;
6
6
  export declare const objectSpecialExpression: BuiltinSpecialExpression<Any, ObjectNode>;
@@ -1,6 +1,6 @@
1
1
  import type { Any } from '../../interface';
2
- import type { CommonSpecialExpressionNode } from '../../parser/types';
2
+ import type { Node, SpecialExpressionNode } from '../../parser/types';
3
3
  import type { BuiltinSpecialExpression } from '../interface';
4
- export interface OrNode extends CommonSpecialExpressionNode<'||'> {
5
- }
4
+ import type { specialExpressionTypes } from '../specialExpressionTypes';
5
+ export type OrNode = SpecialExpressionNode<[typeof specialExpressionTypes['||'], Node[]]>;
6
6
  export declare const orSpecialExpression: BuiltinSpecialExpression<Any, OrNode>;
@@ -1,6 +1,6 @@
1
1
  import type { Any } from '../../interface';
2
- import type { CommonSpecialExpressionNode } from '../../parser/types';
2
+ import type { Node, SpecialExpressionNode } from '../../parser/types';
3
3
  import type { BuiltinSpecialExpression } from '../interface';
4
- export interface QqNode extends CommonSpecialExpressionNode<'??'> {
5
- }
4
+ import type { specialExpressionTypes } from '../specialExpressionTypes';
5
+ export type QqNode = SpecialExpressionNode<[typeof specialExpressionTypes['??'], [Node, Node | undefined]]>;
6
6
  export declare const qqSpecialExpression: BuiltinSpecialExpression<Any, QqNode>;
@@ -1,5 +1,5 @@
1
- import type { CommonSpecialExpressionNode } from '../../parser/types';
1
+ import type { Node, SpecialExpressionNode } from '../../parser/types';
2
2
  import type { BuiltinSpecialExpression } from '../interface';
3
- export interface RecurNode extends CommonSpecialExpressionNode<'recur'> {
4
- }
3
+ import type { specialExpressionTypes } from '../specialExpressionTypes';
4
+ export type RecurNode = SpecialExpressionNode<[typeof specialExpressionTypes['recur'], Node[]]>;
5
5
  export declare const recurSpecialExpression: BuiltinSpecialExpression<null, RecurNode>;
@@ -1,6 +1,6 @@
1
1
  import type { Any } from '../../interface';
2
- import type { CommonSpecialExpressionNode } from '../../parser/types';
2
+ import type { Node, SpecialExpressionNode } from '../../parser/types';
3
3
  import type { BuiltinSpecialExpression } from '../interface';
4
- export interface SwitchNode extends CommonSpecialExpressionNode<'switch'> {
5
- }
4
+ import type { specialExpressionTypes } from '../specialExpressionTypes';
5
+ export type SwitchNode = SpecialExpressionNode<[typeof specialExpressionTypes['switch'], Node, [Node, Node][]]>;
6
6
  export declare const switchSpecialExpression: BuiltinSpecialExpression<Any, SwitchNode>;
@@ -1,5 +1,5 @@
1
- import type { CommonSpecialExpressionNode } from '../../parser/types';
1
+ import type { Node, SpecialExpressionNode } from '../../parser/types';
2
2
  import type { BuiltinSpecialExpression } from '../interface';
3
- export interface ThrowNode extends CommonSpecialExpressionNode<'throw'> {
4
- }
3
+ import type { specialExpressionTypes } from '../specialExpressionTypes';
4
+ export type ThrowNode = SpecialExpressionNode<[typeof specialExpressionTypes['throw'], Node]>;
5
5
  export declare const throwSpecialExpression: BuiltinSpecialExpression<null, ThrowNode>;
@@ -1,8 +1,6 @@
1
1
  import type { Any } from '../../interface';
2
- import type { AstNode, CommonSpecialExpressionNode, SymbolNode } from '../../parser/types';
2
+ import type { Node, SpecialExpressionNode, SymbolNode } from '../../parser/types';
3
3
  import type { BuiltinSpecialExpression } from '../interface';
4
- export interface TryNode extends CommonSpecialExpressionNode<'try'> {
5
- e: SymbolNode | undefined;
6
- ce: AstNode;
7
- }
4
+ import type { specialExpressionTypes } from '../specialExpressionTypes';
5
+ export type TryNode = SpecialExpressionNode<[typeof specialExpressionTypes['try'], Node, SymbolNode | undefined, Node]>;
8
6
  export declare const trySpecialExpression: BuiltinSpecialExpression<Any, TryNode>;
@@ -1,6 +1,6 @@
1
1
  import type { Any } from '../../interface';
2
- import type { CommonSpecialExpressionNode } from '../../parser/types';
2
+ import type { Node, SpecialExpressionNode } from '../../parser/types';
3
3
  import type { BuiltinSpecialExpression } from '../interface';
4
- export interface UnlessNode extends CommonSpecialExpressionNode<'unless'> {
5
- }
4
+ import type { specialExpressionTypes } from '../specialExpressionTypes';
5
+ export type UnlessNode = SpecialExpressionNode<[typeof specialExpressionTypes['unless'], [Node, Node, Node?]]>;
6
6
  export declare const unlessSpecialExpression: BuiltinSpecialExpression<Any, UnlessNode>;
@@ -1,9 +1,6 @@
1
1
  import type { ContextStack } from '../evaluator/ContextStack';
2
- import type { AstNode, BindingTarget } from '../parser/types';
2
+ import type { BindingTarget, Node } from '../parser/types';
3
3
  import type { SourceCodeInfo } from '../tokenizer/token';
4
4
  import type { Builtin } from './interface';
5
- export interface Function {
6
- arguments: BindingTarget[];
7
- body: AstNode[];
8
- }
5
+ export type Function = [BindingTarget[], Node[]];
9
6
  export declare function assertNameNotDefined<T>(name: T, contextStack: ContextStack, builtin: Builtin, sourceCodeInfo?: SourceCodeInfo): asserts name is T;
@@ -1,6 +1,18 @@
1
- export declare const astNodeTypeNames: readonly ["Number", "String", "NormalExpression", "SpecialExpression", "Symbol", "Modifier", "ReservedSymbol", "Binding", "Argument", "Partial", "Comment", "Spread"];
2
- export type AstNodeType = typeof astNodeTypeNames[number];
3
- export declare function isAstNodeType(type: unknown): type is AstNodeType;
1
+ export declare const NodeTypes: {
2
+ readonly Number: 1;
3
+ readonly String: 2;
4
+ readonly NormalExpression: 3;
5
+ readonly SpecialExpression: 4;
6
+ readonly UserDefinedSymbol: 5;
7
+ readonly NormalBuiltinSymbol: 6;
8
+ readonly SpecialBuiltinSymbol: 7;
9
+ readonly ReservedSymbol: 8;
10
+ readonly Binding: 9;
11
+ readonly Spread: 10;
12
+ };
13
+ export type NodeType = typeof NodeTypes[keyof typeof NodeTypes];
14
+ export declare function getNodeTypeName(type: NodeType): keyof typeof NodeTypes;
15
+ export declare function isNodeType(type: unknown): type is NodeType;
4
16
  declare const functionTypes: readonly ["UserDefined", "Partial", "Comp", "Constantly", "Juxt", "Complement", "EveryPred", "SomePred", "Fnull", "Builtin", "NativeJsFunction"];
5
17
  export type FunctionType = typeof functionTypes[number];
6
18
  export declare function isFunctionType(type: unknown): type is FunctionType;
@@ -1,6 +1,6 @@
1
1
  import type { Any } from '../interface';
2
2
  import type { ContextParams, LazyValue } from '../Lits/Lits';
3
- import type { NativeJsFunction, SymbolNode } from '../parser/types';
3
+ import type { NativeJsFunction, SymbolNode, UserDefinedSymbolNode } from '../parser/types';
4
4
  import type { Context, LookUpResult } from './interface';
5
5
  export type ContextStack = ContextStackImpl;
6
6
  export declare class ContextStackImpl {
@@ -20,7 +20,7 @@ export declare class ContextStackImpl {
20
20
  exportValues(values: Record<string, Any>): void;
21
21
  addValues(values: Record<string, Any>): void;
22
22
  getValue(name: string): unknown;
23
- lookUp(node: SymbolNode): LookUpResult;
24
- evaluateName(node: SymbolNode): Any;
23
+ lookUp(node: UserDefinedSymbolNode): LookUpResult;
24
+ evaluateSymbol(node: SymbolNode): Any;
25
25
  }
26
26
  export declare function createContextStack(params?: ContextParams): ContextStack;
@@ -1,10 +1,10 @@
1
1
  import type { Any, Arr } from '../interface';
2
- import type { LitsFunctionType } from '../parser/types';
2
+ import { type LitsFunctionType } from '../parser/types';
3
3
  import type { SourceCodeInfo } from '../tokenizer/token';
4
4
  import type { ContextStack } from './ContextStack';
5
- import type { EvaluateAstNode, ExecuteFunction } from './interface';
5
+ import type { EvaluateNode, ExecuteFunction } from './interface';
6
6
  type FunctionExecutors = Record<LitsFunctionType, (fn: any, params: Arr, sourceCodeInfo: SourceCodeInfo | undefined, contextStack: ContextStack, helpers: {
7
- evaluateAstNode: EvaluateAstNode;
7
+ evaluateNode: EvaluateNode;
8
8
  executeFunction: ExecuteFunction;
9
9
  }) => Any>;
10
10
  export declare const functionExecutors: FunctionExecutors;
@@ -1,5 +1,5 @@
1
- import type { Ast, AstNode } from '../parser/types';
2
1
  import type { Any } from '../interface';
2
+ import type { Ast, Node } from '../parser/types';
3
3
  import type { ContextStack } from './ContextStack';
4
4
  export declare function evaluate(ast: Ast, contextStack: ContextStack): Any;
5
- export declare function evaluateAstNode(node: AstNode, contextStack: ContextStack): Any;
5
+ export declare function evaluateNode(node: Node, contextStack: ContextStack): Any;
@@ -1,12 +1,12 @@
1
1
  import type { Any, Arr } from '../interface';
2
- import type { AstNode, BuiltinFunction } from '../parser/types';
2
+ import type { Node } from '../parser/types';
3
3
  import type { SourceCodeInfo } from '../tokenizer/token';
4
4
  import type { ContextStack } from './ContextStack';
5
5
  export interface ContextEntry {
6
6
  value: Any;
7
7
  }
8
8
  export type Context = Record<string, ContextEntry>;
9
- export type EvaluateAstNode = (node: AstNode, contextStack: ContextStack) => Any;
9
+ export type EvaluateNode = (node: Node, contextStack: ContextStack) => Any;
10
10
  export type ExecuteFunction = (fn: Any, params: Arr, contextStack: ContextStack, sourceCodeInfo?: SourceCodeInfo) => Any;
11
- export type LookUpResult = ContextEntry | BuiltinFunction | null;
11
+ export type LookUpResult = ContextEntry | null;
12
12
  export declare function isContextEntry(value: unknown): value is ContextEntry;
@@ -1,7 +1,7 @@
1
1
  import type { Builtin } from '../builtin/interface';
2
2
  import type { ContextStack } from '../evaluator/ContextStack';
3
- import type { EvaluateAstNode } from '../evaluator/interface';
4
- import type { Ast, AstNode } from '../parser/types';
3
+ import type { EvaluateNode } from '../evaluator/interface';
4
+ import type { Ast, Node } from '../parser/types';
5
5
  export type UndefinedSymbols = Set<string>;
6
6
  export declare const getUndefinedSymbols: GetUndefinedSymbols;
7
- export type GetUndefinedSymbols = (ast: Ast | AstNode[], contextStack: ContextStack, builtin: Builtin, evaluateAstNode: EvaluateAstNode) => UndefinedSymbols;
7
+ export type GetUndefinedSymbols = (ast: Ast | Node[], contextStack: ContextStack, builtin: Builtin, evaluateNode: EvaluateNode) => UndefinedSymbols;
@@ -1,11 +1,11 @@
1
1
  import type { CondNode } from '../builtin/specialExpressions/cond';
2
- import type { FunctionNode } from '../builtin/specialExpressions/functions';
2
+ import type { FnNode, FunctionNode } from '../builtin/specialExpressions/functions';
3
3
  import type { IfNode } from '../builtin/specialExpressions/if';
4
4
  import type { SwitchNode } from '../builtin/specialExpressions/switch';
5
5
  import type { UnlessNode } from '../builtin/specialExpressions/unless';
6
- import type { TokenStream } from '../tokenizer/tokenize';
7
6
  import type { ReservedSymbolToken, SymbolToken } from '../tokenizer/token';
8
- import type { AstNode, BindingTarget, ParseState } from './types';
7
+ import type { TokenStream } from '../tokenizer/tokenize';
8
+ import { type BindingTarget, type Node, type ParseState } from './types';
9
9
  export declare class Parser {
10
10
  private readonly tokenStream;
11
11
  private parseState;
@@ -13,14 +13,14 @@ export declare class Parser {
13
13
  private peek;
14
14
  private peekAhead;
15
15
  private advance;
16
- parse(): AstNode[];
16
+ parse(): Node[];
17
17
  private parseExpression;
18
18
  private parseOperand;
19
19
  private parseOperandPart;
20
20
  private parseObject;
21
21
  private parseArray;
22
22
  private parseFunctionCall;
23
- parseLambdaFunction(): AstNode | null;
23
+ parseLambdaFunction(): FnNode | null;
24
24
  parseFunctionArguments(): BindingTarget[];
25
25
  private parseShorthandLamdaFunction;
26
26
  private parseOptionalDefaulValue;
@@ -39,6 +39,8 @@ export declare class Parser {
39
39
  private isAtEnd;
40
40
  private isAtExpressionEnd;
41
41
  private parseExport;
42
+ private stringToSymbolNode;
43
+ stringFromQuotedSymbol(value: string): string;
42
44
  private parseSymbol;
43
45
  private parseReservedSymbol;
44
46
  private parseNumber;