1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
import { ASTNode } from "../core/common";
import {
CallFn,
FnPrim,
GetEvaluatedChildren,
StackFrame,
EvalError,
} from "../core/eval";
import { ToString } from "../util";
export type SBUILTIN_Call<
Node extends ASTNode,
Frame extends StackFrame
> = GetEvaluatedChildren<Node, Frame> extends [
infer Fn extends FnPrim,
...infer Values extends readonly any[]
]
? CallFn<Fn, Values, Frame>
: EvalError<`Invalid params for function call: ${ToString<
GetEvaluatedChildren<Node, Frame>
>}`>;
export type SBUILTIN_Map<
Node extends ASTNode,
Frame extends StackFrame
> = GetEvaluatedChildren<Node, Frame> extends [
infer Arr extends readonly any[],
infer Fn extends FnPrim
]
? { [Idx in keyof Arr]: CallFn<Fn, [Arr[Idx]], Frame> }
: EvalError<`Invalid params for map: ${ToString<
GetEvaluatedChildren<Node, Frame>
>}`>;
|