UNPKG

@thi.ng/shader-ast

Version:

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

42 lines (41 loc) 1.28 kB
import { isArrayLike } from "@thi.ng/checks/is-arraylike"; import { isNumber } from "@thi.ng/checks/is-number"; import { isPlainObject } from "@thi.ng/checks/is-plain-object"; import { B, F, I, U } from "../api/types.js"; const RE_VEC = /^[iub]?vec[234]$/; const RE_MAT = /^mat[234]$/; const isTerm = (t) => isPlainObject(t) && !!t.tag && !!t.type; const isBool = (t) => t.type === B; const isFloat = (t) => t.type === F; const isInt = (t) => t.type === I; const isUint = (t) => t.type === U; const isLit = (t) => t.tag === "lit"; const isLitFloat = (t) => isLit(t) && isFloat(t); const isLitInt = (t) => isLit(t) && isInt(t); const isLitNumeric = (t) => isLit(t) && (isFloat(t) || isInt(t) || isUint(t)); const isLitNumericConst = (t) => isLit(t) && isNumber(t.val); const isLitVecConst = (t) => isLit(t) && isVec(t) && isArrayLike(t.val); const isLitNumOrVecConst = (t, n) => isLitNumericConst(t) && t.val === n || isLitVecConst(t) && t.val.every((x) => isLitNumericConst(x) && x.val === n); const isVec = (t) => RE_VEC.test(t.type); const isMat = (t) => RE_MAT.test(t.type); export { isBool, isFloat, isInt, isLit, isLitFloat, isLitInt, isLitNumOrVecConst, isLitNumeric, isLitNumericConst, isLitVecConst, isMat, isTerm, isUint, isVec };