@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
TypeScript
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