UNPKG

@thi.ng/shader-ast

Version:

DSL to define shader code in TypeScript and cross-compile to GLSL, JS and other targets

41 lines 4.96 kB
import type { Nullable } from "@thi.ng/api"; import type { Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, FnBody0, FnBody1, FnBody2, FnBody3, FnBody4, FnBody5, FnBody6, FnBody7, FnBody8 } from "../api/function.js"; import type { FnCall, FuncReturn, TaggedFn0, TaggedFn1, TaggedFn2, TaggedFn3, TaggedFn4, TaggedFn5, TaggedFn6, TaggedFn7, TaggedFn8, Term } from "../api/nodes.js"; import type { Type } from "../api/types.js"; /** * Defines a new function with up to 8 typed checked arguments. * * @param type - return type * @param name - function name * @param args - arg types / names / opts * @param body - function body closure */ export declare function defn<T extends Type>(type: T, name: Nullable<string>, args: [], body: FnBody0): TaggedFn0<T>; export declare function defn<T extends Type, A extends Type>(type: T, name: Nullable<string>, args: Arg1<A>, body: FnBody1<A>): TaggedFn1<A, T>; export declare function defn<T extends Type, A extends Type, B extends Type>(type: T, name: Nullable<string>, args: Arg2<A, B>, body: FnBody2<A, B>): TaggedFn2<A, B, T>; export declare function defn<T extends Type, A extends Type, B extends Type, C extends Type>(type: T, name: Nullable<string>, args: Arg3<A, B, C>, body: FnBody3<A, B, C>): TaggedFn3<A, B, C, T>; export declare function defn<T extends Type, A extends Type, B extends Type, C extends Type, D extends Type>(type: T, name: Nullable<string>, args: Arg4<A, B, C, D>, body: FnBody4<A, B, C, D>): TaggedFn4<A, B, C, D, T>; export declare function defn<T extends Type, A extends Type, B extends Type, C extends Type, D extends Type, E extends Type>(type: T, name: Nullable<string>, args: Arg5<A, B, C, D, E>, body: FnBody5<A, B, C, D, E>): TaggedFn5<A, B, C, D, E, T>; export declare function defn<T extends Type, A extends Type, B extends Type, C extends Type, D extends Type, E extends Type, F extends Type>(type: T, name: Nullable<string>, args: Arg6<A, B, C, D, E, F>, body: FnBody6<A, B, C, D, E, F>): TaggedFn6<A, B, C, D, E, F, T>; export declare function defn<T extends Type, A extends Type, B extends Type, C extends Type, D extends Type, E extends Type, F extends Type, G extends Type>(type: T, name: Nullable<string>, args: Arg7<A, B, C, D, E, F, G>, body: FnBody7<A, B, C, D, E, F, G>): TaggedFn7<A, B, C, D, E, F, G, T>; export declare function defn<T extends Type, A extends Type, B extends Type, C extends Type, D extends Type, E extends Type, F extends Type, G extends Type, H extends Type>(type: T, name: Nullable<string>, args: Arg8<A, B, C, D, E, F, G, H>, body: FnBody8<A, B, C, D, E, F, G, H>): TaggedFn8<A, B, C, D, E, F, G, H, T>; /** * Syntax sugar for defining `void main()` functions. * * @param body - */ export declare const defMain: (body: FnBody0) => TaggedFn0<"void">; export declare function ret(): FuncReturn<"void">; export declare function ret<T extends Type>(val: Term<T>): FuncReturn<T>; export declare function funcall<T extends Type>(fn: string, type: T, ...args: Term<any>[]): FnCall<T>; export declare function funcall<T extends Type>(fn: TaggedFn0<T>): FnCall<T>; export declare function funcall<A extends Type, T extends Type>(fn: TaggedFn1<A, T>, a: Term<A>): FnCall<T>; export declare function funcall<A extends Type, B extends Type, T extends Type>(fn: TaggedFn2<A, B, T>, a: Term<A>, b: Term<B>): FnCall<T>; export declare function funcall<A extends Type, B extends Type, C extends Type, T extends Type>(fn: TaggedFn3<A, B, C, T>, a: Term<A>, b: Term<B>, c: Term<C>): FnCall<T>; export declare function funcall<A extends Type, B extends Type, C extends Type, D extends Type, T extends Type>(fn: TaggedFn4<A, B, C, D, T>, a: Term<A>, b: Term<B>, c: Term<C>, d: Term<D>): FnCall<T>; export declare function funcall<A extends Type, B extends Type, C extends Type, D extends Type, E extends Type, T extends Type>(fn: TaggedFn5<A, B, C, D, E, T>, a: Term<A>, b: Term<B>, c: Term<C>, d: Term<D>, e: Term<E>): FnCall<T>; export declare function funcall<A extends Type, B extends Type, C extends Type, D extends Type, E extends Type, F extends Type, T extends Type>(fn: TaggedFn6<A, B, C, D, E, F, T>, a: Term<A>, b: Term<B>, c: Term<C>, d: Term<D>, e: Term<E>, f: Term<F>): FnCall<T>; export declare function funcall<A extends Type, B extends Type, C extends Type, D extends Type, E extends Type, F extends Type, G extends Type, T extends Type>(fn: TaggedFn7<A, B, C, D, E, F, G, T>, a: Term<A>, b: Term<B>, c: Term<C>, d: Term<D>, e: Term<E>, f: Term<F>, g: Term<G>): FnCall<T>; export declare function funcall<A extends Type, B extends Type, C extends Type, D extends Type, E extends Type, F extends Type, G extends Type, H extends Type, T extends Type>(fn: TaggedFn8<A, B, C, D, E, F, G, H, T>, a: Term<A>, b: Term<B>, c: Term<C>, d: Term<D>, e: Term<E>, f: Term<F>, g: Term<G>, h: Term<H>): FnCall<T>; export declare const builtinCall: <T extends Type>(id: string, type: T, ...args: Term<any>[]) => FnCall<T>; //# sourceMappingURL=function.d.ts.map