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
|
import { ASTNode, StackFrame } from "../core/common";
import { CallFn, FnPrim, GetEvaluatedChildren, EvalError } from "../core/eval";
import { ExtractNumber, 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], ExtractNumber<Idx>], Frame> }
: EvalError<`Invalid params for map: ${ToString<
GetEvaluatedChildren<Node, Frame>
>}`>;
|