import { ASTNode, StackFrame } from "../core/common"; import { CallFn, FnPrim, GetEvaluatedChildren, EvalError } from "../core/eval"; import { ToString } from "../util"; export type SBUILTIN_Call< Node extends ASTNode, Frame extends StackFrame > = GetEvaluatedChildren extends [ infer Fn extends FnPrim, ...infer Values extends readonly any[] ] ? CallFn : EvalError<`Invalid params for function call: ${ToString< GetEvaluatedChildren >}`>; export type SBUILTIN_Map< Node extends ASTNode, Frame extends StackFrame > = GetEvaluatedChildren extends [ infer Arr extends readonly any[], infer Fn extends FnPrim ] ? { [Idx in keyof Arr]: CallFn } : EvalError<`Invalid params for map: ${ToString< GetEvaluatedChildren >}`>;