@galacean/engine-shader-compiler 2.0.0-alpha.33 → 2.0.0-alpha.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"browser.min.js","sources":["../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_instanceof.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_set_prototype_of.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_inherits.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_create_class.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_array_like_to_array.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_create_for_of_iterator_helper_loose.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_unsupported_iterable_to_array.js","../../../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/tslib.es6.mjs","../src/common/ShaderRange.ts","../src/common/types.ts","../src/common/enums/Keyword.ts","../src/parser/GrammarSymbol.ts","../src/GSError.ts","../src/common/enums/ShaderStage.ts","../src/parser/symbolTable/SymbolInfo.ts","../src/parser/AST.ts","../src/lalr/types.ts","../src/parser/builtin/functions.ts","../src/common/ShaderPosition.ts","../src/ShaderCompilerUtils.ts","../src/common/BaseToken.ts","../src/ParserUtils.ts","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_is_native_reflect_construct.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_construct.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_get_prototype_of.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_wrap_native_super.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_is_native_function.js","../src/common/BaseLexer.ts","../src/lexer/Lexer.ts","../src/parser/builtin/variables.ts","../src/common/SymbolTable.ts","../src/common/SymbolTableStack.ts","../src/parser/symbolTable/SymbolDataType.ts","../src/parser/symbolTable/FnSymbol.ts","../src/parser/symbolTable/StructSymbol.ts","../src/parser/symbolTable/VarSymbol.ts","../src/parser/ShaderInfo.ts","../src/parser/SemanticAnalyzer.ts","../src/parser/types.ts","../src/codeGen/VisitorContext.ts","../src/TempArray.ts","../src/codeGen/CodeGenVisitor.ts","../src/codeGen/GLESVisitor.ts","../src/codeGen/GLES100.ts","../src/codeGen/GLES300.ts","../src/ShaderInstructionEncoder.ts","../src/lalr/Production.ts","../src/lalr/StateItem.ts","../src/lalr/State.ts","../src/lalr/Utils.ts","../src/lalr/LALR1.ts","../src/parser/Grammar.ts","../src/lalr/CFG.ts","../src/parser/ShaderTargetParser.ts","../src/Preprocessor.ts","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_extends.js","../src/sourceParser/ShaderSourceFactory.ts","../src/sourceParser/ShaderSourceSymbol.ts","../src/sourceParser/SourceLexer.ts","../src/sourceParser/ShaderSourceParser.ts","../src/ShaderCompiler.ts","../src/index.ts"],"sourcesContent":["function _instanceof(left, right) {\n if (right != null && typeof Symbol !== \"undefined\" && right[Symbol.hasInstance]) {\n return !!right[Symbol.hasInstance](left);\n } else return left instanceof right;\n}\nexport { _instanceof as _ };\n","function _set_prototype_of(o, p) {\n _set_prototype_of = Object.setPrototypeOf || function setPrototypeOf(o, p) {\n o.__proto__ = p;\n\n return o;\n };\n\n return _set_prototype_of(o, p);\n}\nexport { _set_prototype_of as _ };\n","import { _ as _set_prototype_of } from \"./_set_prototype_of.js\";\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } });\n\n if (superClass) _set_prototype_of(subClass, superClass);\n}\nexport { _inherits as _ };\n","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n\n if (\"value\" in descriptor) descriptor.writable = true;\n\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\nfunction _create_class(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n\n return Constructor;\n}\nexport { _create_class as _ };\n","function _array_like_to_array(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\nexport { _array_like_to_array as _ };\n","import { _ as _unsupported_iterable_to_array } from \"./_unsupported_iterable_to_array.js\";\n\nfunction _create_for_of_iterator_helper_loose(o, allowArrayLike) {\n var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n\n if (it) return (it = it.call(o)).next.bind(it);\n // Fallback for engines without symbol support\n if (Array.isArray(o) || (it = _unsupported_iterable_to_array(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n\n var i = 0;\n\n return function() {\n if (i >= o.length) return { done: true };\n\n return { done: false, value: o[i++] };\n };\n }\n\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nexport { _create_for_of_iterator_helper_loose as _ };\n","import { _ as _array_like_to_array } from \"./_array_like_to_array.js\";\n\nfunction _unsupported_iterable_to_array(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _array_like_to_array(o, minLen);\n\n var n = Object.prototype.toString.call(o).slice(8, -1);\n\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(n);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);\n}\nexport { _unsupported_iterable_to_array as _ };\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","import type { IPoolElement } from \"@galacean/engine-core\";\nimport { ShaderPosition } from \"./ShaderPosition\";\n\nexport class ShaderRange implements IPoolElement {\n public start: ShaderPosition;\n public end: ShaderPosition;\n\n set(start: ShaderPosition, end: ShaderPosition) {\n this.start = start;\n this.end = end;\n }\n\n dispose(): void {\n this.start.dispose();\n this.end.dispose();\n }\n}\n","import { Keyword } from \"./enums/Keyword\";\n\nexport enum ETokenType {\n ID = 1000,\n FLOAT_CONSTANT,\n INT_CONSTANT,\n STRING_CONST,\n /** << */\n LEFT_OP,\n /** \\>> */\n RIGHT_OP,\n /** ++ */\n INC_OP,\n /** -- */\n DEC_OP,\n /** <= */\n LE_OP,\n /** \\>= */\n GE_OP,\n /** == */\n EQ_OP,\n /** != */\n NE_OP,\n /** && */\n AND_OP,\n /** || */\n OR_OP,\n /** ^^ */\n XOR_OP,\n /** *= */\n MUL_ASSIGN,\n /** /= */\n DIV_ASSIGN,\n /** += */\n ADD_ASSIGN,\n /** -= */\n SUB_ASSIGN,\n /** %= */\n MOD_ASSIGN,\n /** <<= */\n LEFT_ASSIGN,\n /** >>= */\n RIGHT_ASSIGN,\n /** &= */\n AND_ASSIGN,\n /** ^= */\n XOR_ASSIGN,\n /** |= */\n OR_ASSIGN,\n /** ( */\n LEFT_PAREN,\n /** ) */\n RIGHT_PAREN,\n /** [ */\n LEFT_BRACKET,\n /** ] */\n RIGHT_BRACKET,\n /** { */\n LEFT_BRACE,\n /** } */\n RIGHT_BRACE,\n /** . */\n DOT,\n /** , */\n COMMA,\n COLON,\n /** = */\n EQUAL,\n /** ; */\n SEMICOLON,\n /** ! */\n BANG,\n /** \\- */\n DASH,\n /** ~ */\n TILDE,\n PLUS,\n /** \\* */\n STAR,\n /** / */\n SLASH,\n /** % */\n PERCENT,\n /** < */\n LEFT_ANGLE,\n /** \\> */\n RIGHT_ANGLE,\n VERTICAL_BAR,\n /** ^ */\n CARET,\n /** & */\n AMPERSAND,\n /** ? */\n QUESTION,\n\n NotWord,\n\n /** ε */\n EPSILON = 1998,\n EOF = 1999\n}\n\nexport const TypeAny = 3000;\n\nexport type GalaceanDataType =\n | Keyword.VOID\n | Keyword.FLOAT\n | Keyword.BOOL\n | Keyword.INT\n | Keyword.UINT\n | Keyword.VEC2\n | Keyword.VEC3\n | Keyword.VEC4\n | Keyword.BVEC2\n | Keyword.BVEC3\n | Keyword.BVEC4\n | Keyword.IVEC2\n | Keyword.IVEC3\n | Keyword.IVEC4\n | Keyword.UVEC2\n | Keyword.UVEC3\n | Keyword.UVEC4\n | Keyword.MAT2\n | Keyword.MAT3\n | Keyword.MAT4\n | Keyword.MAT2X3\n | Keyword.MAT2X4\n | Keyword.MAT3X2\n | Keyword.MAT3X4\n | Keyword.MAT4X2\n | Keyword.MAT4X3\n | Keyword.SAMPLER2D\n | Keyword.SAMPLER3D\n | Keyword.SAMPLER_CUBE\n | Keyword.SAMPLER2D_SHADOW\n | Keyword.SAMPLER_CUBE_SHADOW\n | Keyword.SAMPLER2D_ARRAY\n | Keyword.SAMPLER2D_ARRAY_SHADOW\n | Keyword.I_SAMPLER2D\n | Keyword.I_SAMPLER3D\n | Keyword.I_SAMPLER_CUBE\n | Keyword.I_SAMPLER2D_ARRAY\n | Keyword.U_SAMPLER2D\n | Keyword.U_SAMPLER3D\n | Keyword.U_SAMPLER_CUBE\n | Keyword.U_SAMPLER2D_ARRAY\n | Keyword.VEC4_ARRAY\n | typeof TypeAny\n | string;\n\nexport type TokenType = ETokenType | Keyword;\n","export enum Keyword {\n CONST = 0,\n BOOL,\n FLOAT,\n DOUBLE,\n INT,\n UINT,\n BREAK,\n CONTINUE,\n DO,\n ELSE,\n FOR,\n IF,\n WHILE,\n DISCARD,\n RETURN,\n BVEC2,\n BVEC3,\n BVEC4,\n IVEC2,\n IVEC3,\n IVEC4,\n UVEC2,\n UVEC3,\n UVEC4,\n VEC2,\n VEC3,\n VEC4,\n VEC4_ARRAY,\n MAT2,\n MAT3,\n MAT4,\n MAT2X3,\n MAT2X4,\n MAT3X2,\n MAT3X4,\n MAT4X2,\n MAT4X3,\n IN,\n OUT,\n INOUT,\n CENTROID,\n SAMPLER2D,\n SAMPLER3D,\n SAMPLER_CUBE,\n SAMPLER2D_SHADOW,\n SAMPLER_CUBE_SHADOW,\n SAMPLER2D_ARRAY,\n SAMPLER2D_ARRAY_SHADOW,\n I_SAMPLER2D,\n I_SAMPLER3D,\n I_SAMPLER_CUBE,\n I_SAMPLER2D_ARRAY,\n U_SAMPLER2D,\n U_SAMPLER3D,\n U_SAMPLER_CUBE,\n U_SAMPLER2D_ARRAY,\n STRUCT,\n LAYOUT,\n LOCATION,\n VOID,\n\n PRECISION,\n PRECISE,\n HIGHP,\n MEDIUMP,\n LOWP,\n INVARIANT,\n SMOOTH,\n FLAT,\n NOPERSPECTIVE,\n\n // Common Tokens\n True,\n False,\n LeftBrace,\n RightBrace,\n Equal,\n BitwiseOr,\n\n // Source Parser Tokens\n GSRenderQueueType,\n GSBlendState,\n GSDepthState,\n GSStencilState,\n GSRasterState,\n GSEditorProperties,\n GSEditorMacros,\n GSEditor,\n GSTags,\n GSVertexShader,\n GSFragmentShader,\n GSSubShader,\n GSPass,\n GSBlendFactor,\n GSBlendOperation,\n GSBool,\n GSNumber,\n GSColor,\n GSCompareFunction,\n GSStencilOperation,\n GSCullMode,\n GSColorWriteMask,\n GSUsePass,\n\n // Macros\n MACRO_IF,\n MACRO_IFDEF,\n MACRO_IFNDEF,\n MACRO_ELSE,\n MACRO_ELIF,\n MACRO_ENDIF,\n MACRO_UNDEF,\n /** Legacy opaque `#define` token — whole directive packed into one lexeme. Retained\n * for macros whose value can't be parsed as a GLSL expression (type aliases,\n * qualifier aliases, partial-syntax macros). Expression-style macros instead emit\n * `MACRO_DEFINE` + ID + value tokens + `MACRO_DEFINE_END`. */\n MACRO_DEFINE_EXPRESSION,\n MACRO_CONDITIONAL_EXPRESSION,\n MACRO_CALL,\n /** `#define` directive head for expression-style macros. */\n MACRO_DEFINE,\n /** Terminates a `MACRO_DEFINE` directive at end-of-line. */\n MACRO_DEFINE_END,\n /** `(params)` block for a function-like `#define`. The lexer captures the entire\n * parenthesized parameter list as one opaque token so the macro-define CFG rule\n * doesn't need its own parameter-list production (which would conflict with\n * function_call_parameter_list under LALR(1)). The AST consumer parses the\n * lexeme to recover the individual parameter names. */\n MACRO_DEFINE_PARAMS\n}\n","import { TokenType } from \"../common\";\n\nexport type Terminal = TokenType;\n\nexport enum NoneTerminal {\n START = 2000,\n // galacean\n gs_shader_program,\n\n // glsl\n global_declaration,\n variable_declaration,\n variable_declaration_list,\n variable_declaration_statement,\n array_specifier_list,\n array_specifier,\n ext_builtin_type_specifier_nonarray,\n precision_specifier,\n variable_identifier,\n variable_identifier_node,\n primary_expression,\n postfix_expression,\n integer_expression,\n function_call,\n function_call_generic,\n function_call_header_no_parameters,\n function_call_header_with_parameters,\n function_call_parameter_list,\n function_call_header,\n function_identifier,\n constructor_identifier,\n unary_expression,\n unary_operator,\n multiplicative_expression,\n additive_expression,\n shift_expression,\n relational_expression,\n equality_expression,\n and_expression,\n inclusive_or_expression,\n exclusive_or_expression,\n logical_and_expression,\n logical_xor_expression,\n logical_or_expression,\n conditional_expression,\n assignment_expression,\n assignment_operator,\n expression,\n integer_constant_expression,\n integer_constant_expression_operator,\n declaration,\n function_prototype,\n function_declarator,\n function_header_with_parameters,\n function_header,\n function_parameter_list,\n parameter_declarator,\n parameter_declaration,\n parameter_qualifier,\n parameter_type_specifier,\n init_declarator_list,\n single_declaration,\n fully_specified_type,\n type_qualifier,\n single_type_qualifier,\n storage_qualifier,\n precision_qualifier,\n interpolation_qualifier,\n invariant_qualifier,\n type_specifier,\n type_specifier_nonarray,\n type_specifier_no_prec,\n basic_type,\n struct_specifier,\n struct_declaration_list,\n struct_declaration,\n layout_qualifier,\n struct_declarator_list,\n struct_declarator,\n identifier_list,\n decl_identifier,\n initializer,\n initializer_list,\n declaration_statement,\n simple_statement,\n compound_statement_no_scope,\n statement_with_scope,\n compound_statement,\n statement,\n statement_list,\n iteration_statement_no_new_scope,\n expression_statement,\n selection_statement,\n selection_rest_statement,\n condition,\n conditionopt,\n iteration_statement,\n for_init_statement,\n for_rest_statement,\n jump_statement,\n external_declaration,\n function_definition,\n field_selection,\n bool_constant,\n function_identifier_node,\n typename_identifier_node,\n scope_brace,\n scope_end_brace,\n\n // Macro\n macro_undef,\n macro_push_context,\n macro_pop_context,\n macro_elif_expression,\n macro_else_expression,\n global_macro_if_statement,\n global_macro_declaration,\n global_macro_branch,\n macro_struct_declaration,\n macro_struct_branch,\n macro_if_statement,\n macro_branch,\n macro_param_case_list,\n macro_param_block,\n macro_parameter_branch,\n macro_call_arg_case_list,\n macro_call_arg_block,\n macro_call_arg_branch,\n\n // Macro call\n macro_call_symbol,\n macro_call_function,\n\n // Macro define (expression-style): `#define NAME [(params)] VALUE`\n macro_define,\n\n _ignore\n}\n\nexport type GrammarSymbol = Terminal | NoneTerminal;\n\nexport type Derivation = GrammarSymbol[];\n","import { ShaderPosition } from \"./common/ShaderPosition\";\nimport { ShaderRange } from \"./common/ShaderRange\";\n\nexport class GSError extends Error {\n static wrappingLineCount = 2;\n\n constructor(\n name: GSErrorName,\n message: string,\n public readonly location: ShaderRange | ShaderPosition,\n public readonly source: string,\n public readonly file?: string\n ) {\n super(message);\n this.name = name;\n }\n\n override toString(): string {\n let start: ShaderPosition, end: ShaderPosition;\n const { message, location, source } = this;\n if (!source) {\n return message;\n }\n\n if (location instanceof ShaderPosition) {\n start = end = location;\n } else {\n start = location.start;\n end = location.end;\n }\n const lines = source.split(\"\\n\");\n\n let diagnosticMessage = `${this.name}: ${message}\\n\\n`;\n\n // #if _VERBOSE\n const lineSplit = \"|···\";\n\n const wrappingLineCount = GSError.wrappingLineCount;\n for (let i = start.line - wrappingLineCount, n = end.line + wrappingLineCount; i <= n; i++) {\n const line = lines[i];\n diagnosticMessage += lineSplit + `${line}\\n`;\n\n if (i < start.line || i > end.line) continue;\n\n let remarkStart = 0;\n let remarkEnd = line.length;\n let paddingLength = lineSplit.length;\n if (i === start.line) {\n remarkStart = start.column;\n paddingLength += start.column;\n }\n if (i === end.line) {\n remarkEnd = end.column;\n }\n const remarkLength = Math.max(remarkEnd - remarkStart, 1);\n\n diagnosticMessage += \" \".repeat(paddingLength) + \"^\".repeat(remarkLength) + \"\\n\";\n }\n // #endif\n\n return diagnosticMessage;\n }\n}\n\nexport enum GSErrorName {\n PreprocessorError = \"PreprocessorError\",\n CompilationError = \"CompilationError\",\n ScannerError = \"ScannerError\",\n CompilationWarn = \"CompilationWarning\"\n}\n","export enum EShaderStage {\n VERTEX,\n FRAGMENT,\n ALL\n}\n","import { IBaseSymbol } from \"../../common/IBaseSymbol\";\nimport { GalaceanDataType, TypeAny } from \"../../common/types\";\nimport { ASTNode } from \"../AST\";\nimport { SymbolDataType } from \"./SymbolDataType\";\n\nexport enum ESymbolType {\n VAR,\n FN,\n STRUCT,\n Any\n}\n\nexport type SymbolAstNode =\n | ASTNode.Initializer\n | ASTNode.StructSpecifier\n | ASTNode.FunctionDefinition\n | ASTNode.ParameterDeclarator\n | ASTNode.InitDeclaratorList\n | ASTNode.VariableDeclaration;\n\nexport class SymbolInfo implements IBaseSymbol {\n constructor(\n public ident: string,\n public type: ESymbolType,\n public astNode?: SymbolAstNode,\n public dataType?: SymbolDataType,\n public paramSignature?: GalaceanDataType[],\n public isInMacroBranch = false\n ) {}\n\n set(\n ident: string,\n symbolType: ESymbolType,\n astNode?: SymbolAstNode,\n dataType?: SymbolDataType,\n paramSignature?: GalaceanDataType[]\n ) {\n this.ident = ident;\n this.type = symbolType;\n this.astNode = astNode;\n this.dataType = dataType;\n this.paramSignature = paramSignature;\n }\n\n equal(symbol: SymbolInfo): boolean {\n if (symbol.type !== ESymbolType.Any && this.type !== symbol.type) return false;\n if (this.type === ESymbolType.FN) {\n if (!symbol.astNode && !symbol.paramSignature) return true;\n\n const params = (<ASTNode.FunctionDefinition>this.astNode).protoType.paramSig;\n const comparedParams = symbol.paramSignature ?? (<ASTNode.FunctionDefinition>symbol.astNode).protoType.paramSig;\n const length = params?.length;\n if (length !== comparedParams?.length) return false;\n for (let i = 0; i < length; i++) {\n const t1 = params[i],\n t2 = comparedParams[i];\n if (t1 === TypeAny || t2 === TypeAny) continue;\n if (t1 !== t2) return false;\n }\n return true;\n }\n return true;\n }\n}\n","import { ClearableObjectPool, type IPoolElement } from \"@galacean/engine-core\";\nimport { CodeGenVisitor } from \"../codeGen\";\nimport { ETokenType, GalaceanDataType, ShaderRange, TokenType, TypeAny } from \"../common\";\nimport { BaseToken } from \"../common/BaseToken\";\nimport { Keyword } from \"../common/enums/Keyword\";\nimport { ParserUtils } from \"../ParserUtils\";\nimport { Lexer } from \"../lexer/Lexer\";\nimport { MacroDefineInfo } from \"../Preprocessor\";\nimport { ShaderCompilerUtils } from \"../ShaderCompilerUtils\";\nimport { BuiltinFunction, BuiltinVariable, NonGenericGalaceanType } from \"./builtin\";\nimport { NoneTerminal } from \"./GrammarSymbol\";\nimport SemanticAnalyzer from \"./SemanticAnalyzer\";\nimport { ShaderData } from \"./ShaderInfo\";\nimport { ESymbolType, FnSymbol, StructSymbol, VarSymbol } from \"./symbolTable\";\nimport { IParamInfo, NodeChild, StructProp, SymbolType } from \"./types\";\n\nfunction ASTNodeDecorator(nonTerminal: NoneTerminal) {\n return function <T extends { new (): TreeNode }>(ASTNode: T) {\n ASTNode.prototype.nt = nonTerminal;\n (<any>ASTNode).pool = ShaderCompilerUtils.createObjectPool(ASTNode);\n };\n}\n\nexport abstract class TreeNode implements IPoolElement {\n static pool: ClearableObjectPool<TreeNode & { set: (loc: ShaderRange, children: NodeChild[]) => void }>;\n\n /** The non-terminal in grammar. */\n nt: NoneTerminal;\n private _children: NodeChild[];\n private _parent: TreeNode;\n private _location: ShaderRange;\n private _codeCache: string;\n\n /**\n * Parent pointer for AST traversal.\n * @remarks\n * The parent pointer is only reliable after the entire AST has been constructed.\n * DO NOT rely on `parent` during the `semanticAnalyze` phase, as the AST may still be under construction.\n * It is safe to use `parent` during code generation or any phase after AST construction.\n */\n get parent(): TreeNode {\n return this._parent;\n }\n\n get children() {\n return this._children;\n }\n\n get location() {\n return this._location;\n }\n\n set(loc: ShaderRange, children: NodeChild[]): void {\n this._location = loc;\n this._children = children;\n for (const child of children) {\n if (child instanceof TreeNode) {\n child._parent = this;\n }\n }\n\n this.init();\n }\n\n init() {}\n\n dispose(): void {}\n\n setCache(code: string): string {\n this._codeCache = code;\n return code;\n }\n\n getCache(): string {\n return this._codeCache;\n }\n\n // Visitor pattern interface for code generation\n codeGen(visitor: CodeGenVisitor) {\n const code = visitor.defaultCodeGen(this.children);\n this.setCache(code);\n return code;\n }\n\n /**\n * Do semantic analyze right after the ast node is generated.\n */\n semanticAnalyze(sa: SemanticAnalyzer) {}\n}\n\nexport namespace ASTNode {\n type MacroExpression =\n | MacroPushContext\n | MacroPopContext\n | MacroElseExpression\n | MacroElifExpression\n | MacroUndef\n | MacroDefine\n | BaseToken;\n\n export type ASTNodePool = ClearableObjectPool<\n { set: (loc: ShaderRange, children: NodeChild[]) => void } & IPoolElement & TreeNode\n >;\n\n export function _unwrapToken(node: NodeChild) {\n if (node instanceof BaseToken) {\n return node;\n }\n throw \"not token\";\n }\n\n export function get(pool: ASTNodePool, sa: SemanticAnalyzer, loc: ShaderRange, children: NodeChild[]) {\n const node = pool.get();\n node.set(loc, children);\n node.semanticAnalyze(sa);\n sa.semanticStack.push(node);\n }\n\n @ASTNodeDecorator(NoneTerminal._ignore)\n export class TrivialNode extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.scope_brace)\n export class ScopeBrace extends TreeNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n sa.pushScope();\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.scope_end_brace)\n export class ScopeEndBrace extends TreeNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n sa.popScope();\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.jump_statement)\n export class JumpStatement extends TreeNode {\n isFragReturnStatement: boolean;\n\n override init(): void {\n this.isFragReturnStatement = false;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (ASTNode._unwrapToken(this.children![0]).type === Keyword.RETURN) {\n sa.curFunctionInfo.returnStatement = this;\n }\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n return this.setCache(visitor.visitJumpStatement(this));\n }\n }\n\n // #if _VERBOSE\n @ASTNodeDecorator(NoneTerminal.conditionopt)\n export class ConditionOpt extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.for_rest_statement)\n export class ForRestStatement extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.condition)\n export class Condition extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.for_init_statement)\n export class ForInitStatement extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.iteration_statement)\n export class IterationStatement extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.selection_statement)\n export class SelectionStatement extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.expression_statement)\n export class ExpressionStatement extends TreeNode {}\n // #endif\n\n export abstract class ExpressionAstNode extends TreeNode {\n protected _type?: GalaceanDataType;\n set type(t: GalaceanDataType | undefined) {\n this._type = t;\n }\n get type() {\n return this._type ?? TypeAny;\n }\n\n override init(): void {\n this._type = undefined;\n }\n }\n\n // #if _VERBOSE\n @ASTNodeDecorator(NoneTerminal.initializer_list)\n export class InitializerList extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const init = this.children[0] as Initializer | InitializerList;\n this.type = init.type;\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.initializer)\n export class Initializer extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n this.type = (<AssignmentExpression>this.children[0]).type;\n } else {\n this.type = (<InitializerList>this.children[1]).type;\n }\n }\n }\n // #endif\n\n @ASTNodeDecorator(NoneTerminal.single_declaration)\n export class SingleDeclaration extends TreeNode {\n typeSpecifier: TypeSpecifier;\n arraySpecifier?: ArraySpecifier;\n\n override init(): void {\n this.typeSpecifier = undefined;\n this.arraySpecifier = undefined;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n const childrenLen = children.length;\n const fullyType = children[0] as FullySpecifiedType;\n const typeSpecifier = fullyType.typeSpecifier;\n this.typeSpecifier = typeSpecifier;\n this.arraySpecifier = typeSpecifier.arraySpecifier;\n\n const id = children[1] as BaseToken;\n\n let sm: VarSymbol;\n if (childrenLen === 2 || childrenLen === 4) {\n const symbolType = new SymbolType(fullyType.type, typeSpecifier.lexeme, this.arraySpecifier);\n const initializer = children[3] as Initializer;\n\n sm = new VarSymbol(id.lexeme, symbolType, false, initializer);\n } else {\n const arraySpecifier = children[2] as ArraySpecifier;\n // #if _VERBOSE\n if (arraySpecifier && this.arraySpecifier) {\n sa.reportError(arraySpecifier.location, \"Array of array is not supported.\");\n }\n // #endif\n this.arraySpecifier = arraySpecifier;\n const symbolType = new SymbolType(fullyType.type, typeSpecifier.lexeme, this.arraySpecifier);\n const initializer = children[4] as Initializer;\n\n sm = new VarSymbol(id.lexeme, symbolType, false, initializer);\n }\n sa.symbolTableStack.insert(sm);\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n return this.setCache(visitor.visitSingleDeclaration(this));\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.fully_specified_type)\n export class FullySpecifiedType extends TreeNode {\n typeSpecifier: TypeSpecifier;\n type: GalaceanDataType;\n\n override semanticAnalyze(_: SemanticAnalyzer): void {\n const children = this.children;\n this.typeSpecifier = (children.length === 1 ? children[0] : children[1]) as TypeSpecifier;\n this.type = this.typeSpecifier.type;\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.type_qualifier)\n export class TypeQualifier extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.single_type_qualifier)\n export class SingleTypeQualifier extends TreeNode {\n qualifier: Keyword;\n lexeme: string;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const child = this.children[0];\n if (child instanceof BaseToken) {\n this.qualifier = child.type as Keyword;\n this.lexeme = child.lexeme;\n } else {\n this.qualifier = (<BasicTypeQualifier>child).qualifier;\n this.lexeme = (<BasicTypeQualifier>child).lexeme;\n }\n }\n }\n\n abstract class BasicTypeQualifier extends TreeNode {\n qualifier: Keyword;\n lexeme: string;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const token = this.children[0] as BaseToken;\n this.qualifier = token.type as Keyword;\n this.lexeme = token.lexeme;\n }\n }\n\n // #if _VERBOSE\n @ASTNodeDecorator(NoneTerminal.storage_qualifier)\n export class StorageQualifier extends BasicTypeQualifier {}\n\n @ASTNodeDecorator(NoneTerminal.precision_qualifier)\n export class PrecisionQualifier extends BasicTypeQualifier {}\n\n @ASTNodeDecorator(NoneTerminal.interpolation_qualifier)\n export class InterpolationQualifier extends BasicTypeQualifier {}\n\n @ASTNodeDecorator(NoneTerminal.invariant_qualifier)\n export class InvariantQualifier extends BasicTypeQualifier {}\n // #endif\n\n @ASTNodeDecorator(NoneTerminal.type_specifier)\n export class TypeSpecifier extends TreeNode {\n type: GalaceanDataType;\n lexeme: string;\n arraySize?: number;\n isCustom: boolean;\n\n override init(): void {\n this.arraySize = undefined;\n }\n get arraySpecifier(): ArraySpecifier {\n return this.children[1] as ArraySpecifier;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n const firstChild = children[0] as TypeSpecifierNonArray;\n this.type = firstChild.type;\n this.lexeme = firstChild.lexeme;\n this.arraySize = (children?.[1] as ArraySpecifier)?.size;\n this.isCustom = typeof this.type === \"string\";\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.array_specifier)\n export class ArraySpecifier extends TreeNode {\n size: number | undefined;\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const integerConstantExpr = this.children[1] as IntegerConstantExpression;\n this.size = integerConstantExpr.value;\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.integer_constant_expression_operator)\n export class IntegerConstantExpressionOperator extends TreeNode {\n compute: (a: number, b: number) => number;\n lexeme: string;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const operator = this.children[0] as BaseToken;\n this.lexeme = operator.lexeme;\n switch (operator.type) {\n case ETokenType.PLUS:\n this.compute = (a, b) => a + b;\n break;\n case ETokenType.DASH:\n this.compute = (a, b) => a - b;\n break;\n case ETokenType.STAR:\n this.compute = (a, b) => a * b;\n break;\n case ETokenType.SLASH:\n this.compute = (a, b) => a / b;\n break;\n case ETokenType.PERCENT:\n this.compute = (a, b) => a % b;\n break;\n default:\n sa.reportError(operator.location, `not implemented operator ${operator.lexeme}`);\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.integer_constant_expression)\n export class IntegerConstantExpression extends TreeNode {\n value?: number;\n\n override init(): void {\n this.value = undefined;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n const child = this.children[0];\n if (child instanceof BaseToken) {\n this.value = Number(child.lexeme);\n }\n // #if _VERBOSE\n else {\n const id = child as VariableIdentifier;\n if (!ParserUtils.typeCompatible(Keyword.INT, id.typeInfo)) {\n sa.reportError(id.location, \"Invalid integer.\");\n return;\n }\n }\n // #endif\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.type_specifier_nonarray)\n export class TypeSpecifierNonArray extends TreeNode {\n type: GalaceanDataType;\n lexeme: string;\n\n override init(): void {\n const tt = this.children[0];\n if (tt instanceof BaseToken) {\n // ID — user-defined struct identifier; the lexeme is the type name.\n this.type = tt.lexeme;\n this.lexeme = tt.lexeme;\n } else if (tt instanceof MacroCallSymbol) {\n // Macro-as-type-alias — value resolved at variant codegen, type is `TypeAny` here.\n this.type = TypeAny;\n this.lexeme = tt.macroName;\n } else {\n this.type = (tt as ExtBuiltinTypeSpecifierNonArray).type as GalaceanDataType;\n this.lexeme = (tt as ExtBuiltinTypeSpecifierNonArray).lexeme;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.ext_builtin_type_specifier_nonarray)\n export class ExtBuiltinTypeSpecifierNonArray extends TreeNode {\n type: TokenType;\n lexeme: string;\n\n override init(): void {\n const token = this.children[0] as BaseToken;\n this.type = token.type;\n this.lexeme = token.lexeme;\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.init_declarator_list)\n export class InitDeclaratorList extends TreeNode {\n typeInfo: SymbolType;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n let sm: VarSymbol;\n const children = this.children;\n const childrenLength = children.length;\n if (childrenLength === 1) {\n const { typeSpecifier, arraySpecifier } = children[0] as SingleDeclaration;\n this.typeInfo = new SymbolType(typeSpecifier.type, typeSpecifier.lexeme, arraySpecifier);\n } else {\n const initDeclList = children[0] as InitDeclaratorList;\n this.typeInfo = initDeclList.typeInfo;\n }\n\n if (childrenLength === 3 || childrenLength === 5) {\n const id = children[2] as BaseToken;\n sm = new VarSymbol(id.lexeme, this.typeInfo, false, this);\n sa.symbolTableStack.insert(sm);\n } else if (childrenLength === 4 || childrenLength === 6) {\n const typeInfo = this.typeInfo;\n const arraySpecifier = this.children[3] as ArraySpecifier;\n // #if _VERBOSE\n if (typeInfo.arraySpecifier && arraySpecifier) {\n sa.reportError(arraySpecifier.location, \"Array of array is not supported.\");\n }\n // #endif\n typeInfo.arraySpecifier = arraySpecifier;\n const id = children[2] as BaseToken;\n sm = new VarSymbol(id.lexeme, typeInfo, false, this);\n sa.symbolTableStack.insert(sm);\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.identifier_list)\n export class IdentifierList extends TreeNode {\n idList: BaseToken[] = [];\n\n override init(): void {\n this.idList.length = 0;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const { children, idList: curIdList } = this;\n if (children.length === 2) {\n curIdList.push(children[1] as BaseToken);\n } else {\n const list = children[0] as IdentifierList;\n const id = children[2] as BaseToken;\n const listIdLength = list.idList.length;\n curIdList.length = listIdLength + 1;\n\n for (let i = 0; i < listIdLength; i++) {\n curIdList[i] = list.idList[i];\n }\n curIdList[listIdLength] = id;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.declaration)\n export class Declaration extends TreeNode {\n override codeGen(visitor: CodeGenVisitor): string {\n return this.setCache(visitor.visitDeclaration(this));\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.function_prototype)\n export class FunctionProtoType extends TreeNode {\n ident: BaseToken;\n returnType: FullySpecifiedType;\n parameterList: IParamInfo[];\n paramSig: GalaceanDataType[] | undefined;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const declarator = this.children[0] as FunctionDeclarator;\n this.ident = declarator.ident;\n this.returnType = declarator.returnType;\n this.parameterList = declarator.parameterInfoList;\n this.paramSig = declarator.paramSig;\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.function_declarator)\n export class FunctionDeclarator extends TreeNode {\n ident: BaseToken;\n returnType: FullySpecifiedType;\n parameterInfoList: IParamInfo[] | undefined;\n paramSig: GalaceanDataType[] | undefined;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n sa.curFunctionInfo.returnStatement = null;\n sa.curFunctionInfo.header = this;\n\n const children = this.children;\n const header = children[0] as FunctionHeader;\n const parameterList = children[1] as FunctionParameterList | undefined;\n this.ident = header.ident;\n this.returnType = header.returnType;\n this.parameterInfoList = parameterList?.parameterInfoList;\n this.paramSig = parameterList?.paramSig;\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.function_header)\n export class FunctionHeader extends TreeNode {\n ident: BaseToken;\n returnType: FullySpecifiedType;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n sa.pushScope();\n const children = this.children;\n this.ident = children[1] as BaseToken;\n this.returnType = children[0] as FullySpecifiedType;\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n return this.setCache(visitor.visitFunctionHeader(this));\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.function_parameter_list)\n export class FunctionParameterList extends TreeNode {\n parameterInfoList: IParamInfo[] = [];\n paramSig: GalaceanDataType[] = [];\n\n override init(): void {\n this.parameterInfoList.length = 0;\n this.paramSig.length = 0;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n const { parameterInfoList, paramSig } = this;\n\n if (children[0] instanceof ParameterDeclaration) {\n const decl = children[0];\n parameterInfoList.push({ ident: decl.ident, typeInfo: decl.typeInfo, astNode: decl });\n paramSig.push(decl.typeInfo?.type ?? TypeAny);\n } else if (children[2] instanceof ParameterDeclaration) {\n const list = children[0] as FunctionParameterList;\n const decl = children[2];\n\n parameterInfoList.push(...list.parameterInfoList, {\n ident: decl.ident,\n typeInfo: decl.typeInfo,\n astNode: decl\n });\n paramSig.push(...list.paramSig, decl.typeInfo?.type ?? TypeAny);\n } else if (children[0] instanceof FunctionParameterList && children[1] instanceof MacroParamBlock) {\n parameterInfoList.push(...children[0].parameterInfoList, { astNode: children[1] });\n paramSig.push(...children[0].paramSig, TypeAny);\n } else if (children[0] instanceof MacroParamBlock) {\n parameterInfoList.push({ astNode: children[0] });\n paramSig.push(TypeAny);\n }\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n return this.setCache(visitor.visitFunctionParameterList(this));\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.macro_param_case_list)\n export class MacroParamCaseList extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.macro_param_block)\n export class MacroParamBlock extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.macro_parameter_branch)\n export class MacroParameterBranch extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.parameter_declaration)\n export class ParameterDeclaration extends TreeNode {\n // Some syntax is not recognized, eg.\n // `#define TEXTURE2D_SHADOW_PARAM(shadowMap) mediump sampler2D shadowMap`\n typeInfo?: SymbolType;\n ident?: BaseToken;\n\n override init(): void {\n this.typeInfo = undefined;\n this.ident = undefined;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n let parameterDeclarator: ParameterDeclarator | undefined;\n\n if (children[0] instanceof ParameterDeclarator) {\n parameterDeclarator = children[0];\n } else if (children[1] instanceof ParameterDeclarator) {\n parameterDeclarator = children[1];\n }\n\n if (parameterDeclarator) {\n this.typeInfo = parameterDeclarator.typeInfo;\n this.ident = parameterDeclarator.ident;\n const varSymbol = new VarSymbol(\n parameterDeclarator.ident.lexeme,\n parameterDeclarator.typeInfo,\n false,\n parameterDeclarator\n );\n sa.symbolTableStack.insert(varSymbol);\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.parameter_declarator)\n export class ParameterDeclarator extends TreeNode {\n ident: BaseToken;\n typeInfo: SymbolType;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n this.ident = children[1] as BaseToken;\n const typeSpecifier = children[0] as TypeSpecifier;\n const arraySpecifier = children[2] as ArraySpecifier;\n this.typeInfo = new SymbolType(typeSpecifier.type, typeSpecifier.lexeme, arraySpecifier);\n }\n }\n\n // #if _VERBOSE\n @ASTNodeDecorator(NoneTerminal.simple_statement)\n export class SimpleStatement extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.compound_statement)\n export class CompoundStatement extends TreeNode {}\n // #endif\n\n @ASTNodeDecorator(NoneTerminal.compound_statement_no_scope)\n export class CompoundStatementNoScope extends TreeNode {}\n\n // #if _VERBOSE\n @ASTNodeDecorator(NoneTerminal.statement)\n export class Statement extends TreeNode {}\n // #endif\n\n @ASTNodeDecorator(NoneTerminal.statement_list)\n export class StatementList extends TreeNode {\n override codeGen(visitor: CodeGenVisitor): string {\n return this.setCache(visitor.visitStatementList(this));\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.function_definition)\n export class FunctionDefinition extends TreeNode {\n returnStatement?: ASTNode.JumpStatement;\n protoType: FunctionProtoType;\n statements: CompoundStatementNoScope;\n isInMacroBranch: boolean;\n\n override init(): void {\n this.returnStatement = undefined;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n this.protoType = children[0] as FunctionProtoType;\n this.statements = children[1] as CompoundStatementNoScope;\n\n sa.popScope();\n const sm = new FnSymbol(this.protoType.ident.lexeme, this);\n sa.symbolTableStack.insert(sm);\n this.isInMacroBranch = sa.symbolTableStack.isInMacroBranch;\n\n const { curFunctionInfo } = sa;\n const { header, returnStatement } = curFunctionInfo;\n if (header.returnType.type === Keyword.VOID) {\n if (returnStatement) {\n sa.reportError(header.returnType.location, \"Return in void function.\");\n }\n } else {\n if (!returnStatement) {\n sa.reportError(header.returnType.location, `No return statement found.`);\n } else {\n this.returnStatement = returnStatement;\n }\n }\n curFunctionInfo.header = undefined;\n curFunctionInfo.returnStatement = undefined;\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n return this.setCache(visitor.visitFunctionDefinition(this));\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.function_call)\n export class FunctionCall extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n this.type = (this.children[0] as FunctionCallGeneric).type;\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n return this.setCache(visitor.visitFunctionCall(this));\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.function_call_generic)\n export class FunctionCallGeneric extends ExpressionAstNode {\n fnSymbol: FnSymbol | StructSymbol | undefined;\n\n override init(): void {\n super.init();\n this.fnSymbol = undefined;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const functionIdentifier = this.children[0] as FunctionIdentifier;\n if (functionIdentifier.isBuiltin) {\n this.type = functionIdentifier.ident;\n } else {\n const fnIdent = <string>functionIdentifier.ident;\n\n let paramSig: NonGenericGalaceanType[] | undefined;\n if (this.children.length === 4) {\n const paramList = this.children[2];\n if (paramList instanceof FunctionCallParameterList) {\n paramSig = paramList.paramSig as any;\n }\n }\n // #if _VERBOSE\n const builtinFn = BuiltinFunction.resolveOverload(fnIdent, paramSig);\n if (builtinFn) {\n this.type = builtinFn.realReturnType;\n return;\n }\n // #endif\n\n const lookupSymbol = SemanticAnalyzer._lookupSymbol;\n lookupSymbol.set(fnIdent, ESymbolType.FN, undefined, undefined, paramSig);\n\n const fnSymbol = sa.symbolTableStack.lookup(lookupSymbol, true) as FnSymbol;\n\n if (!fnSymbol) {\n // #if _VERBOSE\n sa.reportError(this.location, `No overload function type found: ${functionIdentifier.ident}`);\n // #endif\n return;\n }\n this.type = fnSymbol?.dataType?.type;\n this.fnSymbol = fnSymbol;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.function_call_parameter_list)\n export class FunctionCallParameterList extends TreeNode {\n paramSig: GalaceanDataType[] = [];\n paramNodes: Array<AssignmentExpression | MacroCallArgBlock> = [];\n\n override init(): void {\n this.paramSig.length = 0;\n this.paramNodes.length = 0;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const { children, paramSig, paramNodes } = this;\n if (children[0] instanceof AssignmentExpression) {\n const expr = children[0];\n paramSig.push(expr.type);\n paramNodes.push(expr);\n } else if (children[2] instanceof AssignmentExpression) {\n const list = children[0] as FunctionCallParameterList;\n const decl = children[2] as AssignmentExpression;\n paramSig.push(...list.paramSig, decl.type);\n paramNodes.push(...list.paramNodes, decl);\n } else if (children[0] instanceof FunctionCallParameterList && children[1] instanceof MacroCallArgBlock) {\n paramSig.push(...children[0].paramSig, TypeAny);\n paramNodes.push(...children[0].paramNodes, children[1]);\n } else if (children[0] instanceof MacroCallArgBlock) {\n paramSig.push(TypeAny);\n paramNodes.push(children[0]);\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.macro_call_arg_case_list)\n export class MacroCallArgCaseList extends TreeNode {}\n @ASTNodeDecorator(NoneTerminal.macro_call_arg_block)\n export class MacroCallArgBlock extends TreeNode {}\n @ASTNodeDecorator(NoneTerminal.macro_call_arg_branch)\n export class MacroCallArgBranch extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.precision_specifier)\n export class PrecisionSpecifier extends TreeNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (!sa.symbolTableStack.isInMacroBranch) {\n sa.shaderData.globalPrecisions.push(this);\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.function_identifier)\n export class FunctionIdentifier extends TreeNode {\n ident: GalaceanDataType;\n lexeme: string;\n isBuiltin: boolean;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const typeSpecifier = this.children[0] as TypeSpecifier;\n\n this.ident = typeSpecifier.type;\n this.lexeme = typeSpecifier.lexeme;\n this.isBuiltin = typeof this.ident !== \"string\";\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n return this.setCache(visitor.visitFunctionIdentifier(this));\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.assignment_expression)\n export class AssignmentExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n const expr = this.children[0] as ConditionalExpression;\n this.type = expr.type ?? TypeAny;\n } else {\n const expr = this.children[2] as AssignmentExpression;\n this.type = expr.type ?? TypeAny;\n }\n }\n }\n\n // #if _VERBOSE\n @ASTNodeDecorator(NoneTerminal.assignment_operator)\n export class AssignmentOperator extends TreeNode {}\n // #endif\n\n @ASTNodeDecorator(NoneTerminal.expression)\n export class Expression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n const expr = this.children[0] as AssignmentExpression;\n this.type = expr.type;\n } else {\n const expr = this.children[2] as AssignmentExpression;\n this.type = expr.type;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.primary_expression)\n export class PrimaryExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n const id = this.children[0];\n if (id instanceof VariableIdentifier) {\n this.type = id.typeInfo ?? TypeAny;\n } else {\n switch ((<BaseToken>id).type) {\n case ETokenType.INT_CONSTANT:\n this._type = Keyword.INT;\n break;\n case ETokenType.FLOAT_CONSTANT:\n this.type = Keyword.FLOAT;\n break;\n case Keyword.True:\n case Keyword.False:\n this.type = Keyword.BOOL;\n break;\n }\n }\n } else {\n const expression = this.children[1] as Expression;\n this.type = expression.type;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.postfix_expression)\n export class PostfixExpression extends ExpressionAstNode {\n override init(): void {\n super.init();\n if (this.children.length === 1) {\n const child = this.children[0] as PrimaryExpression | FunctionCall;\n this.type = child.type;\n }\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n return this.setCache(visitor.visitPostfixExpression(this));\n }\n }\n\n // #if _VERBOSE\n @ASTNodeDecorator(NoneTerminal.unary_operator)\n export class UnaryOperator extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.unary_expression)\n export class UnaryExpression extends ExpressionAstNode {\n override init(): void {\n this.type = (this.children[0] as PostfixExpression).type;\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.multiplicative_expression)\n export class MultiplicativeExpression extends ExpressionAstNode {\n override init(): void {\n super.init();\n if (this.children.length === 1) {\n this.type = (this.children[0] as UnaryExpression).type;\n // TODO: Temporarily remove type deduce due to generic function type issue.\n // } else {\n // const exp1 = this.children[0] as MultiplicativeExpression;\n // const exp2 = this.children[2] as UnaryExpression;\n // if (exp1.type === exp2.type) {\n // this.type = exp1.type;\n // }\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.additive_expression)\n export class AdditiveExpression extends ExpressionAstNode {\n override init(): void {\n super.init();\n if (this.children.length === 1) {\n this.type = (this.children[0] as MultiplicativeExpression).type;\n // TODO: Temporarily remove type deduce due to generic function type issue.\n // } else {\n // const exp1 = this.children[0] as AdditiveExpression;\n // const exp2 = this.children[2] as MultiplicativeExpression;\n // if (exp1.type === exp2.type) {\n // this.type = exp1.type;\n // }\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.shift_expression)\n export class ShiftExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const expr = this.children[0] as ExpressionAstNode;\n this.type = expr.type;\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.relational_expression)\n export class RelationalExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n this.type = (<ShiftExpression>this.children[0]).type;\n } else {\n this.type = Keyword.BOOL;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.equality_expression)\n export class EqualityExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n this.type = (<RelationalExpression>this.children[0]).type;\n } else {\n this.type = Keyword.BOOL;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.and_expression)\n export class AndExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n this.type = (<AndExpression>this.children[0]).type;\n } else {\n this.type = Keyword.UINT;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.exclusive_or_expression)\n export class ExclusiveOrExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n this.type = (<AndExpression>this.children[0]).type;\n } else {\n this.type = Keyword.UINT;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.inclusive_or_expression)\n export class InclusiveOrExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n this.type = (<ExclusiveOrExpression>this.children[0]).type;\n } else {\n this.type = Keyword.UINT;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.logical_and_expression)\n export class LogicalAndExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n this.type = (<InclusiveOrExpression>this.children[0]).type;\n } else {\n this.type = Keyword.BOOL;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.logical_xor_expression)\n export class LogicalXorExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n this.type = (<LogicalAndExpression>this.children[0]).type;\n } else {\n this.type = Keyword.BOOL;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.logical_or_expression)\n export class LogicalOrExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n this.type = (<LogicalXorExpression>this.children[0]).type;\n } else {\n this.type = Keyword.BOOL;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.conditional_expression)\n export class ConditionalExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n this.type = (<LogicalOrExpression>this.children[0]).type;\n }\n }\n }\n // #endif\n\n @ASTNodeDecorator(NoneTerminal.struct_specifier)\n export class StructSpecifier extends TreeNode {\n ident?: BaseToken;\n propList: StructProp[];\n macroExpressions: MacroExpression[];\n isInMacroBranch: boolean;\n\n override init(): void {\n this.ident = undefined;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n this.isInMacroBranch = sa.symbolTableStack.isInMacroBranch;\n if (children.length === 6) {\n this.ident = children[1] as BaseToken;\n sa.symbolTableStack.insert(new StructSymbol(this.ident.lexeme, this));\n\n this.propList = (children[3] as StructDeclarationList).propList;\n this.macroExpressions = (children[3] as StructDeclarationList).macroExpressions;\n } else {\n this.propList = (children[2] as StructDeclarationList).propList;\n this.macroExpressions = (children[2] as StructDeclarationList).macroExpressions;\n }\n }\n\n override codeGen(visitor: CodeGenVisitor) {\n return this.setCache(visitor.visitStructSpecifier(this));\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.struct_declaration_list)\n export class StructDeclarationList extends TreeNode {\n propList: StructProp[] = [];\n macroExpressions: MacroExpression[] = [];\n\n override init(): void {\n this.propList.length = 0;\n this.macroExpressions.length = 0;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const { children, propList, macroExpressions } = this;\n\n if (children.length === 1) {\n propList.push(...(children[0] as StructDeclaration).props);\n macroExpressions.push(...(children[0] as StructDeclaration).macroExpressions);\n } else {\n propList.push(...(children[0] as StructDeclarationList).propList);\n propList.push(...(children[1] as StructDeclaration).props);\n macroExpressions.push(...(children[0] as StructDeclarationList).macroExpressions);\n macroExpressions.push(...(children[1] as StructDeclaration).macroExpressions);\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.struct_declaration)\n export class StructDeclaration extends TreeNode {\n props: StructProp[] = [];\n macroExpressions: MacroExpression[] = [];\n\n private _typeSpecifier?: TypeSpecifier;\n private _declaratorList?: StructDeclaratorList;\n\n override init(): void {\n this._typeSpecifier = undefined;\n this._declaratorList = undefined;\n this.props.length = 0;\n this.macroExpressions.length = 0;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const { children, props, macroExpressions } = this;\n\n if (children.length === 1) {\n const macroStructDeclaration = children[0] as MacroStructDeclaration;\n const macroProps = macroStructDeclaration.props;\n\n for (let i = 0, length = macroProps.length; i < length; i++) {\n macroProps[i].isInMacroBranch = true;\n props.push(macroProps[i]);\n }\n\n macroExpressions.push(...macroStructDeclaration.macroExpressions);\n\n return;\n }\n\n if (children.length === 3) {\n this._typeSpecifier = children[0] as TypeSpecifier;\n this._declaratorList = children[1] as StructDeclaratorList;\n } else {\n this._typeSpecifier = children[1] as TypeSpecifier;\n this._declaratorList = children[2] as StructDeclaratorList;\n }\n\n const firstChild = children[0];\n const { type, lexeme } = this._typeSpecifier;\n const isInMacroBranch = sa.symbolTableStack.isInMacroBranch;\n if (firstChild instanceof LayoutQualifier) {\n const declarator = children[2] as StructDeclarator;\n const typeInfo = new SymbolType(type, lexeme);\n const prop = new StructProp(typeInfo, declarator.ident, firstChild.index, isInMacroBranch);\n props.push(prop);\n } else {\n const declaratorList = this._declaratorList.declaratorList;\n const declaratorListLength = declaratorList.length;\n props.length = declaratorListLength;\n for (let i = 0; i < declaratorListLength; i++) {\n const declarator = declaratorList[i];\n const typeInfo = new SymbolType(type, lexeme, declarator.arraySpecifier);\n const prop = new StructProp(typeInfo, declarator.ident, undefined, isInMacroBranch);\n props[i] = prop;\n }\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.macro_struct_declaration)\n export class MacroStructDeclaration extends TreeNode {\n props: StructProp[] = [];\n macroExpressions: MacroExpression[] = [];\n\n override init(): void {\n this.props.length = 0;\n this.macroExpressions.length = 0;\n }\n\n override semanticAnalyze(): void {\n const children = this.children;\n\n this.macroExpressions.push(children[0] as MacroPushContext);\n\n if (children.length === 3) {\n this.props.push(...(children[1] as StructDeclarationList).propList);\n this.props.push(...(children[2] as MacroStructBranch).props);\n this.macroExpressions.push(...(children[1] as StructDeclarationList).macroExpressions);\n this.macroExpressions.push(...(children[2] as MacroStructBranch).macroExpressions);\n } else {\n this.props.push(...(children[1] as MacroStructBranch).props);\n this.macroExpressions.push(...(children[1] as MacroStructBranch).macroExpressions);\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.macro_struct_branch)\n export class MacroStructBranch extends TreeNode {\n props: StructProp[] = [];\n macroExpressions: MacroExpression[] = [];\n\n override init(): void {\n this.props.length = 0;\n this.macroExpressions.length = 0;\n }\n\n override semanticAnalyze(): void {\n const children = this.children;\n const lastNode = children[children.length - 1];\n\n this.macroExpressions.push(children[0] as MacroPopContext | MacroElseExpression | MacroElifExpression);\n\n if (children[1] instanceof StructDeclarationList) {\n this.props.push(...children[1].propList);\n this.macroExpressions.push(...children[1].macroExpressions);\n }\n\n if (lastNode instanceof MacroStructBranch) {\n this.props.push(...lastNode.props);\n this.macroExpressions.push(...lastNode.macroExpressions);\n }\n\n if (children.length > 1 && lastNode instanceof MacroPopContext) {\n this.macroExpressions.push(lastNode);\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.layout_qualifier)\n export class LayoutQualifier extends TreeNode {\n index: number;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n this.index = Number((<BaseToken>this.children[4]).lexeme);\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.struct_declarator_list)\n export class StructDeclaratorList extends TreeNode {\n declaratorList: StructDeclarator[] = [];\n\n override init(): void {\n this.declaratorList.length = 0;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const { children, declaratorList } = this;\n if (children.length === 1) {\n declaratorList.push(children[0] as StructDeclarator);\n } else {\n const list = children[0] as StructDeclaratorList;\n const declarator = children[1] as StructDeclarator;\n const listLength = list.declaratorList.length;\n declaratorList.length = listLength + 1;\n for (let i = 0; i < listLength; i++) {\n declaratorList[i] = list.declaratorList[i];\n }\n declaratorList[listLength] = declarator;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.struct_declarator)\n export class StructDeclarator extends TreeNode {\n ident: BaseToken;\n arraySpecifier: ArraySpecifier | undefined;\n\n override init(): void {\n this.arraySpecifier = undefined;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n this.ident = children[0] as BaseToken;\n this.arraySpecifier = children[1] as ArraySpecifier;\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.variable_declaration)\n export class VariableDeclaration extends TreeNode {\n type: FullySpecifiedType;\n isStatic: boolean;\n\n override init(): void {\n this.isStatic = false;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n const type = children[0] as FullySpecifiedType;\n const ident = children[1] as BaseToken;\n this.type = type;\n const sm = new VarSymbol(ident.lexeme, new SymbolType(type.type, type.typeSpecifier.lexeme), true, this);\n\n sa.symbolTableStack.insert(sm);\n\n if (children.length === 4) {\n this.isStatic = true;\n }\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n if (this.isStatic) {\n return super.codeGen(visitor);\n } else {\n return this.setCache(visitor.visitGlobalVariableDeclaration(this));\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.variable_declaration_list)\n export class VariableDeclarationList extends TreeNode {\n type: FullySpecifiedType;\n variableDeclarations: VariableDeclaration[] = [];\n\n override init(): void {\n this.variableDeclarations.length = 0;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const { children } = this;\n const length = children.length;\n const child = children[0] as VariableDeclaration | VariableDeclarationList;\n const type = child.type;\n this.type = type;\n\n if (child instanceof VariableDeclaration) {\n this.variableDeclarations.push(child);\n } else {\n this.variableDeclarations.push(...child.variableDeclarations);\n\n const ident = children[2] as BaseToken;\n\n const newVariable = VariableDeclaration.pool.get() as VariableDeclaration;\n if (length === 3) {\n // variable_declaration_list ',' id\n newVariable.set(ident.location, [type, ident]);\n } else {\n // variable_declaration_list ',' id array_specifier\n newVariable.set(ident.location, [type, ident, children[3] as ArraySpecifier]);\n }\n newVariable.semanticAnalyze(sa);\n this.variableDeclarations.push(newVariable);\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.variable_identifier)\n export class VariableIdentifier extends TreeNode {\n // @todo: typeInfo may be multiple types\n typeInfo: GalaceanDataType;\n referenceGlobalSymbolNames: string[] = [];\n\n private _symbols: Array<VarSymbol | FnSymbol> = [];\n\n override init(): void {\n this.typeInfo = TypeAny;\n this.referenceGlobalSymbolNames.length = 0;\n this._symbols.length = 0;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const child = this.children[0] as BaseToken | MacroCallSymbol | MacroCallFunction;\n const referenceGlobalSymbolNames = this.referenceGlobalSymbolNames;\n const symbols = this._symbols;\n\n // Real references — every name must resolve; miss is an authoring error.\n const needFindNames = child instanceof BaseToken ? [child.lexeme] : child.referenceSymbolNames;\n\n for (let i = 0; i < needFindNames.length; i++) {\n const name = needFindNames[i];\n\n if (sa.macroDefineList[name]) continue;\n\n // only `macro_call` CFG can reference fnSymbols, others fnSymbols are referenced in `function_call_generic` CFG\n if (!(child instanceof BaseToken) && BuiltinFunction.isExist(name)) {\n continue;\n }\n\n const builtinVar = BuiltinVariable.getVar(name);\n if (builtinVar) {\n this.typeInfo = builtinVar.type;\n continue;\n }\n\n const hit = VariableIdentifier._lookupAndMarkGlobalReference(\n sa,\n name,\n symbols,\n referenceGlobalSymbolNames,\n this.location\n );\n // Expression-style macros have their own value AST; its real type isn't\n // the type of any single `referenceSymbolNames` entry (`v` in `v.v_uv`\n // is a `Varyings` struct but the macro call site's type should be the\n // member type). Skip type inference for those and keep TypeAny.\n if (hit && (child instanceof BaseToken || !child.hasAstValue)) {\n this.typeInfo = symbols[0].dataType?.type;\n }\n }\n\n // FXAA-style cross-arm shadowing: at a MACRO_CALL use site, silently\n // probe the macro name itself so any sibling-arm `var` declaration is\n // marked as referenced and codegen keeps it. Miss is the common\n // single-arm case — no warning, no type inference. Grammar half of the\n // cross-arm fix is in 87cb2b5f0.\n if (!(child instanceof BaseToken)) {\n VariableIdentifier._probeCrossArmShadowing(sa, child, needFindNames, symbols, referenceGlobalSymbolNames);\n }\n }\n\n /** Run the cross-arm shadowing probe for a MACRO_CALL site. No-op when the\n * probe isn't meaningful: no macro name, name already resolved as a real\n * reference, or name is a builtin (builtins can't be shadowed by a\n * sibling-arm decl). */\n private static _probeCrossArmShadowing(\n sa: SemanticAnalyzer,\n child: MacroCallSymbol | MacroCallFunction,\n needFindNames: string[],\n symbols: (VarSymbol | FnSymbol)[],\n referenceGlobalSymbolNames: string[]\n ): void {\n const macroName = child.macroName;\n if (!macroName) return;\n if (needFindNames.indexOf(macroName) !== -1) return; // already looked up as a real reference\n if (BuiltinFunction.isExist(macroName) || BuiltinVariable.getVar(macroName)) return; // builtins can't be shadowed\n VariableIdentifier._lookupAndMarkGlobalReference(sa, macroName, symbols, referenceGlobalSymbolNames, null);\n }\n\n /** Look up `name` in the symbol stack and, if a global var/fn declaration\n * exists, push it into `referenceGlobalSymbolNames`. Returns `true` iff\n * the lookup hit (caller can then derive type info). When `missWarnLoc`\n * is non-null, a miss reports a \"declared before used\" warning; pass\n * `null` for silent probes (e.g. FXAA-style cross-arm shadowing).\n *\n * Mutation contract: `symbols` is used as scratch storage — `lookupAll`\n * clears and refills it. On hit, the caller may read `symbols[0]` for\n * type info before the next call overwrites the contents. */\n private static _lookupAndMarkGlobalReference(\n sa: SemanticAnalyzer,\n name: string,\n symbols: (VarSymbol | FnSymbol)[],\n referenceGlobalSymbolNames: string[],\n missWarnLoc: ShaderRange | null\n ): boolean {\n const lookupSymbol = SemanticAnalyzer._lookupSymbol;\n lookupSymbol.set(name, ESymbolType.Any);\n sa.symbolTableStack.lookupAll(lookupSymbol, true, symbols);\n\n if (!symbols.length) {\n // #if _VERBOSE\n if (missWarnLoc) {\n sa.reportWarning(missWarnLoc, `Please sure the identifier \"${name}\" will be declared before used.`);\n }\n // #endif\n return false;\n }\n const currentScopeSymbol = <VarSymbol | FnSymbol>sa.symbolTableStack.scope.getSymbol(lookupSymbol, true);\n const isGlobal = currentScopeSymbol\n ? currentScopeSymbol instanceof FnSymbol || currentScopeSymbol.isGlobalVariable\n : symbols.some((s) => s instanceof FnSymbol || s.isGlobalVariable);\n if (isGlobal && referenceGlobalSymbolNames.indexOf(name) === -1) {\n referenceGlobalSymbolNames.push(name);\n }\n return true;\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n return this.setCache(visitor.visitVariableIdentifier(this));\n }\n\n getLexeme(visitor: CodeGenVisitor): string {\n const child = this.children[0] as BaseToken | MacroCallSymbol | MacroCallFunction;\n if (child instanceof BaseToken) {\n return child.lexeme;\n } else {\n return child.codeGen(visitor);\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.gs_shader_program)\n export class GLShaderProgram extends TreeNode {\n shaderData: ShaderData;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n this.shaderData = sa.shaderData;\n this.shaderData.symbolTable = sa.symbolTableStack.scope;\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.global_declaration)\n export class GlobalDeclaration extends TreeNode {\n macroExpressions: Array<MacroExpression | MacroUndef | BaseToken> = [];\n\n override init(): void {\n this.macroExpressions.length = 0;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const child = this.children[0];\n\n if (\n child instanceof MacroUndef ||\n child instanceof GlobalMacroIfStatement ||\n child instanceof MacroDefine ||\n child instanceof BaseToken\n ) {\n sa.shaderData.globalMacroDeclarations.push(this);\n\n if (child instanceof GlobalMacroIfStatement) {\n this.macroExpressions.push(...child.macroExpressions);\n } else {\n this.macroExpressions.push(child);\n }\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.macro_undef)\n export class MacroUndef extends TreeNode {\n override codeGen(visitor: CodeGenVisitor) {\n return this.setCache(super.codeGen(visitor) + \"\\n\");\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.macro_push_context)\n export class MacroPushContext extends TreeNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n sa.symbolTableStack._macroLevel++;\n }\n\n override codeGen(visitor: CodeGenVisitor) {\n return this.setCache(\"\\n\" + super.codeGen(visitor) + \"\\n\");\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.macro_pop_context)\n export class MacroPopContext extends TreeNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n sa.symbolTableStack._macroLevel--;\n }\n\n override codeGen(visitor: CodeGenVisitor) {\n return this.setCache(\"\\n\" + super.codeGen(visitor) + \"\\n\");\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.macro_elif_expression)\n export class MacroElifExpression extends TreeNode {\n override codeGen(visitor: CodeGenVisitor) {\n return this.setCache(\"\\n\" + super.codeGen(visitor) + \"\\n\");\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.macro_else_expression)\n export class MacroElseExpression extends TreeNode {\n override codeGen(visitor: CodeGenVisitor) {\n return this.setCache(\"\\n\" + super.codeGen(visitor) + \"\\n\");\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.global_macro_declaration)\n export class GlobalMacroDeclaration extends TreeNode {\n macroExpressions: MacroExpression[] = [];\n\n override init(): void {\n this.macroExpressions.length = 0;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n const macroExpressions = this.macroExpressions;\n\n if (children.length === 1) {\n macroExpressions.push(...(children[0] as GlobalDeclaration).macroExpressions);\n } else {\n macroExpressions.push(...(children[0] as GlobalMacroDeclaration).macroExpressions);\n macroExpressions.push(...(children[1] as GlobalDeclaration).macroExpressions);\n }\n }\n\n override codeGen(visitor: CodeGenVisitor) {\n const children = this.children as TreeNode[];\n if (children.length === 1) {\n return this.setCache(children[0].codeGen(visitor));\n } else {\n return this.setCache(`${children[0].codeGen(visitor)}\\n${children[1].codeGen(visitor)}`);\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.global_macro_if_statement)\n export class GlobalMacroIfStatement extends TreeNode {\n macroExpressions: MacroExpression[] = [];\n\n override init(): void {\n this.macroExpressions.length = 0;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n const macroExpressions = this.macroExpressions;\n\n if (children.length === 3) {\n macroExpressions.push(children[0] as MacroPushContext);\n macroExpressions.push(...(children[1] as GlobalMacroDeclaration).macroExpressions);\n macroExpressions.push(...(children[2] as GlobalMacroBranch).macroExpressions);\n } else {\n macroExpressions.push(children[0] as MacroPushContext);\n macroExpressions.push(...(children[1] as GlobalMacroBranch).macroExpressions);\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.global_macro_branch)\n export class GlobalMacroBranch extends TreeNode {\n macroExpressions: MacroExpression[] = [];\n\n override init(): void {\n this.macroExpressions.length = 0;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n const lastNode = children[children.length - 1];\n\n const macroExpressions = this.macroExpressions;\n macroExpressions.push(children[0] as MacroPopContext | MacroElseExpression | MacroElifExpression);\n\n if (children[1] instanceof GlobalMacroDeclaration) {\n macroExpressions.push(...children[1].macroExpressions);\n }\n\n if (lastNode instanceof GlobalMacroBranch) {\n macroExpressions.push(...lastNode.macroExpressions);\n }\n\n if (children.length > 1 && lastNode instanceof MacroPopContext) {\n macroExpressions.push(lastNode);\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.macro_if_statement)\n export class MacroIfStatement extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.macro_branch)\n export class MacroBranch extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.macro_call_symbol)\n export class MacroCallSymbol extends TreeNode {\n referenceSymbolNames: string[] = [];\n macroName: string;\n /** True iff every `MacroDefineInfo` visible from this call site's branch\n * has a `valueAst` (i.e. was parsed via the `macro_define` CFG rule).\n * Call sites use this to skip naive type inference: an AST-form macro\n * drives the call site's type through its own value subtree, not through\n * a root of `referenceSymbolNames`. Mixed forms across branches → false,\n * fall back to legacy inference. */\n hasAstValue: boolean = false;\n /** `#define NAME(params) …` form — drives function-like vs object-like codegen. */\n isFunctionLikeMacro: boolean = false;\n /** Every visible replacement is a non-builtin identifier — assume user fn alias. */\n aliasesNonBuiltinIdent: boolean = false;\n\n override init(): void {\n this.referenceSymbolNames.length = 0;\n this.hasAstValue = false;\n this.isFunctionLikeMacro = false;\n this.aliasesNonBuiltinIdent = false;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const nameToken = this.children[0] as BaseToken;\n const macroName = nameToken.lexeme;\n this.macroName = macroName;\n\n // Filter `defList` to only entries reachable from this call site's\n // `#ifdef` branch (Issue #2980 nit fix). Without filtering, definitions\n // in disjoint branches conflate at the call site and pollute type\n // inference; with it, what remains is exactly what could substitute at\n // this position.\n const callSiteBranch = nameToken.branch;\n const defList = sa.macroDefineList[macroName];\n const refs = this.referenceSymbolNames;\n refs.length = 0;\n let visibleCount = 0;\n let allAst = true;\n let isFn = false;\n let allAliasNonBuiltinIdent = true;\n if (defList) {\n for (let i = 0, n = defList.length; i < n; i++) {\n const info = defList[i];\n if (!Lexer.isVisibleFrom(info.branch, callSiteBranch)) continue;\n visibleCount++;\n if (info.valueAst == null) allAst = false;\n if (info.isFunction) isFn = true;\n // Harvest references from the value AST. Legacy-form macros (no\n // `valueAst`) hold non-expression token sequences with no user\n // identifiers, so nothing to collect.\n if (info.valueAst) {\n MacroCallSymbol._collectIdentifierRefs(info.valueAst, info.params, refs);\n }\n // aliasesNonBuiltinIdent: macro replacement is a single non-builtin\n // identifier — best-effort proxy for \"this macro call site aliases a\n // user fn\", since uniform/const aliases would surface as a GLSL\n // compile error later anyway. Keyword replacements (`vec3`, `mat4`)\n // reach here with `valueAst === undefined` (opaque path), so they\n // automatically fail without an explicit keyword guard.\n if (info.isFunction || !info.valueAst) {\n allAliasNonBuiltinIdent = false;\n } else {\n const leadingIdent = ParserUtils.unwrapBareIdentifier(info.valueAst, { allowParens: false });\n const leadingChild = leadingIdent?.children[0];\n const leadingId = leadingChild instanceof BaseToken ? leadingChild.lexeme : undefined;\n if (!leadingId || BuiltinFunction.isExist(leadingId)) {\n allAliasNonBuiltinIdent = false;\n }\n }\n }\n }\n // Require *every* visible entry to be AST-form before taking the AST\n // shortcut: residual ambiguity (e.g. unmodeled `#if expr` letting both\n // forms through) falls back to legacy `referenceSymbolNames` inference\n // instead of polluting the call site with TypeAny.\n this.hasAstValue = visibleCount > 0 && allAst;\n this.isFunctionLikeMacro = isFn;\n this.aliasesNonBuiltinIdent = visibleCount > 0 && allAliasNonBuiltinIdent;\n }\n\n /** Push every leaf `VariableIdentifier`'s lexeme into `out`, skipping\n * function-like parameter names (local to the macro, not call-site refs)\n * and duplicates. */\n private static _collectIdentifierRefs(node: TreeNode, params: string[], out: string[]): void {\n if (node instanceof VariableIdentifier) {\n const child = node.children[0];\n if (child instanceof BaseToken) {\n const name = child.lexeme;\n if (params.indexOf(name) === -1 && out.indexOf(name) === -1) out.push(name);\n }\n return;\n }\n const children = node.children;\n if (!children) return;\n for (let i = 0, n = children.length; i < n; i++) {\n const c = children[i];\n if (c instanceof TreeNode) MacroCallSymbol._collectIdentifierRefs(c, params, out);\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.macro_call_function)\n export class MacroCallFunction extends TreeNode {\n referenceSymbolNames: string[] = [];\n macroName: string = \"\";\n hasAstValue: boolean = false;\n isFunctionLikeMacro: boolean = false;\n aliasesNonBuiltinIdent: boolean = false;\n\n override init(): void {\n this.referenceSymbolNames = [];\n this.macroName = \"\";\n this.hasAstValue = false;\n this.isFunctionLikeMacro = false;\n this.aliasesNonBuiltinIdent = false;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const child = this.children[0] as MacroCallSymbol;\n\n this.referenceSymbolNames = child.referenceSymbolNames;\n this.macroName = child.macroName;\n this.hasAstValue = child.hasAstValue;\n this.isFunctionLikeMacro = child.isFunctionLikeMacro;\n this.aliasesNonBuiltinIdent = child.aliasesNonBuiltinIdent;\n }\n\n override codeGen(visitor: CodeGenVisitor) {\n return this.setCache(visitor.visitMacroCallFunction(this));\n }\n }\n\n /**\n * `#define NAME [(params)] [value]` — expression-style macro.\n *\n * Expression-form macros are parsed into AST rather than kept as raw lexemes. The\n * optional `valueExpression` is an `AssignmentExpression` subtree that participates\n * in normal codegen — so `v.v_normal.xyz` inside a `#define` flows through\n * `visitPostfixExpression` just like an inline expression would, and varying\n * flattening/type inference/reference tracking all come for free.\n *\n * Semantic analysis does not resolve symbols inside the value (the definition-site\n * scope is not the call-site scope). Lookup happens lazily during codegen.\n */\n @ASTNodeDecorator(NoneTerminal.macro_define)\n export class MacroDefine extends TreeNode {\n macroName: string;\n isFunction: boolean;\n valueExpression?: Expression;\n\n override init(): void {\n this.macroName = \"\";\n this.isFunction = false;\n this.valueExpression = undefined;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n // children[0] is MACRO_DEFINE head token, children[1] is ID.\n this.macroName = (children[1] as BaseToken).lexeme;\n\n // If children[2] is a MACRO_DEFINE_PARAMS token, the macro is function-like\n // and its parameter list lives in that token's lexeme (e.g. \"(a, b, c)\").\n let params: string[] = [];\n let valueIdx = 2;\n if (children[2] instanceof BaseToken && (children[2] as BaseToken).type === Keyword.MACRO_DEFINE_PARAMS) {\n this.isFunction = true;\n params = ParserUtils.parseMacroParamList((children[2] as BaseToken).lexeme);\n valueIdx = 3;\n }\n\n // Grammar's macro_define value is `expression` (not `assignment_expression`),\n // so the value child is always an `Expression` wrapper — even for a single\n // assignment-expression value, which appears as `Expression > AssignmentExpression`.\n if (children[valueIdx] instanceof Expression) {\n this.valueExpression = children[valueIdx] as Expression;\n }\n\n // The Lexer already registered a regex-derived entry for this directive.\n // Upgrade that entry in place by attaching the AST subtree, rather than\n // pushing a duplicate. Match must be branch-aware: `#define X` in\n // `#ifdef A` and another `#define X` in `#else` are separate entries\n // with disjoint branch signatures, and `valueExpression` belongs to\n // whichever branch actually parsed it.\n const definingBranch = (children[1] as BaseToken).branch;\n const list = sa.macroDefineList;\n const entries = list[this.macroName];\n const sameArity = (info: MacroDefineInfo) =>\n info.isFunction === this.isFunction &&\n info.params.length === params.length &&\n info.params.every((p, i) => p === params[i]);\n const upgradable = entries?.find(\n (info) => !info.valueAst && sameArity(info) && Lexer.sameBranch(info.branch, definingBranch)\n );\n if (upgradable) {\n upgradable.valueAst = this.valueExpression;\n } else {\n // No matching preprocessor entry (lexer fed directly, no\n // `Preprocessor.parse` pass). Synthetic key based on shape is enough\n // — this path's only dedup unit is this AST-direct registration.\n const info: MacroDefineInfo = {\n isFunction: this.isFunction,\n params,\n valueAst: this.valueExpression,\n dedupKey: `${this.macroName}#ast/${this.isFunction ? params.join(\",\") : \"\"}`,\n branch: definingBranch\n };\n if (entries) entries.push(info);\n else list[this.macroName] = [info];\n }\n\n // Close the form-param scope pushed at `MACRO_DEFINE_PARAMS` shift. By\n // the time this reduce fires, every `VariableIdentifier` inside the\n // value expression has already resolved against the params. Object-like\n // macros never pushed a scope, so nothing to pop.\n if (this.isFunction) {\n sa.popScope();\n }\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n return this.setCache(visitor.visitMacroDefine(this));\n }\n }\n}\n","import { NoneTerminal, Terminal } from \"../parser/GrammarSymbol\";\n\nexport type StateActionTable = Map<number /** state ID */, ActionTable>;\nexport type ActionTable = Map<Terminal, ActionInfo>;\nexport type StateGotoTable = Map<number /** state ID */, GotoTable>;\nexport type GotoTable = Map<NoneTerminal, number /** state ID */>;\n\nexport enum EAction {\n Shift = 0,\n Reduce,\n Accept\n}\n\nexport interface ActionInfo {\n action: EAction;\n target?: number;\n}\n","import { GalaceanDataType, TypeAny } from \"../../common\";\nimport { Keyword } from \"../../common/enums/Keyword\";\nimport { EShaderStage } from \"../../common/enums/ShaderStage\";\n\nexport enum GenericType {\n GenType = 200,\n GenIntType,\n GenUintType,\n GenBoolType,\n Mat,\n BoolVec,\n IntVec,\n UintVec,\n Vec,\n GVec4,\n GSampler2D,\n GSampler3D,\n GSamplerCube,\n GSampler2DArray\n}\n\nexport type NonGenericGalaceanType = Exclude<GalaceanDataType, string>;\ntype BuiltinType = NonGenericGalaceanType | GenericType;\n\n// Generic type system\n//\n// A generic family declares its concrete members and the dimension along which\n// members vary. Matching a generic position locks an index; projecting a return\n// family uses that index. Two families can only share an index if they vary\n// along the same dimension\n//\n// Example: `texture(GSampler2D, vec2) → GVec4` against `texture(sampler2D, uv)`\n// 1. Locate `sampler2D` in GSampler2D (ScalarType dimension) → index 0\n// 2. Project GVec4 (ScalarType dimension) at index 0 → vec4\n//\n// `ivec4 = texture(isampler2D, uv)` locks index 1, projects to `ivec4`\n// `min(vec3, vec3)` locks index 2 in GenType (Size dimension) and returns vec3\n// `min(vec3, vec2)` fails because the second arg would need index 1 but 2 is locked\n\nconst enum GenericDimension {\n // Varies along vector size: scalar / vec2 / vec3 / vec4 (or equivalents)\n Size,\n // Varies along the underlying scalar type: float / int / uint (sometimes with bool)\n ScalarType\n}\n\ntype FamilySpec = {\n readonly dimension: GenericDimension;\n readonly members: readonly NonGenericGalaceanType[];\n};\n\nconst FamilyMembers: Partial<Record<BuiltinType, FamilySpec>> = {\n // Size-varying families: index 0 → scalar, 1 → vec2, 2 → vec3, 3 → vec4\n // Per GLSL Spec §5.1, these appear in both parameter and return positions\n [GenericType.GenType]: {\n dimension: GenericDimension.Size,\n members: [Keyword.FLOAT, Keyword.VEC2, Keyword.VEC3, Keyword.VEC4]\n },\n [GenericType.GenIntType]: {\n dimension: GenericDimension.Size,\n members: [Keyword.INT, Keyword.IVEC2, Keyword.IVEC3, Keyword.IVEC4]\n },\n [GenericType.GenUintType]: {\n dimension: GenericDimension.Size,\n members: [Keyword.UINT, Keyword.UVEC2, Keyword.UVEC3, Keyword.UVEC4]\n },\n [GenericType.GenBoolType]: {\n dimension: GenericDimension.Size,\n members: [Keyword.BOOL, Keyword.BVEC2, Keyword.BVEC3, Keyword.BVEC4]\n },\n // Vec-only sub-families (no scalar): index 0 → vec2, 1 → vec3, 2 → vec4\n [GenericType.Vec]: { dimension: GenericDimension.Size, members: [Keyword.VEC2, Keyword.VEC3, Keyword.VEC4] },\n [GenericType.IntVec]: { dimension: GenericDimension.Size, members: [Keyword.IVEC2, Keyword.IVEC3, Keyword.IVEC4] },\n [GenericType.UintVec]: { dimension: GenericDimension.Size, members: [Keyword.UVEC2, Keyword.UVEC3, Keyword.UVEC4] },\n [GenericType.BoolVec]: { dimension: GenericDimension.Size, members: [Keyword.BVEC2, Keyword.BVEC3, Keyword.BVEC4] },\n [GenericType.Mat]: { dimension: GenericDimension.Size, members: [Keyword.MAT2, Keyword.MAT3, Keyword.MAT4] },\n\n // ScalarType-varying families: index 0 → float base, 1 → int base, 2 → uint base\n // Per GLSL Spec §5.1:\n // GSampler* families are parameter-only (passed as texture samplers)\n // GVec4 is return-only (projected from a GSampler* parameter into the matching vec4 variant)\n [GenericType.GSampler2D]: {\n dimension: GenericDimension.ScalarType,\n members: [Keyword.SAMPLER2D, Keyword.I_SAMPLER2D, Keyword.U_SAMPLER2D]\n },\n [GenericType.GSampler3D]: {\n dimension: GenericDimension.ScalarType,\n members: [Keyword.SAMPLER3D, Keyword.I_SAMPLER3D, Keyword.U_SAMPLER3D]\n },\n [GenericType.GSamplerCube]: {\n dimension: GenericDimension.ScalarType,\n members: [Keyword.SAMPLER_CUBE, Keyword.I_SAMPLER_CUBE, Keyword.U_SAMPLER_CUBE]\n },\n [GenericType.GSampler2DArray]: {\n dimension: GenericDimension.ScalarType,\n members: [Keyword.SAMPLER2D_ARRAY, Keyword.I_SAMPLER2D_ARRAY, Keyword.U_SAMPLER2D_ARRAY]\n },\n [GenericType.GVec4]: { dimension: GenericDimension.ScalarType, members: [Keyword.VEC4, Keyword.IVEC4, Keyword.UVEC4] }\n};\n\nconst BuiltinFunctionTable: Map<string, BuiltinFunction[]> = new Map();\n\nexport class BuiltinFunction {\n ident: string;\n readonly args: BuiltinType[];\n readonly scope: EShaderStage;\n\n private _returnType: BuiltinType;\n private _realReturnType: NonGenericGalaceanType;\n\n get realReturnType(): NonGenericGalaceanType {\n return this._realReturnType;\n }\n\n private constructor(ident: string, returnType: BuiltinType, scope: EShaderStage, ...args: BuiltinType[]) {\n this.ident = ident;\n this._returnType = returnType;\n this.args = args;\n this.scope = scope;\n }\n\n static _create(ident: string, returnType: BuiltinType, ...args: BuiltinType[]) {\n const fn = new BuiltinFunction(ident, returnType, EShaderStage.ALL, ...args);\n const list = BuiltinFunctionTable.get(ident) ?? [];\n list.push(fn);\n BuiltinFunctionTable.set(ident, list);\n }\n\n static _createWithScope(ident: string, returnType: BuiltinType, scope: EShaderStage, ...args: BuiltinType[]) {\n const fn = new BuiltinFunction(ident, returnType, scope, ...args);\n const list = BuiltinFunctionTable.get(ident) ?? [];\n list.push(fn);\n BuiltinFunctionTable.set(ident, list);\n }\n\n // Overload resolution against the generic family system\n //\n // For each candidate signature: concrete positions require exact type match;\n // generic positions locate the actual arg's index within the declared family,\n // and lock an index per dimension (size / scalar-type) shared across positions.\n // The return type is resolved by projecting the appropriate lock through the\n // return family, or passed through verbatim if the return is concrete\n static resolveOverload(\n funcName: string,\n callArgTypes: NonGenericGalaceanType[] | undefined\n ): BuiltinFunction | undefined {\n const overloads = BuiltinFunctionTable.get(funcName);\n if (!overloads) return undefined;\n const n = callArgTypes?.length ?? 0;\n\n for (let i = 0, m = overloads.length; i < m; i++) {\n const candidate = overloads[i];\n const declaredArgs = candidate.args;\n if (declaredArgs.length !== n) continue;\n\n let sizeLock = -1;\n let scalarTypeLock = -1;\n let matched = true;\n\n for (let j = 0; j < n; j++) {\n const declaredType = declaredArgs[j];\n const actualType = callArgTypes![j];\n if (actualType === TypeAny) continue;\n\n const paramFamily = FamilyMembers[declaredType];\n if (paramFamily) {\n // Families have at most 4 members; linear indexOf beats Map.get on this size\n const memberIdx = paramFamily.members.indexOf(actualType);\n if (memberIdx === -1) {\n matched = false;\n break;\n }\n if (paramFamily.dimension === GenericDimension.Size) {\n if (sizeLock === -1) sizeLock = memberIdx;\n else if (sizeLock !== memberIdx) {\n matched = false;\n break;\n }\n } else {\n if (scalarTypeLock === -1) scalarTypeLock = memberIdx;\n else if (scalarTypeLock !== memberIdx) {\n matched = false;\n break;\n }\n }\n } else if (declaredType !== actualType) {\n matched = false;\n break;\n }\n }\n\n if (!matched) continue;\n\n const returnFamily = FamilyMembers[candidate._returnType];\n if (!returnFamily) {\n candidate._realReturnType = candidate._returnType as NonGenericGalaceanType;\n return candidate;\n }\n const returnIdx = returnFamily.dimension === GenericDimension.Size ? sizeLock : scalarTypeLock;\n // No argument locked the dimension (all relevant args were TypeAny): fall\n // through as TypeAny so downstream overload resolution treats the result\n // as a wildcard rather than a specific guess\n candidate._realReturnType = returnIdx === -1 ? TypeAny : returnFamily.members[returnIdx];\n return candidate;\n }\n\n return undefined;\n }\n\n static isExist(ident: string) {\n return BuiltinFunctionTable.has(ident);\n }\n}\n\nBuiltinFunction._create(\"radians\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"degrees\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"sin\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"cos\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"tan\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"asin\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"acos\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"atan\", GenericType.GenType, GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"atan\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"sinh\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"cosh\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"tanh\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"asinh\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"acosh\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"atanh\", GenericType.GenType, GenericType.GenType);\n\nBuiltinFunction._create(\"pow\", GenericType.GenType, GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"exp\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"log\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"exp2\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"log2\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"sqrt\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"inversesqrt\", GenericType.GenType, GenericType.GenType);\n\nBuiltinFunction._create(\"abs\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"abs\", GenericType.GenIntType, GenericType.GenIntType);\nBuiltinFunction._create(\"sign\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"sign\", GenericType.GenIntType, GenericType.GenIntType);\nBuiltinFunction._create(\"floor\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"trunc\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"round\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"roundEven\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"ceil\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"fract\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"mod\", GenericType.GenType, GenericType.GenType, Keyword.FLOAT);\nBuiltinFunction._create(\"mod\", GenericType.GenType, GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"min\", GenericType.GenType, GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"min\", GenericType.GenType, GenericType.GenType, Keyword.FLOAT);\nBuiltinFunction._create(\"min\", GenericType.GenIntType, GenericType.GenIntType, GenericType.GenIntType);\nBuiltinFunction._create(\"min\", GenericType.GenIntType, GenericType.GenIntType, Keyword.INT);\nBuiltinFunction._create(\"min\", GenericType.GenUintType, GenericType.GenUintType, GenericType.GenUintType);\nBuiltinFunction._create(\"min\", GenericType.GenUintType, GenericType.GenUintType, Keyword.UINT);\nBuiltinFunction._create(\"max\", GenericType.GenType, GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"max\", GenericType.GenType, GenericType.GenType, Keyword.FLOAT);\nBuiltinFunction._create(\"max\", GenericType.GenIntType, GenericType.GenIntType, GenericType.GenIntType);\nBuiltinFunction._create(\"max\", GenericType.GenIntType, GenericType.GenIntType, Keyword.INT);\nBuiltinFunction._create(\"clamp\", GenericType.GenType, GenericType.GenType, GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"clamp\", GenericType.GenType, GenericType.GenType, Keyword.FLOAT, Keyword.FLOAT);\nBuiltinFunction._create(\n \"clamp\",\n GenericType.GenIntType,\n GenericType.GenIntType,\n GenericType.GenIntType,\n GenericType.GenIntType\n);\nBuiltinFunction._create(\"clamp\", GenericType.GenIntType, GenericType.GenIntType, Keyword.INT, Keyword.INT);\nBuiltinFunction._create(\n \"clamp\",\n GenericType.GenUintType,\n GenericType.GenUintType,\n GenericType.GenUintType,\n GenericType.GenUintType\n);\nBuiltinFunction._create(\"clamp\", GenericType.GenUintType, GenericType.GenUintType, Keyword.UINT, Keyword.UINT);\nBuiltinFunction._create(\"mix\", GenericType.GenType, GenericType.GenType, GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"mix\", GenericType.GenType, GenericType.GenType, GenericType.GenType, Keyword.FLOAT);\nBuiltinFunction._create(\"mix\", GenericType.GenType, GenericType.GenType, GenericType.GenType, GenericType.GenBoolType);\nBuiltinFunction._create(\"step\", GenericType.GenType, GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"step\", GenericType.GenType, Keyword.FLOAT, GenericType.GenType);\nBuiltinFunction._create(\n \"smoothstep\",\n GenericType.GenType,\n GenericType.GenType,\n GenericType.GenType,\n GenericType.GenType\n);\nBuiltinFunction._create(\"smoothstep\", GenericType.GenType, Keyword.FLOAT, Keyword.FLOAT, GenericType.GenType);\nBuiltinFunction._create(\"isnan\", GenericType.GenBoolType, GenericType.GenType);\nBuiltinFunction._create(\"isinf\", GenericType.GenBoolType, GenericType.GenType);\nBuiltinFunction._create(\"floatBitsToInt\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"floatBitsToUint\", GenericType.GenUintType, GenericType.GenType);\nBuiltinFunction._create(\"intBitsToFloat\", GenericType.GenType, GenericType.GenIntType);\nBuiltinFunction._create(\"uintBitsToFloat\", GenericType.GenType, GenericType.GenUintType);\n\nBuiltinFunction._create(\"packSnorm2x16\", Keyword.UINT, Keyword.VEC2);\nBuiltinFunction._create(\"unpackSnorm2x16\", Keyword.VEC2, Keyword.UINT);\nBuiltinFunction._create(\"packUnorm2x16\", Keyword.UINT, Keyword.VEC2);\nBuiltinFunction._create(\"unpackUnorm2x16\", Keyword.VEC2, Keyword.UINT);\nBuiltinFunction._create(\"packHalf2x16\", Keyword.UINT, Keyword.VEC2);\nBuiltinFunction._create(\"unpackHalf2x16\", Keyword.VEC2, Keyword.UINT);\n\nBuiltinFunction._create(\"length\", Keyword.FLOAT, GenericType.GenType);\nBuiltinFunction._create(\"distance\", Keyword.FLOAT, GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"dot\", Keyword.FLOAT, GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"cross\", Keyword.VEC3, Keyword.VEC3, Keyword.VEC3);\nBuiltinFunction._create(\"normalize\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\n \"faceforward\",\n GenericType.GenType,\n GenericType.GenType,\n GenericType.GenType,\n GenericType.GenType\n);\nBuiltinFunction._create(\"reflect\", GenericType.GenType, GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"refract\", GenericType.GenType, GenericType.GenType, GenericType.GenType, Keyword.FLOAT);\nBuiltinFunction._create(\"matrixCompMult\", GenericType.Mat, GenericType.Mat, GenericType.Mat);\nBuiltinFunction._create(\"outerProduct\", Keyword.MAT2, Keyword.VEC2, Keyword.VEC2);\nBuiltinFunction._create(\"outerProduct\", Keyword.MAT3, Keyword.VEC3, Keyword.VEC3);\nBuiltinFunction._create(\"outerProduct\", Keyword.MAT4, Keyword.VEC4, Keyword.VEC4);\n\nBuiltinFunction._create(\"outerProduct\", Keyword.MAT2X3, Keyword.VEC3, Keyword.VEC2);\nBuiltinFunction._create(\"outerProduct\", Keyword.MAT3X2, Keyword.VEC2, Keyword.VEC3);\n\nBuiltinFunction._create(\"outerProduct\", Keyword.MAT2X4, Keyword.VEC4, Keyword.VEC2);\nBuiltinFunction._create(\"outerProduct\", Keyword.MAT4X2, Keyword.VEC2, Keyword.VEC4);\n\nBuiltinFunction._create(\"outerProduct\", Keyword.MAT3X4, Keyword.VEC4, Keyword.VEC3);\nBuiltinFunction._create(\"outerProduct\", Keyword.MAT4X3, Keyword.VEC3, Keyword.VEC4);\n\nBuiltinFunction._create(\"transpose\", Keyword.MAT2, Keyword.MAT2);\nBuiltinFunction._create(\"transpose\", Keyword.MAT3, Keyword.MAT3);\nBuiltinFunction._create(\"transpose\", Keyword.MAT4, Keyword.MAT4);\nBuiltinFunction._create(\"transpose\", Keyword.MAT2X3, Keyword.MAT3X2);\nBuiltinFunction._create(\"transpose\", Keyword.MAT3X2, Keyword.MAT2X3);\nBuiltinFunction._create(\"transpose\", Keyword.MAT4X2, Keyword.MAT2X4);\nBuiltinFunction._create(\"transpose\", Keyword.MAT2X4, Keyword.MAT4X2);\nBuiltinFunction._create(\"transpose\", Keyword.MAT3X4, Keyword.MAT4X3);\nBuiltinFunction._create(\"transpose\", Keyword.MAT4X3, Keyword.MAT3X4);\n\nBuiltinFunction._create(\"determinant\", Keyword.FLOAT, Keyword.MAT2);\nBuiltinFunction._create(\"determinant\", Keyword.FLOAT, Keyword.MAT3);\nBuiltinFunction._create(\"determinant\", Keyword.FLOAT, Keyword.MAT4);\n\nBuiltinFunction._create(\"inverse\", Keyword.MAT2, Keyword.MAT2);\nBuiltinFunction._create(\"inverse\", Keyword.MAT3, Keyword.MAT3);\nBuiltinFunction._create(\"inverse\", Keyword.MAT4, Keyword.MAT4);\n\nBuiltinFunction._create(\"lessThan\", GenericType.BoolVec, GenericType.Vec, GenericType.Vec);\nBuiltinFunction._create(\"lessThan\", GenericType.BoolVec, GenericType.IntVec, GenericType.IntVec);\nBuiltinFunction._create(\"lessThan\", GenericType.BoolVec, GenericType.UintVec, GenericType.UintVec);\n\nBuiltinFunction._create(\"lessThanEqual\", GenericType.BoolVec, GenericType.Vec, GenericType.Vec);\nBuiltinFunction._create(\"lessThanEqual\", GenericType.BoolVec, GenericType.IntVec, GenericType.IntVec);\nBuiltinFunction._create(\"lessThanEqual\", GenericType.BoolVec, GenericType.UintVec, GenericType.UintVec);\n\nBuiltinFunction._create(\"greaterThan\", GenericType.BoolVec, GenericType.Vec, GenericType.Vec);\nBuiltinFunction._create(\"greaterThan\", GenericType.BoolVec, GenericType.IntVec, GenericType.IntVec);\nBuiltinFunction._create(\"greaterThan\", GenericType.BoolVec, GenericType.UintVec, GenericType.UintVec);\n\nBuiltinFunction._create(\"greaterThanEqual\", GenericType.BoolVec, GenericType.Vec, GenericType.Vec);\nBuiltinFunction._create(\"greaterThanEqual\", GenericType.BoolVec, GenericType.IntVec, GenericType.IntVec);\nBuiltinFunction._create(\"greaterThanEqual\", GenericType.BoolVec, GenericType.UintVec, GenericType.UintVec);\n\nBuiltinFunction._create(\"equal\", GenericType.BoolVec, GenericType.Vec, GenericType.Vec);\nBuiltinFunction._create(\"equal\", GenericType.BoolVec, GenericType.IntVec, GenericType.IntVec);\nBuiltinFunction._create(\"equal\", GenericType.BoolVec, GenericType.UintVec, GenericType.UintVec);\nBuiltinFunction._create(\"equal\", GenericType.BoolVec, GenericType.BoolVec, GenericType.BoolVec);\n\nBuiltinFunction._create(\"notEqual\", GenericType.BoolVec, GenericType.Vec, GenericType.Vec);\nBuiltinFunction._create(\"notEqual\", GenericType.BoolVec, GenericType.IntVec, GenericType.IntVec);\nBuiltinFunction._create(\"notEqual\", GenericType.BoolVec, GenericType.UintVec, GenericType.UintVec);\nBuiltinFunction._create(\"notEqual\", GenericType.BoolVec, GenericType.BoolVec, GenericType.BoolVec);\n\nBuiltinFunction._create(\"any\", Keyword.BOOL, GenericType.BoolVec);\nBuiltinFunction._create(\"all\", Keyword.BOOL, GenericType.BoolVec);\nBuiltinFunction._create(\"not\", GenericType.BoolVec, GenericType.BoolVec);\n\nBuiltinFunction._create(\"textureSize\", Keyword.IVEC2, GenericType.GSampler2D, Keyword.INT);\nBuiltinFunction._create(\"textureSize\", Keyword.IVEC3, GenericType.GSampler3D, Keyword.INT);\nBuiltinFunction._create(\"textureSize\", Keyword.IVEC2, GenericType.GSamplerCube, Keyword.INT);\n\nBuiltinFunction._create(\"textureSize\", Keyword.IVEC2, Keyword.SAMPLER2D_SHADOW, Keyword.INT);\nBuiltinFunction._create(\"textureSize\", Keyword.IVEC2, Keyword.SAMPLER_CUBE_SHADOW, Keyword.INT);\n\nBuiltinFunction._create(\"textureSize\", Keyword.IVEC3, GenericType.GSampler2DArray, Keyword.INT);\nBuiltinFunction._create(\"textureSize\", Keyword.IVEC3, Keyword.SAMPLER2D_ARRAY_SHADOW, Keyword.INT);\n\nBuiltinFunction._create(\"texture2D\", GenericType.GVec4, GenericType.GSampler2D, Keyword.VEC2);\nBuiltinFunction._create(\"texture2D\", GenericType.GVec4, GenericType.GSampler2D, Keyword.VEC2, Keyword.FLOAT);\n\nBuiltinFunction._create(\"texture\", GenericType.GVec4, GenericType.GSampler2D, Keyword.VEC2, Keyword.FLOAT);\nBuiltinFunction._create(\"texture\", GenericType.GVec4, GenericType.GSampler2D, Keyword.VEC2);\nBuiltinFunction._create(\"texture\", GenericType.GVec4, GenericType.GSampler3D, Keyword.VEC3, Keyword.FLOAT);\nBuiltinFunction._create(\"texture\", GenericType.GVec4, GenericType.GSampler3D, Keyword.VEC3);\n\nBuiltinFunction._create(\"texture\", GenericType.GVec4, GenericType.GSamplerCube, Keyword.VEC3, Keyword.FLOAT);\nBuiltinFunction._create(\"texture\", GenericType.GVec4, GenericType.GSamplerCube, Keyword.VEC3);\n\nBuiltinFunction._create(\"texture\", Keyword.FLOAT, Keyword.SAMPLER2D_SHADOW, Keyword.VEC3, Keyword.FLOAT);\nBuiltinFunction._create(\"texture\", Keyword.FLOAT, Keyword.SAMPLER2D_SHADOW, Keyword.VEC3);\n\nBuiltinFunction._create(\"texture\", Keyword.FLOAT, Keyword.SAMPLER_CUBE_SHADOW, Keyword.VEC4, Keyword.FLOAT);\nBuiltinFunction._create(\"texture\", Keyword.FLOAT, Keyword.SAMPLER_CUBE_SHADOW, Keyword.VEC4);\n\nBuiltinFunction._create(\"texture\", GenericType.GVec4, Keyword.SAMPLER2D_ARRAY, Keyword.VEC3, Keyword.FLOAT);\nBuiltinFunction._create(\"texture\", GenericType.GVec4, Keyword.SAMPLER2D_ARRAY, Keyword.VEC3);\n\nBuiltinFunction._create(\"texture\", Keyword.FLOAT, Keyword.SAMPLER2D_ARRAY_SHADOW, Keyword.VEC4);\n\nBuiltinFunction._create(\"textureProj\", GenericType.GVec4, GenericType.GSampler2D, Keyword.VEC3, Keyword.FLOAT);\nBuiltinFunction._create(\"textureProj\", GenericType.GVec4, GenericType.GSampler2D, Keyword.VEC3);\nBuiltinFunction._create(\"textureProj\", GenericType.GVec4, GenericType.GSampler2D, Keyword.VEC4, Keyword.FLOAT);\nBuiltinFunction._create(\"textureProj\", GenericType.GVec4, GenericType.GSampler2D, Keyword.VEC4);\nBuiltinFunction._create(\"textureProj\", GenericType.GVec4, GenericType.GSampler3D, Keyword.VEC4, Keyword.FLOAT);\nBuiltinFunction._create(\"textureProj\", GenericType.GVec4, GenericType.GSampler3D, Keyword.VEC4);\n\nBuiltinFunction._create(\"textureProj\", Keyword.FLOAT, Keyword.SAMPLER2D_SHADOW, Keyword.VEC4, Keyword.FLOAT);\nBuiltinFunction._create(\"textureProj\", Keyword.FLOAT, Keyword.SAMPLER2D_SHADOW, Keyword.VEC4);\n\nBuiltinFunction._create(\"textureLod\", GenericType.GVec4, GenericType.GSampler2D, Keyword.VEC2, Keyword.FLOAT);\nBuiltinFunction._create(\"textureLod\", GenericType.GVec4, GenericType.GSampler3D, Keyword.VEC3, Keyword.FLOAT);\nBuiltinFunction._create(\"textureLod\", GenericType.GVec4, GenericType.GSamplerCube, Keyword.VEC3, Keyword.FLOAT);\nBuiltinFunction._create(\"textureLod\", Keyword.FLOAT, Keyword.SAMPLER2D_SHADOW, Keyword.VEC3, Keyword.FLOAT);\nBuiltinFunction._create(\"textureLod\", GenericType.GVec4, GenericType.GSampler2DArray, Keyword.VEC3, Keyword.FLOAT);\nBuiltinFunction._create(\"texture2DLod\", GenericType.GVec4, GenericType.GSampler2D, Keyword.VEC2, Keyword.FLOAT);\nBuiltinFunction._create(\"texture2DLodEXT\", GenericType.GVec4, GenericType.GSampler2D, Keyword.VEC2, Keyword.FLOAT);\nBuiltinFunction._create(\"texture2DLodEXT\", GenericType.GVec4, GenericType.GSampler3D, Keyword.VEC3, Keyword.FLOAT);\n\nBuiltinFunction._create(\"textureCube\", GenericType.GVec4, GenericType.GSamplerCube, Keyword.VEC3);\nBuiltinFunction._create(\"textureCube\", GenericType.GVec4, GenericType.GSamplerCube, Keyword.VEC3, Keyword.FLOAT);\nBuiltinFunction._create(\"textureCubeLod\", GenericType.GVec4, GenericType.GSamplerCube, Keyword.VEC3, Keyword.FLOAT);\nBuiltinFunction._create(\"textureCubeLodEXT\", GenericType.GVec4, GenericType.GSamplerCube, Keyword.VEC3, Keyword.FLOAT);\n\nBuiltinFunction._create(\n \"textureOffset\",\n GenericType.GVec4,\n GenericType.GSampler2D,\n Keyword.VEC2,\n Keyword.IVEC2,\n Keyword.FLOAT\n);\nBuiltinFunction._create(\"textureOffset\", GenericType.GVec4, GenericType.GSampler2D, Keyword.VEC2, Keyword.IVEC2);\n\nBuiltinFunction._create(\n \"textureOffset\",\n GenericType.GVec4,\n GenericType.GSampler3D,\n Keyword.VEC3,\n Keyword.IVEC3,\n Keyword.FLOAT\n);\nBuiltinFunction._create(\"textureOffset\", GenericType.GVec4, GenericType.GSampler3D, Keyword.VEC3, Keyword.IVEC3);\n\nBuiltinFunction._create(\n \"textureOffset\",\n Keyword.FLOAT,\n Keyword.SAMPLER2D_SHADOW,\n Keyword.VEC3,\n Keyword.IVEC2,\n Keyword.FLOAT\n);\nBuiltinFunction._create(\"textureOffset\", Keyword.FLOAT, Keyword.SAMPLER2D_SHADOW, Keyword.VEC3, Keyword.IVEC2);\nBuiltinFunction._create(\n \"textureOffset\",\n GenericType.GVec4,\n GenericType.GSampler2DArray,\n Keyword.VEC3,\n Keyword.IVEC2,\n Keyword.FLOAT\n);\nBuiltinFunction._create(\"textureOffset\", GenericType.GVec4, GenericType.GSampler2DArray, Keyword.VEC3, Keyword.IVEC2);\n\nBuiltinFunction._create(\"texelFetch\", GenericType.GVec4, GenericType.GSampler2D, Keyword.IVEC2, Keyword.INT);\nBuiltinFunction._create(\"texelFetch\", GenericType.GVec4, GenericType.GSampler3D, Keyword.IVEC3, Keyword.INT);\nBuiltinFunction._create(\"texelFetch\", GenericType.GVec4, GenericType.GSampler2DArray, Keyword.IVEC3, Keyword.INT);\n\nBuiltinFunction._create(\n \"texelFetchOffset\",\n GenericType.GVec4,\n GenericType.GSampler2D,\n Keyword.IVEC2,\n Keyword.INT,\n Keyword.IVEC2\n);\nBuiltinFunction._create(\n \"texelFetchOffset\",\n GenericType.GVec4,\n GenericType.GSampler3D,\n Keyword.IVEC3,\n Keyword.INT,\n Keyword.IVEC3\n);\nBuiltinFunction._create(\n \"texelFetchOffset\",\n GenericType.GVec4,\n GenericType.GSampler2DArray,\n Keyword.IVEC3,\n Keyword.INT,\n Keyword.IVEC2\n);\n\nBuiltinFunction._create(\n \"textureProjOffset\",\n GenericType.GVec4,\n GenericType.GSampler2D,\n Keyword.VEC3,\n Keyword.IVEC2,\n Keyword.FLOAT\n);\nBuiltinFunction._create(\"textureProjOffset\", GenericType.GVec4, GenericType.GSampler2D, Keyword.VEC3, Keyword.IVEC2);\n\nBuiltinFunction._create(\n \"textureProjOffset\",\n GenericType.GVec4,\n GenericType.GSampler2D,\n Keyword.VEC4,\n Keyword.IVEC2,\n Keyword.FLOAT\n);\nBuiltinFunction._create(\"textureProjOffset\", GenericType.GVec4, GenericType.GSampler2D, Keyword.VEC4, Keyword.IVEC2);\n\nBuiltinFunction._create(\n \"textureProjOffset\",\n GenericType.GVec4,\n GenericType.GSampler3D,\n Keyword.VEC4,\n Keyword.IVEC3,\n Keyword.FLOAT\n);\nBuiltinFunction._create(\"textureProjOffset\", GenericType.GVec4, GenericType.GSampler3D, Keyword.VEC4, Keyword.IVEC3);\n\nBuiltinFunction._create(\n \"textureProjOffset\",\n Keyword.FLOAT,\n Keyword.SAMPLER2D_SHADOW,\n Keyword.VEC4,\n Keyword.IVEC2,\n Keyword.FLOAT\n);\nBuiltinFunction._create(\"textureProjOffset\", Keyword.FLOAT, Keyword.SAMPLER2D_SHADOW, Keyword.VEC4, Keyword.IVEC2);\n\nBuiltinFunction._create(\n \"textureLodOffset\",\n GenericType.GVec4,\n GenericType.GSampler2D,\n Keyword.VEC2,\n Keyword.FLOAT,\n Keyword.IVEC2\n);\nBuiltinFunction._create(\n \"textureLodOffset\",\n GenericType.GVec4,\n GenericType.GSampler3D,\n Keyword.VEC3,\n Keyword.FLOAT,\n Keyword.IVEC3\n);\n\nBuiltinFunction._create(\n \"textureLodOffset\",\n Keyword.FLOAT,\n Keyword.SAMPLER2D_SHADOW,\n Keyword.VEC3,\n Keyword.FLOAT,\n Keyword.IVEC2\n);\nBuiltinFunction._create(\n \"textureLodOffset\",\n GenericType.GVec4,\n GenericType.GSampler2DArray,\n Keyword.VEC3,\n Keyword.FLOAT,\n Keyword.IVEC2\n);\n\nBuiltinFunction._create(\"textureProjLod\", GenericType.GVec4, GenericType.GSampler2D, Keyword.VEC3, Keyword.FLOAT);\nBuiltinFunction._create(\"textureProjLod\", GenericType.GVec4, GenericType.GSampler2D, Keyword.VEC4, Keyword.FLOAT);\nBuiltinFunction._create(\"textureProjLod\", GenericType.GVec4, GenericType.GSampler3D, Keyword.VEC4, Keyword.FLOAT);\nBuiltinFunction._create(\"textureProjLod\", Keyword.FLOAT, Keyword.SAMPLER2D_SHADOW, Keyword.VEC4, Keyword.FLOAT);\n\nBuiltinFunction._create(\n \"textureProjLodOffset\",\n GenericType.GVec4,\n GenericType.GSampler2D,\n Keyword.VEC3,\n Keyword.FLOAT,\n Keyword.IVEC2\n);\nBuiltinFunction._create(\n \"textureProjLodOffset\",\n GenericType.GVec4,\n GenericType.GSampler2D,\n Keyword.VEC4,\n Keyword.FLOAT,\n Keyword.IVEC2\n);\nBuiltinFunction._create(\n \"textureProjLodOffset\",\n GenericType.GVec4,\n GenericType.GSampler3D,\n Keyword.VEC4,\n Keyword.FLOAT,\n Keyword.IVEC3\n);\nBuiltinFunction._create(\n \"textureProjLodOffset\",\n Keyword.FLOAT,\n Keyword.SAMPLER2D_SHADOW,\n Keyword.VEC4,\n Keyword.FLOAT,\n Keyword.IVEC2\n);\n\nBuiltinFunction._create(\n \"textureGrad\",\n GenericType.GVec4,\n GenericType.GSampler2D,\n Keyword.VEC2,\n Keyword.VEC2,\n Keyword.VEC2\n);\nBuiltinFunction._create(\n \"textureGrad\",\n GenericType.GVec4,\n GenericType.GSampler3D,\n Keyword.VEC3,\n Keyword.VEC3,\n Keyword.VEC3\n);\nBuiltinFunction._create(\n \"textureGrad\",\n GenericType.GVec4,\n GenericType.GSamplerCube,\n Keyword.VEC3,\n Keyword.VEC3,\n Keyword.VEC3\n);\n\nBuiltinFunction._create(\n \"textureGrad\",\n Keyword.FLOAT,\n Keyword.SAMPLER2D_SHADOW,\n Keyword.VEC3,\n Keyword.VEC2,\n Keyword.VEC2\n);\nBuiltinFunction._create(\n \"textureGrad\",\n Keyword.FLOAT,\n Keyword.SAMPLER_CUBE_SHADOW,\n Keyword.VEC4,\n Keyword.VEC3,\n Keyword.VEC3\n);\n\nBuiltinFunction._create(\n \"textureGrad\",\n GenericType.GVec4,\n GenericType.GSampler2DArray,\n Keyword.VEC3,\n Keyword.VEC2,\n Keyword.VEC2\n);\nBuiltinFunction._create(\n \"textureGrad\",\n Keyword.FLOAT,\n Keyword.SAMPLER2D_ARRAY_SHADOW,\n Keyword.VEC4,\n Keyword.VEC2,\n Keyword.VEC2\n);\n\nBuiltinFunction._create(\n \"textureGradOffset\",\n GenericType.GVec4,\n GenericType.GSampler2D,\n Keyword.VEC2,\n Keyword.VEC2,\n Keyword.VEC2,\n Keyword.IVEC2\n);\nBuiltinFunction._create(\n \"textureGradOffset\",\n GenericType.GVec4,\n GenericType.GSampler3D,\n Keyword.VEC3,\n Keyword.VEC3,\n Keyword.VEC3,\n Keyword.IVEC3\n);\nBuiltinFunction._create(\n \"textureGradOffset\",\n Keyword.FLOAT,\n Keyword.SAMPLER2D_SHADOW,\n Keyword.VEC3,\n Keyword.VEC2,\n Keyword.VEC2,\n Keyword.IVEC2\n);\nBuiltinFunction._create(\n \"textureGradOffset\",\n GenericType.GVec4,\n GenericType.GSampler2DArray,\n Keyword.VEC3,\n Keyword.VEC2,\n Keyword.VEC2,\n Keyword.IVEC2\n);\nBuiltinFunction._create(\n \"textureGradOffset\",\n Keyword.FLOAT,\n Keyword.SAMPLER2D_ARRAY_SHADOW,\n Keyword.VEC3,\n Keyword.VEC2,\n Keyword.VEC2,\n Keyword.IVEC2\n);\n\nBuiltinFunction._create(\n \"textureProjGrad\",\n GenericType.GVec4,\n GenericType.GSampler2D,\n Keyword.VEC3,\n Keyword.VEC2,\n Keyword.VEC2\n);\nBuiltinFunction._create(\n \"textureProjGrad\",\n GenericType.GVec4,\n GenericType.GSampler2D,\n Keyword.VEC4,\n Keyword.VEC2,\n Keyword.VEC2\n);\nBuiltinFunction._create(\n \"textureProjGrad\",\n GenericType.GVec4,\n GenericType.GSampler3D,\n Keyword.VEC4,\n Keyword.VEC3,\n Keyword.VEC3\n);\nBuiltinFunction._create(\n \"textureProjGrad\",\n Keyword.FLOAT,\n Keyword.SAMPLER2D_SHADOW,\n Keyword.VEC4,\n Keyword.VEC2,\n Keyword.VEC2\n);\n\nBuiltinFunction._create(\n \"textureProjGradOffset\",\n GenericType.GVec4,\n GenericType.GSampler2D,\n Keyword.VEC3,\n Keyword.VEC2,\n Keyword.VEC2,\n Keyword.IVEC2\n);\nBuiltinFunction._create(\n \"textureProjGradOffset\",\n GenericType.GVec4,\n GenericType.GSampler2D,\n Keyword.VEC4,\n Keyword.VEC2,\n Keyword.VEC2,\n Keyword.IVEC2\n);\nBuiltinFunction._create(\n \"textureProjGradOffset\",\n GenericType.GVec4,\n GenericType.GSampler3D,\n Keyword.VEC4,\n Keyword.VEC3,\n Keyword.VEC3,\n Keyword.IVEC3\n);\nBuiltinFunction._create(\n \"textureProjGradOffset\",\n Keyword.FLOAT,\n Keyword.SAMPLER2D_SHADOW,\n Keyword.VEC4,\n Keyword.VEC2,\n Keyword.VEC2,\n Keyword.IVEC2\n);\nBuiltinFunction._createWithScope(\"dFdx\", GenericType.GenType, EShaderStage.FRAGMENT, GenericType.GenType);\nBuiltinFunction._createWithScope(\"dFdy\", GenericType.GenType, EShaderStage.FRAGMENT, GenericType.GenType);\nBuiltinFunction._createWithScope(\"fwidth\", GenericType.GenType, EShaderStage.FRAGMENT, GenericType.GenType);\n","import type { IPoolElement } from \"@galacean/engine-core\";\n\nexport class ShaderPosition implements IPoolElement {\n index: number;\n // #if _VERBOSE\n line: number;\n column: number;\n // #endif\n\n set(\n index: number,\n // #if _VERBOSE\n line: number,\n column: number\n // #endif\n ) {\n this.index = index;\n // #if _VERBOSE\n this.line = line;\n this.column = column;\n // #endif\n }\n\n dispose(): void {\n this.index = 0;\n // #if _VERBOSE\n this.line = 0;\n this.column = 0;\n // #endif\n }\n}\n","import { ClearableObjectPool, type IPoolElement } from \"@galacean/engine-core\";\nimport { GSErrorName } from \"./GSError\";\nimport { ShaderRange } from \"./common/ShaderRange\";\nimport { ShaderPosition } from \"./common/ShaderPosition\";\n// #if _VERBOSE\nimport { GSError } from \"./GSError\";\n// #endif\n\nexport class ShaderCompilerUtils {\n private static _shaderCompilerObjectPoolSet: ClearableObjectPool<IPoolElement>[] = [];\n\n static createObjectPool<T extends IPoolElement>(type: new () => T) {\n const pool = new ClearableObjectPool<T>(type);\n ShaderCompilerUtils._shaderCompilerObjectPoolSet.push(pool);\n return pool;\n }\n\n static clearAllShaderCompilerObjectPool() {\n for (let i = 0, n = ShaderCompilerUtils._shaderCompilerObjectPoolSet.length; i < n; i++) {\n ShaderCompilerUtils._shaderCompilerObjectPoolSet[i].clear();\n }\n }\n\n static createGSError(\n message: string,\n errorName: GSErrorName,\n source: string,\n location: ShaderRange | ShaderPosition,\n file?: string\n ): Error {\n // #if _VERBOSE\n return new GSError(errorName, message, location, source, file);\n // #else\n console.error(message);\n const err = new Error(message);\n err.name = errorName;\n return err;\n // #endif\n }\n}\n","import { ETokenType } from \"./types\";\nimport { ShaderRange, ShaderPosition } from \".\";\nimport { ShaderCompiler } from \"../ShaderCompiler\";\nimport type { IPoolElement } from \"@galacean/engine-core\";\nimport { ShaderCompilerUtils } from \"../ShaderCompilerUtils\";\n\n/**\n * One condition in a branch signature: `defined: true` for `#ifdef X` (the\n * branch is active when `X` is defined), `defined: false` for `#ifndef X` /\n * after `#else` (active when `X` is undefined).\n */\nexport interface BranchConstraint {\n name: string;\n defined: boolean;\n}\n\n/**\n * Snapshot of the `#ifdef`/`#ifndef`/`#else` stack at a source position. An\n * empty signature means unconditional (top-level). Constraints are conjunctive:\n * the position is active iff every constraint holds. Produced by the Lexer\n * (the sole branch-stack maintainer) and stamped onto every emitted token +\n * every registered `MacroDefineInfo`.\n */\nexport type BranchSignature = readonly BranchConstraint[];\n\n// Canonical empty branch signature shared by all default tokens — avoids\n// per-token allocation. The Lexer overwrites `branch` after `scanToken()`\n// for tokens that are inside an `#ifdef`.\nexport const EMPTY_BRANCH: BranchSignature = [];\n\nexport class BaseToken<T extends number = number> implements IPoolElement {\n static pool = ShaderCompilerUtils.createObjectPool(BaseToken);\n\n type: T;\n lexeme: string;\n location: ShaderRange;\n /** Branch signature snapshot at the point this token was emitted. Empty\n * signature (default) means top-level / unconditional. The Lexer tags\n * every token; downstream code (AST nodes built from tokens) can read\n * the field directly to know which `#ifdef` branch they're inside. */\n branch: BranchSignature = EMPTY_BRANCH;\n\n set(type: T, lexeme: string, start?: ShaderPosition);\n set(type: T, lexeme: string, location?: ShaderRange);\n set(type: T, lexeme: string, arg?: ShaderRange | ShaderPosition) {\n this.type = type;\n this.lexeme = lexeme;\n this.branch = EMPTY_BRANCH;\n if (arg) {\n if (arg instanceof ShaderRange) {\n this.location = arg as ShaderRange;\n } else {\n const end = ShaderCompiler.createPosition(\n arg.index + lexeme.length,\n // #if _VERBOSE\n arg.line,\n arg.column + lexeme.length\n // #endif\n );\n this.location = ShaderCompiler.createRange(arg, end);\n }\n }\n }\n\n dispose(): void {}\n}\n\nexport const EOF = new BaseToken();\nEOF.set(ETokenType.EOF, \"/EOF\");\n","import { ETokenType, GalaceanDataType, TypeAny } from \"./common\";\nimport { BaseToken as Token } from \"./common/BaseToken\";\nimport { ASTNode, TreeNode } from \"./parser/AST\";\nimport { GrammarSymbol, NoneTerminal } from \"./parser/GrammarSymbol\";\n// #if _VERBOSE\nimport { Keyword } from \"./common/enums/Keyword\";\nimport State from \"./lalr/State\";\n// #endif\n\nexport class ParserUtils {\n static unwrapNodeByType<T = TreeNode>(node: TreeNode, type: NoneTerminal): T | undefined {\n const child = node.children[0];\n if (child instanceof Token) return;\n if (child.nt === type) return child as T;\n return ParserUtils.unwrapNodeByType(child, type);\n }\n\n /**\n * Parse a function-macro parameter-list lexeme (`\"(a, b, c)\"`) into its parameter\n * names. An empty list `\"()\"` yields `[]`. Leading/trailing whitespace around each\n * name is trimmed. Empty entries from consecutive commas are filtered out.\n */\n static parseMacroParamList(lexeme: string): string[] {\n const inner = lexeme.replace(/^\\s*\\(\\s*|\\s*\\)\\s*$/g, \"\");\n if (!inner) return [];\n return inner\n .split(\",\")\n .map((s) => s.trim())\n .filter(Boolean);\n }\n\n /**\n * Walk single-child precedence-chain wrappers down to a `VariableIdentifier`,\n * returning the leaf node (or `undefined` for any compound expression).\n *\n * `allowParens` chooses between two callers' needs:\n * - `true` — descend through `( expression )` form, so `(v)` resolves to\n * `v`. Use when the caller substitutes at the expression root\n * (aliasing, renaming); user-written parens carry no extra meaning.\n * - `false` — any 3-child `PrimaryExpression` aborts; `(v)` stays\n * compound. Use when the caller treats the unwrapped node as a single\n * token (IO-struct arg drop, alias detection); user-written parens\n * must not collapse.\n */\n static unwrapBareIdentifier(\n node: TreeNode,\n options: { allowParens: boolean }\n ): ASTNode.VariableIdentifier | undefined {\n let cur: TreeNode = node;\n while (true) {\n if (cur instanceof ASTNode.VariableIdentifier) return cur;\n if (options.allowParens && cur instanceof ASTNode.PrimaryExpression && cur.children.length === 3) {\n const inner = cur.children[1];\n if (!(inner instanceof TreeNode)) return undefined;\n cur = inner;\n continue;\n }\n if (cur instanceof ASTNode.ExpressionAstNode && cur.children.length === 1) {\n const child = cur.children[0];\n if (!(child instanceof TreeNode)) return undefined;\n cur = child;\n continue;\n }\n return undefined;\n }\n }\n\n /**\n * Lexeme variant of `unwrapBareIdentifier({ allowParens: true })` for callers\n * that already work with strings. Returns `null` for compound expressions.\n */\n static extractDirectIdentLexeme(expr: TreeNode): string | null {\n const ident = ParserUtils.unwrapBareIdentifier(expr, { allowParens: true });\n if (!ident) return null;\n const child = ident.children[0];\n return child instanceof Token ? child.lexeme : null;\n }\n\n // #if _VERBOSE\n /**\n * Check if type `tb` is compatible with type `ta`.\n */\n static typeCompatible(ta: GalaceanDataType, tb: GalaceanDataType | undefined) {\n if (tb == undefined || tb === TypeAny) return true;\n if (ta === Keyword.INT) {\n return ta === tb || tb === Keyword.UINT;\n }\n return ta === tb;\n }\n\n static toString(sm: GrammarSymbol) {\n if (this.isTerminal(sm)) {\n return ETokenType[sm] ?? Keyword[sm];\n }\n return NoneTerminal[sm];\n }\n // #endif\n\n static isTerminal(sm: GrammarSymbol) {\n return sm < NoneTerminal.START;\n }\n\n /**\n * @internal\n */\n // #if _VERBOSE\n static printStatePool(logPath: string) {\n let output = \"\";\n\n console.log(\"========== Parser Pool ==========\");\n\n let count = 0;\n for (const state of State.pool.values()) {\n count++;\n let tmp = \"\";\n tmp += `${state.id}: \\n`.padEnd(4);\n for (const psItem of state.items) {\n tmp += \" \" + psItem.toString() + \"\\n\";\n }\n output += tmp;\n }\n\n console.log(\"state count:\", count);\n console.log(output);\n }\n // #endif\n}\n","function _is_native_reflect_construct() {\n // Since Reflect.construct can't be properly polyfilled, some\n // implementations (e.g. core-js@2) don't set the correct internal slots.\n // Those polyfills don't allow us to subclass built-ins, so we need to\n // use our fallback implementation.\n try {\n // If the internal slots aren't set, this throws an error similar to\n // TypeError: this is not a Boolean object.\n var result = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));\n } catch (_) {}\n return (_is_native_reflect_construct = function() {\n return !!result;\n })();\n}\n\nexport { _is_native_reflect_construct as _ };\n","import { _ as _is_native_reflect_construct } from \"./_is_native_reflect_construct.js\";\nimport { _ as _set_prototype_of } from \"./_set_prototype_of.js\";\nfunction _construct(Parent, args, Class) {\n if (_is_native_reflect_construct()) _construct = Reflect.construct;\n else {\n _construct = function construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n\n if (Class) _set_prototype_of(instance, Class.prototype);\n\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}\nexport { _construct as _ };\n","function _get_prototype_of(o) {\n _get_prototype_of = Object.setPrototypeOf ? Object.getPrototypeOf : function getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n\n return _get_prototype_of(o);\n}\nexport { _get_prototype_of as _ };\n","import { _ as _construct } from \"./_construct.js\";\nimport { _ as _get_prototype_of } from \"./_get_prototype_of.js\";\nimport { _ as _is_native_function } from \"./_is_native_function.js\";\nimport { _ as _set_prototype_of } from \"./_set_prototype_of.js\";\n\nfunction _wrap_native_super(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n _wrap_native_super = function(Class) {\n if (Class === null || !_is_native_function(Class)) return Class;\n if (typeof Class !== \"function\") throw new TypeError(\"Super expression must either be null or a function\");\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return _construct(Class, arguments, _get_prototype_of(this).constructor);\n }\n Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } });\n\n return _set_prototype_of(Wrapper, Class);\n };\n\n return _wrap_native_super(Class);\n}\nexport { _wrap_native_super as _ };\n","function _is_native_function(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}\nexport { _is_native_function as _ };\n","import { ShaderPosition, ShaderRange } from \".\";\nimport { GSErrorName } from \"../GSError\";\nimport { ShaderCompiler } from \"../ShaderCompiler\";\nimport { ShaderCompilerUtils } from \"../ShaderCompilerUtils\";\nimport { BaseToken } from \"./BaseToken\";\n\nexport type OnToken = (token: BaseToken, scanner: BaseLexer) => void;\n\n/**\n * @internal\n */\nexport abstract class BaseLexer {\n static isDigit(charCode: number): boolean {\n return charCode >= 48 && charCode <= 57; // 0-9\n }\n\n static isHexDigit(charCode: number): boolean {\n return (\n (charCode >= 48 && charCode <= 57) || // 0-9\n (charCode >= 65 && charCode <= 70) || // A-F\n (charCode >= 97 && charCode <= 102) // a-f\n );\n }\n\n // Check if character is alphabetic or underscore (valid word start)\n static isAlpha(charCode: number): boolean {\n return (\n charCode === 95 || // _\n (charCode >= 65 && charCode <= 90) || // A-Z\n (charCode >= 97 && charCode <= 122) // a-z\n );\n }\n\n // Check if character is alphanumeric (alpha + digit)\n static isAlnum(charCode: number): boolean {\n return BaseLexer.isAlpha(charCode) || BaseLexer.isDigit(charCode);\n }\n\n static isPreprocessorStartChar(charCode: number): boolean {\n return charCode === 35; // #\n }\n\n /**\n * If `i` points at the start of a `/* … *\\/` block comment, return the index\n * just past the closing `*\\/`. Otherwise return `i` unchanged. If the\n * comment is unterminated, returns `len` (clamped, never overshoots).\n * Single source of truth for block-comment scanning across the lexer.\n */\n protected static _skipBlockComment(src: string, i: number, len: number): number {\n if (src.charCodeAt(i) !== 47 /* '/' */ || i + 1 >= len || src.charCodeAt(i + 1) !== 42 /* '*' */) return i;\n let j = i + 2;\n while (j + 1 < len) {\n if (src.charCodeAt(j) === 42 && src.charCodeAt(j + 1) === 47) return j + 2;\n j++;\n }\n return len;\n }\n\n /**\n * If `i` points at the start of a `//` line comment, return the index of the\n * terminating newline (or `len` at EOF). The newline itself is NOT consumed\n * — callers decide whether `\\n` is whitespace or a logical separator.\n * Otherwise return `i` unchanged.\n */\n protected static _skipLineComment(src: string, i: number, len: number): number {\n if (src.charCodeAt(i) !== 47 /* '/' */ || i + 1 >= len || src.charCodeAt(i + 1) !== 47) return i;\n let j = i + 2;\n while (j < len) {\n const c = src.charCodeAt(j);\n if (c === 10 || c === 13) break;\n j++;\n }\n return j;\n }\n\n static isWhiteSpaceChar(charCode: number, includeBreak: boolean): boolean {\n // Space || Tab\n if (charCode === 32 || charCode === 9) {\n return true;\n }\n return includeBreak && (charCode === 10 || charCode === 13); // \\n || \\r\n }\n\n protected _currentIndex = 0;\n protected _source: string;\n\n // #if _VERBOSE\n protected _column = 0;\n protected _line = 0;\n // #endif\n\n get currentIndex(): number {\n return this._currentIndex;\n }\n\n get source(): string {\n return this._source;\n }\n\n // #if _VERBOSE\n get line() {\n return this._line;\n }\n\n get column() {\n return this._column;\n }\n // #endif\n\n constructor(source?: string) {\n this._source = source;\n }\n\n setSource(source: string): void {\n this._source = source;\n this._currentIndex = 0;\n // #if _VERBOSE\n this._line = this._column = 0;\n // #endif\n }\n\n getShaderPosition(backOffset = 0): ShaderPosition {\n return ShaderCompiler.createPosition(\n this._currentIndex - backOffset,\n // #if _VERBOSE\n this._line,\n this._column - backOffset\n // #endif\n );\n }\n\n isEnd(): boolean {\n return this._currentIndex >= this._source.length;\n }\n\n getCurChar(): string {\n return this._source[this._currentIndex];\n }\n\n getCurCharCode(): number {\n return this._source.charCodeAt(this._currentIndex);\n }\n\n advance(count: number): void {\n // #if _VERBOSE\n const source = this._source;\n const startIndex = this._currentIndex;\n for (let i = 0; i < count; i++) {\n if (source[startIndex + i] === \"\\n\") {\n this._line += 1;\n this._column = 0;\n } else {\n this._column += 1;\n }\n }\n // #endif\n this._currentIndex += count;\n }\n\n skipSpace(includeLineBreak: boolean): void {\n while (BaseLexer.isWhiteSpaceChar(this.getCurCharCode(), includeLineBreak)) {\n this.advance(1);\n }\n }\n\n skipCommentsAndSpace(): void {\n const source = this._source;\n const length = source.length;\n let index = this._currentIndex;\n\n while (index < length) {\n // Whitespace including newlines — `\\n` is just a separator in the\n // top-level (non-directive) scan path.\n while (index < length && BaseLexer.isWhiteSpaceChar(source.charCodeAt(index), true)) {\n index++;\n }\n const afterBlock = BaseLexer._skipBlockComment(source, index, length);\n if (afterBlock !== index) {\n index = afterBlock;\n continue;\n }\n const afterLine = BaseLexer._skipLineComment(source, index, length);\n if (afterLine !== index) {\n index = afterLine;\n continue;\n }\n break;\n }\n\n this.advance(index - this._currentIndex);\n }\n\n peek(to: number): string {\n const offset = this._currentIndex;\n return this._source.substring(offset, offset + to);\n }\n\n scanLexeme(lexeme: string): void {\n this.skipCommentsAndSpace();\n const length = lexeme.length;\n const peek = this.peek(length);\n if (peek !== lexeme) {\n this.throwError(this.getShaderPosition(0), `Expect lexeme \"${lexeme}\", but got \"${peek}\"`);\n }\n this.advance(length);\n }\n\n scanTwoExpectedLexemes(lexeme1: string, lexeme2: string): string | null {\n this.skipCommentsAndSpace();\n\n // Check first lexeme\n if (this.peek(lexeme1.length) === lexeme1) {\n this.advance(lexeme1.length);\n return lexeme1;\n }\n\n // Check second lexeme\n if (this.peek(lexeme2.length) === lexeme2) {\n this.advance(lexeme2.length);\n return lexeme2;\n }\n\n return null;\n }\n\n throwError(pos: ShaderPosition | ShaderRange, ...msgs: any[]) {\n const error = ShaderCompilerUtils.createGSError(msgs.join(\" \"), GSErrorName.ScannerError, this._source, pos);\n // #if _VERBOSE\n console.error(error!.toString());\n // #endif\n throw error;\n }\n\n scanPairedChar(left: string, right: string, balanced: boolean, skipLeading: boolean): string {\n if (!skipLeading) {\n this.scanLexeme(left);\n }\n\n const start = this._currentIndex;\n const source = this._source;\n const sourceLength = source.length;\n\n let currentIndex = this._currentIndex;\n if (balanced) {\n let level = 1;\n while (currentIndex < sourceLength) {\n const currentChar = source[currentIndex];\n if (currentChar === right && --level === 0) {\n break;\n } else if (currentChar === left) {\n level++;\n }\n currentIndex++;\n }\n } else {\n while (currentIndex < sourceLength) {\n if (source[currentIndex] === right) {\n break;\n }\n currentIndex++;\n }\n }\n\n this.advance(currentIndex + 1 - this._currentIndex);\n\n return source.substring(start, currentIndex);\n }\n\n abstract scanToken(onToken?: OnToken): void;\n}\n","import { ETokenType } from \"../common\";\nimport { BaseLexer } from \"../common/BaseLexer\";\nimport { BaseToken, BranchConstraint, BranchSignature, EMPTY_BRANCH, EOF } from \"../common/BaseToken\";\nimport { Keyword } from \"../common/enums/Keyword\";\nimport { MacroDefineInfo, MacroDefineList } from \"../Preprocessor\";\nimport { ShaderCompiler } from \"../ShaderCompiler\";\n\n/**\n * The Lexer of Shader Compiler\n */\nexport class Lexer extends BaseLexer {\n private static _lexemeTable = <Record<string, Keyword>>{\n const: Keyword.CONST,\n bool: Keyword.BOOL,\n float: Keyword.FLOAT,\n double: Keyword.DOUBLE,\n int: Keyword.INT,\n uint: Keyword.UINT,\n break: Keyword.BREAK,\n continue: Keyword.CONTINUE,\n do: Keyword.DO,\n else: Keyword.ELSE,\n for: Keyword.FOR,\n if: Keyword.IF,\n while: Keyword.WHILE,\n discard: Keyword.DISCARD,\n return: Keyword.RETURN,\n bvec2: Keyword.BVEC2,\n bvec3: Keyword.BVEC3,\n bvec4: Keyword.BVEC4,\n ivec2: Keyword.IVEC2,\n ivec3: Keyword.IVEC3,\n ivec4: Keyword.IVEC4,\n uvec2: Keyword.UVEC2,\n uvec3: Keyword.UVEC3,\n uvec4: Keyword.UVEC4,\n vec2: Keyword.VEC2,\n vec3: Keyword.VEC3,\n vec4: Keyword.VEC4,\n mat2: Keyword.MAT2,\n mat3: Keyword.MAT3,\n mat4: Keyword.MAT4,\n in: Keyword.IN,\n out: Keyword.OUT,\n inout: Keyword.INOUT,\n sampler2D: Keyword.SAMPLER2D,\n samplerCube: Keyword.SAMPLER_CUBE,\n sampler3D: Keyword.SAMPLER3D,\n sampler2DShadow: Keyword.SAMPLER2D_SHADOW,\n samplerCubeShadow: Keyword.SAMPLER_CUBE_SHADOW,\n sampler2DArray: Keyword.SAMPLER2D_ARRAY,\n sampler2DArrayShadow: Keyword.SAMPLER2D_ARRAY_SHADOW,\n isampler2D: Keyword.I_SAMPLER2D,\n isampler3D: Keyword.I_SAMPLER3D,\n isamplerCube: Keyword.I_SAMPLER_CUBE,\n isampler2DArray: Keyword.I_SAMPLER2D_ARRAY,\n usampler2D: Keyword.U_SAMPLER2D,\n usampler3D: Keyword.U_SAMPLER3D,\n usamplerCube: Keyword.U_SAMPLER_CUBE,\n usampler2DArray: Keyword.U_SAMPLER2D_ARRAY,\n struct: Keyword.STRUCT,\n void: Keyword.VOID,\n true: Keyword.True,\n false: Keyword.False,\n precision: Keyword.PRECISION,\n precise: Keyword.PRECISE,\n highp: Keyword.HIGHP,\n mediump: Keyword.MEDIUMP,\n lowp: Keyword.LOWP,\n invariant: Keyword.INVARIANT,\n flat: Keyword.FLAT,\n smooth: Keyword.SMOOTH,\n noperspective: Keyword.NOPERSPECTIVE,\n centroid: Keyword.CENTROID,\n layout: Keyword.LAYOUT,\n location: Keyword.LOCATION,\n\n // Macros ...\n \"#if\": Keyword.MACRO_IF,\n \"#ifdef\": Keyword.MACRO_IFDEF,\n \"#ifndef\": Keyword.MACRO_IFNDEF,\n \"#else\": Keyword.MACRO_ELSE,\n \"#elif\": Keyword.MACRO_ELIF,\n \"#endif\": Keyword.MACRO_ENDIF,\n \"#undef\": Keyword.MACRO_UNDEF\n };\n\n // Synthetic `__if_<n>` per `#if` — polarity flip makes `#else` mutually exclusive in `isVisibleFrom`.\n private static _ifCounter = 0;\n\n /** Two branch signatures are equal iff they have the same constraints in the\n * same order with the same polarity. Used by `#define` dedup and AST upgrade\n * matching. */\n static sameBranch(a: BranchSignature, b: BranchSignature): boolean {\n if (a.length !== b.length) return false;\n for (let i = 0, n = a.length; i < n; i++) {\n if (a[i].name !== b[i].name || a[i].defined !== b[i].defined) return false;\n }\n return true;\n }\n\n /**\n * Returns true if a `#define` registered under `defBranch` is reachable from\n * a call site under `callSiteBranch`. Two signatures are mutually exclusive\n * iff some flag appears in both with opposite `defined` polarity. Anything\n * else is compatible — the same flag with the same polarity, or flags that\n * simply don't intersect.\n *\n * Conservative for `#if expr` (not modeled — `tokenize` pushes a sentinel\n * with `name === \"\"` to keep the `#endif` stack depth correct; that\n * sentinel never matches a real flag in the polarity check below, so it\n * stays visible from everywhere). Exact for the common `#ifdef` /\n * `#ifndef` / `#else` cases that drive real shader code.\n */\n static isVisibleFrom(defBranch: BranchSignature, callSiteBranch: BranchSignature): boolean {\n for (let i = 0, n = defBranch.length; i < n; i++) {\n const d = defBranch[i];\n for (let j = 0, m = callSiteBranch.length; j < m; j++) {\n const c = callSiteBranch[j];\n if (d.name === c.name && d.defined !== c.defined) return false;\n }\n }\n return true;\n }\n\n private _needScanMacroConditionExpression = false;\n\n // --- `#define` scanning state machine ---\n // Expression-style `#define` produces a token stream:\n // MACRO_DEFINE, ID(name), [MACRO_DEFINE_PARAMS], <value tokens>, MACRO_DEFINE_END\n // The three flags below encode the mini state machine driving that stream:\n // - _inMacroDefineValue : persistent mode — newline terminates the directive\n // rather than being skipped as whitespace\n // - _macroDefineExpectsNameToken : one-shot — next identifier is the macro\n // name and must be ID (not MACRO_CALL even if the\n // name was registered by a prior definition)\n // - _macroDefineExpectsParamsToken : one-shot — if next char is `(`, capture\n // the balanced `(…)` block as a single opaque token\n // so the CFG doesn't need its own parameter-list\n // non-terminal (which would conflict with\n // function_call_parameter_list under LALR(1))\n private _inMacroDefineValue = false;\n private _macroDefineExpectsNameToken = false;\n private _macroDefineExpectsParamsToken = false;\n\n // Fields populated as the state machine walks a `#define` directive; consumed\n // by `_emitMacroDefineEnd` to register the directive without re-parsing.\n private _currentMacroName = \"\";\n private _currentMacroParamsLexeme: string | undefined = undefined;\n private _currentMacroValueStart = -1;\n\n // Active `#ifdef`/`#ifndef`/`#else` stack. Updated by `tokenize` between\n // emitting tokens; read by `_registerMacroDefine` (when it registers a\n // legacy entry mid-scan) and stamped onto every emitted token's `branch`\n // field so AST nodes know which branch they're inside.\n private _branchStack: BranchConstraint[] = [];\n // True when the previous token was `#ifdef`/`#ifndef` and we're waiting on\n // the next ID token (the flag name) to actually push onto the stack.\n private _pendingBranchPushDefined: boolean | null = null;\n\n *tokenize() {\n while (!this.isEnd()) {\n const tok = this.scanToken();\n\n // Resolve a pending #ifdef/#ifndef push using the flag-name token that\n // immediately follows the keyword. Grammar allows the name to be either\n // a plain `id` or a `MACRO_CALL` (for `#ifdef <previously-defined-macro>`).\n if (this._pendingBranchPushDefined !== null && (tok.type === ETokenType.ID || tok.type === Keyword.MACRO_CALL)) {\n this._branchStack.push({ name: tok.lexeme, defined: this._pendingBranchPushDefined });\n this._pendingBranchPushDefined = null;\n }\n\n // Stamp the branch onto the token only when inside an `#ifdef`. The\n // top-level case keeps the BaseToken default (shared empty signature),\n // so the hot path stays allocation-free.\n if (this._branchStack.length > 0) tok.branch = this._branchStack.slice();\n\n // Update stack state based on the just-emitted token, so the *next*\n // token sees the correct snapshot. `#if expr` opens a level we can't\n // address (we don't model expressions), but must consume a stack slot\n // so the matching `#endif` pops the right depth — without it, an\n // outer `#ifdef A`'s constraint would be wrongly popped.\n switch (tok.type as Keyword) {\n case Keyword.MACRO_IFDEF:\n this._pendingBranchPushDefined = true;\n break;\n case Keyword.MACRO_IFNDEF:\n this._pendingBranchPushDefined = false;\n break;\n case Keyword.MACRO_IF:\n this._branchStack.push({ name: `__if_${++Lexer._ifCounter}`, defined: true });\n break;\n case Keyword.MACRO_ELIF:\n // Each `#elif` link gets a fresh tag so it's exclusive with earlier arms.\n if (this._branchStack.length > 0) {\n this._branchStack[this._branchStack.length - 1] = {\n name: `__if_${++Lexer._ifCounter}`,\n defined: true\n };\n }\n break;\n case Keyword.MACRO_ELSE: {\n // Flip polarity: `#ifdef X` → `[X=true]` becomes `[X=false]`; `__if_n` likewise.\n const top = this._branchStack[this._branchStack.length - 1];\n if (top) this._branchStack[this._branchStack.length - 1] = { name: top.name, defined: !top.defined };\n break;\n }\n case Keyword.MACRO_ENDIF:\n this._branchStack.pop();\n break;\n }\n\n yield tok;\n }\n return EOF;\n }\n\n constructor(\n source: string,\n public macroDefineList: MacroDefineList\n ) {\n super(source);\n }\n\n override scanToken(): BaseToken {\n if (this._inMacroDefineValue) {\n // Inside a `#define` value: newline ends the directive. Skip only spaces/tabs\n // and block comments, never \\n, so the termination can be detected.\n this._skipInlineSpaceAndComments();\n if (this.isEnd() || this._isAtLineBreak()) {\n return this._emitMacroDefineEnd();\n }\n // Right after the macro name, if the next char is `(`, capture the whole\n // parenthesized parameter list as one opaque token. This keeps the\n // macro-define grammar LALR(1)-friendly (no nested param-list non-terminal).\n if (this._macroDefineExpectsParamsToken) {\n this._macroDefineExpectsParamsToken = false;\n if (this.getCurChar() === \"(\") {\n return this._scanMacroDefineParams();\n }\n }\n } else {\n this.skipCommentsAndSpace();\n if (this.isEnd()) {\n return EOF;\n }\n }\n\n if (this._needScanMacroConditionExpression) {\n this._needScanMacroConditionExpression = false;\n return this._scanMacroConditionExpression();\n }\n\n const curCharCode = this.getCurCharCode();\n if (BaseLexer.isPreprocessorStartChar(curCharCode)) {\n return this._scanDirectives();\n }\n if (BaseLexer.isAlpha(curCharCode)) {\n return this._scanWord();\n }\n if (BaseLexer.isDigit(curCharCode)) {\n return this._scanNum();\n }\n\n const start = this.getShaderPosition();\n const token = BaseToken.pool.get();\n let curChar: string;\n\n switch (this.getCurChar()) {\n case \"<\":\n this.advance(1);\n curChar = this.getCurChar();\n if (curChar === \"<\") {\n this.advance(1);\n if (this.getCurChar() === \"=\") {\n this.advance(1);\n token.set(ETokenType.LEFT_ASSIGN, \"<<=\", start);\n break;\n }\n token.set(ETokenType.LEFT_OP, \"<<\", start);\n break;\n } else if (curChar === \"=\") {\n this.advance(1);\n token.set(ETokenType.LE_OP, \"<=\", start);\n break;\n }\n token.set(ETokenType.LEFT_ANGLE, \"<\", start);\n break;\n\n case \">\":\n this.advance(1);\n curChar = this.getCurChar();\n if (curChar === \">\") {\n this.advance(1);\n if (this.getCurChar() === \"=\") {\n this.advance(1);\n token.set(ETokenType.RIGHT_ASSIGN, \">>=\", start);\n break;\n }\n token.set(ETokenType.RIGHT_OP, \">>\", start);\n break;\n } else if (curChar === \"=\") {\n this.advance(1);\n token.set(ETokenType.GE_OP, \">=\", start);\n break;\n }\n token.set(ETokenType.RIGHT_ANGLE, \">\", start);\n break;\n\n case \"+\":\n this.advance(1);\n curChar = this.getCurChar();\n if (curChar === \"+\") {\n this.advance(1);\n token.set(ETokenType.INC_OP, \"++\", start);\n break;\n } else if (curChar === \"=\") {\n this.advance(1);\n token.set(ETokenType.ADD_ASSIGN, \"+=\", start);\n break;\n }\n token.set(ETokenType.PLUS, \"+\", start);\n break;\n\n case \"-\":\n this.advance(1);\n curChar = this.getCurChar();\n if (curChar === \"-\") {\n this.advance(1);\n token.set(ETokenType.DEC_OP, \"--\", start);\n break;\n } else if (curChar === \"=\") {\n this.advance(1);\n token.set(ETokenType.SUB_ASSIGN, \"-=\", start);\n break;\n }\n token.set(ETokenType.DASH, \"-\", start);\n break;\n\n case \"=\":\n this.advance(1);\n if (this.getCurChar() === \"=\") {\n this.advance(1);\n token.set(ETokenType.EQ_OP, \"==\", start);\n break;\n }\n token.set(ETokenType.EQUAL, \"=\", start);\n break;\n\n case \"!\":\n this.advance(1);\n if (this.getCurChar() === \"=\") {\n this.advance(1);\n token.set(ETokenType.NE_OP, \"!=\", start);\n break;\n }\n token.set(ETokenType.BANG, \"!\", start);\n break;\n\n case \"&\":\n this.advance(1);\n curChar = this.getCurChar();\n if (curChar === \"&\") {\n this.advance(1);\n token.set(ETokenType.AND_OP, \"&&\", start);\n break;\n } else if (curChar === \"=\") {\n this.advance(1);\n token.set(ETokenType.AND_ASSIGN, \"&=\", start);\n break;\n }\n token.set(ETokenType.AMPERSAND, \"&\", start);\n break;\n\n case \"|\":\n this.advance(1);\n curChar = this.getCurChar();\n if (curChar === \"|\") {\n this.advance(1);\n token.set(ETokenType.OR_OP, \"||\", start);\n break;\n } else if (curChar === \"=\") {\n this.advance(1);\n token.set(ETokenType.OR_ASSIGN, \"|=\", start);\n break;\n }\n token.set(ETokenType.VERTICAL_BAR, \"|\", start);\n break;\n\n case \"^\":\n this.advance(1);\n curChar = this.getCurChar();\n if (curChar === \"^\") {\n this.advance(1);\n token.set(ETokenType.XOR_OP, \"^^\", start);\n break;\n } else if (curChar === \"=\") {\n this.advance(1);\n token.set(ETokenType.XOR_ASSIGN, \"^=\", start);\n break;\n }\n token.set(ETokenType.CARET, \"^\", start);\n break;\n\n case \"*\":\n this.advance(1);\n if (this.getCurChar() === \"=\") {\n this.advance(1);\n token.set(ETokenType.MUL_ASSIGN, \"*=\", start);\n break;\n }\n\n token.set(ETokenType.STAR, \"*\", start);\n break;\n\n case \"/\":\n this.advance(1);\n if (this.getCurChar() === \"=\") {\n this.advance(1);\n\n token.set(ETokenType.DIV_ASSIGN, \"/=\", start);\n break;\n }\n\n token.set(ETokenType.SLASH, \"/\", start);\n break;\n\n case \"%\":\n this.advance(1);\n if (this.getCurChar() === \"=\") {\n this.advance(1);\n\n token.set(ETokenType.MOD_ASSIGN, \"%=\", start);\n break;\n }\n\n token.set(ETokenType.PERCENT, \"%\", start);\n break;\n\n case \"(\":\n this.advance(1);\n\n token.set(ETokenType.LEFT_PAREN, \"(\", start);\n break;\n case \")\":\n this.advance(1);\n\n token.set(ETokenType.RIGHT_PAREN, \")\", start);\n break;\n case \"{\":\n this.advance(1);\n\n token.set(ETokenType.LEFT_BRACE, \"{\", start);\n break;\n case \"}\":\n this.advance(1);\n\n token.set(ETokenType.RIGHT_BRACE, \"}\", start);\n break;\n case \"[\":\n this.advance(1);\n\n token.set(ETokenType.LEFT_BRACKET, \"[\", start);\n break;\n case \"]\":\n this.advance(1);\n\n token.set(ETokenType.RIGHT_BRACKET, \"]\", start);\n break;\n case \".\":\n this.advance(1);\n if (BaseLexer.isDigit(this.getCurCharCode())) {\n return this._scanNumAfterDot();\n }\n\n token.set(ETokenType.DOT, \".\", start);\n break;\n case \",\":\n this.advance(1);\n\n token.set(ETokenType.COMMA, \",\", start);\n break;\n case \":\":\n this.advance(1);\n\n token.set(ETokenType.COLON, \":\", start);\n return token;\n case \";\":\n this.advance(1);\n\n token.set(ETokenType.SEMICOLON, \";\", start);\n break;\n case \"~\":\n this.advance(1);\n\n token.set(ETokenType.TILDE, \"~\", start);\n break;\n case \"?\":\n this.advance(1);\n\n token.set(ETokenType.QUESTION, \"?\", start);\n break;\n case '\"':\n this.advance(1);\n return this._scanStringConst();\n\n default:\n this.throwError(this.getShaderPosition(0), `Unexpected character ${this.getCurChar()}`);\n }\n return token;\n }\n\n private _scanStringConst(): BaseToken {\n const start = this.getShaderPosition();\n const buffer: string[] = [];\n while (this.getCurChar() !== '\"') {\n buffer.push(this.getCurChar());\n this.advance(1);\n }\n this.advance(1);\n const range = ShaderCompiler.createRange(start, this.getShaderPosition());\n\n const token = BaseToken.pool.get();\n token.set(ETokenType.STRING_CONST, buffer.join(\"\"), range);\n return token;\n }\n\n private _scanNumAfterDot(): BaseToken {\n const buffer = [\".\"];\n while (BaseLexer.isDigit(this.getCurCharCode())) {\n buffer.push(this.getCurChar());\n this.advance(1);\n }\n this._scanFloatSuffix(buffer);\n const token = BaseToken.pool.get();\n token.set(ETokenType.FLOAT_CONSTANT, buffer.join(\"\"), this.getShaderPosition(buffer.length));\n return token;\n }\n\n private _scanUtilBreakLine(outBuffer: string[]): void {\n const src = this._source;\n const len = src.length;\n while (!this.isEnd()) {\n // Honor line-continuation so multi-line directives (`#define X a \\\\\\n + b`)\n // are not cut short at the first physical newline.\n const afterContinuation = Lexer._skipLineContinuation(src, this._currentIndex, len);\n if (afterContinuation !== this._currentIndex) {\n this.advance(afterContinuation - this._currentIndex);\n continue;\n }\n const c = src.charCodeAt(this._currentIndex);\n if (c === 10) break;\n outBuffer.push(src[this._currentIndex]);\n this.advance(1);\n }\n }\n\n private _scanDirectives(): BaseToken {\n const buffer: string[] = [this.getCurChar()];\n const start = this.getShaderPosition();\n this.advance(1);\n while (BaseLexer.isAlpha(this.getCurCharCode())) {\n buffer.push(this.getCurChar());\n this.advance(1);\n }\n const token = BaseToken.pool.get();\n const word = buffer.join(\"\");\n\n if (word === \"#define\") {\n const peek = this._peekMacroDefine();\n if (peek && peek.isExpression) {\n // AST path: the value will be tokenized by the lexer's `_inMacroDefineValue`\n // state machine and re-parsed by the expression grammar. State machine\n // fills `_currentMacroName` / `_currentMacroParamsLexeme` / `_currentMacroValueStart`\n // as it walks the value; `_emitMacroDefineEnd` consumes them.\n this._inMacroDefineValue = true;\n // The next word is the macro name: force ID type even if a prior `#define`\n // has already registered the name into `macroDefineList` (redefinition or\n // multi-chunk include), which would otherwise make the word a MACRO_CALL.\n this._macroDefineExpectsNameToken = true;\n token.set(Keyword.MACRO_DEFINE, \"#define\", start);\n } else {\n // Legacy path: opaque token sequence. Register directly from the peek\n // result without re-walking the directive.\n this._scanUtilBreakLine(buffer);\n const lexeme = \"\\n\" + buffer.join(\"\") + \"\\n\";\n if (peek) {\n this._registerMacroDefine(peek.name, peek.paramsLexeme, peek.valueStart, peek.valueEnd);\n }\n token.set(Keyword.MACRO_DEFINE_EXPRESSION, lexeme, start);\n }\n } else {\n const kt = Lexer._lexemeTable[word];\n token.set(kt ?? ETokenType.ID, word, start);\n if (word === \"#if\" || word === \"#elif\") {\n this._needScanMacroConditionExpression = true;\n }\n }\n\n return token;\n }\n\n /** True if the current char is an unescaped line break (ignoring `\\` continuation). */\n private _isAtLineBreak(): boolean {\n const c = this.getCurChar();\n return c === \"\\n\" || c === \"\\r\";\n }\n\n /**\n * Walk a `#define` directive head once and produce everything both routing\n * and registration need: name range, optional params range, value range,\n * and whether the value parses as an `expression`.\n *\n * The replacement list is split three ways:\n *\n * - **AST path** (`isExpression = true`): value parses as `expression`.\n * Covers identifiers, literals, parenthesized sub-expressions, operator\n * expressions, function calls, top-level comma lists (per C99 §6.10.3).\n *\n * - **Legacy opaque path** (`isExpression = false`, no throw): the three\n * GLSL-ES-§3.4-legal-but-not-an-expression shapes with real-world use —\n * 1. empty value e.g. `#define COMMON_INCLUDED`\n * 2. single type/qualifier keyword e.g. `#define FxaaFloat float`\n * 3. type-qualifier list e.g. `#define TEX_PARAM(s) mediump sampler2D s`\n *\n * Note on X-macro support: the classical C X-macro pattern (a list\n * macro re-expanded with redefined `X(...)`) works fine — it uses\n * function-like macros + `\\` line-continuation + `#undef`, all of\n * which Galacean supports. It does NOT require unbalanced parens.\n *\n * - **Authoring error** (throws): every other shape that's not a valid\n * `expression`. Legal token sequences in theory but not used in real\n * GLSL — almost always author mistakes. We surface one uniform\n * diagnostic with the macro name and value text and let the user fix\n * their code instead of routing politely.\n *\n * Unsupported shapes that throw (non-exhaustive — the predicate is\n * \"the value doesn't reduce as `expression` and isn't one of the three\n * legacy shapes above\"):\n * - leading bare punctuation `,` `;` `:` `?` `)` `]`\n * - trailing `,` or `;` e.g. `#define X a, b,`\n * - trailing binary / unary op `+` `-` `*` `/` `%` `&` `|` `^`\n * `<` `>` `=` `!` `~`\n * - trailing ternary fragment `?` or `:`\n * - unbalanced `[` / `]` e.g. `#define X a[b`\n * - unbalanced `(` / `)` e.g. `#define PAREN (`\n *\n * Returns `null` if the directive is malformed before the name. `cursor` is\n * the position past the last non-newline char (caller advances from there).\n */\n private _peekMacroDefine(): {\n name: string;\n paramsLexeme: string | undefined;\n valueStart: number;\n valueEnd: number;\n cursor: number;\n isExpression: boolean;\n } | null {\n const src = this._source;\n const len = src.length;\n let i = Lexer._skipNonSemantic(src, this._currentIndex, len);\n if (!(i < len && BaseLexer.isAlpha(src.charCodeAt(i)))) return null;\n const nameStart = i;\n while (i < len && BaseLexer.isAlnum(src.charCodeAt(i))) i++;\n const name = src.slice(nameStart, i);\n // Optional `(params)` glued to the name (function-like per C99 §6.10.3/10;\n // whitespace before `(` makes it object-like — `(` becomes part of value).\n let paramsLexeme: string | undefined;\n if (i < len && src.charCodeAt(i) === 40 /* '(' */) {\n const paramsStart = i;\n let depth = 1;\n i++;\n while (i < len && depth > 0) {\n i = Lexer._skipNonSemantic(src, i, len);\n if (i >= len) break;\n const c = src.charCodeAt(i);\n if (c === 10 || c === 13) {\n // Unbalanced before newline — treat as malformed function-like.\n return { name, paramsLexeme: undefined, valueStart: i, valueEnd: i, cursor: i, isExpression: false };\n }\n if (c === 40) depth++;\n else if (c === 41 /* ')' */) depth--;\n i++;\n }\n paramsLexeme = src.slice(paramsStart, i);\n }\n // Walk the value once tracking what routing needs.\n const valueStart = i;\n let parenDepth = 0;\n let bracketDepth = 0;\n let firstStart = -1;\n let firstEnd = -1;\n let firstFollowedByParen = false;\n let topLevelLast = -1;\n while (i < len) {\n const skipped = Lexer._skipNonSemantic(src, i, len);\n if (skipped !== i) {\n i = skipped;\n continue;\n }\n const c = src.charCodeAt(i);\n if (c === 10 || c === 13) break;\n if (firstStart === -1) {\n firstStart = i;\n if (BaseLexer.isAlpha(c)) {\n while (i < len && BaseLexer.isAlnum(src.charCodeAt(i))) i++;\n firstEnd = i;\n const after = Lexer._skipNonSemantic(src, i, len);\n firstFollowedByParen = after < len && src.charCodeAt(after) === 40;\n topLevelLast = firstEnd - 1;\n continue;\n }\n }\n if (c === 40) parenDepth++;\n else if (c === 41) parenDepth--;\n else if (c === 91 /* [ */) bracketDepth++;\n else if (c === 93 /* ] */) bracketDepth--;\n if (parenDepth === 0 && bracketDepth === 0) topLevelLast = i;\n i++;\n }\n const result = { name, paramsLexeme, valueStart, valueEnd: i, cursor: i, isExpression: false };\n // Real-world legacy shapes:\n // 1. empty value, 2. single type/qualifier kw, 3. type-qualifier list.\n if (firstStart === -1) return result;\n if (\n firstEnd !== -1 &&\n !firstFollowedByParen &&\n Lexer._isNonExpressionLeadingKeyword(src.slice(firstStart, firstEnd))\n ) {\n return result;\n }\n // Authoring errors. Anything that's neither a legal `expression` nor one\n // of the three legacy shapes above gets a single uniform diagnostic —\n // the user sees the macro name and the value text, that's enough to\n // locate and fix. We don't categorize further; the rule for users is\n // simply \"value must be a valid GLSL expression\".\n //\n // Legal expression starts: alnum (identifier / literal), `(` (group),\n // `.` (GLSL ES §4.1.4 leading-dot float literal like `.5`), `-`/`+`/`!`/`~`\n // (unary). Legal expression ends: alnum (identifier / literal), `)` (group\n // close), `]` (array-index close). Everything else at the head or\n // top-level tail is an authoring error.\n const head = src.charCodeAt(firstStart);\n const tail = topLevelLast >= 0 ? src.charCodeAt(topLevelLast) : 0;\n const headIllegal =\n !BaseLexer.isAlnum(head) &&\n head !== 40 /* ( */ &&\n head !== 46 /* . */ &&\n head !== 45 /* - */ &&\n head !== 43 /* + */ &&\n head !== 33 /* ! */ &&\n head !== 126; /* ~ */\n const tailIllegal = !BaseLexer.isAlnum(tail) && tail !== 41 /* ) */ && tail !== 93; /* ] */\n if (parenDepth !== 0 || bracketDepth !== 0 || headIllegal || tailIllegal) {\n const valueText = src.slice(firstStart, i).replace(/\\s+/g, \" \").trim();\n this.throwError(\n this.getShaderPosition(0),\n `#define ${name}: invalid replacement list — not a valid GLSL expression (\"${valueText}\")`\n );\n }\n result.isExpression = true;\n return result;\n }\n\n /** GLSL type / qualifier keywords that aren't expression starters when standing alone.\n * `true` / `false` are excluded — they're `primary_expression` literals.\n * `#`-prefixed entries are excluded — they're preprocessor directive names. */\n private static _isNonExpressionLeadingKeyword(lexeme: string): boolean {\n const kw = Lexer._lexemeTable[lexeme];\n return kw !== undefined && kw !== Keyword.True && kw !== Keyword.False && !lexeme.startsWith(\"#\");\n }\n\n /**\n * If `i` points at a `\\` immediately followed by a newline (`\\n`, `\\r`, or\n * `\\r\\n`), return the index just past the pair (a single atom in the C/GLSL\n * preprocessor view). Otherwise return `i` unchanged. This is the single\n * source of truth for line-continuation detection — callers along the\n * directive-scanning path (`_skipNonSemantic`, `_scanUtilBreakLine`,\n * `_scanMacroDefineParams`) all delegate here so the rule stays in one\n * place.\n */\n private static _skipLineContinuation(src: string, i: number, len: number): number {\n if (src.charCodeAt(i) !== 92 /* '\\\\' */ || i + 1 >= len) return i;\n const n = src.charCodeAt(i + 1);\n if (n === 10) return i + 2;\n if (n === 13) return i + 2 < len && src.charCodeAt(i + 2) === 10 ? i + 3 : i + 2;\n return i;\n }\n\n /**\n * Pure positional version of \"skip non-semantic characters within a single\n * `#define` directive\": spaces, tabs, `\\` + newline line-continuation, block\n * comments, line comments. A real `\\n` (without preceding `\\`) is *not*\n * consumed — it terminates the directive — so callers can detect\n * end-of-directive after this returns. Shared by `_defineHasValue` (peek\n * path) and `_skipInlineSpaceAndComments` (consuming path) so both honor\n * the same lexical view.\n */\n private static _skipNonSemantic(src: string, from: number, len: number): number {\n let i = from;\n while (i < len) {\n const c = src.charCodeAt(i);\n if (c === 32 || c === 9) {\n i++;\n continue;\n }\n const afterContinuation = Lexer._skipLineContinuation(src, i, len);\n if (afterContinuation !== i) {\n i = afterContinuation;\n continue;\n }\n const afterBlock = Lexer._skipBlockComment(src, i, len);\n if (afterBlock !== i) {\n i = afterBlock;\n continue;\n }\n const afterLine = Lexer._skipLineComment(src, i, len);\n if (afterLine !== i) {\n i = afterLine;\n continue;\n }\n break;\n }\n return i;\n }\n\n /** Consuming wrapper around `_skipNonSemantic` operating on the lexer's\n * current position. Used by the `#define`-value scan state machine. Goes\n * through `advance(diff)` so verbose builds keep their line/column counters\n * in sync (advance walks the consumed slice and bumps `_line` on `\\n`). */\n private _skipInlineSpaceAndComments(): void {\n const next = Lexer._skipNonSemantic(this._source, this._currentIndex, this._source.length);\n if (next > this._currentIndex) this.advance(next - this._currentIndex);\n }\n\n /**\n * Capture a `(param1, param2, …)` block immediately after the macro name in a\n * `#define` directive, producing a single `MACRO_DEFINE_PARAMS` token whose lexeme\n * is the complete `(…)` text (including parens). Balanced parentheses are honored\n * so the scanner doesn't terminate early on inner `()`. Newlines inside the\n * parameter list are tolerated (rare; appears when the directive uses `\\` line\n * continuation), but any newline raises no special error here — it simply stops\n * capture and parser handles the resulting token however it can.\n */\n private _scanMacroDefineParams(): BaseToken {\n const start = this.getShaderPosition();\n const src = this._source;\n const len = src.length;\n const buffer: string[] = [];\n let depth = 0;\n while (this._currentIndex < len) {\n // Honor line-continuation so `#define MAX3( \\\\\\n a, b, c \\\\\\n ) …`\n // collapses onto one logical line. The `\\` and `\\n` must not enter the\n // params buffer or the grammar will reject the lexeme.\n const afterContinuation = Lexer._skipLineContinuation(src, this._currentIndex, len);\n if (afterContinuation !== this._currentIndex) {\n this.advance(afterContinuation - this._currentIndex);\n continue;\n }\n const ch = src[this._currentIndex];\n buffer.push(ch);\n if (ch === \"(\") depth++;\n else if (ch === \")\") {\n depth--;\n this.advance(1);\n if (depth === 0) break;\n continue;\n }\n this.advance(1);\n }\n const token = BaseToken.pool.get();\n const lexeme = buffer.join(\"\");\n this._currentMacroParamsLexeme = lexeme;\n // Value starts after the `)` we just consumed.\n this._currentMacroValueStart = this._currentIndex;\n token.set(Keyword.MACRO_DEFINE_PARAMS, lexeme, start);\n return token;\n }\n\n /** Emit `MACRO_DEFINE_END` at the end of a `#define` value, consuming the newline. */\n private _emitMacroDefineEnd(): BaseToken {\n const start = this.getShaderPosition();\n const valueEnd = this._currentIndex;\n const source = this._source;\n if (this._currentIndex < source.length) {\n const c = source.charCodeAt(this._currentIndex);\n if (c === 13 && source.charCodeAt(this._currentIndex + 1) === 10) {\n this.advance(2);\n } else if (c === 10 || c === 13) {\n this.advance(1);\n }\n }\n this._registerMacroDefine(\n this._currentMacroName,\n this._currentMacroParamsLexeme,\n this._currentMacroValueStart,\n valueEnd\n );\n this._inMacroDefineValue = false;\n const token = BaseToken.pool.get();\n token.set(Keyword.MACRO_DEFINE_END, \"\\n\", start);\n return token;\n }\n\n // Register a `#define` directive. Both AST and legacy paths funnel through\n // here using ranges already extracted by `_peekMacroDefine` / the value\n // state machine — no re-parsing the directive text.\n private _registerMacroDefine(\n name: string,\n paramsLexeme: string | undefined,\n valueStart: number,\n valueEnd: number\n ): void {\n const params = paramsLexeme\n ? paramsLexeme\n .slice(1, -1) // strip enclosing `(` `)`\n .split(\",\")\n .map((p) => p.trim())\n .filter(Boolean)\n : [];\n // Dedup key: normalized value text (same lexical view the token-stream\n // path sees — comments stripped, whitespace collapsed). Two `#define`s\n // with the same name but different value text produce different keys,\n // so disjoint-branch entries stay separate.\n const dedupKey = `${paramsLexeme ?? \"\"}=${Lexer._normalizeValueText(this._source, valueStart, valueEnd)}`;\n const info: MacroDefineInfo = {\n isFunction: paramsLexeme !== undefined,\n params,\n dedupKey,\n branch: this._branchStack.length === 0 ? EMPTY_BRANCH : this._branchStack.slice()\n };\n const arr = this.macroDefineList[name];\n if (!arr) {\n this.macroDefineList[name] = [info];\n return;\n }\n // Same key + same branch → duplicate (re-include). Different branches stay\n // separate so the visibility filter picks the right entry at each call site.\n for (let i = 0, n = arr.length; i < n; i++) {\n const e = arr[i];\n if (e.dedupKey === dedupKey && Lexer.sameBranch(e.branch, info.branch)) return;\n }\n arr.push(info);\n }\n\n /** Render a `[start, end)` value range as space-separated significant chars,\n * using the same comment / line-continuation rules `_skipNonSemantic`\n * applies on the token-stream path. Used as the dedup key body. */\n private static _normalizeValueText(src: string, start: number, end: number): string {\n let out = \"\";\n let i = start;\n let pendingSpace = false;\n while (i < end) {\n const skipped = Lexer._skipNonSemantic(src, i, end);\n if (skipped !== i) {\n pendingSpace = out.length > 0;\n i = skipped;\n continue;\n }\n const c = src.charCodeAt(i);\n if (c === 32 || c === 9) {\n pendingSpace = out.length > 0;\n i++;\n continue;\n }\n if (pendingSpace) {\n out += \" \";\n pendingSpace = false;\n }\n out += src[i];\n i++;\n }\n return out;\n }\n\n private _scanMacroConditionExpression(): BaseToken {\n const buffer = new Array<string>();\n const start = this.getShaderPosition();\n this._scanUtilBreakLine(buffer);\n const word = buffer.join(\"\");\n const token = BaseToken.pool.get();\n token.set(Keyword.MACRO_CONDITIONAL_EXPRESSION, word, start);\n return token;\n }\n\n private _scanWord(): BaseToken {\n const buffer: string[] = [this.getCurChar()];\n const start = this.getShaderPosition();\n this.advance(1);\n while (BaseLexer.isAlnum(this.getCurCharCode())) {\n buffer.push(this.getCurChar());\n this.advance(1);\n }\n const token = BaseToken.pool.get();\n const word = buffer.join(\"\");\n const kt = Lexer._lexemeTable[word];\n\n if (this._macroDefineExpectsNameToken) {\n // Bypass MACRO_CALL classification for this one word. Used for the name of\n // a `#define` directive so redefining a known macro still yields a declarer ID.\n this._macroDefineExpectsNameToken = false;\n this._currentMacroName = word;\n this._currentMacroParamsLexeme = undefined;\n // C99 §6.10.3/3: the macro is function-like only when `(` appears *immediately*\n // after the name (no intervening whitespace). `#define FOO (1+2)` is\n // object-like with value `(1+2)`, not a function-like macro `FOO()` with\n // body `1+2`. Check the current char before any whitespace-skipping happens\n // on the next `scanToken`, so a space-separated `(` stays part of the value.\n if (this._inMacroDefineValue) {\n this._macroDefineExpectsParamsToken = this.getCurChar() === \"(\";\n // For object-like macros, the value begins where the cursor is now\n // (after the name, before whitespace skipping). Function-like macros\n // overwrite this in `_scanMacroDefineParams` after capturing `(...)`.\n this._currentMacroValueStart = this._currentIndex;\n }\n token.set(ETokenType.ID, word, start);\n } else if (this._isVisibleMacro(word)) {\n token.set(Keyword.MACRO_CALL, word, start);\n } else {\n token.set(kt ?? ETokenType.ID, word, start);\n }\n return token;\n }\n\n /** True iff at least one `#define <word>` is reachable from the current branch. */\n private _isVisibleMacro(word: string): boolean {\n const defs = this.macroDefineList[word];\n if (!defs || defs.length === 0) return false;\n const callSiteBranch = this._branchStack;\n for (let i = 0, n = defs.length; i < n; i++) {\n if (Lexer.isVisibleFrom(defs[i].branch, callSiteBranch)) return true;\n }\n return false;\n }\n\n private _scanNum(): BaseToken {\n const buffer: string[] = [];\n\n // Hex integer literal: `0[xX][0-9a-fA-F]+[uU]?`. Detect before any\n // decimal-digit read so the `x`/`X` after the leading `0` isn't\n // misclassified as an identifier.\n if (this.getCurChar() === \"0\") {\n const nextCode = this._source.charCodeAt(this._currentIndex + 1);\n if (nextCode === 120 /* 'x' */ || nextCode === 88 /* 'X' */) {\n buffer.push(this.getCurChar());\n this.advance(1);\n buffer.push(this.getCurChar());\n this.advance(1);\n while (BaseLexer.isHexDigit(this.getCurCharCode())) {\n buffer.push(this.getCurChar());\n this.advance(1);\n }\n if (buffer.length === 2) {\n this.throwError(this.getShaderPosition(0), \"lexing error, hex literal needs at least one digit.\");\n }\n this._scanIntegerSuffix(buffer);\n\n const token = BaseToken.pool.get();\n token.set(ETokenType.INT_CONSTANT, buffer.join(\"\"), this.getShaderPosition(buffer.length));\n return token;\n }\n }\n\n while (BaseLexer.isDigit(this.getCurCharCode())) {\n buffer.push(this.getCurChar());\n this.advance(1);\n }\n const curChar = this.getCurChar();\n if (curChar === \".\") {\n buffer.push(curChar);\n this.advance(1);\n while (BaseLexer.isDigit(this.getCurCharCode())) {\n buffer.push(this.getCurChar());\n this.advance(1);\n }\n this._scanFloatSuffix(buffer);\n\n const token = BaseToken.pool.get();\n token.set(ETokenType.FLOAT_CONSTANT, buffer.join(\"\"), this.getShaderPosition(buffer.length));\n return token;\n } else if (curChar === \"e\" || curChar === \"E\") {\n this._scanFloatSuffix(buffer);\n\n const token = BaseToken.pool.get();\n token.set(ETokenType.FLOAT_CONSTANT, buffer.join(\"\"), this.getShaderPosition(buffer.length));\n return token;\n } else if (curChar === \"f\" || curChar === \"F\") {\n // Pure-integer + `f`/`F` suffix → float (`5f`, `100F`).\n buffer.push(curChar);\n this.advance(1);\n\n const token = BaseToken.pool.get();\n token.set(ETokenType.FLOAT_CONSTANT, buffer.join(\"\"), this.getShaderPosition(buffer.length));\n return token;\n } else {\n this._scanIntegerSuffix(buffer);\n\n const token = BaseToken.pool.get();\n token.set(ETokenType.INT_CONSTANT, buffer.join(\"\"), this.getShaderPosition(buffer.length));\n return token;\n }\n }\n\n private _scanFloatSuffix(buffer: string[]): void {\n let curChar = this.getCurChar();\n if (curChar === \"e\" || curChar === \"E\") {\n buffer.push(curChar);\n this.advance(1);\n curChar = this.getCurChar();\n if (curChar === \"+\" || curChar === \"-\") {\n buffer.push(curChar);\n this.advance(1);\n curChar = this.getCurChar();\n }\n if (!BaseLexer.isDigit(this.getCurCharCode()))\n this.throwError(this.getShaderPosition(0), \"lexing error, invalid exponent suffix.\");\n\n do {\n buffer.push(curChar);\n this.advance(1);\n curChar = this.getCurChar();\n } while (BaseLexer.isDigit(this.getCurCharCode()));\n }\n if (curChar === \"f\" || curChar === \"F\") {\n buffer.push(curChar);\n this.advance(1);\n }\n }\n\n private _scanIntegerSuffix(buffer: string[]): void {\n const curChar = this.getCurChar();\n if (curChar === \"u\" || curChar === \"U\") {\n buffer.push(curChar);\n this.advance(1);\n }\n }\n}\n","import { GalaceanDataType } from \"../../common\";\nimport { Keyword } from \"../../common/enums/Keyword\";\nimport { EShaderStage } from \"../../common/enums/ShaderStage\";\n\nexport const BuiltinVariableTable: Map<string, BuiltinVariable> = new Map();\n\nexport class BuiltinVariable {\n type: GalaceanDataType;\n lexeme: string;\n scope: EShaderStage;\n\n private constructor(type: GalaceanDataType, lexeme: string, scope: EShaderStage) {\n this.type = type;\n this.lexeme = lexeme;\n this.scope = scope;\n }\n\n static createVariable(lexeme: string, type: GalaceanDataType, scope = EShaderStage.ALL) {\n const item = new BuiltinVariable(type, lexeme, scope);\n BuiltinVariableTable.set(lexeme, item);\n }\n\n static getVar(ident: string): BuiltinVariable {\n return BuiltinVariableTable.get(ident);\n }\n}\n\nBuiltinVariable.createVariable(\"gl_VertexID\", Keyword.INT, EShaderStage.VERTEX);\nBuiltinVariable.createVariable(\"gl_InstanceID\", Keyword.INT, EShaderStage.VERTEX);\nBuiltinVariable.createVariable(\"gl_Position\", Keyword.VEC4, EShaderStage.VERTEX);\nBuiltinVariable.createVariable(\"gl_PointSize\", Keyword.FLOAT, EShaderStage.VERTEX);\n\nBuiltinVariable.createVariable(\"gl_FragCoord\", Keyword.VEC4, EShaderStage.FRAGMENT);\nBuiltinVariable.createVariable(\"gl_FrontFacing\", Keyword.BOOL, EShaderStage.FRAGMENT);\nBuiltinVariable.createVariable(\"gl_FragDepth\", Keyword.FLOAT, EShaderStage.FRAGMENT);\nBuiltinVariable.createVariable(\"gl_PointCoord\", Keyword.VEC2, EShaderStage.FRAGMENT);\nBuiltinVariable.createVariable(\"gl_FragColor\", Keyword.VEC4, EShaderStage.FRAGMENT);\nBuiltinVariable.createVariable(\"gl_FragData\", Keyword.VEC4_ARRAY, EShaderStage.FRAGMENT);\n\nBuiltinVariable.createVariable(\"gl_MaxVertexAttribs\", Keyword.INT);\nBuiltinVariable.createVariable(\"gl_MaxVertexUniformVectors\", Keyword.INT);\nBuiltinVariable.createVariable(\"gl_MaxVertexOutputVectors\", Keyword.INT);\nBuiltinVariable.createVariable(\"gl_MaxFragmentInputVectors\", Keyword.INT);\nBuiltinVariable.createVariable(\"gl_MaxVertexTextureImageUnits\", Keyword.INT);\nBuiltinVariable.createVariable(\"gl_MaxCombinedTextureImageUnits\", Keyword.INT);\nBuiltinVariable.createVariable(\"gl_MaxTextureImageUnits\", Keyword.INT);\nBuiltinVariable.createVariable(\"gl_MaxFragmentUniformVectors\", Keyword.INT);\nBuiltinVariable.createVariable(\"gl_MaxDrawBuffers\", Keyword.INT);\nBuiltinVariable.createVariable(\"gl_MinProgramTexelOffset\", Keyword.INT);\nBuiltinVariable.createVariable(\"gl_MaxProgramTexelOffset\", Keyword.INT);\n","import { IBaseSymbol } from \"./IBaseSymbol\";\n\nexport class SymbolTable<T extends IBaseSymbol> {\n private _table: Map<string, T[]> = new Map();\n\n insert(symbol: T, isInMacroBranch = false): void {\n symbol.isInMacroBranch = isInMacroBranch;\n\n const entry = this._table.get(symbol.ident) ?? [];\n for (let i = 0, n = entry.length; i < n; i++) {\n if (entry[i].isInMacroBranch) continue;\n if (entry[i].equal(symbol)) {\n console.warn(\"Replace symbol:\", symbol.ident);\n entry[i] = symbol;\n return;\n }\n }\n\n entry.push(symbol);\n this._table.set(symbol.ident, entry);\n }\n\n getSymbol(symbol: T, includeMacro = false): T | undefined {\n const entry = this._table.get(symbol.ident);\n if (entry) {\n for (let i = entry.length - 1; i >= 0; i--) {\n const item = entry[i];\n if (!includeMacro && item.isInMacroBranch) continue;\n if (item.equal(symbol)) return item;\n }\n }\n }\n\n getSymbols(symbol: T, includeMacro = false, out: T[]): T[] {\n out.length = 0;\n this._getSymbols(symbol, includeMacro, out);\n\n return out;\n }\n\n /**\n * @internal\n */\n _getSymbols(symbol: T, includeMacro = false, out: T[]): T[] {\n const entry = this._table.get(symbol.ident);\n\n if (entry) {\n for (let i = entry.length - 1; i >= 0; i--) {\n const item = entry[i];\n if (!includeMacro && item.isInMacroBranch) continue;\n if (item.equal(symbol)) out.push(item);\n }\n }\n\n return out;\n }\n\n /** Iterate every registered symbol. Order within a name bucket is insertion order. */\n forEach(callback: (symbol: T) => void): void {\n for (const entries of this._table.values()) {\n for (let i = 0, n = entries.length; i < n; i++) {\n callback(entries[i]);\n }\n }\n }\n}\n","import { IBaseSymbol } from \"./IBaseSymbol\";\nimport { SymbolTable } from \"./SymbolTable\";\n\nexport class SymbolTableStack<S extends IBaseSymbol, T extends SymbolTable<S>> {\n stack: T[] = [];\n\n /**\n * @internal\n */\n _macroLevel = 0;\n\n get scope(): T {\n return this.stack[this.stack.length - 1];\n }\n\n get isInMacroBranch(): boolean {\n return this._macroLevel > 0;\n }\n\n pushScope(scope: T): void {\n this.stack.push(scope);\n }\n\n clear(): void {\n this.stack.length = 0;\n }\n\n popScope(): T | undefined {\n return this.stack.pop();\n }\n\n insert(symbol: S): void {\n this.scope.insert(symbol, this.isInMacroBranch);\n }\n\n lookup(symbol: S, includeMacro = false): S | undefined {\n for (let i = this.stack.length - 1; i >= 0; i--) {\n const symbolTable = this.stack[i];\n const result = symbolTable.getSymbol(symbol, includeMacro);\n if (result) return result;\n }\n return undefined;\n }\n\n lookupAll(symbol: S, includeMacro = false, out: S[]): S[] {\n out.length = 0;\n for (let i = this.stack.length - 1; i >= 0; i--) {\n const symbolTable = this.stack[i];\n symbolTable._getSymbols(symbol, includeMacro, out);\n }\n return out;\n }\n}\n","import { GalaceanDataType } from \"../../common\";\nimport { ASTNode } from \"../AST\";\n\nexport class SymbolDataType {\n constructor(\n public type: GalaceanDataType,\n public typeLexeme: string,\n public arraySpecifier?: ASTNode.ArraySpecifier\n ) {}\n}\n","import { ASTNode } from \"../AST\";\nimport { SymbolDataType } from \"./SymbolDataType\";\nimport { ESymbolType, SymbolInfo } from \"./SymbolInfo\";\n\nexport class FnSymbol extends SymbolInfo {\n declare astNode: ASTNode.FunctionDefinition;\n\n constructor(lexeme: string, astNode: ASTNode.FunctionDefinition) {\n const type = new SymbolDataType(\n astNode.protoType.returnType.type,\n astNode.protoType.returnType.typeSpecifier.lexeme\n );\n super(lexeme, ESymbolType.FN, astNode, type);\n }\n}\n","import { ASTNode } from \"../AST\";\nimport { ESymbolType, SymbolInfo } from \"./SymbolInfo\";\n\nexport class StructSymbol extends SymbolInfo {\n declare astNode: ASTNode.StructSpecifier;\n\n constructor(lexeme: string, astNode: ASTNode.StructSpecifier) {\n super(lexeme, ESymbolType.STRUCT, astNode);\n }\n}\n","import { ASTNode } from \"../AST\";\nimport { SymbolDataType } from \"./SymbolDataType\";\nimport { ESymbolType, SymbolInfo } from \"./SymbolInfo\";\n\nexport class VarSymbol extends SymbolInfo {\n declare astNode:\n | ASTNode.Initializer\n | ASTNode.ParameterDeclarator\n | ASTNode.InitDeclaratorList\n | ASTNode.VariableDeclaration;\n\n readonly isGlobalVariable: boolean;\n\n constructor(\n ident: string,\n dataType: SymbolDataType,\n isGlobalVariable: boolean,\n initAst:\n | ASTNode.Initializer\n | ASTNode.ParameterDeclarator\n | ASTNode.InitDeclaratorList\n | ASTNode.VariableDeclaration\n ) {\n super(ident, ESymbolType.VAR, initAst, dataType);\n this.isGlobalVariable = isGlobalVariable;\n }\n}\n","import { SymbolInfo, SymbolTable } from \"../parser/symbolTable\";\nimport { ASTNode } from \"./AST\";\n\nexport class ShaderData {\n symbolTable: SymbolTable<SymbolInfo>;\n\n vertexMain: ASTNode.FunctionDefinition;\n fragmentMain: ASTNode.FunctionDefinition;\n\n globalPrecisions: ASTNode.PrecisionSpecifier[] = [];\n\n globalMacroDeclarations: ASTNode.GlobalDeclaration[] = [];\n\n getOuterGlobalMacroDeclarations(): ASTNode.GlobalDeclaration[] {\n return this.globalMacroDeclarations.filter((node) => node.parent instanceof ASTNode.GLShaderProgram);\n }\n}\n","import { ShaderRange } from \"../common\";\nimport { SymbolTable } from \"../common/SymbolTable\";\nimport { SymbolTableStack } from \"../common/SymbolTableStack\";\nimport { GSError, GSErrorName } from \"../GSError\";\nimport { SymbolInfo } from \"../parser/symbolTable\";\nimport { ShaderCompiler } from \"../ShaderCompiler\";\nimport { ASTNode, TreeNode } from \"./AST\";\nimport { ShaderData } from \"./ShaderInfo\";\nimport { NodeChild } from \"./types\";\n\nimport { MacroDefineList } from \"../Preprocessor\";\n\nexport type TranslationRule<T = any> = (sa: SemanticAnalyzer, ...tokens: NodeChild[]) => T;\n\n/**\n * @internal\n * The semantic analyzer of `ShaderCompiler` compiler.\n * - Build symbol table\n * - Static analysis\n */\nexport default class SemanticAnalyzer {\n /**\n * @internal\n */\n static _lookupSymbol: SymbolInfo = new SymbolInfo(\"\", null);\n\n semanticStack: TreeNode[] = [];\n acceptRule?: TranslationRule = undefined;\n symbolTableStack: SymbolTableStack<SymbolInfo, SymbolTable<SymbolInfo>> = new SymbolTableStack();\n curFunctionInfo: {\n header?: ASTNode.FunctionDeclarator;\n returnStatement?: ASTNode.JumpStatement;\n } = {};\n private _shaderData = new ShaderData();\n private _translationRuleTable: Map<number /** production id */, TranslationRule> = new Map();\n\n private _macroDefineList: MacroDefineList;\n\n // #if _VERBOSE\n readonly errors: Error[] = [];\n // #endif\n\n get shaderData() {\n return this._shaderData;\n }\n\n get macroDefineList(): MacroDefineList {\n return this._macroDefineList;\n }\n\n constructor() {\n this.pushScope();\n }\n\n reset(macroDefineList: MacroDefineList) {\n this._macroDefineList = macroDefineList;\n this.semanticStack.length = 0;\n this._shaderData = new ShaderData();\n this.symbolTableStack.clear();\n this.pushScope();\n // #if _VERBOSE\n this.errors.length = 0;\n // #endif\n }\n\n pushScope() {\n this.symbolTableStack.pushScope(new SymbolTable<SymbolInfo>());\n }\n\n popScope() {\n return this.symbolTableStack.popScope();\n }\n\n addTranslationRule(pid: number, rule: TranslationRule) {\n this._translationRuleTable.set(pid, rule);\n }\n\n getTranslationRule(pid: number) {\n return this._translationRuleTable.get(pid);\n }\n\n reportError(loc: ShaderRange, message: string): void {\n // #if _VERBOSE\n this.errors.push(new GSError(GSErrorName.CompilationError, message, loc, ShaderCompiler._processingPassText));\n // #else\n console.error(message);\n // #endif\n }\n\n reportWarning(loc: ShaderRange, message: string): void {\n console.warn(new GSError(GSErrorName.CompilationWarn, message, loc, ShaderCompiler._processingPassText).toString());\n }\n}\n","import { GalaceanDataType } from \"../common\";\nimport { BaseToken } from \"../common/BaseToken\";\nimport { ASTNode, TreeNode } from \"./AST\";\nimport { NoneTerminal } from \"./GrammarSymbol\";\n\nexport type TraceStackItem = NoneTerminal | BaseToken;\n\nexport class SymbolType {\n constructor(\n public type: GalaceanDataType,\n public typeLexeme: string,\n public arraySpecifier?: ASTNode.ArraySpecifier\n ) {}\n}\n\nexport class StructProp implements IParamInfo {\n constructor(\n public typeInfo: SymbolType,\n public ident: BaseToken,\n public mrtIndex?: number,\n public isInMacroBranch = false\n ) {}\n}\n\nexport type NodeChild = TreeNode | BaseToken;\n\nexport type IParamInfo = {\n ident?: BaseToken;\n typeInfo?: SymbolType;\n astNode?: ASTNode.ParameterDeclaration | ASTNode.MacroParamBlock;\n};\n","import { BaseToken } from \"../common/BaseToken\";\nimport { EShaderStage } from \"../common/enums/ShaderStage\";\nimport { SymbolTable } from \"../common/SymbolTable\";\nimport { GSErrorName } from \"../GSError\";\nimport { ASTNode, TreeNode } from \"../parser/AST\";\nimport { ESymbolType, SymbolInfo } from \"../parser/symbolTable\";\nimport { StructProp } from \"../parser/types\";\nimport { ShaderCompiler } from \"../ShaderCompiler\";\nimport { ShaderCompilerUtils } from \"../ShaderCompilerUtils\";\n\n/** Role of a struct type in the shader compiler's IO flattening. */\nexport type StructRole = \"varying\" | \"attribute\" | \"mrt\";\n\n/** @internal */\nexport class VisitorContext {\n private static _lookupSymbol: SymbolInfo = new SymbolInfo(\"\", null);\n private static _singleton: VisitorContext;\n static get context() {\n return this._singleton;\n }\n\n static reset() {\n if (!this._singleton) {\n this._singleton = new VisitorContext();\n }\n this._singleton.reset();\n }\n\n attributeStructs: ASTNode.StructSpecifier[] = [];\n attributeList: StructProp[] = [];\n varyingStructs: ASTNode.StructSpecifier[] = [];\n varyingList: StructProp[] = [];\n mrtStructs: ASTNode.StructSpecifier[] = [];\n mrtList: StructProp[] = [];\n\n stage: EShaderStage;\n stageEntry: string;\n\n _referencedAttributeList: Record<string, StructProp[]>;\n _referencedVaryingList: Record<string, StructProp[]>;\n _referencedMRTList: Record<string, StructProp[]>;\n _referencedGlobals: Record<string, SymbolInfo[]>;\n _referencedGlobalMacroASTs: TreeNode[] = [];\n /**\n * Maps variable names (function params, locals, and globals whose type is a\n * varying/attribute/mrt struct) to their role. Populated during stage setup and\n * used by macro-value rewriting to recognize `varName.prop` patterns that should\n * be flattened against the IO lists.\n */\n _structVarMap: Record<string, StructRole>;\n\n _passSymbolTable: SymbolTable<SymbolInfo>;\n\n reset(resetAll = true) {\n if (resetAll) {\n this.attributeStructs.length = 0;\n this.attributeList.length = 0;\n this.varyingStructs.length = 0;\n this.varyingList.length = 0;\n this.mrtStructs.length = 0;\n this.mrtList.length = 0;\n }\n\n this._referencedAttributeList = Object.create(null);\n this._referencedVaryingList = Object.create(null);\n this._referencedMRTList = Object.create(null);\n this._referencedGlobals = Object.create(null);\n this._referencedGlobalMacroASTs.length = 0;\n if (resetAll) {\n // Struct-var bindings are pass-scoped, not stage-scoped — global `#define`\n // values must see the same bindings in both the vertex and fragment outputs,\n // so we keep the map across the vertex→fragment stage transition.\n this._structVarMap = Object.create(null);\n }\n }\n\n isAttributeStruct(type: string) {\n return this.attributeStructs.findIndex((item) => item.ident!.lexeme === type) !== -1;\n }\n\n isVaryingStruct(type: string) {\n return this.varyingStructs.findIndex((item) => item.ident!.lexeme === type) !== -1;\n }\n\n isMRTStruct(type: string) {\n return this.mrtStructs.findIndex((item) => item.ident!.lexeme === type) !== -1;\n }\n\n /** Return the role of a struct type, or undefined if it isn't one of the IO roles. */\n getStructRole(typeLexeme: string): StructRole | undefined {\n if (this.isAttributeStruct(typeLexeme)) return \"attribute\";\n if (this.isVaryingStruct(typeLexeme)) return \"varying\";\n if (this.isMRTStruct(typeLexeme)) return \"mrt\";\n }\n\n /** Register a variable as holding a value of a varying/attribute/mrt struct type. */\n registerStructVar(varName: string, role: StructRole): void {\n this._structVarMap[varName] = role;\n }\n\n referenceAttribute(ident: BaseToken): Error | void {\n return this._referenceProp(\n \"attribute\",\n ident.lexeme,\n this.attributeList,\n this._referencedAttributeList,\n ident.location\n );\n }\n\n referenceVarying(ident: BaseToken): Error | void {\n return this._referenceProp(\"varying\", ident.lexeme, this.varyingList, this._referencedVaryingList, ident.location);\n }\n\n referenceMRTProp(ident: BaseToken): Error | void {\n return this._referenceProp(\"mrt\", ident.lexeme, this.mrtList, this._referencedMRTList, ident.location);\n }\n\n referenceGlobal(ident: string, type: ESymbolType): void {\n if (this._referencedGlobals[ident]) return;\n\n this._referencedGlobals[ident] = [];\n\n const lookupSymbol = VisitorContext._lookupSymbol;\n lookupSymbol.set(ident, type);\n this._passSymbolTable.getSymbols(lookupSymbol, true, this._referencedGlobals[ident]);\n }\n\n private _referenceProp(\n role: StructRole,\n name: string,\n list: StructProp[],\n refList: Record<string, StructProp[]>,\n location: any\n ): Error | void {\n if (refList[name]) return;\n const props = list.filter((item) => item.ident.lexeme === name);\n if (!props.length) {\n return ShaderCompilerUtils.createGSError(\n `referenced ${role} not found: ${name}`,\n GSErrorName.CompilationError,\n ShaderCompiler._processingPassText,\n location\n );\n }\n refList[name] = props;\n }\n}\n","import type { IPoolElement } from \"@galacean/engine-core\";\n\nexport class TempArray<T> implements IPoolElement {\n array: Array<T> = new Array();\n\n dispose(): void {\n this.array.length = 0;\n }\n}\n","import { ShaderPosition, ShaderRange } from \"../common\";\nimport { BaseToken } from \"../common/BaseToken\";\nimport { GSErrorName } from \"../GSError\";\nimport { ASTNode, TreeNode } from \"../parser/AST\";\nimport { NoneTerminal } from \"../parser/GrammarSymbol\";\nimport { ESymbolType, FnSymbol } from \"../parser/symbolTable\";\nimport { NodeChild, StructProp } from \"../parser/types\";\nimport { ParserUtils } from \"../ParserUtils\";\nimport { ShaderCompiler } from \"../ShaderCompiler\";\nimport { StructRole, VisitorContext } from \"./VisitorContext\";\n// #if _VERBOSE\nimport { GSError } from \"../GSError\";\n// #endif\nimport { ReturnableObjectPool } from \"@galacean/engine-core\";\nimport { Keyword } from \"../common/enums/Keyword\";\nimport { TempArray } from \"../TempArray\";\nimport { ICodeSegment } from \"./types\";\n\n/**\n * @internal\n * The code generator\n */\nexport abstract class CodeGenVisitor {\n // #if _VERBOSE\n readonly errors: Error[] = [];\n // #endif\n\n abstract getAttributeProp(prop: StructProp): string;\n abstract getVaryingProp(prop: StructProp): string;\n abstract getMRTProp(prop: StructProp): string;\n\n protected static _tmpArrayPool = new ReturnableObjectPool(TempArray<string>, 10);\n\n defaultCodeGen(children: NodeChild[]) {\n const pool = CodeGenVisitor._tmpArrayPool;\n let ret = pool.get();\n ret.dispose();\n for (const child of children) {\n if (child instanceof BaseToken) {\n // Legacy opaque `#define` lexemes carry the directive verbatim — expression-style defines go through the AST path.\n ret.array.push(child.lexeme);\n } else {\n ret.array.push(child.codeGen(this));\n }\n }\n pool.return(ret);\n return ret.array.join(\" \");\n }\n\n visitPostfixExpression(node: ASTNode.PostfixExpression): string {\n const children = node.children;\n const derivationLength = children.length;\n const context = VisitorContext.context;\n\n if (derivationLength === 3) {\n const postExpr = children[0] as ASTNode.PostfixExpression;\n const prop = children[2];\n\n if (prop instanceof BaseToken) {\n // Struct role priority: `_structVarMap` by bare root ident (covers forward-declared types like `Varyings o;`),\n // then AST static type (normal path when `semanticAnalyze` resolved `postExpr.type`).\n let role: StructRole | undefined;\n const directRoot = ParserUtils.extractDirectIdentLexeme(postExpr);\n if (directRoot) role = context._structVarMap[directRoot];\n if (!role) role = context.getStructRole(<string>postExpr.type);\n\n if (role) {\n const error =\n role === \"attribute\"\n ? context.referenceAttribute(prop)\n : role === \"varying\"\n ? context.referenceVarying(prop)\n : context.referenceMRTProp(prop);\n // #if _VERBOSE\n if (error) this.errors.push(<GSError>error);\n // #endif\n return prop.lexeme;\n }\n\n return `${postExpr.codeGen(this)}.${prop.lexeme}`;\n } else {\n return `${postExpr.codeGen(this)}.${prop.codeGen(this)}`;\n }\n } else if (derivationLength === 4) {\n const identNode = children[0] as ASTNode.PostfixExpression;\n const indexNode = children[2] as ASTNode.Expression;\n const identLexeme = identNode.codeGen(this);\n const indexLexeme = indexNode.codeGen(this);\n if (identLexeme === \"gl_FragData\") {\n this._reportError(identNode.location, \"Please use MRT struct instead of gl_FragData.\");\n }\n return `${identLexeme}[${indexLexeme}]`;\n }\n\n return this.defaultCodeGen(node.children);\n }\n\n visitVariableIdentifier(node: ASTNode.VariableIdentifier): string {\n for (let name of node.referenceGlobalSymbolNames) {\n VisitorContext.context.referenceGlobal(name, ESymbolType.Any);\n }\n\n return node.getLexeme(this);\n }\n\n visitFunctionCall(node: ASTNode.FunctionCall): string {\n const call = node.children[0] as ASTNode.FunctionCallGeneric;\n if (call.fnSymbol instanceof FnSymbol) {\n VisitorContext.context.referenceGlobal(call.fnSymbol.ident, ESymbolType.FN);\n\n const paramList = call.children[2];\n if (paramList instanceof ASTNode.FunctionCallParameterList) {\n const astNodes = paramList.paramNodes;\n const paramInfoList = call.fnSymbol.astNode.protoType.parameterList;\n\n const context = VisitorContext.context;\n const params = astNodes.filter((_, i) => {\n const typeInfo = paramInfoList?.[i]?.typeInfo;\n // Drop struct-IO parameters (attribute/varying/mrt) — they're flattened\n // into top-level declarations and no longer exist as function-call args.\n return !typeInfo || !context.getStructRole(typeInfo.typeLexeme);\n });\n\n let paramsCode = \"\";\n\n for (let i = 0, length = params.length; i < length; i++) {\n const astNode = params[i];\n const code = astNode.codeGen(this);\n if (astNode instanceof ASTNode.MacroCallArgBlock || i === 0) {\n paramsCode += code;\n } else {\n paramsCode += `, ${code}`;\n }\n }\n\n return `${call.fnSymbol.ident}(${paramsCode})`;\n }\n }\n\n return this.defaultCodeGen(node.children);\n }\n\n visitMacroCallFunction(node: ASTNode.MacroCallFunction): string {\n const children = node.children;\n const paramList = children[2];\n if (paramList instanceof ASTNode.FunctionCallParameterList) {\n const astNodes = paramList.paramNodes;\n const context = VisitorContext.context;\n\n // Drop bare IO-struct args only when the macro aliases a user fn (whose\n // formal was flattened). All other shapes preserve args verbatim.\n let params: typeof astNodes;\n if (node.isFunctionLikeMacro || !node.aliasesNonBuiltinIdent) {\n params = astNodes;\n } else {\n params = astNodes.filter((arg) => {\n if (arg instanceof ASTNode.AssignmentExpression) {\n const variableParam = ParserUtils.unwrapBareIdentifier(arg, { allowParens: false });\n if (\n variableParam &&\n typeof variableParam.typeInfo === \"string\" &&\n context.getStructRole(variableParam.typeInfo)\n ) {\n return false;\n }\n }\n return true;\n });\n }\n\n let paramsCode = \"\";\n for (let i = 0, length = params.length; i < length; i++) {\n const argNode = params[i];\n const code = argNode.codeGen(this);\n\n if (argNode instanceof ASTNode.MacroCallArgBlock || i === 0) {\n paramsCode += code;\n } else {\n paramsCode += `, ${code}`;\n }\n }\n\n return `${node.macroName}(${paramsCode})`;\n } else {\n return this.defaultCodeGen(node.children);\n }\n }\n\n visitStatementList(node: ASTNode.StatementList): string {\n const children = node.children as TreeNode[];\n if (children.length === 1) {\n return children[0].codeGen(this);\n } else {\n return `${children[0].codeGen(this)}\\n${children[1].codeGen(this)}`;\n }\n }\n\n /**\n * Code-generate a `#define` macro parsed as expression AST. Produces a `#define`\n * directive whose value is the AST-rewritten string — so varying flattening\n * happens naturally via `visitPostfixExpression` inside the AST walk.\n */\n visitMacroDefine(node: ASTNode.MacroDefine): string {\n // For function-like macros, preserve the original `(params)` lexeme verbatim —\n // the parameter list is user-authored text that shouldn't be canonicalized.\n let paramsLexeme = \"\";\n if (node.isFunction) {\n const paramsToken = node.children[2];\n if (paramsToken instanceof BaseToken) paramsLexeme = paramsToken.lexeme;\n }\n const valueCode = node.valueExpression ? node.valueExpression.codeGen(this) : \"\";\n // Newlines around the directive keep `#` at the start of its physical line per\n // GLSL ES 3.0 §3.4, regardless of how surrounding tokens are joined.\n return `\\n#define ${node.macroName}${paramsLexeme}${valueCode ? \" \" + valueCode : \"\"}\\n`;\n }\n\n visitSingleDeclaration(node: ASTNode.SingleDeclaration): string {\n const type = node.typeSpecifier.type;\n if (typeof type === \"string\") {\n VisitorContext.context.referenceGlobal(type, ESymbolType.STRUCT);\n }\n return this.defaultCodeGen(node.children);\n }\n\n visitGlobalVariableDeclaration(node: ASTNode.VariableDeclaration): string {\n const children = node.children;\n const fullType = children[0];\n if (fullType instanceof ASTNode.FullySpecifiedType && fullType.typeSpecifier.isCustom) {\n const context = VisitorContext.context;\n // Global variables whose declared type is a varying/attribute/mrt struct\n // (e.g. `Varyings o;`) are not emitted as `uniform`. The variable itself is\n // already registered in `_structVarMap` by the pre-pass in\n // `GLESVisitor._collectAllStructVars`, so `visitPostfixExpression` can\n // flatten `o.field` at macro-value codegen time.\n if (context.getStructRole(fullType.typeSpecifier.lexeme)) {\n return \"\";\n }\n context.referenceGlobal(<string>fullType.type, ESymbolType.STRUCT);\n }\n return `uniform ${this.defaultCodeGen(children)}`;\n }\n\n visitDeclaration(node: ASTNode.Declaration): string {\n const { context } = VisitorContext;\n const children = node.children;\n const child = children[0];\n\n if (child instanceof ASTNode.InitDeclaratorList) {\n const typeLexeme = child.typeInfo.typeLexeme;\n if (context.isVaryingStruct(typeLexeme) || context.isMRTStruct(typeLexeme)) return \"\";\n }\n return this.defaultCodeGen(children);\n }\n\n visitFunctionParameterList(node: ASTNode.FunctionParameterList): string {\n const context = VisitorContext.context;\n const params = node.parameterInfoList.filter(\n (item) => !item.typeInfo || !context.getStructRole(item.typeInfo.typeLexeme)\n );\n\n let out = \"\";\n for (let i = 0, length = params.length; i < length; i++) {\n const item = params[i];\n const astNode = item.astNode;\n const code = astNode.codeGen(this);\n if (astNode instanceof ASTNode.MacroParamBlock || i === 0) {\n out += code;\n } else {\n out += `, ${code}`;\n }\n }\n\n return out;\n }\n\n visitFunctionHeader(node: ASTNode.FunctionHeader): string {\n const returnType = node.returnType.typeSpecifier.lexeme;\n if (VisitorContext.context.isVaryingStruct(returnType)) {\n return `void ${node.ident.lexeme}(`;\n }\n return this.defaultCodeGen(node.children);\n }\n\n visitJumpStatement(node: ASTNode.JumpStatement): string {\n const children = node.children;\n const cmd = children[0] as BaseToken;\n if (cmd.type === Keyword.RETURN) {\n const expr = children[1];\n if (expr instanceof ASTNode.Expression) {\n const returnVar = ParserUtils.unwrapNodeByType<ASTNode.VariableIdentifier>(\n expr,\n NoneTerminal.variable_identifier\n );\n if (VisitorContext.context.isVaryingStruct(<string>returnVar?.typeInfo)) {\n return \"\";\n }\n const returnFnCall = ParserUtils.unwrapNodeByType<ASTNode.FunctionCall>(expr, NoneTerminal.function_call);\n if (VisitorContext.context.isVaryingStruct(<string>returnFnCall?.type)) {\n return `${expr.codeGen(this)};`;\n }\n }\n }\n return this.defaultCodeGen(children);\n }\n\n visitFunctionIdentifier(node: ASTNode.FunctionIdentifier): string {\n return this.defaultCodeGen(node.children);\n }\n\n visitStructSpecifier(node: ASTNode.StructSpecifier): string {\n const context = VisitorContext.context;\n const { varyingStructs, attributeStructs, mrtStructs } = context;\n const isVaryingStruct = varyingStructs.indexOf(node) !== -1;\n const isAttributeStruct = attributeStructs.indexOf(node) !== -1;\n const isMRTStruct = mrtStructs.indexOf(node) !== -1;\n\n if (isVaryingStruct && isAttributeStruct) {\n this._reportError(node.location, \"cannot use same struct as Varying and Attribute\");\n }\n\n if (isVaryingStruct && isMRTStruct) {\n this._reportError(node.location, \"cannot use same struct as Varying and MRT\");\n }\n\n if (isAttributeStruct && isMRTStruct) {\n this._reportError(node.location, \"cannot use same struct as Attribute and MRT\");\n }\n\n if (isVaryingStruct || isAttributeStruct || isMRTStruct) {\n let result: ICodeSegment[] = [];\n\n result.push(\n ...node.macroExpressions.map((item) => ({\n text: item instanceof BaseToken ? item.lexeme : item.codeGen(this),\n index: item.location.start.index\n }))\n );\n\n for (const prop of node.propList) {\n const name = prop.ident.lexeme;\n if (isVaryingStruct && context._referencedVaryingList[name]?.indexOf(prop) >= 0) {\n result.push({\n text: `${this.getVaryingProp(prop)}\\n`,\n index: prop.ident.location.start.index\n });\n } else if (isAttributeStruct && context._referencedAttributeList[name]?.indexOf(prop) >= 0) {\n result.push({\n text: `${this.getAttributeProp(prop)}\\n`,\n index: prop.ident.location.start.index\n });\n } else if (isMRTStruct && context._referencedMRTList[name]?.indexOf(prop) >= 0) {\n result.push({\n text: `${this.getMRTProp(prop)}\\n`,\n index: prop.ident.location.start.index\n });\n }\n }\n\n const text = result\n .sort((a, b) => a.index - b.index)\n .map((item) => item.text)\n .join(\"\");\n\n return text;\n } else {\n return this.defaultCodeGen(node.children);\n }\n }\n\n visitFunctionDefinition(fnNode: ASTNode.FunctionDefinition): string {\n const fnName = fnNode.protoType.ident.lexeme;\n const context = VisitorContext.context;\n\n if (fnName == context.stageEntry) {\n const statements = fnNode.statements.codeGen(this);\n return `void main() ${statements}`;\n } else {\n return this.defaultCodeGen(fnNode.children);\n }\n }\n\n protected _reportError(loc: ShaderRange | ShaderPosition, message: string): void {\n // #if _VERBOSE\n this.errors.push(new GSError(GSErrorName.CompilationError, message, loc, ShaderCompiler._processingPassText));\n // #else\n console.error(message);\n // #endif\n }\n}\n","import type { IShaderInfo } from \"@galacean/engine-design\";\nimport { BaseToken } from \"../common/BaseToken\";\nimport { EShaderStage } from \"../common/enums/ShaderStage\";\nimport { Keyword } from \"../common/enums/Keyword\";\nimport { ASTNode, TreeNode } from \"../parser/AST\";\nimport { NodeChild } from \"../parser/types\";\nimport { ShaderData } from \"../parser/ShaderInfo\";\nimport { ESymbolType, FnSymbol, StructSymbol, SymbolInfo } from \"../parser/symbolTable\";\nimport { CodeGenVisitor } from \"./CodeGenVisitor\";\nimport { ICodeSegment } from \"./types\";\nimport { StructRole, VisitorContext } from \"./VisitorContext\";\n\n/**\n * @internal\n */\nexport abstract class GLESVisitor extends CodeGenVisitor {\n private _globalCodeArray: ICodeSegment[] = [];\n private static _lookupSymbol: SymbolInfo = new SymbolInfo(\"\", null);\n private static _serializedGlobalKey = new Set();\n\n reset(): void {\n const { _globalCodeArray: globalCodeArray } = this;\n globalCodeArray.length = 0;\n GLESVisitor._serializedGlobalKey.clear();\n }\n\n getOtherGlobal(data: ShaderData, out: ICodeSegment[]): void {\n for (const precision of data.globalPrecisions) {\n out.push({ text: precision.codeGen(this), index: precision.location.start.index });\n }\n }\n\n visitShaderProgram(node: ASTNode.GLShaderProgram, vertexEntry: string, fragmentEntry: string): IShaderInfo {\n // #if _VERBOSE\n this.errors.length = 0;\n // #endif\n VisitorContext.reset();\n this.reset();\n\n const shaderData = node.shaderData;\n const context = VisitorContext.context;\n context._passSymbolTable = shaderData.symbolTable;\n\n const outerGlobalMacroDeclarations = shaderData.getOuterGlobalMacroDeclarations();\n\n // `_structVarMap` must span both stages so global `#define` references rewrite consistently across vertex/fragment outputs.\n this._collectAllStructVars(vertexEntry, fragmentEntry);\n\n return {\n vertex: this._vertexMain(vertexEntry, shaderData, outerGlobalMacroDeclarations),\n fragment: this._fragmentMain(fragmentEntry, shaderData, outerGlobalMacroDeclarations)\n };\n }\n\n /** Populate `_structVarMap` for varying/attribute/mrt-typed variables across both stages before codegen. */\n private _collectAllStructVars(vertexEntry: string, fragmentEntry: string): void {\n const context = VisitorContext.context;\n const lookupSymbol = GLESVisitor._lookupSymbol;\n const symbolTable = context._passSymbolTable;\n\n // Roles from entry signatures: vertex param[0]=attribute, return=varying; fragment param[0]=varying, return=mrt.\n const structRoles: Record<string, StructRole> = Object.create(null);\n\n const addEntryRoles = (entry: string, paramRole: StructRole, returnRole: StructRole): FnSymbol[] => {\n lookupSymbol.set(entry, ESymbolType.FN);\n const fns = <FnSymbol[]>symbolTable.getSymbols(lookupSymbol, true, []);\n for (const fn of fns) {\n const proto = fn.astNode.protoType;\n const param0 = proto.parameterList?.[0];\n if (param0 && typeof param0.typeInfo?.type === \"string\") {\n structRoles[param0.typeInfo.typeLexeme] = paramRole;\n }\n if (typeof proto.returnType.type === \"string\") {\n structRoles[<string>proto.returnType.type] = returnRole;\n }\n }\n return fns;\n };\n\n const entryFns = addEntryRoles(vertexEntry, \"attribute\", \"varying\").concat(\n addEntryRoles(fragmentEntry, \"varying\", \"mrt\")\n );\n\n const registerByType = (typeLexeme: string | undefined, varName: string): void => {\n if (!typeLexeme) return;\n const role = structRoles[typeLexeme];\n if (role) context.registerStructVar(varName, role);\n };\n\n const walkLocals = (node: TreeNode): void => {\n for (const child of node.children) {\n if (child instanceof ASTNode.InitDeclaratorList) {\n const typeLexeme = child.typeInfo?.typeLexeme;\n if (typeLexeme && structRoles[typeLexeme]) {\n this._extractLocalVarNames(child, context, structRoles[typeLexeme]);\n }\n } else if (child instanceof TreeNode) {\n walkLocals(child);\n }\n }\n };\n\n for (const fn of entryFns) {\n const proto = fn.astNode.protoType;\n if (proto.parameterList) {\n for (const param of proto.parameterList) {\n if (param.ident && typeof param.typeInfo?.type === \"string\") {\n registerByType(param.typeInfo.typeLexeme, param.ident.lexeme);\n }\n }\n }\n walkLocals(fn.astNode.statements);\n }\n\n // Register module-level globals whose type carries a role (e.g. `Varyings o;`).\n symbolTable.forEach((sym) => {\n if (sym.type === ESymbolType.VAR) registerByType(sym.dataType?.typeLexeme, sym.ident);\n });\n }\n\n private _vertexMain(\n entry: string,\n data: ShaderData,\n outerGlobalMacroDeclarations: ASTNode.GlobalDeclaration[]\n ): string {\n const context = VisitorContext.context;\n context.stage = EShaderStage.VERTEX;\n context.stageEntry = entry;\n\n const lookupSymbol = GLESVisitor._lookupSymbol;\n const symbolTable = data.symbolTable;\n lookupSymbol.set(entry, ESymbolType.FN);\n const fnSymbols = <FnSymbol[]>symbolTable.getSymbols(lookupSymbol, true, []);\n if (!fnSymbols.length) throw `no entry function found: ${entry}`;\n\n const { attributeStructs, attributeList, varyingStructs, varyingList } = context;\n fnSymbols.forEach((fnSymbol) => {\n const fnNode = fnSymbol.astNode;\n const returnType = fnNode.protoType.returnType;\n\n if (typeof returnType.type === \"string\") {\n lookupSymbol.set(returnType.type, ESymbolType.STRUCT);\n const varyingSymbols = <StructSymbol[]>symbolTable.getSymbols(lookupSymbol, true, []);\n if (!varyingSymbols.length) {\n this._reportError(returnType.location, `invalid varying struct: \"${returnType.type}\".`);\n } else {\n for (let i = 0; i < varyingSymbols.length; i++) {\n const varyingSymbol = varyingSymbols[i];\n const astNode = varyingSymbol.astNode;\n varyingStructs.push(astNode);\n for (const prop of astNode.propList) {\n varyingList.push(prop);\n }\n }\n }\n } else if (returnType.type !== Keyword.VOID) {\n this._reportError(returnType.location, \"vertex main entry can only return struct or void.\");\n }\n\n const paramList = fnNode.protoType.parameterList;\n const attributeParam = paramList?.[0];\n if (attributeParam) {\n const attributeType = attributeParam.typeInfo.type;\n if (typeof attributeType === \"string\") {\n lookupSymbol.set(attributeType, ESymbolType.STRUCT);\n const attributeSymbols = <StructSymbol[]>symbolTable.getSymbols(lookupSymbol, true, []);\n if (!attributeSymbols.length) {\n this._reportError(attributeParam.astNode.location, `invalid attribute struct: \"${attributeType}\".`);\n } else {\n for (let i = 0; i < attributeSymbols.length; i++) {\n const attributeSymbol = attributeSymbols[i];\n const astNode = attributeSymbol.astNode;\n attributeStructs.push(astNode);\n for (const prop of astNode.propList) {\n attributeList.push(prop);\n }\n }\n }\n }\n }\n });\n\n // Pre-walk global `#define` values so referenced struct properties emit `attribute`/`varying` declarations.\n this._preRegisterGlobalMacroRefs(outerGlobalMacroDeclarations);\n\n const globalCodeArray = this._globalCodeArray;\n VisitorContext.context.referenceGlobal(entry, ESymbolType.FN);\n\n this._getGlobalSymbol(globalCodeArray);\n this._getCustomStruct(context.attributeStructs, globalCodeArray);\n this._getCustomStruct(context.varyingStructs, globalCodeArray);\n this._getGlobalMacroDeclarations(outerGlobalMacroDeclarations, globalCodeArray);\n this.getOtherGlobal(data, globalCodeArray);\n\n const globalCode = globalCodeArray\n .sort((a, b) => a.index - b.index)\n .map((item) => item.text)\n .join(\"\\n\");\n\n VisitorContext.context.reset(false);\n this.reset();\n\n return globalCode;\n }\n\n private _fragmentMain(\n entry: string,\n data: ShaderData,\n outerGlobalMacroStatements: ASTNode.GlobalDeclaration[]\n ): string {\n const context = VisitorContext.context;\n context.stage = EShaderStage.FRAGMENT;\n context.stageEntry = entry;\n\n const lookupSymbol = GLESVisitor._lookupSymbol;\n const { symbolTable } = data;\n lookupSymbol.set(entry, ESymbolType.FN);\n const fnSymbols = <FnSymbol[]>symbolTable.getSymbols(lookupSymbol, true, []);\n if (!fnSymbols?.length) throw `no entry function found: ${entry}`;\n\n // Fragment varying info inherits from vertex stage (preserved across `context.reset(false)`).\n fnSymbols.forEach((fnSymbol) => {\n const fnNode = fnSymbol.astNode;\n const { returnStatement } = fnNode;\n\n if (returnStatement) {\n returnStatement.isFragReturnStatement = true;\n }\n\n const { type: returnDataType, location: returnLocation } = fnNode.protoType.returnType;\n if (typeof returnDataType === \"string\") {\n lookupSymbol.set(returnDataType, ESymbolType.STRUCT);\n const mrtSymbols = <StructSymbol[]>symbolTable.getSymbols(lookupSymbol, true, []);\n if (!mrtSymbols.length) {\n this._reportError(returnLocation, `invalid mrt struct: ${returnDataType}`);\n } else {\n for (let i = 0; i < mrtSymbols.length; i++) {\n const mrtSymbol = mrtSymbols[i];\n const astNode = mrtSymbol.astNode;\n context.mrtStructs.push(astNode);\n for (const prop of astNode.propList) {\n context.mrtList.push(prop);\n }\n }\n }\n } else if (returnDataType !== Keyword.VOID && returnDataType !== Keyword.VEC4) {\n this._reportError(returnLocation, \"fragment main entry can only return struct or vec4.\");\n }\n });\n\n // `_structVarMap` is already populated in `visitShaderProgram` with both stages'\n // variables; just pre-walk macro refs so struct codegen sees the references.\n this._preRegisterGlobalMacroRefs(outerGlobalMacroStatements);\n\n const globalCodeArray = this._globalCodeArray;\n VisitorContext.context.referenceGlobal(entry, ESymbolType.FN);\n\n this._getGlobalSymbol(globalCodeArray);\n this._getCustomStruct(context.varyingStructs, globalCodeArray);\n this._getCustomStruct(context.mrtStructs, globalCodeArray);\n this._getGlobalMacroDeclarations(outerGlobalMacroStatements, globalCodeArray);\n this.getOtherGlobal(data, globalCodeArray);\n\n const globalCode = globalCodeArray\n .sort((a, b) => a.index - b.index)\n .map((item) => item.text)\n .join(\"\\n\");\n\n context.reset();\n this.reset();\n\n return globalCode;\n }\n\n private _extractLocalVarNames(node: ASTNode.InitDeclaratorList, context: VisitorContext, role: StructRole): void {\n const children = node.children;\n if (children.length === 1) {\n const singleDecl = children[0] as ASTNode.SingleDeclaration;\n const identChildren = singleDecl.children;\n if (identChildren.length >= 2 && identChildren[1] instanceof BaseToken) {\n context.registerStructVar(identChildren[1].lexeme, role);\n }\n } else if (children.length >= 3) {\n const initDeclList = children[0];\n if (initDeclList instanceof ASTNode.InitDeclaratorList) {\n this._extractLocalVarNames(initDeclList, context, role);\n }\n if (children[2] instanceof BaseToken) {\n context.registerStructVar((children[2] as BaseToken).lexeme, role);\n }\n }\n }\n\n /**\n * Pre-walk `#define` values in global macro declarations and register any\n * `structVar.prop` member accesses as referenced struct props. This must run before\n * struct codegen emits the declaration lists (`attribute …`, `varying …`, `MRT …`),\n * otherwise properties used only from macros would be missing from the output.\n */\n private _preRegisterGlobalMacroRefs(macros: ASTNode.GlobalDeclaration[]): void {\n for (const macro of macros) {\n this._walkMacroDefineTokens(macro.children);\n }\n }\n\n private _walkMacroDefineTokens(children: NodeChild[]): void {\n for (const child of children) {\n if (child instanceof ASTNode.MacroDefine) {\n // Codegen the value once so the enclosed `visitPostfixExpression` calls\n // register their struct-prop references. The returned string is discarded\n // — the real emit happens later in `_getGlobalMacroDeclarations`.\n if (child.valueExpression) child.valueExpression.codeGen(this);\n } else if (child instanceof TreeNode) {\n this._walkMacroDefineTokens(child.children);\n }\n }\n }\n\n private _getGlobalSymbol(out: ICodeSegment[]): void {\n const context = VisitorContext.context;\n const { _referencedGlobals } = context;\n const lastLength = Object.keys(_referencedGlobals).length;\n if (lastLength === 0) return;\n\n for (const ident in _referencedGlobals) {\n if (GLESVisitor._serializedGlobalKey.has(ident)) continue;\n GLESVisitor._serializedGlobalKey.add(ident);\n\n const symbols = _referencedGlobals[ident];\n for (let i = 0, n = symbols.length; i < n; i++) {\n const sm = symbols[i];\n const codeGenResult = sm.astNode.codeGen(this);\n if (!codeGenResult) continue;\n const text = codeGenResult + (sm.type === ESymbolType.VAR ? \";\" : \"\");\n if (!sm.isInMacroBranch) {\n out.push({\n text,\n index: sm.astNode.location.start.index\n });\n }\n }\n }\n\n if (Object.keys(_referencedGlobals).length !== lastLength) {\n this._getGlobalSymbol(out);\n }\n }\n\n private _getCustomStruct(structNodes: ASTNode.StructSpecifier[], out: ICodeSegment[]): void {\n for (const node of structNodes) {\n const text = node.codeGen(this);\n\n if (!node.isInMacroBranch) {\n out.push({ text, index: node.location.start.index });\n }\n }\n }\n\n private _getGlobalMacroDeclarations(macros: ASTNode.GlobalDeclaration[], out: ICodeSegment[]): void {\n const context = VisitorContext.context;\n const referencedGlobals = context._referencedGlobals;\n const referencedGlobalMacroASTs = context._referencedGlobalMacroASTs;\n referencedGlobalMacroASTs.length = 0;\n\n for (const symbols of Object.values(referencedGlobals)) {\n for (const symbol of symbols) {\n if (symbol.isInMacroBranch) {\n referencedGlobalMacroASTs.push(symbol.astNode);\n }\n }\n }\n\n for (const macro of macros) {\n let text: string;\n const child = macro.children[0];\n\n if (child instanceof ASTNode.GlobalMacroIfStatement) {\n let result: ICodeSegment[] = [];\n result.push(\n ...macro.macroExpressions.map((item) => ({\n text: item instanceof BaseToken ? item.lexeme : item.codeGen(this),\n index: item.location.start.index\n }))\n );\n\n this._visitGlobalMacroIfStatement(child, result);\n\n text = result\n .sort((a, b) => a.index - b.index)\n .map((item) => item.text)\n .join(\"\\n\");\n } else if (child instanceof BaseToken && child.type === Keyword.MACRO_DEFINE_EXPRESSION) {\n // Legacy opaque `#define` — its lexeme is the complete directive text,\n // newlines included; emit verbatim.\n text = child.lexeme;\n } else {\n text = macro.codeGen(this);\n }\n\n out.push({\n text,\n index: macro.location.start.index\n });\n }\n }\n\n private _visitGlobalMacroIfStatement(node: TreeNode, out: ICodeSegment[]): void {\n const children = node.children;\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (child instanceof ASTNode.PrecisionSpecifier) {\n out.push({\n text: child.codeGen(this),\n index: child.location.start.index\n });\n } else if (child instanceof ASTNode.FunctionDefinition) {\n if (VisitorContext.context._referencedGlobalMacroASTs.indexOf(child) !== -1) {\n out.push({\n text: child.getCache(), // code has generated in `_getGlobalSymbol`\n index: child.location.start.index\n });\n }\n } else if (child instanceof ASTNode.StructSpecifier) {\n const context = VisitorContext.context;\n const stage = context.stage;\n if (\n VisitorContext.context._referencedGlobalMacroASTs.indexOf(child) !== -1 ||\n (stage === EShaderStage.VERTEX\n ? context.isAttributeStruct(child.ident?.lexeme) || context.isVaryingStruct(child.ident?.lexeme)\n : context.isVaryingStruct(child.ident?.lexeme) || context.isMRTStruct(child.ident?.lexeme))\n ) {\n out.push({\n text: child.getCache(), // code has generated in `_getGlobalSymbol` or `_getCustomStruct`\n index: child.location.start.index\n });\n }\n } else if (child instanceof ASTNode.VariableDeclarationList) {\n const variableDeclarations = child.variableDeclarations;\n for (let i = 0; i < variableDeclarations.length; i++) {\n const variableDeclaration = variableDeclarations[i];\n if (VisitorContext.context._referencedGlobalMacroASTs.indexOf(variableDeclaration) !== -1) {\n out.push({\n text: variableDeclaration.getCache() + \";\", // code has generated in `_getGlobalSymbol`\n index: variableDeclaration.location.start.index\n });\n }\n }\n }\n\n if (child instanceof TreeNode) {\n this._visitGlobalMacroIfStatement(child, out);\n }\n }\n }\n}\n","import { BaseToken } from \"../common/BaseToken\";\nimport { ASTNode } from \"../parser/AST\";\nimport { StructProp } from \"../parser/types\";\nimport { GLESVisitor } from \"./GLESVisitor\";\nimport { VisitorContext } from \"./VisitorContext\";\n\nexport class GLES100Visitor extends GLESVisitor {\n private static _singleton: GLES100Visitor;\n static getVisitor(): GLES100Visitor {\n if (!this._singleton) {\n this._singleton = new GLES100Visitor();\n }\n return this._singleton;\n }\n\n override getAttributeProp(prop: StructProp): string {\n return `attribute ${prop.typeInfo.typeLexeme} ${prop.ident.lexeme};`;\n }\n\n override getVaryingProp(prop: StructProp): string {\n return `varying ${prop.typeInfo.typeLexeme} ${prop.ident.lexeme};`;\n }\n\n override getMRTProp(): string {\n return null;\n }\n\n override visitPostfixExpression(node: ASTNode.PostfixExpression): string {\n const { children } = node;\n const postExpr = children[0];\n const { context } = VisitorContext;\n if (postExpr instanceof ASTNode.PostfixExpression && context.isMRTStruct(<string>postExpr.type)) {\n const propReferenced = children[2] as BaseToken;\n const prop = context.mrtList.find((item) => item.ident.lexeme === propReferenced.lexeme);\n if (!prop) {\n this._reportError(propReferenced.location, `not found mrt property: ${propReferenced.lexeme}`);\n return \"\";\n }\n return `gl_FragData[${prop.mrtIndex!}]`;\n }\n return super.visitPostfixExpression(node);\n }\n\n override visitJumpStatement(node: ASTNode.JumpStatement): string {\n if (node.isFragReturnStatement) {\n if (VisitorContext.context.mrtStructs.length) {\n return \"\";\n }\n const expression = node.children[1] as ASTNode.Expression;\n return `gl_FragColor = ${expression.codeGen(this)};`;\n }\n return super.visitJumpStatement(node);\n }\n}\n","import { EShaderStage } from \"../common/enums/ShaderStage\";\nimport { ASTNode } from \"../parser/AST\";\nimport { ShaderData } from \"../parser/ShaderInfo\";\nimport { StructProp } from \"../parser/types\";\nimport { GLESVisitor } from \"./GLESVisitor\";\nimport { ICodeSegment } from \"./types\";\nimport { VisitorContext } from \"./VisitorContext\";\n\nconst V3_GL_FragColor = \"GS_glFragColor\";\n\nexport class GLES300Visitor extends GLESVisitor {\n private static _singleton: GLES300Visitor;\n static getVisitor(): GLES300Visitor {\n if (!this._singleton) {\n this._singleton = new GLES300Visitor();\n }\n return this._singleton;\n }\n\n private _otherCodeArray: ICodeSegment[] = [];\n private _fragColorVariableRegistered = false;\n\n override reset(): void {\n super.reset();\n\n this._otherCodeArray.length = 0;\n this._fragColorVariableRegistered = false;\n }\n\n override getOtherGlobal(data: ShaderData, out: ICodeSegment[]): void {\n super.getOtherGlobal(data, out);\n\n for (let i = 0, n = this._otherCodeArray.length; i < n; i++) {\n out.push(this._otherCodeArray[i]);\n }\n }\n\n override getAttributeProp(prop: StructProp): string {\n return `in ${prop.typeInfo.typeLexeme} ${prop.ident.lexeme};`;\n }\n\n override getVaryingProp(prop: StructProp): string {\n const qualifier = VisitorContext.context.stage === EShaderStage.FRAGMENT ? \"in\" : \"out\";\n return `${qualifier} ${prop.typeInfo.typeLexeme} ${prop.ident.lexeme};`;\n }\n\n override getMRTProp(prop: StructProp): string {\n return `layout(location = ${prop.mrtIndex}) out vec4 ${prop.ident.lexeme};`;\n }\n\n override visitFunctionIdentifier(node: ASTNode.FunctionIdentifier): string {\n const children = node.children;\n const typeSpecifier = children[0] as ASTNode.TypeSpecifier;\n if (typeSpecifier.children.length !== 1) {\n return this.defaultCodeGen(children);\n }\n let ident = node.lexeme;\n switch (node.ident) {\n case \"texture2D\":\n case \"textureCube\":\n ident = \"texture\";\n break;\n case \"texture2DProj\":\n ident = \"textureProj\";\n break;\n case \"texture2DLodEXT\":\n case \"textureCubeLodEXT\":\n ident = \"textureLod\";\n break;\n case \"texture2DGradEXT\":\n case \"textureCubeGradEXT\":\n ident = \"textureGrad\";\n break;\n case \"texture2DProjLodEXT\":\n ident = \"textureProjLod\";\n break;\n case \"texture2DProjGradEXT\":\n ident = \"textureProjGrad\";\n break;\n case \"gl_FragDepthEXT\":\n ident = \"gl_FragDepth\";\n break;\n }\n return ident;\n }\n\n override visitVariableIdentifier(node: ASTNode.VariableIdentifier): string {\n const { context } = VisitorContext;\n if (context.stage === EShaderStage.FRAGMENT && node.getLexeme(this) === \"gl_FragColor\") {\n if (context.mrtStructs.length) {\n this._reportError(node.location, \"gl_FragColor cannot be used with MRT (Multiple Render Targets).\");\n return;\n }\n this._registerFragColorVariable();\n return V3_GL_FragColor;\n }\n return super.visitVariableIdentifier(node);\n }\n\n override visitJumpStatement(node: ASTNode.JumpStatement): string {\n if (node.isFragReturnStatement) {\n if (VisitorContext.context.mrtStructs.length) {\n return \"\";\n }\n this._registerFragColorVariable();\n\n const expression = node.children[1] as ASTNode.Expression;\n return `${V3_GL_FragColor} = ${expression.codeGen(this)};`;\n }\n return super.visitJumpStatement(node);\n }\n\n private _registerFragColorVariable() {\n if (this._fragColorVariableRegistered) return;\n this._otherCodeArray.push({\n text: `out vec4 ${V3_GL_FragColor};`,\n index: 0\n });\n this._fragColorVariableRegistered = true;\n }\n}\n","import type { Condition, ShaderInstruction } from \"@galacean/engine-design\";\n\nexport type { ShaderInstruction } from \"@galacean/engine-design\";\n\n/** Must stay in sync with ShaderPreprocessorDirective in @galacean/engine-core */\nconst ShaderPreprocessorDirective = {\n Text: 0,\n IfDef: 1,\n IfNdef: 2,\n IfCmp: 3,\n IfExpr: 4,\n Else: 5,\n Endif: 6,\n Define: 7,\n DefineVal: 8,\n DefineFunc: 9,\n Undef: 10\n} as const;\n\ninterface ExprCtx {\n s: string;\n i: number;\n}\n\n/**\n * @internal\n */\nexport class ShaderInstructionEncoder {\n private static _DIRECTIVE_RE = /^[ \\t]*#[ \\t]*(if|ifdef|ifndef|elif|else|endif|define|undef)\\b(.*)/;\n private static _FUNC_MACRO_RE = /^(\\w+)\\(([^)]*)\\)\\s*(.*)/;\n\n static parse(glsl: string): ShaderInstruction[] {\n const instructions: ShaderInstruction[] = [];\n const length = glsl.length;\n let pos = 0;\n const backfillStack: number[][] = [];\n\n while (pos < length) {\n const directiveStart = ShaderInstructionEncoder._findDirectiveStart(glsl, pos, length);\n\n if (directiveStart === -1) {\n ShaderInstructionEncoder._pushText(instructions, glsl, pos, length);\n break;\n }\n\n if (directiveStart > pos) {\n ShaderInstructionEncoder._pushText(instructions, glsl, pos, directiveStart);\n }\n\n let lineEnd = glsl.indexOf(\"\\n\", directiveStart);\n if (lineEnd === -1) lineEnd = length;\n const line = glsl.substring(directiveStart, lineEnd);\n pos = lineEnd < length ? lineEnd + 1 : length;\n\n const match = ShaderInstructionEncoder._DIRECTIVE_RE.exec(line);\n if (!match) {\n const last = instructions.length > 0 ? instructions[instructions.length - 1] : null;\n const text = lineEnd < length ? line + \"\\n\" : line;\n if (last && last[0] === ShaderPreprocessorDirective.Text) {\n (last as [number, string])[1] += text;\n } else {\n instructions.push([ShaderPreprocessorDirective.Text, text]);\n }\n continue;\n }\n\n const keyword = match[1];\n const rest = match[2].trim();\n\n switch (keyword) {\n case \"ifdef\": {\n const idx = instructions.length;\n instructions.push([ShaderPreprocessorDirective.IfDef, rest, -1]);\n backfillStack.push([idx]);\n break;\n }\n case \"ifndef\": {\n const idx = instructions.length;\n instructions.push([ShaderPreprocessorDirective.IfNdef, rest, -1]);\n backfillStack.push([idx]);\n break;\n }\n case \"if\": {\n const cond = ShaderInstructionEncoder._parseCondition(rest);\n const idx = instructions.length;\n ShaderInstructionEncoder._pushConditionInstruction(instructions, cond);\n backfillStack.push([idx]);\n break;\n }\n case \"elif\": {\n const stack = backfillStack[backfillStack.length - 1];\n const prevIdx = stack[stack.length - 1];\n const elseIdx = instructions.length;\n instructions.push([ShaderPreprocessorDirective.Else, -1]);\n stack.push(elseIdx);\n ShaderInstructionEncoder._backfillJump(instructions[prevIdx], instructions.length);\n\n const cond = ShaderInstructionEncoder._parseCondition(rest);\n const idx = instructions.length;\n ShaderInstructionEncoder._pushConditionInstruction(instructions, cond);\n stack.push(idx);\n break;\n }\n case \"else\": {\n const stack = backfillStack[backfillStack.length - 1];\n const prevIdx = stack[stack.length - 1];\n const elseIdx = instructions.length;\n instructions.push([ShaderPreprocessorDirective.Else, -1]);\n stack.push(elseIdx);\n ShaderInstructionEncoder._backfillJump(instructions[prevIdx], instructions.length);\n break;\n }\n case \"endif\": {\n const endifIdx = instructions.length;\n instructions.push([ShaderPreprocessorDirective.Endif]);\n const stack = backfillStack.pop();\n if (stack) {\n const afterEndif = endifIdx + 1;\n for (let j = 0; j < stack.length; j++) {\n const inst = instructions[stack[j]];\n if (inst[0] === ShaderPreprocessorDirective.Else) {\n (inst as [number, number])[1] = afterEndif;\n } else {\n ShaderInstructionEncoder._backfillJump(inst, afterEndif, true);\n }\n }\n }\n break;\n }\n case \"define\": {\n const funcMatch = ShaderInstructionEncoder._FUNC_MACRO_RE.exec(rest);\n if (funcMatch) {\n const params = funcMatch[2]\n .split(\",\")\n .map((p) => p.trim())\n .filter((p) => p.length > 0);\n instructions.push([\n ShaderPreprocessorDirective.DefineFunc,\n funcMatch[1],\n params,\n ShaderInstructionEncoder._stripLineComment(funcMatch[3].trim())\n ]);\n } else {\n const spaceIdx = rest.indexOf(\" \");\n if (spaceIdx === -1) {\n instructions.push([ShaderPreprocessorDirective.Define, rest]);\n } else {\n instructions.push([\n ShaderPreprocessorDirective.DefineVal,\n rest.substring(0, spaceIdx),\n ShaderInstructionEncoder._stripLineComment(rest.substring(spaceIdx + 1).trim())\n ]);\n }\n }\n break;\n }\n case \"undef\": {\n instructions.push([ShaderPreprocessorDirective.Undef, rest]);\n break;\n }\n }\n }\n\n return instructions;\n }\n\n private static _pushConditionInstruction(instructions: ShaderInstruction[], cond: Condition): void {\n if (cond.t === \"def\") {\n instructions.push([ShaderPreprocessorDirective.IfDef, cond.m, -1]);\n } else if (cond.t === \"ndef\") {\n instructions.push([ShaderPreprocessorDirective.IfNdef, cond.m, -1]);\n } else if (cond.t === \"cmp\") {\n instructions.push([ShaderPreprocessorDirective.IfCmp, cond.m, cond.op, cond.v, -1]);\n } else {\n instructions.push([ShaderPreprocessorDirective.IfExpr, cond, -1]);\n }\n }\n\n private static _findDirectiveStart(source: string, from: number, length: number): number {\n let i = from;\n while (i < length) {\n let j = i;\n while (j < length) {\n const c = source.charCodeAt(j);\n if (c === 32 /* space */ || c === 9 /* tab */) {\n j++;\n } else {\n break;\n }\n }\n if (j < length && source.charCodeAt(j) === 35 /* '#' */) return i;\n\n const nl = source.indexOf(\"\\n\", i);\n if (nl === -1) break;\n i = nl + 1;\n }\n return -1;\n }\n\n private static _pushText(instructions: ShaderInstruction[], source: string, from: number, to: number): void {\n if (from >= to) return;\n const last = instructions.length > 0 ? instructions[instructions.length - 1] : null;\n if (last && last[0] === ShaderPreprocessorDirective.Text) {\n (last as [number, string])[1] += source.substring(from, to);\n } else {\n instructions.push([ShaderPreprocessorDirective.Text, source.substring(from, to)]);\n }\n }\n\n /**\n * Backfill jump offset of an IF/ELIF instruction.\n * When onlyPlaceholder is true, only backfill if the current value is still -1\n */\n private static _backfillJump(inst: ShaderInstruction, target: number, onlyPlaceholder = false): void {\n const directive = inst[0];\n if (directive === ShaderPreprocessorDirective.IfDef || directive === ShaderPreprocessorDirective.IfNdef) {\n if (!onlyPlaceholder || inst[2] === -1) (inst as [number, string, number])[2] = target;\n } else if (directive === ShaderPreprocessorDirective.IfCmp) {\n if (!onlyPlaceholder || inst[4] === -1) (inst as [number, string, string, number, number])[4] = target;\n } else if (directive === ShaderPreprocessorDirective.IfExpr) {\n if (!onlyPlaceholder || inst[2] === -1) (inst as [number, Condition, number])[2] = target;\n }\n }\n\n private static _stripLineComment(s: string): string {\n const idx = s.indexOf(\"//\");\n return idx >= 0 ? s.substring(0, idx).trimEnd() : s;\n }\n\n private static _parseCondition(expr: string): Condition {\n const ctx: ExprCtx = { s: expr.trim(), i: 0 };\n return ShaderInstructionEncoder._parseOr(ctx);\n }\n\n private static _skipWs(ctx: ExprCtx): void {\n while (\n ctx.i < ctx.s.length &&\n (ctx.s.charCodeAt(ctx.i) === 32 /* space */ || ctx.s.charCodeAt(ctx.i) === 9) /* tab */\n )\n ctx.i++;\n }\n\n private static _parseOr(ctx: ExprCtx): Condition {\n let left = ShaderInstructionEncoder._parseAnd(ctx);\n ShaderInstructionEncoder._skipWs(ctx);\n while (\n ctx.i < ctx.s.length - 1 &&\n ctx.s.charCodeAt(ctx.i) === 124 /* '|' */ &&\n ctx.s.charCodeAt(ctx.i + 1) === 124 /* '|' */\n ) {\n ctx.i += 2;\n ShaderInstructionEncoder._skipWs(ctx);\n left = { t: \"or\", l: left, r: ShaderInstructionEncoder._parseAnd(ctx) };\n ShaderInstructionEncoder._skipWs(ctx);\n }\n return left;\n }\n\n private static _parseAnd(ctx: ExprCtx): Condition {\n let left = ShaderInstructionEncoder._parseUnary(ctx);\n ShaderInstructionEncoder._skipWs(ctx);\n while (\n ctx.i < ctx.s.length - 1 &&\n ctx.s.charCodeAt(ctx.i) === 38 /* '&' */ &&\n ctx.s.charCodeAt(ctx.i + 1) === 38 /* '&' */\n ) {\n ctx.i += 2;\n ShaderInstructionEncoder._skipWs(ctx);\n left = { t: \"and\", l: left, r: ShaderInstructionEncoder._parseUnary(ctx) };\n ShaderInstructionEncoder._skipWs(ctx);\n }\n return left;\n }\n\n private static _parseUnary(ctx: ExprCtx): Condition {\n ShaderInstructionEncoder._skipWs(ctx);\n if (ctx.s.charCodeAt(ctx.i) === 33 /* '!' */) {\n ctx.i++;\n ShaderInstructionEncoder._skipWs(ctx);\n return { t: \"not\", c: ShaderInstructionEncoder._parsePrimary(ctx) };\n }\n return ShaderInstructionEncoder._parsePrimary(ctx);\n }\n\n private static _parsePrimary(ctx: ExprCtx): Condition {\n ShaderInstructionEncoder._skipWs(ctx);\n const { s } = ctx;\n\n // Parenthesized expression\n if (s.charCodeAt(ctx.i) === 40 /* '(' */) {\n ctx.i++;\n ShaderInstructionEncoder._skipWs(ctx);\n const inner = ShaderInstructionEncoder._parseOr(ctx);\n ShaderInstructionEncoder._skipWs(ctx);\n if (s.charCodeAt(ctx.i) === 41 /* ')' */) ctx.i++;\n return inner;\n }\n\n // defined(MACRO) or defined MACRO\n if (s.substring(ctx.i, ctx.i + 7) === \"defined\") {\n ctx.i += 7;\n ShaderInstructionEncoder._skipWs(ctx);\n const hasParen = s.charCodeAt(ctx.i) === 40; /* '(' */\n if (hasParen) ctx.i++;\n ShaderInstructionEncoder._skipWs(ctx);\n const name = ShaderInstructionEncoder._scanIdentifier(ctx);\n ShaderInstructionEncoder._skipWs(ctx);\n if (hasParen && s.charCodeAt(ctx.i) === 41 /* ')' */) ctx.i++;\n return { t: \"def\", m: name };\n }\n\n // Numeric literal\n if (ctx.i < s.length && ShaderInstructionEncoder._isDigit(s.charCodeAt(ctx.i))) {\n const lhsNum = ShaderInstructionEncoder._scanNumber(ctx);\n ShaderInstructionEncoder._skipWs(ctx);\n const op = ShaderInstructionEncoder._scanOp(ctx);\n if (op) {\n ShaderInstructionEncoder._skipWs(ctx);\n return {\n t: \"bool\",\n v: ShaderInstructionEncoder._evalNumOp(lhsNum, op, ShaderInstructionEncoder._scanNumber(ctx))\n };\n }\n return { t: \"bool\", v: lhsNum !== 0 };\n }\n\n // Identifier — comparison or defined check\n const name = ShaderInstructionEncoder._scanIdentifier(ctx);\n if (!name) return { t: \"bool\", v: false };\n ShaderInstructionEncoder._skipWs(ctx);\n const op = ShaderInstructionEncoder._scanOp(ctx);\n if (op) {\n ShaderInstructionEncoder._skipWs(ctx);\n return { t: \"cmp\", m: name, op, v: ShaderInstructionEncoder._scanNumber(ctx) };\n }\n return { t: \"def\", m: name };\n }\n\n private static _isDigit(charCode: number): boolean {\n return charCode >= 48 /* '0' */ && charCode <= 57 /* '9' */;\n }\n\n private static _isAlnum(charCode: number): boolean {\n return (\n (charCode >= 65 /* 'A' */ && charCode <= 90) /* 'Z' */ ||\n (charCode >= 97 /* 'a' */ && charCode <= 122) /* 'z' */ ||\n (charCode >= 48 /* '0' */ && charCode <= 57) /* '9' */ ||\n charCode === 95 /* '_' */\n );\n }\n\n private static _scanIdentifier(ctx: ExprCtx): string {\n const start = ctx.i;\n while (ctx.i < ctx.s.length && ShaderInstructionEncoder._isAlnum(ctx.s.charCodeAt(ctx.i))) ctx.i++;\n return ctx.s.substring(start, ctx.i);\n }\n\n private static _scanNumber(ctx: ExprCtx): number {\n const start = ctx.i;\n if (ctx.s.charCodeAt(ctx.i) === 45 /* '-' */) ctx.i++;\n while (\n ctx.i < ctx.s.length &&\n (ShaderInstructionEncoder._isDigit(ctx.s.charCodeAt(ctx.i)) || ctx.s.charCodeAt(ctx.i) === 46) /* '.' */\n )\n ctx.i++;\n return Number(ctx.s.substring(start, ctx.i)) || 0;\n }\n\n private static _scanOp(ctx: ExprCtx): string {\n const c = ctx.s.charCodeAt(ctx.i);\n const c2 = ctx.i + 1 < ctx.s.length ? ctx.s.charCodeAt(ctx.i + 1) : 0;\n if (c === 61 /* '=' */ && c2 === 61 /* '=' */) {\n ctx.i += 2;\n return \"==\";\n }\n if (c === 33 /* '!' */ && c2 === 61 /* '=' */) {\n ctx.i += 2;\n return \"!=\";\n }\n if (c === 62 /* '>' */ && c2 === 61 /* '=' */) {\n ctx.i += 2;\n return \">=\";\n }\n if (c === 60 /* '<' */ && c2 === 61 /* '=' */) {\n ctx.i += 2;\n return \"<=\";\n }\n if (c === 62 /* '>' */) {\n ctx.i++;\n return \">\";\n }\n if (c === 60 /* '<' */) {\n ctx.i++;\n return \"<\";\n }\n return \"\";\n }\n\n private static _evalNumOp(lhs: number, op: string, rhs: number): boolean {\n switch (op) {\n case \"==\":\n return lhs === rhs;\n case \"!=\":\n return lhs !== rhs;\n case \">\":\n return lhs > rhs;\n case \"<\":\n return lhs < rhs;\n case \">=\":\n return lhs >= rhs;\n case \"<=\":\n return lhs <= rhs;\n default:\n return false;\n }\n }\n}\n","import { NoneTerminal, GrammarSymbol } from \"../parser/GrammarSymbol\";\n\nexport default class Production {\n private static _id = 0;\n static pool: Map<number, Production> = new Map();\n\n readonly goal: NoneTerminal;\n readonly derivation: GrammarSymbol[];\n readonly id: number;\n\n constructor(goal: NoneTerminal, derivation: GrammarSymbol[]) {\n this.goal = goal;\n this.derivation = derivation;\n this.id = Production._id++;\n Production.pool.set(this.id, this);\n }\n}\n","import { ETokenType } from \"../common\";\nimport { NoneTerminal, Terminal } from \"../parser/GrammarSymbol\";\nimport Production from \"./Production\";\nimport GrammarUtils from \"./Utils\";\n\nexport default class StateItem {\n static _id = 0;\n\n readonly production: Production;\n readonly position: number;\n readonly lookaheadSet: Set<Terminal>;\n readonly id: number;\n\n _needReInfer = true;\n get needReInfer() {\n return this._needReInfer;\n }\n set needReInfer(v: boolean) {\n this._needReInfer = v;\n }\n\n get curSymbol() {\n return this.production.derivation[this.position];\n }\n get nextSymbol() {\n return this.production.derivation[this.position + 1];\n }\n\n constructor(production: Production, position: number, lookahead: Iterable<Terminal>) {\n this.production = production;\n this.position = position;\n this.lookaheadSet = new Set();\n for (const la of lookahead) {\n this.lookaheadSet.add(la);\n }\n this.id = StateItem._id++;\n }\n\n addLookahead(ts: Iterable<Terminal>) {\n for (const t of ts) {\n if (this.lookaheadSet.has(t)) continue;\n this.lookaheadSet.add(t);\n this.needReInfer = true;\n }\n }\n\n symbolByOffset(offset: number) {\n return this.production.derivation[this.position + offset];\n }\n\n canReduce() {\n if (this.position > this.production.derivation.length - 1) return true;\n else {\n for (let i = this.position; i < this.production.derivation.length; i++) {\n if (this.production.derivation[i] !== ETokenType.EPSILON) return false;\n }\n return true;\n }\n }\n\n advance() {\n // #if _VERBOSE\n if (this.canReduce()) throw `Error: advance reduce-able parsing state item`;\n // #endif\n return new StateItem(this.production, this.position + 1, this.lookaheadSet);\n }\n\n // #if _VERBOSE\n toString() {\n const coreItem = this.production.derivation.map((item) => GrammarUtils.toString(item));\n coreItem[this.position] = \".\" + (coreItem[this.position] ?? \"\");\n\n return `${NoneTerminal[this.production.goal]} :=> ${coreItem.join(\"|\")} ;${Array.from(this.lookaheadSet)\n .map((item) => GrammarUtils.toString(item))\n .join(\"/\")}`;\n }\n // #endif\n}\n","import { Terminal } from \"../parser/GrammarSymbol\";\nimport Production from \"./Production\";\nimport StateItem from \"./StateItem\";\n\nexport default class State {\n static closureMap: Map<string /** state mapKey */, State> = new Map();\n static pool: Map<number, State> = new Map();\n static _id = 0;\n\n readonly id: number;\n readonly cores: Set<StateItem>;\n private _items: Set<StateItem>;\n get items() {\n return this._items;\n }\n\n closured = false;\n get needReInfer() {\n for (const core of this.cores) {\n if (core.needReInfer) return true;\n }\n return false;\n }\n\n private _stateItemPool: Map<string /** Map ID */, StateItem> = new Map();\n\n static create(cores: StateItem[]) {\n const cacheKey = this.getMapKey(cores);\n const state = this.closureMap.get(cacheKey);\n if (state) {\n for (const core of cores) {\n // merge lookahead\n state.createStateItem(core.production, core.position, core.lookaheadSet);\n }\n return state;\n }\n\n const newState = new State(cores);\n this.closureMap.set(cacheKey, newState);\n return newState;\n }\n\n // TODO: any optimization?\n static getMapKey(cores: StateItem[]) {\n return cores.map((item) => `${item.production.id},${item.position}`).join(\";\");\n }\n\n private constructor(cores: Iterable<StateItem>) {\n this.id = State._id++;\n this._items = new Set([...cores]);\n this.cores = new Set([...cores]);\n for (const it of cores) {\n const itemMapKey = this.getStateItemMapKey(it.production, it.position);\n this._stateItemPool.set(itemMapKey, it);\n }\n State.pool.set(this.id, this);\n }\n\n // TODO: any optimization?\n getStateItemMapKey(production: Production, position: number) {\n return `${production.id},${position}`;\n }\n\n createStateItem(production: Production, position: number, lookaheadSet: Iterable<Terminal> = new Set()) {\n const mapId = this.getStateItemMapKey(production, position);\n const item = this._stateItemPool.get(mapId);\n if (item) {\n for (const la of lookaheadSet) {\n if (item.lookaheadSet.has(la)) continue;\n item.lookaheadSet.add(la);\n item.needReInfer = true;\n }\n return item;\n }\n const newItem = new StateItem(production, position, lookaheadSet);\n this._stateItemPool.set(mapId, newItem);\n return newItem;\n }\n}\n","import { ETokenType, ShaderRange } from \"../common\";\nimport { ASTNode, TreeNode } from \"../parser/AST\";\nimport { TranslationRule } from \"../parser/SemanticAnalyzer\";\nimport { NoneTerminal, GrammarSymbol } from \"../parser/GrammarSymbol\";\nimport Production from \"./Production\";\nimport { ActionInfo, EAction } from \"./types\";\nimport { ShaderCompiler } from \"../ShaderCompiler\";\nimport { ClearableObjectPool, type IPoolElement } from \"@galacean/engine-core\";\nimport { NodeChild } from \"../parser/types\";\nimport { Keyword } from \"../common/enums/Keyword\";\n\nexport default class GrammarUtils {\n static isTerminal(sm: GrammarSymbol) {\n return sm < NoneTerminal.START;\n }\n\n static toString(sm: GrammarSymbol) {\n if (this.isTerminal(sm)) {\n return ETokenType[sm] ?? Keyword[sm];\n }\n return NoneTerminal[sm];\n }\n\n static createProductionWithOptions(\n goal: NoneTerminal,\n options: GrammarSymbol[][],\n /** the ast node */\n astTypePool?: ClearableObjectPool<\n { set: (loc: ShaderRange, children: NodeChild[]) => void } & IPoolElement & TreeNode\n >\n ) {\n // Resolve the AST pool once per grammar production (not per reduce).\n const pool = astTypePool ?? ASTNode.TrivialNode.pool;\n const ret: [GrammarSymbol[], TranslationRule | undefined][] = [];\n for (const opt of options) {\n // Single-`NonTerminal` RHS + no typed class → this production reduces\n // to a semantic-empty `TrivialNode` wrapper. Elide it at reduce time\n // by pushing the child directly onto the semantic stack. Safe because\n // the parser's GOTO runs off `reduceProduction.goal`, not off the node\n // type on the stack. Single-Terminal RHS (e.g. `unary_operator → PLUS`)\n // isn't eligible — a `BaseToken` can't stand in for an AST node.\n const canElide = !astTypePool && opt.length === 1 && !GrammarUtils.isTerminal(opt[0]);\n ret.push([\n [goal, ...opt],\n function (sa, ...children) {\n if (!children[0]) return;\n if (canElide) {\n sa.semanticStack.push(children[0] as TreeNode);\n } else {\n const start = children[0].location.start;\n const end = children[children.length - 1].location.end;\n const location = ShaderCompiler.createRange(start, end);\n ASTNode.get(pool, sa, location, children);\n }\n }\n ]);\n }\n return ret;\n }\n\n static addMapSetItem<K, T>(map: Map<K, Set<T>>, k: K, v: T) {\n const set = map.get(k) ?? new Set();\n set.add(v);\n map.set(k, set);\n }\n\n static isSubSet<T>(sa: Set<T>, sb: Set<T>) {\n for (const item of sa) {\n if (!sb.has(item)) return false;\n }\n return true;\n }\n\n static isActionEqual(a: ActionInfo, b: ActionInfo) {\n return a.action === b.action && a.target === b.target;\n }\n\n // #if _VERBOSE\n static printAction(actionInfo: ActionInfo) {\n const production = Production.pool.get(actionInfo.target!);\n return `<Action: ${EAction[actionInfo.action]} -> ${this.printProduction(production)}>`;\n }\n\n static printProduction(production: Production) {\n const deriv = production.derivation.map((gs) => GrammarUtils.toString(gs)).join(\"|\");\n return `${NoneTerminal[production.goal]} :=> ${deriv}`;\n }\n // #endif\n}\n","import { ETokenType } from \"../common\";\nimport { Keyword } from \"../common/enums/Keyword\";\nimport { Grammar } from \"../parser/Grammar\";\nimport { GrammarSymbol, NoneTerminal, Terminal } from \"../parser/GrammarSymbol\";\nimport Production from \"./Production\";\nimport State from \"./State\";\nimport StateItem from \"./StateItem\";\nimport { default as GrammarUtils, default as Utils } from \"./Utils\";\nimport { ActionInfo, ActionTable, EAction, GotoTable, StateActionTable, StateGotoTable } from \"./types\";\n\n/**\n * The [LALR1](https://web.stanford.edu/class/archive/cs/cs143/cs143.1128/handouts/140%20LALR%20Parsing.pdf) Parser generator\n */\nexport class LALR1 {\n readonly firstSetMap: Map<NoneTerminal, Set<Terminal>> = new Map();\n readonly followSetMap: Map<NoneTerminal, Set<Terminal>> = new Map();\n\n readonly actionTable: StateActionTable = new Map();\n readonly gotoTable: StateGotoTable = new Map();\n private grammar: Grammar;\n\n /** For circle detect */\n private _firstSetNTStack: NoneTerminal[] = [];\n\n constructor(grammar: Grammar) {\n this.grammar = grammar;\n }\n\n generate() {\n this.computeFirstSet();\n this.buildStateTable();\n }\n\n private buildStateTable() {\n const startStateItemCore = [new StateItem(this.grammar.productions[0], 0, [ETokenType.EOF])];\n const startState = State.create(startStateItemCore);\n this._extendState(startState);\n }\n\n private _extendState(state: State) {\n if (!state.needReInfer) return;\n this._closure(state);\n const newStates = this._inferNextState(state);\n for (const ns of newStates) {\n this._extendState(ns);\n }\n }\n\n private _closure(state: State) {\n for (const core of state.cores) {\n if (!core.canReduce()) {\n this._extendStateItem(state, core);\n }\n }\n state.closured = true;\n return state;\n }\n\n private _extendStateItem(state: State, item: StateItem) {\n if (GrammarUtils.isTerminal(item.curSymbol)) return;\n\n const productionList = this.grammar.getProductionList(<NoneTerminal>item.curSymbol);\n\n if (item.nextSymbol) {\n let newLookaheadSet = new Set<Terminal>();\n let lastFirstSet: Set<Terminal> | undefined;\n let terminalExist = false;\n // when A :=> a.BC, a; ==》 B :=> .xy, First(Ca)\n // newLookAhead = First(Ca)\n for (let i = 1, nextSymbol = item.symbolByOffset(1); !!nextSymbol; nextSymbol = item.symbolByOffset(++i)) {\n if (GrammarUtils.isTerminal(nextSymbol)) {\n newLookaheadSet.add(<Terminal>nextSymbol);\n terminalExist = true;\n break;\n }\n lastFirstSet = this.firstSetMap.get(<NoneTerminal>nextSymbol)!;\n for (const t of lastFirstSet) {\n newLookaheadSet.add(t);\n }\n if (!lastFirstSet.has(ETokenType.EPSILON)) break;\n }\n if (!terminalExist && lastFirstSet?.has(ETokenType.EPSILON)) {\n for (const t of item.lookaheadSet) {\n newLookaheadSet.add(t);\n }\n }\n\n for (const production of productionList) {\n const newItem = state.createStateItem(production, 0);\n if (!state.items.has(newItem) || !Utils.isSubSet(newLookaheadSet, newItem.lookaheadSet)) {\n state.items.add(newItem);\n newItem.addLookahead(newLookaheadSet);\n this._extendStateItem(state, newItem);\n }\n }\n } else {\n for (const production of productionList) {\n const newItem = state.createStateItem(production, 0);\n if (!state.items.has(newItem) || !Utils.isSubSet(item.lookaheadSet, newItem.lookaheadSet)) {\n state.items.add(newItem);\n newItem.addLookahead(item.lookaheadSet);\n this._extendStateItem(state, newItem);\n }\n }\n }\n }\n\n private _inferNextState(state: State): Set<State> {\n const coreMap: Map<GrammarSymbol, Set<StateItem>> = new Map();\n const stateActionTable: ActionTable = this.actionTable.get(state.id) ?? new Map();\n const stateGotoTable: GotoTable = this.gotoTable.get(state.id) ?? new Map();\n\n this.actionTable.set(state.id, stateActionTable);\n this.gotoTable.set(state.id, stateGotoTable);\n\n for (const stateItem of state.items) {\n if (stateItem.canReduce()) {\n let action: ActionInfo;\n if (stateItem.production.goal !== NoneTerminal.START) {\n action = {\n action: EAction.Reduce,\n target: stateItem.production.id\n };\n } else {\n action = { action: EAction.Accept };\n }\n\n for (const t of stateItem.lookaheadSet) {\n this._addAction(stateActionTable, t, action);\n }\n } else {\n const nextItem = stateItem.advance();\n Utils.addMapSetItem(coreMap, stateItem.curSymbol, nextItem);\n }\n\n stateItem.needReInfer = false;\n }\n\n const newStates = new Set<State>();\n for (const [gs, cores] of coreMap.entries()) {\n const newState = State.create(Array.from(cores));\n if (GrammarUtils.isTerminal(gs)) {\n this._addAction(stateActionTable, <Terminal>gs, {\n action: EAction.Shift,\n target: newState.id\n });\n } else {\n stateGotoTable.set(<NoneTerminal>gs, newState.id);\n }\n\n newStates.add(newState);\n }\n\n return newStates;\n }\n\n /** Resolve shift-reduce/reduce-reduce conflict detect */\n private _addAction(table: ActionTable, terminal: Terminal, action: ActionInfo) {\n const exist = table.get(terminal);\n if (exist && !Utils.isActionEqual(exist, action)) {\n // Known shift-preferred conflicts (see TargetParser.y `%expect 2`).\n // Enforce shift regardless of the order `_inferNextState` registers\n // actions: when `exist` is already Shift and `action` is Reduce, keep\n // `exist` (early-return); the reverse order (`exist` Reduce, `action`\n // Shift) falls through to `table.set` below and Shift overwrites\n // Reduce. Order-independent by construction.\n if (LALR1._isKnownShiftPreferred(terminal, exist, action)) {\n if (exist.action === EAction.Shift && action.action === EAction.Reduce) return;\n } else {\n // #if _VERBOSE\n console.warn(\n `conflict detect: <Terminal ${GrammarUtils.toString(terminal)}> \\n`,\n Utils.printAction(exist),\n \"\\n\",\n Utils.printAction(action)\n );\n // #endif\n }\n }\n table.set(terminal, action);\n }\n\n // Catalog of expected shift/reduce conflicts. Each entry must correspond to\n // one of TargetParser.y's `%expect`-ed conflicts; any new conflict not in\n // this list falls through to the verbose `conflict detect` warning so the\n // grammar/runtime drift is loud rather than silent.\n // - ELSE: dangling-else, bind to nearest `if`\n // - '(' + `type_specifier_nonarray → macro_call_symbol`: macro-as-type-alias\n // (#2974), prefer the expression-position `macro_call_function` over the\n // type-position reduce\n private static _isKnownShiftPreferred(terminal: Terminal, exist: ActionInfo, action: ActionInfo): boolean {\n if (terminal === Keyword.ELSE) return true;\n if (terminal !== ETokenType.LEFT_PAREN) return false;\n const reduce = exist.action === EAction.Reduce ? exist : action.action === EAction.Reduce ? action : null;\n if (!reduce) return false;\n const prod = Production.pool.get(reduce.target!);\n return (\n !!prod &&\n prod.goal === NoneTerminal.type_specifier_nonarray &&\n prod.derivation.length === 1 &&\n prod.derivation[0] === NoneTerminal.macro_call_symbol\n );\n }\n\n // https://people.cs.pitt.edu/~jmisurda/teaching/cs1622/handouts/cs1622-first_and_follow.pdf\n private computeFirstSet() {\n for (const production of this.grammar.productions.slice(1)) {\n this._computeFirstSetForNT(production.goal);\n }\n }\n\n private _computeFirstSetForNT(NT: NoneTerminal) {\n // circle detect\n const idx = this._firstSetNTStack.findIndex((item) => item === NT);\n if (idx !== -1) {\n const computingFS = this.firstSetMap.get(NT)!;\n const len = this._firstSetNTStack.length;\n for (let i = len - 1; i > idx; i--) {\n const curNT = this._firstSetNTStack[i];\n this.firstSetMap.set(curNT, computingFS);\n }\n return computingFS;\n }\n this._firstSetNTStack.push(NT);\n\n const productionList = this.grammar.getProductionList(NT);\n const firstSet = new Set<Terminal>();\n this.firstSetMap.set(NT, firstSet);\n if (this.grammar.isNullableNT(NT)) firstSet.add(ETokenType.EPSILON);\n\n for (const production of productionList) {\n let i = 0;\n for (; i < production.derivation.length; i++) {\n const gs = production.derivation[i];\n if (GrammarUtils.isTerminal(gs)) {\n firstSet.add(<Terminal>gs);\n break;\n }\n\n const succeedFirstSet = this._computeFirstSetForNT(<NoneTerminal>gs);\n\n for (const item of succeedFirstSet) {\n if (item !== ETokenType.EPSILON) firstSet.add(item);\n }\n if (!this.grammar.isNullableNT(<NoneTerminal>gs)) break;\n }\n if (i === production.derivation.length) firstSet.add(ETokenType.EPSILON);\n }\n\n this._firstSetNTStack.pop();\n return firstSet;\n }\n}\n","import { ETokenType } from \"../common\";\nimport { NoneTerminal, GrammarSymbol } from \"./GrammarSymbol\";\nimport Production from \"../lalr/Production\";\n\nexport class Grammar {\n readonly productions: Production[];\n\n readonly startSymbol: NoneTerminal;\n\n static create(start: NoneTerminal, productions: GrammarSymbol[][]) {\n const _ps = productions.map((gsl) => {\n return new Production(<NoneTerminal>gsl[0], gsl.slice(1));\n });\n return new Grammar(start, _ps);\n }\n\n constructor(start: NoneTerminal, productions: Production[]) {\n this.startSymbol = start;\n productions.unshift(new Production(NoneTerminal.START, [start]));\n this.productions = productions;\n }\n\n getProductionList(nonTerminal: NoneTerminal) {\n return this.productions.filter((item) => item.goal === nonTerminal);\n }\n\n isNullableNT(NT: NoneTerminal) {\n return this.productions.find((item) => item.goal === NT && item.derivation[0] === ETokenType.EPSILON);\n }\n\n getProductionByID(pid: number) {\n return Production.pool.get(pid);\n }\n}\n","// Context Free Grammar of Galacean Shader\nimport { ETokenType } from \"../common\";\nimport { Keyword } from \"../common/enums/Keyword\";\nimport { ASTNode } from \"../parser/AST\";\nimport { Grammar } from \"../parser/Grammar\";\nimport { GrammarSymbol, NoneTerminal } from \"../parser/GrammarSymbol\";\nimport SemanticAnalyzer, { TranslationRule } from \"../parser/SemanticAnalyzer\";\nimport GrammarUtils from \"./Utils\";\n\nconst productionAndRules: [GrammarSymbol[], TranslationRule | undefined][] = [\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.gs_shader_program,\n [[NoneTerminal.global_declaration], [NoneTerminal.gs_shader_program, NoneTerminal.global_declaration]],\n ASTNode.GLShaderProgram.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.global_declaration,\n [\n [NoneTerminal.precision_specifier],\n [NoneTerminal.variable_declaration_statement],\n [NoneTerminal.struct_specifier],\n [NoneTerminal.function_definition],\n [NoneTerminal.global_macro_if_statement],\n [NoneTerminal.macro_undef],\n [NoneTerminal.macro_define],\n [Keyword.MACRO_DEFINE_EXPRESSION]\n ],\n ASTNode.GlobalDeclaration.pool\n ),\n\n // Expression-style `#define` — lexer emits either:\n // `MACRO_DEFINE ID <value tokens> MACRO_DEFINE_END` (object macro)\n // `MACRO_DEFINE ID MACRO_DEFINE_PARAMS <value tokens> MACRO_DEFINE_END` (function macro)\n //\n // The `(param1, param2, …)` block is captured by the lexer as a single opaque\n // `MACRO_DEFINE_PARAMS` token. Capturing in the lexer (rather than recursively in\n // the CFG via a `macro_define_param_list` non-terminal) avoids an LALR(1) conflict\n // between `macro_define_param_list` and the visually similar\n // `function_call_parameter_list` when the parser is in a state that could follow\n // either `LEFT_PAREN ID , ID` pattern.\n //\n // Empty-value `#define X\\n` and function-like without body stay on the legacy\n // opaque `MACRO_DEFINE_EXPRESSION` path.\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_define,\n [\n [Keyword.MACRO_DEFINE, ETokenType.ID, NoneTerminal.expression, Keyword.MACRO_DEFINE_END],\n [\n Keyword.MACRO_DEFINE,\n ETokenType.ID,\n Keyword.MACRO_DEFINE_PARAMS,\n NoneTerminal.expression,\n Keyword.MACRO_DEFINE_END\n ]\n ],\n ASTNode.MacroDefine.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_call_symbol,\n [[Keyword.MACRO_CALL]],\n ASTNode.MacroCallSymbol.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_call_function,\n [\n [NoneTerminal.macro_call_symbol, ETokenType.LEFT_PAREN, ETokenType.RIGHT_PAREN],\n [\n NoneTerminal.macro_call_symbol,\n ETokenType.LEFT_PAREN,\n NoneTerminal.function_call_parameter_list,\n ETokenType.RIGHT_PAREN\n ]\n ],\n ASTNode.MacroCallFunction.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_undef,\n [\n [Keyword.MACRO_UNDEF, ETokenType.ID],\n [Keyword.MACRO_UNDEF, Keyword.MACRO_CALL]\n ],\n ASTNode.MacroUndef.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_push_context,\n [\n [Keyword.MACRO_IF, Keyword.MACRO_CONDITIONAL_EXPRESSION],\n [Keyword.MACRO_IFDEF, ETokenType.ID],\n [Keyword.MACRO_IFNDEF, ETokenType.ID],\n [Keyword.MACRO_IFDEF, NoneTerminal.macro_call_symbol],\n [Keyword.MACRO_IFNDEF, NoneTerminal.macro_call_symbol]\n ],\n ASTNode.MacroPushContext.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_pop_context,\n [[Keyword.MACRO_ENDIF]],\n ASTNode.MacroPopContext.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_elif_expression,\n [[Keyword.MACRO_ELIF, Keyword.MACRO_CONDITIONAL_EXPRESSION]],\n ASTNode.MacroElifExpression.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_else_expression,\n [[Keyword.MACRO_ELSE]],\n ASTNode.MacroElseExpression.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.global_macro_declaration,\n [[NoneTerminal.global_declaration], [NoneTerminal.global_macro_declaration, NoneTerminal.global_declaration]],\n ASTNode.GlobalMacroDeclaration.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.global_macro_if_statement,\n [\n [NoneTerminal.macro_push_context, NoneTerminal.global_macro_declaration, NoneTerminal.global_macro_branch],\n [NoneTerminal.macro_push_context, NoneTerminal.global_macro_branch]\n ],\n ASTNode.GlobalMacroIfStatement.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.global_macro_branch,\n [\n [NoneTerminal.macro_pop_context],\n [NoneTerminal.macro_elif_expression, NoneTerminal.global_macro_declaration, NoneTerminal.global_macro_branch],\n [NoneTerminal.macro_else_expression, NoneTerminal.global_macro_declaration, NoneTerminal.macro_pop_context],\n [NoneTerminal.macro_elif_expression, NoneTerminal.global_macro_branch],\n [NoneTerminal.macro_else_expression, NoneTerminal.macro_pop_context]\n ],\n ASTNode.GlobalMacroBranch.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.variable_declaration,\n [\n [NoneTerminal.fully_specified_type, ETokenType.ID],\n [NoneTerminal.fully_specified_type, ETokenType.ID, NoneTerminal.array_specifier],\n [NoneTerminal.fully_specified_type, ETokenType.ID, ETokenType.EQUAL, NoneTerminal.initializer]\n ],\n ASTNode.VariableDeclaration.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.variable_declaration_list,\n [\n [NoneTerminal.variable_declaration],\n [NoneTerminal.variable_declaration_list, ETokenType.COMMA, ETokenType.ID],\n [NoneTerminal.variable_declaration_list, ETokenType.COMMA, ETokenType.ID, NoneTerminal.array_specifier]\n ],\n ASTNode.VariableDeclarationList.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(NoneTerminal.variable_declaration_statement, [\n [NoneTerminal.variable_declaration_list, ETokenType.SEMICOLON]\n ]),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.ext_builtin_type_specifier_nonarray,\n [\n [Keyword.VOID],\n [Keyword.FLOAT],\n [Keyword.BOOL],\n [Keyword.INT],\n [Keyword.UINT],\n [Keyword.VEC2],\n [Keyword.VEC3],\n [Keyword.VEC4],\n [Keyword.BVEC2],\n [Keyword.BVEC3],\n [Keyword.BVEC4],\n [Keyword.IVEC2],\n [Keyword.IVEC3],\n [Keyword.IVEC4],\n [Keyword.UVEC2],\n [Keyword.UVEC3],\n [Keyword.UVEC4],\n [Keyword.MAT2],\n [Keyword.MAT3],\n [Keyword.MAT4],\n [Keyword.MAT2X3],\n [Keyword.MAT2X4],\n [Keyword.MAT3X2],\n [Keyword.MAT3X4],\n [Keyword.MAT4X2],\n [Keyword.MAT4X3],\n [Keyword.SAMPLER2D],\n [Keyword.SAMPLER3D],\n [Keyword.SAMPLER_CUBE],\n [Keyword.SAMPLER2D_SHADOW],\n [Keyword.SAMPLER_CUBE_SHADOW],\n [Keyword.SAMPLER2D_ARRAY],\n [Keyword.SAMPLER2D_ARRAY_SHADOW],\n [Keyword.I_SAMPLER2D],\n [Keyword.I_SAMPLER3D],\n [Keyword.I_SAMPLER_CUBE],\n [Keyword.I_SAMPLER2D_ARRAY],\n [Keyword.U_SAMPLER2D],\n [Keyword.U_SAMPLER3D],\n [Keyword.U_SAMPLER_CUBE],\n [Keyword.U_SAMPLER2D_ARRAY]\n ],\n ASTNode.ExtBuiltinTypeSpecifierNonArray.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.type_specifier_nonarray,\n [\n // User-defined struct identifier\n [ETokenType.ID],\n // Built-in type keyword (float / vec3 / sampler2D / ...)\n [NoneTerminal.ext_builtin_type_specifier_nonarray],\n // Macro-as-type-alias (e.g. `#define FxaaFloat float; FxaaFloat x;`).\n // Routing through `macro_call_symbol` keeps the macro a first-class AST\n // node and lets the LALR table disambiguate from expression-position\n // macro calls.\n [NoneTerminal.macro_call_symbol]\n ],\n ASTNode.TypeSpecifierNonArray.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.fully_specified_type,\n [[NoneTerminal.type_specifier], [NoneTerminal.type_qualifier, NoneTerminal.type_specifier]],\n ASTNode.FullySpecifiedType.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.type_specifier,\n [\n [NoneTerminal.type_specifier_nonarray],\n [NoneTerminal.ext_builtin_type_specifier_nonarray, NoneTerminal.array_specifier]\n ],\n ASTNode.TypeSpecifier.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.type_qualifier,\n [[NoneTerminal.single_type_qualifier], [NoneTerminal.type_qualifier, NoneTerminal.single_type_qualifier]],\n ASTNode.TypeQualifier.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.single_type_qualifier,\n [\n [NoneTerminal.storage_qualifier],\n [NoneTerminal.precision_qualifier],\n [NoneTerminal.interpolation_qualifier],\n [NoneTerminal.invariant_qualifier],\n [Keyword.PRECISE]\n ],\n ASTNode.SingleTypeQualifier.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.storage_qualifier,\n [[Keyword.CONST], [Keyword.IN], [Keyword.INOUT], [Keyword.OUT], [Keyword.CENTROID]],\n // #if _VERBOSE\n ASTNode.StorageQualifier.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.interpolation_qualifier,\n [[Keyword.SMOOTH], [Keyword.FLAT]],\n // #if _VERBOSE\n ASTNode.InterpolationQualifier.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.invariant_qualifier,\n [[Keyword.INVARIANT]],\n // #if _VERBOSE\n ASTNode.InvariantQualifier.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.precision_qualifier,\n [[Keyword.HIGHP], [Keyword.MEDIUMP], [Keyword.LOWP]],\n // #if _VERBOSE\n ASTNode.PrecisionQualifier.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.struct_specifier,\n [\n [\n Keyword.STRUCT,\n ETokenType.ID,\n ETokenType.LEFT_BRACE,\n NoneTerminal.struct_declaration_list,\n ETokenType.RIGHT_BRACE,\n ETokenType.SEMICOLON\n ],\n [\n Keyword.STRUCT,\n ETokenType.LEFT_BRACE,\n NoneTerminal.struct_declaration_list,\n ETokenType.RIGHT_BRACE,\n ETokenType.SEMICOLON\n ]\n ],\n ASTNode.StructSpecifier.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.struct_declaration_list,\n [[NoneTerminal.struct_declaration], [NoneTerminal.struct_declaration_list, NoneTerminal.struct_declaration]],\n ASTNode.StructDeclarationList.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.struct_declaration,\n [\n [NoneTerminal.type_specifier, NoneTerminal.struct_declarator_list, ETokenType.SEMICOLON],\n [\n NoneTerminal.type_qualifier,\n NoneTerminal.type_specifier,\n NoneTerminal.struct_declarator_list,\n ETokenType.SEMICOLON\n ],\n [\n NoneTerminal.layout_qualifier,\n NoneTerminal.type_specifier,\n NoneTerminal.struct_declarator,\n ETokenType.SEMICOLON\n ],\n [NoneTerminal.macro_struct_declaration]\n ],\n ASTNode.StructDeclaration.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_struct_declaration,\n [\n [NoneTerminal.macro_push_context, NoneTerminal.struct_declaration_list, NoneTerminal.macro_struct_branch],\n [NoneTerminal.macro_push_context, NoneTerminal.macro_struct_branch]\n ],\n ASTNode.MacroStructDeclaration.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_struct_branch,\n [\n [NoneTerminal.macro_pop_context],\n [NoneTerminal.macro_elif_expression, NoneTerminal.struct_declaration_list, NoneTerminal.macro_struct_branch],\n [NoneTerminal.macro_else_expression, NoneTerminal.struct_declaration_list, NoneTerminal.macro_pop_context],\n [NoneTerminal.macro_elif_expression, NoneTerminal.macro_struct_branch],\n [NoneTerminal.macro_else_expression, NoneTerminal.macro_pop_context]\n ],\n ASTNode.MacroStructBranch.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.layout_qualifier,\n [\n [\n Keyword.LAYOUT,\n ETokenType.LEFT_PAREN,\n Keyword.LOCATION,\n ETokenType.EQUAL,\n ETokenType.INT_CONSTANT,\n ETokenType.RIGHT_PAREN\n ]\n ],\n ASTNode.LayoutQualifier.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.struct_declarator_list,\n [\n [NoneTerminal.struct_declarator],\n [NoneTerminal.struct_declarator_list, ETokenType.COMMA, NoneTerminal.struct_declarator]\n ],\n ASTNode.StructDeclaratorList.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.struct_declarator,\n [[ETokenType.ID], [ETokenType.ID, NoneTerminal.array_specifier]],\n ASTNode.StructDeclarator.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.array_specifier,\n [\n [ETokenType.LEFT_BRACKET, ETokenType.RIGHT_BRACKET],\n [ETokenType.LEFT_BRACKET, NoneTerminal.integer_constant_expression, ETokenType.RIGHT_BRACKET]\n ],\n ASTNode.ArraySpecifier.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.integer_constant_expression_operator,\n [[ETokenType.PLUS], [ETokenType.DASH], [ETokenType.STAR], [ETokenType.SLASH], [ETokenType.PERCENT]],\n ASTNode.IntegerConstantExpressionOperator.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.integer_constant_expression,\n [\n [NoneTerminal.variable_identifier],\n [ETokenType.INT_CONSTANT],\n [\n NoneTerminal.integer_constant_expression,\n NoneTerminal.integer_constant_expression_operator,\n ETokenType.INT_CONSTANT\n ],\n [\n NoneTerminal.integer_constant_expression,\n NoneTerminal.integer_constant_expression_operator,\n NoneTerminal.variable_identifier\n ]\n ],\n ASTNode.IntegerConstantExpression.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.conditional_expression,\n [\n [NoneTerminal.logical_or_expression],\n [\n NoneTerminal.logical_or_expression,\n ETokenType.QUESTION,\n NoneTerminal.expression,\n ETokenType.COLON,\n NoneTerminal.assignment_expression\n ]\n ],\n // #if _VERBOSE\n ASTNode.ConditionalExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.logical_or_expression,\n [\n [NoneTerminal.logical_xor_expression],\n [NoneTerminal.logical_or_expression, ETokenType.OR_OP, NoneTerminal.logical_xor_expression]\n ],\n // #if _VERBOSE\n ASTNode.LogicalOrExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.logical_xor_expression,\n [\n [NoneTerminal.logical_and_expression],\n [NoneTerminal.logical_xor_expression, ETokenType.XOR_OP, NoneTerminal.logical_and_expression]\n ],\n // #if _VERBOSE\n ASTNode.LogicalXorExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.logical_and_expression,\n [\n [NoneTerminal.inclusive_or_expression],\n [NoneTerminal.logical_and_expression, ETokenType.AND_OP, NoneTerminal.inclusive_or_expression]\n ],\n // #if _VERBOSE\n ASTNode.LogicalAndExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.inclusive_or_expression,\n [\n [NoneTerminal.exclusive_or_expression],\n [NoneTerminal.inclusive_or_expression, ETokenType.VERTICAL_BAR, NoneTerminal.exclusive_or_expression]\n ],\n // #if _VERBOSE\n ASTNode.InclusiveOrExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.exclusive_or_expression,\n [\n [NoneTerminal.and_expression],\n [NoneTerminal.exclusive_or_expression, ETokenType.CARET, NoneTerminal.and_expression]\n ],\n // #if _VERBOSE\n ASTNode.ExclusiveOrExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.and_expression,\n [\n [NoneTerminal.equality_expression],\n [NoneTerminal.and_expression, ETokenType.AMPERSAND, NoneTerminal.equality_expression]\n ],\n // #if _VERBOSE\n ASTNode.AndExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.equality_expression,\n [\n [NoneTerminal.relational_expression],\n [NoneTerminal.equality_expression, ETokenType.EQ_OP, NoneTerminal.relational_expression],\n [NoneTerminal.equality_expression, ETokenType.NE_OP, NoneTerminal.relational_expression]\n ],\n // #if _VERBOSE\n ASTNode.EqualityExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.relational_expression,\n [\n [NoneTerminal.shift_expression],\n [NoneTerminal.relational_expression, ETokenType.LEFT_ANGLE, NoneTerminal.shift_expression],\n [NoneTerminal.relational_expression, ETokenType.RIGHT_ANGLE, NoneTerminal.shift_expression],\n [NoneTerminal.relational_expression, ETokenType.LE_OP, NoneTerminal.shift_expression],\n [NoneTerminal.relational_expression, ETokenType.GE_OP, NoneTerminal.shift_expression]\n ],\n // #if _VERBOSE\n ASTNode.RelationalExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.shift_expression,\n [\n [NoneTerminal.additive_expression],\n [NoneTerminal.shift_expression, ETokenType.LEFT_OP, NoneTerminal.additive_expression],\n [NoneTerminal.shift_expression, ETokenType.RIGHT_OP, NoneTerminal.additive_expression]\n ],\n // #if _VERBOSE\n ASTNode.ShiftExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.additive_expression,\n [\n [NoneTerminal.multiplicative_expression],\n [NoneTerminal.additive_expression, ETokenType.PLUS, NoneTerminal.multiplicative_expression],\n [NoneTerminal.additive_expression, ETokenType.DASH, NoneTerminal.multiplicative_expression]\n ],\n // #if _VERBOSE\n ASTNode.AdditiveExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.multiplicative_expression,\n [\n [NoneTerminal.unary_expression],\n [NoneTerminal.multiplicative_expression, ETokenType.STAR, NoneTerminal.unary_expression],\n [NoneTerminal.multiplicative_expression, ETokenType.SLASH, NoneTerminal.unary_expression],\n [NoneTerminal.multiplicative_expression, ETokenType.PERCENT, NoneTerminal.unary_expression]\n ],\n // #if _VERBOSE\n ASTNode.MultiplicativeExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.unary_expression,\n [\n [NoneTerminal.postfix_expression],\n [ETokenType.INC_OP, NoneTerminal.unary_expression],\n [ETokenType.DEC_OP, NoneTerminal.unary_expression],\n [NoneTerminal.unary_operator, NoneTerminal.unary_expression]\n ],\n // #if _VERBOSE\n ASTNode.UnaryExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.unary_operator,\n [[ETokenType.PLUS], [ETokenType.DASH], [ETokenType.BANG], [ETokenType.TILDE]],\n // #if _VERBOSE\n ASTNode.UnaryOperator.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.postfix_expression,\n [\n [NoneTerminal.primary_expression],\n [NoneTerminal.postfix_expression, ETokenType.LEFT_BRACKET, NoneTerminal.expression, ETokenType.RIGHT_BRACKET],\n [NoneTerminal.function_call],\n [NoneTerminal.postfix_expression, ETokenType.DOT, ETokenType.ID],\n [NoneTerminal.postfix_expression, ETokenType.DOT, NoneTerminal.function_call],\n [NoneTerminal.postfix_expression, ETokenType.INC_OP],\n [NoneTerminal.postfix_expression, ETokenType.DEC_OP]\n ],\n ASTNode.PostfixExpression.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.primary_expression,\n [\n [NoneTerminal.variable_identifier],\n [ETokenType.INT_CONSTANT],\n [ETokenType.FLOAT_CONSTANT],\n [Keyword.True],\n [Keyword.False],\n [ETokenType.LEFT_PAREN, NoneTerminal.expression, ETokenType.RIGHT_PAREN]\n ],\n ASTNode.PrimaryExpression.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.expression,\n [\n [NoneTerminal.assignment_expression],\n [NoneTerminal.expression, ETokenType.COMMA, NoneTerminal.assignment_expression]\n ],\n ASTNode.Expression.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.assignment_expression,\n [\n [NoneTerminal.conditional_expression],\n [NoneTerminal.unary_expression, NoneTerminal.assignment_operator, NoneTerminal.assignment_expression]\n ],\n ASTNode.AssignmentExpression.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.assignment_operator,\n [\n [ETokenType.EQUAL],\n [ETokenType.MUL_ASSIGN],\n [ETokenType.DIV_ASSIGN],\n [ETokenType.MOD_ASSIGN],\n [ETokenType.ADD_ASSIGN],\n [ETokenType.SUB_ASSIGN],\n [ETokenType.LEFT_ASSIGN],\n [ETokenType.RIGHT_ASSIGN],\n [ETokenType.AND_ASSIGN],\n [ETokenType.XOR_ASSIGN],\n [ETokenType.OR_ASSIGN]\n ],\n // #if _VERBOSE\n ASTNode.AssignmentOperator.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.function_call,\n [[NoneTerminal.function_call_generic]],\n ASTNode.FunctionCall.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.function_call_generic,\n [\n [\n NoneTerminal.function_identifier,\n ETokenType.LEFT_PAREN,\n NoneTerminal.function_call_parameter_list,\n ETokenType.RIGHT_PAREN\n ],\n [NoneTerminal.function_identifier, ETokenType.LEFT_PAREN, ETokenType.RIGHT_PAREN],\n [NoneTerminal.function_identifier, Keyword.VOID, ETokenType.RIGHT_PAREN]\n ],\n ASTNode.FunctionCallGeneric.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.function_call_parameter_list,\n [\n [NoneTerminal.assignment_expression],\n [NoneTerminal.function_call_parameter_list, ETokenType.COMMA, NoneTerminal.assignment_expression],\n [NoneTerminal.macro_call_arg_block],\n [NoneTerminal.function_call_parameter_list, NoneTerminal.macro_call_arg_block]\n ],\n ASTNode.FunctionCallParameterList.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_call_arg_case_list,\n [\n [NoneTerminal.assignment_expression],\n [ETokenType.COMMA, NoneTerminal.assignment_expression],\n [NoneTerminal.macro_call_arg_block],\n [NoneTerminal.macro_call_arg_case_list, NoneTerminal.macro_call_arg_block],\n [NoneTerminal.macro_call_arg_case_list, ETokenType.COMMA, NoneTerminal.assignment_expression]\n ],\n ASTNode.MacroCallArgCaseList.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_call_arg_block,\n [\n [NoneTerminal.macro_push_context, NoneTerminal.macro_call_arg_branch],\n [NoneTerminal.macro_push_context, NoneTerminal.macro_call_arg_case_list, NoneTerminal.macro_call_arg_branch]\n ],\n ASTNode.MacroCallArgBlock.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_call_arg_branch,\n [\n [NoneTerminal.macro_pop_context],\n [NoneTerminal.macro_elif_expression, NoneTerminal.macro_call_arg_case_list, NoneTerminal.macro_call_arg_branch],\n [NoneTerminal.macro_else_expression, NoneTerminal.macro_call_arg_case_list, NoneTerminal.macro_pop_context],\n [NoneTerminal.macro_elif_expression, NoneTerminal.macro_call_arg_branch],\n [NoneTerminal.macro_else_expression, NoneTerminal.macro_pop_context]\n ],\n ASTNode.MacroCallArgBranch.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.function_identifier,\n [[NoneTerminal.type_specifier]],\n ASTNode.FunctionIdentifier.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.function_definition,\n [[NoneTerminal.function_prototype, NoneTerminal.compound_statement_no_scope]],\n ASTNode.FunctionDefinition.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.function_prototype,\n [[NoneTerminal.function_declarator, ETokenType.RIGHT_PAREN]],\n ASTNode.FunctionProtoType.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.function_declarator,\n [[NoneTerminal.function_header], [NoneTerminal.function_header, NoneTerminal.function_parameter_list]],\n ASTNode.FunctionDeclarator.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.function_header,\n [[NoneTerminal.fully_specified_type, ETokenType.ID, ETokenType.LEFT_PAREN]],\n ASTNode.FunctionHeader.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.function_parameter_list,\n [\n [NoneTerminal.parameter_declaration],\n [NoneTerminal.function_parameter_list, ETokenType.COMMA, NoneTerminal.parameter_declaration],\n [NoneTerminal.macro_param_block],\n [NoneTerminal.function_parameter_list, NoneTerminal.macro_param_block]\n ],\n ASTNode.FunctionParameterList.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_param_case_list,\n [\n [NoneTerminal.parameter_declaration],\n [ETokenType.COMMA, NoneTerminal.parameter_declaration],\n [NoneTerminal.macro_param_block],\n [NoneTerminal.macro_param_case_list, NoneTerminal.macro_param_block],\n [NoneTerminal.macro_param_case_list, ETokenType.COMMA, NoneTerminal.parameter_declaration]\n ],\n ASTNode.MacroParamCaseList.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_param_block,\n [\n [NoneTerminal.macro_push_context, NoneTerminal.macro_parameter_branch],\n [NoneTerminal.macro_push_context, NoneTerminal.macro_param_case_list, NoneTerminal.macro_parameter_branch]\n ],\n ASTNode.MacroParamBlock.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_parameter_branch,\n [\n [NoneTerminal.macro_pop_context],\n [NoneTerminal.macro_elif_expression, NoneTerminal.macro_param_case_list, NoneTerminal.macro_parameter_branch],\n [NoneTerminal.macro_else_expression, NoneTerminal.macro_param_case_list, NoneTerminal.macro_pop_context],\n [NoneTerminal.macro_elif_expression, NoneTerminal.macro_parameter_branch],\n [NoneTerminal.macro_else_expression, NoneTerminal.macro_pop_context]\n ],\n ASTNode.MacroParameterBranch.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.parameter_declaration,\n [\n [NoneTerminal.type_qualifier, NoneTerminal.parameter_declarator],\n [NoneTerminal.parameter_declarator],\n [NoneTerminal.macro_call_symbol],\n [NoneTerminal.macro_call_function]\n ],\n ASTNode.ParameterDeclaration.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.parameter_declarator,\n [\n [NoneTerminal.type_specifier, ETokenType.ID],\n [NoneTerminal.type_specifier, ETokenType.ID, NoneTerminal.array_specifier]\n ],\n ASTNode.ParameterDeclarator.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.statement_list,\n [[NoneTerminal.statement], [NoneTerminal.statement_list, NoneTerminal.statement]],\n ASTNode.StatementList.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.statement,\n [[NoneTerminal.compound_statement], [NoneTerminal.simple_statement]],\n // #if _VERBOSE\n ASTNode.Statement.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.compound_statement_no_scope,\n [\n [ETokenType.LEFT_BRACE, ETokenType.RIGHT_BRACE],\n [ETokenType.LEFT_BRACE, NoneTerminal.statement_list, ETokenType.RIGHT_BRACE]\n ],\n ASTNode.CompoundStatementNoScope.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.compound_statement,\n [\n [ETokenType.LEFT_BRACE, ETokenType.RIGHT_BRACE],\n [NoneTerminal.scope_brace, NoneTerminal.statement_list, NoneTerminal.scope_end_brace]\n ],\n // #if _VERBOSE\n ASTNode.CompoundStatement.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.simple_statement,\n [\n [NoneTerminal.declaration],\n [NoneTerminal.expression_statement],\n [NoneTerminal.selection_statement],\n [NoneTerminal.iteration_statement],\n [NoneTerminal.jump_statement],\n [NoneTerminal.macro_if_statement],\n [NoneTerminal.macro_undef],\n [NoneTerminal.macro_define],\n [Keyword.MACRO_DEFINE_EXPRESSION]\n ],\n // #if _VERBOSE\n ASTNode.SimpleStatement.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.declaration,\n [\n [NoneTerminal.function_prototype, ETokenType.SEMICOLON],\n [NoneTerminal.init_declarator_list, ETokenType.SEMICOLON],\n [\n Keyword.PRECISION,\n NoneTerminal.precision_qualifier,\n NoneTerminal.ext_builtin_type_specifier_nonarray,\n ETokenType.SEMICOLON\n ],\n [NoneTerminal.type_qualifier, ETokenType.ID, ETokenType.SEMICOLON],\n [NoneTerminal.type_qualifier, ETokenType.ID, NoneTerminal.identifier_list, ETokenType.SEMICOLON]\n ],\n ASTNode.Declaration.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.identifier_list,\n [\n [ETokenType.COMMA, ETokenType.ID],\n [NoneTerminal.identifier_list, ETokenType.COMMA, ETokenType.ID]\n ],\n ASTNode.IdentifierList.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.init_declarator_list,\n [\n [NoneTerminal.single_declaration],\n [NoneTerminal.init_declarator_list, ETokenType.COMMA, ETokenType.ID],\n [NoneTerminal.init_declarator_list, ETokenType.COMMA, ETokenType.ID, NoneTerminal.array_specifier],\n [\n NoneTerminal.init_declarator_list,\n ETokenType.COMMA,\n ETokenType.ID,\n NoneTerminal.array_specifier,\n ETokenType.EQUAL,\n NoneTerminal.initializer\n ],\n [NoneTerminal.init_declarator_list, ETokenType.COMMA, ETokenType.ID, ETokenType.EQUAL, NoneTerminal.initializer]\n ],\n ASTNode.InitDeclaratorList.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.single_declaration,\n [\n [NoneTerminal.fully_specified_type, ETokenType.ID],\n [NoneTerminal.fully_specified_type, ETokenType.ID, NoneTerminal.array_specifier],\n [\n NoneTerminal.fully_specified_type,\n ETokenType.ID,\n NoneTerminal.array_specifier,\n ETokenType.EQUAL,\n NoneTerminal.initializer\n ],\n [NoneTerminal.fully_specified_type, ETokenType.ID, ETokenType.EQUAL, NoneTerminal.initializer],\n // Declarator name collides with a `#define` from a sibling `#if expr` arm\n // whose value the lexer can't evaluate. Branch-mutex covers `#if`/`#else`\n // pairs; this variant is the fallback for cross-`#if` collisions (e.g.\n // FXAA's `#define lumaNW …` shadowing `FxaaFloat lumaNW = …`).\n [NoneTerminal.fully_specified_type, Keyword.MACRO_CALL],\n [NoneTerminal.fully_specified_type, Keyword.MACRO_CALL, ETokenType.EQUAL, NoneTerminal.initializer]\n ],\n ASTNode.SingleDeclaration.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.initializer,\n [\n [NoneTerminal.assignment_expression],\n [ETokenType.LEFT_BRACE, NoneTerminal.initializer_list, ETokenType.RIGHT_BRACE]\n ],\n // #if _VERBOSE\n ASTNode.Initializer.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.initializer_list,\n [[NoneTerminal.initializer], [NoneTerminal.initializer_list, ETokenType.COMMA, NoneTerminal.initializer]],\n // #if _VERBOSE\n ASTNode.InitializerList.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.expression_statement,\n [[ETokenType.SEMICOLON], [NoneTerminal.expression, ETokenType.SEMICOLON]],\n // #if _VERBOSE\n ASTNode.ExpressionStatement.pool\n // #endif\n ),\n\n // dangling else ambiguity\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.selection_statement,\n [\n [Keyword.IF, ETokenType.LEFT_PAREN, NoneTerminal.expression, ETokenType.RIGHT_PAREN, NoneTerminal.statement],\n [\n Keyword.IF,\n ETokenType.LEFT_PAREN,\n NoneTerminal.expression,\n ETokenType.RIGHT_PAREN,\n NoneTerminal.statement,\n Keyword.ELSE,\n NoneTerminal.statement\n ]\n ],\n // #if _VERBOSE\n ASTNode.SelectionStatement.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.iteration_statement,\n [\n [Keyword.WHILE, ETokenType.LEFT_PAREN, NoneTerminal.condition, ETokenType.RIGHT_PAREN, NoneTerminal.statement],\n [\n Keyword.FOR,\n ETokenType.LEFT_PAREN,\n NoneTerminal.for_init_statement,\n NoneTerminal.for_rest_statement,\n ETokenType.RIGHT_PAREN,\n NoneTerminal.statement\n ]\n ],\n // #if _VERBOSE\n ASTNode.IterationStatement.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.precision_specifier,\n [\n [\n Keyword.PRECISION,\n NoneTerminal.precision_qualifier,\n NoneTerminal.ext_builtin_type_specifier_nonarray,\n ETokenType.SEMICOLON\n ]\n ],\n ASTNode.PrecisionSpecifier.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.for_init_statement,\n [[NoneTerminal.expression_statement], [NoneTerminal.declaration]],\n // #if _VERBOSE\n ASTNode.ForInitStatement.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.condition,\n [\n [NoneTerminal.expression],\n [NoneTerminal.fully_specified_type, ETokenType.ID, ETokenType.EQUAL, NoneTerminal.initializer]\n ],\n // #if _VERBOSE\n ASTNode.Condition.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.for_rest_statement,\n [\n [NoneTerminal.conditionopt, ETokenType.SEMICOLON],\n [NoneTerminal.conditionopt, ETokenType.SEMICOLON, NoneTerminal.expression]\n ],\n // #if _VERBOSE\n ASTNode.ForRestStatement.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.conditionopt,\n [[ETokenType.EPSILON], [NoneTerminal.condition]],\n // #if _VERBOSE\n ASTNode.ConditionOpt.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.jump_statement,\n [\n [Keyword.CONTINUE, ETokenType.SEMICOLON],\n [Keyword.BREAK, ETokenType.SEMICOLON],\n [Keyword.RETURN, ETokenType.SEMICOLON],\n [Keyword.RETURN, NoneTerminal.expression, ETokenType.SEMICOLON],\n [Keyword.DISCARD, ETokenType.SEMICOLON]\n ],\n ASTNode.JumpStatement.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.scope_brace,\n [[ETokenType.LEFT_BRACE]],\n ASTNode.ScopeBrace.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.scope_end_brace,\n [[ETokenType.RIGHT_BRACE]],\n ASTNode.ScopeEndBrace.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.variable_identifier,\n [[ETokenType.ID], [NoneTerminal.macro_call_symbol], [NoneTerminal.macro_call_function]],\n ASTNode.VariableIdentifier.pool\n ),\n\n // Macros ...\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_if_statement,\n [\n [NoneTerminal.macro_push_context, NoneTerminal.statement_list, NoneTerminal.macro_branch],\n [NoneTerminal.macro_push_context, NoneTerminal.macro_branch]\n ],\n ASTNode.MacroIfStatement.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_branch,\n [\n [NoneTerminal.macro_pop_context],\n [NoneTerminal.macro_elif_expression, NoneTerminal.statement_list, NoneTerminal.macro_branch],\n [NoneTerminal.macro_else_expression, NoneTerminal.statement_list, NoneTerminal.macro_pop_context],\n [NoneTerminal.macro_elif_expression, NoneTerminal.macro_branch],\n [NoneTerminal.macro_else_expression, NoneTerminal.macro_pop_context]\n ],\n ASTNode.MacroBranch.pool\n )\n];\n\nconst createGrammar = () =>\n Grammar.create(\n NoneTerminal.gs_shader_program,\n productionAndRules.map((item) => item[0])\n );\n\nconst addTranslationRule = (sa: SemanticAnalyzer) => {\n for (let i = 0; i < productionAndRules.length; i++) {\n const rule = productionAndRules[i][1];\n if (rule) {\n sa.addTranslationRule(i, rule);\n }\n }\n};\n\nexport { addTranslationRule, createGrammar };\n","import { ETokenType } from \"../common\";\nimport { BaseToken } from \"../common/BaseToken\";\nimport { Keyword } from \"../common/enums/Keyword\";\nimport { GSError, GSErrorName } from \"../GSError\";\nimport { LALR1 } from \"../lalr\";\nimport { addTranslationRule, createGrammar } from \"../lalr/CFG\";\nimport { EAction, StateActionTable, StateGotoTable } from \"../lalr/types\";\nimport { MacroDefineList } from \"../Preprocessor\";\nimport { ParserUtils } from \"../ParserUtils\";\nimport { ShaderCompiler } from \"../ShaderCompiler\";\nimport { ShaderCompilerUtils } from \"../ShaderCompilerUtils\";\nimport { ASTNode, TreeNode } from \"./AST\";\nimport { Grammar } from \"./Grammar\";\nimport { GrammarSymbol, NoneTerminal } from \"./GrammarSymbol\";\nimport SematicAnalyzer from \"./SemanticAnalyzer\";\nimport { ESymbolType, SymbolInfo } from \"./symbolTable\";\nimport { TraceStackItem } from \"./types\";\n\n/**\n * The syntax parser and sematic analyzer of `ShaderCompiler` compiler\n */\nexport class ShaderTargetParser {\n readonly actionTable: StateActionTable;\n readonly gotoTable: StateGotoTable;\n readonly grammar: Grammar;\n readonly sematicAnalyzer: SematicAnalyzer;\n private _traceBackStack: (TraceStackItem | number)[] = [];\n\n private get curState() {\n return this._traceBackStack[this._traceBackStack.length - 1] as number;\n }\n private get stateActionTable() {\n return this.actionTable.get(this.curState)!;\n }\n private get stateGotoTable() {\n return this.gotoTable.get(this.curState);\n }\n\n // #if _VERBOSE\n /** @internal */\n get errors() {\n return this.sematicAnalyzer.errors;\n }\n // #endif\n\n static _singleton: ShaderTargetParser;\n\n static create() {\n if (!this._singleton) {\n const grammar = createGrammar();\n const generator = new LALR1(grammar);\n generator.generate();\n this._singleton = new ShaderTargetParser(generator.actionTable, generator.gotoTable, grammar);\n addTranslationRule(this._singleton.sematicAnalyzer);\n }\n\n return this._singleton;\n }\n\n private constructor(actionTable: StateActionTable, gotoTable: StateGotoTable, grammar: Grammar) {\n this.actionTable = actionTable;\n this.gotoTable = gotoTable;\n this.grammar = grammar;\n this.sematicAnalyzer = new SematicAnalyzer();\n }\n\n parse(tokens: Generator<BaseToken, BaseToken>, macroDefineList: MacroDefineList): ASTNode.GLShaderProgram | null {\n this.sematicAnalyzer.reset(macroDefineList);\n const { _traceBackStack: traceBackStack, sematicAnalyzer } = this;\n traceBackStack.push(0);\n\n let nextToken = tokens.next();\n while (true) {\n const token = nextToken.value;\n\n const actionInfo = this.stateActionTable.get(token.type);\n if (actionInfo?.action === EAction.Shift) {\n traceBackStack.push(token, actionInfo.target!);\n // Function-like `#define` form params live in a scope wrapping the\n // value AST, mirroring how `function_header` opens a scope for GLSL\n // function parameters. Push on shift of `MACRO_DEFINE_PARAMS`; the\n // matching `popScope` runs when `MacroDefine.semanticAnalyze` reduces\n // the production (only the function-like alternative needs it, and\n // it knows that from its own children).\n if (token.type === Keyword.MACRO_DEFINE_PARAMS) {\n sematicAnalyzer.pushScope();\n for (const p of ParserUtils.parseMacroParamList(token.lexeme)) {\n sematicAnalyzer.symbolTableStack.insert(new SymbolInfo(p, ESymbolType.VAR));\n }\n }\n nextToken = tokens.next();\n } else if (actionInfo?.action === EAction.Accept) {\n sematicAnalyzer.acceptRule?.(sematicAnalyzer);\n return sematicAnalyzer.semanticStack.pop() as ASTNode.GLShaderProgram;\n } else if (actionInfo?.action === EAction.Reduce) {\n const target = actionInfo.target!;\n const reduceProduction = this.grammar.getProductionByID(target)!;\n const translationRule = sematicAnalyzer.getTranslationRule(reduceProduction.id);\n\n const values: (TreeNode | BaseToken)[] = [];\n\n for (let i = reduceProduction.derivation.length - 1; i >= 0; i--) {\n if (reduceProduction.derivation[i] === ETokenType.EPSILON) continue;\n traceBackStack.pop();\n const token = traceBackStack.pop();\n if (token instanceof BaseToken) {\n values.unshift(token);\n } else {\n const astNode = sematicAnalyzer.semanticStack.pop()!;\n values.unshift(astNode);\n }\n }\n translationRule?.(sematicAnalyzer, ...values);\n\n const gotoTable = this.stateGotoTable;\n traceBackStack.push(reduceProduction.goal);\n\n const nextState = gotoTable?.get(reduceProduction.goal)!;\n traceBackStack.push(nextState);\n continue;\n } else {\n const error = ShaderCompilerUtils.createGSError(\n `Unexpected token ${token.lexeme}`,\n GSErrorName.CompilationError,\n ShaderCompiler._processingPassText,\n token.location\n );\n // #if _VERBOSE\n this.sematicAnalyzer.errors.push(<GSError>error);\n // #endif\n return null;\n }\n }\n }\n\n // #if _VERBOSE\n private _printStack(nextToken: BaseToken) {\n let str = \"\";\n for (let i = 0; i < this._traceBackStack.length - 1; i++) {\n const state = <NoneTerminal>this._traceBackStack[i++];\n const token = this._traceBackStack[i];\n str += `State${state} - ${(<BaseToken>token).lexeme ?? ParserUtils.toString(token as GrammarSymbol)}; `;\n }\n str += `State${this._traceBackStack[this._traceBackStack.length - 1]} --- ${nextToken.lexeme}`;\n console.info(str);\n }\n // #endif\n}\n","import type { ASTNode } from \"./parser/AST\";\nimport type { BranchSignature } from \"./common/BaseToken\";\n\n// Mirrors `ShaderPass._shaderRootPath`; inlined to keep shader-compiler standalone.\nconst SHADER_ROOT_PATH = \"shaders://root/\";\n\nexport type IncludeMap = { readonly [includeName: string]: string | undefined };\n\nexport type ChunkOutputCache = Map<string, string>;\n\nexport interface MacroDefineInfo {\n isFunction: boolean;\n params: string[];\n /** Value AST. Set when the replacement list parses as `expression` (which\n * includes comma-separated lists per C99 §6.10.3); absent for the GLSL ES\n * 3.00 §3.4 opaque cases the grammar can't reduce (empty, type-alias keyword,\n * trailing punctuation, unbalanced bracket, trailing operator). Identifier\n * references inside are collected by `MacroCallSymbol._collectIdentifierRefs`\n * walking this subtree. */\n valueAst?: ASTNode.Expression;\n /** Whitespace-normalized directive text. Dedup key against re-includes in\n * the same branch; differing values produce different keys. */\n dedupKey: string;\n /** `#ifdef` branch at registration time; call sites filter to visible entries. */\n branch: BranchSignature;\n}\n\nexport interface MacroDefineList {\n [macroName: string]: MacroDefineInfo[];\n}\n\nexport class Preprocessor {\n // Block-comment alternation prevents expanding `#include` inside doc comments.\n private static readonly _includeReg = /\\/\\*[\\s\\S]*?\\*\\/|^[ \\t]*#include +\"([\\w\\d./]+)\"/gm;\n\n static parse(\n source: string,\n basePathForIncludeKey: string,\n includeMap: IncludeMap,\n chunkOutputCache: ChunkOutputCache\n ): string {\n return source.replace(this._includeReg, (match, includeName) =>\n includeName ? this._replace(includeName, basePathForIncludeKey, includeMap, chunkOutputCache) : match\n );\n }\n\n private static _replace(\n includeName: string,\n basePathForIncludeKey: string,\n includeMap: IncludeMap,\n chunkOutputCache: ChunkOutputCache\n ): string {\n let path: string;\n if (includeName[0] === \".\") {\n path = new URL(includeName, basePathForIncludeKey).href.substring(SHADER_ROOT_PATH.length);\n } else {\n path = includeName;\n }\n\n const chunk = includeMap[path];\n if (!chunk) {\n console.error(`Shader slice \"${path}\" not founded.`);\n return \"\";\n }\n\n let cached = chunkOutputCache.get(path);\n if (cached === undefined) {\n cached = this.parse(chunk, basePathForIncludeKey, includeMap, chunkOutputCache);\n chunkOutputCache.set(path, cached);\n }\n return cached;\n }\n}\n","function _extends() {\n _extends = Object.assign || function assign(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\nexport { _extends as _ };\n","import type { IRenderStates, IShaderPassSource, IShaderSource, ISubShaderSource } from \"@galacean/engine-design\";\n\nexport class ShaderSourceFactory {\n static createRenderStates(): IRenderStates {\n return {\n constantMap: {},\n variableMap: {}\n };\n }\n\n static createShaderSource(name: string): IShaderSource {\n return {\n name,\n subShaders: [],\n pendingContents: [],\n renderStates: this.createRenderStates()\n };\n }\n\n static createSubShaderSource(name: string): ISubShaderSource {\n return {\n name,\n passes: [],\n pendingContents: [],\n tags: {},\n renderStates: this.createRenderStates()\n };\n }\n\n static createShaderPassSource(name: string): IShaderPassSource {\n return {\n name,\n pendingContents: [],\n tags: {},\n renderStates: this.createRenderStates()\n } as IShaderPassSource;\n }\n\n static createUsePass(name: string): IShaderPassSource {\n return {\n name,\n pendingContents: [],\n isUsePass: true,\n tags: {},\n renderStates: this.createRenderStates()\n } as IShaderPassSource;\n }\n}\n","import { IBaseSymbol } from \"../common/IBaseSymbol\";\n\nexport class ShaderSourceSymbol implements IBaseSymbol {\n public isInMacroBranch: boolean = false;\n\n constructor(\n public ident: string,\n public type: number,\n public value?: any\n ) {}\n\n set(ident: string, type: number, value?: any): void {\n this.ident = ident;\n this.type = type;\n this.value = value;\n }\n\n equal(other: ShaderSourceSymbol): boolean {\n return this.type === other.type;\n }\n}\n","import { Color } from \"@galacean/engine-math\";\nimport { ETokenType, ShaderPosition, ShaderRange } from \"../common\";\nimport { BaseLexer } from \"../common/BaseLexer\";\nimport { BaseToken } from \"../common/BaseToken\";\nimport { Keyword } from \"../common/enums/Keyword\";\nimport { GSErrorName } from \"../GSError\";\nimport { ShaderCompiler } from \"../ShaderCompiler\";\nimport { ShaderCompilerUtils } from \"../ShaderCompilerUtils\";\n\nexport default class SourceLexer extends BaseLexer {\n hasPendingContent = false;\n\n private static _keywordLexemeTable = <Record<string, Keyword>>{\n RenderQueueType: Keyword.GSRenderQueueType,\n BlendState: Keyword.GSBlendState,\n DepthState: Keyword.GSDepthState,\n StencilState: Keyword.GSStencilState,\n RasterState: Keyword.GSRasterState,\n EditorProperties: Keyword.GSEditorProperties,\n EditorMacros: Keyword.GSEditorMacros,\n Editor: Keyword.GSEditor,\n Tags: Keyword.GSTags,\n VertexShader: Keyword.GSVertexShader,\n FragmentShader: Keyword.GSFragmentShader,\n SubShader: Keyword.GSSubShader,\n Pass: Keyword.GSPass,\n BlendFactor: Keyword.GSBlendFactor,\n BlendOperation: Keyword.GSBlendOperation,\n Bool: Keyword.GSBool,\n Number: Keyword.GSNumber,\n Color: Keyword.GSColor,\n CompareFunction: Keyword.GSCompareFunction,\n StencilOperation: Keyword.GSStencilOperation,\n CullMode: Keyword.GSCullMode,\n ColorWriteMask: Keyword.GSColorWriteMask,\n UsePass: Keyword.GSUsePass,\n\n true: Keyword.True,\n false: Keyword.False\n };\n\n private static _symbolLexemeTable = <Record<string, Keyword>>{\n \"{\": Keyword.LeftBrace,\n \"}\": Keyword.RightBrace,\n \"=\": Keyword.Equal,\n \"|\": Keyword.BitwiseOr\n };\n\n private static _isWordSeparatorChar(charCode: number): boolean {\n return (\n charCode === 123 || // {\n charCode === 125 || // }\n charCode === 61 || // =\n charCode === 59 || // ;\n charCode === 46 || // . CullMode.Back\n charCode === 91 || // [ Enabled[0],\n charCode === 40 || // ( Color(1.0, 1.0, 1.0, 1.0);\n charCode === 124 // | ColorWriteMask.Red | ColorWriteMask.Green\n );\n }\n\n private static _scanDigits(source: string, startIndex: number): number {\n let currentIndex = startIndex;\n while (currentIndex < source.length) {\n const charCode = source.charCodeAt(currentIndex);\n if (BaseLexer.isDigit(charCode)) {\n currentIndex++;\n } else {\n break;\n }\n }\n return currentIndex;\n }\n\n scanNumber(): number {\n this.skipCommentsAndSpace();\n const start = this._currentIndex;\n const source = this._source;\n let index = this._currentIndex;\n\n // Scan integer part\n index = SourceLexer._scanDigits(source, index);\n\n // Scan decimal part if present\n if (source[index] === \".\") {\n index = SourceLexer._scanDigits(source, index + 1);\n }\n\n this.advance(index - this._currentIndex);\n return Number(source.substring(start, index));\n }\n\n scanColor(): Color {\n this.scanLexeme(\"(\");\n\n let r = 0;\n let g = 0;\n let b = 0;\n let a = 1;\n\n r = this.scanNumber();\n this.skipCommentsAndSpace();\n if (this.peek(1) !== \")\") {\n this.scanLexeme(\",\");\n g = this.scanNumber();\n this.skipCommentsAndSpace();\n if (this.peek(1) !== \")\") {\n this.scanLexeme(\",\");\n b = this.scanNumber();\n this.skipCommentsAndSpace();\n if (this.peek(1) !== \")\") {\n this.scanLexeme(\",\");\n a = this.scanNumber();\n this.skipCommentsAndSpace();\n }\n }\n }\n\n this.scanLexeme(\")\");\n return new Color(r, g, b, a);\n }\n\n override scanToken(): BaseToken {\n while (true) {\n this.skipCommentsAndSpace();\n\n if (this.isEnd()) {\n return;\n }\n\n const start = this.getShaderPosition(0);\n if (BaseLexer.isAlpha(this.getCurCharCode())) {\n const wordToken = this._scanWord(start);\n if (wordToken !== null) {\n return wordToken;\n }\n this.hasPendingContent = true;\n continue; // Continue loop to scan next token if word was invalid\n }\n\n const currentChar = this.getCurChar();\n const symbolKeyword = SourceLexer._symbolLexemeTable[currentChar];\n if (symbolKeyword !== undefined) {\n this.advance(1);\n const token = BaseToken.pool.get();\n token.set(symbolKeyword, currentChar, start);\n return token;\n }\n\n // Skip unrecognized character and continue\n this.advance(1);\n }\n }\n\n // #if _VERBOSE\n scanToCharacter(char: string): void {\n while (this.getCurChar() !== char && !this.isEnd()) {\n this.advance(1);\n }\n this.advance(1);\n }\n // #endif\n\n createCompileError(message: string, location?: ShaderPosition | ShaderRange) {\n return ShaderCompilerUtils.createGSError(\n message,\n GSErrorName.CompilationError,\n this.source,\n location ?? this.getShaderPosition(0)\n );\n }\n\n private _scanWord(start: ShaderPosition): BaseToken | null {\n // Scan the complete word first\n while (BaseLexer.isAlnum(this.getCurCharCode()) && !this.isEnd()) {\n this.advance(1);\n }\n const end = this.getShaderPosition(0);\n\n // Validate both boundaries in one optimized call\n if (!this._validateWordBoundaries(start.index, end.index)) {\n return null; // Invalid word due to boundary violation\n }\n\n const lexeme = this._source.substring(start.index, end.index);\n const tokenType = SourceLexer._keywordLexemeTable[lexeme] ?? ETokenType.ID;\n const range = ShaderCompiler.createRange(start, end);\n const token = BaseToken.pool.get();\n token.set(tokenType, lexeme, range);\n return token;\n }\n\n private _validateWordBoundaries(startIndex: number, endIndex: number): boolean {\n const source = this._source;\n\n // Check previous boundary\n if (startIndex > 0) {\n const prevCharCode = source.charCodeAt(startIndex - 1);\n if (!this._isValidWordBoundary(prevCharCode)) {\n return false;\n }\n }\n\n // Check next boundary\n if (endIndex < source.length) {\n const nextCharCode = source.charCodeAt(endIndex);\n if (!this._isValidWordBoundary(nextCharCode)) {\n return false;\n }\n }\n\n return true;\n }\n\n private _isValidWordBoundary(charCode: number): boolean {\n return BaseLexer.isWhiteSpaceChar(charCode, true) || SourceLexer._isWordSeparatorChar(charCode);\n }\n}\n","import { Color } from \"@galacean/engine-math\";\nimport {\n BlendFactor,\n BlendOperation,\n ColorWriteMask,\n CompareFunction,\n CullMode,\n RenderQueueType,\n RenderStateElementKey,\n StencilOperation\n} from \"@galacean/engine-core\";\nimport type {\n IRenderStates,\n IShaderPassSource,\n IShaderSource,\n IStatement,\n ISubShaderSource\n} from \"@galacean/engine-design\";\nimport { ETokenType, ShaderPosition, ShaderRange } from \"../common\";\nimport { BaseToken } from \"../common/BaseToken\";\nimport { SymbolTableStack } from \"../common/SymbolTableStack\";\nimport { GSErrorName } from \"../GSError\";\n// #if _VERBOSE\nimport { GSError } from \"../GSError\";\n// #endif\nimport { BaseLexer } from \"../common/BaseLexer\";\nimport { Keyword } from \"../common/enums/Keyword\";\nimport { SymbolTable } from \"../common/SymbolTable\";\nimport { ShaderCompilerUtils } from \"../ShaderCompilerUtils\";\nimport { ShaderSourceFactory } from \"./ShaderSourceFactory\";\nimport { ShaderSourceSymbol } from \"./ShaderSourceSymbol\";\nimport SourceLexer from \"./SourceLexer\";\n\n/**\n * @internal\n */\nexport class ShaderSourceParser {\n static readonly errors = new Array<GSError>();\n\n private static _renderStateConstMap = <Record<string, Record<string, number | string | boolean>>>{\n RenderQueueType,\n CompareFunction,\n StencilOperation,\n BlendOperation,\n BlendFactor,\n CullMode,\n ColorWriteMask\n };\n private static _symbolTableStack = new SymbolTableStack<ShaderSourceSymbol, SymbolTable<ShaderSourceSymbol>>();\n private static _lexer = new SourceLexer();\n private static _lookupSymbol = new ShaderSourceSymbol(\"\", null);\n\n static parse(sourceCode: string): IShaderSource {\n // Clear previous data\n this.errors.length = 0;\n this._symbolTableStack.clear();\n this._pushScope();\n\n const lexer = this._lexer;\n lexer.setSource(sourceCode);\n\n const shaderSource = this._parseShader(lexer);\n\n const shaderPendingContents = shaderSource.pendingContents;\n const shaderRenderStates = shaderSource.renderStates;\n for (let i = 0, n = shaderSource.subShaders.length; i < n; i++) {\n const subShader = shaderSource.subShaders[i];\n const curSubShaderGlobalStatements = shaderPendingContents.concat(subShader.pendingContents);\n const globalSubShaderStates = {\n constantMap: { ...shaderRenderStates.constantMap },\n variableMap: { ...shaderRenderStates.variableMap }\n };\n this._mergeRenderStates(globalSubShaderStates, subShader.renderStates);\n\n for (let j = 0, m = subShader.passes.length; j < m; j++) {\n const pass = subShader.passes[j];\n const globalPassRenderStates = {\n constantMap: { ...globalSubShaderStates.constantMap },\n variableMap: { ...globalSubShaderStates.variableMap }\n };\n this._mergeRenderStates(globalPassRenderStates, pass.renderStates);\n pass.renderStates = globalPassRenderStates;\n\n if (pass.isUsePass) continue;\n const passGlobalStatements = curSubShaderGlobalStatements.concat(pass.pendingContents);\n pass.contents = passGlobalStatements.map((item) => item.content).join(\"\\n\");\n }\n }\n\n return shaderSource;\n }\n\n private static _parseShader(lexer: SourceLexer): IShaderSource {\n // Parse shader header\n lexer.scanLexeme(\"Shader\");\n const name = lexer.scanPairedChar('\"', '\"', false, false);\n const shaderSource = ShaderSourceFactory.createShaderSource(name);\n lexer.scanLexeme(\"{\");\n\n let braceLevel = 1;\n lexer.skipCommentsAndSpace();\n let start = lexer.getShaderPosition(0);\n\n const { pendingContents } = shaderSource;\n while (true) {\n const token = lexer.scanToken();\n switch (token.type) {\n case Keyword.GSSubShader:\n this._addPendingContents(start, token.lexeme.length, pendingContents);\n const subShader = this._parseSubShader();\n shaderSource.subShaders.push(subShader);\n start = lexer.getShaderPosition(0);\n break;\n case Keyword.GSEditorProperties:\n case Keyword.GSEditorMacros:\n case Keyword.GSEditor:\n this._addPendingContents(start, token.lexeme.length, pendingContents);\n lexer.scanPairedChar(\"{\", \"}\", true, false);\n start = lexer.getShaderPosition(0);\n break;\n case Keyword.LeftBrace:\n ++braceLevel;\n break;\n case Keyword.RightBrace:\n if (--braceLevel === 0) {\n this._addPendingContents(start, token.lexeme.length, pendingContents);\n this._popScope();\n return shaderSource;\n }\n break;\n default:\n start = this._parseRenderState(token, start, pendingContents, shaderSource.renderStates);\n }\n }\n }\n\n private static _parseRenderStateDeclarationOrAssignment(outRenderStates: IRenderStates, stateToken: BaseToken): void {\n const lexer = this._lexer;\n const token = lexer.scanToken();\n if (token.type === ETokenType.ID) {\n // Declaration\n lexer.scanLexeme(\"{\");\n const renderState = this._parseRenderStateProperties(stateToken.lexeme);\n const symbol = new ShaderSourceSymbol(token.lexeme, stateToken.type, renderState);\n this._symbolTableStack.insert(symbol);\n } else if (token.lexeme === \"=\") {\n // Check if it's direct assignment syntax sugar or variable assignment\n const nextToken = lexer.scanToken();\n\n let renderState: IRenderStates;\n if (nextToken.lexeme === \"{\") {\n // Syntax: DepthState = { ... }\n renderState = this._parseRenderStateProperties(stateToken.lexeme);\n } else {\n // Syntax: DepthState = customDepthState;\n lexer.scanLexeme(\";\");\n const lookupSymbol = this._lookupSymbol;\n lookupSymbol.set(nextToken.lexeme, stateToken.type);\n const sm = this._symbolTableStack.lookup(lookupSymbol);\n if (!sm?.value) {\n this._createCompileError(`Invalid \"${stateToken.lexeme}\" variable: ${nextToken.lexeme}`, nextToken.location);\n // #if _VERBOSE\n return;\n // #endif\n }\n renderState = sm.value as IRenderStates;\n }\n this._mergeRenderStates(outRenderStates, renderState);\n }\n }\n\n private static _mergeRenderStates(outTarget: IRenderStates, source: IRenderStates): void {\n // For each key in the source, remove it from the opposite map in target to ensure proper override\n const { constantMap: targetConstantMap, variableMap: targetVariableMap } = outTarget;\n const { constantMap: sourceConstantMap, variableMap: sourceVariableMap } = source;\n\n for (const key in sourceConstantMap) {\n delete targetVariableMap[key];\n targetConstantMap[key] = sourceConstantMap[key];\n }\n\n for (const key in sourceVariableMap) {\n delete targetConstantMap[key];\n targetVariableMap[key] = sourceVariableMap[key];\n }\n }\n\n private static _parseVariableDeclaration(): void {\n const lexer = this._lexer;\n const token = lexer.scanToken();\n lexer.scanLexeme(\";\");\n const symbol = new ShaderSourceSymbol(token.lexeme, token.type);\n this._symbolTableStack.insert(symbol);\n }\n\n private static _pushScope(): void {\n const symbolTable = new SymbolTable<ShaderSourceSymbol>();\n this._symbolTableStack.pushScope(symbolTable);\n }\n\n private static _popScope(): void {\n this._symbolTableStack.popScope();\n }\n\n private static _parseRenderStateProperties(state: string): IRenderStates {\n const lexer = this._lexer;\n const renderStates = ShaderSourceFactory.createRenderStates();\n while (lexer.getCurChar() !== \"}\") {\n this._parseRenderStateProperty(state, renderStates);\n lexer.skipCommentsAndSpace();\n }\n lexer.advance(1);\n return renderStates;\n }\n\n private static _createCompileError(message: string, location?: ShaderPosition | ShaderRange): void {\n const error = this._lexer.createCompileError(message, location);\n // #if _VERBOSE\n this.errors.push(<GSError>error);\n // #endif\n }\n\n private static _scanEnumConstValue(enumName: string): number | undefined {\n const lexer = this._lexer;\n lexer.advance(1);\n const constValueToken = lexer.scanToken();\n const value = this._renderStateConstMap[enumName]?.[constValueToken.lexeme] as number;\n if (value == undefined) {\n this._createCompileError(\n `Invalid engine constant: ${enumName}.${constValueToken.lexeme}`,\n constValueToken.location\n );\n // #if _VERBOSE\n lexer.scanToCharacter(\";\");\n // #endif\n }\n return value;\n }\n\n private static _parseRenderStateProperty(stateLexeme: string, out: IRenderStates): void {\n const lexer = this._lexer;\n const propertyToken = lexer.scanToken();\n const propertyLexeme = propertyToken.lexeme;\n let stateElementKey = propertyLexeme;\n if (stateLexeme === \"BlendState\" && propertyLexeme !== \"BlendColor\" && propertyLexeme !== \"AlphaToCoverage\") {\n let keyIndex = 0;\n const scannedLexeme = lexer.scanTwoExpectedLexemes(\"[\", \"=\");\n if (scannedLexeme === \"[\") {\n keyIndex = lexer.scanNumber();\n lexer.scanLexeme(\"]\");\n lexer.scanLexeme(\"=\");\n } else if (scannedLexeme !== \"=\") {\n this._createCompileError(`Invalid syntax, expect '[' or '=', but got unexpected token`);\n // #if _VERBOSE\n lexer.scanToCharacter(\";\");\n return;\n // #endif\n }\n stateElementKey += keyIndex;\n } else {\n lexer.scanLexeme(\"=\");\n }\n\n const renderStateElementKey = RenderStateElementKey[stateLexeme + stateElementKey];\n if (renderStateElementKey === undefined) {\n this._createCompileError(`Invalid render state property ${propertyLexeme}`);\n // #if _VERBOSE\n lexer.scanToCharacter(\";\");\n return;\n // #endif\n }\n\n lexer.skipCommentsAndSpace();\n let propertyValue: number | string | boolean | Color;\n\n const curCharCode = lexer.getCurCharCode();\n if (BaseLexer.isDigit(curCharCode) || curCharCode === 46) {\n // Digit or '.'\n propertyValue = lexer.scanNumber();\n } else {\n const valueToken = lexer.scanToken();\n const valueTokenType = valueToken.type;\n\n if (valueTokenType === Keyword.True) {\n propertyValue = true;\n } else if (valueTokenType === Keyword.False) {\n propertyValue = false;\n } else if (valueTokenType === Keyword.GSColor) {\n propertyValue = lexer.scanColor();\n } else if (lexer.getCurChar() === \".\") {\n propertyValue = this._scanEnumConstValue(valueToken.lexeme);\n if (propertyValue == undefined) return;\n // Support bitwise OR only for bitmask enums (e.g. ColorWriteMask)\n lexer.skipCommentsAndSpace();\n if (lexer.getCurChar() === \"|\") {\n if (valueToken.lexeme !== \"ColorWriteMask\") {\n this._createCompileError(\n `Bitwise OR '|' is not supported for '${valueToken.lexeme}', only bitmask enums like 'ColorWriteMask' support this`,\n valueToken.location\n );\n // #if _VERBOSE\n lexer.scanToCharacter(\";\");\n // #endif\n return;\n }\n while (lexer.getCurChar() === \"|\") {\n lexer.advance(1);\n const nextEnumToken = lexer.scanToken();\n if (nextEnumToken == undefined || lexer.getCurChar() !== \".\") {\n this._createCompileError(`Invalid syntax after '|', expect 'EnumType.Value'`, nextEnumToken?.location);\n // #if _VERBOSE\n lexer.scanToCharacter(\";\");\n // #endif\n return;\n }\n if (nextEnumToken.lexeme !== valueToken.lexeme) {\n this._createCompileError(\n `Cannot mix enum types in bitwise OR: expected '${valueToken.lexeme}' but got '${nextEnumToken.lexeme}'`,\n nextEnumToken.location\n );\n // #if _VERBOSE\n lexer.scanToCharacter(\";\");\n // #endif\n return;\n }\n const nextValue = this._scanEnumConstValue(nextEnumToken.lexeme);\n if (nextValue == undefined) return;\n propertyValue = (<number>propertyValue) | (<number>nextValue);\n lexer.skipCommentsAndSpace();\n }\n }\n } else {\n propertyValue = valueToken.lexeme;\n const lookupSymbol = this._lookupSymbol;\n lookupSymbol.set(valueToken.lexeme, ETokenType.ID);\n if (!this._symbolTableStack.lookup(lookupSymbol)) {\n this._createCompileError(`Invalid ${stateLexeme} variable: ${valueToken.lexeme}`, valueToken.location);\n // #if _VERBOSE\n lexer.scanToCharacter(\";\");\n return;\n // #endif\n }\n }\n }\n lexer.scanLexeme(\";\");\n if (typeof propertyValue === \"string\") {\n out.variableMap[renderStateElementKey] = propertyValue;\n } else {\n out.constantMap[renderStateElementKey] = propertyValue;\n }\n }\n\n private static _parseRenderQueueDeclarationOrAssignment(renderStates: IRenderStates): void {\n const lexer = this._lexer;\n const token = lexer.scanToken();\n if (token.type === ETokenType.ID) {\n // Declaration\n lexer.scanLexeme(\";\");\n const symbol = new ShaderSourceSymbol(token.lexeme, Keyword.GSRenderQueueType);\n this._symbolTableStack.insert(symbol);\n return;\n }\n\n if (token.lexeme !== \"=\") {\n this._createCompileError(`Invalid syntax, expect character '=', but got ${token.lexeme}`, token.location);\n // #if _VERBOSE\n return;\n // #endif\n }\n const word = lexer.scanToken();\n lexer.scanLexeme(\";\");\n const value = this._renderStateConstMap.RenderQueueType[word.lexeme];\n const key = RenderStateElementKey.RenderQueueType;\n if (value == undefined) {\n renderStates.variableMap[key] = word.lexeme;\n const lookupSymbol = this._lookupSymbol;\n lookupSymbol.set(word.lexeme, Keyword.GSRenderQueueType);\n const sm = this._symbolTableStack.lookup(lookupSymbol);\n if (!sm) {\n this._createCompileError(`Invalid RenderQueueType variable: ${word.lexeme}`, word.location);\n // #if _VERBOSE\n return;\n // #endif\n }\n } else {\n renderStates.constantMap[key] = value;\n }\n }\n\n private static _addPendingContents(\n start: ShaderPosition,\n backOffset: number,\n outPendingContents: IStatement[]\n ): void {\n const lexer = this._lexer;\n if (lexer.hasPendingContent) {\n const endIndex = lexer.currentIndex - backOffset;\n outPendingContents.push({\n range: { start, end: { ...lexer.getShaderPosition(0), index: endIndex - 1 } },\n content: lexer.source.substring(start.index, endIndex - 1)\n });\n lexer.hasPendingContent = false;\n }\n }\n\n private static _parseSubShader(): ISubShaderSource {\n const lexer = this._lexer;\n this._pushScope();\n\n let braceLevel = 1;\n const name = lexer.scanPairedChar('\"', '\"', false, false);\n const subShaderSource = ShaderSourceFactory.createSubShaderSource(name);\n lexer.scanLexeme(\"{\");\n\n lexer.skipCommentsAndSpace();\n let start = lexer.getShaderPosition(0);\n\n while (true) {\n const token = lexer.scanToken();\n switch (token.type) {\n case Keyword.GSPass:\n this._addPendingContents(start, token.lexeme.length, subShaderSource.pendingContents);\n const pass = this._parsePass();\n subShaderSource.passes.push(pass);\n start = lexer.getShaderPosition(0);\n break;\n case Keyword.GSUsePass:\n this._addPendingContents(start, token.lexeme.length, subShaderSource.pendingContents);\n const name = lexer.scanPairedChar('\"', '\"', false, false);\n subShaderSource.passes.push(ShaderSourceFactory.createUsePass(name));\n start = lexer.getShaderPosition(0);\n break;\n case Keyword.LeftBrace:\n ++braceLevel;\n break;\n case Keyword.RightBrace:\n if (--braceLevel === 0) {\n this._addPendingContents(start, token.lexeme.length, subShaderSource.pendingContents);\n this._popScope();\n return subShaderSource;\n }\n break;\n default:\n start = this._parseRenderStateAndTags(\n token,\n start,\n subShaderSource.pendingContents,\n subShaderSource.renderStates,\n subShaderSource.tags\n );\n }\n }\n }\n\n private static _parseTags(tags: Record<string, number | string | boolean>): void {\n const lexer = this._lexer;\n lexer.scanLexeme(\"{\");\n while (true) {\n const ident = lexer.scanToken();\n lexer.scanLexeme(\"=\");\n const value = lexer.scanPairedChar('\"', '\"', false, false);\n lexer.skipCommentsAndSpace();\n\n tags[ident.lexeme] = value;\n\n if (lexer.peek(1) === \"}\") {\n lexer.advance(1);\n return;\n }\n lexer.scanLexeme(\",\");\n }\n }\n\n private static _parsePass(): IShaderPassSource {\n this._pushScope();\n const lexer = this._lexer;\n\n const name = lexer.scanPairedChar('\"', '\"', false, false);\n const passSource = ShaderSourceFactory.createShaderPassSource(name);\n lexer.scanLexeme(\"{\");\n let braceLevel = 1;\n\n lexer.skipCommentsAndSpace();\n let start = lexer.getShaderPosition(0);\n\n while (true) {\n const token = lexer.scanToken();\n switch (token.type) {\n case Keyword.GSVertexShader:\n case Keyword.GSFragmentShader:\n this._addPendingContents(start, token.lexeme.length, passSource.pendingContents);\n lexer.scanLexeme(\"=\");\n const entry = lexer.scanToken();\n if (passSource[token.lexeme]) {\n const error = ShaderCompilerUtils.createGSError(\n \"Reassign main entry\",\n GSErrorName.CompilationError,\n lexer.source,\n lexer.getShaderPosition(0)\n );\n // #if _VERBOSE\n console.error(error.toString());\n throw error;\n // #endif\n }\n const key = token.type === Keyword.GSVertexShader ? \"vertexEntry\" : \"fragmentEntry\";\n passSource[key] = entry.lexeme;\n lexer.scanLexeme(\";\");\n start = lexer.getShaderPosition(0);\n break;\n case Keyword.LeftBrace:\n ++braceLevel;\n break;\n case Keyword.RightBrace:\n if (--braceLevel === 0) {\n this._addPendingContents(start, token.lexeme.length, passSource.pendingContents);\n this._popScope();\n return passSource;\n }\n break;\n default:\n start = this._parseRenderStateAndTags(\n token,\n start,\n passSource.pendingContents,\n passSource.renderStates,\n passSource.tags\n );\n }\n }\n }\n\n private static _parseRenderStateAndTags(\n token: BaseToken<number>,\n start: ShaderPosition,\n outGlobalContents: IStatement[],\n outRenderStates: IRenderStates,\n outTags: Record<string, number | string | boolean>\n ): ShaderPosition {\n switch (token.type) {\n case Keyword.GSTags:\n this._addPendingContents(start, token.lexeme.length, outGlobalContents);\n this._parseTags(outTags);\n start = this._lexer.getShaderPosition(0);\n break;\n default:\n start = this._parseRenderState(token, start, outGlobalContents, outRenderStates);\n }\n return start;\n }\n\n private static _parseRenderState(\n token: BaseToken<number>,\n start: ShaderPosition,\n outGlobalContents: IStatement[],\n outRenderStates: IRenderStates\n ): ShaderPosition {\n switch (token.type) {\n case Keyword.GSBlendState:\n case Keyword.GSDepthState:\n case Keyword.GSRasterState:\n case Keyword.GSStencilState:\n this._addPendingContents(start, token.lexeme.length, outGlobalContents);\n this._parseRenderStateDeclarationOrAssignment(outRenderStates, token);\n start = this._lexer.getShaderPosition(0);\n break;\n case Keyword.GSBlendFactor:\n case Keyword.GSBlendOperation:\n case Keyword.GSBool:\n case Keyword.GSNumber:\n case Keyword.GSColor:\n case Keyword.GSCompareFunction:\n case Keyword.GSStencilOperation:\n case Keyword.GSCullMode:\n case Keyword.GSColorWriteMask:\n this._addPendingContents(start, token.lexeme.length, outGlobalContents);\n this._parseVariableDeclaration();\n start = this._lexer.getShaderPosition(0);\n break;\n case Keyword.GSRenderQueueType:\n this._addPendingContents(start, token.lexeme.length, outGlobalContents);\n this._parseRenderQueueDeclarationOrAssignment(outRenderStates);\n start = this._lexer.getShaderPosition(0);\n break;\n default:\n // Unrecognized tokens are defined as pending content\n this._lexer.hasPendingContent = true;\n }\n return start;\n }\n}\n","import { Color } from \"@galacean/engine-math\";\nimport { ShaderLanguage } from \"@galacean/engine-core\";\nimport type { IPrecompiledShader, IRenderStates, IShaderSource } from \"@galacean/engine-design\";\nimport type { IShaderProgramSource } from \"@galacean/engine-design/types/shader-compiler/IShaderProgramSource\";\nimport { GLES100Visitor, GLES300Visitor } from \"./codeGen\";\nimport { ShaderPosition, ShaderRange } from \"./common\";\nimport { Lexer } from \"./lexer\";\nimport { ShaderInstructionEncoder } from \"./ShaderInstructionEncoder\";\nimport { ShaderTargetParser } from \"./parser\";\nimport { Preprocessor, IncludeMap, ChunkOutputCache } from \"./Preprocessor\";\nimport { ShaderCompilerUtils } from \"./ShaderCompilerUtils\";\nimport { ShaderSourceParser } from \"./sourceParser/ShaderSourceParser\";\n\nexport class ShaderCompiler {\n private static _parser = ShaderTargetParser.create();\n private static _shaderPositionPool = ShaderCompilerUtils.createObjectPool(ShaderPosition);\n private static _shaderRangePool = ShaderCompilerUtils.createObjectPool(ShaderRange);\n\n // #if _VERBOSE\n static _processingPassText?: string;\n // #endif\n\n private _includeMap: IncludeMap = {};\n private readonly _chunkOutputCache: ChunkOutputCache = new Map();\n\n /** Replace the `#include` lookup table and clear the derived chunk cache. */\n _setIncludeMap(includeMap: IncludeMap): void {\n this._includeMap = includeMap;\n this._chunkOutputCache.clear();\n }\n\n static createPosition(index: number, line?: number, column?: number): ShaderPosition {\n const position = this._shaderPositionPool.get();\n position.set(\n index,\n // #if _VERBOSE\n line,\n column\n // #endif\n );\n return position;\n }\n\n static createRange(start: ShaderPosition, end: ShaderPosition): ShaderRange {\n const range = this._shaderRangePool.get();\n range.set(start, end);\n return range;\n }\n\n _parseShaderSource(sourceCode: string): IShaderSource {\n ShaderCompilerUtils.clearAllShaderCompilerObjectPool();\n const shaderSource = ShaderSourceParser.parse(sourceCode);\n\n // #if _VERBOSE\n this._logErrors(ShaderSourceParser.errors);\n // #endif\n\n return shaderSource;\n }\n\n _parseShaderPass(\n source: string,\n vertexEntry: string,\n fragmentEntry: string,\n backend: ShaderLanguage,\n basePathForIncludeKey: string\n ): IShaderProgramSource | undefined {\n const macroDefineList = {};\n const noIncludeContent = Preprocessor.parse(\n source,\n basePathForIncludeKey,\n this._includeMap,\n this._chunkOutputCache\n );\n\n const lexer = new Lexer(noIncludeContent, macroDefineList);\n\n const tokens = lexer.tokenize();\n const { _parser: parser } = ShaderCompiler;\n\n ShaderCompiler._processingPassText = noIncludeContent;\n\n const program = parser.parse(tokens, macroDefineList);\n\n // #if _VERBOSE\n this._logErrors(parser.errors);\n // #endif\n\n if (!program) {\n return undefined;\n }\n\n const codeGen = backend === ShaderLanguage.GLSLES100 ? GLES100Visitor.getVisitor() : GLES300Visitor.getVisitor();\n\n const ret = codeGen.visitShaderProgram(program, vertexEntry, fragmentEntry);\n ShaderCompiler._processingPassText = undefined;\n\n // #if _VERBOSE\n this._logErrors(codeGen.errors);\n // #endif\n\n if (ret) {\n ret.vertexShaderInstructions = ShaderInstructionEncoder.parse(ret.vertex);\n ret.fragmentShaderInstructions = ShaderInstructionEncoder.parse(ret.fragment);\n }\n\n return ret;\n }\n\n _precompile(sourceCode: string, platformTarget: ShaderLanguage, basePathForIncludeKey: string): IPrecompiledShader {\n const shaderSource = this._parseShaderSource(sourceCode);\n\n const subShaders = shaderSource.subShaders.map((sub) => ({\n name: sub.name,\n tags: sub.tags,\n passes: sub.passes.map((pass) => {\n if (pass.isUsePass) {\n return {\n name: pass.name,\n isUsePass: true as const,\n tags: pass.tags,\n renderStates: this._serializeRenderStates(pass.renderStates)\n };\n }\n\n const programSource = this._parseShaderPass(\n pass.contents,\n pass.vertexEntry,\n pass.fragmentEntry,\n platformTarget,\n basePathForIncludeKey\n );\n\n if (!programSource) {\n throw new Error(\n `Shader pass \"${shaderSource.name}.${sub.name}.${pass.name}\" precompile failed, please check the shader source code.`\n );\n }\n\n return {\n name: pass.name,\n isUsePass: false as const,\n tags: pass.tags,\n renderStates: this._serializeRenderStates(pass.renderStates),\n vertexShaderInstructions: programSource.vertexShaderInstructions,\n fragmentShaderInstructions: programSource.fragmentShaderInstructions\n };\n })\n }));\n\n return {\n name: shaderSource.name,\n platformTarget,\n subShaders\n };\n }\n\n private _serializeRenderStates(renderStates: IRenderStates): {\n constantMap: Record<string, number | string | boolean | number[]>;\n variableMap: Record<string, string>;\n } {\n const constantMap: Record<string, number | string | boolean | number[]> = {};\n for (const key in renderStates.constantMap) {\n const value = renderStates.constantMap[key];\n if (value instanceof Color) {\n constantMap[key] = [value.r, value.g, value.b, value.a];\n } else {\n constantMap[key] = value as number | string | boolean;\n }\n }\n return {\n constantMap,\n variableMap: renderStates.variableMap\n };\n }\n\n // #if _VERBOSE\n /**\n * @internal\n */\n _logErrors(errors: Error[]) {\n if (errors.length === 0) return;\n console.error(`${errors.length} errors occur!`);\n for (const err of errors) {\n console.error(err.toString());\n }\n }\n // #endif\n}\n","export { ShaderCompiler } from \"./ShaderCompiler\";\n\nexport * from \"./GSError\";\n\n//@ts-ignore\nexport const version = `__buildVersion`;\n\nlet mode = \"Release\";\n// #if _VERBOSE\nmode = \"Verbose\";\n// #endif\n\nconsole.log(`Galacean Engine Shader Compiler Version: ${version} | Mode: ${mode}`);\n"],"names":["_instanceof","left","right","Symbol","hasInstance","_set_prototype_of","o","p","Object","setPrototypeOf","__proto__","_inherits","subClass","superClass","TypeError","prototype","create","constructor","value","writable","configurable","_defineProperties","target","props","i","length","descriptor","enumerable","defineProperty","key","_create_class","Constructor","protoProps","staticProps","_array_like_to_array","arr","len","arr2","Array","_create_for_of_iterator_helper_loose","allowArrayLike","it","iterator","call","next","bind","isArray","_unsupported_iterable_to_array","minLen","n","toString","slice","name","from","test","done","__decorate","decorators","desc","d","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","SuppressedError","ETokenType","Keyword","NoneTerminal","GSErrorName","EShaderStage","ESymbolType","ASTNode","TrivialNode","ScopeBrace","ScopeEndBrace","JumpStatement","ExpressionAstNode","SingleDeclaration","FullySpecifiedType","TypeQualifier","SingleTypeQualifier","TypeSpecifier","ArraySpecifier","IntegerConstantExpressionOperator","IntegerConstantExpression","TypeSpecifierNonArray","ExtBuiltinTypeSpecifierNonArray","InitDeclaratorList","IdentifierList","Declaration","FunctionProtoType","FunctionDeclarator","FunctionHeader","FunctionParameterList","MacroParamCaseList","MacroParamBlock","MacroParameterBranch","ParameterDeclaration","ParameterDeclarator","CompoundStatementNoScope","StatementList","FunctionDefinition","FunctionCall","FunctionCallGeneric","FunctionCallParameterList","MacroCallArgCaseList","MacroCallArgBlock","MacroCallArgBranch","PrecisionSpecifier","FunctionIdentifier","AssignmentExpression","Expression","PrimaryExpression","PostfixExpression","StructSpecifier","StructDeclarationList","StructDeclaration","MacroStructDeclaration","MacroStructBranch","LayoutQualifier","StructDeclaratorList","StructDeclarator","VariableDeclaration","VariableDeclarationList","VariableIdentifier","GLShaderProgram","GlobalDeclaration","MacroUndef","MacroPushContext","MacroPopContext","MacroElifExpression","MacroElseExpression","GlobalMacroDeclaration","GlobalMacroIfStatement","GlobalMacroBranch","MacroIfStatement","MacroBranch","MacroCallSymbol","MacroCallFunction","MacroDefine","EAction","_obj","ShaderRange","set","start","end","dispose","ShaderPosition","index","ShaderCompilerUtils","createObjectPool","type","pool","ClearableObjectPool","_shaderCompilerObjectPoolSet","push","clearAllShaderCompilerObjectPool","clear","createGSError","message","errorName","source","location","file","console","error","err","Error","EMPTY_BRANCH","BaseToken","branch","lexeme","arg","ShaderCompiler","createPosition","createRange","EOF","ParserUtils","unwrapNodeByType","node","child","children","Token","nt","parseMacroParamList","inner","replace","split","map","s","trim","filter","Boolean","unwrapBareIdentifier","options","cur","allowParens","TreeNode","extractDirectIdentLexeme","expr","ident","isTerminal","sm","START","_is_native_reflect_construct","result","valueOf","construct","_","_construct","Parent","args","Class","a","apply","instance","Function","_get_prototype_of","getPrototypeOf","_wrap_native_super","_cache","Map","undefined","indexOf","has","get","Wrapper","GSError","Error1","_this","_proto","wrappingLineCount","BaseLexer","_currentIndex","_source","setSource","getShaderPosition","backOffset","isEnd","getCurChar","getCurCharCode","charCodeAt","advance","count","skipSpace","includeLineBreak","isWhiteSpaceChar","skipCommentsAndSpace","afterBlock","_skipBlockComment","afterLine","_skipLineComment","peek","to","offset","substring","scanLexeme","throwError","scanTwoExpectedLexemes","lexeme1","lexeme2","pos","_len","msgs","_key","join","ScannerError","scanPairedChar","balanced","skipLeading","sourceLength","currentIndex","level","currentChar","isDigit","charCode","isHexDigit","isAlpha","isAlnum","isPreprocessorStartChar","src","j","includeBreak","Lexer","BaseLexer1","macroDefineList","_needScanMacroConditionExpression","_inMacroDefineValue","_macroDefineExpectsNameToken","_macroDefineExpectsParamsToken","_currentMacroName","_currentMacroParamsLexeme","_currentMacroValueStart","_branchStack","_pendingBranchPushDefined","tokenize","tok","top","thisArg","body","f","y","t","label","sent","trys","ops","g","Iterator","verb","v","step","op","pop","e","scanToken","ID","MACRO_CALL","defined","MACRO_IFDEF","MACRO_IFNDEF","MACRO_IF","_ifCounter","MACRO_ELIF","MACRO_ELSE","MACRO_ENDIF","_state","_skipInlineSpaceAndComments","_isAtLineBreak","_emitMacroDefineEnd","_scanMacroDefineParams","_scanMacroConditionExpression","curChar","curCharCode","_scanDirectives","_scanWord","_scanNum","token","LEFT_ASSIGN","LEFT_OP","LE_OP","LEFT_ANGLE","RIGHT_ASSIGN","RIGHT_OP","GE_OP","RIGHT_ANGLE","INC_OP","ADD_ASSIGN","PLUS","DEC_OP","SUB_ASSIGN","DASH","EQ_OP","EQUAL","NE_OP","BANG","AND_OP","AND_ASSIGN","AMPERSAND","OR_OP","OR_ASSIGN","VERTICAL_BAR","XOR_OP","XOR_ASSIGN","CARET","MUL_ASSIGN","STAR","DIV_ASSIGN","SLASH","MOD_ASSIGN","PERCENT","LEFT_PAREN","RIGHT_PAREN","LEFT_BRACE","RIGHT_BRACE","LEFT_BRACKET","RIGHT_BRACKET","_scanNumAfterDot","DOT","COMMA","COLON","SEMICOLON","TILDE","QUESTION","_scanStringConst","buffer","range","STRING_CONST","_scanFloatSuffix","FLOAT_CONSTANT","_scanUtilBreakLine","outBuffer","afterContinuation","_skipLineContinuation","word","_peekMacroDefine","isExpression","MACRO_DEFINE","_registerMacroDefine","paramsLexeme","valueStart","valueEnd","MACRO_DEFINE_EXPRESSION","kt","_lexemeTable","_skipNonSemantic","nameStart","paramsStart","depth","cursor","parenDepth","bracketDepth","firstStart","firstEnd","firstFollowedByParen","topLevelLast","skipped","after","_isNonExpressionLeadingKeyword","head","tail","headIllegal","tailIllegal","valueText","ch","MACRO_DEFINE_PARAMS","MACRO_DEFINE_END","params","dedupKey","_normalizeValueText","info","isFunction","sameBranch","MACRO_CONDITIONAL_EXPRESSION","_isVisibleMacro","defs","callSiteBranch","isVisibleFrom","nextCode","_scanIntegerSuffix","INT_CONSTANT","b","defBranch","m","kw","True","False","startsWith","out","pendingSpace","const","CONST","bool","BOOL","float","FLOAT","double","DOUBLE","int","INT","uint","UINT","break","BREAK","continue","CONTINUE","do","DO","else","ELSE","for","FOR","if","IF","while","WHILE","discard","DISCARD","return","RETURN","bvec2","BVEC2","bvec3","BVEC3","bvec4","BVEC4","ivec2","IVEC2","ivec3","IVEC3","ivec4","IVEC4","uvec2","UVEC2","uvec3","UVEC3","uvec4","UVEC4","vec2","VEC2","vec3","VEC3","vec4","VEC4","mat2","MAT2","mat3","MAT3","mat4","MAT4","in","IN","OUT","inout","INOUT","sampler2D","SAMPLER2D","samplerCube","SAMPLER_CUBE","sampler3D","SAMPLER3D","sampler2DShadow","SAMPLER2D_SHADOW","samplerCubeShadow","SAMPLER_CUBE_SHADOW","sampler2DArray","SAMPLER2D_ARRAY","sampler2DArrayShadow","SAMPLER2D_ARRAY_SHADOW","isampler2D","I_SAMPLER2D","isampler3D","I_SAMPLER3D","isamplerCube","I_SAMPLER_CUBE","isampler2DArray","I_SAMPLER2D_ARRAY","usampler2D","U_SAMPLER2D","usampler3D","U_SAMPLER3D","usamplerCube","U_SAMPLER_CUBE","usampler2DArray","U_SAMPLER2D_ARRAY","struct","STRUCT","void","VOID","true","false","precision","PRECISION","precise","PRECISE","highp","HIGHP","mediump","MEDIUMP","lowp","LOWP","invariant","INVARIANT","flat","FLAT","smooth","SMOOTH","noperspective","NOPERSPECTIVE","centroid","CENTROID","layout","LAYOUT","LOCATION","MACRO_UNDEF","FamilyMembers","dimension","members","BuiltinFunctionTable","BuiltinFunction","returnType","scope","_returnType","_create","fn","ALL","list","_createWithScope","resolveOverload","funcName","callArgTypes","overloads","candidate","declaredArgs","sizeLock","scalarTypeLock","matched","declaredType","actualType","paramFamily","memberIdx","returnFamily","_realReturnType","returnIdx","isExist","realReturnType","MAT2X3","MAT3X2","MAT2X4","MAT4X2","MAT3X4","MAT4X3","FRAGMENT","BuiltinVariableTable","BuiltinVariable","createVariable","item","getVar","VERTEX","VEC4_ARRAY","SymbolTable","_table","insert","symbol","isInMacroBranch","_this__table_get","entry","equal","warn","getSymbol","includeMacro","getSymbols","_getSymbols","forEach","callback","_step","_iterator","values","entries","SymbolTableStack","stack","_macroLevel","pushScope","popScope","lookup","symbolTable","lookupAll","SymbolDataType","typeLexeme","arraySpecifier","SymbolInfo","astNode","dataType","paramSignature","symbolType","protoType","paramSig","comparedParams","t1","t2","FnSymbol","typeSpecifier","FN","StructSymbol","VarSymbol","isGlobalVariable","initAst","VAR","ShaderData","globalPrecisions","globalMacroDeclarations","getOuterGlobalMacroDeclarations","parent","SemanticAnalyzer","semanticStack","acceptRule","symbolTableStack","curFunctionInfo","_shaderData","_translationRuleTable","reset","_macroDefineList","addTranslationRule","pid","rule","getTranslationRule","reportError","loc","reportWarning","CompilationWarn","_processingPassText","shaderData","_lookupSymbol","SymbolType","StructProp","typeInfo","mrtIndex","ASTNodeDecorator","nonTerminal","_location","_children","_parent","init","setCache","code","_codeCache","getCache","codeGen","visitor","defaultCodeGen","semanticAnalyze","sa","_unwrapToken","_ignore","scope_brace","scope_end_brace","isFragReturnStatement","returnStatement","visitJumpStatement","jump_statement","_type","_this__type","childrenLen","fullyType","id","initializer","visitSingleDeclaration","single_declaration","fully_specified_type","type_qualifier","qualifier","single_type_qualifier","arraySize","firstChild","_children_","size","isCustom","type_specifier","integerConstantExpr","array_specifier","operator","compute","integer_constant_expression_operator","Number","integer_constant_expression","tt","macroName","type_specifier_nonarray","ext_builtin_type_specifier_nonarray","childrenLength","initDeclList","init_declarator_list","idList","curIdList","listIdLength","identifier_list","visitDeclaration","declaration","declarator","parameterList","parameterInfoList","function_prototype","header","function_declarator","visitFunctionHeader","function_header","decl","visitFunctionParameterList","function_parameter_list","macro_param_case_list","macro_param_block","macro_parameter_branch","parameterDeclarator","varSymbol","parameter_declaration","parameter_declarator","compound_statement_no_scope","visitStatementList","statement_list","statements","visitFunctionDefinition","function_definition","visitFunctionCall","function_call","fnSymbol","functionIdentifier","isBuiltin","fnIdent","paramList","lookupSymbol","function_call_generic","paramNodes","function_call_parameter_list","macro_call_arg_case_list","macro_call_arg_block","macro_call_arg_branch","precision_specifier","visitFunctionIdentifier","function_identifier","assignment_expression","expression","primary_expression","visitPostfixExpression","postfix_expression","propList","macroExpressions","visitStructSpecifier","struct_specifier","struct_declaration_list","_typeSpecifier","_declaratorList","macroStructDeclaration","macroProps","_this__typeSpecifier","prop","declaratorList","declaratorListLength","struct_declaration","_this_props","_this_props1","_this_macroExpressions","_this_macroExpressions1","_this_props2","_this_macroExpressions2","concat","macro_struct_declaration","lastNode","macro_struct_branch","layout_qualifier","listLength","struct_declarator_list","struct_declarator","isStatic","visitGlobalVariableDeclaration","variable_declaration","variableDeclarations","_this_variableDeclarations","newVariable","variable_declaration_list","referenceGlobalSymbolNames","_symbols","symbols","needFindNames","referenceSymbolNames","builtinVar","_lookupAndMarkGlobalReference","hasAstValue","_probeCrossArmShadowing","visitVariableIdentifier","getLexeme","missWarnLoc","Any","currentScopeSymbol","some","variable_identifier","gs_shader_program","global_declaration","macro_undef","macro_push_context","macro_pop_context","macro_elif_expression","macro_else_expression","global_macro_declaration","global_macro_if_statement","global_macro_branch","macro_if_statement","macro_branch","TreeNode1","isFunctionLikeMacro","aliasesNonBuiltinIdent","nameToken","defList","refs","visibleCount","allAst","isFn","allAliasNonBuiltinIdent","valueAst","_collectIdentifierRefs","leadingIdent","leadingChild","leadingId","macro_call_symbol","visitMacroCallFunction","macro_call_function","valueExpression","valueIdx","definingBranch","upgradable","find","every","visitMacroDefine","macro_define","VisitorContext","attributeStructs","attributeList","varyingStructs","varyingList","mrtStructs","mrtList","_referencedGlobalMacroASTs","resetAll","_referencedAttributeList","_referencedVaryingList","_referencedMRTList","_referencedGlobals","_structVarMap","isAttributeStruct","findIndex","isVaryingStruct","isMRTStruct","getStructRole","registerStructVar","varName","role","referenceAttribute","_referenceProp","referenceVarying","referenceMRTProp","referenceGlobal","_passSymbolTable","refList","CompilationError","_singleton","context","TempArray","array","CodeGenVisitor","_tmpArrayPool","ret","derivationLength","postExpr","directRoot","identNode","indexNode","identLexeme","indexLexeme","_reportError","astNodes","paramInfoList","paramsCode","variableParam","argNode","paramsToken","valueCode","fullType","cmd","returnVar","returnFnCall","text","getVaryingProp","getAttributeProp","getMRTProp","sort","fnNode","fnName","stageEntry","ReturnableObjectPool","GLESVisitor","_globalCodeArray","globalCodeArray","_serializedGlobalKey","getOtherGlobal","data","visitShaderProgram","vertexEntry","fragmentEntry","outerGlobalMacroDeclarations","_collectAllStructVars","vertex","_vertexMain","fragment","_fragmentMain","structRoles","addEntryRoles","paramRole","returnRole","fns","proto","param0","entryFns","registerByType","walkLocals","_extractLocalVarNames","_step1","_iterator1","param","sym","stage","fnSymbols","varyingSymbols","varyingSymbol","attributeParam","attributeType","attributeSymbols","attributeSymbol","_preRegisterGlobalMacroRefs","_getGlobalSymbol","_getCustomStruct","_getGlobalMacroDeclarations","globalCode","outerGlobalMacroStatements","returnDataType","mrtSymbols","mrtSymbol","returnLocation","identChildren","singleDecl","macros","macro","_walkMacroDefineTokens","lastLength","keys","add","codeGenResult","structNodes","referencedGlobals","referencedGlobalMacroASTs","_step2","_iterator2","_visitGlobalMacroIfStatement","variableDeclaration","Set","GLES100Visitor","propReferenced","getVisitor","V3_GL_FragColor","GLES300Visitor","_otherCodeArray","_fragColorVariableRegistered","_registerFragColorVariable","ShaderPreprocessorDirective","Text","IfDef","IfNdef","IfCmp","IfExpr","Else","Endif","Define","DefineVal","DefineFunc","Undef","ShaderInstructionEncoder","parse","glsl","instructions","backfillStack","directiveStart","_findDirectiveStart","_pushText","lineEnd","line","match","_DIRECTIVE_RE","exec","last","keyword","rest","idx","cond","_parseCondition","_pushConditionInstruction","prevIdx","elseIdx","_backfillJump","endifIdx","afterEndif","inst","funcMatch","_FUNC_MACRO_RE","_stripLineComment","spaceIdx","nl","onlyPlaceholder","directive","trimEnd","ctx","_parseOr","_skipWs","_parseAnd","l","_parseUnary","_parsePrimary","hasParen","_scanIdentifier","_isDigit","lhsNum","_scanNumber","_scanOp","_evalNumOp","_isAlnum","c2","lhs","rhs","Production","goal","derivation","_id","StateItem","production","position","lookahead","_needReInfer","lookaheadSet","la","addLookahead","ts","needReInfer","symbolByOffset","canReduce","EPSILON","curSymbol","nextSymbol","State","cores","closured","_stateItemPool","_items","itemMapKey","getStateItemMapKey","createStateItem","mapId","newItem","cacheKey","getMapKey","state","closureMap","core","newState","items","GrammarUtils","createProductionWithOptions","astTypePool","opt","canElide","addMapSetItem","k","isSubSet","sb","isActionEqual","action","LALR1","grammar","firstSetMap","followSetMap","actionTable","gotoTable","_firstSetNTStack","generate","computeFirstSet","buildStateTable","startStateItemCore","productions","startState","_extendState","_closure","newStates","_inferNextState","ns","_extendStateItem","productionList","getProductionList","newLookaheadSet","terminalExist","lastFirstSet","Utils","_step3","_iterator3","coreMap","stateActionTable","_this_actionTable_get","stateGotoTable","_this_gotoTable_get","stateItem","Reduce","Accept","_addAction","nextItem","gs","Shift","table","terminal","exist","_isKnownShiftPreferred","_computeFirstSetForNT","NT","computingFS","curNT","firstSet","isNullableNT","succeedFirstSet","reduce","prod","Grammar","startSymbol","unshift","getProductionByID","gsl","productionAndRules","variable_declaration_statement","storage_qualifier","precision_qualifier","interpolation_qualifier","invariant_qualifier","conditional_expression","logical_or_expression","logical_xor_expression","logical_and_expression","inclusive_or_expression","exclusive_or_expression","and_expression","equality_expression","relational_expression","shift_expression","additive_expression","multiplicative_expression","unary_expression","unary_operator","assignment_operator","statement","compound_statement","simple_statement","expression_statement","selection_statement","iteration_statement","initializer_list","condition","for_init_statement","for_rest_statement","conditionopt","ShaderTargetParser","_traceBackStack","sematicAnalyzer","SematicAnalyzer","tokens","traceBackStack","nextToken","actionInfo","reduceProduction","translationRule","nextState","generator","curState","Preprocessor","basePathForIncludeKey","includeMap","chunkOutputCache","_includeReg","includeName","_replace","path","chunk","URL","href","cached","_extends","assign","hasOwnProperty","ShaderSourceFactory","createRenderStates","constantMap","variableMap","createShaderSource","subShaders","pendingContents","renderStates","createSubShaderSource","passes","tags","createShaderPassSource","createUsePass","isUsePass","ShaderSourceSymbol","other","SourceLexer","hasPendingContent","scanNumber","_scanDigits","scanColor","Color","wordToken","symbolKeyword","_symbolLexemeTable","createCompileError","_validateWordBoundaries","tokenType","_keywordLexemeTable","startIndex","endIndex","prevCharCode","_isValidWordBoundary","nextCharCode","_isWordSeparatorChar","RenderQueueType","GSRenderQueueType","BlendState","GSBlendState","DepthState","GSDepthState","StencilState","GSStencilState","RasterState","GSRasterState","EditorProperties","GSEditorProperties","EditorMacros","GSEditorMacros","Editor","GSEditor","Tags","GSTags","VertexShader","GSVertexShader","FragmentShader","GSFragmentShader","SubShader","GSSubShader","Pass","GSPass","BlendFactor","GSBlendFactor","BlendOperation","GSBlendOperation","Bool","GSBool","GSNumber","GSColor","CompareFunction","GSCompareFunction","StencilOperation","GSStencilOperation","CullMode","GSCullMode","ColorWriteMask","GSColorWriteMask","UsePass","GSUsePass","LeftBrace","RightBrace","Equal","BitwiseOr","ShaderSourceParser","sourceCode","errors","_symbolTableStack","_pushScope","lexer","_lexer","shaderSource","_parseShader","shaderPendingContents","shaderRenderStates","subShader","curSubShaderGlobalStatements","globalSubShaderStates","_mergeRenderStates","pass","globalPassRenderStates","passGlobalStatements","contents","content","braceLevel","_addPendingContents","_parseSubShader","_popScope","_parseRenderState","_parseRenderStateDeclarationOrAssignment","outRenderStates","stateToken","renderState","_parseRenderStateProperties","_createCompileError","outTarget","targetVariableMap","sourceVariableMap","sourceConstantMap","targetConstantMap","_parseVariableDeclaration","_parseRenderStateProperty","_scanEnumConstValue","enumName","_this__renderStateConstMap_enumName","constValueToken","_renderStateConstMap","stateLexeme","propertyValue","propertyLexeme","propertyToken","stateElementKey","keyIndex","scannedLexeme","renderStateElementKey","RenderStateElementKey","valueToken","valueTokenType","nextEnumToken","nextValue","_parseRenderQueueDeclarationOrAssignment","outPendingContents","subShaderSource","_parsePass","_parseRenderStateAndTags","_parseTags","passSource","outGlobalContents","outTags","_includeMap","_chunkOutputCache","_setIncludeMap","_parseShaderSource","_parseShaderPass","backend","noIncludeContent","parser","_parser","program","ShaderLanguage","GLSLES100","vertexShaderInstructions","fragmentShaderInstructions","_precompile","platformTarget","sub","_serializeRenderStates","programSource","column","_shaderPositionPool","_shaderRangePool","version","log"],"mappings":"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"}
1
+ {"version":3,"file":"browser.min.js","sources":["../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_instanceof.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_set_prototype_of.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_inherits.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_create_class.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_array_like_to_array.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_create_for_of_iterator_helper_loose.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_unsupported_iterable_to_array.js","../../../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/tslib.es6.mjs","../src/common/ShaderRange.ts","../src/common/types.ts","../src/common/enums/Keyword.ts","../src/parser/GrammarSymbol.ts","../src/GSError.ts","../src/common/enums/ShaderStage.ts","../src/parser/symbolTable/SymbolInfo.ts","../src/parser/AST.ts","../src/lalr/types.ts","../src/parser/builtin/functions.ts","../src/common/ShaderPosition.ts","../src/ShaderCompilerUtils.ts","../src/common/BaseToken.ts","../src/ParserUtils.ts","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_is_native_reflect_construct.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_construct.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_get_prototype_of.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_wrap_native_super.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_is_native_function.js","../src/common/BaseLexer.ts","../src/lexer/Lexer.ts","../src/parser/builtin/variables.ts","../src/common/SymbolTable.ts","../src/common/SymbolTableStack.ts","../src/parser/symbolTable/SymbolDataType.ts","../src/parser/symbolTable/FnSymbol.ts","../src/parser/symbolTable/StructSymbol.ts","../src/parser/symbolTable/VarSymbol.ts","../src/parser/ShaderInfo.ts","../src/parser/SemanticAnalyzer.ts","../src/parser/types.ts","../src/codeGen/VisitorContext.ts","../src/TempArray.ts","../src/codeGen/CodeGenVisitor.ts","../src/codeGen/GLESVisitor.ts","../src/codeGen/GLES100.ts","../src/codeGen/GLES300.ts","../src/ShaderInstructionEncoder.ts","../src/lalr/Production.ts","../src/lalr/StateItem.ts","../src/lalr/State.ts","../src/lalr/Utils.ts","../src/lalr/LALR1.ts","../src/parser/Grammar.ts","../src/lalr/CFG.ts","../src/parser/ShaderTargetParser.ts","../src/Preprocessor.ts","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_extends.js","../src/sourceParser/ShaderSourceFactory.ts","../src/sourceParser/ShaderSourceSymbol.ts","../src/sourceParser/SourceLexer.ts","../src/sourceParser/ShaderSourceParser.ts","../src/ShaderCompiler.ts","../src/index.ts"],"sourcesContent":["function _instanceof(left, right) {\n if (right != null && typeof Symbol !== \"undefined\" && right[Symbol.hasInstance]) {\n return !!right[Symbol.hasInstance](left);\n } else return left instanceof right;\n}\nexport { _instanceof as _ };\n","function _set_prototype_of(o, p) {\n _set_prototype_of = Object.setPrototypeOf || function setPrototypeOf(o, p) {\n o.__proto__ = p;\n\n return o;\n };\n\n return _set_prototype_of(o, p);\n}\nexport { _set_prototype_of as _ };\n","import { _ as _set_prototype_of } from \"./_set_prototype_of.js\";\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } });\n\n if (superClass) _set_prototype_of(subClass, superClass);\n}\nexport { _inherits as _ };\n","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n\n if (\"value\" in descriptor) descriptor.writable = true;\n\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\nfunction _create_class(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n\n return Constructor;\n}\nexport { _create_class as _ };\n","function _array_like_to_array(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\nexport { _array_like_to_array as _ };\n","import { _ as _unsupported_iterable_to_array } from \"./_unsupported_iterable_to_array.js\";\n\nfunction _create_for_of_iterator_helper_loose(o, allowArrayLike) {\n var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n\n if (it) return (it = it.call(o)).next.bind(it);\n // Fallback for engines without symbol support\n if (Array.isArray(o) || (it = _unsupported_iterable_to_array(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n\n var i = 0;\n\n return function() {\n if (i >= o.length) return { done: true };\n\n return { done: false, value: o[i++] };\n };\n }\n\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nexport { _create_for_of_iterator_helper_loose as _ };\n","import { _ as _array_like_to_array } from \"./_array_like_to_array.js\";\n\nfunction _unsupported_iterable_to_array(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _array_like_to_array(o, minLen);\n\n var n = Object.prototype.toString.call(o).slice(8, -1);\n\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(n);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);\n}\nexport { _unsupported_iterable_to_array as _ };\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","import type { IPoolElement } from \"@galacean/engine-core\";\nimport { ShaderPosition } from \"./ShaderPosition\";\n\nexport class ShaderRange implements IPoolElement {\n public start: ShaderPosition;\n public end: ShaderPosition;\n\n set(start: ShaderPosition, end: ShaderPosition) {\n this.start = start;\n this.end = end;\n }\n\n dispose(): void {\n this.start.dispose();\n this.end.dispose();\n }\n}\n","import { Keyword } from \"./enums/Keyword\";\n\nexport enum ETokenType {\n ID = 1000,\n FLOAT_CONSTANT,\n INT_CONSTANT,\n STRING_CONST,\n /** << */\n LEFT_OP,\n /** \\>> */\n RIGHT_OP,\n /** ++ */\n INC_OP,\n /** -- */\n DEC_OP,\n /** <= */\n LE_OP,\n /** \\>= */\n GE_OP,\n /** == */\n EQ_OP,\n /** != */\n NE_OP,\n /** && */\n AND_OP,\n /** || */\n OR_OP,\n /** ^^ */\n XOR_OP,\n /** *= */\n MUL_ASSIGN,\n /** /= */\n DIV_ASSIGN,\n /** += */\n ADD_ASSIGN,\n /** -= */\n SUB_ASSIGN,\n /** %= */\n MOD_ASSIGN,\n /** <<= */\n LEFT_ASSIGN,\n /** >>= */\n RIGHT_ASSIGN,\n /** &= */\n AND_ASSIGN,\n /** ^= */\n XOR_ASSIGN,\n /** |= */\n OR_ASSIGN,\n /** ( */\n LEFT_PAREN,\n /** ) */\n RIGHT_PAREN,\n /** [ */\n LEFT_BRACKET,\n /** ] */\n RIGHT_BRACKET,\n /** { */\n LEFT_BRACE,\n /** } */\n RIGHT_BRACE,\n /** . */\n DOT,\n /** , */\n COMMA,\n COLON,\n /** = */\n EQUAL,\n /** ; */\n SEMICOLON,\n /** ! */\n BANG,\n /** \\- */\n DASH,\n /** ~ */\n TILDE,\n PLUS,\n /** \\* */\n STAR,\n /** / */\n SLASH,\n /** % */\n PERCENT,\n /** < */\n LEFT_ANGLE,\n /** \\> */\n RIGHT_ANGLE,\n VERTICAL_BAR,\n /** ^ */\n CARET,\n /** & */\n AMPERSAND,\n /** ? */\n QUESTION,\n\n NotWord,\n\n /** ε */\n EPSILON = 1998,\n EOF = 1999\n}\n\nexport const TypeAny = 3000;\n\nexport type GalaceanDataType =\n | Keyword.VOID\n | Keyword.FLOAT\n | Keyword.BOOL\n | Keyword.INT\n | Keyword.UINT\n | Keyword.VEC2\n | Keyword.VEC3\n | Keyword.VEC4\n | Keyword.BVEC2\n | Keyword.BVEC3\n | Keyword.BVEC4\n | Keyword.IVEC2\n | Keyword.IVEC3\n | Keyword.IVEC4\n | Keyword.UVEC2\n | Keyword.UVEC3\n | Keyword.UVEC4\n | Keyword.MAT2\n | Keyword.MAT3\n | Keyword.MAT4\n | Keyword.MAT2X3\n | Keyword.MAT2X4\n | Keyword.MAT3X2\n | Keyword.MAT3X4\n | Keyword.MAT4X2\n | Keyword.MAT4X3\n | Keyword.SAMPLER2D\n | Keyword.SAMPLER3D\n | Keyword.SAMPLER_CUBE\n | Keyword.SAMPLER2D_SHADOW\n | Keyword.SAMPLER_CUBE_SHADOW\n | Keyword.SAMPLER2D_ARRAY\n | Keyword.SAMPLER2D_ARRAY_SHADOW\n | Keyword.I_SAMPLER2D\n | Keyword.I_SAMPLER3D\n | Keyword.I_SAMPLER_CUBE\n | Keyword.I_SAMPLER2D_ARRAY\n | Keyword.U_SAMPLER2D\n | Keyword.U_SAMPLER3D\n | Keyword.U_SAMPLER_CUBE\n | Keyword.U_SAMPLER2D_ARRAY\n | Keyword.VEC4_ARRAY\n | typeof TypeAny\n | string;\n\nexport type TokenType = ETokenType | Keyword;\n","export enum Keyword {\n CONST = 0,\n BOOL,\n FLOAT,\n DOUBLE,\n INT,\n UINT,\n BREAK,\n CONTINUE,\n DO,\n ELSE,\n FOR,\n IF,\n WHILE,\n DISCARD,\n RETURN,\n BVEC2,\n BVEC3,\n BVEC4,\n IVEC2,\n IVEC3,\n IVEC4,\n UVEC2,\n UVEC3,\n UVEC4,\n VEC2,\n VEC3,\n VEC4,\n VEC4_ARRAY,\n MAT2,\n MAT3,\n MAT4,\n MAT2X3,\n MAT2X4,\n MAT3X2,\n MAT3X4,\n MAT4X2,\n MAT4X3,\n IN,\n OUT,\n INOUT,\n CENTROID,\n SAMPLER2D,\n SAMPLER3D,\n SAMPLER_CUBE,\n SAMPLER2D_SHADOW,\n SAMPLER_CUBE_SHADOW,\n SAMPLER2D_ARRAY,\n SAMPLER2D_ARRAY_SHADOW,\n I_SAMPLER2D,\n I_SAMPLER3D,\n I_SAMPLER_CUBE,\n I_SAMPLER2D_ARRAY,\n U_SAMPLER2D,\n U_SAMPLER3D,\n U_SAMPLER_CUBE,\n U_SAMPLER2D_ARRAY,\n STRUCT,\n LAYOUT,\n LOCATION,\n VOID,\n\n PRECISION,\n PRECISE,\n HIGHP,\n MEDIUMP,\n LOWP,\n INVARIANT,\n SMOOTH,\n FLAT,\n NOPERSPECTIVE,\n\n // Common Tokens\n True,\n False,\n LeftBrace,\n RightBrace,\n Equal,\n BitwiseOr,\n\n // Source Parser Tokens\n GSRenderQueueType,\n GSBlendState,\n GSDepthState,\n GSStencilState,\n GSRasterState,\n GSEditorProperties,\n GSEditorMacros,\n GSEditor,\n GSTags,\n GSVertexShader,\n GSFragmentShader,\n GSSubShader,\n GSPass,\n GSBlendFactor,\n GSBlendOperation,\n GSBool,\n GSNumber,\n GSColor,\n GSCompareFunction,\n GSStencilOperation,\n GSCullMode,\n GSColorWriteMask,\n GSUsePass,\n\n // Macros\n MACRO_IF,\n MACRO_IFDEF,\n MACRO_IFNDEF,\n MACRO_ELSE,\n MACRO_ELIF,\n MACRO_ENDIF,\n MACRO_UNDEF,\n /** Legacy opaque `#define` token — whole directive packed into one lexeme. Retained\n * for macros whose value can't be parsed as a GLSL expression (type aliases,\n * qualifier aliases, partial-syntax macros). Expression-style macros instead emit\n * `MACRO_DEFINE` + ID + value tokens + `MACRO_DEFINE_END`. */\n MACRO_DEFINE_EXPRESSION,\n MACRO_CONDITIONAL_EXPRESSION,\n MACRO_CALL,\n /** `#define` directive head for expression-style macros. */\n MACRO_DEFINE,\n /** Terminates a `MACRO_DEFINE` directive at end-of-line. */\n MACRO_DEFINE_END,\n /** `(params)` block for a function-like `#define`. The lexer captures the entire\n * parenthesized parameter list as one opaque token so the macro-define CFG rule\n * doesn't need its own parameter-list production (which would conflict with\n * function_call_parameter_list under LALR(1)). The AST consumer parses the\n * lexeme to recover the individual parameter names. */\n MACRO_DEFINE_PARAMS\n}\n","import { TokenType } from \"../common\";\n\nexport type Terminal = TokenType;\n\nexport enum NoneTerminal {\n START = 2000,\n // galacean\n gs_shader_program,\n\n // glsl\n global_declaration,\n variable_declaration,\n variable_declaration_list,\n variable_declaration_statement,\n array_specifier_list,\n array_specifier,\n ext_builtin_type_specifier_nonarray,\n precision_specifier,\n variable_identifier,\n variable_identifier_node,\n primary_expression,\n postfix_expression,\n integer_expression,\n function_call,\n function_call_generic,\n function_call_header_no_parameters,\n function_call_header_with_parameters,\n function_call_parameter_list,\n function_call_header,\n function_identifier,\n constructor_identifier,\n unary_expression,\n unary_operator,\n multiplicative_expression,\n additive_expression,\n shift_expression,\n relational_expression,\n equality_expression,\n and_expression,\n inclusive_or_expression,\n exclusive_or_expression,\n logical_and_expression,\n logical_xor_expression,\n logical_or_expression,\n conditional_expression,\n assignment_expression,\n assignment_operator,\n expression,\n integer_constant_expression,\n integer_constant_expression_operator,\n declaration,\n function_prototype,\n function_declarator,\n function_header_with_parameters,\n function_header,\n function_parameter_list,\n parameter_declarator,\n parameter_declaration,\n parameter_qualifier,\n parameter_type_specifier,\n init_declarator_list,\n single_declaration,\n fully_specified_type,\n type_qualifier,\n single_type_qualifier,\n storage_qualifier,\n precision_qualifier,\n interpolation_qualifier,\n invariant_qualifier,\n type_specifier,\n type_specifier_nonarray,\n type_specifier_no_prec,\n basic_type,\n struct_specifier,\n struct_declaration_list,\n struct_declaration,\n layout_qualifier,\n struct_declarator_list,\n struct_declarator,\n identifier_list,\n decl_identifier,\n initializer,\n initializer_list,\n declaration_statement,\n simple_statement,\n compound_statement_no_scope,\n statement_with_scope,\n compound_statement,\n statement,\n statement_list,\n iteration_statement_no_new_scope,\n expression_statement,\n selection_statement,\n selection_rest_statement,\n condition,\n conditionopt,\n iteration_statement,\n for_init_statement,\n for_rest_statement,\n jump_statement,\n external_declaration,\n function_definition,\n field_selection,\n bool_constant,\n function_identifier_node,\n typename_identifier_node,\n scope_brace,\n scope_end_brace,\n\n // Macro\n macro_undef,\n macro_push_context,\n macro_pop_context,\n macro_elif_expression,\n macro_else_expression,\n global_macro_if_statement,\n global_macro_declaration,\n global_macro_branch,\n macro_struct_declaration,\n macro_struct_branch,\n macro_if_statement,\n macro_branch,\n macro_param_case_list,\n macro_param_block,\n macro_parameter_branch,\n macro_call_arg_case_list,\n macro_call_arg_block,\n macro_call_arg_branch,\n\n // Macro call\n macro_call_symbol,\n macro_call_function,\n\n // Macro define (expression-style): `#define NAME [(params)] VALUE`\n macro_define,\n\n _ignore\n}\n\nexport type GrammarSymbol = Terminal | NoneTerminal;\n\nexport type Derivation = GrammarSymbol[];\n","import { ShaderPosition } from \"./common/ShaderPosition\";\nimport { ShaderRange } from \"./common/ShaderRange\";\n\nexport class GSError extends Error {\n static wrappingLineCount = 2;\n\n constructor(\n name: GSErrorName,\n message: string,\n public readonly location: ShaderRange | ShaderPosition,\n public readonly source: string,\n public readonly file?: string\n ) {\n super(message);\n this.name = name;\n }\n\n override toString(): string {\n let start: ShaderPosition, end: ShaderPosition;\n const { message, location, source } = this;\n if (!source) {\n return message;\n }\n\n if (location instanceof ShaderPosition) {\n start = end = location;\n } else {\n start = location.start;\n end = location.end;\n }\n const lines = source.split(\"\\n\");\n\n let diagnosticMessage = `${this.name}: ${message}\\n\\n`;\n\n // #if _VERBOSE\n const lineSplit = \"|···\";\n\n const wrappingLineCount = GSError.wrappingLineCount;\n for (let i = start.line - wrappingLineCount, n = end.line + wrappingLineCount; i <= n; i++) {\n const line = lines[i];\n diagnosticMessage += lineSplit + `${line}\\n`;\n\n if (i < start.line || i > end.line) continue;\n\n let remarkStart = 0;\n let remarkEnd = line.length;\n let paddingLength = lineSplit.length;\n if (i === start.line) {\n remarkStart = start.column;\n paddingLength += start.column;\n }\n if (i === end.line) {\n remarkEnd = end.column;\n }\n const remarkLength = Math.max(remarkEnd - remarkStart, 1);\n\n diagnosticMessage += \" \".repeat(paddingLength) + \"^\".repeat(remarkLength) + \"\\n\";\n }\n // #endif\n\n return diagnosticMessage;\n }\n}\n\nexport enum GSErrorName {\n PreprocessorError = \"PreprocessorError\",\n CompilationError = \"CompilationError\",\n ScannerError = \"ScannerError\",\n CompilationWarn = \"CompilationWarning\"\n}\n","export enum EShaderStage {\n VERTEX,\n FRAGMENT,\n ALL\n}\n","import { IBaseSymbol } from \"../../common/IBaseSymbol\";\nimport { GalaceanDataType, TypeAny } from \"../../common/types\";\nimport { ASTNode } from \"../AST\";\nimport { SymbolDataType } from \"./SymbolDataType\";\n\nexport enum ESymbolType {\n VAR,\n FN,\n STRUCT,\n Any\n}\n\nexport type SymbolAstNode =\n | ASTNode.Initializer\n | ASTNode.StructSpecifier\n | ASTNode.FunctionDefinition\n | ASTNode.ParameterDeclarator\n | ASTNode.InitDeclaratorList\n | ASTNode.VariableDeclaration;\n\nexport class SymbolInfo implements IBaseSymbol {\n constructor(\n public ident: string,\n public type: ESymbolType,\n public astNode?: SymbolAstNode,\n public dataType?: SymbolDataType,\n public paramSignature?: GalaceanDataType[],\n public isInMacroBranch = false\n ) {}\n\n set(\n ident: string,\n symbolType: ESymbolType,\n astNode?: SymbolAstNode,\n dataType?: SymbolDataType,\n paramSignature?: GalaceanDataType[]\n ) {\n this.ident = ident;\n this.type = symbolType;\n this.astNode = astNode;\n this.dataType = dataType;\n this.paramSignature = paramSignature;\n }\n\n equal(symbol: SymbolInfo): boolean {\n if (symbol.type !== ESymbolType.Any && this.type !== symbol.type) return false;\n if (this.type === ESymbolType.FN) {\n if (!symbol.astNode && !symbol.paramSignature) return true;\n\n const params = (<ASTNode.FunctionDefinition>this.astNode).protoType.paramSig;\n const comparedParams = symbol.paramSignature ?? (<ASTNode.FunctionDefinition>symbol.astNode).protoType.paramSig;\n const length = params?.length;\n if (length !== comparedParams?.length) return false;\n for (let i = 0; i < length; i++) {\n const t1 = params[i],\n t2 = comparedParams[i];\n if (t1 === TypeAny || t2 === TypeAny) continue;\n if (t1 !== t2) return false;\n }\n return true;\n }\n return true;\n }\n}\n","import { ClearableObjectPool, type IPoolElement } from \"@galacean/engine-core\";\nimport { CodeGenVisitor } from \"../codeGen\";\nimport { ETokenType, GalaceanDataType, ShaderRange, TokenType, TypeAny } from \"../common\";\nimport { BaseToken } from \"../common/BaseToken\";\nimport { Keyword } from \"../common/enums/Keyword\";\nimport { ParserUtils } from \"../ParserUtils\";\nimport { Lexer } from \"../lexer/Lexer\";\nimport { MacroDefineInfo } from \"../Preprocessor\";\nimport { ShaderCompilerUtils } from \"../ShaderCompilerUtils\";\nimport { BuiltinFunction, BuiltinVariable, NonGenericGalaceanType } from \"./builtin\";\nimport { NoneTerminal } from \"./GrammarSymbol\";\nimport SemanticAnalyzer from \"./SemanticAnalyzer\";\nimport { ShaderData } from \"./ShaderInfo\";\nimport { ESymbolType, FnSymbol, StructSymbol, VarSymbol } from \"./symbolTable\";\nimport { IParamInfo, NodeChild, StructProp, SymbolType } from \"./types\";\n\nfunction ASTNodeDecorator(nonTerminal: NoneTerminal) {\n return function <T extends { new (): TreeNode }>(ASTNode: T) {\n ASTNode.prototype.nt = nonTerminal;\n (<any>ASTNode).pool = ShaderCompilerUtils.createObjectPool(ASTNode);\n };\n}\n\nexport abstract class TreeNode implements IPoolElement {\n static pool: ClearableObjectPool<TreeNode & { set: (loc: ShaderRange, children: NodeChild[]) => void }>;\n\n /** The non-terminal in grammar. */\n nt: NoneTerminal;\n private _children: NodeChild[];\n private _parent: TreeNode;\n private _location: ShaderRange;\n private _codeCache: string;\n\n /**\n * Parent pointer for AST traversal.\n * @remarks\n * The parent pointer is only reliable after the entire AST has been constructed.\n * DO NOT rely on `parent` during the `semanticAnalyze` phase, as the AST may still be under construction.\n * It is safe to use `parent` during code generation or any phase after AST construction.\n */\n get parent(): TreeNode {\n return this._parent;\n }\n\n get children() {\n return this._children;\n }\n\n get location() {\n return this._location;\n }\n\n set(loc: ShaderRange, children: NodeChild[]): void {\n this._location = loc;\n this._children = children;\n for (const child of children) {\n if (child instanceof TreeNode) {\n child._parent = this;\n }\n }\n\n this.init();\n }\n\n init() {}\n\n dispose(): void {}\n\n setCache(code: string): string {\n this._codeCache = code;\n return code;\n }\n\n getCache(): string {\n return this._codeCache;\n }\n\n // Visitor pattern interface for code generation\n codeGen(visitor: CodeGenVisitor) {\n const code = visitor.defaultCodeGen(this.children);\n this.setCache(code);\n return code;\n }\n\n /**\n * Do semantic analyze right after the ast node is generated.\n */\n semanticAnalyze(sa: SemanticAnalyzer) {}\n}\n\nexport namespace ASTNode {\n type MacroExpression =\n | MacroPushContext\n | MacroPopContext\n | MacroElseExpression\n | MacroElifExpression\n | MacroUndef\n | MacroDefine\n | BaseToken;\n\n export type ASTNodePool = ClearableObjectPool<\n { set: (loc: ShaderRange, children: NodeChild[]) => void } & IPoolElement & TreeNode\n >;\n\n export function _unwrapToken(node: NodeChild) {\n if (node instanceof BaseToken) {\n return node;\n }\n throw \"not token\";\n }\n\n export function get(pool: ASTNodePool, sa: SemanticAnalyzer, loc: ShaderRange, children: NodeChild[]) {\n const node = pool.get();\n node.set(loc, children);\n node.semanticAnalyze(sa);\n sa.semanticStack.push(node);\n }\n\n @ASTNodeDecorator(NoneTerminal._ignore)\n export class TrivialNode extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.scope_brace)\n export class ScopeBrace extends TreeNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n sa.pushScope();\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.scope_end_brace)\n export class ScopeEndBrace extends TreeNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n sa.popScope();\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.jump_statement)\n export class JumpStatement extends TreeNode {\n isFragReturnStatement: boolean;\n\n override init(): void {\n this.isFragReturnStatement = false;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (ASTNode._unwrapToken(this.children![0]).type === Keyword.RETURN) {\n sa.curFunctionInfo.returnStatement = this;\n }\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n return this.setCache(visitor.visitJumpStatement(this));\n }\n }\n\n // #if _VERBOSE\n @ASTNodeDecorator(NoneTerminal.conditionopt)\n export class ConditionOpt extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.for_rest_statement)\n export class ForRestStatement extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.condition)\n export class Condition extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.for_init_statement)\n export class ForInitStatement extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.iteration_statement)\n export class IterationStatement extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.selection_statement)\n export class SelectionStatement extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.expression_statement)\n export class ExpressionStatement extends TreeNode {}\n // #endif\n\n export abstract class ExpressionAstNode extends TreeNode {\n protected _type?: GalaceanDataType;\n set type(t: GalaceanDataType | undefined) {\n this._type = t;\n }\n get type() {\n return this._type ?? TypeAny;\n }\n\n override init(): void {\n this._type = undefined;\n }\n }\n\n // #if _VERBOSE\n @ASTNodeDecorator(NoneTerminal.initializer_list)\n export class InitializerList extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const init = this.children[0] as Initializer | InitializerList;\n this.type = init.type;\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.initializer)\n export class Initializer extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n this.type = (<AssignmentExpression>this.children[0]).type;\n } else {\n this.type = (<InitializerList>this.children[1]).type;\n }\n }\n }\n // #endif\n\n @ASTNodeDecorator(NoneTerminal.single_declaration)\n export class SingleDeclaration extends TreeNode {\n typeSpecifier: TypeSpecifier;\n arraySpecifier?: ArraySpecifier;\n\n override init(): void {\n this.typeSpecifier = undefined;\n this.arraySpecifier = undefined;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n const childrenLen = children.length;\n const fullyType = children[0] as FullySpecifiedType;\n const typeSpecifier = fullyType.typeSpecifier;\n this.typeSpecifier = typeSpecifier;\n this.arraySpecifier = typeSpecifier.arraySpecifier;\n\n const id = children[1] as BaseToken;\n\n let sm: VarSymbol;\n if (childrenLen === 2 || childrenLen === 4) {\n const symbolType = new SymbolType(fullyType.type, typeSpecifier.lexeme, this.arraySpecifier);\n const initializer = children[3] as Initializer;\n\n sm = new VarSymbol(id.lexeme, symbolType, false, initializer);\n } else {\n const arraySpecifier = children[2] as ArraySpecifier;\n // #if _VERBOSE\n if (arraySpecifier && this.arraySpecifier) {\n sa.reportError(arraySpecifier.location, \"Array of array is not supported.\");\n }\n // #endif\n this.arraySpecifier = arraySpecifier;\n const symbolType = new SymbolType(fullyType.type, typeSpecifier.lexeme, this.arraySpecifier);\n const initializer = children[4] as Initializer;\n\n sm = new VarSymbol(id.lexeme, symbolType, false, initializer);\n }\n sa.symbolTableStack.insert(sm);\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n return this.setCache(visitor.visitSingleDeclaration(this));\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.fully_specified_type)\n export class FullySpecifiedType extends TreeNode {\n typeSpecifier: TypeSpecifier;\n type: GalaceanDataType;\n\n override semanticAnalyze(_: SemanticAnalyzer): void {\n const children = this.children;\n this.typeSpecifier = (children.length === 1 ? children[0] : children[1]) as TypeSpecifier;\n this.type = this.typeSpecifier.type;\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.type_qualifier)\n export class TypeQualifier extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.single_type_qualifier)\n export class SingleTypeQualifier extends TreeNode {\n qualifier: Keyword;\n lexeme: string;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const child = this.children[0];\n if (child instanceof BaseToken) {\n this.qualifier = child.type as Keyword;\n this.lexeme = child.lexeme;\n } else {\n this.qualifier = (<BasicTypeQualifier>child).qualifier;\n this.lexeme = (<BasicTypeQualifier>child).lexeme;\n }\n }\n }\n\n abstract class BasicTypeQualifier extends TreeNode {\n qualifier: Keyword;\n lexeme: string;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const token = this.children[0] as BaseToken;\n this.qualifier = token.type as Keyword;\n this.lexeme = token.lexeme;\n }\n }\n\n // #if _VERBOSE\n @ASTNodeDecorator(NoneTerminal.storage_qualifier)\n export class StorageQualifier extends BasicTypeQualifier {}\n\n @ASTNodeDecorator(NoneTerminal.precision_qualifier)\n export class PrecisionQualifier extends BasicTypeQualifier {}\n\n @ASTNodeDecorator(NoneTerminal.interpolation_qualifier)\n export class InterpolationQualifier extends BasicTypeQualifier {}\n\n @ASTNodeDecorator(NoneTerminal.invariant_qualifier)\n export class InvariantQualifier extends BasicTypeQualifier {}\n // #endif\n\n @ASTNodeDecorator(NoneTerminal.type_specifier)\n export class TypeSpecifier extends TreeNode {\n type: GalaceanDataType;\n lexeme: string;\n arraySize?: number;\n isCustom: boolean;\n\n override init(): void {\n this.arraySize = undefined;\n }\n get arraySpecifier(): ArraySpecifier {\n return this.children[1] as ArraySpecifier;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n const firstChild = children[0] as TypeSpecifierNonArray;\n this.type = firstChild.type;\n this.lexeme = firstChild.lexeme;\n this.arraySize = (children?.[1] as ArraySpecifier)?.size;\n this.isCustom = typeof this.type === \"string\";\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.array_specifier)\n export class ArraySpecifier extends TreeNode {\n size: number | undefined;\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const integerConstantExpr = this.children[1] as IntegerConstantExpression;\n this.size = integerConstantExpr.value;\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.integer_constant_expression_operator)\n export class IntegerConstantExpressionOperator extends TreeNode {\n compute: (a: number, b: number) => number;\n lexeme: string;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const operator = this.children[0] as BaseToken;\n this.lexeme = operator.lexeme;\n switch (operator.type) {\n case ETokenType.PLUS:\n this.compute = (a, b) => a + b;\n break;\n case ETokenType.DASH:\n this.compute = (a, b) => a - b;\n break;\n case ETokenType.STAR:\n this.compute = (a, b) => a * b;\n break;\n case ETokenType.SLASH:\n this.compute = (a, b) => a / b;\n break;\n case ETokenType.PERCENT:\n this.compute = (a, b) => a % b;\n break;\n default:\n sa.reportError(operator.location, `not implemented operator ${operator.lexeme}`);\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.integer_constant_expression)\n export class IntegerConstantExpression extends TreeNode {\n value?: number;\n\n override init(): void {\n this.value = undefined;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n const child = this.children[0];\n if (child instanceof BaseToken) {\n this.value = Number(child.lexeme);\n }\n // #if _VERBOSE\n else {\n const id = child as VariableIdentifier;\n if (!ParserUtils.typeCompatible(Keyword.INT, id.typeInfo)) {\n sa.reportError(id.location, \"Invalid integer.\");\n return;\n }\n }\n // #endif\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.type_specifier_nonarray)\n export class TypeSpecifierNonArray extends TreeNode {\n type: GalaceanDataType;\n lexeme: string;\n\n override init(): void {\n const tt = this.children[0];\n if (tt instanceof BaseToken) {\n // ID — user-defined struct identifier; the lexeme is the type name.\n this.type = tt.lexeme;\n this.lexeme = tt.lexeme;\n } else if (tt instanceof MacroCallSymbol) {\n // Macro-as-type-alias — value resolved at variant codegen, type is `TypeAny` here.\n this.type = TypeAny;\n this.lexeme = tt.macroName;\n } else {\n this.type = (tt as ExtBuiltinTypeSpecifierNonArray).type as GalaceanDataType;\n this.lexeme = (tt as ExtBuiltinTypeSpecifierNonArray).lexeme;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.ext_builtin_type_specifier_nonarray)\n export class ExtBuiltinTypeSpecifierNonArray extends TreeNode {\n type: TokenType;\n lexeme: string;\n\n override init(): void {\n const token = this.children[0] as BaseToken;\n this.type = token.type;\n this.lexeme = token.lexeme;\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.init_declarator_list)\n export class InitDeclaratorList extends TreeNode {\n typeInfo: SymbolType;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n let sm: VarSymbol;\n const children = this.children;\n const childrenLength = children.length;\n if (childrenLength === 1) {\n const { typeSpecifier, arraySpecifier } = children[0] as SingleDeclaration;\n this.typeInfo = new SymbolType(typeSpecifier.type, typeSpecifier.lexeme, arraySpecifier);\n } else {\n const initDeclList = children[0] as InitDeclaratorList;\n this.typeInfo = initDeclList.typeInfo;\n }\n\n if (childrenLength === 3 || childrenLength === 5) {\n const id = children[2] as BaseToken;\n sm = new VarSymbol(id.lexeme, this.typeInfo, false, this);\n sa.symbolTableStack.insert(sm);\n } else if (childrenLength === 4 || childrenLength === 6) {\n const typeInfo = this.typeInfo;\n const arraySpecifier = this.children[3] as ArraySpecifier;\n // #if _VERBOSE\n if (typeInfo.arraySpecifier && arraySpecifier) {\n sa.reportError(arraySpecifier.location, \"Array of array is not supported.\");\n }\n // #endif\n typeInfo.arraySpecifier = arraySpecifier;\n const id = children[2] as BaseToken;\n sm = new VarSymbol(id.lexeme, typeInfo, false, this);\n sa.symbolTableStack.insert(sm);\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.identifier_list)\n export class IdentifierList extends TreeNode {\n idList: BaseToken[] = [];\n\n override init(): void {\n this.idList.length = 0;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const { children, idList: curIdList } = this;\n if (children.length === 2) {\n curIdList.push(children[1] as BaseToken);\n } else {\n const list = children[0] as IdentifierList;\n const id = children[2] as BaseToken;\n const listIdLength = list.idList.length;\n curIdList.length = listIdLength + 1;\n\n for (let i = 0; i < listIdLength; i++) {\n curIdList[i] = list.idList[i];\n }\n curIdList[listIdLength] = id;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.declaration)\n export class Declaration extends TreeNode {\n override codeGen(visitor: CodeGenVisitor): string {\n return this.setCache(visitor.visitDeclaration(this));\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.function_prototype)\n export class FunctionProtoType extends TreeNode {\n ident: BaseToken;\n returnType: FullySpecifiedType;\n parameterList: IParamInfo[];\n paramSig: GalaceanDataType[] | undefined;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const declarator = this.children[0] as FunctionDeclarator;\n this.ident = declarator.ident;\n this.returnType = declarator.returnType;\n this.parameterList = declarator.parameterInfoList;\n this.paramSig = declarator.paramSig;\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.function_declarator)\n export class FunctionDeclarator extends TreeNode {\n ident: BaseToken;\n returnType: FullySpecifiedType;\n parameterInfoList: IParamInfo[] | undefined;\n paramSig: GalaceanDataType[] | undefined;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n sa.curFunctionInfo.returnStatement = null;\n sa.curFunctionInfo.header = this;\n\n const children = this.children;\n const header = children[0] as FunctionHeader;\n const parameterList = children[1] as FunctionParameterList | undefined;\n this.ident = header.ident;\n this.returnType = header.returnType;\n this.parameterInfoList = parameterList?.parameterInfoList;\n this.paramSig = parameterList?.paramSig;\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.function_header)\n export class FunctionHeader extends TreeNode {\n ident: BaseToken;\n returnType: FullySpecifiedType;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n sa.pushScope();\n const children = this.children;\n this.ident = children[1] as BaseToken;\n this.returnType = children[0] as FullySpecifiedType;\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n return this.setCache(visitor.visitFunctionHeader(this));\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.function_parameter_list)\n export class FunctionParameterList extends TreeNode {\n parameterInfoList: IParamInfo[] = [];\n paramSig: GalaceanDataType[] = [];\n\n override init(): void {\n this.parameterInfoList.length = 0;\n this.paramSig.length = 0;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n const { parameterInfoList, paramSig } = this;\n\n if (children[0] instanceof ParameterDeclaration) {\n const decl = children[0];\n parameterInfoList.push({ ident: decl.ident, typeInfo: decl.typeInfo, astNode: decl });\n paramSig.push(decl.typeInfo?.type ?? TypeAny);\n } else if (children[2] instanceof ParameterDeclaration) {\n const list = children[0] as FunctionParameterList;\n const decl = children[2];\n\n parameterInfoList.push(...list.parameterInfoList, {\n ident: decl.ident,\n typeInfo: decl.typeInfo,\n astNode: decl\n });\n paramSig.push(...list.paramSig, decl.typeInfo?.type ?? TypeAny);\n } else if (children[0] instanceof FunctionParameterList && children[1] instanceof MacroParamBlock) {\n parameterInfoList.push(...children[0].parameterInfoList, { astNode: children[1] });\n paramSig.push(...children[0].paramSig, TypeAny);\n } else if (children[0] instanceof MacroParamBlock) {\n parameterInfoList.push({ astNode: children[0] });\n paramSig.push(TypeAny);\n }\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n return this.setCache(visitor.visitFunctionParameterList(this));\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.macro_param_case_list)\n export class MacroParamCaseList extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.macro_param_block)\n export class MacroParamBlock extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.macro_parameter_branch)\n export class MacroParameterBranch extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.parameter_declaration)\n export class ParameterDeclaration extends TreeNode {\n // Some syntax is not recognized, eg.\n // `#define TEXTURE2D_SHADOW_PARAM(shadowMap) mediump sampler2D shadowMap`\n typeInfo?: SymbolType;\n ident?: BaseToken;\n\n override init(): void {\n this.typeInfo = undefined;\n this.ident = undefined;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n let parameterDeclarator: ParameterDeclarator | undefined;\n\n if (children[0] instanceof ParameterDeclarator) {\n parameterDeclarator = children[0];\n } else if (children[1] instanceof ParameterDeclarator) {\n parameterDeclarator = children[1];\n }\n\n if (parameterDeclarator) {\n this.typeInfo = parameterDeclarator.typeInfo;\n this.ident = parameterDeclarator.ident;\n const varSymbol = new VarSymbol(\n parameterDeclarator.ident.lexeme,\n parameterDeclarator.typeInfo,\n false,\n parameterDeclarator\n );\n sa.symbolTableStack.insert(varSymbol);\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.parameter_declarator)\n export class ParameterDeclarator extends TreeNode {\n ident: BaseToken;\n typeInfo: SymbolType;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n this.ident = children[1] as BaseToken;\n const typeSpecifier = children[0] as TypeSpecifier;\n const arraySpecifier = children[2] as ArraySpecifier;\n this.typeInfo = new SymbolType(typeSpecifier.type, typeSpecifier.lexeme, arraySpecifier);\n }\n }\n\n // #if _VERBOSE\n @ASTNodeDecorator(NoneTerminal.simple_statement)\n export class SimpleStatement extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.compound_statement)\n export class CompoundStatement extends TreeNode {}\n // #endif\n\n @ASTNodeDecorator(NoneTerminal.compound_statement_no_scope)\n export class CompoundStatementNoScope extends TreeNode {}\n\n // #if _VERBOSE\n @ASTNodeDecorator(NoneTerminal.statement)\n export class Statement extends TreeNode {}\n // #endif\n\n @ASTNodeDecorator(NoneTerminal.statement_list)\n export class StatementList extends TreeNode {\n override codeGen(visitor: CodeGenVisitor): string {\n return this.setCache(visitor.visitStatementList(this));\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.function_definition)\n export class FunctionDefinition extends TreeNode {\n returnStatement?: ASTNode.JumpStatement;\n protoType: FunctionProtoType;\n statements: CompoundStatementNoScope;\n isInMacroBranch: boolean;\n\n override init(): void {\n this.returnStatement = undefined;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n this.protoType = children[0] as FunctionProtoType;\n this.statements = children[1] as CompoundStatementNoScope;\n\n sa.popScope();\n const sm = new FnSymbol(this.protoType.ident.lexeme, this);\n sa.symbolTableStack.insert(sm);\n this.isInMacroBranch = sa.symbolTableStack.isInMacroBranch;\n\n const { curFunctionInfo } = sa;\n const { header, returnStatement } = curFunctionInfo;\n if (header.returnType.type === Keyword.VOID) {\n if (returnStatement) {\n sa.reportError(header.returnType.location, \"Return in void function.\");\n }\n } else {\n if (!returnStatement) {\n sa.reportError(header.returnType.location, `No return statement found.`);\n } else {\n this.returnStatement = returnStatement;\n }\n }\n curFunctionInfo.header = undefined;\n curFunctionInfo.returnStatement = undefined;\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n return this.setCache(visitor.visitFunctionDefinition(this));\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.function_call)\n export class FunctionCall extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n this.type = (this.children[0] as FunctionCallGeneric).type;\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n return this.setCache(visitor.visitFunctionCall(this));\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.function_call_generic)\n export class FunctionCallGeneric extends ExpressionAstNode {\n fnSymbol: FnSymbol | StructSymbol | undefined;\n\n override init(): void {\n super.init();\n this.fnSymbol = undefined;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const functionIdentifier = this.children[0] as FunctionIdentifier;\n if (functionIdentifier.isBuiltin) {\n this.type = functionIdentifier.ident;\n } else {\n const fnIdent = <string>functionIdentifier.ident;\n\n let paramSig: NonGenericGalaceanType[] | undefined;\n if (this.children.length === 4) {\n const paramList = this.children[2];\n if (paramList instanceof FunctionCallParameterList) {\n paramSig = paramList.paramSig as any;\n }\n }\n // #if _VERBOSE\n const builtinFn = BuiltinFunction.resolveOverload(fnIdent, paramSig);\n if (builtinFn) {\n this.type = builtinFn.realReturnType;\n return;\n }\n // #endif\n\n const lookupSymbol = SemanticAnalyzer._lookupSymbol;\n lookupSymbol.set(fnIdent, ESymbolType.FN, undefined, undefined, paramSig);\n\n const fnSymbol = sa.symbolTableStack.lookup(lookupSymbol, true) as FnSymbol;\n\n if (!fnSymbol) {\n // #if _VERBOSE\n sa.reportError(this.location, `No overload function type found: ${functionIdentifier.ident}`);\n // #endif\n return;\n }\n this.type = fnSymbol?.dataType?.type;\n this.fnSymbol = fnSymbol;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.function_call_parameter_list)\n export class FunctionCallParameterList extends TreeNode {\n paramSig: GalaceanDataType[] = [];\n paramNodes: Array<AssignmentExpression | MacroCallArgBlock> = [];\n\n override init(): void {\n this.paramSig.length = 0;\n this.paramNodes.length = 0;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const { children, paramSig, paramNodes } = this;\n if (children[0] instanceof AssignmentExpression) {\n const expr = children[0];\n paramSig.push(expr.type);\n paramNodes.push(expr);\n } else if (children[2] instanceof AssignmentExpression) {\n const list = children[0] as FunctionCallParameterList;\n const decl = children[2] as AssignmentExpression;\n paramSig.push(...list.paramSig, decl.type);\n paramNodes.push(...list.paramNodes, decl);\n } else if (children[0] instanceof FunctionCallParameterList && children[1] instanceof MacroCallArgBlock) {\n paramSig.push(...children[0].paramSig, TypeAny);\n paramNodes.push(...children[0].paramNodes, children[1]);\n } else if (children[0] instanceof MacroCallArgBlock) {\n paramSig.push(TypeAny);\n paramNodes.push(children[0]);\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.macro_call_arg_case_list)\n export class MacroCallArgCaseList extends TreeNode {}\n @ASTNodeDecorator(NoneTerminal.macro_call_arg_block)\n export class MacroCallArgBlock extends TreeNode {}\n @ASTNodeDecorator(NoneTerminal.macro_call_arg_branch)\n export class MacroCallArgBranch extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.precision_specifier)\n export class PrecisionSpecifier extends TreeNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (!sa.symbolTableStack.isInMacroBranch) {\n sa.shaderData.globalPrecisions.push(this);\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.function_identifier)\n export class FunctionIdentifier extends TreeNode {\n ident: GalaceanDataType;\n lexeme: string;\n isBuiltin: boolean;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const typeSpecifier = this.children[0] as TypeSpecifier;\n\n this.ident = typeSpecifier.type;\n this.lexeme = typeSpecifier.lexeme;\n this.isBuiltin = typeof this.ident !== \"string\";\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n return this.setCache(visitor.visitFunctionIdentifier(this));\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.assignment_expression)\n export class AssignmentExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n const expr = this.children[0] as ConditionalExpression;\n this.type = expr.type ?? TypeAny;\n } else {\n const expr = this.children[2] as AssignmentExpression;\n this.type = expr.type ?? TypeAny;\n }\n }\n }\n\n // #if _VERBOSE\n @ASTNodeDecorator(NoneTerminal.assignment_operator)\n export class AssignmentOperator extends TreeNode {}\n // #endif\n\n @ASTNodeDecorator(NoneTerminal.expression)\n export class Expression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n const expr = this.children[0] as AssignmentExpression;\n this.type = expr.type;\n } else {\n const expr = this.children[2] as AssignmentExpression;\n this.type = expr.type;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.primary_expression)\n export class PrimaryExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n const id = this.children[0];\n if (id instanceof VariableIdentifier) {\n this.type = id.typeInfo ?? TypeAny;\n } else {\n switch ((<BaseToken>id).type) {\n case ETokenType.INT_CONSTANT:\n this._type = Keyword.INT;\n break;\n case ETokenType.FLOAT_CONSTANT:\n this.type = Keyword.FLOAT;\n break;\n case Keyword.True:\n case Keyword.False:\n this.type = Keyword.BOOL;\n break;\n }\n }\n } else {\n const expression = this.children[1] as Expression;\n this.type = expression.type;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.postfix_expression)\n export class PostfixExpression extends ExpressionAstNode {\n override init(): void {\n super.init();\n if (this.children.length === 1) {\n const child = this.children[0] as PrimaryExpression | FunctionCall;\n this.type = child.type;\n }\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n return this.setCache(visitor.visitPostfixExpression(this));\n }\n }\n\n // #if _VERBOSE\n @ASTNodeDecorator(NoneTerminal.unary_operator)\n export class UnaryOperator extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.unary_expression)\n export class UnaryExpression extends ExpressionAstNode {\n override init(): void {\n this.type = (this.children[0] as PostfixExpression).type;\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.multiplicative_expression)\n export class MultiplicativeExpression extends ExpressionAstNode {\n override init(): void {\n super.init();\n if (this.children.length === 1) {\n this.type = (this.children[0] as UnaryExpression).type;\n // TODO: Temporarily remove type deduce due to generic function type issue.\n // } else {\n // const exp1 = this.children[0] as MultiplicativeExpression;\n // const exp2 = this.children[2] as UnaryExpression;\n // if (exp1.type === exp2.type) {\n // this.type = exp1.type;\n // }\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.additive_expression)\n export class AdditiveExpression extends ExpressionAstNode {\n override init(): void {\n super.init();\n if (this.children.length === 1) {\n this.type = (this.children[0] as MultiplicativeExpression).type;\n // TODO: Temporarily remove type deduce due to generic function type issue.\n // } else {\n // const exp1 = this.children[0] as AdditiveExpression;\n // const exp2 = this.children[2] as MultiplicativeExpression;\n // if (exp1.type === exp2.type) {\n // this.type = exp1.type;\n // }\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.shift_expression)\n export class ShiftExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const expr = this.children[0] as ExpressionAstNode;\n this.type = expr.type;\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.relational_expression)\n export class RelationalExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n this.type = (<ShiftExpression>this.children[0]).type;\n } else {\n this.type = Keyword.BOOL;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.equality_expression)\n export class EqualityExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n this.type = (<RelationalExpression>this.children[0]).type;\n } else {\n this.type = Keyword.BOOL;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.and_expression)\n export class AndExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n this.type = (<AndExpression>this.children[0]).type;\n } else {\n this.type = Keyword.UINT;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.exclusive_or_expression)\n export class ExclusiveOrExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n this.type = (<AndExpression>this.children[0]).type;\n } else {\n this.type = Keyword.UINT;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.inclusive_or_expression)\n export class InclusiveOrExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n this.type = (<ExclusiveOrExpression>this.children[0]).type;\n } else {\n this.type = Keyword.UINT;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.logical_and_expression)\n export class LogicalAndExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n this.type = (<InclusiveOrExpression>this.children[0]).type;\n } else {\n this.type = Keyword.BOOL;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.logical_xor_expression)\n export class LogicalXorExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n this.type = (<LogicalAndExpression>this.children[0]).type;\n } else {\n this.type = Keyword.BOOL;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.logical_or_expression)\n export class LogicalOrExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n this.type = (<LogicalXorExpression>this.children[0]).type;\n } else {\n this.type = Keyword.BOOL;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.conditional_expression)\n export class ConditionalExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n this.type = (<LogicalOrExpression>this.children[0]).type;\n }\n }\n }\n // #endif\n\n @ASTNodeDecorator(NoneTerminal.struct_specifier)\n export class StructSpecifier extends TreeNode {\n ident?: BaseToken;\n propList: StructProp[];\n macroExpressions: MacroExpression[];\n isInMacroBranch: boolean;\n\n override init(): void {\n this.ident = undefined;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n this.isInMacroBranch = sa.symbolTableStack.isInMacroBranch;\n if (children.length === 6) {\n this.ident = children[1] as BaseToken;\n sa.symbolTableStack.insert(new StructSymbol(this.ident.lexeme, this));\n\n this.propList = (children[3] as StructDeclarationList).propList;\n this.macroExpressions = (children[3] as StructDeclarationList).macroExpressions;\n } else {\n this.propList = (children[2] as StructDeclarationList).propList;\n this.macroExpressions = (children[2] as StructDeclarationList).macroExpressions;\n }\n }\n\n override codeGen(visitor: CodeGenVisitor) {\n return this.setCache(visitor.visitStructSpecifier(this));\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.struct_declaration_list)\n export class StructDeclarationList extends TreeNode {\n propList: StructProp[] = [];\n macroExpressions: MacroExpression[] = [];\n\n override init(): void {\n this.propList.length = 0;\n this.macroExpressions.length = 0;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const { children, propList, macroExpressions } = this;\n\n if (children.length === 1) {\n propList.push(...(children[0] as StructDeclaration).props);\n macroExpressions.push(...(children[0] as StructDeclaration).macroExpressions);\n } else {\n propList.push(...(children[0] as StructDeclarationList).propList);\n propList.push(...(children[1] as StructDeclaration).props);\n macroExpressions.push(...(children[0] as StructDeclarationList).macroExpressions);\n macroExpressions.push(...(children[1] as StructDeclaration).macroExpressions);\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.struct_declaration)\n export class StructDeclaration extends TreeNode {\n props: StructProp[] = [];\n macroExpressions: MacroExpression[] = [];\n\n private _typeSpecifier?: TypeSpecifier;\n private _declaratorList?: StructDeclaratorList;\n\n override init(): void {\n this._typeSpecifier = undefined;\n this._declaratorList = undefined;\n this.props.length = 0;\n this.macroExpressions.length = 0;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const { children, props, macroExpressions } = this;\n\n if (children.length === 1) {\n const macroStructDeclaration = children[0] as MacroStructDeclaration;\n const macroProps = macroStructDeclaration.props;\n\n for (let i = 0, length = macroProps.length; i < length; i++) {\n macroProps[i].isInMacroBranch = true;\n props.push(macroProps[i]);\n }\n\n macroExpressions.push(...macroStructDeclaration.macroExpressions);\n\n return;\n }\n\n if (children.length === 3) {\n this._typeSpecifier = children[0] as TypeSpecifier;\n this._declaratorList = children[1] as StructDeclaratorList;\n } else {\n this._typeSpecifier = children[1] as TypeSpecifier;\n this._declaratorList = children[2] as StructDeclaratorList;\n }\n\n const firstChild = children[0];\n const { type, lexeme } = this._typeSpecifier;\n const isInMacroBranch = sa.symbolTableStack.isInMacroBranch;\n if (firstChild instanceof LayoutQualifier) {\n const declarator = children[2] as StructDeclarator;\n const typeInfo = new SymbolType(type, lexeme);\n const prop = new StructProp(typeInfo, declarator.ident, firstChild.index, isInMacroBranch);\n props.push(prop);\n } else {\n const declaratorList = this._declaratorList.declaratorList;\n const declaratorListLength = declaratorList.length;\n props.length = declaratorListLength;\n for (let i = 0; i < declaratorListLength; i++) {\n const declarator = declaratorList[i];\n const typeInfo = new SymbolType(type, lexeme, declarator.arraySpecifier);\n const prop = new StructProp(typeInfo, declarator.ident, undefined, isInMacroBranch);\n props[i] = prop;\n }\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.macro_struct_declaration)\n export class MacroStructDeclaration extends TreeNode {\n props: StructProp[] = [];\n macroExpressions: MacroExpression[] = [];\n\n override init(): void {\n this.props.length = 0;\n this.macroExpressions.length = 0;\n }\n\n override semanticAnalyze(): void {\n const children = this.children;\n\n this.macroExpressions.push(children[0] as MacroPushContext);\n\n if (children.length === 3) {\n this.props.push(...(children[1] as StructDeclarationList).propList);\n this.props.push(...(children[2] as MacroStructBranch).props);\n this.macroExpressions.push(...(children[1] as StructDeclarationList).macroExpressions);\n this.macroExpressions.push(...(children[2] as MacroStructBranch).macroExpressions);\n } else {\n this.props.push(...(children[1] as MacroStructBranch).props);\n this.macroExpressions.push(...(children[1] as MacroStructBranch).macroExpressions);\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.macro_struct_branch)\n export class MacroStructBranch extends TreeNode {\n props: StructProp[] = [];\n macroExpressions: MacroExpression[] = [];\n\n override init(): void {\n this.props.length = 0;\n this.macroExpressions.length = 0;\n }\n\n override semanticAnalyze(): void {\n const children = this.children;\n const lastNode = children[children.length - 1];\n\n this.macroExpressions.push(children[0] as MacroPopContext | MacroElseExpression | MacroElifExpression);\n\n if (children[1] instanceof StructDeclarationList) {\n this.props.push(...children[1].propList);\n this.macroExpressions.push(...children[1].macroExpressions);\n }\n\n if (lastNode instanceof MacroStructBranch) {\n this.props.push(...lastNode.props);\n this.macroExpressions.push(...lastNode.macroExpressions);\n }\n\n if (children.length > 1 && lastNode instanceof MacroPopContext) {\n this.macroExpressions.push(lastNode);\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.layout_qualifier)\n export class LayoutQualifier extends TreeNode {\n index: number;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n this.index = Number((<BaseToken>this.children[4]).lexeme);\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.struct_declarator_list)\n export class StructDeclaratorList extends TreeNode {\n declaratorList: StructDeclarator[] = [];\n\n override init(): void {\n this.declaratorList.length = 0;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const { children, declaratorList } = this;\n if (children.length === 1) {\n declaratorList.push(children[0] as StructDeclarator);\n } else {\n const list = children[0] as StructDeclaratorList;\n const declarator = children[1] as StructDeclarator;\n const listLength = list.declaratorList.length;\n declaratorList.length = listLength + 1;\n for (let i = 0; i < listLength; i++) {\n declaratorList[i] = list.declaratorList[i];\n }\n declaratorList[listLength] = declarator;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.struct_declarator)\n export class StructDeclarator extends TreeNode {\n ident: BaseToken;\n arraySpecifier: ArraySpecifier | undefined;\n\n override init(): void {\n this.arraySpecifier = undefined;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n this.ident = children[0] as BaseToken;\n this.arraySpecifier = children[1] as ArraySpecifier;\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.variable_declaration)\n export class VariableDeclaration extends TreeNode {\n type: FullySpecifiedType;\n isStatic: boolean;\n\n override init(): void {\n this.isStatic = false;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n const type = children[0] as FullySpecifiedType;\n const ident = children[1] as BaseToken;\n this.type = type;\n const sm = new VarSymbol(ident.lexeme, new SymbolType(type.type, type.typeSpecifier.lexeme), true, this);\n\n sa.symbolTableStack.insert(sm);\n\n if (children.length === 4) {\n this.isStatic = true;\n }\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n if (this.isStatic) {\n return super.codeGen(visitor);\n } else {\n return this.setCache(visitor.visitGlobalVariableDeclaration(this));\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.variable_declaration_list)\n export class VariableDeclarationList extends TreeNode {\n type: FullySpecifiedType;\n variableDeclarations: VariableDeclaration[] = [];\n\n override init(): void {\n this.variableDeclarations.length = 0;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const { children } = this;\n const length = children.length;\n const child = children[0] as VariableDeclaration | VariableDeclarationList;\n const type = child.type;\n this.type = type;\n\n if (child instanceof VariableDeclaration) {\n this.variableDeclarations.push(child);\n } else {\n this.variableDeclarations.push(...child.variableDeclarations);\n\n const ident = children[2] as BaseToken;\n\n const newVariable = VariableDeclaration.pool.get() as VariableDeclaration;\n if (length === 3) {\n // variable_declaration_list ',' id\n newVariable.set(ident.location, [type, ident]);\n } else {\n // variable_declaration_list ',' id array_specifier\n newVariable.set(ident.location, [type, ident, children[3] as ArraySpecifier]);\n }\n newVariable.semanticAnalyze(sa);\n this.variableDeclarations.push(newVariable);\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.variable_identifier)\n export class VariableIdentifier extends TreeNode {\n // @todo: typeInfo may be multiple types\n typeInfo: GalaceanDataType;\n referenceGlobalSymbolNames: string[] = [];\n\n private _symbols: Array<VarSymbol | FnSymbol> = [];\n\n override init(): void {\n this.typeInfo = TypeAny;\n this.referenceGlobalSymbolNames.length = 0;\n this._symbols.length = 0;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const child = this.children[0] as BaseToken | MacroCallSymbol | MacroCallFunction;\n const referenceGlobalSymbolNames = this.referenceGlobalSymbolNames;\n const symbols = this._symbols;\n\n // Real references — every name must resolve; miss is an authoring error.\n const needFindNames = child instanceof BaseToken ? [child.lexeme] : child.referenceSymbolNames;\n\n for (let i = 0; i < needFindNames.length; i++) {\n const name = needFindNames[i];\n\n if (sa.macroDefineList[name]) continue;\n\n // only `macro_call` CFG can reference fnSymbols, others fnSymbols are referenced in `function_call_generic` CFG\n if (!(child instanceof BaseToken) && BuiltinFunction.isExist(name)) {\n continue;\n }\n\n const builtinVar = BuiltinVariable.getVar(name);\n if (builtinVar) {\n this.typeInfo = builtinVar.type;\n continue;\n }\n\n const hit = VariableIdentifier._lookupAndMarkGlobalReference(\n sa,\n name,\n symbols,\n referenceGlobalSymbolNames,\n this.location\n );\n // Expression-style macros have their own value AST; its real type isn't\n // the type of any single `referenceSymbolNames` entry (`v` in `v.v_uv`\n // is a `Varyings` struct but the macro call site's type should be the\n // member type). Skip type inference for those and keep TypeAny.\n if (hit && (child instanceof BaseToken || !child.hasAstValue)) {\n this.typeInfo = symbols[0].dataType?.type;\n }\n }\n\n // FXAA-style cross-arm shadowing: at a MACRO_CALL use site, silently\n // probe the macro name itself so any sibling-arm `var` declaration is\n // marked as referenced and codegen keeps it. Miss is the common\n // single-arm case — no warning, no type inference. Grammar half of the\n // cross-arm fix is in 87cb2b5f0.\n if (!(child instanceof BaseToken)) {\n VariableIdentifier._probeCrossArmShadowing(sa, child, needFindNames, symbols, referenceGlobalSymbolNames);\n }\n }\n\n /** Run the cross-arm shadowing probe for a MACRO_CALL site. No-op when the\n * probe isn't meaningful: no macro name, name already resolved as a real\n * reference, or name is a builtin (builtins can't be shadowed by a\n * sibling-arm decl). */\n private static _probeCrossArmShadowing(\n sa: SemanticAnalyzer,\n child: MacroCallSymbol | MacroCallFunction,\n needFindNames: string[],\n symbols: (VarSymbol | FnSymbol)[],\n referenceGlobalSymbolNames: string[]\n ): void {\n const macroName = child.macroName;\n if (!macroName) return;\n if (needFindNames.indexOf(macroName) !== -1) return; // already looked up as a real reference\n if (BuiltinFunction.isExist(macroName) || BuiltinVariable.getVar(macroName)) return; // builtins can't be shadowed\n VariableIdentifier._lookupAndMarkGlobalReference(sa, macroName, symbols, referenceGlobalSymbolNames, null);\n }\n\n /** Look up `name` in the symbol stack and, if a global var/fn declaration\n * exists, push it into `referenceGlobalSymbolNames`. Returns `true` iff\n * the lookup hit (caller can then derive type info). When `missWarnLoc`\n * is non-null, a miss reports a \"declared before used\" warning; pass\n * `null` for silent probes (e.g. FXAA-style cross-arm shadowing).\n *\n * Mutation contract: `symbols` is used as scratch storage — `lookupAll`\n * clears and refills it. On hit, the caller may read `symbols[0]` for\n * type info before the next call overwrites the contents. */\n private static _lookupAndMarkGlobalReference(\n sa: SemanticAnalyzer,\n name: string,\n symbols: (VarSymbol | FnSymbol)[],\n referenceGlobalSymbolNames: string[],\n missWarnLoc: ShaderRange | null\n ): boolean {\n const lookupSymbol = SemanticAnalyzer._lookupSymbol;\n lookupSymbol.set(name, ESymbolType.Any);\n sa.symbolTableStack.lookupAll(lookupSymbol, true, symbols);\n\n if (!symbols.length) {\n // #if _VERBOSE\n if (missWarnLoc) {\n sa.reportWarning(missWarnLoc, `Please sure the identifier \"${name}\" will be declared before used.`);\n }\n // #endif\n return false;\n }\n const currentScopeSymbol = <VarSymbol | FnSymbol>sa.symbolTableStack.scope.getSymbol(lookupSymbol, true);\n const isGlobal = currentScopeSymbol\n ? currentScopeSymbol instanceof FnSymbol || currentScopeSymbol.isGlobalVariable\n : symbols.some((s) => s instanceof FnSymbol || s.isGlobalVariable);\n if (isGlobal && referenceGlobalSymbolNames.indexOf(name) === -1) {\n referenceGlobalSymbolNames.push(name);\n }\n return true;\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n return this.setCache(visitor.visitVariableIdentifier(this));\n }\n\n getLexeme(visitor: CodeGenVisitor): string {\n const child = this.children[0] as BaseToken | MacroCallSymbol | MacroCallFunction;\n if (child instanceof BaseToken) {\n return child.lexeme;\n } else {\n return child.codeGen(visitor);\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.gs_shader_program)\n export class GLShaderProgram extends TreeNode {\n shaderData: ShaderData;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n this.shaderData = sa.shaderData;\n this.shaderData.symbolTable = sa.symbolTableStack.scope;\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.global_declaration)\n export class GlobalDeclaration extends TreeNode {\n macroExpressions: Array<MacroExpression | MacroUndef | BaseToken> = [];\n\n override init(): void {\n this.macroExpressions.length = 0;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const child = this.children[0];\n\n if (\n child instanceof MacroUndef ||\n child instanceof GlobalMacroIfStatement ||\n child instanceof MacroDefine ||\n child instanceof BaseToken\n ) {\n sa.shaderData.globalMacroDeclarations.push(this);\n\n if (child instanceof GlobalMacroIfStatement) {\n this.macroExpressions.push(...child.macroExpressions);\n } else {\n this.macroExpressions.push(child);\n }\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.macro_undef)\n export class MacroUndef extends TreeNode {\n override codeGen(visitor: CodeGenVisitor) {\n return this.setCache(super.codeGen(visitor) + \"\\n\");\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.macro_push_context)\n export class MacroPushContext extends TreeNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n sa.symbolTableStack._macroLevel++;\n }\n\n override codeGen(visitor: CodeGenVisitor) {\n return this.setCache(\"\\n\" + super.codeGen(visitor) + \"\\n\");\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.macro_pop_context)\n export class MacroPopContext extends TreeNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n sa.symbolTableStack._macroLevel--;\n }\n\n override codeGen(visitor: CodeGenVisitor) {\n return this.setCache(\"\\n\" + super.codeGen(visitor) + \"\\n\");\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.macro_elif_expression)\n export class MacroElifExpression extends TreeNode {\n override codeGen(visitor: CodeGenVisitor) {\n return this.setCache(\"\\n\" + super.codeGen(visitor) + \"\\n\");\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.macro_else_expression)\n export class MacroElseExpression extends TreeNode {\n override codeGen(visitor: CodeGenVisitor) {\n return this.setCache(\"\\n\" + super.codeGen(visitor) + \"\\n\");\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.global_macro_declaration)\n export class GlobalMacroDeclaration extends TreeNode {\n macroExpressions: MacroExpression[] = [];\n\n override init(): void {\n this.macroExpressions.length = 0;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n const macroExpressions = this.macroExpressions;\n\n if (children.length === 1) {\n macroExpressions.push(...(children[0] as GlobalDeclaration).macroExpressions);\n } else {\n macroExpressions.push(...(children[0] as GlobalMacroDeclaration).macroExpressions);\n macroExpressions.push(...(children[1] as GlobalDeclaration).macroExpressions);\n }\n }\n\n override codeGen(visitor: CodeGenVisitor) {\n const children = this.children as TreeNode[];\n if (children.length === 1) {\n return this.setCache(children[0].codeGen(visitor));\n } else {\n return this.setCache(`${children[0].codeGen(visitor)}\\n${children[1].codeGen(visitor)}`);\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.global_macro_if_statement)\n export class GlobalMacroIfStatement extends TreeNode {\n macroExpressions: MacroExpression[] = [];\n\n override init(): void {\n this.macroExpressions.length = 0;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n const macroExpressions = this.macroExpressions;\n\n if (children.length === 3) {\n macroExpressions.push(children[0] as MacroPushContext);\n macroExpressions.push(...(children[1] as GlobalMacroDeclaration).macroExpressions);\n macroExpressions.push(...(children[2] as GlobalMacroBranch).macroExpressions);\n } else {\n macroExpressions.push(children[0] as MacroPushContext);\n macroExpressions.push(...(children[1] as GlobalMacroBranch).macroExpressions);\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.global_macro_branch)\n export class GlobalMacroBranch extends TreeNode {\n macroExpressions: MacroExpression[] = [];\n\n override init(): void {\n this.macroExpressions.length = 0;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n const lastNode = children[children.length - 1];\n\n const macroExpressions = this.macroExpressions;\n macroExpressions.push(children[0] as MacroPopContext | MacroElseExpression | MacroElifExpression);\n\n if (children[1] instanceof GlobalMacroDeclaration) {\n macroExpressions.push(...children[1].macroExpressions);\n }\n\n if (lastNode instanceof GlobalMacroBranch) {\n macroExpressions.push(...lastNode.macroExpressions);\n }\n\n if (children.length > 1 && lastNode instanceof MacroPopContext) {\n macroExpressions.push(lastNode);\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.macro_if_statement)\n export class MacroIfStatement extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.macro_branch)\n export class MacroBranch extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.macro_call_symbol)\n export class MacroCallSymbol extends TreeNode {\n referenceSymbolNames: string[] = [];\n macroName: string;\n /** True iff every `MacroDefineInfo` visible from this call site's branch\n * has a `valueAst` (i.e. was parsed via the `macro_define` CFG rule).\n * Call sites use this to skip naive type inference: an AST-form macro\n * drives the call site's type through its own value subtree, not through\n * a root of `referenceSymbolNames`. Mixed forms across branches → false,\n * fall back to legacy inference. */\n hasAstValue: boolean = false;\n /** `#define NAME(params) …` form — drives function-like vs object-like codegen. */\n isFunctionLikeMacro: boolean = false;\n /** Every visible replacement is a non-builtin identifier — assume user fn alias. */\n aliasesNonBuiltinIdent: boolean = false;\n\n override init(): void {\n this.referenceSymbolNames.length = 0;\n this.hasAstValue = false;\n this.isFunctionLikeMacro = false;\n this.aliasesNonBuiltinIdent = false;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const nameToken = this.children[0] as BaseToken;\n const macroName = nameToken.lexeme;\n this.macroName = macroName;\n\n // Filter `defList` to only entries reachable from this call site's\n // `#ifdef` branch (Issue #2980 nit fix). Without filtering, definitions\n // in disjoint branches conflate at the call site and pollute type\n // inference; with it, what remains is exactly what could substitute at\n // this position.\n const callSiteBranch = nameToken.branch;\n const defList = sa.macroDefineList[macroName];\n const refs = this.referenceSymbolNames;\n refs.length = 0;\n let visibleCount = 0;\n let allAst = true;\n let isFn = false;\n let allAliasNonBuiltinIdent = true;\n if (defList) {\n for (let i = 0, n = defList.length; i < n; i++) {\n const info = defList[i];\n if (!Lexer.isVisibleFrom(info.branch, callSiteBranch)) continue;\n visibleCount++;\n if (info.valueAst == null) allAst = false;\n if (info.isFunction) isFn = true;\n // Harvest references from the value AST. Legacy-form macros (no\n // `valueAst`) hold non-expression token sequences with no user\n // identifiers, so nothing to collect.\n if (info.valueAst) {\n MacroCallSymbol._collectIdentifierRefs(info.valueAst, info.params, refs);\n }\n // aliasesNonBuiltinIdent: macro replacement is a single non-builtin\n // identifier — best-effort proxy for \"this macro call site aliases a\n // user fn\", since uniform/const aliases would surface as a GLSL\n // compile error later anyway. Keyword replacements (`vec3`, `mat4`)\n // reach here with `valueAst === undefined` (opaque path), so they\n // automatically fail without an explicit keyword guard.\n if (info.isFunction || !info.valueAst) {\n allAliasNonBuiltinIdent = false;\n } else {\n const leadingIdent = ParserUtils.unwrapBareIdentifier(info.valueAst, { allowParens: false });\n const leadingChild = leadingIdent?.children[0];\n const leadingId = leadingChild instanceof BaseToken ? leadingChild.lexeme : undefined;\n if (!leadingId || BuiltinFunction.isExist(leadingId)) {\n allAliasNonBuiltinIdent = false;\n }\n }\n }\n }\n // Require *every* visible entry to be AST-form before taking the AST\n // shortcut: residual ambiguity (e.g. unmodeled `#if expr` letting both\n // forms through) falls back to legacy `referenceSymbolNames` inference\n // instead of polluting the call site with TypeAny.\n this.hasAstValue = visibleCount > 0 && allAst;\n this.isFunctionLikeMacro = isFn;\n this.aliasesNonBuiltinIdent = visibleCount > 0 && allAliasNonBuiltinIdent;\n }\n\n /** Push every leaf `VariableIdentifier`'s lexeme into `out`, skipping\n * function-like parameter names (local to the macro, not call-site refs)\n * and duplicates. */\n private static _collectIdentifierRefs(node: TreeNode, params: string[], out: string[]): void {\n if (node instanceof VariableIdentifier) {\n const child = node.children[0];\n if (child instanceof BaseToken) {\n const name = child.lexeme;\n if (params.indexOf(name) === -1 && out.indexOf(name) === -1) out.push(name);\n }\n return;\n }\n const children = node.children;\n if (!children) return;\n for (let i = 0, n = children.length; i < n; i++) {\n const c = children[i];\n if (c instanceof TreeNode) MacroCallSymbol._collectIdentifierRefs(c, params, out);\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.macro_call_function)\n export class MacroCallFunction extends TreeNode {\n referenceSymbolNames: string[] = [];\n macroName: string = \"\";\n hasAstValue: boolean = false;\n isFunctionLikeMacro: boolean = false;\n aliasesNonBuiltinIdent: boolean = false;\n\n override init(): void {\n this.referenceSymbolNames = [];\n this.macroName = \"\";\n this.hasAstValue = false;\n this.isFunctionLikeMacro = false;\n this.aliasesNonBuiltinIdent = false;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const child = this.children[0] as MacroCallSymbol;\n\n this.referenceSymbolNames = child.referenceSymbolNames;\n this.macroName = child.macroName;\n this.hasAstValue = child.hasAstValue;\n this.isFunctionLikeMacro = child.isFunctionLikeMacro;\n this.aliasesNonBuiltinIdent = child.aliasesNonBuiltinIdent;\n }\n\n override codeGen(visitor: CodeGenVisitor) {\n return this.setCache(visitor.visitMacroCallFunction(this));\n }\n }\n\n /**\n * `#define NAME [(params)] [value]` — expression-style macro.\n *\n * Expression-form macros are parsed into AST rather than kept as raw lexemes. The\n * optional `valueExpression` is an `AssignmentExpression` subtree that participates\n * in normal codegen — so `v.v_normal.xyz` inside a `#define` flows through\n * `visitPostfixExpression` just like an inline expression would, and varying\n * flattening/type inference/reference tracking all come for free.\n *\n * Semantic analysis does not resolve symbols inside the value (the definition-site\n * scope is not the call-site scope). Lookup happens lazily during codegen.\n */\n @ASTNodeDecorator(NoneTerminal.macro_define)\n export class MacroDefine extends TreeNode {\n macroName: string;\n isFunction: boolean;\n valueExpression?: Expression;\n\n override init(): void {\n this.macroName = \"\";\n this.isFunction = false;\n this.valueExpression = undefined;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n // children[0] is MACRO_DEFINE head token, children[1] is ID.\n this.macroName = (children[1] as BaseToken).lexeme;\n\n // If children[2] is a MACRO_DEFINE_PARAMS token, the macro is function-like\n // and its parameter list lives in that token's lexeme (e.g. \"(a, b, c)\").\n let params: string[] = [];\n let valueIdx = 2;\n if (children[2] instanceof BaseToken && (children[2] as BaseToken).type === Keyword.MACRO_DEFINE_PARAMS) {\n this.isFunction = true;\n params = ParserUtils.parseMacroParamList((children[2] as BaseToken).lexeme);\n valueIdx = 3;\n }\n\n // Grammar's macro_define value is `expression` (not `assignment_expression`),\n // so the value child is always an `Expression` wrapper — even for a single\n // assignment-expression value, which appears as `Expression > AssignmentExpression`.\n if (children[valueIdx] instanceof Expression) {\n this.valueExpression = children[valueIdx] as Expression;\n }\n\n // The Lexer already registered a regex-derived entry for this directive.\n // Upgrade that entry in place by attaching the AST subtree, rather than\n // pushing a duplicate. Match must be branch-aware: `#define X` in\n // `#ifdef A` and another `#define X` in `#else` are separate entries\n // with disjoint branch signatures, and `valueExpression` belongs to\n // whichever branch actually parsed it.\n const definingBranch = (children[1] as BaseToken).branch;\n const list = sa.macroDefineList;\n const entries = list[this.macroName];\n const sameArity = (info: MacroDefineInfo) =>\n info.isFunction === this.isFunction &&\n info.params.length === params.length &&\n info.params.every((p, i) => p === params[i]);\n const upgradable = entries?.find(\n (info) => !info.valueAst && sameArity(info) && Lexer.sameBranch(info.branch, definingBranch)\n );\n if (upgradable) {\n upgradable.valueAst = this.valueExpression;\n } else {\n // No matching preprocessor entry (lexer fed directly, no\n // `Preprocessor.parse` pass). Synthetic key based on shape is enough\n // — this path's only dedup unit is this AST-direct registration.\n const info: MacroDefineInfo = {\n isFunction: this.isFunction,\n params,\n valueAst: this.valueExpression,\n dedupKey: `${this.macroName}#ast/${this.isFunction ? params.join(\",\") : \"\"}`,\n branch: definingBranch\n };\n if (entries) entries.push(info);\n else list[this.macroName] = [info];\n }\n\n // Close the form-param scope pushed at `MACRO_DEFINE_PARAMS` shift. By\n // the time this reduce fires, every `VariableIdentifier` inside the\n // value expression has already resolved against the params. Object-like\n // macros never pushed a scope, so nothing to pop.\n if (this.isFunction) {\n sa.popScope();\n }\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n return this.setCache(visitor.visitMacroDefine(this));\n }\n }\n}\n","import { NoneTerminal, Terminal } from \"../parser/GrammarSymbol\";\n\nexport type StateActionTable = Map<number /** state ID */, ActionTable>;\nexport type ActionTable = Map<Terminal, ActionInfo>;\nexport type StateGotoTable = Map<number /** state ID */, GotoTable>;\nexport type GotoTable = Map<NoneTerminal, number /** state ID */>;\n\nexport enum EAction {\n Shift = 0,\n Reduce,\n Accept\n}\n\nexport interface ActionInfo {\n action: EAction;\n target?: number;\n}\n","import { GalaceanDataType, TypeAny } from \"../../common\";\nimport { Keyword } from \"../../common/enums/Keyword\";\nimport { EShaderStage } from \"../../common/enums/ShaderStage\";\n\nexport enum GenericType {\n GenType = 200,\n GenIntType,\n GenUintType,\n GenBoolType,\n Mat,\n BoolVec,\n IntVec,\n UintVec,\n Vec,\n GVec4,\n GSampler2D,\n GSampler3D,\n GSamplerCube,\n GSampler2DArray\n}\n\nexport type NonGenericGalaceanType = Exclude<GalaceanDataType, string>;\ntype BuiltinType = NonGenericGalaceanType | GenericType;\n\n// Generic type system\n//\n// A generic family declares its concrete members and the dimension along which\n// members vary. Matching a generic position locks an index; projecting a return\n// family uses that index. Two families can only share an index if they vary\n// along the same dimension\n//\n// Example: `texture(GSampler2D, vec2) → GVec4` against `texture(sampler2D, uv)`\n// 1. Locate `sampler2D` in GSampler2D (ScalarType dimension) → index 0\n// 2. Project GVec4 (ScalarType dimension) at index 0 → vec4\n//\n// `ivec4 = texture(isampler2D, uv)` locks index 1, projects to `ivec4`\n// `min(vec3, vec3)` locks index 2 in GenType (Size dimension) and returns vec3\n// `min(vec3, vec2)` fails because the second arg would need index 1 but 2 is locked\n\nconst enum GenericDimension {\n // Varies along vector size: scalar / vec2 / vec3 / vec4 (or equivalents)\n Size,\n // Varies along the underlying scalar type: float / int / uint (sometimes with bool)\n ScalarType\n}\n\ntype FamilySpec = {\n readonly dimension: GenericDimension;\n readonly members: readonly NonGenericGalaceanType[];\n};\n\nconst FamilyMembers: Partial<Record<BuiltinType, FamilySpec>> = {\n // Size-varying families: index 0 → scalar, 1 → vec2, 2 → vec3, 3 → vec4\n // Per GLSL Spec §5.1, these appear in both parameter and return positions\n [GenericType.GenType]: {\n dimension: GenericDimension.Size,\n members: [Keyword.FLOAT, Keyword.VEC2, Keyword.VEC3, Keyword.VEC4]\n },\n [GenericType.GenIntType]: {\n dimension: GenericDimension.Size,\n members: [Keyword.INT, Keyword.IVEC2, Keyword.IVEC3, Keyword.IVEC4]\n },\n [GenericType.GenUintType]: {\n dimension: GenericDimension.Size,\n members: [Keyword.UINT, Keyword.UVEC2, Keyword.UVEC3, Keyword.UVEC4]\n },\n [GenericType.GenBoolType]: {\n dimension: GenericDimension.Size,\n members: [Keyword.BOOL, Keyword.BVEC2, Keyword.BVEC3, Keyword.BVEC4]\n },\n // Vec-only sub-families (no scalar): index 0 → vec2, 1 → vec3, 2 → vec4\n [GenericType.Vec]: { dimension: GenericDimension.Size, members: [Keyword.VEC2, Keyword.VEC3, Keyword.VEC4] },\n [GenericType.IntVec]: { dimension: GenericDimension.Size, members: [Keyword.IVEC2, Keyword.IVEC3, Keyword.IVEC4] },\n [GenericType.UintVec]: { dimension: GenericDimension.Size, members: [Keyword.UVEC2, Keyword.UVEC3, Keyword.UVEC4] },\n [GenericType.BoolVec]: { dimension: GenericDimension.Size, members: [Keyword.BVEC2, Keyword.BVEC3, Keyword.BVEC4] },\n [GenericType.Mat]: { dimension: GenericDimension.Size, members: [Keyword.MAT2, Keyword.MAT3, Keyword.MAT4] },\n\n // ScalarType-varying families: index 0 → float base, 1 → int base, 2 → uint base\n // Per GLSL Spec §5.1:\n // GSampler* families are parameter-only (passed as texture samplers)\n // GVec4 is return-only (projected from a GSampler* parameter into the matching vec4 variant)\n [GenericType.GSampler2D]: {\n dimension: GenericDimension.ScalarType,\n members: [Keyword.SAMPLER2D, Keyword.I_SAMPLER2D, Keyword.U_SAMPLER2D]\n },\n [GenericType.GSampler3D]: {\n dimension: GenericDimension.ScalarType,\n members: [Keyword.SAMPLER3D, Keyword.I_SAMPLER3D, Keyword.U_SAMPLER3D]\n },\n [GenericType.GSamplerCube]: {\n dimension: GenericDimension.ScalarType,\n members: [Keyword.SAMPLER_CUBE, Keyword.I_SAMPLER_CUBE, Keyword.U_SAMPLER_CUBE]\n },\n [GenericType.GSampler2DArray]: {\n dimension: GenericDimension.ScalarType,\n members: [Keyword.SAMPLER2D_ARRAY, Keyword.I_SAMPLER2D_ARRAY, Keyword.U_SAMPLER2D_ARRAY]\n },\n [GenericType.GVec4]: { dimension: GenericDimension.ScalarType, members: [Keyword.VEC4, Keyword.IVEC4, Keyword.UVEC4] }\n};\n\nconst BuiltinFunctionTable: Map<string, BuiltinFunction[]> = new Map();\n\nexport class BuiltinFunction {\n ident: string;\n readonly args: BuiltinType[];\n readonly scope: EShaderStage;\n\n private _returnType: BuiltinType;\n private _realReturnType: NonGenericGalaceanType;\n\n get realReturnType(): NonGenericGalaceanType {\n return this._realReturnType;\n }\n\n private constructor(ident: string, returnType: BuiltinType, scope: EShaderStage, ...args: BuiltinType[]) {\n this.ident = ident;\n this._returnType = returnType;\n this.args = args;\n this.scope = scope;\n }\n\n static _create(ident: string, returnType: BuiltinType, ...args: BuiltinType[]) {\n const fn = new BuiltinFunction(ident, returnType, EShaderStage.ALL, ...args);\n const list = BuiltinFunctionTable.get(ident) ?? [];\n list.push(fn);\n BuiltinFunctionTable.set(ident, list);\n }\n\n static _createWithScope(ident: string, returnType: BuiltinType, scope: EShaderStage, ...args: BuiltinType[]) {\n const fn = new BuiltinFunction(ident, returnType, scope, ...args);\n const list = BuiltinFunctionTable.get(ident) ?? [];\n list.push(fn);\n BuiltinFunctionTable.set(ident, list);\n }\n\n // Overload resolution against the generic family system\n //\n // For each candidate signature: concrete positions require exact type match;\n // generic positions locate the actual arg's index within the declared family,\n // and lock an index per dimension (size / scalar-type) shared across positions.\n // The return type is resolved by projecting the appropriate lock through the\n // return family, or passed through verbatim if the return is concrete\n static resolveOverload(\n funcName: string,\n callArgTypes: NonGenericGalaceanType[] | undefined\n ): BuiltinFunction | undefined {\n const overloads = BuiltinFunctionTable.get(funcName);\n if (!overloads) return undefined;\n const n = callArgTypes?.length ?? 0;\n\n for (let i = 0, m = overloads.length; i < m; i++) {\n const candidate = overloads[i];\n const declaredArgs = candidate.args;\n if (declaredArgs.length !== n) continue;\n\n let sizeLock = -1;\n let scalarTypeLock = -1;\n let matched = true;\n\n for (let j = 0; j < n; j++) {\n const declaredType = declaredArgs[j];\n const actualType = callArgTypes![j];\n if (actualType === TypeAny) continue;\n\n const paramFamily = FamilyMembers[declaredType];\n if (paramFamily) {\n // Families have at most 4 members; linear indexOf beats Map.get on this size\n const memberIdx = paramFamily.members.indexOf(actualType);\n if (memberIdx === -1) {\n matched = false;\n break;\n }\n if (paramFamily.dimension === GenericDimension.Size) {\n if (sizeLock === -1) sizeLock = memberIdx;\n else if (sizeLock !== memberIdx) {\n matched = false;\n break;\n }\n } else {\n if (scalarTypeLock === -1) scalarTypeLock = memberIdx;\n else if (scalarTypeLock !== memberIdx) {\n matched = false;\n break;\n }\n }\n } else if (declaredType !== actualType) {\n matched = false;\n break;\n }\n }\n\n if (!matched) continue;\n\n const returnFamily = FamilyMembers[candidate._returnType];\n if (!returnFamily) {\n candidate._realReturnType = candidate._returnType as NonGenericGalaceanType;\n return candidate;\n }\n const returnIdx = returnFamily.dimension === GenericDimension.Size ? sizeLock : scalarTypeLock;\n // No argument locked the dimension (all relevant args were TypeAny): fall\n // through as TypeAny so downstream overload resolution treats the result\n // as a wildcard rather than a specific guess\n candidate._realReturnType = returnIdx === -1 ? TypeAny : returnFamily.members[returnIdx];\n return candidate;\n }\n\n return undefined;\n }\n\n static isExist(ident: string) {\n return BuiltinFunctionTable.has(ident);\n }\n}\n\nBuiltinFunction._create(\"radians\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"degrees\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"sin\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"cos\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"tan\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"asin\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"acos\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"atan\", GenericType.GenType, GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"atan\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"sinh\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"cosh\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"tanh\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"asinh\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"acosh\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"atanh\", GenericType.GenType, GenericType.GenType);\n\nBuiltinFunction._create(\"pow\", GenericType.GenType, GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"exp\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"log\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"exp2\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"log2\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"sqrt\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"inversesqrt\", GenericType.GenType, GenericType.GenType);\n\nBuiltinFunction._create(\"abs\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"abs\", GenericType.GenIntType, GenericType.GenIntType);\nBuiltinFunction._create(\"sign\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"sign\", GenericType.GenIntType, GenericType.GenIntType);\nBuiltinFunction._create(\"floor\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"trunc\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"round\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"roundEven\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"ceil\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"fract\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"mod\", GenericType.GenType, GenericType.GenType, Keyword.FLOAT);\nBuiltinFunction._create(\"mod\", GenericType.GenType, GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"min\", GenericType.GenType, GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"min\", GenericType.GenType, GenericType.GenType, Keyword.FLOAT);\nBuiltinFunction._create(\"min\", GenericType.GenIntType, GenericType.GenIntType, GenericType.GenIntType);\nBuiltinFunction._create(\"min\", GenericType.GenIntType, GenericType.GenIntType, Keyword.INT);\nBuiltinFunction._create(\"min\", GenericType.GenUintType, GenericType.GenUintType, GenericType.GenUintType);\nBuiltinFunction._create(\"min\", GenericType.GenUintType, GenericType.GenUintType, Keyword.UINT);\nBuiltinFunction._create(\"max\", GenericType.GenType, GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"max\", GenericType.GenType, GenericType.GenType, Keyword.FLOAT);\nBuiltinFunction._create(\"max\", GenericType.GenIntType, GenericType.GenIntType, GenericType.GenIntType);\nBuiltinFunction._create(\"max\", GenericType.GenIntType, GenericType.GenIntType, Keyword.INT);\nBuiltinFunction._create(\"clamp\", GenericType.GenType, GenericType.GenType, GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"clamp\", GenericType.GenType, GenericType.GenType, Keyword.FLOAT, Keyword.FLOAT);\nBuiltinFunction._create(\n \"clamp\",\n GenericType.GenIntType,\n GenericType.GenIntType,\n GenericType.GenIntType,\n GenericType.GenIntType\n);\nBuiltinFunction._create(\"clamp\", GenericType.GenIntType, GenericType.GenIntType, Keyword.INT, Keyword.INT);\nBuiltinFunction._create(\n \"clamp\",\n GenericType.GenUintType,\n GenericType.GenUintType,\n GenericType.GenUintType,\n GenericType.GenUintType\n);\nBuiltinFunction._create(\"clamp\", GenericType.GenUintType, GenericType.GenUintType, Keyword.UINT, Keyword.UINT);\nBuiltinFunction._create(\"mix\", GenericType.GenType, GenericType.GenType, GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"mix\", GenericType.GenType, GenericType.GenType, GenericType.GenType, Keyword.FLOAT);\nBuiltinFunction._create(\"mix\", GenericType.GenType, GenericType.GenType, GenericType.GenType, GenericType.GenBoolType);\nBuiltinFunction._create(\"step\", GenericType.GenType, GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"step\", GenericType.GenType, Keyword.FLOAT, GenericType.GenType);\nBuiltinFunction._create(\n \"smoothstep\",\n GenericType.GenType,\n GenericType.GenType,\n GenericType.GenType,\n GenericType.GenType\n);\nBuiltinFunction._create(\"smoothstep\", GenericType.GenType, Keyword.FLOAT, Keyword.FLOAT, GenericType.GenType);\nBuiltinFunction._create(\"isnan\", GenericType.GenBoolType, GenericType.GenType);\nBuiltinFunction._create(\"isinf\", GenericType.GenBoolType, GenericType.GenType);\nBuiltinFunction._create(\"floatBitsToInt\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"floatBitsToUint\", GenericType.GenUintType, GenericType.GenType);\nBuiltinFunction._create(\"intBitsToFloat\", GenericType.GenType, GenericType.GenIntType);\nBuiltinFunction._create(\"uintBitsToFloat\", GenericType.GenType, GenericType.GenUintType);\n\nBuiltinFunction._create(\"packSnorm2x16\", Keyword.UINT, Keyword.VEC2);\nBuiltinFunction._create(\"unpackSnorm2x16\", Keyword.VEC2, Keyword.UINT);\nBuiltinFunction._create(\"packUnorm2x16\", Keyword.UINT, Keyword.VEC2);\nBuiltinFunction._create(\"unpackUnorm2x16\", Keyword.VEC2, Keyword.UINT);\nBuiltinFunction._create(\"packHalf2x16\", Keyword.UINT, Keyword.VEC2);\nBuiltinFunction._create(\"unpackHalf2x16\", Keyword.VEC2, Keyword.UINT);\n\nBuiltinFunction._create(\"length\", Keyword.FLOAT, GenericType.GenType);\nBuiltinFunction._create(\"distance\", Keyword.FLOAT, GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"dot\", Keyword.FLOAT, GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"cross\", Keyword.VEC3, Keyword.VEC3, Keyword.VEC3);\nBuiltinFunction._create(\"normalize\", GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\n \"faceforward\",\n GenericType.GenType,\n GenericType.GenType,\n GenericType.GenType,\n GenericType.GenType\n);\nBuiltinFunction._create(\"reflect\", GenericType.GenType, GenericType.GenType, GenericType.GenType);\nBuiltinFunction._create(\"refract\", GenericType.GenType, GenericType.GenType, GenericType.GenType, Keyword.FLOAT);\nBuiltinFunction._create(\"matrixCompMult\", GenericType.Mat, GenericType.Mat, GenericType.Mat);\nBuiltinFunction._create(\"outerProduct\", Keyword.MAT2, Keyword.VEC2, Keyword.VEC2);\nBuiltinFunction._create(\"outerProduct\", Keyword.MAT3, Keyword.VEC3, Keyword.VEC3);\nBuiltinFunction._create(\"outerProduct\", Keyword.MAT4, Keyword.VEC4, Keyword.VEC4);\n\nBuiltinFunction._create(\"outerProduct\", Keyword.MAT2X3, Keyword.VEC3, Keyword.VEC2);\nBuiltinFunction._create(\"outerProduct\", Keyword.MAT3X2, Keyword.VEC2, Keyword.VEC3);\n\nBuiltinFunction._create(\"outerProduct\", Keyword.MAT2X4, Keyword.VEC4, Keyword.VEC2);\nBuiltinFunction._create(\"outerProduct\", Keyword.MAT4X2, Keyword.VEC2, Keyword.VEC4);\n\nBuiltinFunction._create(\"outerProduct\", Keyword.MAT3X4, Keyword.VEC4, Keyword.VEC3);\nBuiltinFunction._create(\"outerProduct\", Keyword.MAT4X3, Keyword.VEC3, Keyword.VEC4);\n\nBuiltinFunction._create(\"transpose\", Keyword.MAT2, Keyword.MAT2);\nBuiltinFunction._create(\"transpose\", Keyword.MAT3, Keyword.MAT3);\nBuiltinFunction._create(\"transpose\", Keyword.MAT4, Keyword.MAT4);\nBuiltinFunction._create(\"transpose\", Keyword.MAT2X3, Keyword.MAT3X2);\nBuiltinFunction._create(\"transpose\", Keyword.MAT3X2, Keyword.MAT2X3);\nBuiltinFunction._create(\"transpose\", Keyword.MAT4X2, Keyword.MAT2X4);\nBuiltinFunction._create(\"transpose\", Keyword.MAT2X4, Keyword.MAT4X2);\nBuiltinFunction._create(\"transpose\", Keyword.MAT3X4, Keyword.MAT4X3);\nBuiltinFunction._create(\"transpose\", Keyword.MAT4X3, Keyword.MAT3X4);\n\nBuiltinFunction._create(\"determinant\", Keyword.FLOAT, Keyword.MAT2);\nBuiltinFunction._create(\"determinant\", Keyword.FLOAT, Keyword.MAT3);\nBuiltinFunction._create(\"determinant\", Keyword.FLOAT, Keyword.MAT4);\n\nBuiltinFunction._create(\"inverse\", Keyword.MAT2, Keyword.MAT2);\nBuiltinFunction._create(\"inverse\", Keyword.MAT3, Keyword.MAT3);\nBuiltinFunction._create(\"inverse\", Keyword.MAT4, Keyword.MAT4);\n\nBuiltinFunction._create(\"lessThan\", GenericType.BoolVec, GenericType.Vec, GenericType.Vec);\nBuiltinFunction._create(\"lessThan\", GenericType.BoolVec, GenericType.IntVec, GenericType.IntVec);\nBuiltinFunction._create(\"lessThan\", GenericType.BoolVec, GenericType.UintVec, GenericType.UintVec);\n\nBuiltinFunction._create(\"lessThanEqual\", GenericType.BoolVec, GenericType.Vec, GenericType.Vec);\nBuiltinFunction._create(\"lessThanEqual\", GenericType.BoolVec, GenericType.IntVec, GenericType.IntVec);\nBuiltinFunction._create(\"lessThanEqual\", GenericType.BoolVec, GenericType.UintVec, GenericType.UintVec);\n\nBuiltinFunction._create(\"greaterThan\", GenericType.BoolVec, GenericType.Vec, GenericType.Vec);\nBuiltinFunction._create(\"greaterThan\", GenericType.BoolVec, GenericType.IntVec, GenericType.IntVec);\nBuiltinFunction._create(\"greaterThan\", GenericType.BoolVec, GenericType.UintVec, GenericType.UintVec);\n\nBuiltinFunction._create(\"greaterThanEqual\", GenericType.BoolVec, GenericType.Vec, GenericType.Vec);\nBuiltinFunction._create(\"greaterThanEqual\", GenericType.BoolVec, GenericType.IntVec, GenericType.IntVec);\nBuiltinFunction._create(\"greaterThanEqual\", GenericType.BoolVec, GenericType.UintVec, GenericType.UintVec);\n\nBuiltinFunction._create(\"equal\", GenericType.BoolVec, GenericType.Vec, GenericType.Vec);\nBuiltinFunction._create(\"equal\", GenericType.BoolVec, GenericType.IntVec, GenericType.IntVec);\nBuiltinFunction._create(\"equal\", GenericType.BoolVec, GenericType.UintVec, GenericType.UintVec);\nBuiltinFunction._create(\"equal\", GenericType.BoolVec, GenericType.BoolVec, GenericType.BoolVec);\n\nBuiltinFunction._create(\"notEqual\", GenericType.BoolVec, GenericType.Vec, GenericType.Vec);\nBuiltinFunction._create(\"notEqual\", GenericType.BoolVec, GenericType.IntVec, GenericType.IntVec);\nBuiltinFunction._create(\"notEqual\", GenericType.BoolVec, GenericType.UintVec, GenericType.UintVec);\nBuiltinFunction._create(\"notEqual\", GenericType.BoolVec, GenericType.BoolVec, GenericType.BoolVec);\n\nBuiltinFunction._create(\"any\", Keyword.BOOL, GenericType.BoolVec);\nBuiltinFunction._create(\"all\", Keyword.BOOL, GenericType.BoolVec);\nBuiltinFunction._create(\"not\", GenericType.BoolVec, GenericType.BoolVec);\n\nBuiltinFunction._create(\"textureSize\", Keyword.IVEC2, GenericType.GSampler2D, Keyword.INT);\nBuiltinFunction._create(\"textureSize\", Keyword.IVEC3, GenericType.GSampler3D, Keyword.INT);\nBuiltinFunction._create(\"textureSize\", Keyword.IVEC2, GenericType.GSamplerCube, Keyword.INT);\n\nBuiltinFunction._create(\"textureSize\", Keyword.IVEC2, Keyword.SAMPLER2D_SHADOW, Keyword.INT);\nBuiltinFunction._create(\"textureSize\", Keyword.IVEC2, Keyword.SAMPLER_CUBE_SHADOW, Keyword.INT);\n\nBuiltinFunction._create(\"textureSize\", Keyword.IVEC3, GenericType.GSampler2DArray, Keyword.INT);\nBuiltinFunction._create(\"textureSize\", Keyword.IVEC3, Keyword.SAMPLER2D_ARRAY_SHADOW, Keyword.INT);\n\nBuiltinFunction._create(\"texture2D\", GenericType.GVec4, GenericType.GSampler2D, Keyword.VEC2);\nBuiltinFunction._create(\"texture2D\", GenericType.GVec4, GenericType.GSampler2D, Keyword.VEC2, Keyword.FLOAT);\n\nBuiltinFunction._create(\"texture\", GenericType.GVec4, GenericType.GSampler2D, Keyword.VEC2, Keyword.FLOAT);\nBuiltinFunction._create(\"texture\", GenericType.GVec4, GenericType.GSampler2D, Keyword.VEC2);\nBuiltinFunction._create(\"texture\", GenericType.GVec4, GenericType.GSampler3D, Keyword.VEC3, Keyword.FLOAT);\nBuiltinFunction._create(\"texture\", GenericType.GVec4, GenericType.GSampler3D, Keyword.VEC3);\n\nBuiltinFunction._create(\"texture\", GenericType.GVec4, GenericType.GSamplerCube, Keyword.VEC3, Keyword.FLOAT);\nBuiltinFunction._create(\"texture\", GenericType.GVec4, GenericType.GSamplerCube, Keyword.VEC3);\n\nBuiltinFunction._create(\"texture\", Keyword.FLOAT, Keyword.SAMPLER2D_SHADOW, Keyword.VEC3, Keyword.FLOAT);\nBuiltinFunction._create(\"texture\", Keyword.FLOAT, Keyword.SAMPLER2D_SHADOW, Keyword.VEC3);\n\nBuiltinFunction._create(\"texture\", Keyword.FLOAT, Keyword.SAMPLER_CUBE_SHADOW, Keyword.VEC4, Keyword.FLOAT);\nBuiltinFunction._create(\"texture\", Keyword.FLOAT, Keyword.SAMPLER_CUBE_SHADOW, Keyword.VEC4);\n\nBuiltinFunction._create(\"texture\", GenericType.GVec4, Keyword.SAMPLER2D_ARRAY, Keyword.VEC3, Keyword.FLOAT);\nBuiltinFunction._create(\"texture\", GenericType.GVec4, Keyword.SAMPLER2D_ARRAY, Keyword.VEC3);\n\nBuiltinFunction._create(\"texture\", Keyword.FLOAT, Keyword.SAMPLER2D_ARRAY_SHADOW, Keyword.VEC4);\n\nBuiltinFunction._create(\"textureProj\", GenericType.GVec4, GenericType.GSampler2D, Keyword.VEC3, Keyword.FLOAT);\nBuiltinFunction._create(\"textureProj\", GenericType.GVec4, GenericType.GSampler2D, Keyword.VEC3);\nBuiltinFunction._create(\"textureProj\", GenericType.GVec4, GenericType.GSampler2D, Keyword.VEC4, Keyword.FLOAT);\nBuiltinFunction._create(\"textureProj\", GenericType.GVec4, GenericType.GSampler2D, Keyword.VEC4);\nBuiltinFunction._create(\"textureProj\", GenericType.GVec4, GenericType.GSampler3D, Keyword.VEC4, Keyword.FLOAT);\nBuiltinFunction._create(\"textureProj\", GenericType.GVec4, GenericType.GSampler3D, Keyword.VEC4);\n\nBuiltinFunction._create(\"textureProj\", Keyword.FLOAT, Keyword.SAMPLER2D_SHADOW, Keyword.VEC4, Keyword.FLOAT);\nBuiltinFunction._create(\"textureProj\", Keyword.FLOAT, Keyword.SAMPLER2D_SHADOW, Keyword.VEC4);\n\nBuiltinFunction._create(\"textureLod\", GenericType.GVec4, GenericType.GSampler2D, Keyword.VEC2, Keyword.FLOAT);\nBuiltinFunction._create(\"textureLod\", GenericType.GVec4, GenericType.GSampler3D, Keyword.VEC3, Keyword.FLOAT);\nBuiltinFunction._create(\"textureLod\", GenericType.GVec4, GenericType.GSamplerCube, Keyword.VEC3, Keyword.FLOAT);\nBuiltinFunction._create(\"textureLod\", Keyword.FLOAT, Keyword.SAMPLER2D_SHADOW, Keyword.VEC3, Keyword.FLOAT);\nBuiltinFunction._create(\"textureLod\", GenericType.GVec4, GenericType.GSampler2DArray, Keyword.VEC3, Keyword.FLOAT);\nBuiltinFunction._create(\"texture2DLod\", GenericType.GVec4, GenericType.GSampler2D, Keyword.VEC2, Keyword.FLOAT);\nBuiltinFunction._create(\"texture2DLodEXT\", GenericType.GVec4, GenericType.GSampler2D, Keyword.VEC2, Keyword.FLOAT);\nBuiltinFunction._create(\"texture2DLodEXT\", GenericType.GVec4, GenericType.GSampler3D, Keyword.VEC3, Keyword.FLOAT);\n\nBuiltinFunction._create(\"textureCube\", GenericType.GVec4, GenericType.GSamplerCube, Keyword.VEC3);\nBuiltinFunction._create(\"textureCube\", GenericType.GVec4, GenericType.GSamplerCube, Keyword.VEC3, Keyword.FLOAT);\nBuiltinFunction._create(\"textureCubeLod\", GenericType.GVec4, GenericType.GSamplerCube, Keyword.VEC3, Keyword.FLOAT);\nBuiltinFunction._create(\"textureCubeLodEXT\", GenericType.GVec4, GenericType.GSamplerCube, Keyword.VEC3, Keyword.FLOAT);\n\nBuiltinFunction._create(\n \"textureOffset\",\n GenericType.GVec4,\n GenericType.GSampler2D,\n Keyword.VEC2,\n Keyword.IVEC2,\n Keyword.FLOAT\n);\nBuiltinFunction._create(\"textureOffset\", GenericType.GVec4, GenericType.GSampler2D, Keyword.VEC2, Keyword.IVEC2);\n\nBuiltinFunction._create(\n \"textureOffset\",\n GenericType.GVec4,\n GenericType.GSampler3D,\n Keyword.VEC3,\n Keyword.IVEC3,\n Keyword.FLOAT\n);\nBuiltinFunction._create(\"textureOffset\", GenericType.GVec4, GenericType.GSampler3D, Keyword.VEC3, Keyword.IVEC3);\n\nBuiltinFunction._create(\n \"textureOffset\",\n Keyword.FLOAT,\n Keyword.SAMPLER2D_SHADOW,\n Keyword.VEC3,\n Keyword.IVEC2,\n Keyword.FLOAT\n);\nBuiltinFunction._create(\"textureOffset\", Keyword.FLOAT, Keyword.SAMPLER2D_SHADOW, Keyword.VEC3, Keyword.IVEC2);\nBuiltinFunction._create(\n \"textureOffset\",\n GenericType.GVec4,\n GenericType.GSampler2DArray,\n Keyword.VEC3,\n Keyword.IVEC2,\n Keyword.FLOAT\n);\nBuiltinFunction._create(\"textureOffset\", GenericType.GVec4, GenericType.GSampler2DArray, Keyword.VEC3, Keyword.IVEC2);\n\nBuiltinFunction._create(\"texelFetch\", GenericType.GVec4, GenericType.GSampler2D, Keyword.IVEC2, Keyword.INT);\nBuiltinFunction._create(\"texelFetch\", GenericType.GVec4, GenericType.GSampler3D, Keyword.IVEC3, Keyword.INT);\nBuiltinFunction._create(\"texelFetch\", GenericType.GVec4, GenericType.GSampler2DArray, Keyword.IVEC3, Keyword.INT);\n\nBuiltinFunction._create(\n \"texelFetchOffset\",\n GenericType.GVec4,\n GenericType.GSampler2D,\n Keyword.IVEC2,\n Keyword.INT,\n Keyword.IVEC2\n);\nBuiltinFunction._create(\n \"texelFetchOffset\",\n GenericType.GVec4,\n GenericType.GSampler3D,\n Keyword.IVEC3,\n Keyword.INT,\n Keyword.IVEC3\n);\nBuiltinFunction._create(\n \"texelFetchOffset\",\n GenericType.GVec4,\n GenericType.GSampler2DArray,\n Keyword.IVEC3,\n Keyword.INT,\n Keyword.IVEC2\n);\n\nBuiltinFunction._create(\n \"textureProjOffset\",\n GenericType.GVec4,\n GenericType.GSampler2D,\n Keyword.VEC3,\n Keyword.IVEC2,\n Keyword.FLOAT\n);\nBuiltinFunction._create(\"textureProjOffset\", GenericType.GVec4, GenericType.GSampler2D, Keyword.VEC3, Keyword.IVEC2);\n\nBuiltinFunction._create(\n \"textureProjOffset\",\n GenericType.GVec4,\n GenericType.GSampler2D,\n Keyword.VEC4,\n Keyword.IVEC2,\n Keyword.FLOAT\n);\nBuiltinFunction._create(\"textureProjOffset\", GenericType.GVec4, GenericType.GSampler2D, Keyword.VEC4, Keyword.IVEC2);\n\nBuiltinFunction._create(\n \"textureProjOffset\",\n GenericType.GVec4,\n GenericType.GSampler3D,\n Keyword.VEC4,\n Keyword.IVEC3,\n Keyword.FLOAT\n);\nBuiltinFunction._create(\"textureProjOffset\", GenericType.GVec4, GenericType.GSampler3D, Keyword.VEC4, Keyword.IVEC3);\n\nBuiltinFunction._create(\n \"textureProjOffset\",\n Keyword.FLOAT,\n Keyword.SAMPLER2D_SHADOW,\n Keyword.VEC4,\n Keyword.IVEC2,\n Keyword.FLOAT\n);\nBuiltinFunction._create(\"textureProjOffset\", Keyword.FLOAT, Keyword.SAMPLER2D_SHADOW, Keyword.VEC4, Keyword.IVEC2);\n\nBuiltinFunction._create(\n \"textureLodOffset\",\n GenericType.GVec4,\n GenericType.GSampler2D,\n Keyword.VEC2,\n Keyword.FLOAT,\n Keyword.IVEC2\n);\nBuiltinFunction._create(\n \"textureLodOffset\",\n GenericType.GVec4,\n GenericType.GSampler3D,\n Keyword.VEC3,\n Keyword.FLOAT,\n Keyword.IVEC3\n);\n\nBuiltinFunction._create(\n \"textureLodOffset\",\n Keyword.FLOAT,\n Keyword.SAMPLER2D_SHADOW,\n Keyword.VEC3,\n Keyword.FLOAT,\n Keyword.IVEC2\n);\nBuiltinFunction._create(\n \"textureLodOffset\",\n GenericType.GVec4,\n GenericType.GSampler2DArray,\n Keyword.VEC3,\n Keyword.FLOAT,\n Keyword.IVEC2\n);\n\nBuiltinFunction._create(\"textureProjLod\", GenericType.GVec4, GenericType.GSampler2D, Keyword.VEC3, Keyword.FLOAT);\nBuiltinFunction._create(\"textureProjLod\", GenericType.GVec4, GenericType.GSampler2D, Keyword.VEC4, Keyword.FLOAT);\nBuiltinFunction._create(\"textureProjLod\", GenericType.GVec4, GenericType.GSampler3D, Keyword.VEC4, Keyword.FLOAT);\nBuiltinFunction._create(\"textureProjLod\", Keyword.FLOAT, Keyword.SAMPLER2D_SHADOW, Keyword.VEC4, Keyword.FLOAT);\n\nBuiltinFunction._create(\n \"textureProjLodOffset\",\n GenericType.GVec4,\n GenericType.GSampler2D,\n Keyword.VEC3,\n Keyword.FLOAT,\n Keyword.IVEC2\n);\nBuiltinFunction._create(\n \"textureProjLodOffset\",\n GenericType.GVec4,\n GenericType.GSampler2D,\n Keyword.VEC4,\n Keyword.FLOAT,\n Keyword.IVEC2\n);\nBuiltinFunction._create(\n \"textureProjLodOffset\",\n GenericType.GVec4,\n GenericType.GSampler3D,\n Keyword.VEC4,\n Keyword.FLOAT,\n Keyword.IVEC3\n);\nBuiltinFunction._create(\n \"textureProjLodOffset\",\n Keyword.FLOAT,\n Keyword.SAMPLER2D_SHADOW,\n Keyword.VEC4,\n Keyword.FLOAT,\n Keyword.IVEC2\n);\n\nBuiltinFunction._create(\n \"textureGrad\",\n GenericType.GVec4,\n GenericType.GSampler2D,\n Keyword.VEC2,\n Keyword.VEC2,\n Keyword.VEC2\n);\nBuiltinFunction._create(\n \"textureGrad\",\n GenericType.GVec4,\n GenericType.GSampler3D,\n Keyword.VEC3,\n Keyword.VEC3,\n Keyword.VEC3\n);\nBuiltinFunction._create(\n \"textureGrad\",\n GenericType.GVec4,\n GenericType.GSamplerCube,\n Keyword.VEC3,\n Keyword.VEC3,\n Keyword.VEC3\n);\n\nBuiltinFunction._create(\n \"textureGrad\",\n Keyword.FLOAT,\n Keyword.SAMPLER2D_SHADOW,\n Keyword.VEC3,\n Keyword.VEC2,\n Keyword.VEC2\n);\nBuiltinFunction._create(\n \"textureGrad\",\n Keyword.FLOAT,\n Keyword.SAMPLER_CUBE_SHADOW,\n Keyword.VEC4,\n Keyword.VEC3,\n Keyword.VEC3\n);\n\nBuiltinFunction._create(\n \"textureGrad\",\n GenericType.GVec4,\n GenericType.GSampler2DArray,\n Keyword.VEC3,\n Keyword.VEC2,\n Keyword.VEC2\n);\nBuiltinFunction._create(\n \"textureGrad\",\n Keyword.FLOAT,\n Keyword.SAMPLER2D_ARRAY_SHADOW,\n Keyword.VEC4,\n Keyword.VEC2,\n Keyword.VEC2\n);\n\nBuiltinFunction._create(\n \"textureGradOffset\",\n GenericType.GVec4,\n GenericType.GSampler2D,\n Keyword.VEC2,\n Keyword.VEC2,\n Keyword.VEC2,\n Keyword.IVEC2\n);\nBuiltinFunction._create(\n \"textureGradOffset\",\n GenericType.GVec4,\n GenericType.GSampler3D,\n Keyword.VEC3,\n Keyword.VEC3,\n Keyword.VEC3,\n Keyword.IVEC3\n);\nBuiltinFunction._create(\n \"textureGradOffset\",\n Keyword.FLOAT,\n Keyword.SAMPLER2D_SHADOW,\n Keyword.VEC3,\n Keyword.VEC2,\n Keyword.VEC2,\n Keyword.IVEC2\n);\nBuiltinFunction._create(\n \"textureGradOffset\",\n GenericType.GVec4,\n GenericType.GSampler2DArray,\n Keyword.VEC3,\n Keyword.VEC2,\n Keyword.VEC2,\n Keyword.IVEC2\n);\nBuiltinFunction._create(\n \"textureGradOffset\",\n Keyword.FLOAT,\n Keyword.SAMPLER2D_ARRAY_SHADOW,\n Keyword.VEC3,\n Keyword.VEC2,\n Keyword.VEC2,\n Keyword.IVEC2\n);\n\nBuiltinFunction._create(\n \"textureProjGrad\",\n GenericType.GVec4,\n GenericType.GSampler2D,\n Keyword.VEC3,\n Keyword.VEC2,\n Keyword.VEC2\n);\nBuiltinFunction._create(\n \"textureProjGrad\",\n GenericType.GVec4,\n GenericType.GSampler2D,\n Keyword.VEC4,\n Keyword.VEC2,\n Keyword.VEC2\n);\nBuiltinFunction._create(\n \"textureProjGrad\",\n GenericType.GVec4,\n GenericType.GSampler3D,\n Keyword.VEC4,\n Keyword.VEC3,\n Keyword.VEC3\n);\nBuiltinFunction._create(\n \"textureProjGrad\",\n Keyword.FLOAT,\n Keyword.SAMPLER2D_SHADOW,\n Keyword.VEC4,\n Keyword.VEC2,\n Keyword.VEC2\n);\n\nBuiltinFunction._create(\n \"textureProjGradOffset\",\n GenericType.GVec4,\n GenericType.GSampler2D,\n Keyword.VEC3,\n Keyword.VEC2,\n Keyword.VEC2,\n Keyword.IVEC2\n);\nBuiltinFunction._create(\n \"textureProjGradOffset\",\n GenericType.GVec4,\n GenericType.GSampler2D,\n Keyword.VEC4,\n Keyword.VEC2,\n Keyword.VEC2,\n Keyword.IVEC2\n);\nBuiltinFunction._create(\n \"textureProjGradOffset\",\n GenericType.GVec4,\n GenericType.GSampler3D,\n Keyword.VEC4,\n Keyword.VEC3,\n Keyword.VEC3,\n Keyword.IVEC3\n);\nBuiltinFunction._create(\n \"textureProjGradOffset\",\n Keyword.FLOAT,\n Keyword.SAMPLER2D_SHADOW,\n Keyword.VEC4,\n Keyword.VEC2,\n Keyword.VEC2,\n Keyword.IVEC2\n);\nBuiltinFunction._createWithScope(\"dFdx\", GenericType.GenType, EShaderStage.FRAGMENT, GenericType.GenType);\nBuiltinFunction._createWithScope(\"dFdy\", GenericType.GenType, EShaderStage.FRAGMENT, GenericType.GenType);\nBuiltinFunction._createWithScope(\"fwidth\", GenericType.GenType, EShaderStage.FRAGMENT, GenericType.GenType);\n","import type { IPoolElement } from \"@galacean/engine-core\";\n\nexport class ShaderPosition implements IPoolElement {\n index: number;\n // #if _VERBOSE\n line: number;\n column: number;\n // #endif\n\n set(\n index: number,\n // #if _VERBOSE\n line: number,\n column: number\n // #endif\n ) {\n this.index = index;\n // #if _VERBOSE\n this.line = line;\n this.column = column;\n // #endif\n }\n\n dispose(): void {\n this.index = 0;\n // #if _VERBOSE\n this.line = 0;\n this.column = 0;\n // #endif\n }\n}\n","import { ClearableObjectPool, type IPoolElement } from \"@galacean/engine-core\";\nimport { GSErrorName } from \"./GSError\";\nimport { ShaderRange } from \"./common/ShaderRange\";\nimport { ShaderPosition } from \"./common/ShaderPosition\";\n// #if _VERBOSE\nimport { GSError } from \"./GSError\";\n// #endif\n\nexport class ShaderCompilerUtils {\n private static _shaderCompilerObjectPoolSet: ClearableObjectPool<IPoolElement>[] = [];\n\n static createObjectPool<T extends IPoolElement>(type: new () => T) {\n const pool = new ClearableObjectPool<T>(type);\n ShaderCompilerUtils._shaderCompilerObjectPoolSet.push(pool);\n return pool;\n }\n\n static clearAllShaderCompilerObjectPool() {\n for (let i = 0, n = ShaderCompilerUtils._shaderCompilerObjectPoolSet.length; i < n; i++) {\n ShaderCompilerUtils._shaderCompilerObjectPoolSet[i].clear();\n }\n }\n\n static createGSError(\n message: string,\n errorName: GSErrorName,\n source: string,\n location: ShaderRange | ShaderPosition,\n file?: string\n ): Error {\n // #if _VERBOSE\n return new GSError(errorName, message, location, source, file);\n // #else\n console.error(message);\n const err = new Error(message);\n err.name = errorName;\n return err;\n // #endif\n }\n}\n","import { ETokenType } from \"./types\";\nimport { ShaderRange, ShaderPosition } from \".\";\nimport { ShaderCompiler } from \"../ShaderCompiler\";\nimport type { IPoolElement } from \"@galacean/engine-core\";\nimport { ShaderCompilerUtils } from \"../ShaderCompilerUtils\";\n\n/**\n * One condition in a branch signature: `defined: true` for `#ifdef X` (the\n * branch is active when `X` is defined), `defined: false` for `#ifndef X` /\n * after `#else` (active when `X` is undefined).\n */\nexport interface BranchConstraint {\n name: string;\n defined: boolean;\n}\n\n/**\n * Snapshot of the `#ifdef`/`#ifndef`/`#else` stack at a source position. An\n * empty signature means unconditional (top-level). Constraints are conjunctive:\n * the position is active iff every constraint holds. Produced by the Lexer\n * (the sole branch-stack maintainer) and stamped onto every emitted token +\n * every registered `MacroDefineInfo`.\n */\nexport type BranchSignature = readonly BranchConstraint[];\n\n// Canonical empty branch signature shared by all default tokens — avoids\n// per-token allocation. The Lexer overwrites `branch` after `scanToken()`\n// for tokens that are inside an `#ifdef`.\nexport const EMPTY_BRANCH: BranchSignature = [];\n\nexport class BaseToken<T extends number = number> implements IPoolElement {\n static pool = ShaderCompilerUtils.createObjectPool(BaseToken);\n\n type: T;\n lexeme: string;\n location: ShaderRange;\n /** Branch signature snapshot at the point this token was emitted. Empty\n * signature (default) means top-level / unconditional. The Lexer tags\n * every token; downstream code (AST nodes built from tokens) can read\n * the field directly to know which `#ifdef` branch they're inside. */\n branch: BranchSignature = EMPTY_BRANCH;\n\n set(type: T, lexeme: string, start?: ShaderPosition);\n set(type: T, lexeme: string, location?: ShaderRange);\n set(type: T, lexeme: string, arg?: ShaderRange | ShaderPosition) {\n this.type = type;\n this.lexeme = lexeme;\n this.branch = EMPTY_BRANCH;\n if (arg) {\n if (arg instanceof ShaderRange) {\n this.location = arg as ShaderRange;\n } else {\n const end = ShaderCompiler.createPosition(\n arg.index + lexeme.length,\n // #if _VERBOSE\n arg.line,\n arg.column + lexeme.length\n // #endif\n );\n this.location = ShaderCompiler.createRange(arg, end);\n }\n }\n }\n\n dispose(): void {}\n}\n\nexport const EOF = new BaseToken();\nEOF.set(ETokenType.EOF, \"/EOF\");\n","import { ETokenType, GalaceanDataType, TypeAny } from \"./common\";\nimport { BaseToken as Token } from \"./common/BaseToken\";\nimport { ASTNode, TreeNode } from \"./parser/AST\";\nimport { GrammarSymbol, NoneTerminal } from \"./parser/GrammarSymbol\";\n// #if _VERBOSE\nimport { Keyword } from \"./common/enums/Keyword\";\nimport State from \"./lalr/State\";\n// #endif\n\nexport class ParserUtils {\n static unwrapNodeByType<T = TreeNode>(node: TreeNode, type: NoneTerminal): T | undefined {\n const child = node.children[0];\n if (child instanceof Token) return;\n if (child.nt === type) return child as T;\n return ParserUtils.unwrapNodeByType(child, type);\n }\n\n /**\n * Parse a function-macro parameter-list lexeme (`\"(a, b, c)\"`) into its parameter\n * names. An empty list `\"()\"` yields `[]`. Leading/trailing whitespace around each\n * name is trimmed. Empty entries from consecutive commas are filtered out.\n */\n static parseMacroParamList(lexeme: string): string[] {\n const inner = lexeme.replace(/^\\s*\\(\\s*|\\s*\\)\\s*$/g, \"\");\n if (!inner) return [];\n return inner\n .split(\",\")\n .map((s) => s.trim())\n .filter(Boolean);\n }\n\n /**\n * Walk single-child precedence-chain wrappers down to a `VariableIdentifier`,\n * returning the leaf node (or `undefined` for any compound expression).\n *\n * `allowParens` chooses between two callers' needs:\n * - `true` — descend through `( expression )` form, so `(v)` resolves to\n * `v`. Use when the caller substitutes at the expression root\n * (aliasing, renaming); user-written parens carry no extra meaning.\n * - `false` — any 3-child `PrimaryExpression` aborts; `(v)` stays\n * compound. Use when the caller treats the unwrapped node as a single\n * token (IO-struct arg drop, alias detection); user-written parens\n * must not collapse.\n */\n static unwrapBareIdentifier(\n node: TreeNode,\n options: { allowParens: boolean }\n ): ASTNode.VariableIdentifier | undefined {\n let cur: TreeNode = node;\n while (true) {\n if (cur instanceof ASTNode.VariableIdentifier) return cur;\n if (options.allowParens && cur instanceof ASTNode.PrimaryExpression && cur.children.length === 3) {\n const inner = cur.children[1];\n if (!(inner instanceof TreeNode)) return undefined;\n cur = inner;\n continue;\n }\n if (cur instanceof ASTNode.ExpressionAstNode && cur.children.length === 1) {\n const child = cur.children[0];\n if (!(child instanceof TreeNode)) return undefined;\n cur = child;\n continue;\n }\n return undefined;\n }\n }\n\n /**\n * Lexeme variant of `unwrapBareIdentifier({ allowParens: true })` for callers\n * that already work with strings. Returns `null` for compound expressions.\n */\n static extractDirectIdentLexeme(expr: TreeNode): string | null {\n const ident = ParserUtils.unwrapBareIdentifier(expr, { allowParens: true });\n if (!ident) return null;\n const child = ident.children[0];\n return child instanceof Token ? child.lexeme : null;\n }\n\n // #if _VERBOSE\n /**\n * Check if type `tb` is compatible with type `ta`.\n */\n static typeCompatible(ta: GalaceanDataType, tb: GalaceanDataType | undefined) {\n if (tb == undefined || tb === TypeAny) return true;\n if (ta === Keyword.INT) {\n return ta === tb || tb === Keyword.UINT;\n }\n return ta === tb;\n }\n\n static toString(sm: GrammarSymbol) {\n if (this.isTerminal(sm)) {\n return ETokenType[sm] ?? Keyword[sm];\n }\n return NoneTerminal[sm];\n }\n // #endif\n\n static isTerminal(sm: GrammarSymbol) {\n return sm < NoneTerminal.START;\n }\n\n /**\n * @internal\n */\n // #if _VERBOSE\n static printStatePool(logPath: string) {\n let output = \"\";\n\n console.log(\"========== Parser Pool ==========\");\n\n let count = 0;\n for (const state of State.pool.values()) {\n count++;\n let tmp = \"\";\n tmp += `${state.id}: \\n`.padEnd(4);\n for (const psItem of state.items) {\n tmp += \" \" + psItem.toString() + \"\\n\";\n }\n output += tmp;\n }\n\n console.log(\"state count:\", count);\n console.log(output);\n }\n // #endif\n}\n","function _is_native_reflect_construct() {\n // Since Reflect.construct can't be properly polyfilled, some\n // implementations (e.g. core-js@2) don't set the correct internal slots.\n // Those polyfills don't allow us to subclass built-ins, so we need to\n // use our fallback implementation.\n try {\n // If the internal slots aren't set, this throws an error similar to\n // TypeError: this is not a Boolean object.\n var result = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));\n } catch (_) {}\n return (_is_native_reflect_construct = function() {\n return !!result;\n })();\n}\n\nexport { _is_native_reflect_construct as _ };\n","import { _ as _is_native_reflect_construct } from \"./_is_native_reflect_construct.js\";\nimport { _ as _set_prototype_of } from \"./_set_prototype_of.js\";\nfunction _construct(Parent, args, Class) {\n if (_is_native_reflect_construct()) _construct = Reflect.construct;\n else {\n _construct = function construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n\n if (Class) _set_prototype_of(instance, Class.prototype);\n\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}\nexport { _construct as _ };\n","function _get_prototype_of(o) {\n _get_prototype_of = Object.setPrototypeOf ? Object.getPrototypeOf : function getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n\n return _get_prototype_of(o);\n}\nexport { _get_prototype_of as _ };\n","import { _ as _construct } from \"./_construct.js\";\nimport { _ as _get_prototype_of } from \"./_get_prototype_of.js\";\nimport { _ as _is_native_function } from \"./_is_native_function.js\";\nimport { _ as _set_prototype_of } from \"./_set_prototype_of.js\";\n\nfunction _wrap_native_super(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n _wrap_native_super = function(Class) {\n if (Class === null || !_is_native_function(Class)) return Class;\n if (typeof Class !== \"function\") throw new TypeError(\"Super expression must either be null or a function\");\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return _construct(Class, arguments, _get_prototype_of(this).constructor);\n }\n Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } });\n\n return _set_prototype_of(Wrapper, Class);\n };\n\n return _wrap_native_super(Class);\n}\nexport { _wrap_native_super as _ };\n","function _is_native_function(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}\nexport { _is_native_function as _ };\n","import { ShaderPosition, ShaderRange } from \".\";\nimport { GSErrorName } from \"../GSError\";\nimport { ShaderCompiler } from \"../ShaderCompiler\";\nimport { ShaderCompilerUtils } from \"../ShaderCompilerUtils\";\nimport { BaseToken } from \"./BaseToken\";\n\nexport type OnToken = (token: BaseToken, scanner: BaseLexer) => void;\n\n/**\n * @internal\n */\nexport abstract class BaseLexer {\n static isDigit(charCode: number): boolean {\n return charCode >= 48 && charCode <= 57; // 0-9\n }\n\n static isHexDigit(charCode: number): boolean {\n return (\n (charCode >= 48 && charCode <= 57) || // 0-9\n (charCode >= 65 && charCode <= 70) || // A-F\n (charCode >= 97 && charCode <= 102) // a-f\n );\n }\n\n // Check if character is alphabetic or underscore (valid word start)\n static isAlpha(charCode: number): boolean {\n return (\n charCode === 95 || // _\n (charCode >= 65 && charCode <= 90) || // A-Z\n (charCode >= 97 && charCode <= 122) // a-z\n );\n }\n\n // Check if character is alphanumeric (alpha + digit)\n static isAlnum(charCode: number): boolean {\n return BaseLexer.isAlpha(charCode) || BaseLexer.isDigit(charCode);\n }\n\n static isPreprocessorStartChar(charCode: number): boolean {\n return charCode === 35; // #\n }\n\n /**\n * If `i` points at the start of a `/* … *\\/` block comment, return the index\n * just past the closing `*\\/`. Otherwise return `i` unchanged. If the\n * comment is unterminated, returns `len` (clamped, never overshoots).\n * Single source of truth for block-comment scanning across the lexer.\n */\n protected static _skipBlockComment(src: string, i: number, len: number): number {\n if (src.charCodeAt(i) !== 47 /* '/' */ || i + 1 >= len || src.charCodeAt(i + 1) !== 42 /* '*' */) return i;\n let j = i + 2;\n while (j + 1 < len) {\n if (src.charCodeAt(j) === 42 && src.charCodeAt(j + 1) === 47) return j + 2;\n j++;\n }\n return len;\n }\n\n /**\n * If `i` points at the start of a `//` line comment, return the index of the\n * terminating newline (or `len` at EOF). The newline itself is NOT consumed\n * — callers decide whether `\\n` is whitespace or a logical separator.\n * Otherwise return `i` unchanged.\n */\n protected static _skipLineComment(src: string, i: number, len: number): number {\n if (src.charCodeAt(i) !== 47 /* '/' */ || i + 1 >= len || src.charCodeAt(i + 1) !== 47) return i;\n let j = i + 2;\n while (j < len) {\n const c = src.charCodeAt(j);\n if (c === 10 || c === 13) break;\n j++;\n }\n return j;\n }\n\n static isWhiteSpaceChar(charCode: number, includeBreak: boolean): boolean {\n // Space || Tab\n if (charCode === 32 || charCode === 9) {\n return true;\n }\n return includeBreak && (charCode === 10 || charCode === 13); // \\n || \\r\n }\n\n protected _currentIndex = 0;\n protected _source: string;\n\n // #if _VERBOSE\n protected _column = 0;\n protected _line = 0;\n // #endif\n\n get currentIndex(): number {\n return this._currentIndex;\n }\n\n get source(): string {\n return this._source;\n }\n\n // #if _VERBOSE\n get line() {\n return this._line;\n }\n\n get column() {\n return this._column;\n }\n // #endif\n\n constructor(source?: string) {\n this._source = source;\n }\n\n setSource(source: string): void {\n this._source = source;\n this._currentIndex = 0;\n // #if _VERBOSE\n this._line = this._column = 0;\n // #endif\n }\n\n getShaderPosition(backOffset = 0): ShaderPosition {\n return ShaderCompiler.createPosition(\n this._currentIndex - backOffset,\n // #if _VERBOSE\n this._line,\n this._column - backOffset\n // #endif\n );\n }\n\n isEnd(): boolean {\n return this._currentIndex >= this._source.length;\n }\n\n getCurChar(): string {\n return this._source[this._currentIndex];\n }\n\n getCurCharCode(): number {\n return this._source.charCodeAt(this._currentIndex);\n }\n\n advance(count: number): void {\n // #if _VERBOSE\n const source = this._source;\n const startIndex = this._currentIndex;\n for (let i = 0; i < count; i++) {\n if (source[startIndex + i] === \"\\n\") {\n this._line += 1;\n this._column = 0;\n } else {\n this._column += 1;\n }\n }\n // #endif\n this._currentIndex += count;\n }\n\n skipSpace(includeLineBreak: boolean): void {\n while (BaseLexer.isWhiteSpaceChar(this.getCurCharCode(), includeLineBreak)) {\n this.advance(1);\n }\n }\n\n skipCommentsAndSpace(): void {\n const source = this._source;\n const length = source.length;\n let index = this._currentIndex;\n\n while (index < length) {\n // Whitespace including newlines — `\\n` is just a separator in the\n // top-level (non-directive) scan path.\n while (index < length && BaseLexer.isWhiteSpaceChar(source.charCodeAt(index), true)) {\n index++;\n }\n const afterBlock = BaseLexer._skipBlockComment(source, index, length);\n if (afterBlock !== index) {\n index = afterBlock;\n continue;\n }\n const afterLine = BaseLexer._skipLineComment(source, index, length);\n if (afterLine !== index) {\n index = afterLine;\n continue;\n }\n break;\n }\n\n this.advance(index - this._currentIndex);\n }\n\n peek(to: number): string {\n const offset = this._currentIndex;\n return this._source.substring(offset, offset + to);\n }\n\n scanLexeme(lexeme: string): void {\n this.skipCommentsAndSpace();\n const length = lexeme.length;\n const peek = this.peek(length);\n if (peek !== lexeme) {\n this.throwError(this.getShaderPosition(0), `Expect lexeme \"${lexeme}\", but got \"${peek}\"`);\n }\n this.advance(length);\n }\n\n scanTwoExpectedLexemes(lexeme1: string, lexeme2: string): string | null {\n this.skipCommentsAndSpace();\n\n // Check first lexeme\n if (this.peek(lexeme1.length) === lexeme1) {\n this.advance(lexeme1.length);\n return lexeme1;\n }\n\n // Check second lexeme\n if (this.peek(lexeme2.length) === lexeme2) {\n this.advance(lexeme2.length);\n return lexeme2;\n }\n\n return null;\n }\n\n throwError(pos: ShaderPosition | ShaderRange, ...msgs: any[]) {\n const error = ShaderCompilerUtils.createGSError(msgs.join(\" \"), GSErrorName.ScannerError, this._source, pos);\n // #if _VERBOSE\n console.error(error!.toString());\n // #endif\n throw error;\n }\n\n scanPairedChar(left: string, right: string, balanced: boolean, skipLeading: boolean): string {\n if (!skipLeading) {\n this.scanLexeme(left);\n }\n\n const start = this._currentIndex;\n const source = this._source;\n const sourceLength = source.length;\n\n let currentIndex = this._currentIndex;\n if (balanced) {\n let level = 1;\n while (currentIndex < sourceLength) {\n const currentChar = source[currentIndex];\n if (currentChar === right && --level === 0) {\n break;\n } else if (currentChar === left) {\n level++;\n }\n currentIndex++;\n }\n } else {\n while (currentIndex < sourceLength) {\n if (source[currentIndex] === right) {\n break;\n }\n currentIndex++;\n }\n }\n\n this.advance(currentIndex + 1 - this._currentIndex);\n\n return source.substring(start, currentIndex);\n }\n\n abstract scanToken(onToken?: OnToken): void;\n}\n","import { ETokenType } from \"../common\";\nimport { BaseLexer } from \"../common/BaseLexer\";\nimport { BaseToken, BranchConstraint, BranchSignature, EMPTY_BRANCH, EOF } from \"../common/BaseToken\";\nimport { Keyword } from \"../common/enums/Keyword\";\nimport { MacroDefineInfo, MacroDefineList } from \"../Preprocessor\";\nimport { ShaderCompiler } from \"../ShaderCompiler\";\n\n/**\n * The Lexer of Shader Compiler\n */\nexport class Lexer extends BaseLexer {\n private static _lexemeTable = <Record<string, Keyword>>{\n const: Keyword.CONST,\n bool: Keyword.BOOL,\n float: Keyword.FLOAT,\n double: Keyword.DOUBLE,\n int: Keyword.INT,\n uint: Keyword.UINT,\n break: Keyword.BREAK,\n continue: Keyword.CONTINUE,\n do: Keyword.DO,\n else: Keyword.ELSE,\n for: Keyword.FOR,\n if: Keyword.IF,\n while: Keyword.WHILE,\n discard: Keyword.DISCARD,\n return: Keyword.RETURN,\n bvec2: Keyword.BVEC2,\n bvec3: Keyword.BVEC3,\n bvec4: Keyword.BVEC4,\n ivec2: Keyword.IVEC2,\n ivec3: Keyword.IVEC3,\n ivec4: Keyword.IVEC4,\n uvec2: Keyword.UVEC2,\n uvec3: Keyword.UVEC3,\n uvec4: Keyword.UVEC4,\n vec2: Keyword.VEC2,\n vec3: Keyword.VEC3,\n vec4: Keyword.VEC4,\n mat2: Keyword.MAT2,\n mat3: Keyword.MAT3,\n mat4: Keyword.MAT4,\n in: Keyword.IN,\n out: Keyword.OUT,\n inout: Keyword.INOUT,\n sampler2D: Keyword.SAMPLER2D,\n samplerCube: Keyword.SAMPLER_CUBE,\n sampler3D: Keyword.SAMPLER3D,\n sampler2DShadow: Keyword.SAMPLER2D_SHADOW,\n samplerCubeShadow: Keyword.SAMPLER_CUBE_SHADOW,\n sampler2DArray: Keyword.SAMPLER2D_ARRAY,\n sampler2DArrayShadow: Keyword.SAMPLER2D_ARRAY_SHADOW,\n isampler2D: Keyword.I_SAMPLER2D,\n isampler3D: Keyword.I_SAMPLER3D,\n isamplerCube: Keyword.I_SAMPLER_CUBE,\n isampler2DArray: Keyword.I_SAMPLER2D_ARRAY,\n usampler2D: Keyword.U_SAMPLER2D,\n usampler3D: Keyword.U_SAMPLER3D,\n usamplerCube: Keyword.U_SAMPLER_CUBE,\n usampler2DArray: Keyword.U_SAMPLER2D_ARRAY,\n struct: Keyword.STRUCT,\n void: Keyword.VOID,\n true: Keyword.True,\n false: Keyword.False,\n precision: Keyword.PRECISION,\n precise: Keyword.PRECISE,\n highp: Keyword.HIGHP,\n mediump: Keyword.MEDIUMP,\n lowp: Keyword.LOWP,\n invariant: Keyword.INVARIANT,\n flat: Keyword.FLAT,\n smooth: Keyword.SMOOTH,\n noperspective: Keyword.NOPERSPECTIVE,\n centroid: Keyword.CENTROID,\n layout: Keyword.LAYOUT,\n location: Keyword.LOCATION,\n\n // Macros ...\n \"#if\": Keyword.MACRO_IF,\n \"#ifdef\": Keyword.MACRO_IFDEF,\n \"#ifndef\": Keyword.MACRO_IFNDEF,\n \"#else\": Keyword.MACRO_ELSE,\n \"#elif\": Keyword.MACRO_ELIF,\n \"#endif\": Keyword.MACRO_ENDIF,\n \"#undef\": Keyword.MACRO_UNDEF\n };\n\n // Synthetic `__if_<n>` per `#if` — polarity flip makes `#else` mutually exclusive in `isVisibleFrom`.\n private static _ifCounter = 0;\n\n /** Two branch signatures are equal iff they have the same constraints in the\n * same order with the same polarity. Used by `#define` dedup and AST upgrade\n * matching. */\n static sameBranch(a: BranchSignature, b: BranchSignature): boolean {\n if (a.length !== b.length) return false;\n for (let i = 0, n = a.length; i < n; i++) {\n if (a[i].name !== b[i].name || a[i].defined !== b[i].defined) return false;\n }\n return true;\n }\n\n /**\n * Returns true if a `#define` registered under `defBranch` is reachable from\n * a call site under `callSiteBranch`. Two signatures are mutually exclusive\n * iff some flag appears in both with opposite `defined` polarity. Anything\n * else is compatible — the same flag with the same polarity, or flags that\n * simply don't intersect.\n *\n * Conservative for `#if expr` (not modeled — `tokenize` pushes a sentinel\n * with `name === \"\"` to keep the `#endif` stack depth correct; that\n * sentinel never matches a real flag in the polarity check below, so it\n * stays visible from everywhere). Exact for the common `#ifdef` /\n * `#ifndef` / `#else` cases that drive real shader code.\n */\n static isVisibleFrom(defBranch: BranchSignature, callSiteBranch: BranchSignature): boolean {\n for (let i = 0, n = defBranch.length; i < n; i++) {\n const d = defBranch[i];\n for (let j = 0, m = callSiteBranch.length; j < m; j++) {\n const c = callSiteBranch[j];\n if (d.name === c.name && d.defined !== c.defined) return false;\n }\n }\n return true;\n }\n\n private _needScanMacroConditionExpression = false;\n\n // --- `#define` scanning state machine ---\n // Expression-style `#define` produces a token stream:\n // MACRO_DEFINE, ID(name), [MACRO_DEFINE_PARAMS], <value tokens>, MACRO_DEFINE_END\n // The three flags below encode the mini state machine driving that stream:\n // - _inMacroDefineValue : persistent mode — newline terminates the directive\n // rather than being skipped as whitespace\n // - _macroDefineExpectsNameToken : one-shot — next identifier is the macro\n // name and must be ID (not MACRO_CALL even if the\n // name was registered by a prior definition)\n // - _macroDefineExpectsParamsToken : one-shot — if next char is `(`, capture\n // the balanced `(…)` block as a single opaque token\n // so the CFG doesn't need its own parameter-list\n // non-terminal (which would conflict with\n // function_call_parameter_list under LALR(1))\n private _inMacroDefineValue = false;\n private _macroDefineExpectsNameToken = false;\n private _macroDefineExpectsParamsToken = false;\n\n // Fields populated as the state machine walks a `#define` directive; consumed\n // by `_emitMacroDefineEnd` to register the directive without re-parsing.\n private _currentMacroName = \"\";\n private _currentMacroParamsLexeme: string | undefined = undefined;\n private _currentMacroValueStart = -1;\n\n // Active `#ifdef`/`#ifndef`/`#else` stack. Updated by `tokenize` between\n // emitting tokens; read by `_registerMacroDefine` (when it registers a\n // legacy entry mid-scan) and stamped onto every emitted token's `branch`\n // field so AST nodes know which branch they're inside.\n private _branchStack: BranchConstraint[] = [];\n // True when the previous token was `#ifdef`/`#ifndef` and we're waiting on\n // the next ID token (the flag name) to actually push onto the stack.\n private _pendingBranchPushDefined: boolean | null = null;\n\n *tokenize() {\n while (!this.isEnd()) {\n const tok = this.scanToken();\n\n // Resolve a pending #ifdef/#ifndef push using the flag-name token that\n // immediately follows the keyword. Grammar allows the name to be either\n // a plain `id` or a `MACRO_CALL` (for `#ifdef <previously-defined-macro>`).\n if (this._pendingBranchPushDefined !== null && (tok.type === ETokenType.ID || tok.type === Keyword.MACRO_CALL)) {\n this._branchStack.push({ name: tok.lexeme, defined: this._pendingBranchPushDefined });\n this._pendingBranchPushDefined = null;\n }\n\n // Stamp the branch onto the token only when inside an `#ifdef`. The\n // top-level case keeps the BaseToken default (shared empty signature),\n // so the hot path stays allocation-free.\n if (this._branchStack.length > 0) tok.branch = this._branchStack.slice();\n\n // Update stack state based on the just-emitted token, so the *next*\n // token sees the correct snapshot. `#if expr` opens a level we can't\n // address (we don't model expressions), but must consume a stack slot\n // so the matching `#endif` pops the right depth — without it, an\n // outer `#ifdef A`'s constraint would be wrongly popped.\n switch (tok.type as Keyword) {\n case Keyword.MACRO_IFDEF:\n this._pendingBranchPushDefined = true;\n break;\n case Keyword.MACRO_IFNDEF:\n this._pendingBranchPushDefined = false;\n break;\n case Keyword.MACRO_IF:\n this._branchStack.push({ name: `__if_${++Lexer._ifCounter}`, defined: true });\n break;\n case Keyword.MACRO_ELIF:\n // Each `#elif` link gets a fresh tag so it's exclusive with earlier arms.\n if (this._branchStack.length > 0) {\n this._branchStack[this._branchStack.length - 1] = {\n name: `__if_${++Lexer._ifCounter}`,\n defined: true\n };\n }\n break;\n case Keyword.MACRO_ELSE: {\n // Flip polarity: `#ifdef X` → `[X=true]` becomes `[X=false]`; `__if_n` likewise.\n const top = this._branchStack[this._branchStack.length - 1];\n if (top) this._branchStack[this._branchStack.length - 1] = { name: top.name, defined: !top.defined };\n break;\n }\n case Keyword.MACRO_ENDIF:\n this._branchStack.pop();\n break;\n }\n\n yield tok;\n }\n return EOF;\n }\n\n constructor(\n source: string,\n public macroDefineList: MacroDefineList\n ) {\n super(source);\n }\n\n override scanToken(): BaseToken {\n if (this._inMacroDefineValue) {\n // Inside a `#define` value: newline ends the directive. Skip only spaces/tabs\n // and block comments, never \\n, so the termination can be detected.\n this._skipInlineSpaceAndComments();\n if (this.isEnd() || this._isAtLineBreak()) {\n return this._emitMacroDefineEnd();\n }\n // Right after the macro name, if the next char is `(`, capture the whole\n // parenthesized parameter list as one opaque token. This keeps the\n // macro-define grammar LALR(1)-friendly (no nested param-list non-terminal).\n if (this._macroDefineExpectsParamsToken) {\n this._macroDefineExpectsParamsToken = false;\n if (this.getCurChar() === \"(\") {\n return this._scanMacroDefineParams();\n }\n }\n } else {\n this.skipCommentsAndSpace();\n if (this.isEnd()) {\n return EOF;\n }\n }\n\n if (this._needScanMacroConditionExpression) {\n this._needScanMacroConditionExpression = false;\n return this._scanMacroConditionExpression();\n }\n\n const curCharCode = this.getCurCharCode();\n if (BaseLexer.isPreprocessorStartChar(curCharCode)) {\n return this._scanDirectives();\n }\n if (BaseLexer.isAlpha(curCharCode)) {\n return this._scanWord();\n }\n if (BaseLexer.isDigit(curCharCode)) {\n return this._scanNum();\n }\n\n const start = this.getShaderPosition();\n const token = BaseToken.pool.get();\n let curChar: string;\n\n switch (this.getCurChar()) {\n case \"<\":\n this.advance(1);\n curChar = this.getCurChar();\n if (curChar === \"<\") {\n this.advance(1);\n if (this.getCurChar() === \"=\") {\n this.advance(1);\n token.set(ETokenType.LEFT_ASSIGN, \"<<=\", start);\n break;\n }\n token.set(ETokenType.LEFT_OP, \"<<\", start);\n break;\n } else if (curChar === \"=\") {\n this.advance(1);\n token.set(ETokenType.LE_OP, \"<=\", start);\n break;\n }\n token.set(ETokenType.LEFT_ANGLE, \"<\", start);\n break;\n\n case \">\":\n this.advance(1);\n curChar = this.getCurChar();\n if (curChar === \">\") {\n this.advance(1);\n if (this.getCurChar() === \"=\") {\n this.advance(1);\n token.set(ETokenType.RIGHT_ASSIGN, \">>=\", start);\n break;\n }\n token.set(ETokenType.RIGHT_OP, \">>\", start);\n break;\n } else if (curChar === \"=\") {\n this.advance(1);\n token.set(ETokenType.GE_OP, \">=\", start);\n break;\n }\n token.set(ETokenType.RIGHT_ANGLE, \">\", start);\n break;\n\n case \"+\":\n this.advance(1);\n curChar = this.getCurChar();\n if (curChar === \"+\") {\n this.advance(1);\n token.set(ETokenType.INC_OP, \"++\", start);\n break;\n } else if (curChar === \"=\") {\n this.advance(1);\n token.set(ETokenType.ADD_ASSIGN, \"+=\", start);\n break;\n }\n token.set(ETokenType.PLUS, \"+\", start);\n break;\n\n case \"-\":\n this.advance(1);\n curChar = this.getCurChar();\n if (curChar === \"-\") {\n this.advance(1);\n token.set(ETokenType.DEC_OP, \"--\", start);\n break;\n } else if (curChar === \"=\") {\n this.advance(1);\n token.set(ETokenType.SUB_ASSIGN, \"-=\", start);\n break;\n }\n token.set(ETokenType.DASH, \"-\", start);\n break;\n\n case \"=\":\n this.advance(1);\n if (this.getCurChar() === \"=\") {\n this.advance(1);\n token.set(ETokenType.EQ_OP, \"==\", start);\n break;\n }\n token.set(ETokenType.EQUAL, \"=\", start);\n break;\n\n case \"!\":\n this.advance(1);\n if (this.getCurChar() === \"=\") {\n this.advance(1);\n token.set(ETokenType.NE_OP, \"!=\", start);\n break;\n }\n token.set(ETokenType.BANG, \"!\", start);\n break;\n\n case \"&\":\n this.advance(1);\n curChar = this.getCurChar();\n if (curChar === \"&\") {\n this.advance(1);\n token.set(ETokenType.AND_OP, \"&&\", start);\n break;\n } else if (curChar === \"=\") {\n this.advance(1);\n token.set(ETokenType.AND_ASSIGN, \"&=\", start);\n break;\n }\n token.set(ETokenType.AMPERSAND, \"&\", start);\n break;\n\n case \"|\":\n this.advance(1);\n curChar = this.getCurChar();\n if (curChar === \"|\") {\n this.advance(1);\n token.set(ETokenType.OR_OP, \"||\", start);\n break;\n } else if (curChar === \"=\") {\n this.advance(1);\n token.set(ETokenType.OR_ASSIGN, \"|=\", start);\n break;\n }\n token.set(ETokenType.VERTICAL_BAR, \"|\", start);\n break;\n\n case \"^\":\n this.advance(1);\n curChar = this.getCurChar();\n if (curChar === \"^\") {\n this.advance(1);\n token.set(ETokenType.XOR_OP, \"^^\", start);\n break;\n } else if (curChar === \"=\") {\n this.advance(1);\n token.set(ETokenType.XOR_ASSIGN, \"^=\", start);\n break;\n }\n token.set(ETokenType.CARET, \"^\", start);\n break;\n\n case \"*\":\n this.advance(1);\n if (this.getCurChar() === \"=\") {\n this.advance(1);\n token.set(ETokenType.MUL_ASSIGN, \"*=\", start);\n break;\n }\n\n token.set(ETokenType.STAR, \"*\", start);\n break;\n\n case \"/\":\n this.advance(1);\n if (this.getCurChar() === \"=\") {\n this.advance(1);\n\n token.set(ETokenType.DIV_ASSIGN, \"/=\", start);\n break;\n }\n\n token.set(ETokenType.SLASH, \"/\", start);\n break;\n\n case \"%\":\n this.advance(1);\n if (this.getCurChar() === \"=\") {\n this.advance(1);\n\n token.set(ETokenType.MOD_ASSIGN, \"%=\", start);\n break;\n }\n\n token.set(ETokenType.PERCENT, \"%\", start);\n break;\n\n case \"(\":\n this.advance(1);\n\n token.set(ETokenType.LEFT_PAREN, \"(\", start);\n break;\n case \")\":\n this.advance(1);\n\n token.set(ETokenType.RIGHT_PAREN, \")\", start);\n break;\n case \"{\":\n this.advance(1);\n\n token.set(ETokenType.LEFT_BRACE, \"{\", start);\n break;\n case \"}\":\n this.advance(1);\n\n token.set(ETokenType.RIGHT_BRACE, \"}\", start);\n break;\n case \"[\":\n this.advance(1);\n\n token.set(ETokenType.LEFT_BRACKET, \"[\", start);\n break;\n case \"]\":\n this.advance(1);\n\n token.set(ETokenType.RIGHT_BRACKET, \"]\", start);\n break;\n case \".\":\n this.advance(1);\n if (BaseLexer.isDigit(this.getCurCharCode())) {\n return this._scanNumAfterDot();\n }\n\n token.set(ETokenType.DOT, \".\", start);\n break;\n case \",\":\n this.advance(1);\n\n token.set(ETokenType.COMMA, \",\", start);\n break;\n case \":\":\n this.advance(1);\n\n token.set(ETokenType.COLON, \":\", start);\n return token;\n case \";\":\n this.advance(1);\n\n token.set(ETokenType.SEMICOLON, \";\", start);\n break;\n case \"~\":\n this.advance(1);\n\n token.set(ETokenType.TILDE, \"~\", start);\n break;\n case \"?\":\n this.advance(1);\n\n token.set(ETokenType.QUESTION, \"?\", start);\n break;\n case '\"':\n this.advance(1);\n return this._scanStringConst();\n\n default:\n this.throwError(this.getShaderPosition(0), `Unexpected character ${this.getCurChar()}`);\n }\n return token;\n }\n\n private _scanStringConst(): BaseToken {\n const start = this.getShaderPosition();\n const buffer: string[] = [];\n while (this.getCurChar() !== '\"') {\n buffer.push(this.getCurChar());\n this.advance(1);\n }\n this.advance(1);\n const range = ShaderCompiler.createRange(start, this.getShaderPosition());\n\n const token = BaseToken.pool.get();\n token.set(ETokenType.STRING_CONST, buffer.join(\"\"), range);\n return token;\n }\n\n private _scanNumAfterDot(): BaseToken {\n const buffer = [\".\"];\n while (BaseLexer.isDigit(this.getCurCharCode())) {\n buffer.push(this.getCurChar());\n this.advance(1);\n }\n this._scanFloatSuffix(buffer);\n const token = BaseToken.pool.get();\n token.set(ETokenType.FLOAT_CONSTANT, buffer.join(\"\"), this.getShaderPosition(buffer.length));\n return token;\n }\n\n private _scanUtilBreakLine(outBuffer: string[]): void {\n const src = this._source;\n const len = src.length;\n while (!this.isEnd()) {\n // Honor line-continuation so multi-line directives (`#define X a \\\\\\n + b`)\n // are not cut short at the first physical newline.\n const afterContinuation = Lexer._skipLineContinuation(src, this._currentIndex, len);\n if (afterContinuation !== this._currentIndex) {\n this.advance(afterContinuation - this._currentIndex);\n continue;\n }\n const c = src.charCodeAt(this._currentIndex);\n if (c === 10) break;\n outBuffer.push(src[this._currentIndex]);\n this.advance(1);\n }\n }\n\n private _scanDirectives(): BaseToken {\n const buffer: string[] = [this.getCurChar()];\n const start = this.getShaderPosition();\n this.advance(1);\n while (BaseLexer.isAlpha(this.getCurCharCode())) {\n buffer.push(this.getCurChar());\n this.advance(1);\n }\n const token = BaseToken.pool.get();\n const word = buffer.join(\"\");\n\n if (word === \"#define\") {\n const peek = this._peekMacroDefine();\n if (peek && peek.isExpression) {\n // AST path: the value will be tokenized by the lexer's `_inMacroDefineValue`\n // state machine and re-parsed by the expression grammar. State machine\n // fills `_currentMacroName` / `_currentMacroParamsLexeme` / `_currentMacroValueStart`\n // as it walks the value; `_emitMacroDefineEnd` consumes them.\n this._inMacroDefineValue = true;\n // The next word is the macro name: force ID type even if a prior `#define`\n // has already registered the name into `macroDefineList` (redefinition or\n // multi-chunk include), which would otherwise make the word a MACRO_CALL.\n this._macroDefineExpectsNameToken = true;\n token.set(Keyword.MACRO_DEFINE, \"#define\", start);\n } else {\n // Legacy path: opaque token sequence. Register directly from the peek\n // result without re-walking the directive.\n this._scanUtilBreakLine(buffer);\n const lexeme = \"\\n\" + buffer.join(\"\") + \"\\n\";\n if (peek) {\n this._registerMacroDefine(peek.name, peek.paramsLexeme, peek.valueStart, peek.valueEnd);\n }\n token.set(Keyword.MACRO_DEFINE_EXPRESSION, lexeme, start);\n }\n } else {\n const kt = Lexer._lexemeTable[word];\n token.set(kt ?? ETokenType.ID, word, start);\n if (word === \"#if\" || word === \"#elif\") {\n this._needScanMacroConditionExpression = true;\n }\n }\n\n return token;\n }\n\n /** True if the current char is an unescaped line break (ignoring `\\` continuation). */\n private _isAtLineBreak(): boolean {\n const c = this.getCurChar();\n return c === \"\\n\" || c === \"\\r\";\n }\n\n /**\n * Walk a `#define` directive head once and produce everything both routing\n * and registration need: name range, optional params range, value range,\n * and whether the value parses as an `expression`.\n *\n * The replacement list is split three ways:\n *\n * - **AST path** (`isExpression = true`): value parses as `expression`.\n * Covers identifiers, literals, parenthesized sub-expressions, operator\n * expressions, function calls, top-level comma lists (per C99 §6.10.3).\n *\n * - **Legacy opaque path** (`isExpression = false`, no throw): the three\n * GLSL-ES-§3.4-legal-but-not-an-expression shapes with real-world use —\n * 1. empty value e.g. `#define COMMON_INCLUDED`\n * 2. single type/qualifier keyword e.g. `#define FxaaFloat float`\n * 3. type-qualifier list e.g. `#define TEX_PARAM(s) mediump sampler2D s`\n *\n * Note on X-macro support: the classical C X-macro pattern (a list\n * macro re-expanded with redefined `X(...)`) works fine — it uses\n * function-like macros + `\\` line-continuation + `#undef`, all of\n * which Galacean supports. It does NOT require unbalanced parens.\n *\n * - **Authoring error** (throws): every other shape that's not a valid\n * `expression`. Legal token sequences in theory but not used in real\n * GLSL — almost always author mistakes. We surface one uniform\n * diagnostic with the macro name and value text and let the user fix\n * their code instead of routing politely.\n *\n * Unsupported shapes that throw (non-exhaustive — the predicate is\n * \"the value doesn't reduce as `expression` and isn't one of the three\n * legacy shapes above\"):\n * - leading bare punctuation `,` `;` `:` `?` `)` `]`\n * - trailing `,` or `;` e.g. `#define X a, b,`\n * - trailing binary / unary op `+` `-` `*` `/` `%` `&` `|` `^`\n * `<` `>` `=` `!` `~`\n * - trailing ternary fragment `?` or `:`\n * - unbalanced `[` / `]` e.g. `#define X a[b`\n * - unbalanced `(` / `)` e.g. `#define PAREN (`\n *\n * Returns `null` if the directive is malformed before the name. `cursor` is\n * the position past the last non-newline char (caller advances from there).\n */\n private _peekMacroDefine(): {\n name: string;\n paramsLexeme: string | undefined;\n valueStart: number;\n valueEnd: number;\n cursor: number;\n isExpression: boolean;\n } | null {\n const src = this._source;\n const len = src.length;\n let i = Lexer._skipNonSemantic(src, this._currentIndex, len);\n if (!(i < len && BaseLexer.isAlpha(src.charCodeAt(i)))) return null;\n const nameStart = i;\n while (i < len && BaseLexer.isAlnum(src.charCodeAt(i))) i++;\n const name = src.slice(nameStart, i);\n // Optional `(params)` glued to the name (function-like per C99 §6.10.3/10;\n // whitespace before `(` makes it object-like — `(` becomes part of value).\n let paramsLexeme: string | undefined;\n if (i < len && src.charCodeAt(i) === 40 /* '(' */) {\n const paramsStart = i;\n let depth = 1;\n i++;\n while (i < len && depth > 0) {\n i = Lexer._skipNonSemantic(src, i, len);\n if (i >= len) break;\n const c = src.charCodeAt(i);\n if (c === 10 || c === 13) {\n // Unbalanced before newline — treat as malformed function-like.\n return { name, paramsLexeme: undefined, valueStart: i, valueEnd: i, cursor: i, isExpression: false };\n }\n if (c === 40) depth++;\n else if (c === 41 /* ')' */) depth--;\n i++;\n }\n paramsLexeme = src.slice(paramsStart, i);\n }\n // Walk the value once tracking what routing needs.\n const valueStart = i;\n let parenDepth = 0;\n let bracketDepth = 0;\n let firstStart = -1;\n let firstEnd = -1;\n let firstFollowedByParen = false;\n let topLevelLast = -1;\n while (i < len) {\n const skipped = Lexer._skipNonSemantic(src, i, len);\n if (skipped !== i) {\n i = skipped;\n continue;\n }\n const c = src.charCodeAt(i);\n if (c === 10 || c === 13) break;\n if (firstStart === -1) {\n firstStart = i;\n if (BaseLexer.isAlpha(c)) {\n while (i < len && BaseLexer.isAlnum(src.charCodeAt(i))) i++;\n firstEnd = i;\n const after = Lexer._skipNonSemantic(src, i, len);\n firstFollowedByParen = after < len && src.charCodeAt(after) === 40;\n topLevelLast = firstEnd - 1;\n continue;\n }\n }\n if (c === 40) parenDepth++;\n else if (c === 41) parenDepth--;\n else if (c === 91 /* [ */) bracketDepth++;\n else if (c === 93 /* ] */) bracketDepth--;\n if (parenDepth === 0 && bracketDepth === 0) topLevelLast = i;\n i++;\n }\n const result = { name, paramsLexeme, valueStart, valueEnd: i, cursor: i, isExpression: false };\n // Real-world legacy shapes:\n // 1. empty value, 2. single type/qualifier kw, 3. type-qualifier list.\n if (firstStart === -1) return result;\n if (\n firstEnd !== -1 &&\n !firstFollowedByParen &&\n Lexer._isNonExpressionLeadingKeyword(src.slice(firstStart, firstEnd))\n ) {\n return result;\n }\n // Authoring errors. Anything that's neither a legal `expression` nor one\n // of the three legacy shapes above gets a single uniform diagnostic —\n // the user sees the macro name and the value text, that's enough to\n // locate and fix. We don't categorize further; the rule for users is\n // simply \"value must be a valid GLSL expression\".\n //\n // Legal expression starts: alnum (identifier / literal), `(` (group),\n // `.` (GLSL ES §4.1.4 leading-dot float literal like `.5`), `-`/`+`/`!`/`~`\n // (unary). Legal expression ends: alnum (identifier / literal), `)` (group\n // close), `]` (array-index close). Everything else at the head or\n // top-level tail is an authoring error.\n const head = src.charCodeAt(firstStart);\n const tail = topLevelLast >= 0 ? src.charCodeAt(topLevelLast) : 0;\n const headIllegal =\n !BaseLexer.isAlnum(head) &&\n head !== 40 /* ( */ &&\n head !== 46 /* . */ &&\n head !== 45 /* - */ &&\n head !== 43 /* + */ &&\n head !== 33 /* ! */ &&\n head !== 126; /* ~ */\n const tailIllegal = !BaseLexer.isAlnum(tail) && tail !== 41 /* ) */ && tail !== 93; /* ] */\n if (parenDepth !== 0 || bracketDepth !== 0 || headIllegal || tailIllegal) {\n const valueText = src.slice(firstStart, i).replace(/\\s+/g, \" \").trim();\n this.throwError(\n this.getShaderPosition(0),\n `#define ${name}: invalid replacement list — not a valid GLSL expression (\"${valueText}\")`\n );\n }\n result.isExpression = true;\n return result;\n }\n\n /** GLSL type / qualifier keywords that aren't expression starters when standing alone.\n * `true` / `false` are excluded — they're `primary_expression` literals.\n * `#`-prefixed entries are excluded — they're preprocessor directive names. */\n private static _isNonExpressionLeadingKeyword(lexeme: string): boolean {\n const kw = Lexer._lexemeTable[lexeme];\n return kw !== undefined && kw !== Keyword.True && kw !== Keyword.False && !lexeme.startsWith(\"#\");\n }\n\n /**\n * If `i` points at a `\\` immediately followed by a newline (`\\n`, `\\r`, or\n * `\\r\\n`), return the index just past the pair (a single atom in the C/GLSL\n * preprocessor view). Otherwise return `i` unchanged. This is the single\n * source of truth for line-continuation detection — callers along the\n * directive-scanning path (`_skipNonSemantic`, `_scanUtilBreakLine`,\n * `_scanMacroDefineParams`) all delegate here so the rule stays in one\n * place.\n */\n private static _skipLineContinuation(src: string, i: number, len: number): number {\n if (src.charCodeAt(i) !== 92 /* '\\\\' */ || i + 1 >= len) return i;\n const n = src.charCodeAt(i + 1);\n if (n === 10) return i + 2;\n if (n === 13) return i + 2 < len && src.charCodeAt(i + 2) === 10 ? i + 3 : i + 2;\n return i;\n }\n\n /**\n * Pure positional version of \"skip non-semantic characters within a single\n * `#define` directive\": spaces, tabs, `\\` + newline line-continuation, block\n * comments, line comments. A real `\\n` (without preceding `\\`) is *not*\n * consumed — it terminates the directive — so callers can detect\n * end-of-directive after this returns. Shared by `_defineHasValue` (peek\n * path) and `_skipInlineSpaceAndComments` (consuming path) so both honor\n * the same lexical view.\n */\n private static _skipNonSemantic(src: string, from: number, len: number): number {\n let i = from;\n while (i < len) {\n const c = src.charCodeAt(i);\n if (c === 32 || c === 9) {\n i++;\n continue;\n }\n const afterContinuation = Lexer._skipLineContinuation(src, i, len);\n if (afterContinuation !== i) {\n i = afterContinuation;\n continue;\n }\n const afterBlock = Lexer._skipBlockComment(src, i, len);\n if (afterBlock !== i) {\n i = afterBlock;\n continue;\n }\n const afterLine = Lexer._skipLineComment(src, i, len);\n if (afterLine !== i) {\n i = afterLine;\n continue;\n }\n break;\n }\n return i;\n }\n\n /** Consuming wrapper around `_skipNonSemantic` operating on the lexer's\n * current position. Used by the `#define`-value scan state machine. Goes\n * through `advance(diff)` so verbose builds keep their line/column counters\n * in sync (advance walks the consumed slice and bumps `_line` on `\\n`). */\n private _skipInlineSpaceAndComments(): void {\n const next = Lexer._skipNonSemantic(this._source, this._currentIndex, this._source.length);\n if (next > this._currentIndex) this.advance(next - this._currentIndex);\n }\n\n /**\n * Capture a `(param1, param2, …)` block immediately after the macro name in a\n * `#define` directive, producing a single `MACRO_DEFINE_PARAMS` token whose lexeme\n * is the complete `(…)` text (including parens). Balanced parentheses are honored\n * so the scanner doesn't terminate early on inner `()`. Newlines inside the\n * parameter list are tolerated (rare; appears when the directive uses `\\` line\n * continuation), but any newline raises no special error here — it simply stops\n * capture and parser handles the resulting token however it can.\n */\n private _scanMacroDefineParams(): BaseToken {\n const start = this.getShaderPosition();\n const src = this._source;\n const len = src.length;\n const buffer: string[] = [];\n let depth = 0;\n while (this._currentIndex < len) {\n // Honor line-continuation so `#define MAX3( \\\\\\n a, b, c \\\\\\n ) …`\n // collapses onto one logical line. The `\\` and `\\n` must not enter the\n // params buffer or the grammar will reject the lexeme.\n const afterContinuation = Lexer._skipLineContinuation(src, this._currentIndex, len);\n if (afterContinuation !== this._currentIndex) {\n this.advance(afterContinuation - this._currentIndex);\n continue;\n }\n const ch = src[this._currentIndex];\n buffer.push(ch);\n if (ch === \"(\") depth++;\n else if (ch === \")\") {\n depth--;\n this.advance(1);\n if (depth === 0) break;\n continue;\n }\n this.advance(1);\n }\n const token = BaseToken.pool.get();\n const lexeme = buffer.join(\"\");\n this._currentMacroParamsLexeme = lexeme;\n // Value starts after the `)` we just consumed.\n this._currentMacroValueStart = this._currentIndex;\n token.set(Keyword.MACRO_DEFINE_PARAMS, lexeme, start);\n return token;\n }\n\n /** Emit `MACRO_DEFINE_END` at the end of a `#define` value, consuming the newline. */\n private _emitMacroDefineEnd(): BaseToken {\n const start = this.getShaderPosition();\n const valueEnd = this._currentIndex;\n const source = this._source;\n if (this._currentIndex < source.length) {\n const c = source.charCodeAt(this._currentIndex);\n if (c === 13 && source.charCodeAt(this._currentIndex + 1) === 10) {\n this.advance(2);\n } else if (c === 10 || c === 13) {\n this.advance(1);\n }\n }\n this._registerMacroDefine(\n this._currentMacroName,\n this._currentMacroParamsLexeme,\n this._currentMacroValueStart,\n valueEnd\n );\n this._inMacroDefineValue = false;\n const token = BaseToken.pool.get();\n token.set(Keyword.MACRO_DEFINE_END, \"\\n\", start);\n return token;\n }\n\n // Register a `#define` directive. Both AST and legacy paths funnel through\n // here using ranges already extracted by `_peekMacroDefine` / the value\n // state machine — no re-parsing the directive text.\n private _registerMacroDefine(\n name: string,\n paramsLexeme: string | undefined,\n valueStart: number,\n valueEnd: number\n ): void {\n const params = paramsLexeme\n ? paramsLexeme\n .slice(1, -1) // strip enclosing `(` `)`\n .split(\",\")\n .map((p) => p.trim())\n .filter(Boolean)\n : [];\n // Dedup key: normalized value text (same lexical view the token-stream\n // path sees — comments stripped, whitespace collapsed). Two `#define`s\n // with the same name but different value text produce different keys,\n // so disjoint-branch entries stay separate.\n const dedupKey = `${paramsLexeme ?? \"\"}=${Lexer._normalizeValueText(this._source, valueStart, valueEnd)}`;\n const info: MacroDefineInfo = {\n isFunction: paramsLexeme !== undefined,\n params,\n dedupKey,\n branch: this._branchStack.length === 0 ? EMPTY_BRANCH : this._branchStack.slice()\n };\n const arr = this.macroDefineList[name];\n if (!arr) {\n this.macroDefineList[name] = [info];\n return;\n }\n // Same key + same branch → duplicate (re-include). Different branches stay\n // separate so the visibility filter picks the right entry at each call site.\n for (let i = 0, n = arr.length; i < n; i++) {\n const e = arr[i];\n if (e.dedupKey === dedupKey && Lexer.sameBranch(e.branch, info.branch)) return;\n }\n arr.push(info);\n }\n\n /** Render a `[start, end)` value range as space-separated significant chars,\n * using the same comment / line-continuation rules `_skipNonSemantic`\n * applies on the token-stream path. Used as the dedup key body. */\n private static _normalizeValueText(src: string, start: number, end: number): string {\n let out = \"\";\n let i = start;\n let pendingSpace = false;\n while (i < end) {\n const skipped = Lexer._skipNonSemantic(src, i, end);\n if (skipped !== i) {\n pendingSpace = out.length > 0;\n i = skipped;\n continue;\n }\n const c = src.charCodeAt(i);\n if (c === 32 || c === 9) {\n pendingSpace = out.length > 0;\n i++;\n continue;\n }\n if (pendingSpace) {\n out += \" \";\n pendingSpace = false;\n }\n out += src[i];\n i++;\n }\n return out;\n }\n\n private _scanMacroConditionExpression(): BaseToken {\n const buffer = new Array<string>();\n const start = this.getShaderPosition();\n this._scanUtilBreakLine(buffer);\n const word = buffer.join(\"\");\n const token = BaseToken.pool.get();\n token.set(Keyword.MACRO_CONDITIONAL_EXPRESSION, word, start);\n return token;\n }\n\n private _scanWord(): BaseToken {\n const buffer: string[] = [this.getCurChar()];\n const start = this.getShaderPosition();\n this.advance(1);\n while (BaseLexer.isAlnum(this.getCurCharCode())) {\n buffer.push(this.getCurChar());\n this.advance(1);\n }\n const token = BaseToken.pool.get();\n const word = buffer.join(\"\");\n const kt = Lexer._lexemeTable[word];\n\n if (this._macroDefineExpectsNameToken) {\n // Bypass MACRO_CALL classification for this one word. Used for the name of\n // a `#define` directive so redefining a known macro still yields a declarer ID.\n this._macroDefineExpectsNameToken = false;\n this._currentMacroName = word;\n this._currentMacroParamsLexeme = undefined;\n // C99 §6.10.3/3: the macro is function-like only when `(` appears *immediately*\n // after the name (no intervening whitespace). `#define FOO (1+2)` is\n // object-like with value `(1+2)`, not a function-like macro `FOO()` with\n // body `1+2`. Check the current char before any whitespace-skipping happens\n // on the next `scanToken`, so a space-separated `(` stays part of the value.\n if (this._inMacroDefineValue) {\n this._macroDefineExpectsParamsToken = this.getCurChar() === \"(\";\n // For object-like macros, the value begins where the cursor is now\n // (after the name, before whitespace skipping). Function-like macros\n // overwrite this in `_scanMacroDefineParams` after capturing `(...)`.\n this._currentMacroValueStart = this._currentIndex;\n }\n token.set(ETokenType.ID, word, start);\n } else if (this._isVisibleMacro(word)) {\n token.set(Keyword.MACRO_CALL, word, start);\n } else {\n token.set(kt ?? ETokenType.ID, word, start);\n }\n return token;\n }\n\n /** True iff at least one `#define <word>` is reachable from the current branch. */\n private _isVisibleMacro(word: string): boolean {\n const defs = this.macroDefineList[word];\n if (!defs || defs.length === 0) return false;\n const callSiteBranch = this._branchStack;\n for (let i = 0, n = defs.length; i < n; i++) {\n if (Lexer.isVisibleFrom(defs[i].branch, callSiteBranch)) return true;\n }\n return false;\n }\n\n private _scanNum(): BaseToken {\n const buffer: string[] = [];\n\n // Hex integer literal: `0[xX][0-9a-fA-F]+[uU]?`. Detect before any\n // decimal-digit read so the `x`/`X` after the leading `0` isn't\n // misclassified as an identifier.\n if (this.getCurChar() === \"0\") {\n const nextCode = this._source.charCodeAt(this._currentIndex + 1);\n if (nextCode === 120 /* 'x' */ || nextCode === 88 /* 'X' */) {\n buffer.push(this.getCurChar());\n this.advance(1);\n buffer.push(this.getCurChar());\n this.advance(1);\n while (BaseLexer.isHexDigit(this.getCurCharCode())) {\n buffer.push(this.getCurChar());\n this.advance(1);\n }\n if (buffer.length === 2) {\n this.throwError(this.getShaderPosition(0), \"lexing error, hex literal needs at least one digit.\");\n }\n this._scanIntegerSuffix(buffer);\n\n const token = BaseToken.pool.get();\n token.set(ETokenType.INT_CONSTANT, buffer.join(\"\"), this.getShaderPosition(buffer.length));\n return token;\n }\n }\n\n while (BaseLexer.isDigit(this.getCurCharCode())) {\n buffer.push(this.getCurChar());\n this.advance(1);\n }\n const curChar = this.getCurChar();\n if (curChar === \".\") {\n buffer.push(curChar);\n this.advance(1);\n while (BaseLexer.isDigit(this.getCurCharCode())) {\n buffer.push(this.getCurChar());\n this.advance(1);\n }\n this._scanFloatSuffix(buffer);\n\n const token = BaseToken.pool.get();\n token.set(ETokenType.FLOAT_CONSTANT, buffer.join(\"\"), this.getShaderPosition(buffer.length));\n return token;\n } else if (curChar === \"e\" || curChar === \"E\") {\n this._scanFloatSuffix(buffer);\n\n const token = BaseToken.pool.get();\n token.set(ETokenType.FLOAT_CONSTANT, buffer.join(\"\"), this.getShaderPosition(buffer.length));\n return token;\n } else if (curChar === \"f\" || curChar === \"F\") {\n // Pure-integer + `f`/`F` suffix → float (`5f`, `100F`).\n buffer.push(curChar);\n this.advance(1);\n\n const token = BaseToken.pool.get();\n token.set(ETokenType.FLOAT_CONSTANT, buffer.join(\"\"), this.getShaderPosition(buffer.length));\n return token;\n } else {\n this._scanIntegerSuffix(buffer);\n\n const token = BaseToken.pool.get();\n token.set(ETokenType.INT_CONSTANT, buffer.join(\"\"), this.getShaderPosition(buffer.length));\n return token;\n }\n }\n\n private _scanFloatSuffix(buffer: string[]): void {\n let curChar = this.getCurChar();\n if (curChar === \"e\" || curChar === \"E\") {\n buffer.push(curChar);\n this.advance(1);\n curChar = this.getCurChar();\n if (curChar === \"+\" || curChar === \"-\") {\n buffer.push(curChar);\n this.advance(1);\n curChar = this.getCurChar();\n }\n if (!BaseLexer.isDigit(this.getCurCharCode()))\n this.throwError(this.getShaderPosition(0), \"lexing error, invalid exponent suffix.\");\n\n do {\n buffer.push(curChar);\n this.advance(1);\n curChar = this.getCurChar();\n } while (BaseLexer.isDigit(this.getCurCharCode()));\n }\n if (curChar === \"f\" || curChar === \"F\") {\n buffer.push(curChar);\n this.advance(1);\n }\n }\n\n private _scanIntegerSuffix(buffer: string[]): void {\n const curChar = this.getCurChar();\n if (curChar === \"u\" || curChar === \"U\") {\n buffer.push(curChar);\n this.advance(1);\n }\n }\n}\n","import { GalaceanDataType } from \"../../common\";\nimport { Keyword } from \"../../common/enums/Keyword\";\nimport { EShaderStage } from \"../../common/enums/ShaderStage\";\n\nexport const BuiltinVariableTable: Map<string, BuiltinVariable> = new Map();\n\nexport class BuiltinVariable {\n type: GalaceanDataType;\n lexeme: string;\n scope: EShaderStage;\n\n private constructor(type: GalaceanDataType, lexeme: string, scope: EShaderStage) {\n this.type = type;\n this.lexeme = lexeme;\n this.scope = scope;\n }\n\n static createVariable(lexeme: string, type: GalaceanDataType, scope = EShaderStage.ALL) {\n const item = new BuiltinVariable(type, lexeme, scope);\n BuiltinVariableTable.set(lexeme, item);\n }\n\n static getVar(ident: string): BuiltinVariable {\n return BuiltinVariableTable.get(ident);\n }\n}\n\nBuiltinVariable.createVariable(\"gl_VertexID\", Keyword.INT, EShaderStage.VERTEX);\nBuiltinVariable.createVariable(\"gl_InstanceID\", Keyword.INT, EShaderStage.VERTEX);\nBuiltinVariable.createVariable(\"gl_Position\", Keyword.VEC4, EShaderStage.VERTEX);\nBuiltinVariable.createVariable(\"gl_PointSize\", Keyword.FLOAT, EShaderStage.VERTEX);\n\nBuiltinVariable.createVariable(\"gl_FragCoord\", Keyword.VEC4, EShaderStage.FRAGMENT);\nBuiltinVariable.createVariable(\"gl_FrontFacing\", Keyword.BOOL, EShaderStage.FRAGMENT);\nBuiltinVariable.createVariable(\"gl_FragDepth\", Keyword.FLOAT, EShaderStage.FRAGMENT);\nBuiltinVariable.createVariable(\"gl_PointCoord\", Keyword.VEC2, EShaderStage.FRAGMENT);\nBuiltinVariable.createVariable(\"gl_FragColor\", Keyword.VEC4, EShaderStage.FRAGMENT);\nBuiltinVariable.createVariable(\"gl_FragData\", Keyword.VEC4_ARRAY, EShaderStage.FRAGMENT);\n\nBuiltinVariable.createVariable(\"gl_MaxVertexAttribs\", Keyword.INT);\nBuiltinVariable.createVariable(\"gl_MaxVertexUniformVectors\", Keyword.INT);\nBuiltinVariable.createVariable(\"gl_MaxVertexOutputVectors\", Keyword.INT);\nBuiltinVariable.createVariable(\"gl_MaxFragmentInputVectors\", Keyword.INT);\nBuiltinVariable.createVariable(\"gl_MaxVertexTextureImageUnits\", Keyword.INT);\nBuiltinVariable.createVariable(\"gl_MaxCombinedTextureImageUnits\", Keyword.INT);\nBuiltinVariable.createVariable(\"gl_MaxTextureImageUnits\", Keyword.INT);\nBuiltinVariable.createVariable(\"gl_MaxFragmentUniformVectors\", Keyword.INT);\nBuiltinVariable.createVariable(\"gl_MaxDrawBuffers\", Keyword.INT);\nBuiltinVariable.createVariable(\"gl_MinProgramTexelOffset\", Keyword.INT);\nBuiltinVariable.createVariable(\"gl_MaxProgramTexelOffset\", Keyword.INT);\n","import { Logger } from \"@galacean/engine-core\";\nimport { IBaseSymbol } from \"./IBaseSymbol\";\n\nexport class SymbolTable<T extends IBaseSymbol> {\n private _table: Map<string, T[]> = new Map();\n\n insert(symbol: T, isInMacroBranch = false): void {\n symbol.isInMacroBranch = isInMacroBranch;\n\n const entry = this._table.get(symbol.ident) ?? [];\n for (let i = 0, n = entry.length; i < n; i++) {\n if (entry[i].isInMacroBranch) continue;\n if (entry[i].equal(symbol)) {\n Logger.warn(\"Replace symbol:\", symbol.ident);\n entry[i] = symbol;\n return;\n }\n }\n\n entry.push(symbol);\n this._table.set(symbol.ident, entry);\n }\n\n getSymbol(symbol: T, includeMacro = false): T | undefined {\n const entry = this._table.get(symbol.ident);\n if (entry) {\n for (let i = entry.length - 1; i >= 0; i--) {\n const item = entry[i];\n if (!includeMacro && item.isInMacroBranch) continue;\n if (item.equal(symbol)) return item;\n }\n }\n }\n\n getSymbols(symbol: T, includeMacro = false, out: T[]): T[] {\n out.length = 0;\n this._getSymbols(symbol, includeMacro, out);\n\n return out;\n }\n\n /**\n * @internal\n */\n _getSymbols(symbol: T, includeMacro = false, out: T[]): T[] {\n const entry = this._table.get(symbol.ident);\n\n if (entry) {\n for (let i = entry.length - 1; i >= 0; i--) {\n const item = entry[i];\n if (!includeMacro && item.isInMacroBranch) continue;\n if (item.equal(symbol)) out.push(item);\n }\n }\n\n return out;\n }\n\n /** Iterate every registered symbol. Order within a name bucket is insertion order. */\n forEach(callback: (symbol: T) => void): void {\n for (const entries of this._table.values()) {\n for (let i = 0, n = entries.length; i < n; i++) {\n callback(entries[i]);\n }\n }\n }\n}\n","import { IBaseSymbol } from \"./IBaseSymbol\";\nimport { SymbolTable } from \"./SymbolTable\";\n\nexport class SymbolTableStack<S extends IBaseSymbol, T extends SymbolTable<S>> {\n stack: T[] = [];\n\n /**\n * @internal\n */\n _macroLevel = 0;\n\n get scope(): T {\n return this.stack[this.stack.length - 1];\n }\n\n get isInMacroBranch(): boolean {\n return this._macroLevel > 0;\n }\n\n pushScope(scope: T): void {\n this.stack.push(scope);\n }\n\n clear(): void {\n this.stack.length = 0;\n }\n\n popScope(): T | undefined {\n return this.stack.pop();\n }\n\n insert(symbol: S): void {\n this.scope.insert(symbol, this.isInMacroBranch);\n }\n\n lookup(symbol: S, includeMacro = false): S | undefined {\n for (let i = this.stack.length - 1; i >= 0; i--) {\n const symbolTable = this.stack[i];\n const result = symbolTable.getSymbol(symbol, includeMacro);\n if (result) return result;\n }\n return undefined;\n }\n\n lookupAll(symbol: S, includeMacro = false, out: S[]): S[] {\n out.length = 0;\n for (let i = this.stack.length - 1; i >= 0; i--) {\n const symbolTable = this.stack[i];\n symbolTable._getSymbols(symbol, includeMacro, out);\n }\n return out;\n }\n}\n","import { GalaceanDataType } from \"../../common\";\nimport { ASTNode } from \"../AST\";\n\nexport class SymbolDataType {\n constructor(\n public type: GalaceanDataType,\n public typeLexeme: string,\n public arraySpecifier?: ASTNode.ArraySpecifier\n ) {}\n}\n","import { ASTNode } from \"../AST\";\nimport { SymbolDataType } from \"./SymbolDataType\";\nimport { ESymbolType, SymbolInfo } from \"./SymbolInfo\";\n\nexport class FnSymbol extends SymbolInfo {\n declare astNode: ASTNode.FunctionDefinition;\n\n constructor(lexeme: string, astNode: ASTNode.FunctionDefinition) {\n const type = new SymbolDataType(\n astNode.protoType.returnType.type,\n astNode.protoType.returnType.typeSpecifier.lexeme\n );\n super(lexeme, ESymbolType.FN, astNode, type);\n }\n}\n","import { ASTNode } from \"../AST\";\nimport { ESymbolType, SymbolInfo } from \"./SymbolInfo\";\n\nexport class StructSymbol extends SymbolInfo {\n declare astNode: ASTNode.StructSpecifier;\n\n constructor(lexeme: string, astNode: ASTNode.StructSpecifier) {\n super(lexeme, ESymbolType.STRUCT, astNode);\n }\n}\n","import { ASTNode } from \"../AST\";\nimport { SymbolDataType } from \"./SymbolDataType\";\nimport { ESymbolType, SymbolInfo } from \"./SymbolInfo\";\n\nexport class VarSymbol extends SymbolInfo {\n declare astNode:\n | ASTNode.Initializer\n | ASTNode.ParameterDeclarator\n | ASTNode.InitDeclaratorList\n | ASTNode.VariableDeclaration;\n\n readonly isGlobalVariable: boolean;\n\n constructor(\n ident: string,\n dataType: SymbolDataType,\n isGlobalVariable: boolean,\n initAst:\n | ASTNode.Initializer\n | ASTNode.ParameterDeclarator\n | ASTNode.InitDeclaratorList\n | ASTNode.VariableDeclaration\n ) {\n super(ident, ESymbolType.VAR, initAst, dataType);\n this.isGlobalVariable = isGlobalVariable;\n }\n}\n","import { SymbolInfo, SymbolTable } from \"../parser/symbolTable\";\nimport { ASTNode } from \"./AST\";\n\nexport class ShaderData {\n symbolTable: SymbolTable<SymbolInfo>;\n\n vertexMain: ASTNode.FunctionDefinition;\n fragmentMain: ASTNode.FunctionDefinition;\n\n globalPrecisions: ASTNode.PrecisionSpecifier[] = [];\n\n globalMacroDeclarations: ASTNode.GlobalDeclaration[] = [];\n\n getOuterGlobalMacroDeclarations(): ASTNode.GlobalDeclaration[] {\n return this.globalMacroDeclarations.filter((node) => node.parent instanceof ASTNode.GLShaderProgram);\n }\n}\n","import { Logger } from \"@galacean/engine-core\";\nimport { ShaderRange } from \"../common\";\nimport { SymbolTable } from \"../common/SymbolTable\";\nimport { SymbolTableStack } from \"../common/SymbolTableStack\";\nimport { GSError, GSErrorName } from \"../GSError\";\nimport { SymbolInfo } from \"../parser/symbolTable\";\nimport { ShaderCompiler } from \"../ShaderCompiler\";\nimport { ASTNode, TreeNode } from \"./AST\";\nimport { ShaderData } from \"./ShaderInfo\";\nimport { NodeChild } from \"./types\";\n\nimport { MacroDefineList } from \"../Preprocessor\";\n\nexport type TranslationRule<T = any> = (sa: SemanticAnalyzer, ...tokens: NodeChild[]) => T;\n\n/**\n * @internal\n * The semantic analyzer of `ShaderCompiler` compiler.\n * - Build symbol table\n * - Static analysis\n */\nexport default class SemanticAnalyzer {\n /**\n * @internal\n */\n static _lookupSymbol: SymbolInfo = new SymbolInfo(\"\", null);\n\n semanticStack: TreeNode[] = [];\n acceptRule?: TranslationRule = undefined;\n symbolTableStack: SymbolTableStack<SymbolInfo, SymbolTable<SymbolInfo>> = new SymbolTableStack();\n curFunctionInfo: {\n header?: ASTNode.FunctionDeclarator;\n returnStatement?: ASTNode.JumpStatement;\n } = {};\n private _shaderData = new ShaderData();\n private _translationRuleTable: Map<number /** production id */, TranslationRule> = new Map();\n\n private _macroDefineList: MacroDefineList;\n\n // #if _VERBOSE\n readonly errors: Error[] = [];\n // #endif\n\n get shaderData() {\n return this._shaderData;\n }\n\n get macroDefineList(): MacroDefineList {\n return this._macroDefineList;\n }\n\n constructor() {\n this.pushScope();\n }\n\n reset(macroDefineList: MacroDefineList) {\n this._macroDefineList = macroDefineList;\n this.semanticStack.length = 0;\n this._shaderData = new ShaderData();\n this.symbolTableStack.clear();\n this.pushScope();\n // #if _VERBOSE\n this.errors.length = 0;\n // #endif\n }\n\n pushScope() {\n this.symbolTableStack.pushScope(new SymbolTable<SymbolInfo>());\n }\n\n popScope() {\n return this.symbolTableStack.popScope();\n }\n\n addTranslationRule(pid: number, rule: TranslationRule) {\n this._translationRuleTable.set(pid, rule);\n }\n\n getTranslationRule(pid: number) {\n return this._translationRuleTable.get(pid);\n }\n\n reportError(loc: ShaderRange, message: string): void {\n // #if _VERBOSE\n this.errors.push(new GSError(GSErrorName.CompilationError, message, loc, ShaderCompiler._processingPassText));\n // #else\n console.error(message);\n // #endif\n }\n\n reportWarning(loc: ShaderRange, message: string): void {\n Logger.warn(new GSError(GSErrorName.CompilationWarn, message, loc, ShaderCompiler._processingPassText).toString());\n }\n}\n","import { GalaceanDataType } from \"../common\";\nimport { BaseToken } from \"../common/BaseToken\";\nimport { ASTNode, TreeNode } from \"./AST\";\nimport { NoneTerminal } from \"./GrammarSymbol\";\n\nexport type TraceStackItem = NoneTerminal | BaseToken;\n\nexport class SymbolType {\n constructor(\n public type: GalaceanDataType,\n public typeLexeme: string,\n public arraySpecifier?: ASTNode.ArraySpecifier\n ) {}\n}\n\nexport class StructProp implements IParamInfo {\n constructor(\n public typeInfo: SymbolType,\n public ident: BaseToken,\n public mrtIndex?: number,\n public isInMacroBranch = false\n ) {}\n}\n\nexport type NodeChild = TreeNode | BaseToken;\n\nexport type IParamInfo = {\n ident?: BaseToken;\n typeInfo?: SymbolType;\n astNode?: ASTNode.ParameterDeclaration | ASTNode.MacroParamBlock;\n};\n","import { BaseToken } from \"../common/BaseToken\";\nimport { EShaderStage } from \"../common/enums/ShaderStage\";\nimport { SymbolTable } from \"../common/SymbolTable\";\nimport { GSErrorName } from \"../GSError\";\nimport { ASTNode, TreeNode } from \"../parser/AST\";\nimport { ESymbolType, SymbolInfo } from \"../parser/symbolTable\";\nimport { StructProp } from \"../parser/types\";\nimport { ShaderCompiler } from \"../ShaderCompiler\";\nimport { ShaderCompilerUtils } from \"../ShaderCompilerUtils\";\n\n/** Role of a struct type in the shader compiler's IO flattening. */\nexport type StructRole = \"varying\" | \"attribute\" | \"mrt\";\n\n/** @internal */\nexport class VisitorContext {\n private static _lookupSymbol: SymbolInfo = new SymbolInfo(\"\", null);\n private static _singleton: VisitorContext;\n static get context() {\n return this._singleton;\n }\n\n static reset() {\n if (!this._singleton) {\n this._singleton = new VisitorContext();\n }\n this._singleton.reset();\n }\n\n attributeStructs: ASTNode.StructSpecifier[] = [];\n attributeList: StructProp[] = [];\n varyingStructs: ASTNode.StructSpecifier[] = [];\n varyingList: StructProp[] = [];\n mrtStructs: ASTNode.StructSpecifier[] = [];\n mrtList: StructProp[] = [];\n\n stage: EShaderStage;\n stageEntry: string;\n\n _referencedAttributeList: Record<string, StructProp[]>;\n _referencedVaryingList: Record<string, StructProp[]>;\n _referencedMRTList: Record<string, StructProp[]>;\n _referencedGlobals: Record<string, SymbolInfo[]>;\n _referencedGlobalMacroASTs: TreeNode[] = [];\n /**\n * Maps variable names (function params, locals, and globals whose type is a\n * varying/attribute/mrt struct) to their role. Populated during stage setup and\n * used by macro-value rewriting to recognize `varName.prop` patterns that should\n * be flattened against the IO lists.\n */\n _structVarMap: Record<string, StructRole>;\n\n _passSymbolTable: SymbolTable<SymbolInfo>;\n\n reset(resetAll = true) {\n if (resetAll) {\n this.attributeStructs.length = 0;\n this.attributeList.length = 0;\n this.varyingStructs.length = 0;\n this.varyingList.length = 0;\n this.mrtStructs.length = 0;\n this.mrtList.length = 0;\n }\n\n this._referencedAttributeList = Object.create(null);\n this._referencedVaryingList = Object.create(null);\n this._referencedMRTList = Object.create(null);\n this._referencedGlobals = Object.create(null);\n this._referencedGlobalMacroASTs.length = 0;\n if (resetAll) {\n // Struct-var bindings are pass-scoped, not stage-scoped — global `#define`\n // values must see the same bindings in both the vertex and fragment outputs,\n // so we keep the map across the vertex→fragment stage transition.\n this._structVarMap = Object.create(null);\n }\n }\n\n isAttributeStruct(type: string) {\n return this.attributeStructs.findIndex((item) => item.ident!.lexeme === type) !== -1;\n }\n\n isVaryingStruct(type: string) {\n return this.varyingStructs.findIndex((item) => item.ident!.lexeme === type) !== -1;\n }\n\n isMRTStruct(type: string) {\n return this.mrtStructs.findIndex((item) => item.ident!.lexeme === type) !== -1;\n }\n\n /** Return the role of a struct type, or undefined if it isn't one of the IO roles. */\n getStructRole(typeLexeme: string): StructRole | undefined {\n if (this.isAttributeStruct(typeLexeme)) return \"attribute\";\n if (this.isVaryingStruct(typeLexeme)) return \"varying\";\n if (this.isMRTStruct(typeLexeme)) return \"mrt\";\n }\n\n /** Register a variable as holding a value of a varying/attribute/mrt struct type. */\n registerStructVar(varName: string, role: StructRole): void {\n this._structVarMap[varName] = role;\n }\n\n referenceAttribute(ident: BaseToken): Error | void {\n return this._referenceProp(\n \"attribute\",\n ident.lexeme,\n this.attributeList,\n this._referencedAttributeList,\n ident.location\n );\n }\n\n referenceVarying(ident: BaseToken): Error | void {\n return this._referenceProp(\"varying\", ident.lexeme, this.varyingList, this._referencedVaryingList, ident.location);\n }\n\n referenceMRTProp(ident: BaseToken): Error | void {\n return this._referenceProp(\"mrt\", ident.lexeme, this.mrtList, this._referencedMRTList, ident.location);\n }\n\n referenceGlobal(ident: string, type: ESymbolType): void {\n if (this._referencedGlobals[ident]) return;\n\n this._referencedGlobals[ident] = [];\n\n const lookupSymbol = VisitorContext._lookupSymbol;\n lookupSymbol.set(ident, type);\n this._passSymbolTable.getSymbols(lookupSymbol, true, this._referencedGlobals[ident]);\n }\n\n private _referenceProp(\n role: StructRole,\n name: string,\n list: StructProp[],\n refList: Record<string, StructProp[]>,\n location: any\n ): Error | void {\n if (refList[name]) return;\n const props = list.filter((item) => item.ident.lexeme === name);\n if (!props.length) {\n return ShaderCompilerUtils.createGSError(\n `referenced ${role} not found: ${name}`,\n GSErrorName.CompilationError,\n ShaderCompiler._processingPassText,\n location\n );\n }\n refList[name] = props;\n }\n}\n","import type { IPoolElement } from \"@galacean/engine-core\";\n\nexport class TempArray<T> implements IPoolElement {\n array: Array<T> = new Array();\n\n dispose(): void {\n this.array.length = 0;\n }\n}\n","import { ShaderPosition, ShaderRange } from \"../common\";\nimport { BaseToken } from \"../common/BaseToken\";\nimport { GSErrorName } from \"../GSError\";\nimport { ASTNode, TreeNode } from \"../parser/AST\";\nimport { NoneTerminal } from \"../parser/GrammarSymbol\";\nimport { ESymbolType, FnSymbol } from \"../parser/symbolTable\";\nimport { NodeChild, StructProp } from \"../parser/types\";\nimport { ParserUtils } from \"../ParserUtils\";\nimport { ShaderCompiler } from \"../ShaderCompiler\";\nimport { StructRole, VisitorContext } from \"./VisitorContext\";\n// #if _VERBOSE\nimport { GSError } from \"../GSError\";\n// #endif\nimport { ReturnableObjectPool } from \"@galacean/engine-core\";\nimport { Keyword } from \"../common/enums/Keyword\";\nimport { TempArray } from \"../TempArray\";\nimport { ICodeSegment } from \"./types\";\n\n/**\n * @internal\n * The code generator\n */\nexport abstract class CodeGenVisitor {\n // #if _VERBOSE\n readonly errors: Error[] = [];\n // #endif\n\n abstract getAttributeProp(prop: StructProp): string;\n abstract getVaryingProp(prop: StructProp): string;\n abstract getMRTProp(prop: StructProp): string;\n\n protected static _tmpArrayPool = new ReturnableObjectPool(TempArray<string>, 10);\n\n defaultCodeGen(children: NodeChild[]) {\n const pool = CodeGenVisitor._tmpArrayPool;\n let ret = pool.get();\n ret.dispose();\n for (const child of children) {\n if (child instanceof BaseToken) {\n // Legacy opaque `#define` lexemes carry the directive verbatim — expression-style defines go through the AST path.\n ret.array.push(child.lexeme);\n } else {\n ret.array.push(child.codeGen(this));\n }\n }\n pool.return(ret);\n return ret.array.join(\" \");\n }\n\n visitPostfixExpression(node: ASTNode.PostfixExpression): string {\n const children = node.children;\n const derivationLength = children.length;\n const context = VisitorContext.context;\n\n if (derivationLength === 3) {\n const postExpr = children[0] as ASTNode.PostfixExpression;\n const prop = children[2];\n\n if (prop instanceof BaseToken) {\n // Struct role priority: `_structVarMap` by bare root ident (covers forward-declared types like `Varyings o;`),\n // then AST static type (normal path when `semanticAnalyze` resolved `postExpr.type`).\n let role: StructRole | undefined;\n const directRoot = ParserUtils.extractDirectIdentLexeme(postExpr);\n if (directRoot) role = context._structVarMap[directRoot];\n if (!role) role = context.getStructRole(<string>postExpr.type);\n\n if (role) {\n const error =\n role === \"attribute\"\n ? context.referenceAttribute(prop)\n : role === \"varying\"\n ? context.referenceVarying(prop)\n : context.referenceMRTProp(prop);\n // #if _VERBOSE\n if (error) this.errors.push(<GSError>error);\n // #endif\n return prop.lexeme;\n }\n\n return `${postExpr.codeGen(this)}.${prop.lexeme}`;\n } else {\n return `${postExpr.codeGen(this)}.${prop.codeGen(this)}`;\n }\n } else if (derivationLength === 4) {\n const identNode = children[0] as ASTNode.PostfixExpression;\n const indexNode = children[2] as ASTNode.Expression;\n const identLexeme = identNode.codeGen(this);\n const indexLexeme = indexNode.codeGen(this);\n if (identLexeme === \"gl_FragData\") {\n this._reportError(identNode.location, \"Please use MRT struct instead of gl_FragData.\");\n }\n return `${identLexeme}[${indexLexeme}]`;\n }\n\n return this.defaultCodeGen(node.children);\n }\n\n visitVariableIdentifier(node: ASTNode.VariableIdentifier): string {\n for (let name of node.referenceGlobalSymbolNames) {\n VisitorContext.context.referenceGlobal(name, ESymbolType.Any);\n }\n\n return node.getLexeme(this);\n }\n\n visitFunctionCall(node: ASTNode.FunctionCall): string {\n const call = node.children[0] as ASTNode.FunctionCallGeneric;\n if (call.fnSymbol instanceof FnSymbol) {\n VisitorContext.context.referenceGlobal(call.fnSymbol.ident, ESymbolType.FN);\n\n const paramList = call.children[2];\n if (paramList instanceof ASTNode.FunctionCallParameterList) {\n const astNodes = paramList.paramNodes;\n const paramInfoList = call.fnSymbol.astNode.protoType.parameterList;\n\n const context = VisitorContext.context;\n const params = astNodes.filter((_, i) => {\n const typeInfo = paramInfoList?.[i]?.typeInfo;\n // Drop struct-IO parameters (attribute/varying/mrt) — they're flattened\n // into top-level declarations and no longer exist as function-call args.\n return !typeInfo || !context.getStructRole(typeInfo.typeLexeme);\n });\n\n let paramsCode = \"\";\n\n for (let i = 0, length = params.length; i < length; i++) {\n const astNode = params[i];\n const code = astNode.codeGen(this);\n if (astNode instanceof ASTNode.MacroCallArgBlock || i === 0) {\n paramsCode += code;\n } else {\n paramsCode += `, ${code}`;\n }\n }\n\n return `${call.fnSymbol.ident}(${paramsCode})`;\n }\n }\n\n return this.defaultCodeGen(node.children);\n }\n\n visitMacroCallFunction(node: ASTNode.MacroCallFunction): string {\n const children = node.children;\n const paramList = children[2];\n if (paramList instanceof ASTNode.FunctionCallParameterList) {\n const astNodes = paramList.paramNodes;\n const context = VisitorContext.context;\n\n // Drop bare IO-struct args only when the macro aliases a user fn (whose\n // formal was flattened). All other shapes preserve args verbatim.\n let params: typeof astNodes;\n if (node.isFunctionLikeMacro || !node.aliasesNonBuiltinIdent) {\n params = astNodes;\n } else {\n params = astNodes.filter((arg) => {\n if (arg instanceof ASTNode.AssignmentExpression) {\n const variableParam = ParserUtils.unwrapBareIdentifier(arg, { allowParens: false });\n if (\n variableParam &&\n typeof variableParam.typeInfo === \"string\" &&\n context.getStructRole(variableParam.typeInfo)\n ) {\n return false;\n }\n }\n return true;\n });\n }\n\n let paramsCode = \"\";\n for (let i = 0, length = params.length; i < length; i++) {\n const argNode = params[i];\n const code = argNode.codeGen(this);\n\n if (argNode instanceof ASTNode.MacroCallArgBlock || i === 0) {\n paramsCode += code;\n } else {\n paramsCode += `, ${code}`;\n }\n }\n\n return `${node.macroName}(${paramsCode})`;\n } else {\n return this.defaultCodeGen(node.children);\n }\n }\n\n visitStatementList(node: ASTNode.StatementList): string {\n const children = node.children as TreeNode[];\n if (children.length === 1) {\n return children[0].codeGen(this);\n } else {\n return `${children[0].codeGen(this)}\\n${children[1].codeGen(this)}`;\n }\n }\n\n /**\n * Code-generate a `#define` macro parsed as expression AST. Produces a `#define`\n * directive whose value is the AST-rewritten string — so varying flattening\n * happens naturally via `visitPostfixExpression` inside the AST walk.\n */\n visitMacroDefine(node: ASTNode.MacroDefine): string {\n // For function-like macros, preserve the original `(params)` lexeme verbatim —\n // the parameter list is user-authored text that shouldn't be canonicalized.\n let paramsLexeme = \"\";\n if (node.isFunction) {\n const paramsToken = node.children[2];\n if (paramsToken instanceof BaseToken) paramsLexeme = paramsToken.lexeme;\n }\n const valueCode = node.valueExpression ? node.valueExpression.codeGen(this) : \"\";\n // Newlines around the directive keep `#` at the start of its physical line per\n // GLSL ES 3.0 §3.4, regardless of how surrounding tokens are joined.\n return `\\n#define ${node.macroName}${paramsLexeme}${valueCode ? \" \" + valueCode : \"\"}\\n`;\n }\n\n visitSingleDeclaration(node: ASTNode.SingleDeclaration): string {\n const type = node.typeSpecifier.type;\n if (typeof type === \"string\") {\n VisitorContext.context.referenceGlobal(type, ESymbolType.STRUCT);\n }\n return this.defaultCodeGen(node.children);\n }\n\n visitGlobalVariableDeclaration(node: ASTNode.VariableDeclaration): string {\n const children = node.children;\n const fullType = children[0];\n if (fullType instanceof ASTNode.FullySpecifiedType && fullType.typeSpecifier.isCustom) {\n const context = VisitorContext.context;\n // Global variables whose declared type is a varying/attribute/mrt struct\n // (e.g. `Varyings o;`) are not emitted as `uniform`. The variable itself is\n // already registered in `_structVarMap` by the pre-pass in\n // `GLESVisitor._collectAllStructVars`, so `visitPostfixExpression` can\n // flatten `o.field` at macro-value codegen time.\n if (context.getStructRole(fullType.typeSpecifier.lexeme)) {\n return \"\";\n }\n context.referenceGlobal(<string>fullType.type, ESymbolType.STRUCT);\n }\n return `uniform ${this.defaultCodeGen(children)}`;\n }\n\n visitDeclaration(node: ASTNode.Declaration): string {\n const { context } = VisitorContext;\n const children = node.children;\n const child = children[0];\n\n if (child instanceof ASTNode.InitDeclaratorList) {\n const typeLexeme = child.typeInfo.typeLexeme;\n if (context.isVaryingStruct(typeLexeme) || context.isMRTStruct(typeLexeme)) return \"\";\n }\n return this.defaultCodeGen(children);\n }\n\n visitFunctionParameterList(node: ASTNode.FunctionParameterList): string {\n const context = VisitorContext.context;\n const params = node.parameterInfoList.filter(\n (item) => !item.typeInfo || !context.getStructRole(item.typeInfo.typeLexeme)\n );\n\n let out = \"\";\n for (let i = 0, length = params.length; i < length; i++) {\n const item = params[i];\n const astNode = item.astNode;\n const code = astNode.codeGen(this);\n if (astNode instanceof ASTNode.MacroParamBlock || i === 0) {\n out += code;\n } else {\n out += `, ${code}`;\n }\n }\n\n return out;\n }\n\n visitFunctionHeader(node: ASTNode.FunctionHeader): string {\n const returnType = node.returnType.typeSpecifier.lexeme;\n if (VisitorContext.context.isVaryingStruct(returnType)) {\n return `void ${node.ident.lexeme}(`;\n }\n return this.defaultCodeGen(node.children);\n }\n\n visitJumpStatement(node: ASTNode.JumpStatement): string {\n const children = node.children;\n const cmd = children[0] as BaseToken;\n if (cmd.type === Keyword.RETURN) {\n const expr = children[1];\n if (expr instanceof ASTNode.Expression) {\n const returnVar = ParserUtils.unwrapNodeByType<ASTNode.VariableIdentifier>(\n expr,\n NoneTerminal.variable_identifier\n );\n if (VisitorContext.context.isVaryingStruct(<string>returnVar?.typeInfo)) {\n return \"\";\n }\n const returnFnCall = ParserUtils.unwrapNodeByType<ASTNode.FunctionCall>(expr, NoneTerminal.function_call);\n if (VisitorContext.context.isVaryingStruct(<string>returnFnCall?.type)) {\n return `${expr.codeGen(this)};`;\n }\n }\n }\n return this.defaultCodeGen(children);\n }\n\n visitFunctionIdentifier(node: ASTNode.FunctionIdentifier): string {\n return this.defaultCodeGen(node.children);\n }\n\n visitStructSpecifier(node: ASTNode.StructSpecifier): string {\n const context = VisitorContext.context;\n const { varyingStructs, attributeStructs, mrtStructs } = context;\n const isVaryingStruct = varyingStructs.indexOf(node) !== -1;\n const isAttributeStruct = attributeStructs.indexOf(node) !== -1;\n const isMRTStruct = mrtStructs.indexOf(node) !== -1;\n\n if (isVaryingStruct && isAttributeStruct) {\n this._reportError(node.location, \"cannot use same struct as Varying and Attribute\");\n }\n\n if (isVaryingStruct && isMRTStruct) {\n this._reportError(node.location, \"cannot use same struct as Varying and MRT\");\n }\n\n if (isAttributeStruct && isMRTStruct) {\n this._reportError(node.location, \"cannot use same struct as Attribute and MRT\");\n }\n\n if (isVaryingStruct || isAttributeStruct || isMRTStruct) {\n let result: ICodeSegment[] = [];\n\n result.push(\n ...node.macroExpressions.map((item) => ({\n text: item instanceof BaseToken ? item.lexeme : item.codeGen(this),\n index: item.location.start.index\n }))\n );\n\n for (const prop of node.propList) {\n const name = prop.ident.lexeme;\n if (isVaryingStruct && context._referencedVaryingList[name]?.indexOf(prop) >= 0) {\n result.push({\n text: `${this.getVaryingProp(prop)}\\n`,\n index: prop.ident.location.start.index\n });\n } else if (isAttributeStruct && context._referencedAttributeList[name]?.indexOf(prop) >= 0) {\n result.push({\n text: `${this.getAttributeProp(prop)}\\n`,\n index: prop.ident.location.start.index\n });\n } else if (isMRTStruct && context._referencedMRTList[name]?.indexOf(prop) >= 0) {\n result.push({\n text: `${this.getMRTProp(prop)}\\n`,\n index: prop.ident.location.start.index\n });\n }\n }\n\n const text = result\n .sort((a, b) => a.index - b.index)\n .map((item) => item.text)\n .join(\"\");\n\n return text;\n } else {\n return this.defaultCodeGen(node.children);\n }\n }\n\n visitFunctionDefinition(fnNode: ASTNode.FunctionDefinition): string {\n const fnName = fnNode.protoType.ident.lexeme;\n const context = VisitorContext.context;\n\n if (fnName == context.stageEntry) {\n const statements = fnNode.statements.codeGen(this);\n return `void main() ${statements}`;\n } else {\n return this.defaultCodeGen(fnNode.children);\n }\n }\n\n protected _reportError(loc: ShaderRange | ShaderPosition, message: string): void {\n // #if _VERBOSE\n this.errors.push(new GSError(GSErrorName.CompilationError, message, loc, ShaderCompiler._processingPassText));\n // #else\n console.error(message);\n // #endif\n }\n}\n","import type { IShaderInfo } from \"@galacean/engine-design\";\nimport { BaseToken } from \"../common/BaseToken\";\nimport { EShaderStage } from \"../common/enums/ShaderStage\";\nimport { Keyword } from \"../common/enums/Keyword\";\nimport { ASTNode, TreeNode } from \"../parser/AST\";\nimport { NodeChild } from \"../parser/types\";\nimport { ShaderData } from \"../parser/ShaderInfo\";\nimport { ESymbolType, FnSymbol, StructSymbol, SymbolInfo } from \"../parser/symbolTable\";\nimport { CodeGenVisitor } from \"./CodeGenVisitor\";\nimport { ICodeSegment } from \"./types\";\nimport { StructRole, VisitorContext } from \"./VisitorContext\";\n\n/**\n * @internal\n */\nexport abstract class GLESVisitor extends CodeGenVisitor {\n private _globalCodeArray: ICodeSegment[] = [];\n private static _lookupSymbol: SymbolInfo = new SymbolInfo(\"\", null);\n private static _serializedGlobalKey = new Set();\n\n reset(): void {\n const { _globalCodeArray: globalCodeArray } = this;\n globalCodeArray.length = 0;\n GLESVisitor._serializedGlobalKey.clear();\n }\n\n getOtherGlobal(data: ShaderData, out: ICodeSegment[]): void {\n for (const precision of data.globalPrecisions) {\n out.push({ text: precision.codeGen(this), index: precision.location.start.index });\n }\n }\n\n visitShaderProgram(node: ASTNode.GLShaderProgram, vertexEntry: string, fragmentEntry: string): IShaderInfo {\n // #if _VERBOSE\n this.errors.length = 0;\n // #endif\n VisitorContext.reset();\n this.reset();\n\n const shaderData = node.shaderData;\n const context = VisitorContext.context;\n context._passSymbolTable = shaderData.symbolTable;\n\n const outerGlobalMacroDeclarations = shaderData.getOuterGlobalMacroDeclarations();\n\n // `_structVarMap` must span both stages so global `#define` references rewrite consistently across vertex/fragment outputs.\n this._collectAllStructVars(vertexEntry, fragmentEntry);\n\n return {\n vertex: this._vertexMain(vertexEntry, shaderData, outerGlobalMacroDeclarations),\n fragment: this._fragmentMain(fragmentEntry, shaderData, outerGlobalMacroDeclarations)\n };\n }\n\n /** Populate `_structVarMap` for varying/attribute/mrt-typed variables across both stages before codegen. */\n private _collectAllStructVars(vertexEntry: string, fragmentEntry: string): void {\n const context = VisitorContext.context;\n const lookupSymbol = GLESVisitor._lookupSymbol;\n const symbolTable = context._passSymbolTable;\n\n // Roles from entry signatures: vertex param[0]=attribute, return=varying; fragment param[0]=varying, return=mrt.\n const structRoles: Record<string, StructRole> = Object.create(null);\n\n const addEntryRoles = (entry: string, paramRole: StructRole, returnRole: StructRole): FnSymbol[] => {\n lookupSymbol.set(entry, ESymbolType.FN);\n const fns = <FnSymbol[]>symbolTable.getSymbols(lookupSymbol, true, []);\n for (const fn of fns) {\n const proto = fn.astNode.protoType;\n const param0 = proto.parameterList?.[0];\n if (param0 && typeof param0.typeInfo?.type === \"string\") {\n structRoles[param0.typeInfo.typeLexeme] = paramRole;\n }\n if (typeof proto.returnType.type === \"string\") {\n structRoles[<string>proto.returnType.type] = returnRole;\n }\n }\n return fns;\n };\n\n const entryFns = addEntryRoles(vertexEntry, \"attribute\", \"varying\").concat(\n addEntryRoles(fragmentEntry, \"varying\", \"mrt\")\n );\n\n const registerByType = (typeLexeme: string | undefined, varName: string): void => {\n if (!typeLexeme) return;\n const role = structRoles[typeLexeme];\n if (role) context.registerStructVar(varName, role);\n };\n\n const walkLocals = (node: TreeNode): void => {\n for (const child of node.children) {\n if (child instanceof ASTNode.InitDeclaratorList) {\n const typeLexeme = child.typeInfo?.typeLexeme;\n if (typeLexeme && structRoles[typeLexeme]) {\n this._extractLocalVarNames(child, context, structRoles[typeLexeme]);\n }\n } else if (child instanceof TreeNode) {\n walkLocals(child);\n }\n }\n };\n\n for (const fn of entryFns) {\n const proto = fn.astNode.protoType;\n if (proto.parameterList) {\n for (const param of proto.parameterList) {\n if (param.ident && typeof param.typeInfo?.type === \"string\") {\n registerByType(param.typeInfo.typeLexeme, param.ident.lexeme);\n }\n }\n }\n walkLocals(fn.astNode.statements);\n }\n\n // Register module-level globals whose type carries a role (e.g. `Varyings o;`).\n symbolTable.forEach((sym) => {\n if (sym.type === ESymbolType.VAR) registerByType(sym.dataType?.typeLexeme, sym.ident);\n });\n }\n\n private _vertexMain(\n entry: string,\n data: ShaderData,\n outerGlobalMacroDeclarations: ASTNode.GlobalDeclaration[]\n ): string {\n const context = VisitorContext.context;\n context.stage = EShaderStage.VERTEX;\n context.stageEntry = entry;\n\n const lookupSymbol = GLESVisitor._lookupSymbol;\n const symbolTable = data.symbolTable;\n lookupSymbol.set(entry, ESymbolType.FN);\n const fnSymbols = <FnSymbol[]>symbolTable.getSymbols(lookupSymbol, true, []);\n if (!fnSymbols.length) throw `no entry function found: ${entry}`;\n\n const { attributeStructs, attributeList, varyingStructs, varyingList } = context;\n fnSymbols.forEach((fnSymbol) => {\n const fnNode = fnSymbol.astNode;\n const returnType = fnNode.protoType.returnType;\n\n if (typeof returnType.type === \"string\") {\n lookupSymbol.set(returnType.type, ESymbolType.STRUCT);\n const varyingSymbols = <StructSymbol[]>symbolTable.getSymbols(lookupSymbol, true, []);\n if (!varyingSymbols.length) {\n this._reportError(returnType.location, `invalid varying struct: \"${returnType.type}\".`);\n } else {\n for (let i = 0; i < varyingSymbols.length; i++) {\n const varyingSymbol = varyingSymbols[i];\n const astNode = varyingSymbol.astNode;\n varyingStructs.push(astNode);\n for (const prop of astNode.propList) {\n varyingList.push(prop);\n }\n }\n }\n } else if (returnType.type !== Keyword.VOID) {\n this._reportError(returnType.location, \"vertex main entry can only return struct or void.\");\n }\n\n const paramList = fnNode.protoType.parameterList;\n const attributeParam = paramList?.[0];\n if (attributeParam) {\n const attributeType = attributeParam.typeInfo.type;\n if (typeof attributeType === \"string\") {\n lookupSymbol.set(attributeType, ESymbolType.STRUCT);\n const attributeSymbols = <StructSymbol[]>symbolTable.getSymbols(lookupSymbol, true, []);\n if (!attributeSymbols.length) {\n this._reportError(attributeParam.astNode.location, `invalid attribute struct: \"${attributeType}\".`);\n } else {\n for (let i = 0; i < attributeSymbols.length; i++) {\n const attributeSymbol = attributeSymbols[i];\n const astNode = attributeSymbol.astNode;\n attributeStructs.push(astNode);\n for (const prop of astNode.propList) {\n attributeList.push(prop);\n }\n }\n }\n }\n }\n });\n\n // Pre-walk global `#define` values so referenced struct properties emit `attribute`/`varying` declarations.\n this._preRegisterGlobalMacroRefs(outerGlobalMacroDeclarations);\n\n const globalCodeArray = this._globalCodeArray;\n VisitorContext.context.referenceGlobal(entry, ESymbolType.FN);\n\n this._getGlobalSymbol(globalCodeArray);\n this._getCustomStruct(context.attributeStructs, globalCodeArray);\n this._getCustomStruct(context.varyingStructs, globalCodeArray);\n this._getGlobalMacroDeclarations(outerGlobalMacroDeclarations, globalCodeArray);\n this.getOtherGlobal(data, globalCodeArray);\n\n const globalCode = globalCodeArray\n .sort((a, b) => a.index - b.index)\n .map((item) => item.text)\n .join(\"\\n\");\n\n VisitorContext.context.reset(false);\n this.reset();\n\n return globalCode;\n }\n\n private _fragmentMain(\n entry: string,\n data: ShaderData,\n outerGlobalMacroStatements: ASTNode.GlobalDeclaration[]\n ): string {\n const context = VisitorContext.context;\n context.stage = EShaderStage.FRAGMENT;\n context.stageEntry = entry;\n\n const lookupSymbol = GLESVisitor._lookupSymbol;\n const { symbolTable } = data;\n lookupSymbol.set(entry, ESymbolType.FN);\n const fnSymbols = <FnSymbol[]>symbolTable.getSymbols(lookupSymbol, true, []);\n if (!fnSymbols?.length) throw `no entry function found: ${entry}`;\n\n // Fragment varying info inherits from vertex stage (preserved across `context.reset(false)`).\n fnSymbols.forEach((fnSymbol) => {\n const fnNode = fnSymbol.astNode;\n const { returnStatement } = fnNode;\n\n if (returnStatement) {\n returnStatement.isFragReturnStatement = true;\n }\n\n const { type: returnDataType, location: returnLocation } = fnNode.protoType.returnType;\n if (typeof returnDataType === \"string\") {\n lookupSymbol.set(returnDataType, ESymbolType.STRUCT);\n const mrtSymbols = <StructSymbol[]>symbolTable.getSymbols(lookupSymbol, true, []);\n if (!mrtSymbols.length) {\n this._reportError(returnLocation, `invalid mrt struct: ${returnDataType}`);\n } else {\n for (let i = 0; i < mrtSymbols.length; i++) {\n const mrtSymbol = mrtSymbols[i];\n const astNode = mrtSymbol.astNode;\n context.mrtStructs.push(astNode);\n for (const prop of astNode.propList) {\n context.mrtList.push(prop);\n }\n }\n }\n } else if (returnDataType !== Keyword.VOID && returnDataType !== Keyword.VEC4) {\n this._reportError(returnLocation, \"fragment main entry can only return struct or vec4.\");\n }\n });\n\n // `_structVarMap` is already populated in `visitShaderProgram` with both stages'\n // variables; just pre-walk macro refs so struct codegen sees the references.\n this._preRegisterGlobalMacroRefs(outerGlobalMacroStatements);\n\n const globalCodeArray = this._globalCodeArray;\n VisitorContext.context.referenceGlobal(entry, ESymbolType.FN);\n\n this._getGlobalSymbol(globalCodeArray);\n this._getCustomStruct(context.varyingStructs, globalCodeArray);\n this._getCustomStruct(context.mrtStructs, globalCodeArray);\n this._getGlobalMacroDeclarations(outerGlobalMacroStatements, globalCodeArray);\n this.getOtherGlobal(data, globalCodeArray);\n\n const globalCode = globalCodeArray\n .sort((a, b) => a.index - b.index)\n .map((item) => item.text)\n .join(\"\\n\");\n\n context.reset();\n this.reset();\n\n return globalCode;\n }\n\n private _extractLocalVarNames(node: ASTNode.InitDeclaratorList, context: VisitorContext, role: StructRole): void {\n const children = node.children;\n if (children.length === 1) {\n const singleDecl = children[0] as ASTNode.SingleDeclaration;\n const identChildren = singleDecl.children;\n if (identChildren.length >= 2 && identChildren[1] instanceof BaseToken) {\n context.registerStructVar(identChildren[1].lexeme, role);\n }\n } else if (children.length >= 3) {\n const initDeclList = children[0];\n if (initDeclList instanceof ASTNode.InitDeclaratorList) {\n this._extractLocalVarNames(initDeclList, context, role);\n }\n if (children[2] instanceof BaseToken) {\n context.registerStructVar((children[2] as BaseToken).lexeme, role);\n }\n }\n }\n\n /**\n * Pre-walk `#define` values in global macro declarations and register any\n * `structVar.prop` member accesses as referenced struct props. This must run before\n * struct codegen emits the declaration lists (`attribute …`, `varying …`, `MRT …`),\n * otherwise properties used only from macros would be missing from the output.\n */\n private _preRegisterGlobalMacroRefs(macros: ASTNode.GlobalDeclaration[]): void {\n for (const macro of macros) {\n this._walkMacroDefineTokens(macro.children);\n }\n }\n\n private _walkMacroDefineTokens(children: NodeChild[]): void {\n for (const child of children) {\n if (child instanceof ASTNode.MacroDefine) {\n // Codegen the value once so the enclosed `visitPostfixExpression` calls\n // register their struct-prop references. The returned string is discarded\n // — the real emit happens later in `_getGlobalMacroDeclarations`.\n if (child.valueExpression) child.valueExpression.codeGen(this);\n } else if (child instanceof TreeNode) {\n this._walkMacroDefineTokens(child.children);\n }\n }\n }\n\n private _getGlobalSymbol(out: ICodeSegment[]): void {\n const context = VisitorContext.context;\n const { _referencedGlobals } = context;\n const lastLength = Object.keys(_referencedGlobals).length;\n if (lastLength === 0) return;\n\n for (const ident in _referencedGlobals) {\n if (GLESVisitor._serializedGlobalKey.has(ident)) continue;\n GLESVisitor._serializedGlobalKey.add(ident);\n\n const symbols = _referencedGlobals[ident];\n for (let i = 0, n = symbols.length; i < n; i++) {\n const sm = symbols[i];\n const codeGenResult = sm.astNode.codeGen(this);\n if (!codeGenResult) continue;\n const text = codeGenResult + (sm.type === ESymbolType.VAR ? \";\" : \"\");\n if (!sm.isInMacroBranch) {\n out.push({\n text,\n index: sm.astNode.location.start.index\n });\n }\n }\n }\n\n if (Object.keys(_referencedGlobals).length !== lastLength) {\n this._getGlobalSymbol(out);\n }\n }\n\n private _getCustomStruct(structNodes: ASTNode.StructSpecifier[], out: ICodeSegment[]): void {\n for (const node of structNodes) {\n const text = node.codeGen(this);\n\n if (!node.isInMacroBranch) {\n out.push({ text, index: node.location.start.index });\n }\n }\n }\n\n private _getGlobalMacroDeclarations(macros: ASTNode.GlobalDeclaration[], out: ICodeSegment[]): void {\n const context = VisitorContext.context;\n const referencedGlobals = context._referencedGlobals;\n const referencedGlobalMacroASTs = context._referencedGlobalMacroASTs;\n referencedGlobalMacroASTs.length = 0;\n\n for (const symbols of Object.values(referencedGlobals)) {\n for (const symbol of symbols) {\n if (symbol.isInMacroBranch) {\n referencedGlobalMacroASTs.push(symbol.astNode);\n }\n }\n }\n\n for (const macro of macros) {\n let text: string;\n const child = macro.children[0];\n\n if (child instanceof ASTNode.GlobalMacroIfStatement) {\n let result: ICodeSegment[] = [];\n result.push(\n ...macro.macroExpressions.map((item) => ({\n text: item instanceof BaseToken ? item.lexeme : item.codeGen(this),\n index: item.location.start.index\n }))\n );\n\n this._visitGlobalMacroIfStatement(child, result);\n\n text = result\n .sort((a, b) => a.index - b.index)\n .map((item) => item.text)\n .join(\"\\n\");\n } else if (child instanceof BaseToken && child.type === Keyword.MACRO_DEFINE_EXPRESSION) {\n // Legacy opaque `#define` — its lexeme is the complete directive text,\n // newlines included; emit verbatim.\n text = child.lexeme;\n } else {\n text = macro.codeGen(this);\n }\n\n out.push({\n text,\n index: macro.location.start.index\n });\n }\n }\n\n private _visitGlobalMacroIfStatement(node: TreeNode, out: ICodeSegment[]): void {\n const children = node.children;\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (child instanceof ASTNode.PrecisionSpecifier) {\n out.push({\n text: child.codeGen(this),\n index: child.location.start.index\n });\n } else if (child instanceof ASTNode.FunctionDefinition) {\n if (VisitorContext.context._referencedGlobalMacroASTs.indexOf(child) !== -1) {\n out.push({\n text: child.getCache(), // code has generated in `_getGlobalSymbol`\n index: child.location.start.index\n });\n }\n } else if (child instanceof ASTNode.StructSpecifier) {\n const context = VisitorContext.context;\n const stage = context.stage;\n if (\n VisitorContext.context._referencedGlobalMacroASTs.indexOf(child) !== -1 ||\n (stage === EShaderStage.VERTEX\n ? context.isAttributeStruct(child.ident?.lexeme) || context.isVaryingStruct(child.ident?.lexeme)\n : context.isVaryingStruct(child.ident?.lexeme) || context.isMRTStruct(child.ident?.lexeme))\n ) {\n out.push({\n text: child.getCache(), // code has generated in `_getGlobalSymbol` or `_getCustomStruct`\n index: child.location.start.index\n });\n }\n } else if (child instanceof ASTNode.VariableDeclarationList) {\n const variableDeclarations = child.variableDeclarations;\n for (let i = 0; i < variableDeclarations.length; i++) {\n const variableDeclaration = variableDeclarations[i];\n if (VisitorContext.context._referencedGlobalMacroASTs.indexOf(variableDeclaration) !== -1) {\n out.push({\n text: variableDeclaration.getCache() + \";\", // code has generated in `_getGlobalSymbol`\n index: variableDeclaration.location.start.index\n });\n }\n }\n }\n\n if (child instanceof TreeNode) {\n this._visitGlobalMacroIfStatement(child, out);\n }\n }\n }\n}\n","import { BaseToken } from \"../common/BaseToken\";\nimport { ASTNode } from \"../parser/AST\";\nimport { StructProp } from \"../parser/types\";\nimport { GLESVisitor } from \"./GLESVisitor\";\nimport { VisitorContext } from \"./VisitorContext\";\n\nexport class GLES100Visitor extends GLESVisitor {\n private static _singleton: GLES100Visitor;\n static getVisitor(): GLES100Visitor {\n if (!this._singleton) {\n this._singleton = new GLES100Visitor();\n }\n return this._singleton;\n }\n\n override getAttributeProp(prop: StructProp): string {\n return `attribute ${prop.typeInfo.typeLexeme} ${prop.ident.lexeme};`;\n }\n\n override getVaryingProp(prop: StructProp): string {\n return `varying ${prop.typeInfo.typeLexeme} ${prop.ident.lexeme};`;\n }\n\n override getMRTProp(): string {\n return null;\n }\n\n override visitPostfixExpression(node: ASTNode.PostfixExpression): string {\n const { children } = node;\n const postExpr = children[0];\n const { context } = VisitorContext;\n if (postExpr instanceof ASTNode.PostfixExpression && context.isMRTStruct(<string>postExpr.type)) {\n const propReferenced = children[2] as BaseToken;\n const prop = context.mrtList.find((item) => item.ident.lexeme === propReferenced.lexeme);\n if (!prop) {\n this._reportError(propReferenced.location, `not found mrt property: ${propReferenced.lexeme}`);\n return \"\";\n }\n return `gl_FragData[${prop.mrtIndex!}]`;\n }\n return super.visitPostfixExpression(node);\n }\n\n override visitJumpStatement(node: ASTNode.JumpStatement): string {\n if (node.isFragReturnStatement) {\n if (VisitorContext.context.mrtStructs.length) {\n return \"\";\n }\n const expression = node.children[1] as ASTNode.Expression;\n return `gl_FragColor = ${expression.codeGen(this)};`;\n }\n return super.visitJumpStatement(node);\n }\n}\n","import { EShaderStage } from \"../common/enums/ShaderStage\";\nimport { ASTNode } from \"../parser/AST\";\nimport { ShaderData } from \"../parser/ShaderInfo\";\nimport { StructProp } from \"../parser/types\";\nimport { GLESVisitor } from \"./GLESVisitor\";\nimport { ICodeSegment } from \"./types\";\nimport { VisitorContext } from \"./VisitorContext\";\n\nconst V3_GL_FragColor = \"GS_glFragColor\";\n\nexport class GLES300Visitor extends GLESVisitor {\n private static _singleton: GLES300Visitor;\n static getVisitor(): GLES300Visitor {\n if (!this._singleton) {\n this._singleton = new GLES300Visitor();\n }\n return this._singleton;\n }\n\n private _otherCodeArray: ICodeSegment[] = [];\n private _fragColorVariableRegistered = false;\n\n override reset(): void {\n super.reset();\n\n this._otherCodeArray.length = 0;\n this._fragColorVariableRegistered = false;\n }\n\n override getOtherGlobal(data: ShaderData, out: ICodeSegment[]): void {\n super.getOtherGlobal(data, out);\n\n for (let i = 0, n = this._otherCodeArray.length; i < n; i++) {\n out.push(this._otherCodeArray[i]);\n }\n }\n\n override getAttributeProp(prop: StructProp): string {\n return `in ${prop.typeInfo.typeLexeme} ${prop.ident.lexeme};`;\n }\n\n override getVaryingProp(prop: StructProp): string {\n const qualifier = VisitorContext.context.stage === EShaderStage.FRAGMENT ? \"in\" : \"out\";\n return `${qualifier} ${prop.typeInfo.typeLexeme} ${prop.ident.lexeme};`;\n }\n\n override getMRTProp(prop: StructProp): string {\n return `layout(location = ${prop.mrtIndex}) out vec4 ${prop.ident.lexeme};`;\n }\n\n override visitFunctionIdentifier(node: ASTNode.FunctionIdentifier): string {\n const children = node.children;\n const typeSpecifier = children[0] as ASTNode.TypeSpecifier;\n if (typeSpecifier.children.length !== 1) {\n return this.defaultCodeGen(children);\n }\n let ident = node.lexeme;\n switch (node.ident) {\n case \"texture2D\":\n case \"textureCube\":\n ident = \"texture\";\n break;\n case \"texture2DProj\":\n ident = \"textureProj\";\n break;\n case \"texture2DLodEXT\":\n case \"textureCubeLodEXT\":\n ident = \"textureLod\";\n break;\n case \"texture2DGradEXT\":\n case \"textureCubeGradEXT\":\n ident = \"textureGrad\";\n break;\n case \"texture2DProjLodEXT\":\n ident = \"textureProjLod\";\n break;\n case \"texture2DProjGradEXT\":\n ident = \"textureProjGrad\";\n break;\n case \"gl_FragDepthEXT\":\n ident = \"gl_FragDepth\";\n break;\n }\n return ident;\n }\n\n override visitVariableIdentifier(node: ASTNode.VariableIdentifier): string {\n const { context } = VisitorContext;\n if (context.stage === EShaderStage.FRAGMENT && node.getLexeme(this) === \"gl_FragColor\") {\n if (context.mrtStructs.length) {\n this._reportError(node.location, \"gl_FragColor cannot be used with MRT (Multiple Render Targets).\");\n return;\n }\n this._registerFragColorVariable();\n return V3_GL_FragColor;\n }\n return super.visitVariableIdentifier(node);\n }\n\n override visitJumpStatement(node: ASTNode.JumpStatement): string {\n if (node.isFragReturnStatement) {\n if (VisitorContext.context.mrtStructs.length) {\n return \"\";\n }\n this._registerFragColorVariable();\n\n const expression = node.children[1] as ASTNode.Expression;\n return `${V3_GL_FragColor} = ${expression.codeGen(this)};`;\n }\n return super.visitJumpStatement(node);\n }\n\n private _registerFragColorVariable() {\n if (this._fragColorVariableRegistered) return;\n this._otherCodeArray.push({\n text: `out vec4 ${V3_GL_FragColor};`,\n index: 0\n });\n this._fragColorVariableRegistered = true;\n }\n}\n","import type { Condition, ShaderInstruction } from \"@galacean/engine-design\";\n\nexport type { ShaderInstruction } from \"@galacean/engine-design\";\n\n/** Must stay in sync with ShaderPreprocessorDirective in @galacean/engine-core */\nconst ShaderPreprocessorDirective = {\n Text: 0,\n IfDef: 1,\n IfNdef: 2,\n IfCmp: 3,\n IfExpr: 4,\n Else: 5,\n Endif: 6,\n Define: 7,\n DefineVal: 8,\n DefineFunc: 9,\n Undef: 10\n} as const;\n\ninterface ExprCtx {\n s: string;\n i: number;\n}\n\n/**\n * @internal\n */\nexport class ShaderInstructionEncoder {\n private static _DIRECTIVE_RE = /^[ \\t]*#[ \\t]*(if|ifdef|ifndef|elif|else|endif|define|undef)\\b(.*)/;\n private static _FUNC_MACRO_RE = /^(\\w+)\\(([^)]*)\\)\\s*(.*)/;\n\n static parse(glsl: string): ShaderInstruction[] {\n const instructions: ShaderInstruction[] = [];\n const length = glsl.length;\n let pos = 0;\n const backfillStack: number[][] = [];\n\n while (pos < length) {\n const directiveStart = ShaderInstructionEncoder._findDirectiveStart(glsl, pos, length);\n\n if (directiveStart === -1) {\n ShaderInstructionEncoder._pushText(instructions, glsl, pos, length);\n break;\n }\n\n if (directiveStart > pos) {\n ShaderInstructionEncoder._pushText(instructions, glsl, pos, directiveStart);\n }\n\n let lineEnd = glsl.indexOf(\"\\n\", directiveStart);\n if (lineEnd === -1) lineEnd = length;\n const line = glsl.substring(directiveStart, lineEnd);\n pos = lineEnd < length ? lineEnd + 1 : length;\n\n const match = ShaderInstructionEncoder._DIRECTIVE_RE.exec(line);\n if (!match) {\n const last = instructions.length > 0 ? instructions[instructions.length - 1] : null;\n const text = lineEnd < length ? line + \"\\n\" : line;\n if (last && last[0] === ShaderPreprocessorDirective.Text) {\n (last as [number, string])[1] += text;\n } else {\n instructions.push([ShaderPreprocessorDirective.Text, text]);\n }\n continue;\n }\n\n const keyword = match[1];\n const rest = match[2].trim();\n\n switch (keyword) {\n case \"ifdef\": {\n const idx = instructions.length;\n instructions.push([ShaderPreprocessorDirective.IfDef, rest, -1]);\n backfillStack.push([idx]);\n break;\n }\n case \"ifndef\": {\n const idx = instructions.length;\n instructions.push([ShaderPreprocessorDirective.IfNdef, rest, -1]);\n backfillStack.push([idx]);\n break;\n }\n case \"if\": {\n const cond = ShaderInstructionEncoder._parseCondition(rest);\n const idx = instructions.length;\n ShaderInstructionEncoder._pushConditionInstruction(instructions, cond);\n backfillStack.push([idx]);\n break;\n }\n case \"elif\": {\n const stack = backfillStack[backfillStack.length - 1];\n const prevIdx = stack[stack.length - 1];\n const elseIdx = instructions.length;\n instructions.push([ShaderPreprocessorDirective.Else, -1]);\n stack.push(elseIdx);\n ShaderInstructionEncoder._backfillJump(instructions[prevIdx], instructions.length);\n\n const cond = ShaderInstructionEncoder._parseCondition(rest);\n const idx = instructions.length;\n ShaderInstructionEncoder._pushConditionInstruction(instructions, cond);\n stack.push(idx);\n break;\n }\n case \"else\": {\n const stack = backfillStack[backfillStack.length - 1];\n const prevIdx = stack[stack.length - 1];\n const elseIdx = instructions.length;\n instructions.push([ShaderPreprocessorDirective.Else, -1]);\n stack.push(elseIdx);\n ShaderInstructionEncoder._backfillJump(instructions[prevIdx], instructions.length);\n break;\n }\n case \"endif\": {\n const endifIdx = instructions.length;\n instructions.push([ShaderPreprocessorDirective.Endif]);\n const stack = backfillStack.pop();\n if (stack) {\n const afterEndif = endifIdx + 1;\n for (let j = 0; j < stack.length; j++) {\n const inst = instructions[stack[j]];\n if (inst[0] === ShaderPreprocessorDirective.Else) {\n (inst as [number, number])[1] = afterEndif;\n } else {\n ShaderInstructionEncoder._backfillJump(inst, afterEndif, true);\n }\n }\n }\n break;\n }\n case \"define\": {\n const funcMatch = ShaderInstructionEncoder._FUNC_MACRO_RE.exec(rest);\n if (funcMatch) {\n const params = funcMatch[2]\n .split(\",\")\n .map((p) => p.trim())\n .filter((p) => p.length > 0);\n instructions.push([\n ShaderPreprocessorDirective.DefineFunc,\n funcMatch[1],\n params,\n ShaderInstructionEncoder._stripLineComment(funcMatch[3].trim())\n ]);\n } else {\n const spaceIdx = rest.indexOf(\" \");\n if (spaceIdx === -1) {\n instructions.push([ShaderPreprocessorDirective.Define, rest]);\n } else {\n instructions.push([\n ShaderPreprocessorDirective.DefineVal,\n rest.substring(0, spaceIdx),\n ShaderInstructionEncoder._stripLineComment(rest.substring(spaceIdx + 1).trim())\n ]);\n }\n }\n break;\n }\n case \"undef\": {\n instructions.push([ShaderPreprocessorDirective.Undef, rest]);\n break;\n }\n }\n }\n\n return instructions;\n }\n\n private static _pushConditionInstruction(instructions: ShaderInstruction[], cond: Condition): void {\n if (cond.t === \"def\") {\n instructions.push([ShaderPreprocessorDirective.IfDef, cond.m, -1]);\n } else if (cond.t === \"ndef\") {\n instructions.push([ShaderPreprocessorDirective.IfNdef, cond.m, -1]);\n } else if (cond.t === \"cmp\") {\n instructions.push([ShaderPreprocessorDirective.IfCmp, cond.m, cond.op, cond.v, -1]);\n } else {\n instructions.push([ShaderPreprocessorDirective.IfExpr, cond, -1]);\n }\n }\n\n private static _findDirectiveStart(source: string, from: number, length: number): number {\n let i = from;\n while (i < length) {\n let j = i;\n while (j < length) {\n const c = source.charCodeAt(j);\n if (c === 32 /* space */ || c === 9 /* tab */) {\n j++;\n } else {\n break;\n }\n }\n if (j < length && source.charCodeAt(j) === 35 /* '#' */) return i;\n\n const nl = source.indexOf(\"\\n\", i);\n if (nl === -1) break;\n i = nl + 1;\n }\n return -1;\n }\n\n private static _pushText(instructions: ShaderInstruction[], source: string, from: number, to: number): void {\n if (from >= to) return;\n const last = instructions.length > 0 ? instructions[instructions.length - 1] : null;\n if (last && last[0] === ShaderPreprocessorDirective.Text) {\n (last as [number, string])[1] += source.substring(from, to);\n } else {\n instructions.push([ShaderPreprocessorDirective.Text, source.substring(from, to)]);\n }\n }\n\n /**\n * Backfill jump offset of an IF/ELIF instruction.\n * When onlyPlaceholder is true, only backfill if the current value is still -1\n */\n private static _backfillJump(inst: ShaderInstruction, target: number, onlyPlaceholder = false): void {\n const directive = inst[0];\n if (directive === ShaderPreprocessorDirective.IfDef || directive === ShaderPreprocessorDirective.IfNdef) {\n if (!onlyPlaceholder || inst[2] === -1) (inst as [number, string, number])[2] = target;\n } else if (directive === ShaderPreprocessorDirective.IfCmp) {\n if (!onlyPlaceholder || inst[4] === -1) (inst as [number, string, string, number, number])[4] = target;\n } else if (directive === ShaderPreprocessorDirective.IfExpr) {\n if (!onlyPlaceholder || inst[2] === -1) (inst as [number, Condition, number])[2] = target;\n }\n }\n\n private static _stripLineComment(s: string): string {\n const idx = s.indexOf(\"//\");\n return idx >= 0 ? s.substring(0, idx).trimEnd() : s;\n }\n\n private static _parseCondition(expr: string): Condition {\n const ctx: ExprCtx = { s: expr.trim(), i: 0 };\n return ShaderInstructionEncoder._parseOr(ctx);\n }\n\n private static _skipWs(ctx: ExprCtx): void {\n while (\n ctx.i < ctx.s.length &&\n (ctx.s.charCodeAt(ctx.i) === 32 /* space */ || ctx.s.charCodeAt(ctx.i) === 9) /* tab */\n )\n ctx.i++;\n }\n\n private static _parseOr(ctx: ExprCtx): Condition {\n let left = ShaderInstructionEncoder._parseAnd(ctx);\n ShaderInstructionEncoder._skipWs(ctx);\n while (\n ctx.i < ctx.s.length - 1 &&\n ctx.s.charCodeAt(ctx.i) === 124 /* '|' */ &&\n ctx.s.charCodeAt(ctx.i + 1) === 124 /* '|' */\n ) {\n ctx.i += 2;\n ShaderInstructionEncoder._skipWs(ctx);\n left = { t: \"or\", l: left, r: ShaderInstructionEncoder._parseAnd(ctx) };\n ShaderInstructionEncoder._skipWs(ctx);\n }\n return left;\n }\n\n private static _parseAnd(ctx: ExprCtx): Condition {\n let left = ShaderInstructionEncoder._parseUnary(ctx);\n ShaderInstructionEncoder._skipWs(ctx);\n while (\n ctx.i < ctx.s.length - 1 &&\n ctx.s.charCodeAt(ctx.i) === 38 /* '&' */ &&\n ctx.s.charCodeAt(ctx.i + 1) === 38 /* '&' */\n ) {\n ctx.i += 2;\n ShaderInstructionEncoder._skipWs(ctx);\n left = { t: \"and\", l: left, r: ShaderInstructionEncoder._parseUnary(ctx) };\n ShaderInstructionEncoder._skipWs(ctx);\n }\n return left;\n }\n\n private static _parseUnary(ctx: ExprCtx): Condition {\n ShaderInstructionEncoder._skipWs(ctx);\n if (ctx.s.charCodeAt(ctx.i) === 33 /* '!' */) {\n ctx.i++;\n ShaderInstructionEncoder._skipWs(ctx);\n return { t: \"not\", c: ShaderInstructionEncoder._parsePrimary(ctx) };\n }\n return ShaderInstructionEncoder._parsePrimary(ctx);\n }\n\n private static _parsePrimary(ctx: ExprCtx): Condition {\n ShaderInstructionEncoder._skipWs(ctx);\n const { s } = ctx;\n\n // Parenthesized expression\n if (s.charCodeAt(ctx.i) === 40 /* '(' */) {\n ctx.i++;\n ShaderInstructionEncoder._skipWs(ctx);\n const inner = ShaderInstructionEncoder._parseOr(ctx);\n ShaderInstructionEncoder._skipWs(ctx);\n if (s.charCodeAt(ctx.i) === 41 /* ')' */) ctx.i++;\n return inner;\n }\n\n // defined(MACRO) or defined MACRO\n if (s.substring(ctx.i, ctx.i + 7) === \"defined\") {\n ctx.i += 7;\n ShaderInstructionEncoder._skipWs(ctx);\n const hasParen = s.charCodeAt(ctx.i) === 40; /* '(' */\n if (hasParen) ctx.i++;\n ShaderInstructionEncoder._skipWs(ctx);\n const name = ShaderInstructionEncoder._scanIdentifier(ctx);\n ShaderInstructionEncoder._skipWs(ctx);\n if (hasParen && s.charCodeAt(ctx.i) === 41 /* ')' */) ctx.i++;\n return { t: \"def\", m: name };\n }\n\n // Numeric literal\n if (ctx.i < s.length && ShaderInstructionEncoder._isDigit(s.charCodeAt(ctx.i))) {\n const lhsNum = ShaderInstructionEncoder._scanNumber(ctx);\n ShaderInstructionEncoder._skipWs(ctx);\n const op = ShaderInstructionEncoder._scanOp(ctx);\n if (op) {\n ShaderInstructionEncoder._skipWs(ctx);\n return {\n t: \"bool\",\n v: ShaderInstructionEncoder._evalNumOp(lhsNum, op, ShaderInstructionEncoder._scanNumber(ctx))\n };\n }\n return { t: \"bool\", v: lhsNum !== 0 };\n }\n\n // Identifier — comparison or defined check\n const name = ShaderInstructionEncoder._scanIdentifier(ctx);\n if (!name) return { t: \"bool\", v: false };\n ShaderInstructionEncoder._skipWs(ctx);\n const op = ShaderInstructionEncoder._scanOp(ctx);\n if (op) {\n ShaderInstructionEncoder._skipWs(ctx);\n return { t: \"cmp\", m: name, op, v: ShaderInstructionEncoder._scanNumber(ctx) };\n }\n return { t: \"def\", m: name };\n }\n\n private static _isDigit(charCode: number): boolean {\n return charCode >= 48 /* '0' */ && charCode <= 57 /* '9' */;\n }\n\n private static _isAlnum(charCode: number): boolean {\n return (\n (charCode >= 65 /* 'A' */ && charCode <= 90) /* 'Z' */ ||\n (charCode >= 97 /* 'a' */ && charCode <= 122) /* 'z' */ ||\n (charCode >= 48 /* '0' */ && charCode <= 57) /* '9' */ ||\n charCode === 95 /* '_' */\n );\n }\n\n private static _scanIdentifier(ctx: ExprCtx): string {\n const start = ctx.i;\n while (ctx.i < ctx.s.length && ShaderInstructionEncoder._isAlnum(ctx.s.charCodeAt(ctx.i))) ctx.i++;\n return ctx.s.substring(start, ctx.i);\n }\n\n private static _scanNumber(ctx: ExprCtx): number {\n const start = ctx.i;\n if (ctx.s.charCodeAt(ctx.i) === 45 /* '-' */) ctx.i++;\n while (\n ctx.i < ctx.s.length &&\n (ShaderInstructionEncoder._isDigit(ctx.s.charCodeAt(ctx.i)) || ctx.s.charCodeAt(ctx.i) === 46) /* '.' */\n )\n ctx.i++;\n return Number(ctx.s.substring(start, ctx.i)) || 0;\n }\n\n private static _scanOp(ctx: ExprCtx): string {\n const c = ctx.s.charCodeAt(ctx.i);\n const c2 = ctx.i + 1 < ctx.s.length ? ctx.s.charCodeAt(ctx.i + 1) : 0;\n if (c === 61 /* '=' */ && c2 === 61 /* '=' */) {\n ctx.i += 2;\n return \"==\";\n }\n if (c === 33 /* '!' */ && c2 === 61 /* '=' */) {\n ctx.i += 2;\n return \"!=\";\n }\n if (c === 62 /* '>' */ && c2 === 61 /* '=' */) {\n ctx.i += 2;\n return \">=\";\n }\n if (c === 60 /* '<' */ && c2 === 61 /* '=' */) {\n ctx.i += 2;\n return \"<=\";\n }\n if (c === 62 /* '>' */) {\n ctx.i++;\n return \">\";\n }\n if (c === 60 /* '<' */) {\n ctx.i++;\n return \"<\";\n }\n return \"\";\n }\n\n private static _evalNumOp(lhs: number, op: string, rhs: number): boolean {\n switch (op) {\n case \"==\":\n return lhs === rhs;\n case \"!=\":\n return lhs !== rhs;\n case \">\":\n return lhs > rhs;\n case \"<\":\n return lhs < rhs;\n case \">=\":\n return lhs >= rhs;\n case \"<=\":\n return lhs <= rhs;\n default:\n return false;\n }\n }\n}\n","import { NoneTerminal, GrammarSymbol } from \"../parser/GrammarSymbol\";\n\nexport default class Production {\n private static _id = 0;\n static pool: Map<number, Production> = new Map();\n\n readonly goal: NoneTerminal;\n readonly derivation: GrammarSymbol[];\n readonly id: number;\n\n constructor(goal: NoneTerminal, derivation: GrammarSymbol[]) {\n this.goal = goal;\n this.derivation = derivation;\n this.id = Production._id++;\n Production.pool.set(this.id, this);\n }\n}\n","import { ETokenType } from \"../common\";\nimport { NoneTerminal, Terminal } from \"../parser/GrammarSymbol\";\nimport Production from \"./Production\";\nimport GrammarUtils from \"./Utils\";\n\nexport default class StateItem {\n static _id = 0;\n\n readonly production: Production;\n readonly position: number;\n readonly lookaheadSet: Set<Terminal>;\n readonly id: number;\n\n _needReInfer = true;\n get needReInfer() {\n return this._needReInfer;\n }\n set needReInfer(v: boolean) {\n this._needReInfer = v;\n }\n\n get curSymbol() {\n return this.production.derivation[this.position];\n }\n get nextSymbol() {\n return this.production.derivation[this.position + 1];\n }\n\n constructor(production: Production, position: number, lookahead: Iterable<Terminal>) {\n this.production = production;\n this.position = position;\n this.lookaheadSet = new Set();\n for (const la of lookahead) {\n this.lookaheadSet.add(la);\n }\n this.id = StateItem._id++;\n }\n\n addLookahead(ts: Iterable<Terminal>) {\n for (const t of ts) {\n if (this.lookaheadSet.has(t)) continue;\n this.lookaheadSet.add(t);\n this.needReInfer = true;\n }\n }\n\n symbolByOffset(offset: number) {\n return this.production.derivation[this.position + offset];\n }\n\n canReduce() {\n if (this.position > this.production.derivation.length - 1) return true;\n else {\n for (let i = this.position; i < this.production.derivation.length; i++) {\n if (this.production.derivation[i] !== ETokenType.EPSILON) return false;\n }\n return true;\n }\n }\n\n advance() {\n // #if _VERBOSE\n if (this.canReduce()) throw `Error: advance reduce-able parsing state item`;\n // #endif\n return new StateItem(this.production, this.position + 1, this.lookaheadSet);\n }\n\n // #if _VERBOSE\n toString() {\n const coreItem = this.production.derivation.map((item) => GrammarUtils.toString(item));\n coreItem[this.position] = \".\" + (coreItem[this.position] ?? \"\");\n\n return `${NoneTerminal[this.production.goal]} :=> ${coreItem.join(\"|\")} ;${Array.from(this.lookaheadSet)\n .map((item) => GrammarUtils.toString(item))\n .join(\"/\")}`;\n }\n // #endif\n}\n","import { Terminal } from \"../parser/GrammarSymbol\";\nimport Production from \"./Production\";\nimport StateItem from \"./StateItem\";\n\nexport default class State {\n static closureMap: Map<string /** state mapKey */, State> = new Map();\n static pool: Map<number, State> = new Map();\n static _id = 0;\n\n readonly id: number;\n readonly cores: Set<StateItem>;\n private _items: Set<StateItem>;\n get items() {\n return this._items;\n }\n\n closured = false;\n get needReInfer() {\n for (const core of this.cores) {\n if (core.needReInfer) return true;\n }\n return false;\n }\n\n private _stateItemPool: Map<string /** Map ID */, StateItem> = new Map();\n\n static create(cores: StateItem[]) {\n const cacheKey = this.getMapKey(cores);\n const state = this.closureMap.get(cacheKey);\n if (state) {\n for (const core of cores) {\n // merge lookahead\n state.createStateItem(core.production, core.position, core.lookaheadSet);\n }\n return state;\n }\n\n const newState = new State(cores);\n this.closureMap.set(cacheKey, newState);\n return newState;\n }\n\n // TODO: any optimization?\n static getMapKey(cores: StateItem[]) {\n return cores.map((item) => `${item.production.id},${item.position}`).join(\";\");\n }\n\n private constructor(cores: Iterable<StateItem>) {\n this.id = State._id++;\n this._items = new Set([...cores]);\n this.cores = new Set([...cores]);\n for (const it of cores) {\n const itemMapKey = this.getStateItemMapKey(it.production, it.position);\n this._stateItemPool.set(itemMapKey, it);\n }\n State.pool.set(this.id, this);\n }\n\n // TODO: any optimization?\n getStateItemMapKey(production: Production, position: number) {\n return `${production.id},${position}`;\n }\n\n createStateItem(production: Production, position: number, lookaheadSet: Iterable<Terminal> = new Set()) {\n const mapId = this.getStateItemMapKey(production, position);\n const item = this._stateItemPool.get(mapId);\n if (item) {\n for (const la of lookaheadSet) {\n if (item.lookaheadSet.has(la)) continue;\n item.lookaheadSet.add(la);\n item.needReInfer = true;\n }\n return item;\n }\n const newItem = new StateItem(production, position, lookaheadSet);\n this._stateItemPool.set(mapId, newItem);\n return newItem;\n }\n}\n","import { ETokenType, ShaderRange } from \"../common\";\nimport { ASTNode, TreeNode } from \"../parser/AST\";\nimport { TranslationRule } from \"../parser/SemanticAnalyzer\";\nimport { NoneTerminal, GrammarSymbol } from \"../parser/GrammarSymbol\";\nimport Production from \"./Production\";\nimport { ActionInfo, EAction } from \"./types\";\nimport { ShaderCompiler } from \"../ShaderCompiler\";\nimport { ClearableObjectPool, type IPoolElement } from \"@galacean/engine-core\";\nimport { NodeChild } from \"../parser/types\";\nimport { Keyword } from \"../common/enums/Keyword\";\n\nexport default class GrammarUtils {\n static isTerminal(sm: GrammarSymbol) {\n return sm < NoneTerminal.START;\n }\n\n static toString(sm: GrammarSymbol) {\n if (this.isTerminal(sm)) {\n return ETokenType[sm] ?? Keyword[sm];\n }\n return NoneTerminal[sm];\n }\n\n static createProductionWithOptions(\n goal: NoneTerminal,\n options: GrammarSymbol[][],\n /** the ast node */\n astTypePool?: ClearableObjectPool<\n { set: (loc: ShaderRange, children: NodeChild[]) => void } & IPoolElement & TreeNode\n >\n ) {\n // Resolve the AST pool once per grammar production (not per reduce).\n const pool = astTypePool ?? ASTNode.TrivialNode.pool;\n const ret: [GrammarSymbol[], TranslationRule | undefined][] = [];\n for (const opt of options) {\n // Single-`NonTerminal` RHS + no typed class → this production reduces\n // to a semantic-empty `TrivialNode` wrapper. Elide it at reduce time\n // by pushing the child directly onto the semantic stack. Safe because\n // the parser's GOTO runs off `reduceProduction.goal`, not off the node\n // type on the stack. Single-Terminal RHS (e.g. `unary_operator → PLUS`)\n // isn't eligible — a `BaseToken` can't stand in for an AST node.\n const canElide = !astTypePool && opt.length === 1 && !GrammarUtils.isTerminal(opt[0]);\n ret.push([\n [goal, ...opt],\n function (sa, ...children) {\n if (!children[0]) return;\n if (canElide) {\n sa.semanticStack.push(children[0] as TreeNode);\n } else {\n const start = children[0].location.start;\n const end = children[children.length - 1].location.end;\n const location = ShaderCompiler.createRange(start, end);\n ASTNode.get(pool, sa, location, children);\n }\n }\n ]);\n }\n return ret;\n }\n\n static addMapSetItem<K, T>(map: Map<K, Set<T>>, k: K, v: T) {\n const set = map.get(k) ?? new Set();\n set.add(v);\n map.set(k, set);\n }\n\n static isSubSet<T>(sa: Set<T>, sb: Set<T>) {\n for (const item of sa) {\n if (!sb.has(item)) return false;\n }\n return true;\n }\n\n static isActionEqual(a: ActionInfo, b: ActionInfo) {\n return a.action === b.action && a.target === b.target;\n }\n\n // #if _VERBOSE\n static printAction(actionInfo: ActionInfo) {\n const production = Production.pool.get(actionInfo.target!);\n return `<Action: ${EAction[actionInfo.action]} -> ${this.printProduction(production)}>`;\n }\n\n static printProduction(production: Production) {\n const deriv = production.derivation.map((gs) => GrammarUtils.toString(gs)).join(\"|\");\n return `${NoneTerminal[production.goal]} :=> ${deriv}`;\n }\n // #endif\n}\n","import { Logger } from \"@galacean/engine-core\";\nimport { ETokenType } from \"../common\";\nimport { Keyword } from \"../common/enums/Keyword\";\nimport { Grammar } from \"../parser/Grammar\";\nimport { GrammarSymbol, NoneTerminal, Terminal } from \"../parser/GrammarSymbol\";\nimport Production from \"./Production\";\nimport State from \"./State\";\nimport StateItem from \"./StateItem\";\nimport { default as GrammarUtils, default as Utils } from \"./Utils\";\nimport { ActionInfo, ActionTable, EAction, GotoTable, StateActionTable, StateGotoTable } from \"./types\";\n\n/**\n * The [LALR1](https://web.stanford.edu/class/archive/cs/cs143/cs143.1128/handouts/140%20LALR%20Parsing.pdf) Parser generator\n */\nexport class LALR1 {\n readonly firstSetMap: Map<NoneTerminal, Set<Terminal>> = new Map();\n readonly followSetMap: Map<NoneTerminal, Set<Terminal>> = new Map();\n\n readonly actionTable: StateActionTable = new Map();\n readonly gotoTable: StateGotoTable = new Map();\n private grammar: Grammar;\n\n /** For circle detect */\n private _firstSetNTStack: NoneTerminal[] = [];\n\n constructor(grammar: Grammar) {\n this.grammar = grammar;\n }\n\n generate() {\n this.computeFirstSet();\n this.buildStateTable();\n }\n\n private buildStateTable() {\n const startStateItemCore = [new StateItem(this.grammar.productions[0], 0, [ETokenType.EOF])];\n const startState = State.create(startStateItemCore);\n this._extendState(startState);\n }\n\n private _extendState(state: State) {\n if (!state.needReInfer) return;\n this._closure(state);\n const newStates = this._inferNextState(state);\n for (const ns of newStates) {\n this._extendState(ns);\n }\n }\n\n private _closure(state: State) {\n for (const core of state.cores) {\n if (!core.canReduce()) {\n this._extendStateItem(state, core);\n }\n }\n state.closured = true;\n return state;\n }\n\n private _extendStateItem(state: State, item: StateItem) {\n if (GrammarUtils.isTerminal(item.curSymbol)) return;\n\n const productionList = this.grammar.getProductionList(<NoneTerminal>item.curSymbol);\n\n if (item.nextSymbol) {\n let newLookaheadSet = new Set<Terminal>();\n let lastFirstSet: Set<Terminal> | undefined;\n let terminalExist = false;\n // when A :=> a.BC, a; ==》 B :=> .xy, First(Ca)\n // newLookAhead = First(Ca)\n for (let i = 1, nextSymbol = item.symbolByOffset(1); !!nextSymbol; nextSymbol = item.symbolByOffset(++i)) {\n if (GrammarUtils.isTerminal(nextSymbol)) {\n newLookaheadSet.add(<Terminal>nextSymbol);\n terminalExist = true;\n break;\n }\n lastFirstSet = this.firstSetMap.get(<NoneTerminal>nextSymbol)!;\n for (const t of lastFirstSet) {\n newLookaheadSet.add(t);\n }\n if (!lastFirstSet.has(ETokenType.EPSILON)) break;\n }\n if (!terminalExist && lastFirstSet?.has(ETokenType.EPSILON)) {\n for (const t of item.lookaheadSet) {\n newLookaheadSet.add(t);\n }\n }\n\n for (const production of productionList) {\n const newItem = state.createStateItem(production, 0);\n if (!state.items.has(newItem) || !Utils.isSubSet(newLookaheadSet, newItem.lookaheadSet)) {\n state.items.add(newItem);\n newItem.addLookahead(newLookaheadSet);\n this._extendStateItem(state, newItem);\n }\n }\n } else {\n for (const production of productionList) {\n const newItem = state.createStateItem(production, 0);\n if (!state.items.has(newItem) || !Utils.isSubSet(item.lookaheadSet, newItem.lookaheadSet)) {\n state.items.add(newItem);\n newItem.addLookahead(item.lookaheadSet);\n this._extendStateItem(state, newItem);\n }\n }\n }\n }\n\n private _inferNextState(state: State): Set<State> {\n const coreMap: Map<GrammarSymbol, Set<StateItem>> = new Map();\n const stateActionTable: ActionTable = this.actionTable.get(state.id) ?? new Map();\n const stateGotoTable: GotoTable = this.gotoTable.get(state.id) ?? new Map();\n\n this.actionTable.set(state.id, stateActionTable);\n this.gotoTable.set(state.id, stateGotoTable);\n\n for (const stateItem of state.items) {\n if (stateItem.canReduce()) {\n let action: ActionInfo;\n if (stateItem.production.goal !== NoneTerminal.START) {\n action = {\n action: EAction.Reduce,\n target: stateItem.production.id\n };\n } else {\n action = { action: EAction.Accept };\n }\n\n for (const t of stateItem.lookaheadSet) {\n this._addAction(stateActionTable, t, action);\n }\n } else {\n const nextItem = stateItem.advance();\n Utils.addMapSetItem(coreMap, stateItem.curSymbol, nextItem);\n }\n\n stateItem.needReInfer = false;\n }\n\n const newStates = new Set<State>();\n for (const [gs, cores] of coreMap.entries()) {\n const newState = State.create(Array.from(cores));\n if (GrammarUtils.isTerminal(gs)) {\n this._addAction(stateActionTable, <Terminal>gs, {\n action: EAction.Shift,\n target: newState.id\n });\n } else {\n stateGotoTable.set(<NoneTerminal>gs, newState.id);\n }\n\n newStates.add(newState);\n }\n\n return newStates;\n }\n\n /** Resolve shift-reduce/reduce-reduce conflict detect */\n private _addAction(table: ActionTable, terminal: Terminal, action: ActionInfo) {\n const exist = table.get(terminal);\n if (exist && !Utils.isActionEqual(exist, action)) {\n // Known shift-preferred conflicts (see TargetParser.y `%expect 2`).\n // Enforce shift regardless of the order `_inferNextState` registers\n // actions: when `exist` is already Shift and `action` is Reduce, keep\n // `exist` (early-return); the reverse order (`exist` Reduce, `action`\n // Shift) falls through to `table.set` below and Shift overwrites\n // Reduce. Order-independent by construction.\n if (LALR1._isKnownShiftPreferred(terminal, exist, action)) {\n if (exist.action === EAction.Shift && action.action === EAction.Reduce) return;\n } else {\n // #if _VERBOSE\n Logger.warn(\n `conflict detect: <Terminal ${GrammarUtils.toString(terminal)}> \\n`,\n Utils.printAction(exist),\n \"\\n\",\n Utils.printAction(action)\n );\n // #endif\n }\n }\n table.set(terminal, action);\n }\n\n // Catalog of expected shift/reduce conflicts. Each entry must correspond to\n // one of TargetParser.y's `%expect`-ed conflicts; any new conflict not in\n // this list falls through to the verbose `conflict detect` warning so the\n // grammar/runtime drift is loud rather than silent.\n // - ELSE: dangling-else, bind to nearest `if`\n // - '(' + `type_specifier_nonarray → macro_call_symbol`: macro-as-type-alias\n // (#2974), prefer the expression-position `macro_call_function` over the\n // type-position reduce\n private static _isKnownShiftPreferred(terminal: Terminal, exist: ActionInfo, action: ActionInfo): boolean {\n if (terminal === Keyword.ELSE) return true;\n if (terminal !== ETokenType.LEFT_PAREN) return false;\n const reduce = exist.action === EAction.Reduce ? exist : action.action === EAction.Reduce ? action : null;\n if (!reduce) return false;\n const prod = Production.pool.get(reduce.target!);\n return (\n !!prod &&\n prod.goal === NoneTerminal.type_specifier_nonarray &&\n prod.derivation.length === 1 &&\n prod.derivation[0] === NoneTerminal.macro_call_symbol\n );\n }\n\n // https://people.cs.pitt.edu/~jmisurda/teaching/cs1622/handouts/cs1622-first_and_follow.pdf\n private computeFirstSet() {\n for (const production of this.grammar.productions.slice(1)) {\n this._computeFirstSetForNT(production.goal);\n }\n }\n\n private _computeFirstSetForNT(NT: NoneTerminal) {\n // circle detect\n const idx = this._firstSetNTStack.findIndex((item) => item === NT);\n if (idx !== -1) {\n const computingFS = this.firstSetMap.get(NT)!;\n const len = this._firstSetNTStack.length;\n for (let i = len - 1; i > idx; i--) {\n const curNT = this._firstSetNTStack[i];\n this.firstSetMap.set(curNT, computingFS);\n }\n return computingFS;\n }\n this._firstSetNTStack.push(NT);\n\n const productionList = this.grammar.getProductionList(NT);\n const firstSet = new Set<Terminal>();\n this.firstSetMap.set(NT, firstSet);\n if (this.grammar.isNullableNT(NT)) firstSet.add(ETokenType.EPSILON);\n\n for (const production of productionList) {\n let i = 0;\n for (; i < production.derivation.length; i++) {\n const gs = production.derivation[i];\n if (GrammarUtils.isTerminal(gs)) {\n firstSet.add(<Terminal>gs);\n break;\n }\n\n const succeedFirstSet = this._computeFirstSetForNT(<NoneTerminal>gs);\n\n for (const item of succeedFirstSet) {\n if (item !== ETokenType.EPSILON) firstSet.add(item);\n }\n if (!this.grammar.isNullableNT(<NoneTerminal>gs)) break;\n }\n if (i === production.derivation.length) firstSet.add(ETokenType.EPSILON);\n }\n\n this._firstSetNTStack.pop();\n return firstSet;\n }\n}\n","import { ETokenType } from \"../common\";\nimport { NoneTerminal, GrammarSymbol } from \"./GrammarSymbol\";\nimport Production from \"../lalr/Production\";\n\nexport class Grammar {\n readonly productions: Production[];\n\n readonly startSymbol: NoneTerminal;\n\n static create(start: NoneTerminal, productions: GrammarSymbol[][]) {\n const _ps = productions.map((gsl) => {\n return new Production(<NoneTerminal>gsl[0], gsl.slice(1));\n });\n return new Grammar(start, _ps);\n }\n\n constructor(start: NoneTerminal, productions: Production[]) {\n this.startSymbol = start;\n productions.unshift(new Production(NoneTerminal.START, [start]));\n this.productions = productions;\n }\n\n getProductionList(nonTerminal: NoneTerminal) {\n return this.productions.filter((item) => item.goal === nonTerminal);\n }\n\n isNullableNT(NT: NoneTerminal) {\n return this.productions.find((item) => item.goal === NT && item.derivation[0] === ETokenType.EPSILON);\n }\n\n getProductionByID(pid: number) {\n return Production.pool.get(pid);\n }\n}\n","// Context Free Grammar of Galacean Shader\nimport { ETokenType } from \"../common\";\nimport { Keyword } from \"../common/enums/Keyword\";\nimport { ASTNode } from \"../parser/AST\";\nimport { Grammar } from \"../parser/Grammar\";\nimport { GrammarSymbol, NoneTerminal } from \"../parser/GrammarSymbol\";\nimport SemanticAnalyzer, { TranslationRule } from \"../parser/SemanticAnalyzer\";\nimport GrammarUtils from \"./Utils\";\n\nconst productionAndRules: [GrammarSymbol[], TranslationRule | undefined][] = [\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.gs_shader_program,\n [[NoneTerminal.global_declaration], [NoneTerminal.gs_shader_program, NoneTerminal.global_declaration]],\n ASTNode.GLShaderProgram.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.global_declaration,\n [\n [NoneTerminal.precision_specifier],\n [NoneTerminal.variable_declaration_statement],\n [NoneTerminal.struct_specifier],\n [NoneTerminal.function_definition],\n [NoneTerminal.global_macro_if_statement],\n [NoneTerminal.macro_undef],\n [NoneTerminal.macro_define],\n [Keyword.MACRO_DEFINE_EXPRESSION]\n ],\n ASTNode.GlobalDeclaration.pool\n ),\n\n // Expression-style `#define` — lexer emits either:\n // `MACRO_DEFINE ID <value tokens> MACRO_DEFINE_END` (object macro)\n // `MACRO_DEFINE ID MACRO_DEFINE_PARAMS <value tokens> MACRO_DEFINE_END` (function macro)\n //\n // The `(param1, param2, …)` block is captured by the lexer as a single opaque\n // `MACRO_DEFINE_PARAMS` token. Capturing in the lexer (rather than recursively in\n // the CFG via a `macro_define_param_list` non-terminal) avoids an LALR(1) conflict\n // between `macro_define_param_list` and the visually similar\n // `function_call_parameter_list` when the parser is in a state that could follow\n // either `LEFT_PAREN ID , ID` pattern.\n //\n // Empty-value `#define X\\n` and function-like without body stay on the legacy\n // opaque `MACRO_DEFINE_EXPRESSION` path.\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_define,\n [\n [Keyword.MACRO_DEFINE, ETokenType.ID, NoneTerminal.expression, Keyword.MACRO_DEFINE_END],\n [\n Keyword.MACRO_DEFINE,\n ETokenType.ID,\n Keyword.MACRO_DEFINE_PARAMS,\n NoneTerminal.expression,\n Keyword.MACRO_DEFINE_END\n ]\n ],\n ASTNode.MacroDefine.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_call_symbol,\n [[Keyword.MACRO_CALL]],\n ASTNode.MacroCallSymbol.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_call_function,\n [\n [NoneTerminal.macro_call_symbol, ETokenType.LEFT_PAREN, ETokenType.RIGHT_PAREN],\n [\n NoneTerminal.macro_call_symbol,\n ETokenType.LEFT_PAREN,\n NoneTerminal.function_call_parameter_list,\n ETokenType.RIGHT_PAREN\n ]\n ],\n ASTNode.MacroCallFunction.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_undef,\n [\n [Keyword.MACRO_UNDEF, ETokenType.ID],\n [Keyword.MACRO_UNDEF, Keyword.MACRO_CALL]\n ],\n ASTNode.MacroUndef.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_push_context,\n [\n [Keyword.MACRO_IF, Keyword.MACRO_CONDITIONAL_EXPRESSION],\n [Keyword.MACRO_IFDEF, ETokenType.ID],\n [Keyword.MACRO_IFNDEF, ETokenType.ID],\n [Keyword.MACRO_IFDEF, NoneTerminal.macro_call_symbol],\n [Keyword.MACRO_IFNDEF, NoneTerminal.macro_call_symbol]\n ],\n ASTNode.MacroPushContext.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_pop_context,\n [[Keyword.MACRO_ENDIF]],\n ASTNode.MacroPopContext.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_elif_expression,\n [[Keyword.MACRO_ELIF, Keyword.MACRO_CONDITIONAL_EXPRESSION]],\n ASTNode.MacroElifExpression.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_else_expression,\n [[Keyword.MACRO_ELSE]],\n ASTNode.MacroElseExpression.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.global_macro_declaration,\n [[NoneTerminal.global_declaration], [NoneTerminal.global_macro_declaration, NoneTerminal.global_declaration]],\n ASTNode.GlobalMacroDeclaration.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.global_macro_if_statement,\n [\n [NoneTerminal.macro_push_context, NoneTerminal.global_macro_declaration, NoneTerminal.global_macro_branch],\n [NoneTerminal.macro_push_context, NoneTerminal.global_macro_branch]\n ],\n ASTNode.GlobalMacroIfStatement.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.global_macro_branch,\n [\n [NoneTerminal.macro_pop_context],\n [NoneTerminal.macro_elif_expression, NoneTerminal.global_macro_declaration, NoneTerminal.global_macro_branch],\n [NoneTerminal.macro_else_expression, NoneTerminal.global_macro_declaration, NoneTerminal.macro_pop_context],\n [NoneTerminal.macro_elif_expression, NoneTerminal.global_macro_branch],\n [NoneTerminal.macro_else_expression, NoneTerminal.macro_pop_context]\n ],\n ASTNode.GlobalMacroBranch.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.variable_declaration,\n [\n [NoneTerminal.fully_specified_type, ETokenType.ID],\n [NoneTerminal.fully_specified_type, ETokenType.ID, NoneTerminal.array_specifier],\n [NoneTerminal.fully_specified_type, ETokenType.ID, ETokenType.EQUAL, NoneTerminal.initializer]\n ],\n ASTNode.VariableDeclaration.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.variable_declaration_list,\n [\n [NoneTerminal.variable_declaration],\n [NoneTerminal.variable_declaration_list, ETokenType.COMMA, ETokenType.ID],\n [NoneTerminal.variable_declaration_list, ETokenType.COMMA, ETokenType.ID, NoneTerminal.array_specifier]\n ],\n ASTNode.VariableDeclarationList.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(NoneTerminal.variable_declaration_statement, [\n [NoneTerminal.variable_declaration_list, ETokenType.SEMICOLON]\n ]),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.ext_builtin_type_specifier_nonarray,\n [\n [Keyword.VOID],\n [Keyword.FLOAT],\n [Keyword.BOOL],\n [Keyword.INT],\n [Keyword.UINT],\n [Keyword.VEC2],\n [Keyword.VEC3],\n [Keyword.VEC4],\n [Keyword.BVEC2],\n [Keyword.BVEC3],\n [Keyword.BVEC4],\n [Keyword.IVEC2],\n [Keyword.IVEC3],\n [Keyword.IVEC4],\n [Keyword.UVEC2],\n [Keyword.UVEC3],\n [Keyword.UVEC4],\n [Keyword.MAT2],\n [Keyword.MAT3],\n [Keyword.MAT4],\n [Keyword.MAT2X3],\n [Keyword.MAT2X4],\n [Keyword.MAT3X2],\n [Keyword.MAT3X4],\n [Keyword.MAT4X2],\n [Keyword.MAT4X3],\n [Keyword.SAMPLER2D],\n [Keyword.SAMPLER3D],\n [Keyword.SAMPLER_CUBE],\n [Keyword.SAMPLER2D_SHADOW],\n [Keyword.SAMPLER_CUBE_SHADOW],\n [Keyword.SAMPLER2D_ARRAY],\n [Keyword.SAMPLER2D_ARRAY_SHADOW],\n [Keyword.I_SAMPLER2D],\n [Keyword.I_SAMPLER3D],\n [Keyword.I_SAMPLER_CUBE],\n [Keyword.I_SAMPLER2D_ARRAY],\n [Keyword.U_SAMPLER2D],\n [Keyword.U_SAMPLER3D],\n [Keyword.U_SAMPLER_CUBE],\n [Keyword.U_SAMPLER2D_ARRAY]\n ],\n ASTNode.ExtBuiltinTypeSpecifierNonArray.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.type_specifier_nonarray,\n [\n // User-defined struct identifier\n [ETokenType.ID],\n // Built-in type keyword (float / vec3 / sampler2D / ...)\n [NoneTerminal.ext_builtin_type_specifier_nonarray],\n // Macro-as-type-alias (e.g. `#define FxaaFloat float; FxaaFloat x;`).\n // Routing through `macro_call_symbol` keeps the macro a first-class AST\n // node and lets the LALR table disambiguate from expression-position\n // macro calls.\n [NoneTerminal.macro_call_symbol]\n ],\n ASTNode.TypeSpecifierNonArray.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.fully_specified_type,\n [[NoneTerminal.type_specifier], [NoneTerminal.type_qualifier, NoneTerminal.type_specifier]],\n ASTNode.FullySpecifiedType.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.type_specifier,\n [\n [NoneTerminal.type_specifier_nonarray],\n [NoneTerminal.ext_builtin_type_specifier_nonarray, NoneTerminal.array_specifier]\n ],\n ASTNode.TypeSpecifier.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.type_qualifier,\n [[NoneTerminal.single_type_qualifier], [NoneTerminal.type_qualifier, NoneTerminal.single_type_qualifier]],\n ASTNode.TypeQualifier.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.single_type_qualifier,\n [\n [NoneTerminal.storage_qualifier],\n [NoneTerminal.precision_qualifier],\n [NoneTerminal.interpolation_qualifier],\n [NoneTerminal.invariant_qualifier],\n [Keyword.PRECISE]\n ],\n ASTNode.SingleTypeQualifier.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.storage_qualifier,\n [[Keyword.CONST], [Keyword.IN], [Keyword.INOUT], [Keyword.OUT], [Keyword.CENTROID]],\n // #if _VERBOSE\n ASTNode.StorageQualifier.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.interpolation_qualifier,\n [[Keyword.SMOOTH], [Keyword.FLAT]],\n // #if _VERBOSE\n ASTNode.InterpolationQualifier.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.invariant_qualifier,\n [[Keyword.INVARIANT]],\n // #if _VERBOSE\n ASTNode.InvariantQualifier.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.precision_qualifier,\n [[Keyword.HIGHP], [Keyword.MEDIUMP], [Keyword.LOWP]],\n // #if _VERBOSE\n ASTNode.PrecisionQualifier.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.struct_specifier,\n [\n [\n Keyword.STRUCT,\n ETokenType.ID,\n ETokenType.LEFT_BRACE,\n NoneTerminal.struct_declaration_list,\n ETokenType.RIGHT_BRACE,\n ETokenType.SEMICOLON\n ],\n [\n Keyword.STRUCT,\n ETokenType.LEFT_BRACE,\n NoneTerminal.struct_declaration_list,\n ETokenType.RIGHT_BRACE,\n ETokenType.SEMICOLON\n ]\n ],\n ASTNode.StructSpecifier.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.struct_declaration_list,\n [[NoneTerminal.struct_declaration], [NoneTerminal.struct_declaration_list, NoneTerminal.struct_declaration]],\n ASTNode.StructDeclarationList.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.struct_declaration,\n [\n [NoneTerminal.type_specifier, NoneTerminal.struct_declarator_list, ETokenType.SEMICOLON],\n [\n NoneTerminal.type_qualifier,\n NoneTerminal.type_specifier,\n NoneTerminal.struct_declarator_list,\n ETokenType.SEMICOLON\n ],\n [\n NoneTerminal.layout_qualifier,\n NoneTerminal.type_specifier,\n NoneTerminal.struct_declarator,\n ETokenType.SEMICOLON\n ],\n [NoneTerminal.macro_struct_declaration]\n ],\n ASTNode.StructDeclaration.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_struct_declaration,\n [\n [NoneTerminal.macro_push_context, NoneTerminal.struct_declaration_list, NoneTerminal.macro_struct_branch],\n [NoneTerminal.macro_push_context, NoneTerminal.macro_struct_branch]\n ],\n ASTNode.MacroStructDeclaration.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_struct_branch,\n [\n [NoneTerminal.macro_pop_context],\n [NoneTerminal.macro_elif_expression, NoneTerminal.struct_declaration_list, NoneTerminal.macro_struct_branch],\n [NoneTerminal.macro_else_expression, NoneTerminal.struct_declaration_list, NoneTerminal.macro_pop_context],\n [NoneTerminal.macro_elif_expression, NoneTerminal.macro_struct_branch],\n [NoneTerminal.macro_else_expression, NoneTerminal.macro_pop_context]\n ],\n ASTNode.MacroStructBranch.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.layout_qualifier,\n [\n [\n Keyword.LAYOUT,\n ETokenType.LEFT_PAREN,\n Keyword.LOCATION,\n ETokenType.EQUAL,\n ETokenType.INT_CONSTANT,\n ETokenType.RIGHT_PAREN\n ]\n ],\n ASTNode.LayoutQualifier.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.struct_declarator_list,\n [\n [NoneTerminal.struct_declarator],\n [NoneTerminal.struct_declarator_list, ETokenType.COMMA, NoneTerminal.struct_declarator]\n ],\n ASTNode.StructDeclaratorList.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.struct_declarator,\n [[ETokenType.ID], [ETokenType.ID, NoneTerminal.array_specifier]],\n ASTNode.StructDeclarator.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.array_specifier,\n [\n [ETokenType.LEFT_BRACKET, ETokenType.RIGHT_BRACKET],\n [ETokenType.LEFT_BRACKET, NoneTerminal.integer_constant_expression, ETokenType.RIGHT_BRACKET]\n ],\n ASTNode.ArraySpecifier.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.integer_constant_expression_operator,\n [[ETokenType.PLUS], [ETokenType.DASH], [ETokenType.STAR], [ETokenType.SLASH], [ETokenType.PERCENT]],\n ASTNode.IntegerConstantExpressionOperator.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.integer_constant_expression,\n [\n [NoneTerminal.variable_identifier],\n [ETokenType.INT_CONSTANT],\n [\n NoneTerminal.integer_constant_expression,\n NoneTerminal.integer_constant_expression_operator,\n ETokenType.INT_CONSTANT\n ],\n [\n NoneTerminal.integer_constant_expression,\n NoneTerminal.integer_constant_expression_operator,\n NoneTerminal.variable_identifier\n ]\n ],\n ASTNode.IntegerConstantExpression.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.conditional_expression,\n [\n [NoneTerminal.logical_or_expression],\n [\n NoneTerminal.logical_or_expression,\n ETokenType.QUESTION,\n NoneTerminal.expression,\n ETokenType.COLON,\n NoneTerminal.assignment_expression\n ]\n ],\n // #if _VERBOSE\n ASTNode.ConditionalExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.logical_or_expression,\n [\n [NoneTerminal.logical_xor_expression],\n [NoneTerminal.logical_or_expression, ETokenType.OR_OP, NoneTerminal.logical_xor_expression]\n ],\n // #if _VERBOSE\n ASTNode.LogicalOrExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.logical_xor_expression,\n [\n [NoneTerminal.logical_and_expression],\n [NoneTerminal.logical_xor_expression, ETokenType.XOR_OP, NoneTerminal.logical_and_expression]\n ],\n // #if _VERBOSE\n ASTNode.LogicalXorExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.logical_and_expression,\n [\n [NoneTerminal.inclusive_or_expression],\n [NoneTerminal.logical_and_expression, ETokenType.AND_OP, NoneTerminal.inclusive_or_expression]\n ],\n // #if _VERBOSE\n ASTNode.LogicalAndExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.inclusive_or_expression,\n [\n [NoneTerminal.exclusive_or_expression],\n [NoneTerminal.inclusive_or_expression, ETokenType.VERTICAL_BAR, NoneTerminal.exclusive_or_expression]\n ],\n // #if _VERBOSE\n ASTNode.InclusiveOrExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.exclusive_or_expression,\n [\n [NoneTerminal.and_expression],\n [NoneTerminal.exclusive_or_expression, ETokenType.CARET, NoneTerminal.and_expression]\n ],\n // #if _VERBOSE\n ASTNode.ExclusiveOrExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.and_expression,\n [\n [NoneTerminal.equality_expression],\n [NoneTerminal.and_expression, ETokenType.AMPERSAND, NoneTerminal.equality_expression]\n ],\n // #if _VERBOSE\n ASTNode.AndExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.equality_expression,\n [\n [NoneTerminal.relational_expression],\n [NoneTerminal.equality_expression, ETokenType.EQ_OP, NoneTerminal.relational_expression],\n [NoneTerminal.equality_expression, ETokenType.NE_OP, NoneTerminal.relational_expression]\n ],\n // #if _VERBOSE\n ASTNode.EqualityExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.relational_expression,\n [\n [NoneTerminal.shift_expression],\n [NoneTerminal.relational_expression, ETokenType.LEFT_ANGLE, NoneTerminal.shift_expression],\n [NoneTerminal.relational_expression, ETokenType.RIGHT_ANGLE, NoneTerminal.shift_expression],\n [NoneTerminal.relational_expression, ETokenType.LE_OP, NoneTerminal.shift_expression],\n [NoneTerminal.relational_expression, ETokenType.GE_OP, NoneTerminal.shift_expression]\n ],\n // #if _VERBOSE\n ASTNode.RelationalExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.shift_expression,\n [\n [NoneTerminal.additive_expression],\n [NoneTerminal.shift_expression, ETokenType.LEFT_OP, NoneTerminal.additive_expression],\n [NoneTerminal.shift_expression, ETokenType.RIGHT_OP, NoneTerminal.additive_expression]\n ],\n // #if _VERBOSE\n ASTNode.ShiftExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.additive_expression,\n [\n [NoneTerminal.multiplicative_expression],\n [NoneTerminal.additive_expression, ETokenType.PLUS, NoneTerminal.multiplicative_expression],\n [NoneTerminal.additive_expression, ETokenType.DASH, NoneTerminal.multiplicative_expression]\n ],\n // #if _VERBOSE\n ASTNode.AdditiveExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.multiplicative_expression,\n [\n [NoneTerminal.unary_expression],\n [NoneTerminal.multiplicative_expression, ETokenType.STAR, NoneTerminal.unary_expression],\n [NoneTerminal.multiplicative_expression, ETokenType.SLASH, NoneTerminal.unary_expression],\n [NoneTerminal.multiplicative_expression, ETokenType.PERCENT, NoneTerminal.unary_expression]\n ],\n // #if _VERBOSE\n ASTNode.MultiplicativeExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.unary_expression,\n [\n [NoneTerminal.postfix_expression],\n [ETokenType.INC_OP, NoneTerminal.unary_expression],\n [ETokenType.DEC_OP, NoneTerminal.unary_expression],\n [NoneTerminal.unary_operator, NoneTerminal.unary_expression]\n ],\n // #if _VERBOSE\n ASTNode.UnaryExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.unary_operator,\n [[ETokenType.PLUS], [ETokenType.DASH], [ETokenType.BANG], [ETokenType.TILDE]],\n // #if _VERBOSE\n ASTNode.UnaryOperator.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.postfix_expression,\n [\n [NoneTerminal.primary_expression],\n [NoneTerminal.postfix_expression, ETokenType.LEFT_BRACKET, NoneTerminal.expression, ETokenType.RIGHT_BRACKET],\n [NoneTerminal.function_call],\n [NoneTerminal.postfix_expression, ETokenType.DOT, ETokenType.ID],\n [NoneTerminal.postfix_expression, ETokenType.DOT, NoneTerminal.function_call],\n [NoneTerminal.postfix_expression, ETokenType.INC_OP],\n [NoneTerminal.postfix_expression, ETokenType.DEC_OP]\n ],\n ASTNode.PostfixExpression.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.primary_expression,\n [\n [NoneTerminal.variable_identifier],\n [ETokenType.INT_CONSTANT],\n [ETokenType.FLOAT_CONSTANT],\n [Keyword.True],\n [Keyword.False],\n [ETokenType.LEFT_PAREN, NoneTerminal.expression, ETokenType.RIGHT_PAREN]\n ],\n ASTNode.PrimaryExpression.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.expression,\n [\n [NoneTerminal.assignment_expression],\n [NoneTerminal.expression, ETokenType.COMMA, NoneTerminal.assignment_expression]\n ],\n ASTNode.Expression.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.assignment_expression,\n [\n [NoneTerminal.conditional_expression],\n [NoneTerminal.unary_expression, NoneTerminal.assignment_operator, NoneTerminal.assignment_expression]\n ],\n ASTNode.AssignmentExpression.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.assignment_operator,\n [\n [ETokenType.EQUAL],\n [ETokenType.MUL_ASSIGN],\n [ETokenType.DIV_ASSIGN],\n [ETokenType.MOD_ASSIGN],\n [ETokenType.ADD_ASSIGN],\n [ETokenType.SUB_ASSIGN],\n [ETokenType.LEFT_ASSIGN],\n [ETokenType.RIGHT_ASSIGN],\n [ETokenType.AND_ASSIGN],\n [ETokenType.XOR_ASSIGN],\n [ETokenType.OR_ASSIGN]\n ],\n // #if _VERBOSE\n ASTNode.AssignmentOperator.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.function_call,\n [[NoneTerminal.function_call_generic]],\n ASTNode.FunctionCall.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.function_call_generic,\n [\n [\n NoneTerminal.function_identifier,\n ETokenType.LEFT_PAREN,\n NoneTerminal.function_call_parameter_list,\n ETokenType.RIGHT_PAREN\n ],\n [NoneTerminal.function_identifier, ETokenType.LEFT_PAREN, ETokenType.RIGHT_PAREN],\n [NoneTerminal.function_identifier, Keyword.VOID, ETokenType.RIGHT_PAREN]\n ],\n ASTNode.FunctionCallGeneric.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.function_call_parameter_list,\n [\n [NoneTerminal.assignment_expression],\n [NoneTerminal.function_call_parameter_list, ETokenType.COMMA, NoneTerminal.assignment_expression],\n [NoneTerminal.macro_call_arg_block],\n [NoneTerminal.function_call_parameter_list, NoneTerminal.macro_call_arg_block]\n ],\n ASTNode.FunctionCallParameterList.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_call_arg_case_list,\n [\n [NoneTerminal.assignment_expression],\n [ETokenType.COMMA, NoneTerminal.assignment_expression],\n [NoneTerminal.macro_call_arg_block],\n [NoneTerminal.macro_call_arg_case_list, NoneTerminal.macro_call_arg_block],\n [NoneTerminal.macro_call_arg_case_list, ETokenType.COMMA, NoneTerminal.assignment_expression]\n ],\n ASTNode.MacroCallArgCaseList.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_call_arg_block,\n [\n [NoneTerminal.macro_push_context, NoneTerminal.macro_call_arg_branch],\n [NoneTerminal.macro_push_context, NoneTerminal.macro_call_arg_case_list, NoneTerminal.macro_call_arg_branch]\n ],\n ASTNode.MacroCallArgBlock.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_call_arg_branch,\n [\n [NoneTerminal.macro_pop_context],\n [NoneTerminal.macro_elif_expression, NoneTerminal.macro_call_arg_case_list, NoneTerminal.macro_call_arg_branch],\n [NoneTerminal.macro_else_expression, NoneTerminal.macro_call_arg_case_list, NoneTerminal.macro_pop_context],\n [NoneTerminal.macro_elif_expression, NoneTerminal.macro_call_arg_branch],\n [NoneTerminal.macro_else_expression, NoneTerminal.macro_pop_context]\n ],\n ASTNode.MacroCallArgBranch.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.function_identifier,\n [[NoneTerminal.type_specifier]],\n ASTNode.FunctionIdentifier.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.function_definition,\n [[NoneTerminal.function_prototype, NoneTerminal.compound_statement_no_scope]],\n ASTNode.FunctionDefinition.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.function_prototype,\n [[NoneTerminal.function_declarator, ETokenType.RIGHT_PAREN]],\n ASTNode.FunctionProtoType.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.function_declarator,\n [[NoneTerminal.function_header], [NoneTerminal.function_header, NoneTerminal.function_parameter_list]],\n ASTNode.FunctionDeclarator.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.function_header,\n [[NoneTerminal.fully_specified_type, ETokenType.ID, ETokenType.LEFT_PAREN]],\n ASTNode.FunctionHeader.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.function_parameter_list,\n [\n [NoneTerminal.parameter_declaration],\n [NoneTerminal.function_parameter_list, ETokenType.COMMA, NoneTerminal.parameter_declaration],\n [NoneTerminal.macro_param_block],\n [NoneTerminal.function_parameter_list, NoneTerminal.macro_param_block]\n ],\n ASTNode.FunctionParameterList.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_param_case_list,\n [\n [NoneTerminal.parameter_declaration],\n [ETokenType.COMMA, NoneTerminal.parameter_declaration],\n [NoneTerminal.macro_param_block],\n [NoneTerminal.macro_param_case_list, NoneTerminal.macro_param_block],\n [NoneTerminal.macro_param_case_list, ETokenType.COMMA, NoneTerminal.parameter_declaration]\n ],\n ASTNode.MacroParamCaseList.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_param_block,\n [\n [NoneTerminal.macro_push_context, NoneTerminal.macro_parameter_branch],\n [NoneTerminal.macro_push_context, NoneTerminal.macro_param_case_list, NoneTerminal.macro_parameter_branch]\n ],\n ASTNode.MacroParamBlock.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_parameter_branch,\n [\n [NoneTerminal.macro_pop_context],\n [NoneTerminal.macro_elif_expression, NoneTerminal.macro_param_case_list, NoneTerminal.macro_parameter_branch],\n [NoneTerminal.macro_else_expression, NoneTerminal.macro_param_case_list, NoneTerminal.macro_pop_context],\n [NoneTerminal.macro_elif_expression, NoneTerminal.macro_parameter_branch],\n [NoneTerminal.macro_else_expression, NoneTerminal.macro_pop_context]\n ],\n ASTNode.MacroParameterBranch.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.parameter_declaration,\n [\n [NoneTerminal.type_qualifier, NoneTerminal.parameter_declarator],\n [NoneTerminal.parameter_declarator],\n [NoneTerminal.macro_call_symbol],\n [NoneTerminal.macro_call_function]\n ],\n ASTNode.ParameterDeclaration.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.parameter_declarator,\n [\n [NoneTerminal.type_specifier, ETokenType.ID],\n [NoneTerminal.type_specifier, ETokenType.ID, NoneTerminal.array_specifier]\n ],\n ASTNode.ParameterDeclarator.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.statement_list,\n [[NoneTerminal.statement], [NoneTerminal.statement_list, NoneTerminal.statement]],\n ASTNode.StatementList.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.statement,\n [[NoneTerminal.compound_statement], [NoneTerminal.simple_statement]],\n // #if _VERBOSE\n ASTNode.Statement.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.compound_statement_no_scope,\n [\n [ETokenType.LEFT_BRACE, ETokenType.RIGHT_BRACE],\n [ETokenType.LEFT_BRACE, NoneTerminal.statement_list, ETokenType.RIGHT_BRACE]\n ],\n ASTNode.CompoundStatementNoScope.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.compound_statement,\n [\n [ETokenType.LEFT_BRACE, ETokenType.RIGHT_BRACE],\n [NoneTerminal.scope_brace, NoneTerminal.statement_list, NoneTerminal.scope_end_brace]\n ],\n // #if _VERBOSE\n ASTNode.CompoundStatement.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.simple_statement,\n [\n [NoneTerminal.declaration],\n [NoneTerminal.expression_statement],\n [NoneTerminal.selection_statement],\n [NoneTerminal.iteration_statement],\n [NoneTerminal.jump_statement],\n [NoneTerminal.macro_if_statement],\n [NoneTerminal.macro_undef],\n [NoneTerminal.macro_define],\n [Keyword.MACRO_DEFINE_EXPRESSION]\n ],\n // #if _VERBOSE\n ASTNode.SimpleStatement.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.declaration,\n [\n [NoneTerminal.function_prototype, ETokenType.SEMICOLON],\n [NoneTerminal.init_declarator_list, ETokenType.SEMICOLON],\n [\n Keyword.PRECISION,\n NoneTerminal.precision_qualifier,\n NoneTerminal.ext_builtin_type_specifier_nonarray,\n ETokenType.SEMICOLON\n ],\n [NoneTerminal.type_qualifier, ETokenType.ID, ETokenType.SEMICOLON],\n [NoneTerminal.type_qualifier, ETokenType.ID, NoneTerminal.identifier_list, ETokenType.SEMICOLON]\n ],\n ASTNode.Declaration.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.identifier_list,\n [\n [ETokenType.COMMA, ETokenType.ID],\n [NoneTerminal.identifier_list, ETokenType.COMMA, ETokenType.ID]\n ],\n ASTNode.IdentifierList.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.init_declarator_list,\n [\n [NoneTerminal.single_declaration],\n [NoneTerminal.init_declarator_list, ETokenType.COMMA, ETokenType.ID],\n [NoneTerminal.init_declarator_list, ETokenType.COMMA, ETokenType.ID, NoneTerminal.array_specifier],\n [\n NoneTerminal.init_declarator_list,\n ETokenType.COMMA,\n ETokenType.ID,\n NoneTerminal.array_specifier,\n ETokenType.EQUAL,\n NoneTerminal.initializer\n ],\n [NoneTerminal.init_declarator_list, ETokenType.COMMA, ETokenType.ID, ETokenType.EQUAL, NoneTerminal.initializer]\n ],\n ASTNode.InitDeclaratorList.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.single_declaration,\n [\n [NoneTerminal.fully_specified_type, ETokenType.ID],\n [NoneTerminal.fully_specified_type, ETokenType.ID, NoneTerminal.array_specifier],\n [\n NoneTerminal.fully_specified_type,\n ETokenType.ID,\n NoneTerminal.array_specifier,\n ETokenType.EQUAL,\n NoneTerminal.initializer\n ],\n [NoneTerminal.fully_specified_type, ETokenType.ID, ETokenType.EQUAL, NoneTerminal.initializer],\n // Declarator name collides with a `#define` from a sibling `#if expr` arm\n // whose value the lexer can't evaluate. Branch-mutex covers `#if`/`#else`\n // pairs; this variant is the fallback for cross-`#if` collisions (e.g.\n // FXAA's `#define lumaNW …` shadowing `FxaaFloat lumaNW = …`).\n [NoneTerminal.fully_specified_type, Keyword.MACRO_CALL],\n [NoneTerminal.fully_specified_type, Keyword.MACRO_CALL, ETokenType.EQUAL, NoneTerminal.initializer]\n ],\n ASTNode.SingleDeclaration.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.initializer,\n [\n [NoneTerminal.assignment_expression],\n [ETokenType.LEFT_BRACE, NoneTerminal.initializer_list, ETokenType.RIGHT_BRACE]\n ],\n // #if _VERBOSE\n ASTNode.Initializer.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.initializer_list,\n [[NoneTerminal.initializer], [NoneTerminal.initializer_list, ETokenType.COMMA, NoneTerminal.initializer]],\n // #if _VERBOSE\n ASTNode.InitializerList.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.expression_statement,\n [[ETokenType.SEMICOLON], [NoneTerminal.expression, ETokenType.SEMICOLON]],\n // #if _VERBOSE\n ASTNode.ExpressionStatement.pool\n // #endif\n ),\n\n // dangling else ambiguity\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.selection_statement,\n [\n [Keyword.IF, ETokenType.LEFT_PAREN, NoneTerminal.expression, ETokenType.RIGHT_PAREN, NoneTerminal.statement],\n [\n Keyword.IF,\n ETokenType.LEFT_PAREN,\n NoneTerminal.expression,\n ETokenType.RIGHT_PAREN,\n NoneTerminal.statement,\n Keyword.ELSE,\n NoneTerminal.statement\n ]\n ],\n // #if _VERBOSE\n ASTNode.SelectionStatement.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.iteration_statement,\n [\n [Keyword.WHILE, ETokenType.LEFT_PAREN, NoneTerminal.condition, ETokenType.RIGHT_PAREN, NoneTerminal.statement],\n [\n Keyword.FOR,\n ETokenType.LEFT_PAREN,\n NoneTerminal.for_init_statement,\n NoneTerminal.for_rest_statement,\n ETokenType.RIGHT_PAREN,\n NoneTerminal.statement\n ]\n ],\n // #if _VERBOSE\n ASTNode.IterationStatement.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.precision_specifier,\n [\n [\n Keyword.PRECISION,\n NoneTerminal.precision_qualifier,\n NoneTerminal.ext_builtin_type_specifier_nonarray,\n ETokenType.SEMICOLON\n ]\n ],\n ASTNode.PrecisionSpecifier.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.for_init_statement,\n [[NoneTerminal.expression_statement], [NoneTerminal.declaration]],\n // #if _VERBOSE\n ASTNode.ForInitStatement.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.condition,\n [\n [NoneTerminal.expression],\n [NoneTerminal.fully_specified_type, ETokenType.ID, ETokenType.EQUAL, NoneTerminal.initializer]\n ],\n // #if _VERBOSE\n ASTNode.Condition.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.for_rest_statement,\n [\n [NoneTerminal.conditionopt, ETokenType.SEMICOLON],\n [NoneTerminal.conditionopt, ETokenType.SEMICOLON, NoneTerminal.expression]\n ],\n // #if _VERBOSE\n ASTNode.ForRestStatement.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.conditionopt,\n [[ETokenType.EPSILON], [NoneTerminal.condition]],\n // #if _VERBOSE\n ASTNode.ConditionOpt.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.jump_statement,\n [\n [Keyword.CONTINUE, ETokenType.SEMICOLON],\n [Keyword.BREAK, ETokenType.SEMICOLON],\n [Keyword.RETURN, ETokenType.SEMICOLON],\n [Keyword.RETURN, NoneTerminal.expression, ETokenType.SEMICOLON],\n [Keyword.DISCARD, ETokenType.SEMICOLON]\n ],\n ASTNode.JumpStatement.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.scope_brace,\n [[ETokenType.LEFT_BRACE]],\n ASTNode.ScopeBrace.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.scope_end_brace,\n [[ETokenType.RIGHT_BRACE]],\n ASTNode.ScopeEndBrace.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.variable_identifier,\n [[ETokenType.ID], [NoneTerminal.macro_call_symbol], [NoneTerminal.macro_call_function]],\n ASTNode.VariableIdentifier.pool\n ),\n\n // Macros ...\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_if_statement,\n [\n [NoneTerminal.macro_push_context, NoneTerminal.statement_list, NoneTerminal.macro_branch],\n [NoneTerminal.macro_push_context, NoneTerminal.macro_branch]\n ],\n ASTNode.MacroIfStatement.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_branch,\n [\n [NoneTerminal.macro_pop_context],\n [NoneTerminal.macro_elif_expression, NoneTerminal.statement_list, NoneTerminal.macro_branch],\n [NoneTerminal.macro_else_expression, NoneTerminal.statement_list, NoneTerminal.macro_pop_context],\n [NoneTerminal.macro_elif_expression, NoneTerminal.macro_branch],\n [NoneTerminal.macro_else_expression, NoneTerminal.macro_pop_context]\n ],\n ASTNode.MacroBranch.pool\n )\n];\n\nconst createGrammar = () =>\n Grammar.create(\n NoneTerminal.gs_shader_program,\n productionAndRules.map((item) => item[0])\n );\n\nconst addTranslationRule = (sa: SemanticAnalyzer) => {\n for (let i = 0; i < productionAndRules.length; i++) {\n const rule = productionAndRules[i][1];\n if (rule) {\n sa.addTranslationRule(i, rule);\n }\n }\n};\n\nexport { addTranslationRule, createGrammar };\n","import { ETokenType } from \"../common\";\nimport { BaseToken } from \"../common/BaseToken\";\nimport { Keyword } from \"../common/enums/Keyword\";\nimport { GSError, GSErrorName } from \"../GSError\";\nimport { LALR1 } from \"../lalr\";\nimport { addTranslationRule, createGrammar } from \"../lalr/CFG\";\nimport { EAction, StateActionTable, StateGotoTable } from \"../lalr/types\";\nimport { MacroDefineList } from \"../Preprocessor\";\nimport { ParserUtils } from \"../ParserUtils\";\nimport { ShaderCompiler } from \"../ShaderCompiler\";\nimport { ShaderCompilerUtils } from \"../ShaderCompilerUtils\";\nimport { ASTNode, TreeNode } from \"./AST\";\nimport { Grammar } from \"./Grammar\";\nimport { GrammarSymbol, NoneTerminal } from \"./GrammarSymbol\";\nimport SematicAnalyzer from \"./SemanticAnalyzer\";\nimport { ESymbolType, SymbolInfo } from \"./symbolTable\";\nimport { TraceStackItem } from \"./types\";\n\n/**\n * The syntax parser and sematic analyzer of `ShaderCompiler` compiler\n */\nexport class ShaderTargetParser {\n readonly actionTable: StateActionTable;\n readonly gotoTable: StateGotoTable;\n readonly grammar: Grammar;\n readonly sematicAnalyzer: SematicAnalyzer;\n private _traceBackStack: (TraceStackItem | number)[] = [];\n\n private get curState() {\n return this._traceBackStack[this._traceBackStack.length - 1] as number;\n }\n private get stateActionTable() {\n return this.actionTable.get(this.curState)!;\n }\n private get stateGotoTable() {\n return this.gotoTable.get(this.curState);\n }\n\n // #if _VERBOSE\n /** @internal */\n get errors() {\n return this.sematicAnalyzer.errors;\n }\n // #endif\n\n static _singleton: ShaderTargetParser;\n\n static create() {\n if (!this._singleton) {\n const grammar = createGrammar();\n const generator = new LALR1(grammar);\n generator.generate();\n this._singleton = new ShaderTargetParser(generator.actionTable, generator.gotoTable, grammar);\n addTranslationRule(this._singleton.sematicAnalyzer);\n }\n\n return this._singleton;\n }\n\n private constructor(actionTable: StateActionTable, gotoTable: StateGotoTable, grammar: Grammar) {\n this.actionTable = actionTable;\n this.gotoTable = gotoTable;\n this.grammar = grammar;\n this.sematicAnalyzer = new SematicAnalyzer();\n }\n\n parse(tokens: Generator<BaseToken, BaseToken>, macroDefineList: MacroDefineList): ASTNode.GLShaderProgram | null {\n this.sematicAnalyzer.reset(macroDefineList);\n const { _traceBackStack: traceBackStack, sematicAnalyzer } = this;\n traceBackStack.push(0);\n\n let nextToken = tokens.next();\n while (true) {\n const token = nextToken.value;\n\n const actionInfo = this.stateActionTable.get(token.type);\n if (actionInfo?.action === EAction.Shift) {\n traceBackStack.push(token, actionInfo.target!);\n // Function-like `#define` form params live in a scope wrapping the\n // value AST, mirroring how `function_header` opens a scope for GLSL\n // function parameters. Push on shift of `MACRO_DEFINE_PARAMS`; the\n // matching `popScope` runs when `MacroDefine.semanticAnalyze` reduces\n // the production (only the function-like alternative needs it, and\n // it knows that from its own children).\n if (token.type === Keyword.MACRO_DEFINE_PARAMS) {\n sematicAnalyzer.pushScope();\n for (const p of ParserUtils.parseMacroParamList(token.lexeme)) {\n sematicAnalyzer.symbolTableStack.insert(new SymbolInfo(p, ESymbolType.VAR));\n }\n }\n nextToken = tokens.next();\n } else if (actionInfo?.action === EAction.Accept) {\n sematicAnalyzer.acceptRule?.(sematicAnalyzer);\n return sematicAnalyzer.semanticStack.pop() as ASTNode.GLShaderProgram;\n } else if (actionInfo?.action === EAction.Reduce) {\n const target = actionInfo.target!;\n const reduceProduction = this.grammar.getProductionByID(target)!;\n const translationRule = sematicAnalyzer.getTranslationRule(reduceProduction.id);\n\n const values: (TreeNode | BaseToken)[] = [];\n\n for (let i = reduceProduction.derivation.length - 1; i >= 0; i--) {\n if (reduceProduction.derivation[i] === ETokenType.EPSILON) continue;\n traceBackStack.pop();\n const token = traceBackStack.pop();\n if (token instanceof BaseToken) {\n values.unshift(token);\n } else {\n const astNode = sematicAnalyzer.semanticStack.pop()!;\n values.unshift(astNode);\n }\n }\n translationRule?.(sematicAnalyzer, ...values);\n\n const gotoTable = this.stateGotoTable;\n traceBackStack.push(reduceProduction.goal);\n\n const nextState = gotoTable?.get(reduceProduction.goal)!;\n traceBackStack.push(nextState);\n continue;\n } else {\n const error = ShaderCompilerUtils.createGSError(\n `Unexpected token ${token.lexeme}`,\n GSErrorName.CompilationError,\n ShaderCompiler._processingPassText,\n token.location\n );\n // #if _VERBOSE\n this.sematicAnalyzer.errors.push(<GSError>error);\n // #endif\n return null;\n }\n }\n }\n\n // #if _VERBOSE\n private _printStack(nextToken: BaseToken) {\n let str = \"\";\n for (let i = 0; i < this._traceBackStack.length - 1; i++) {\n const state = <NoneTerminal>this._traceBackStack[i++];\n const token = this._traceBackStack[i];\n str += `State${state} - ${(<BaseToken>token).lexeme ?? ParserUtils.toString(token as GrammarSymbol)}; `;\n }\n str += `State${this._traceBackStack[this._traceBackStack.length - 1]} --- ${nextToken.lexeme}`;\n console.info(str);\n }\n // #endif\n}\n","import type { ASTNode } from \"./parser/AST\";\nimport type { BranchSignature } from \"./common/BaseToken\";\n\n// Mirrors `ShaderPass._shaderRootPath`; inlined to keep shader-compiler standalone.\nconst SHADER_ROOT_PATH = \"shaders://root/\";\n\nexport type IncludeMap = { readonly [includeName: string]: string | undefined };\n\nexport type ChunkOutputCache = Map<string, string>;\n\nexport interface MacroDefineInfo {\n isFunction: boolean;\n params: string[];\n /** Value AST. Set when the replacement list parses as `expression` (which\n * includes comma-separated lists per C99 §6.10.3); absent for the GLSL ES\n * 3.00 §3.4 opaque cases the grammar can't reduce (empty, type-alias keyword,\n * trailing punctuation, unbalanced bracket, trailing operator). Identifier\n * references inside are collected by `MacroCallSymbol._collectIdentifierRefs`\n * walking this subtree. */\n valueAst?: ASTNode.Expression;\n /** Whitespace-normalized directive text. Dedup key against re-includes in\n * the same branch; differing values produce different keys. */\n dedupKey: string;\n /** `#ifdef` branch at registration time; call sites filter to visible entries. */\n branch: BranchSignature;\n}\n\nexport interface MacroDefineList {\n [macroName: string]: MacroDefineInfo[];\n}\n\nexport class Preprocessor {\n // Block-comment alternation prevents expanding `#include` inside doc comments.\n private static readonly _includeReg = /\\/\\*[\\s\\S]*?\\*\\/|^[ \\t]*#include +\"([\\w\\d./]+)\"/gm;\n\n static parse(\n source: string,\n basePathForIncludeKey: string,\n includeMap: IncludeMap,\n chunkOutputCache: ChunkOutputCache\n ): string {\n return source.replace(this._includeReg, (match, includeName) =>\n includeName ? this._replace(includeName, basePathForIncludeKey, includeMap, chunkOutputCache) : match\n );\n }\n\n private static _replace(\n includeName: string,\n basePathForIncludeKey: string,\n includeMap: IncludeMap,\n chunkOutputCache: ChunkOutputCache\n ): string {\n let path: string;\n if (includeName[0] === \".\") {\n path = new URL(includeName, basePathForIncludeKey).href.substring(SHADER_ROOT_PATH.length);\n } else {\n path = includeName;\n }\n\n const chunk = includeMap[path];\n if (!chunk) {\n console.error(`Shader slice \"${path}\" not founded.`);\n return \"\";\n }\n\n let cached = chunkOutputCache.get(path);\n if (cached === undefined) {\n cached = this.parse(chunk, basePathForIncludeKey, includeMap, chunkOutputCache);\n chunkOutputCache.set(path, cached);\n }\n return cached;\n }\n}\n","function _extends() {\n _extends = Object.assign || function assign(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\nexport { _extends as _ };\n","import type { IRenderStates, IShaderPassSource, IShaderSource, ISubShaderSource } from \"@galacean/engine-design\";\n\nexport class ShaderSourceFactory {\n static createRenderStates(): IRenderStates {\n return {\n constantMap: {},\n variableMap: {}\n };\n }\n\n static createShaderSource(name: string): IShaderSource {\n return {\n name,\n subShaders: [],\n pendingContents: [],\n renderStates: this.createRenderStates()\n };\n }\n\n static createSubShaderSource(name: string): ISubShaderSource {\n return {\n name,\n passes: [],\n pendingContents: [],\n tags: {},\n renderStates: this.createRenderStates()\n };\n }\n\n static createShaderPassSource(name: string): IShaderPassSource {\n return {\n name,\n pendingContents: [],\n tags: {},\n renderStates: this.createRenderStates()\n } as IShaderPassSource;\n }\n\n static createUsePass(name: string): IShaderPassSource {\n return {\n name,\n pendingContents: [],\n isUsePass: true,\n tags: {},\n renderStates: this.createRenderStates()\n } as IShaderPassSource;\n }\n}\n","import { IBaseSymbol } from \"../common/IBaseSymbol\";\n\nexport class ShaderSourceSymbol implements IBaseSymbol {\n public isInMacroBranch: boolean = false;\n\n constructor(\n public ident: string,\n public type: number,\n public value?: any\n ) {}\n\n set(ident: string, type: number, value?: any): void {\n this.ident = ident;\n this.type = type;\n this.value = value;\n }\n\n equal(other: ShaderSourceSymbol): boolean {\n return this.type === other.type;\n }\n}\n","import { Color } from \"@galacean/engine-math\";\nimport { ETokenType, ShaderPosition, ShaderRange } from \"../common\";\nimport { BaseLexer } from \"../common/BaseLexer\";\nimport { BaseToken } from \"../common/BaseToken\";\nimport { Keyword } from \"../common/enums/Keyword\";\nimport { GSErrorName } from \"../GSError\";\nimport { ShaderCompiler } from \"../ShaderCompiler\";\nimport { ShaderCompilerUtils } from \"../ShaderCompilerUtils\";\n\nexport default class SourceLexer extends BaseLexer {\n hasPendingContent = false;\n\n private static _keywordLexemeTable = <Record<string, Keyword>>{\n RenderQueueType: Keyword.GSRenderQueueType,\n BlendState: Keyword.GSBlendState,\n DepthState: Keyword.GSDepthState,\n StencilState: Keyword.GSStencilState,\n RasterState: Keyword.GSRasterState,\n EditorProperties: Keyword.GSEditorProperties,\n EditorMacros: Keyword.GSEditorMacros,\n Editor: Keyword.GSEditor,\n Tags: Keyword.GSTags,\n VertexShader: Keyword.GSVertexShader,\n FragmentShader: Keyword.GSFragmentShader,\n SubShader: Keyword.GSSubShader,\n Pass: Keyword.GSPass,\n BlendFactor: Keyword.GSBlendFactor,\n BlendOperation: Keyword.GSBlendOperation,\n Bool: Keyword.GSBool,\n Number: Keyword.GSNumber,\n Color: Keyword.GSColor,\n CompareFunction: Keyword.GSCompareFunction,\n StencilOperation: Keyword.GSStencilOperation,\n CullMode: Keyword.GSCullMode,\n ColorWriteMask: Keyword.GSColorWriteMask,\n UsePass: Keyword.GSUsePass,\n\n true: Keyword.True,\n false: Keyword.False\n };\n\n private static _symbolLexemeTable = <Record<string, Keyword>>{\n \"{\": Keyword.LeftBrace,\n \"}\": Keyword.RightBrace,\n \"=\": Keyword.Equal,\n \"|\": Keyword.BitwiseOr\n };\n\n private static _isWordSeparatorChar(charCode: number): boolean {\n return (\n charCode === 123 || // {\n charCode === 125 || // }\n charCode === 61 || // =\n charCode === 59 || // ;\n charCode === 46 || // . CullMode.Back\n charCode === 91 || // [ Enabled[0],\n charCode === 40 || // ( Color(1.0, 1.0, 1.0, 1.0);\n charCode === 124 // | ColorWriteMask.Red | ColorWriteMask.Green\n );\n }\n\n private static _scanDigits(source: string, startIndex: number): number {\n let currentIndex = startIndex;\n while (currentIndex < source.length) {\n const charCode = source.charCodeAt(currentIndex);\n if (BaseLexer.isDigit(charCode)) {\n currentIndex++;\n } else {\n break;\n }\n }\n return currentIndex;\n }\n\n scanNumber(): number {\n this.skipCommentsAndSpace();\n const start = this._currentIndex;\n const source = this._source;\n let index = this._currentIndex;\n\n // Scan integer part\n index = SourceLexer._scanDigits(source, index);\n\n // Scan decimal part if present\n if (source[index] === \".\") {\n index = SourceLexer._scanDigits(source, index + 1);\n }\n\n this.advance(index - this._currentIndex);\n return Number(source.substring(start, index));\n }\n\n scanColor(): Color {\n this.scanLexeme(\"(\");\n\n let r = 0;\n let g = 0;\n let b = 0;\n let a = 1;\n\n r = this.scanNumber();\n this.skipCommentsAndSpace();\n if (this.peek(1) !== \")\") {\n this.scanLexeme(\",\");\n g = this.scanNumber();\n this.skipCommentsAndSpace();\n if (this.peek(1) !== \")\") {\n this.scanLexeme(\",\");\n b = this.scanNumber();\n this.skipCommentsAndSpace();\n if (this.peek(1) !== \")\") {\n this.scanLexeme(\",\");\n a = this.scanNumber();\n this.skipCommentsAndSpace();\n }\n }\n }\n\n this.scanLexeme(\")\");\n return new Color(r, g, b, a);\n }\n\n override scanToken(): BaseToken {\n while (true) {\n this.skipCommentsAndSpace();\n\n if (this.isEnd()) {\n return;\n }\n\n const start = this.getShaderPosition(0);\n if (BaseLexer.isAlpha(this.getCurCharCode())) {\n const wordToken = this._scanWord(start);\n if (wordToken !== null) {\n return wordToken;\n }\n this.hasPendingContent = true;\n continue; // Continue loop to scan next token if word was invalid\n }\n\n const currentChar = this.getCurChar();\n const symbolKeyword = SourceLexer._symbolLexemeTable[currentChar];\n if (symbolKeyword !== undefined) {\n this.advance(1);\n const token = BaseToken.pool.get();\n token.set(symbolKeyword, currentChar, start);\n return token;\n }\n\n // Skip unrecognized character and continue\n this.advance(1);\n }\n }\n\n // #if _VERBOSE\n scanToCharacter(char: string): void {\n while (this.getCurChar() !== char && !this.isEnd()) {\n this.advance(1);\n }\n this.advance(1);\n }\n // #endif\n\n createCompileError(message: string, location?: ShaderPosition | ShaderRange) {\n return ShaderCompilerUtils.createGSError(\n message,\n GSErrorName.CompilationError,\n this.source,\n location ?? this.getShaderPosition(0)\n );\n }\n\n private _scanWord(start: ShaderPosition): BaseToken | null {\n // Scan the complete word first\n while (BaseLexer.isAlnum(this.getCurCharCode()) && !this.isEnd()) {\n this.advance(1);\n }\n const end = this.getShaderPosition(0);\n\n // Validate both boundaries in one optimized call\n if (!this._validateWordBoundaries(start.index, end.index)) {\n return null; // Invalid word due to boundary violation\n }\n\n const lexeme = this._source.substring(start.index, end.index);\n const tokenType = SourceLexer._keywordLexemeTable[lexeme] ?? ETokenType.ID;\n const range = ShaderCompiler.createRange(start, end);\n const token = BaseToken.pool.get();\n token.set(tokenType, lexeme, range);\n return token;\n }\n\n private _validateWordBoundaries(startIndex: number, endIndex: number): boolean {\n const source = this._source;\n\n // Check previous boundary\n if (startIndex > 0) {\n const prevCharCode = source.charCodeAt(startIndex - 1);\n if (!this._isValidWordBoundary(prevCharCode)) {\n return false;\n }\n }\n\n // Check next boundary\n if (endIndex < source.length) {\n const nextCharCode = source.charCodeAt(endIndex);\n if (!this._isValidWordBoundary(nextCharCode)) {\n return false;\n }\n }\n\n return true;\n }\n\n private _isValidWordBoundary(charCode: number): boolean {\n return BaseLexer.isWhiteSpaceChar(charCode, true) || SourceLexer._isWordSeparatorChar(charCode);\n }\n}\n","import { Color } from \"@galacean/engine-math\";\nimport {\n BlendFactor,\n BlendOperation,\n ColorWriteMask,\n CompareFunction,\n CullMode,\n RenderQueueType,\n RenderStateElementKey,\n StencilOperation\n} from \"@galacean/engine-core\";\nimport type {\n IRenderStates,\n IShaderPassSource,\n IShaderSource,\n IStatement,\n ISubShaderSource\n} from \"@galacean/engine-design\";\nimport { ETokenType, ShaderPosition, ShaderRange } from \"../common\";\nimport { BaseToken } from \"../common/BaseToken\";\nimport { SymbolTableStack } from \"../common/SymbolTableStack\";\nimport { GSErrorName } from \"../GSError\";\n// #if _VERBOSE\nimport { GSError } from \"../GSError\";\n// #endif\nimport { BaseLexer } from \"../common/BaseLexer\";\nimport { Keyword } from \"../common/enums/Keyword\";\nimport { SymbolTable } from \"../common/SymbolTable\";\nimport { ShaderCompilerUtils } from \"../ShaderCompilerUtils\";\nimport { ShaderSourceFactory } from \"./ShaderSourceFactory\";\nimport { ShaderSourceSymbol } from \"./ShaderSourceSymbol\";\nimport SourceLexer from \"./SourceLexer\";\n\n/**\n * @internal\n */\nexport class ShaderSourceParser {\n static readonly errors = new Array<GSError>();\n\n private static _renderStateConstMap = <Record<string, Record<string, number | string | boolean>>>{\n RenderQueueType,\n CompareFunction,\n StencilOperation,\n BlendOperation,\n BlendFactor,\n CullMode,\n ColorWriteMask\n };\n private static _symbolTableStack = new SymbolTableStack<ShaderSourceSymbol, SymbolTable<ShaderSourceSymbol>>();\n private static _lexer = new SourceLexer();\n private static _lookupSymbol = new ShaderSourceSymbol(\"\", null);\n\n static parse(sourceCode: string): IShaderSource {\n // Clear previous data\n this.errors.length = 0;\n this._symbolTableStack.clear();\n this._pushScope();\n\n const lexer = this._lexer;\n lexer.setSource(sourceCode);\n\n const shaderSource = this._parseShader(lexer);\n\n const shaderPendingContents = shaderSource.pendingContents;\n const shaderRenderStates = shaderSource.renderStates;\n for (let i = 0, n = shaderSource.subShaders.length; i < n; i++) {\n const subShader = shaderSource.subShaders[i];\n const curSubShaderGlobalStatements = shaderPendingContents.concat(subShader.pendingContents);\n const globalSubShaderStates = {\n constantMap: { ...shaderRenderStates.constantMap },\n variableMap: { ...shaderRenderStates.variableMap }\n };\n this._mergeRenderStates(globalSubShaderStates, subShader.renderStates);\n\n for (let j = 0, m = subShader.passes.length; j < m; j++) {\n const pass = subShader.passes[j];\n const globalPassRenderStates = {\n constantMap: { ...globalSubShaderStates.constantMap },\n variableMap: { ...globalSubShaderStates.variableMap }\n };\n this._mergeRenderStates(globalPassRenderStates, pass.renderStates);\n pass.renderStates = globalPassRenderStates;\n\n if (pass.isUsePass) continue;\n const passGlobalStatements = curSubShaderGlobalStatements.concat(pass.pendingContents);\n pass.contents = passGlobalStatements.map((item) => item.content).join(\"\\n\");\n }\n }\n\n return shaderSource;\n }\n\n private static _parseShader(lexer: SourceLexer): IShaderSource {\n // Parse shader header\n lexer.scanLexeme(\"Shader\");\n const name = lexer.scanPairedChar('\"', '\"', false, false);\n const shaderSource = ShaderSourceFactory.createShaderSource(name);\n lexer.scanLexeme(\"{\");\n\n let braceLevel = 1;\n lexer.skipCommentsAndSpace();\n let start = lexer.getShaderPosition(0);\n\n const { pendingContents } = shaderSource;\n while (true) {\n const token = lexer.scanToken();\n switch (token.type) {\n case Keyword.GSSubShader:\n this._addPendingContents(start, token.lexeme.length, pendingContents);\n const subShader = this._parseSubShader();\n shaderSource.subShaders.push(subShader);\n start = lexer.getShaderPosition(0);\n break;\n case Keyword.GSEditorProperties:\n case Keyword.GSEditorMacros:\n case Keyword.GSEditor:\n this._addPendingContents(start, token.lexeme.length, pendingContents);\n lexer.scanPairedChar(\"{\", \"}\", true, false);\n start = lexer.getShaderPosition(0);\n break;\n case Keyword.LeftBrace:\n ++braceLevel;\n break;\n case Keyword.RightBrace:\n if (--braceLevel === 0) {\n this._addPendingContents(start, token.lexeme.length, pendingContents);\n this._popScope();\n return shaderSource;\n }\n break;\n default:\n start = this._parseRenderState(token, start, pendingContents, shaderSource.renderStates);\n }\n }\n }\n\n private static _parseRenderStateDeclarationOrAssignment(outRenderStates: IRenderStates, stateToken: BaseToken): void {\n const lexer = this._lexer;\n const token = lexer.scanToken();\n if (token.type === ETokenType.ID) {\n // Declaration\n lexer.scanLexeme(\"{\");\n const renderState = this._parseRenderStateProperties(stateToken.lexeme);\n const symbol = new ShaderSourceSymbol(token.lexeme, stateToken.type, renderState);\n this._symbolTableStack.insert(symbol);\n } else if (token.lexeme === \"=\") {\n // Check if it's direct assignment syntax sugar or variable assignment\n const nextToken = lexer.scanToken();\n\n let renderState: IRenderStates;\n if (nextToken.lexeme === \"{\") {\n // Syntax: DepthState = { ... }\n renderState = this._parseRenderStateProperties(stateToken.lexeme);\n } else {\n // Syntax: DepthState = customDepthState;\n lexer.scanLexeme(\";\");\n const lookupSymbol = this._lookupSymbol;\n lookupSymbol.set(nextToken.lexeme, stateToken.type);\n const sm = this._symbolTableStack.lookup(lookupSymbol);\n if (!sm?.value) {\n this._createCompileError(`Invalid \"${stateToken.lexeme}\" variable: ${nextToken.lexeme}`, nextToken.location);\n // #if _VERBOSE\n return;\n // #endif\n }\n renderState = sm.value as IRenderStates;\n }\n this._mergeRenderStates(outRenderStates, renderState);\n }\n }\n\n private static _mergeRenderStates(outTarget: IRenderStates, source: IRenderStates): void {\n // For each key in the source, remove it from the opposite map in target to ensure proper override\n const { constantMap: targetConstantMap, variableMap: targetVariableMap } = outTarget;\n const { constantMap: sourceConstantMap, variableMap: sourceVariableMap } = source;\n\n for (const key in sourceConstantMap) {\n delete targetVariableMap[key];\n targetConstantMap[key] = sourceConstantMap[key];\n }\n\n for (const key in sourceVariableMap) {\n delete targetConstantMap[key];\n targetVariableMap[key] = sourceVariableMap[key];\n }\n }\n\n private static _parseVariableDeclaration(): void {\n const lexer = this._lexer;\n const token = lexer.scanToken();\n lexer.scanLexeme(\";\");\n const symbol = new ShaderSourceSymbol(token.lexeme, token.type);\n this._symbolTableStack.insert(symbol);\n }\n\n private static _pushScope(): void {\n const symbolTable = new SymbolTable<ShaderSourceSymbol>();\n this._symbolTableStack.pushScope(symbolTable);\n }\n\n private static _popScope(): void {\n this._symbolTableStack.popScope();\n }\n\n private static _parseRenderStateProperties(state: string): IRenderStates {\n const lexer = this._lexer;\n const renderStates = ShaderSourceFactory.createRenderStates();\n while (lexer.getCurChar() !== \"}\") {\n this._parseRenderStateProperty(state, renderStates);\n lexer.skipCommentsAndSpace();\n }\n lexer.advance(1);\n return renderStates;\n }\n\n private static _createCompileError(message: string, location?: ShaderPosition | ShaderRange): void {\n const error = this._lexer.createCompileError(message, location);\n // #if _VERBOSE\n this.errors.push(<GSError>error);\n // #endif\n }\n\n private static _scanEnumConstValue(enumName: string): number | undefined {\n const lexer = this._lexer;\n lexer.advance(1);\n const constValueToken = lexer.scanToken();\n const value = this._renderStateConstMap[enumName]?.[constValueToken.lexeme] as number;\n if (value == undefined) {\n this._createCompileError(\n `Invalid engine constant: ${enumName}.${constValueToken.lexeme}`,\n constValueToken.location\n );\n // #if _VERBOSE\n lexer.scanToCharacter(\";\");\n // #endif\n }\n return value;\n }\n\n private static _parseRenderStateProperty(stateLexeme: string, out: IRenderStates): void {\n const lexer = this._lexer;\n const propertyToken = lexer.scanToken();\n const propertyLexeme = propertyToken.lexeme;\n let stateElementKey = propertyLexeme;\n if (stateLexeme === \"BlendState\" && propertyLexeme !== \"BlendColor\" && propertyLexeme !== \"AlphaToCoverage\") {\n let keyIndex = 0;\n const scannedLexeme = lexer.scanTwoExpectedLexemes(\"[\", \"=\");\n if (scannedLexeme === \"[\") {\n keyIndex = lexer.scanNumber();\n lexer.scanLexeme(\"]\");\n lexer.scanLexeme(\"=\");\n } else if (scannedLexeme !== \"=\") {\n this._createCompileError(`Invalid syntax, expect '[' or '=', but got unexpected token`);\n // #if _VERBOSE\n lexer.scanToCharacter(\";\");\n return;\n // #endif\n }\n stateElementKey += keyIndex;\n } else {\n lexer.scanLexeme(\"=\");\n }\n\n const renderStateElementKey = RenderStateElementKey[stateLexeme + stateElementKey];\n if (renderStateElementKey === undefined) {\n this._createCompileError(`Invalid render state property ${propertyLexeme}`);\n // #if _VERBOSE\n lexer.scanToCharacter(\";\");\n return;\n // #endif\n }\n\n lexer.skipCommentsAndSpace();\n let propertyValue: number | string | boolean | Color;\n\n const curCharCode = lexer.getCurCharCode();\n if (BaseLexer.isDigit(curCharCode) || curCharCode === 46) {\n // Digit or '.'\n propertyValue = lexer.scanNumber();\n } else {\n const valueToken = lexer.scanToken();\n const valueTokenType = valueToken.type;\n\n if (valueTokenType === Keyword.True) {\n propertyValue = true;\n } else if (valueTokenType === Keyword.False) {\n propertyValue = false;\n } else if (valueTokenType === Keyword.GSColor) {\n propertyValue = lexer.scanColor();\n } else if (lexer.getCurChar() === \".\") {\n propertyValue = this._scanEnumConstValue(valueToken.lexeme);\n if (propertyValue == undefined) return;\n // Support bitwise OR only for bitmask enums (e.g. ColorWriteMask)\n lexer.skipCommentsAndSpace();\n if (lexer.getCurChar() === \"|\") {\n if (valueToken.lexeme !== \"ColorWriteMask\") {\n this._createCompileError(\n `Bitwise OR '|' is not supported for '${valueToken.lexeme}', only bitmask enums like 'ColorWriteMask' support this`,\n valueToken.location\n );\n // #if _VERBOSE\n lexer.scanToCharacter(\";\");\n // #endif\n return;\n }\n while (lexer.getCurChar() === \"|\") {\n lexer.advance(1);\n const nextEnumToken = lexer.scanToken();\n if (nextEnumToken == undefined || lexer.getCurChar() !== \".\") {\n this._createCompileError(`Invalid syntax after '|', expect 'EnumType.Value'`, nextEnumToken?.location);\n // #if _VERBOSE\n lexer.scanToCharacter(\";\");\n // #endif\n return;\n }\n if (nextEnumToken.lexeme !== valueToken.lexeme) {\n this._createCompileError(\n `Cannot mix enum types in bitwise OR: expected '${valueToken.lexeme}' but got '${nextEnumToken.lexeme}'`,\n nextEnumToken.location\n );\n // #if _VERBOSE\n lexer.scanToCharacter(\";\");\n // #endif\n return;\n }\n const nextValue = this._scanEnumConstValue(nextEnumToken.lexeme);\n if (nextValue == undefined) return;\n propertyValue = (<number>propertyValue) | (<number>nextValue);\n lexer.skipCommentsAndSpace();\n }\n }\n } else {\n propertyValue = valueToken.lexeme;\n const lookupSymbol = this._lookupSymbol;\n lookupSymbol.set(valueToken.lexeme, ETokenType.ID);\n if (!this._symbolTableStack.lookup(lookupSymbol)) {\n this._createCompileError(`Invalid ${stateLexeme} variable: ${valueToken.lexeme}`, valueToken.location);\n // #if _VERBOSE\n lexer.scanToCharacter(\";\");\n return;\n // #endif\n }\n }\n }\n lexer.scanLexeme(\";\");\n if (typeof propertyValue === \"string\") {\n out.variableMap[renderStateElementKey] = propertyValue;\n } else {\n out.constantMap[renderStateElementKey] = propertyValue;\n }\n }\n\n private static _parseRenderQueueDeclarationOrAssignment(renderStates: IRenderStates): void {\n const lexer = this._lexer;\n const token = lexer.scanToken();\n if (token.type === ETokenType.ID) {\n // Declaration\n lexer.scanLexeme(\";\");\n const symbol = new ShaderSourceSymbol(token.lexeme, Keyword.GSRenderQueueType);\n this._symbolTableStack.insert(symbol);\n return;\n }\n\n if (token.lexeme !== \"=\") {\n this._createCompileError(`Invalid syntax, expect character '=', but got ${token.lexeme}`, token.location);\n // #if _VERBOSE\n return;\n // #endif\n }\n const word = lexer.scanToken();\n lexer.scanLexeme(\";\");\n const value = this._renderStateConstMap.RenderQueueType[word.lexeme];\n const key = RenderStateElementKey.RenderQueueType;\n if (value == undefined) {\n renderStates.variableMap[key] = word.lexeme;\n const lookupSymbol = this._lookupSymbol;\n lookupSymbol.set(word.lexeme, Keyword.GSRenderQueueType);\n const sm = this._symbolTableStack.lookup(lookupSymbol);\n if (!sm) {\n this._createCompileError(`Invalid RenderQueueType variable: ${word.lexeme}`, word.location);\n // #if _VERBOSE\n return;\n // #endif\n }\n } else {\n renderStates.constantMap[key] = value;\n }\n }\n\n private static _addPendingContents(\n start: ShaderPosition,\n backOffset: number,\n outPendingContents: IStatement[]\n ): void {\n const lexer = this._lexer;\n if (lexer.hasPendingContent) {\n const endIndex = lexer.currentIndex - backOffset;\n outPendingContents.push({\n range: { start, end: { ...lexer.getShaderPosition(0), index: endIndex - 1 } },\n content: lexer.source.substring(start.index, endIndex - 1)\n });\n lexer.hasPendingContent = false;\n }\n }\n\n private static _parseSubShader(): ISubShaderSource {\n const lexer = this._lexer;\n this._pushScope();\n\n let braceLevel = 1;\n const name = lexer.scanPairedChar('\"', '\"', false, false);\n const subShaderSource = ShaderSourceFactory.createSubShaderSource(name);\n lexer.scanLexeme(\"{\");\n\n lexer.skipCommentsAndSpace();\n let start = lexer.getShaderPosition(0);\n\n while (true) {\n const token = lexer.scanToken();\n switch (token.type) {\n case Keyword.GSPass:\n this._addPendingContents(start, token.lexeme.length, subShaderSource.pendingContents);\n const pass = this._parsePass();\n subShaderSource.passes.push(pass);\n start = lexer.getShaderPosition(0);\n break;\n case Keyword.GSUsePass:\n this._addPendingContents(start, token.lexeme.length, subShaderSource.pendingContents);\n const name = lexer.scanPairedChar('\"', '\"', false, false);\n subShaderSource.passes.push(ShaderSourceFactory.createUsePass(name));\n start = lexer.getShaderPosition(0);\n break;\n case Keyword.LeftBrace:\n ++braceLevel;\n break;\n case Keyword.RightBrace:\n if (--braceLevel === 0) {\n this._addPendingContents(start, token.lexeme.length, subShaderSource.pendingContents);\n this._popScope();\n return subShaderSource;\n }\n break;\n default:\n start = this._parseRenderStateAndTags(\n token,\n start,\n subShaderSource.pendingContents,\n subShaderSource.renderStates,\n subShaderSource.tags\n );\n }\n }\n }\n\n private static _parseTags(tags: Record<string, number | string | boolean>): void {\n const lexer = this._lexer;\n lexer.scanLexeme(\"{\");\n while (true) {\n const ident = lexer.scanToken();\n lexer.scanLexeme(\"=\");\n const value = lexer.scanPairedChar('\"', '\"', false, false);\n lexer.skipCommentsAndSpace();\n\n tags[ident.lexeme] = value;\n\n if (lexer.peek(1) === \"}\") {\n lexer.advance(1);\n return;\n }\n lexer.scanLexeme(\",\");\n }\n }\n\n private static _parsePass(): IShaderPassSource {\n this._pushScope();\n const lexer = this._lexer;\n\n const name = lexer.scanPairedChar('\"', '\"', false, false);\n const passSource = ShaderSourceFactory.createShaderPassSource(name);\n lexer.scanLexeme(\"{\");\n let braceLevel = 1;\n\n lexer.skipCommentsAndSpace();\n let start = lexer.getShaderPosition(0);\n\n while (true) {\n const token = lexer.scanToken();\n switch (token.type) {\n case Keyword.GSVertexShader:\n case Keyword.GSFragmentShader:\n this._addPendingContents(start, token.lexeme.length, passSource.pendingContents);\n lexer.scanLexeme(\"=\");\n const entry = lexer.scanToken();\n if (passSource[token.lexeme]) {\n const error = ShaderCompilerUtils.createGSError(\n \"Reassign main entry\",\n GSErrorName.CompilationError,\n lexer.source,\n lexer.getShaderPosition(0)\n );\n // #if _VERBOSE\n console.error(error.toString());\n throw error;\n // #endif\n }\n const key = token.type === Keyword.GSVertexShader ? \"vertexEntry\" : \"fragmentEntry\";\n passSource[key] = entry.lexeme;\n lexer.scanLexeme(\";\");\n start = lexer.getShaderPosition(0);\n break;\n case Keyword.LeftBrace:\n ++braceLevel;\n break;\n case Keyword.RightBrace:\n if (--braceLevel === 0) {\n this._addPendingContents(start, token.lexeme.length, passSource.pendingContents);\n this._popScope();\n return passSource;\n }\n break;\n default:\n start = this._parseRenderStateAndTags(\n token,\n start,\n passSource.pendingContents,\n passSource.renderStates,\n passSource.tags\n );\n }\n }\n }\n\n private static _parseRenderStateAndTags(\n token: BaseToken<number>,\n start: ShaderPosition,\n outGlobalContents: IStatement[],\n outRenderStates: IRenderStates,\n outTags: Record<string, number | string | boolean>\n ): ShaderPosition {\n switch (token.type) {\n case Keyword.GSTags:\n this._addPendingContents(start, token.lexeme.length, outGlobalContents);\n this._parseTags(outTags);\n start = this._lexer.getShaderPosition(0);\n break;\n default:\n start = this._parseRenderState(token, start, outGlobalContents, outRenderStates);\n }\n return start;\n }\n\n private static _parseRenderState(\n token: BaseToken<number>,\n start: ShaderPosition,\n outGlobalContents: IStatement[],\n outRenderStates: IRenderStates\n ): ShaderPosition {\n switch (token.type) {\n case Keyword.GSBlendState:\n case Keyword.GSDepthState:\n case Keyword.GSRasterState:\n case Keyword.GSStencilState:\n this._addPendingContents(start, token.lexeme.length, outGlobalContents);\n this._parseRenderStateDeclarationOrAssignment(outRenderStates, token);\n start = this._lexer.getShaderPosition(0);\n break;\n case Keyword.GSBlendFactor:\n case Keyword.GSBlendOperation:\n case Keyword.GSBool:\n case Keyword.GSNumber:\n case Keyword.GSColor:\n case Keyword.GSCompareFunction:\n case Keyword.GSStencilOperation:\n case Keyword.GSCullMode:\n case Keyword.GSColorWriteMask:\n this._addPendingContents(start, token.lexeme.length, outGlobalContents);\n this._parseVariableDeclaration();\n start = this._lexer.getShaderPosition(0);\n break;\n case Keyword.GSRenderQueueType:\n this._addPendingContents(start, token.lexeme.length, outGlobalContents);\n this._parseRenderQueueDeclarationOrAssignment(outRenderStates);\n start = this._lexer.getShaderPosition(0);\n break;\n default:\n // Unrecognized tokens are defined as pending content\n this._lexer.hasPendingContent = true;\n }\n return start;\n }\n}\n","import { Color } from \"@galacean/engine-math\";\nimport { ShaderLanguage } from \"@galacean/engine-core\";\nimport type { IPrecompiledShader, IRenderStates, IShaderSource } from \"@galacean/engine-design\";\nimport type { IShaderProgramSource } from \"@galacean/engine-design/types/shader-compiler/IShaderProgramSource\";\nimport { GLES100Visitor, GLES300Visitor } from \"./codeGen\";\nimport { ShaderPosition, ShaderRange } from \"./common\";\nimport { Lexer } from \"./lexer\";\nimport { ShaderInstructionEncoder } from \"./ShaderInstructionEncoder\";\nimport { ShaderTargetParser } from \"./parser\";\nimport { Preprocessor, IncludeMap, ChunkOutputCache } from \"./Preprocessor\";\nimport { ShaderCompilerUtils } from \"./ShaderCompilerUtils\";\nimport { ShaderSourceParser } from \"./sourceParser/ShaderSourceParser\";\n\nexport class ShaderCompiler {\n private static _parser = ShaderTargetParser.create();\n private static _shaderPositionPool = ShaderCompilerUtils.createObjectPool(ShaderPosition);\n private static _shaderRangePool = ShaderCompilerUtils.createObjectPool(ShaderRange);\n\n // #if _VERBOSE\n static _processingPassText?: string;\n // #endif\n\n private _includeMap: IncludeMap = {};\n private readonly _chunkOutputCache: ChunkOutputCache = new Map();\n\n /** Replace the `#include` lookup table and clear the derived chunk cache. */\n _setIncludeMap(includeMap: IncludeMap): void {\n this._includeMap = includeMap;\n this._chunkOutputCache.clear();\n }\n\n static createPosition(index: number, line?: number, column?: number): ShaderPosition {\n const position = this._shaderPositionPool.get();\n position.set(\n index,\n // #if _VERBOSE\n line,\n column\n // #endif\n );\n return position;\n }\n\n static createRange(start: ShaderPosition, end: ShaderPosition): ShaderRange {\n const range = this._shaderRangePool.get();\n range.set(start, end);\n return range;\n }\n\n _parseShaderSource(sourceCode: string): IShaderSource {\n ShaderCompilerUtils.clearAllShaderCompilerObjectPool();\n const shaderSource = ShaderSourceParser.parse(sourceCode);\n\n // #if _VERBOSE\n this._logErrors(ShaderSourceParser.errors);\n // #endif\n\n return shaderSource;\n }\n\n _parseShaderPass(\n source: string,\n vertexEntry: string,\n fragmentEntry: string,\n backend: ShaderLanguage,\n basePathForIncludeKey: string\n ): IShaderProgramSource | undefined {\n const macroDefineList = {};\n const noIncludeContent = Preprocessor.parse(\n source,\n basePathForIncludeKey,\n this._includeMap,\n this._chunkOutputCache\n );\n\n const lexer = new Lexer(noIncludeContent, macroDefineList);\n\n const tokens = lexer.tokenize();\n const { _parser: parser } = ShaderCompiler;\n\n ShaderCompiler._processingPassText = noIncludeContent;\n\n const program = parser.parse(tokens, macroDefineList);\n\n // #if _VERBOSE\n this._logErrors(parser.errors);\n // #endif\n\n if (!program) {\n return undefined;\n }\n\n const codeGen = backend === ShaderLanguage.GLSLES100 ? GLES100Visitor.getVisitor() : GLES300Visitor.getVisitor();\n\n const ret = codeGen.visitShaderProgram(program, vertexEntry, fragmentEntry);\n ShaderCompiler._processingPassText = undefined;\n\n // #if _VERBOSE\n this._logErrors(codeGen.errors);\n // #endif\n\n if (ret) {\n ret.vertexShaderInstructions = ShaderInstructionEncoder.parse(ret.vertex);\n ret.fragmentShaderInstructions = ShaderInstructionEncoder.parse(ret.fragment);\n }\n\n return ret;\n }\n\n _precompile(sourceCode: string, platformTarget: ShaderLanguage, basePathForIncludeKey: string): IPrecompiledShader {\n const shaderSource = this._parseShaderSource(sourceCode);\n\n const subShaders = shaderSource.subShaders.map((sub) => ({\n name: sub.name,\n tags: sub.tags,\n passes: sub.passes.map((pass) => {\n if (pass.isUsePass) {\n return {\n name: pass.name,\n isUsePass: true as const,\n tags: pass.tags,\n renderStates: this._serializeRenderStates(pass.renderStates)\n };\n }\n\n const programSource = this._parseShaderPass(\n pass.contents,\n pass.vertexEntry,\n pass.fragmentEntry,\n platformTarget,\n basePathForIncludeKey\n );\n\n if (!programSource) {\n throw new Error(\n `Shader pass \"${shaderSource.name}.${sub.name}.${pass.name}\" precompile failed, please check the shader source code.`\n );\n }\n\n return {\n name: pass.name,\n isUsePass: false as const,\n tags: pass.tags,\n renderStates: this._serializeRenderStates(pass.renderStates),\n vertexShaderInstructions: programSource.vertexShaderInstructions,\n fragmentShaderInstructions: programSource.fragmentShaderInstructions\n };\n })\n }));\n\n return {\n name: shaderSource.name,\n platformTarget,\n subShaders\n };\n }\n\n private _serializeRenderStates(renderStates: IRenderStates): {\n constantMap: Record<string, number | string | boolean | number[]>;\n variableMap: Record<string, string>;\n } {\n const constantMap: Record<string, number | string | boolean | number[]> = {};\n for (const key in renderStates.constantMap) {\n const value = renderStates.constantMap[key];\n if (value instanceof Color) {\n constantMap[key] = [value.r, value.g, value.b, value.a];\n } else {\n constantMap[key] = value as number | string | boolean;\n }\n }\n return {\n constantMap,\n variableMap: renderStates.variableMap\n };\n }\n\n // #if _VERBOSE\n /**\n * @internal\n */\n _logErrors(errors: Error[]) {\n if (errors.length === 0) return;\n console.error(`${errors.length} errors occur!`);\n for (const err of errors) {\n console.error(err.toString());\n }\n }\n // #endif\n}\n","export { ShaderCompiler } from \"./ShaderCompiler\";\n\nexport * from \"./GSError\";\n\n//@ts-ignore\nexport const version = `__buildVersion`;\n\nlet mode = \"Release\";\n// #if _VERBOSE\nmode = \"Verbose\";\n// #endif\n\nconsole.log(`Galacean Engine Shader Compiler Version: ${version} | Mode: ${mode}`);\n"],"names":["_instanceof","left","right","Symbol","hasInstance","_set_prototype_of","o","p","Object","setPrototypeOf","__proto__","_inherits","subClass","superClass","TypeError","prototype","create","constructor","value","writable","configurable","_defineProperties","target","props","i","length","descriptor","enumerable","defineProperty","key","_create_class","Constructor","protoProps","staticProps","_array_like_to_array","arr","len","arr2","Array","_create_for_of_iterator_helper_loose","allowArrayLike","it","iterator","call","next","bind","isArray","_unsupported_iterable_to_array","minLen","n","toString","slice","name","from","test","done","__decorate","decorators","desc","d","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","SuppressedError","ETokenType","Keyword","NoneTerminal","GSErrorName","EShaderStage","ESymbolType","ASTNode","TrivialNode","ScopeBrace","ScopeEndBrace","JumpStatement","ExpressionAstNode","SingleDeclaration","FullySpecifiedType","TypeQualifier","SingleTypeQualifier","TypeSpecifier","ArraySpecifier","IntegerConstantExpressionOperator","IntegerConstantExpression","TypeSpecifierNonArray","ExtBuiltinTypeSpecifierNonArray","InitDeclaratorList","IdentifierList","Declaration","FunctionProtoType","FunctionDeclarator","FunctionHeader","FunctionParameterList","MacroParamCaseList","MacroParamBlock","MacroParameterBranch","ParameterDeclaration","ParameterDeclarator","CompoundStatementNoScope","StatementList","FunctionDefinition","FunctionCall","FunctionCallGeneric","FunctionCallParameterList","MacroCallArgCaseList","MacroCallArgBlock","MacroCallArgBranch","PrecisionSpecifier","FunctionIdentifier","AssignmentExpression","Expression","PrimaryExpression","PostfixExpression","StructSpecifier","StructDeclarationList","StructDeclaration","MacroStructDeclaration","MacroStructBranch","LayoutQualifier","StructDeclaratorList","StructDeclarator","VariableDeclaration","VariableDeclarationList","VariableIdentifier","GLShaderProgram","GlobalDeclaration","MacroUndef","MacroPushContext","MacroPopContext","MacroElifExpression","MacroElseExpression","GlobalMacroDeclaration","GlobalMacroIfStatement","GlobalMacroBranch","MacroIfStatement","MacroBranch","MacroCallSymbol","MacroCallFunction","MacroDefine","EAction","_obj","ShaderRange","set","start","end","dispose","ShaderPosition","index","ShaderCompilerUtils","createObjectPool","type","pool","ClearableObjectPool","_shaderCompilerObjectPoolSet","push","clearAllShaderCompilerObjectPool","clear","createGSError","message","errorName","source","location","file","console","error","err","Error","EMPTY_BRANCH","BaseToken","branch","lexeme","arg","ShaderCompiler","createPosition","createRange","EOF","ParserUtils","unwrapNodeByType","node","child","children","Token","nt","parseMacroParamList","inner","replace","split","map","s","trim","filter","Boolean","unwrapBareIdentifier","options","cur","allowParens","TreeNode","extractDirectIdentLexeme","expr","ident","isTerminal","sm","START","_is_native_reflect_construct","result","valueOf","construct","_","_construct","Parent","args","Class","a","apply","instance","Function","_get_prototype_of","getPrototypeOf","_wrap_native_super","_cache","Map","undefined","indexOf","has","get","Wrapper","GSError","Error1","_this","_proto","wrappingLineCount","BaseLexer","_currentIndex","_source","setSource","getShaderPosition","backOffset","isEnd","getCurChar","getCurCharCode","charCodeAt","advance","count","skipSpace","includeLineBreak","isWhiteSpaceChar","skipCommentsAndSpace","afterBlock","_skipBlockComment","afterLine","_skipLineComment","peek","to","offset","substring","scanLexeme","throwError","scanTwoExpectedLexemes","lexeme1","lexeme2","pos","_len","msgs","_key","join","ScannerError","scanPairedChar","balanced","skipLeading","sourceLength","currentIndex","level","currentChar","isDigit","charCode","isHexDigit","isAlpha","isAlnum","isPreprocessorStartChar","src","j","includeBreak","Lexer","BaseLexer1","macroDefineList","_needScanMacroConditionExpression","_inMacroDefineValue","_macroDefineExpectsNameToken","_macroDefineExpectsParamsToken","_currentMacroName","_currentMacroParamsLexeme","_currentMacroValueStart","_branchStack","_pendingBranchPushDefined","tokenize","tok","top","thisArg","body","f","y","t","label","sent","trys","ops","g","Iterator","verb","v","step","op","pop","e","scanToken","ID","MACRO_CALL","defined","MACRO_IFDEF","MACRO_IFNDEF","MACRO_IF","_ifCounter","MACRO_ELIF","MACRO_ELSE","MACRO_ENDIF","_state","_skipInlineSpaceAndComments","_isAtLineBreak","_emitMacroDefineEnd","_scanMacroDefineParams","_scanMacroConditionExpression","curChar","curCharCode","_scanDirectives","_scanWord","_scanNum","token","LEFT_ASSIGN","LEFT_OP","LE_OP","LEFT_ANGLE","RIGHT_ASSIGN","RIGHT_OP","GE_OP","RIGHT_ANGLE","INC_OP","ADD_ASSIGN","PLUS","DEC_OP","SUB_ASSIGN","DASH","EQ_OP","EQUAL","NE_OP","BANG","AND_OP","AND_ASSIGN","AMPERSAND","OR_OP","OR_ASSIGN","VERTICAL_BAR","XOR_OP","XOR_ASSIGN","CARET","MUL_ASSIGN","STAR","DIV_ASSIGN","SLASH","MOD_ASSIGN","PERCENT","LEFT_PAREN","RIGHT_PAREN","LEFT_BRACE","RIGHT_BRACE","LEFT_BRACKET","RIGHT_BRACKET","_scanNumAfterDot","DOT","COMMA","COLON","SEMICOLON","TILDE","QUESTION","_scanStringConst","buffer","range","STRING_CONST","_scanFloatSuffix","FLOAT_CONSTANT","_scanUtilBreakLine","outBuffer","afterContinuation","_skipLineContinuation","word","_peekMacroDefine","isExpression","MACRO_DEFINE","_registerMacroDefine","paramsLexeme","valueStart","valueEnd","MACRO_DEFINE_EXPRESSION","kt","_lexemeTable","_skipNonSemantic","nameStart","paramsStart","depth","cursor","parenDepth","bracketDepth","firstStart","firstEnd","firstFollowedByParen","topLevelLast","skipped","after","_isNonExpressionLeadingKeyword","head","tail","headIllegal","tailIllegal","valueText","ch","MACRO_DEFINE_PARAMS","MACRO_DEFINE_END","params","dedupKey","_normalizeValueText","info","isFunction","sameBranch","MACRO_CONDITIONAL_EXPRESSION","_isVisibleMacro","defs","callSiteBranch","isVisibleFrom","nextCode","_scanIntegerSuffix","INT_CONSTANT","b","defBranch","m","kw","True","False","startsWith","out","pendingSpace","const","CONST","bool","BOOL","float","FLOAT","double","DOUBLE","int","INT","uint","UINT","break","BREAK","continue","CONTINUE","do","DO","else","ELSE","for","FOR","if","IF","while","WHILE","discard","DISCARD","return","RETURN","bvec2","BVEC2","bvec3","BVEC3","bvec4","BVEC4","ivec2","IVEC2","ivec3","IVEC3","ivec4","IVEC4","uvec2","UVEC2","uvec3","UVEC3","uvec4","UVEC4","vec2","VEC2","vec3","VEC3","vec4","VEC4","mat2","MAT2","mat3","MAT3","mat4","MAT4","in","IN","OUT","inout","INOUT","sampler2D","SAMPLER2D","samplerCube","SAMPLER_CUBE","sampler3D","SAMPLER3D","sampler2DShadow","SAMPLER2D_SHADOW","samplerCubeShadow","SAMPLER_CUBE_SHADOW","sampler2DArray","SAMPLER2D_ARRAY","sampler2DArrayShadow","SAMPLER2D_ARRAY_SHADOW","isampler2D","I_SAMPLER2D","isampler3D","I_SAMPLER3D","isamplerCube","I_SAMPLER_CUBE","isampler2DArray","I_SAMPLER2D_ARRAY","usampler2D","U_SAMPLER2D","usampler3D","U_SAMPLER3D","usamplerCube","U_SAMPLER_CUBE","usampler2DArray","U_SAMPLER2D_ARRAY","struct","STRUCT","void","VOID","true","false","precision","PRECISION","precise","PRECISE","highp","HIGHP","mediump","MEDIUMP","lowp","LOWP","invariant","INVARIANT","flat","FLAT","smooth","SMOOTH","noperspective","NOPERSPECTIVE","centroid","CENTROID","layout","LAYOUT","LOCATION","MACRO_UNDEF","FamilyMembers","dimension","members","BuiltinFunctionTable","BuiltinFunction","returnType","scope","_returnType","_create","fn","ALL","list","_createWithScope","resolveOverload","funcName","callArgTypes","overloads","candidate","declaredArgs","sizeLock","scalarTypeLock","matched","declaredType","actualType","paramFamily","memberIdx","returnFamily","_realReturnType","returnIdx","isExist","realReturnType","MAT2X3","MAT3X2","MAT2X4","MAT4X2","MAT3X4","MAT4X3","FRAGMENT","BuiltinVariableTable","BuiltinVariable","createVariable","item","getVar","VERTEX","VEC4_ARRAY","SymbolTable","_table","insert","symbol","isInMacroBranch","_this__table_get","entry","equal","Logger","warn","getSymbol","includeMacro","getSymbols","_getSymbols","forEach","callback","_step","_iterator","values","entries","SymbolTableStack","stack","_macroLevel","pushScope","popScope","lookup","symbolTable","lookupAll","SymbolDataType","typeLexeme","arraySpecifier","SymbolInfo","astNode","dataType","paramSignature","symbolType","protoType","paramSig","comparedParams","t1","t2","FnSymbol","typeSpecifier","FN","StructSymbol","VarSymbol","isGlobalVariable","initAst","VAR","ShaderData","globalPrecisions","globalMacroDeclarations","getOuterGlobalMacroDeclarations","parent","SemanticAnalyzer","semanticStack","acceptRule","symbolTableStack","curFunctionInfo","_shaderData","_translationRuleTable","reset","_macroDefineList","addTranslationRule","pid","rule","getTranslationRule","reportError","loc","reportWarning","CompilationWarn","_processingPassText","shaderData","_lookupSymbol","SymbolType","StructProp","typeInfo","mrtIndex","ASTNodeDecorator","nonTerminal","_location","_children","_parent","init","setCache","code","_codeCache","getCache","codeGen","visitor","defaultCodeGen","semanticAnalyze","sa","_unwrapToken","_ignore","scope_brace","scope_end_brace","isFragReturnStatement","returnStatement","visitJumpStatement","jump_statement","_type","_this__type","childrenLen","fullyType","id","initializer","visitSingleDeclaration","single_declaration","fully_specified_type","type_qualifier","qualifier","single_type_qualifier","arraySize","firstChild","_children_","size","isCustom","type_specifier","integerConstantExpr","array_specifier","operator","compute","integer_constant_expression_operator","Number","integer_constant_expression","tt","macroName","type_specifier_nonarray","ext_builtin_type_specifier_nonarray","childrenLength","initDeclList","init_declarator_list","idList","curIdList","listIdLength","identifier_list","visitDeclaration","declaration","declarator","parameterList","parameterInfoList","function_prototype","header","function_declarator","visitFunctionHeader","function_header","decl","visitFunctionParameterList","function_parameter_list","macro_param_case_list","macro_param_block","macro_parameter_branch","parameterDeclarator","varSymbol","parameter_declaration","parameter_declarator","compound_statement_no_scope","visitStatementList","statement_list","statements","visitFunctionDefinition","function_definition","visitFunctionCall","function_call","fnSymbol","functionIdentifier","isBuiltin","fnIdent","paramList","lookupSymbol","function_call_generic","paramNodes","function_call_parameter_list","macro_call_arg_case_list","macro_call_arg_block","macro_call_arg_branch","precision_specifier","visitFunctionIdentifier","function_identifier","assignment_expression","expression","primary_expression","visitPostfixExpression","postfix_expression","propList","macroExpressions","visitStructSpecifier","struct_specifier","struct_declaration_list","_typeSpecifier","_declaratorList","macroStructDeclaration","macroProps","_this__typeSpecifier","prop","declaratorList","declaratorListLength","struct_declaration","_this_props","_this_props1","_this_macroExpressions","_this_macroExpressions1","_this_props2","_this_macroExpressions2","concat","macro_struct_declaration","lastNode","macro_struct_branch","layout_qualifier","listLength","struct_declarator_list","struct_declarator","isStatic","visitGlobalVariableDeclaration","variable_declaration","variableDeclarations","_this_variableDeclarations","newVariable","variable_declaration_list","referenceGlobalSymbolNames","_symbols","symbols","needFindNames","referenceSymbolNames","builtinVar","_lookupAndMarkGlobalReference","hasAstValue","_probeCrossArmShadowing","visitVariableIdentifier","getLexeme","missWarnLoc","Any","currentScopeSymbol","some","variable_identifier","gs_shader_program","global_declaration","macro_undef","macro_push_context","macro_pop_context","macro_elif_expression","macro_else_expression","global_macro_declaration","global_macro_if_statement","global_macro_branch","macro_if_statement","macro_branch","TreeNode1","isFunctionLikeMacro","aliasesNonBuiltinIdent","nameToken","defList","refs","visibleCount","allAst","isFn","allAliasNonBuiltinIdent","valueAst","_collectIdentifierRefs","leadingIdent","leadingChild","leadingId","macro_call_symbol","visitMacroCallFunction","macro_call_function","valueExpression","valueIdx","definingBranch","upgradable","find","every","visitMacroDefine","macro_define","VisitorContext","attributeStructs","attributeList","varyingStructs","varyingList","mrtStructs","mrtList","_referencedGlobalMacroASTs","resetAll","_referencedAttributeList","_referencedVaryingList","_referencedMRTList","_referencedGlobals","_structVarMap","isAttributeStruct","findIndex","isVaryingStruct","isMRTStruct","getStructRole","registerStructVar","varName","role","referenceAttribute","_referenceProp","referenceVarying","referenceMRTProp","referenceGlobal","_passSymbolTable","refList","CompilationError","_singleton","context","TempArray","array","CodeGenVisitor","_tmpArrayPool","ret","derivationLength","postExpr","directRoot","identNode","indexNode","identLexeme","indexLexeme","_reportError","astNodes","paramInfoList","paramsCode","variableParam","argNode","paramsToken","valueCode","fullType","cmd","returnVar","returnFnCall","text","getVaryingProp","getAttributeProp","getMRTProp","sort","fnNode","fnName","stageEntry","ReturnableObjectPool","GLESVisitor","_globalCodeArray","globalCodeArray","_serializedGlobalKey","getOtherGlobal","data","visitShaderProgram","vertexEntry","fragmentEntry","outerGlobalMacroDeclarations","_collectAllStructVars","vertex","_vertexMain","fragment","_fragmentMain","structRoles","addEntryRoles","paramRole","returnRole","fns","proto","param0","entryFns","registerByType","walkLocals","_extractLocalVarNames","_step1","_iterator1","param","sym","stage","fnSymbols","varyingSymbols","varyingSymbol","attributeParam","attributeType","attributeSymbols","attributeSymbol","_preRegisterGlobalMacroRefs","_getGlobalSymbol","_getCustomStruct","_getGlobalMacroDeclarations","globalCode","outerGlobalMacroStatements","returnDataType","mrtSymbols","mrtSymbol","returnLocation","identChildren","singleDecl","macros","macro","_walkMacroDefineTokens","lastLength","keys","add","codeGenResult","structNodes","referencedGlobals","referencedGlobalMacroASTs","_step2","_iterator2","_visitGlobalMacroIfStatement","variableDeclaration","Set","GLES100Visitor","propReferenced","getVisitor","V3_GL_FragColor","GLES300Visitor","_otherCodeArray","_fragColorVariableRegistered","_registerFragColorVariable","ShaderPreprocessorDirective","Text","IfDef","IfNdef","IfCmp","IfExpr","Else","Endif","Define","DefineVal","DefineFunc","Undef","ShaderInstructionEncoder","parse","glsl","instructions","backfillStack","directiveStart","_findDirectiveStart","_pushText","lineEnd","line","match","_DIRECTIVE_RE","exec","last","keyword","rest","idx","cond","_parseCondition","_pushConditionInstruction","prevIdx","elseIdx","_backfillJump","endifIdx","afterEndif","inst","funcMatch","_FUNC_MACRO_RE","_stripLineComment","spaceIdx","nl","onlyPlaceholder","directive","trimEnd","ctx","_parseOr","_skipWs","_parseAnd","l","_parseUnary","_parsePrimary","hasParen","_scanIdentifier","_isDigit","lhsNum","_scanNumber","_scanOp","_evalNumOp","_isAlnum","c2","lhs","rhs","Production","goal","derivation","_id","StateItem","production","position","lookahead","_needReInfer","lookaheadSet","la","addLookahead","ts","needReInfer","symbolByOffset","canReduce","EPSILON","curSymbol","nextSymbol","State","cores","closured","_stateItemPool","_items","itemMapKey","getStateItemMapKey","createStateItem","mapId","newItem","cacheKey","getMapKey","state","closureMap","core","newState","items","GrammarUtils","createProductionWithOptions","astTypePool","opt","canElide","addMapSetItem","k","isSubSet","sb","isActionEqual","action","LALR1","grammar","firstSetMap","followSetMap","actionTable","gotoTable","_firstSetNTStack","generate","computeFirstSet","buildStateTable","startStateItemCore","productions","startState","_extendState","_closure","newStates","_inferNextState","ns","_extendStateItem","productionList","getProductionList","newLookaheadSet","terminalExist","lastFirstSet","Utils","_step3","_iterator3","coreMap","stateActionTable","_this_actionTable_get","stateGotoTable","_this_gotoTable_get","stateItem","Reduce","Accept","_addAction","nextItem","gs","Shift","table","terminal","exist","_isKnownShiftPreferred","_computeFirstSetForNT","NT","computingFS","curNT","firstSet","isNullableNT","succeedFirstSet","reduce","prod","Grammar","startSymbol","unshift","getProductionByID","gsl","productionAndRules","variable_declaration_statement","storage_qualifier","precision_qualifier","interpolation_qualifier","invariant_qualifier","conditional_expression","logical_or_expression","logical_xor_expression","logical_and_expression","inclusive_or_expression","exclusive_or_expression","and_expression","equality_expression","relational_expression","shift_expression","additive_expression","multiplicative_expression","unary_expression","unary_operator","assignment_operator","statement","compound_statement","simple_statement","expression_statement","selection_statement","iteration_statement","initializer_list","condition","for_init_statement","for_rest_statement","conditionopt","ShaderTargetParser","_traceBackStack","sematicAnalyzer","SematicAnalyzer","tokens","traceBackStack","nextToken","actionInfo","reduceProduction","translationRule","nextState","generator","curState","Preprocessor","basePathForIncludeKey","includeMap","chunkOutputCache","_includeReg","includeName","_replace","path","chunk","URL","href","cached","_extends","assign","hasOwnProperty","ShaderSourceFactory","createRenderStates","constantMap","variableMap","createShaderSource","subShaders","pendingContents","renderStates","createSubShaderSource","passes","tags","createShaderPassSource","createUsePass","isUsePass","ShaderSourceSymbol","other","SourceLexer","hasPendingContent","scanNumber","_scanDigits","scanColor","Color","wordToken","symbolKeyword","_symbolLexemeTable","createCompileError","_validateWordBoundaries","tokenType","_keywordLexemeTable","startIndex","endIndex","prevCharCode","_isValidWordBoundary","nextCharCode","_isWordSeparatorChar","RenderQueueType","GSRenderQueueType","BlendState","GSBlendState","DepthState","GSDepthState","StencilState","GSStencilState","RasterState","GSRasterState","EditorProperties","GSEditorProperties","EditorMacros","GSEditorMacros","Editor","GSEditor","Tags","GSTags","VertexShader","GSVertexShader","FragmentShader","GSFragmentShader","SubShader","GSSubShader","Pass","GSPass","BlendFactor","GSBlendFactor","BlendOperation","GSBlendOperation","Bool","GSBool","GSNumber","GSColor","CompareFunction","GSCompareFunction","StencilOperation","GSStencilOperation","CullMode","GSCullMode","ColorWriteMask","GSColorWriteMask","UsePass","GSUsePass","LeftBrace","RightBrace","Equal","BitwiseOr","ShaderSourceParser","sourceCode","errors","_symbolTableStack","_pushScope","lexer","_lexer","shaderSource","_parseShader","shaderPendingContents","shaderRenderStates","subShader","curSubShaderGlobalStatements","globalSubShaderStates","_mergeRenderStates","pass","globalPassRenderStates","passGlobalStatements","contents","content","braceLevel","_addPendingContents","_parseSubShader","_popScope","_parseRenderState","_parseRenderStateDeclarationOrAssignment","outRenderStates","stateToken","renderState","_parseRenderStateProperties","_createCompileError","outTarget","targetVariableMap","sourceVariableMap","sourceConstantMap","targetConstantMap","_parseVariableDeclaration","_parseRenderStateProperty","_scanEnumConstValue","enumName","_this__renderStateConstMap_enumName","constValueToken","_renderStateConstMap","stateLexeme","propertyValue","propertyLexeme","propertyToken","stateElementKey","keyIndex","scannedLexeme","renderStateElementKey","RenderStateElementKey","valueToken","valueTokenType","nextEnumToken","nextValue","_parseRenderQueueDeclarationOrAssignment","outPendingContents","subShaderSource","_parsePass","_parseRenderStateAndTags","_parseTags","passSource","outGlobalContents","outTags","_includeMap","_chunkOutputCache","_setIncludeMap","_parseShaderSource","_parseShaderPass","backend","noIncludeContent","parser","_parser","program","ShaderLanguage","GLSLES100","vertexShaderInstructions","fragmentShaderInstructions","_precompile","platformTarget","sub","_serializeRenderStates","programSource","column","_shaderPositionPool","_shaderRangePool","version","log"],"mappings":"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"}