@galacean/engine-shader-compiler 2.0.0-alpha.52 → 2.0.0-alpha.54
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.
- package/README.md +40 -4
- package/bundler/cli.js +199 -104
- package/bundler/precompile.cjs.js +117 -47
- package/bundler/precompile.js +117 -47
- package/bundler/rollup.cjs.js +115 -45
- package/bundler/rollup.js +115 -45
- package/dist/browser.js +13421 -6555
- package/dist/browser.js.map +1 -1
- package/dist/browser.min.js +1 -1
- package/dist/browser.min.js.map +1 -1
- package/dist/main.js +1758 -8450
- package/dist/main.js.map +1 -1
- package/dist/module.js +1730 -8427
- package/dist/module.js.map +1 -1
- package/dist/precompile.main.js +2280 -0
- package/dist/precompile.main.js.map +1 -0
- package/dist/precompile.module.js +2276 -0
- package/dist/precompile.module.js.map +1 -0
- package/package.json +24 -13
- package/types/GLESBackend.d.ts +22 -0
- package/types/ShaderBackend.d.ts +15 -0
- package/types/ShaderCompilation.d.ts +40 -0
- package/types/ShaderCompiler.d.ts +42 -14
- package/types/ShaderInstructionEncoder.d.ts +46 -14
- package/types/ShaderPrecompiler.d.ts +31 -0
- package/types/bundler/precompile.d.ts +26 -3
- package/types/bundler/rollup.d.ts +23 -2
- package/types/codeGen/CodeGenVisitor.d.ts +11 -6
- package/types/codeGen/GLES100.d.ts +3 -5
- package/types/codeGen/GLES300.d.ts +14 -7
- package/types/codeGen/GLESVisitor.d.ts +55 -9
- package/types/codeGen/VisitorContext.d.ts +88 -29
- package/types/codeGen/types.d.ts +1 -1
- package/types/index.d.ts +4 -1
- package/types/precompile.d.ts +1 -0
- package/dist/browser.verbose.js +0 -9601
- package/dist/browser.verbose.js.map +0 -1
- package/dist/browser.verbose.min.js +0 -2
- package/dist/browser.verbose.min.js.map +0 -1
- package/dist/main.verbose.js +0 -9598
- package/dist/main.verbose.js.map +0 -1
- package/dist/module.verbose.js +0 -9591
- package/dist/module.verbose.js.map +0 -1
- package/types/GSError.d.ts +0 -16
- package/types/ParserUtils.d.ts +0 -43
- package/types/Preprocessor.d.ts +0 -30
- package/types/ShaderCompilerUtils.d.ts +0 -10
- package/types/common/BaseLexer.d.ts +0 -51
- package/types/common/BaseToken.d.ts +0 -35
- package/types/common/IBaseSymbol.d.ts +0 -5
- package/types/common/ShaderPosition.d.ts +0 -8
- package/types/common/ShaderRange.d.ts +0 -8
- package/types/common/SymbolTable.d.ts +0 -13
- package/types/common/SymbolTableStack.d.ts +0 -17
- package/types/common/enums/Keyword.d.ts +0 -124
- package/types/common/enums/ShaderStage.d.ts +0 -5
- package/types/common/index.d.ts +0 -5
- package/types/common/types.d.ts +0 -101
- package/types/lalr/CFG.d.ts +0 -5
- package/types/lalr/LALR1.d.ts +0 -27
- package/types/lalr/Production.d.ts +0 -9
- package/types/lalr/State.d.ts +0 -20
- package/types/lalr/StateItem.d.ts +0 -20
- package/types/lalr/Utils.d.ts +0 -22
- package/types/lalr/index.d.ts +0 -2
- package/types/lalr/types.d.ts +0 -14
- package/types/lexer/Lexer.d.ts +0 -143
- package/types/lexer/index.d.ts +0 -1
- package/types/parser/AST.d.ts +0 -502
- package/types/parser/Grammar.d.ts +0 -11
- package/types/parser/GrammarSymbol.d.ts +0 -128
- package/types/parser/SemanticAnalyzer.d.ts +0 -42
- package/types/parser/ShaderInfo.d.ts +0 -10
- package/types/parser/ShaderTargetParser.d.ts +0 -26
- package/types/parser/builtin/functions.d.ts +0 -34
- package/types/parser/builtin/index.d.ts +0 -2
- package/types/parser/builtin/variables.d.ts +0 -11
- package/types/parser/index.d.ts +0 -2
- package/types/parser/symbolTable/FnSymbol.d.ts +0 -6
- package/types/parser/symbolTable/StructSymbol.d.ts +0 -6
- package/types/parser/symbolTable/SymbolDataType.d.ts +0 -8
- package/types/parser/symbolTable/SymbolInfo.d.ts +0 -22
- package/types/parser/symbolTable/VarSymbol.d.ts +0 -8
- package/types/parser/symbolTable/index.d.ts +0 -6
- package/types/parser/types.d.ts +0 -24
- package/types/sourceParser/ShaderSourceFactory.d.ts +0 -8
- package/types/sourceParser/ShaderSourceParser.d.ts +0 -30
- package/types/sourceParser/ShaderSourceSymbol.d.ts +0 -10
- package/types/sourceParser/SourceLexer.d.ts +0 -19
- package/types/sourceParser/index.d.ts +0 -1
- package/verbose/package.json +0 -10
package/dist/browser.min.js.map
CHANGED
|
@@ -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 | null,\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 | undefined;\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[] | undefined;\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 | undefined;\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 | undefined {\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 = undefined;\n symbolTableStack: SymbolTableStack<SymbolInfo, SymbolTable<SymbolInfo>> = new SymbolTableStack();\n curFunctionInfo: {\n header?: ASTNode.FunctionDeclarator;\n returnStatement?: ASTNode.JumpStatement | null;\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 | undefined) {\n return this.attributeStructs.findIndex((item) => item.ident!.lexeme === type) !== -1;\n }\n\n isVaryingStruct(type: string | undefined) {\n return this.varyingStructs.findIndex((item) => item.ident!.lexeme === type) !== -1;\n }\n\n isMRTStruct(type: string | undefined) {\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 | null;\n\n protected static _tmpArrayPool = new ReturnableObjectPool(TempArray<string>, 10);\n\n defaultCodeGen(children: NodeChild[]) {\n const pool = CodeGenVisitor._tmpArrayPool;\n const 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 (const 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 const 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 const 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 | null {\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: [] as IShaderPassSource[\"pendingContents\"],\n renderStates: this.createRenderStates()\n };\n }\n\n static createSubShaderSource(name: string): ISubShaderSource {\n return {\n name,\n passes: [],\n pendingContents: [] as IShaderPassSource[\"pendingContents\"],\n tags: {},\n renderStates: this.createRenderStates()\n };\n }\n\n static createShaderPassSource(name: string): IShaderPassSource {\n return {\n name,\n pendingContents: [] as IShaderPassSource[\"pendingContents\"],\n tags: {},\n renderStates: this.createRenderStates()\n } as IShaderPassSource;\n }\n\n static createUsePass(name: string): IShaderPassSource {\n return {\n name,\n pendingContents: [] as IShaderPassSource[\"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 | null,\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 | undefined {\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 | undefined;\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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"}
|
|
1
|
+
{"version":3,"file":"browser.min.js","sources":["../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_instanceof.js","../../design/dist/module.js","../../shader-parser/dist/shared/GLESShaderInfo.module.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_type_of.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/_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","../../../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","../src/codeGen/VisitorContext.ts","../src/TempArray.ts","../src/codeGen/CodeGenVisitor.ts","../src/ShaderInstructionEncoder.ts","../src/codeGen/GLESVisitor.ts","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_create_class.js","../src/codeGen/GLES100.ts","../src/codeGen/GLES300.ts","../src/GLESBackend.ts","../src/ShaderCompilation.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 _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}\n\nfunction _type_of(obj) {\n \"@swc/helpers - typeof\";\n\n return obj && typeof Symbol !== \"undefined\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n}\n\nfunction _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}\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}\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}\n\nvar binaryPrecedence = {\n \"||\": 1,\n \"&&\": 2,\n \"|\": 3,\n \"^\": 4,\n \"&\": 5,\n \"==\": 6,\n \"!=\": 6,\n \"<\": 7,\n \"<=\": 7,\n \">\": 7,\n \">=\": 7,\n \"<<\": 8,\n \">>\": 8,\n \"+\": 9,\n \"-\": 9,\n \"*\": 10,\n \"/\": 10,\n \"%\": 10\n};\nvar MAX_EXPRESSION_NESTING = 256;\nvar MAX_MACRO_EXPANSION_DEPTH = 256;\nvar MAX_MACRO_EXPANSION_TOKENS = 65536;\n/**\n * Parses the complete integer-expression grammar used by `#if` and `#elif`.\n * @param expression - Text after the preprocessor directive.\n * @returns A serializable tree or a structured parse failure.\n */ function parsePreprocessorExpression(expression) {\n return new ExpressionParser(expression).parse();\n}\n/**\n * Resolves `defined` operators and removes comments with the expression parser's tokenization rules.\n * @param expression - Expression before ordinary macro replacement.\n * @param isDefined - Resolves whether one macro name is defined, or returns `undefined` when external state decides.\n * @returns Token-normalized expression with every known `defined` operator replaced by `0` or `1`.\n */ function resolvePreprocessorDefinedOperators(expression, isDefined) {\n var tokens = tokenize(expression);\n var parts = [];\n for(var index = 0; index < tokens.length - 1; index++){\n var token = tokens[index];\n if (token.kind !== \"identifier\" || token.text !== \"defined\") {\n parts.push(token.text);\n continue;\n }\n var next = tokens[index + 1];\n var parenthesized = (next == null ? void 0 : next.text) === \"(\";\n var name = tokens[index + (parenthesized ? 2 : 1)];\n var close = parenthesized ? tokens[index + 3] : name;\n if ((name == null ? void 0 : name.kind) !== \"identifier\" || name.text === \"defined\" || parenthesized && (close == null ? void 0 : close.text) !== \")\") {\n parts.push(token.text);\n continue;\n }\n var defined = isDefined(name.text);\n if (defined === undefined) {\n parts.push(\"defined\");\n if (parenthesized) parts.push(\"(\");\n parts.push(name.text);\n if (parenthesized) parts.push(\")\");\n } else {\n parts.push(defined ? \"1\" : \"0\");\n }\n index += parenthesized ? 3 : 1;\n }\n return parts.join(\" \");\n}\n/**\n * Expands object-like and function-like macros with the expression parser's tokenization rules.\n * @param expression - Expression after any caller-owned `defined` resolution.\n * @param resolveMacro - Resolves source or runtime macro definitions by name.\n * @returns Token-normalized expansion or a deterministic depth error.\n */ function expandPreprocessorExpressionMacros(expression, resolveMacro) {\n var expanded = expandMacroTokens(tokenize(expression).slice(0, -1), resolveMacro, tokenize, true, 0, {\n remaining: MAX_MACRO_EXPANSION_TOKENS\n });\n return typeof expanded === \"string\" ? {\n expression: \"\",\n error: expanded\n } : {\n expression: expanded.map(function(token) {\n return token.text;\n }).join(\" \")\n };\n}\n/**\n * Expands shader macros using the same argument prescan and rescan rules as conditional expressions.\n * @param source - Shader text without macro definition or conditional directives.\n * @param resolveMacro - Resolves the macro state active at this source location.\n * @returns Expanded shader source, or a deterministic expansion-limit error.\n */ function expandShaderMacros(source, resolveMacro) {\n var expanded = expandMacroTokens(tokenizeShader(source).slice(0, -1), resolveMacro, tokenizeShaderReplacement, false, 0, {\n remaining: MAX_MACRO_EXPANSION_TOKENS\n });\n return typeof expanded === \"string\" ? {\n source: \"\",\n error: expanded\n } : {\n source: serializeShaderTokens(expanded)\n };\n}\nfunction expandMacroTokens(input, resolveMacro, tokenizeReplacement, protectDefined, depth, budget) {\n var tokens = input.slice();\n var output = [];\n var index = 0;\n while(index < tokens.length){\n var // Rescan in place so an object alias can form a call with the following original tokens\n _tokens;\n var _token_disabledMacros, _tokens_openParen;\n var token = tokens[index];\n if (protectDefined && token.text === \"defined\") {\n var _tokens_index;\n output.push(token);\n index++;\n var count = ((_tokens_index = tokens[index]) == null ? void 0 : _tokens_index.text) === \"(\" ? 3 : 1;\n for(var i = 0; i < count && index < tokens.length; i++)output.push(tokens[index++]);\n continue;\n }\n var macro = token.kind === \"identifier\" && !((_token_disabledMacros = token.disabledMacros) == null ? void 0 : _token_disabledMacros.has(token.text)) ? resolveMacro(token.text) : undefined;\n var openParen = index + 1;\n if (macro == null ? void 0 : macro.parameters) {\n var _tokens_openParen1;\n while(((_tokens_openParen1 = tokens[openParen]) == null ? void 0 : _tokens_openParen1.kind) === \"trivia\")openParen++;\n }\n if (!macro || macro.parameters && ((_tokens_openParen = tokens[openParen]) == null ? void 0 : _tokens_openParen.text) !== \"(\") {\n output.push(token);\n index++;\n continue;\n }\n var _token_expansionDepth;\n var expansionDepth = Math.max(depth, (_token_expansionDepth = token.expansionDepth) != null ? _token_expansionDepth : 0) + 1;\n if (expansionDepth > MAX_MACRO_EXPANSION_DEPTH) {\n return \"Preprocessor macro expansion exceeds \" + MAX_MACRO_EXPANSION_DEPTH + \" nested replacements.\";\n }\n var invocationEnd = index;\n var args = [];\n var disabledMacros = new Set(token.disabledMacros);\n if (macro.parameters) {\n var invocation = parseMacroInvocation(tokens, openParen);\n if (!invocation) {\n output.push(token);\n index++;\n continue;\n }\n args = invocation.arguments;\n if (macro.parameters.length === 0 && args.length === 1 && args[0].every(function(token) {\n return token.kind === \"trivia\";\n })) {\n args = [];\n }\n if (args.length !== macro.parameters.length) {\n output.push(token);\n index++;\n continue;\n }\n invocationEnd = invocation.end;\n // A function invocation inherits only exclusions present at both invocation boundaries\n var closingExclusions = tokens[invocationEnd].disabledMacros;\n for(var _iterator = _create_for_of_iterator_helper_loose(disabledMacros), _step; !(_step = _iterator()).done;){\n var name = _step.value;\n if (!(closingExclusions == null ? void 0 : closingExclusions.has(name))) disabledMacros.delete(name);\n }\n }\n disabledMacros.add(token.text);\n var replacement = [];\n var expandedArguments = new Map();\n for(var _iterator1 = _create_for_of_iterator_helper_loose(tokenizeReplacement(macro.body).slice(0, -1)), _step1; !(_step1 = _iterator1()).done;){\n var _loop = function() {\n var part = _step2.value;\n var _part_disabledMacros;\n if (--budget.remaining < 0) return {\n v: \"Preprocessor macro expansion exceeds \" + MAX_MACRO_EXPANSION_TOKENS + \" replacement tokens.\"\n };\n // Only macro names and invocation closing boundaries carry exclusions into later rescans.\n if (part.kind !== \"identifier\" && part.text !== \")\") {\n replacement.push(part);\n return \"continue\";\n }\n var exclusions = disabledMacros;\n if ((_part_disabledMacros = part.disabledMacros) == null ? void 0 : _part_disabledMacros.size) {\n exclusions = new Set(disabledMacros);\n part.disabledMacros.forEach(function(name) {\n return exclusions.add(name);\n });\n }\n var _part_expansionDepth;\n replacement.push(_extends({}, part, {\n disabledMacros: exclusions,\n expansionDepth: Math.max(expansionDepth, (_part_expansionDepth = part.expansionDepth) != null ? _part_expansionDepth : 0)\n }));\n };\n var bodyToken = _step1.value;\n var _macro_parameters;\n var _macro_parameters_indexOf;\n var parameter = bodyToken.kind === \"identifier\" ? (_macro_parameters_indexOf = (_macro_parameters = macro.parameters) == null ? void 0 : _macro_parameters.indexOf(bodyToken.text)) != null ? _macro_parameters_indexOf : -1 : -1;\n var substituted = [\n bodyToken\n ];\n if (parameter >= 0) {\n var argument = expandedArguments.get(parameter);\n if (!argument) {\n // Arguments expand before this invocation disables its own name, including ID(ID(1))\n var expanded = expandMacroTokens(args[parameter], resolveMacro, tokenizeReplacement, protectDefined, expansionDepth, budget);\n if (typeof expanded === \"string\") return expanded;\n expandedArguments.set(parameter, argument = expanded);\n }\n substituted = argument;\n }\n for(var _iterator2 = _create_for_of_iterator_helper_loose(substituted), _step2; !(_step2 = _iterator2()).done;){\n var _ret = _loop();\n if (_type_of(_ret) === \"object\") return _ret.v;\n }\n }\n (_tokens = tokens).splice.apply(_tokens, [].concat([\n index,\n invocationEnd - index + 1\n ], replacement));\n }\n return output;\n}\nvar shaderMultiOperators = new Set([\n \"<<=\",\n \">>=\",\n \"++\",\n \"--\",\n \"<<\",\n \">>\",\n \"<=\",\n \">=\",\n \"==\",\n \"!=\",\n \"&&\",\n \"||\",\n \"^^\",\n \"+=\",\n \"-=\",\n \"*=\",\n \"/=\",\n \"%=\",\n \"&=\",\n \"^=\",\n \"|=\",\n \"##\"\n]);\n// Shader replacement lists use preprocessing numbers, not the integer-only #if grammar.\nfunction tokenizeShader(source, removeComments) {\n if (removeComments === void 0) removeComments = false;\n var tokens = [];\n var index = 0;\n while(index < source.length){\n var start = index;\n var char = source.charCodeAt(index++);\n var kind = void 0;\n var comment = false;\n var _source_index;\n if (isWhitespace(char)) {\n kind = \"trivia\";\n while(isWhitespace(source.charCodeAt(index)))index++;\n } else if (char === 47 && source[index] === \"/\") {\n kind = \"trivia\";\n comment = true;\n while(index < source.length && source[index] !== \"\\n\" && source[index] !== \"\\r\")index++;\n } else if (char === 47 && source[index] === \"*\") {\n kind = \"trivia\";\n comment = true;\n var close = source.indexOf(\"*/\", index + 1);\n index = close < 0 ? source.length : close + 2;\n } else if (char === 34 || char === 39) {\n kind = \"invalid\";\n while(index < source.length){\n var next = source.charCodeAt(index++);\n if (next === 92) index = Math.min(index + 1, source.length);\n else if (next === char) break;\n }\n } else if (isIdentifierStart(char)) {\n kind = \"identifier\";\n while(isIdentifierPart(source.charCodeAt(index)))index++;\n } else if (char >= 48 && char <= 57 || char === 46 && /[0-9]/.test((_source_index = source[index]) != null ? _source_index : \"\")) {\n kind = \"number\";\n while(index < source.length){\n var next1 = source.charCodeAt(index);\n if (isIdentifierPart(next1) || next1 === 46) index++;\n else if ((next1 === 43 || next1 === 45) && /[eEpP]/.test(source[index - 1])) index++;\n else break;\n }\n } else {\n kind = \"operator\";\n if (char === 60 || char === 62) {\n if (shaderMultiOperators.has(source.slice(start, start + 3))) index = start + 3;\n else if (shaderMultiOperators.has(source.slice(start, start + 2))) index = start + 2;\n } else if (\"+-*/%&|^!=#\".includes(source[start]) && shaderMultiOperators.has(source.slice(start, start + 2))) {\n index = start + 2;\n }\n }\n var text = source.slice(start, index);\n tokens.push({\n kind: kind,\n text: removeComments && comment ? text.replace(/[^\\r\\n]/g, \"\") || \" \" : text,\n start: start,\n end: index\n });\n }\n tokens.push({\n kind: \"end\",\n text: \"\",\n start: index,\n end: index\n });\n return tokens;\n}\nfunction tokenizeShaderReplacement(source) {\n // A comment in a replacement list is whitespace; a trailing // must not swallow the caller's suffix.\n return tokenizeShader(source, true);\n}\nfunction serializeShaderTokens(tokens) {\n var parts = [];\n var previous;\n for(var _iterator = _create_for_of_iterator_helper_loose(tokens), _step; !(_step = _iterator()).done;){\n var token = _step.value;\n if (previous && previous.kind !== \"trivia\" && token.kind !== \"trivia\") {\n var word = previous.kind === \"identifier\" || previous.kind === \"number\";\n var nextWord = token.kind === \"identifier\" || token.kind === \"number\";\n var joined = previous.kind === \"operator\" && token.kind === \"operator\" ? previous.text + token.text : \"\";\n // Replacement must not join two preprocessing tokens into a new number, operator or comment.\n if (word && nextWord || previous.kind === \"number\" && (token.text === \".\" || /[eEpP]$/.test(previous.text) && /^[+-]/.test(token.text)) || previous.text === \".\" && token.kind === \"number\" || joined && previous.text.length < 2 && shaderMultiOperators.has(joined.slice(0, 2)) || joined && previous.text.length < 3 && shaderMultiOperators.has(joined.slice(0, 3)) || joined.startsWith(\"//\") || joined.startsWith(\"/*\")) parts.push(\" \");\n }\n parts.push(token.text);\n previous = token;\n }\n return parts.join(\"\");\n}\nfunction parseMacroInvocation(tokens, openParen) {\n var args = [\n []\n ];\n var depth = 1;\n for(var index = openParen + 1; index < tokens.length; index++){\n var token = tokens[index];\n if (token.text === \"(\") {\n depth++;\n args[args.length - 1].push(token);\n } else if (token.text === \")\") {\n if (--depth === 0) {\n for(var _iterator = _create_for_of_iterator_helper_loose(args), _step; !(_step = _iterator()).done;){\n var argument = _step.value;\n trimMacroArgument(argument);\n }\n return {\n arguments: args,\n end: index\n };\n }\n args[args.length - 1].push(token);\n } else if (token.text === \",\" && depth === 1) {\n args.push([]);\n } else {\n args[args.length - 1].push(token);\n }\n }\n}\nfunction trimMacroArgument(tokens) {\n // Call-site padding is not part of the replacement. Keep comments and line breaks intact.\n for(var _i = 0, _iter = [\n false,\n true\n ]; _i < _iter.length; _i++){\n var trailing = _iter[_i];\n while(tokens.length){\n var index = trailing ? tokens.length - 1 : 0;\n var token = tokens[index];\n if (token.kind !== \"trivia\") break;\n var text = token.text.replace(trailing ? /[ \\t\\v\\f]+$/ : /^[ \\t\\v\\f]+/, \"\");\n if (text === token.text) break;\n if (text) {\n tokens[index] = _extends({}, token, {\n text: text\n });\n break;\n }\n if (trailing) tokens.pop();\n else tokens.shift();\n }\n }\n}\n/**\n * Evaluates an expression whose result is independent of macro state.\n * @param expression - Complete preprocessor expression text.\n * @returns 32-bit result, or `undefined` when the expression is invalid, state-dependent, or unevaluable.\n */ function evaluateContextFreePreprocessorExpression(expression) {\n var parsed = parsePreprocessorExpression(expression);\n return parsed.ok ? evaluateContextFreePreprocessorCondition(parsed.condition) : undefined;\n}\n/**\n * Evaluates a parsed condition whose result is independent of macro state.\n * @param condition - Parsed preprocessor expression tree.\n * @returns 32-bit result, or `undefined` when macro state or an invalid operation affects the result.\n */ function evaluateContextFreePreprocessorCondition(condition) {\n var evaluated = evaluateStaticallyKnownPreprocessorCondition(condition);\n return typeof evaluated === \"number\" ? evaluated : undefined;\n}\n/**\n * Evaluates the part of a preprocessor expression determined by known source macro state.\n * @param condition - Parsed preprocessor expression tree.\n * @param context - Partially known macro values and definition states.\n * @returns 32-bit result, or `undefined` when any reachable input remains unknown.\n */ function evaluatePartiallyKnownPreprocessorCondition(condition, context) {\n return evaluatePartiallyKnownPreprocessorConditionResult(condition, context).value;\n}\n/**\n * Evaluates the known portion of an expression while preserving definite evaluation failures.\n * @param condition - Parsed preprocessor expression tree.\n * @param context - Partially known macro values and definition states.\n * @returns Known value, definite error, or an empty result when external state still matters.\n */ function evaluatePartiallyKnownPreprocessorConditionResult(condition, context) {\n var evaluated = evaluateStaticallyKnownPreprocessorCondition(condition, context);\n return typeof evaluated === \"number\" ? {\n value: evaluated\n } : typeof evaluated === \"string\" ? {\n error: evaluated\n } : {};\n}\n/**\n * Evaluates a parsed preprocessor expression with signed 32-bit arithmetic matching ANGLE's preprocessor.\n * @param condition - Serializable expression tree.\n * @param context - Active macro value and definition resolver.\n * @returns Signed 32-bit result; nonzero values are true.\n * @throws Error when an active expression divides by zero or contains a deferred node.\n */ function evaluatePreprocessorExpression(condition, context) {\n var evaluated = evaluatePreprocessorExpressionInternal(condition, context);\n if (typeof evaluated === \"string\") throw new Error(evaluated);\n return evaluated;\n}\nvar DIVISION_BY_ZERO_ERROR = \"Division by zero in active preprocessor expression.\";\nvar MODULO_BY_ZERO_ERROR = \"Modulo by zero in active preprocessor expression.\";\nvar INVALID_SHIFT_COUNT_ERROR = \"Shift count must be between 0 and 31 in active preprocessor expression.\";\nfunction evaluatePreprocessorExpressionInternal(condition, context) {\n switch(condition.t){\n case \"def\":\n return context.isDefined(condition.m) ? 1 : 0;\n case \"ndef\":\n return context.isDefined(condition.m) ? 0 : 1;\n case \"cmp\":\n return evaluateBinaryExpression(context.resolveIdentifier(condition.m), condition.op, condition.v);\n case \"and\":\n {\n var left = evaluatePreprocessorExpressionInternal(condition.l, context);\n if (typeof left === \"string\" || left === 0) return left;\n var right = evaluatePreprocessorExpressionInternal(condition.r, context);\n return typeof right === \"string\" ? right : right !== 0 ? 1 : 0;\n }\n case \"or\":\n {\n var left1 = evaluatePreprocessorExpressionInternal(condition.l, context);\n if (typeof left1 === \"string\") return left1;\n if (left1 !== 0) return 1;\n var right1 = evaluatePreprocessorExpressionInternal(condition.r, context);\n return typeof right1 === \"string\" ? right1 : right1 !== 0 ? 1 : 0;\n }\n case \"not\":\n {\n var value = evaluatePreprocessorExpressionInternal(condition.c, context);\n return typeof value === \"string\" ? value : value === 0 ? 1 : 0;\n }\n case \"bool\":\n return condition.v ? 1 : 0;\n case \"num\":\n return condition.v;\n case \"id\":\n return context.resolveIdentifier(condition.m);\n case \"unary\":\n {\n var value1 = evaluatePreprocessorExpressionInternal(condition.c, context);\n if (typeof value1 === \"string\") return value1;\n return condition.op === \"+\" ? value1 | 0 : condition.op === \"-\" ? -value1 | 0 : ~value1;\n }\n case \"binary\":\n {\n var left2 = evaluatePreprocessorExpressionInternal(condition.l, context);\n if (typeof left2 === \"string\") return left2;\n var right2 = evaluatePreprocessorExpressionInternal(condition.r, context);\n return typeof right2 === \"string\" ? right2 : evaluateBinaryExpression(left2, condition.op, right2);\n }\n case \"deferred\":\n return \"Deferred preprocessor expressions must be expanded before evaluation.\";\n }\n}\nvar ExpressionParser = /*#__PURE__*/ function() {\n function ExpressionParser(expression) {\n this._index = 0;\n this._sawExpandableIdentifier = false;\n this._rightEdgeExpandable = false;\n this._nestingDepth = 0;\n this._tokens = tokenize(expression);\n }\n var _proto = ExpressionParser.prototype;\n _proto.parse = function parse() {\n var condition = this._parseRoot();\n var invalid = this._invalidResult();\n if (invalid) return invalid;\n var evaluated = this._sawExpandableIdentifier ? undefined : evaluateStaticallyKnownPreprocessorCondition(condition);\n return _extends({\n ok: true,\n condition: condition,\n hasExpandableIdentifier: this._sawExpandableIdentifier\n }, typeof evaluated === \"string\" ? {\n evaluationError: evaluated\n } : undefined);\n };\n _proto._parseRoot = function _parseRoot() {\n var condition = this._parseBinary(1);\n if (!this._failure) {\n var token = this._current();\n if (token.kind !== \"end\") {\n var unexpectedExpandableIdentifier = token.kind === \"identifier\" && token.text !== \"defined\";\n this._sawExpandableIdentifier || (this._sawExpandableIdentifier = unexpectedExpandableIdentifier);\n var unsupportedConditionalOperator = token.text === \"?\" || token.text === \":\";\n var certain = unsupportedConditionalOperator || !this._rightEdgeExpandable && !unexpectedExpandableIdentifier && !(token.text === \")\" && this._sawExpandableIdentifier);\n this._fail(\"Unexpected token '\" + token.text + \"' in preprocessor expression.\", token, certain);\n }\n }\n return condition;\n };\n _proto._invalidResult = function _invalidResult() {\n if (this._failure) {\n // A macro supplying a closing delimiter may be the token where parsing stopped.\n for(var i = this._index; i < this._tokens.length; i++){\n var token = this._tokens[i];\n if (token.kind === \"identifier\" && token.text !== \"defined\") {\n this._sawExpandableIdentifier = true;\n break;\n }\n }\n }\n return this._failure ? {\n ok: false,\n error: this._failure,\n hasExpandableIdentifier: this._sawExpandableIdentifier\n } : undefined;\n };\n _proto._parseBinary = function _parseBinary(minPrecedence) {\n var left = this._parseUnary();\n if (this._failure || !left) return undefined;\n while(true){\n var token = this._current();\n var precedence = binaryPrecedence[token.text];\n if (precedence === undefined || precedence < minPrecedence) return left;\n this._index++;\n var right = this._parseBinary(precedence + 1);\n if (this._failure || !right) return undefined;\n if (token.text === \"&&\") left = {\n t: \"and\",\n l: left,\n r: right\n };\n else if (token.text === \"||\") left = {\n t: \"or\",\n l: left,\n r: right\n };\n else left = {\n t: \"binary\",\n op: token.text,\n l: left,\n r: right\n };\n }\n };\n _proto._parseUnary = function _parseUnary() {\n var token = this._current();\n if (token.kind === \"operator\" && (token.text === \"+\" || token.text === \"-\" || token.text === \"!\" || token.text === \"~\")) {\n if (!this._enterNesting(token)) return;\n this._index++;\n var condition = this._parseUnary();\n this._nestingDepth--;\n if (!condition) return undefined;\n return token.text === \"!\" ? {\n t: \"not\",\n c: condition\n } : {\n t: \"unary\",\n op: token.text,\n c: condition\n };\n }\n return this._parsePrimary();\n };\n _proto._parsePrimary = function _parsePrimary() {\n var token = this._current();\n if (token.kind === \"number\") {\n this._index++;\n this._rightEdgeExpandable = false;\n var value = parseIntegerLiteral(token.text);\n if (value === undefined) {\n this._fail(\"Integer literal exceeds 32 bits in preprocessor expression.\", token, true);\n return undefined;\n }\n return {\n t: \"num\",\n v: value\n };\n }\n if (token.kind === \"identifier\") {\n if (token.text === \"defined\") return this._parseDefined();\n this._sawExpandableIdentifier = true;\n this._rightEdgeExpandable = true;\n this._index++;\n return {\n t: \"id\",\n m: token.text\n };\n }\n if (this._consume(\"(\")) {\n if (!this._enterNesting(token)) return;\n var condition = this._parseBinary(1);\n if (!this._failure && !this._consume(\")\")) {\n this._fail(\"Expected ')' in preprocessor expression.\", this._current(), false);\n }\n if (!this._failure) this._rightEdgeExpandable = false;\n this._nestingDepth--;\n return condition;\n }\n if (token.kind === \"end\") {\n this._fail(\"Expected an operand before the end of the preprocessor expression.\", token, true);\n } else {\n this._fail(\"Expected an operand, found '\" + token.text + \"'.\", token, true);\n }\n return undefined;\n };\n _proto._parseDefined = function _parseDefined() {\n this._index++;\n this._rightEdgeExpandable = false;\n var parenthesized = this._consume(\"(\");\n var name = this._current();\n if (name.kind !== \"identifier\" || name.text === \"defined\") {\n this._fail(\"Expected a macro name after 'defined'.\", name, true);\n return undefined;\n }\n this._index++;\n if (parenthesized && !this._consume(\")\")) {\n this._fail(\"Expected ')' after the macro name in 'defined(...)'.\", this._current(), true);\n return undefined;\n }\n return {\n t: \"def\",\n m: name.text\n };\n };\n _proto._consume = function _consume(text) {\n if (this._current().text !== text) return false;\n this._index++;\n return true;\n };\n _proto._enterNesting = function _enterNesting(token) {\n if (this._nestingDepth >= MAX_EXPRESSION_NESTING) {\n this._fail(\"Preprocessor expression nesting exceeds the supported depth of \" + MAX_EXPRESSION_NESTING + \".\", token, true);\n return false;\n }\n this._nestingDepth++;\n return true;\n };\n _proto._current = function _current() {\n return this._tokens[this._index];\n };\n _proto._fail = function _fail(message, token, certain) {\n var _this__failure;\n (_this__failure = this._failure) != null ? _this__failure : this._failure = {\n message: message,\n start: token.start,\n end: Math.max(token.end, token.start + 1),\n certain: certain\n };\n };\n return ExpressionParser;\n}();\nfunction tokenize(expression) {\n var tokens = [];\n var index = 0;\n while(index < expression.length){\n var charCode = expression.charCodeAt(index);\n if (isWhitespace(charCode)) {\n index++;\n continue;\n }\n if (charCode === 47 && expression.charCodeAt(index + 1) === 47) break;\n if (charCode === 47 && expression.charCodeAt(index + 1) === 42) {\n var end = expression.indexOf(\"*/\", index + 2);\n if (end < 0) {\n tokens.push({\n kind: \"invalid\",\n text: expression.slice(index),\n start: index,\n end: expression.length\n });\n index = expression.length;\n } else {\n index = end + 2;\n }\n continue;\n }\n if (isIdentifierStart(charCode)) {\n var start = index++;\n while(index < expression.length && isIdentifierPart(expression.charCodeAt(index)))index++;\n tokens.push({\n kind: \"identifier\",\n text: expression.slice(start, index),\n start: start,\n end: index\n });\n continue;\n }\n if (charCode >= 48 && charCode <= 57) {\n var start1 = index;\n if (charCode === 48 && (expression.charCodeAt(index + 1) === 88 || expression.charCodeAt(index + 1) === 120)) {\n index += 2;\n var digitStart = index;\n while(index < expression.length && isHexDigit(expression.charCodeAt(index)))index++;\n if (index === digitStart) {\n tokens.push({\n kind: \"invalid\",\n text: expression.slice(start1, index),\n start: start1,\n end: index\n });\n continue;\n }\n } else if (charCode === 48) {\n index++;\n while(index < expression.length && expression.charCodeAt(index) >= 48 && expression.charCodeAt(index) <= 55)index++;\n } else {\n index++;\n while(index < expression.length && expression.charCodeAt(index) >= 48 && expression.charCodeAt(index) <= 57)index++;\n }\n var suffixStart = index;\n while(isIntegerSuffix(expression.charCodeAt(index)))index++;\n var suffix = expression.slice(suffixStart, index);\n if (!isValidIntegerSuffix(suffix) || isIdentifierStart(expression.charCodeAt(index))) {\n while(isIdentifierPart(expression.charCodeAt(index)))index++;\n tokens.push({\n kind: \"invalid\",\n text: expression.slice(start1, index),\n start: start1,\n end: index\n });\n continue;\n }\n tokens.push({\n kind: \"number\",\n text: expression.slice(start1, index),\n start: start1,\n end: index\n });\n continue;\n }\n var nextCharCode = expression.charCodeAt(index + 1);\n if (isDoubleOperator(charCode, nextCharCode)) {\n tokens.push({\n kind: \"operator\",\n text: expression.slice(index, index + 2),\n start: index,\n end: index + 2\n });\n index += 2;\n continue;\n }\n if (isSingleOperator(charCode)) {\n tokens.push({\n kind: \"operator\",\n text: expression[index],\n start: index,\n end: index + 1\n });\n index++;\n continue;\n }\n tokens.push({\n kind: \"invalid\",\n text: expression[index],\n start: index,\n end: index + 1\n });\n index++;\n }\n tokens.push({\n kind: \"end\",\n text: \"\",\n start: index,\n end: index\n });\n return tokens;\n}\nfunction parseIntegerLiteral(literal) {\n var end = literal.length;\n while(end > 0 && isIntegerSuffix(literal.charCodeAt(end - 1)))end--;\n var value;\n if (literal.charCodeAt(0) === 48) {\n var prefix = literal.charCodeAt(1);\n if (prefix === 88 || prefix === 120) value = parseInt(literal.slice(2, end), 16);\n else if (end > 1) value = parseInt(literal.slice(0, end), 8);\n else value = 0;\n } else {\n value = Number(literal.slice(0, end));\n }\n return value <= 0xffffffff ? value | 0 : undefined;\n}\nfunction evaluateBinaryExpression(left, operator, right) {\n switch(operator){\n case \"||\":\n return left !== 0 || right !== 0 ? 1 : 0;\n case \"&&\":\n return left !== 0 && right !== 0 ? 1 : 0;\n case \"|\":\n return left | right;\n case \"^\":\n return left ^ right;\n case \"&\":\n return left & right;\n case \"==\":\n return left === right ? 1 : 0;\n case \"!=\":\n return left !== right ? 1 : 0;\n case \"<\":\n return left < right ? 1 : 0;\n case \"<=\":\n return left <= right ? 1 : 0;\n case \">\":\n return left > right ? 1 : 0;\n case \">=\":\n return left >= right ? 1 : 0;\n case \"<<\":\n {\n if (right < 0 || right > 31) return INVALID_SHIFT_COUNT_ERROR;\n return left << right;\n }\n case \">>\":\n {\n if (right < 0 || right > 31) return INVALID_SHIFT_COUNT_ERROR;\n return left >>> right | 0;\n }\n case \"+\":\n return left + right | 0;\n case \"-\":\n return left - right | 0;\n case \"*\":\n return Math.imul(left, right);\n case \"/\":\n if (right === 0) return DIVISION_BY_ZERO_ERROR;\n if (left === -0x80000000 && right === -1) return 0x7fffffff;\n return Math.trunc(left / right) | 0;\n case \"%\":\n if (right === 0) return MODULO_BY_ZERO_ERROR;\n return left % right | 0;\n default:\n throw new Error(\"Unsupported preprocessor operator '\" + operator + \"'.\");\n }\n}\nfunction validateBinaryRightOperand(operator, right) {\n if ((operator === \"/\" || operator === \"%\") && right === 0) {\n return operator === \"/\" ? DIVISION_BY_ZERO_ERROR : MODULO_BY_ZERO_ERROR;\n }\n if ((operator === \"<<\" || operator === \">>\") && right !== undefined && (right < 0 || right > 31)) {\n return INVALID_SHIFT_COUNT_ERROR;\n }\n}\nfunction evaluateStaticallyKnownPreprocessorCondition(condition, context) {\n switch(condition.t){\n case \"and\":\n {\n var left = evaluateStaticallyKnownPreprocessorCondition(condition.l, context);\n if (typeof left === \"string\") return left;\n if (left === 0) return 0;\n var right = evaluateStaticallyKnownPreprocessorCondition(condition.r, context);\n if (typeof right === \"string\") return left === undefined ? undefined : right;\n if (right === 0) return 0;\n return left === undefined || right === undefined ? undefined : 1;\n }\n case \"or\":\n {\n var left1 = evaluateStaticallyKnownPreprocessorCondition(condition.l, context);\n if (typeof left1 === \"string\") return left1;\n if (left1 !== undefined && left1 !== 0) return 1;\n var right1 = evaluateStaticallyKnownPreprocessorCondition(condition.r, context);\n if (typeof right1 === \"string\") return left1 === undefined ? undefined : right1;\n if (right1 !== undefined && right1 !== 0) return 1;\n return left1 === undefined || right1 === undefined ? undefined : 0;\n }\n case \"binary\":\n {\n var left2 = evaluateStaticallyKnownPreprocessorCondition(condition.l, context);\n var right2 = evaluateStaticallyKnownPreprocessorCondition(condition.r, context);\n if (typeof left2 === \"string\") return left2;\n if (typeof right2 === \"string\") return right2;\n var rightOperandError = validateBinaryRightOperand(condition.op, right2);\n if (rightOperandError) return rightOperandError;\n if (left2 === undefined || right2 === undefined) {\n return context ? evaluateBoundedIdentifierComparison(condition, left2, right2) : undefined;\n }\n var value = evaluateBinaryExpression(left2, condition.op, right2);\n return value;\n }\n case \"not\":\n {\n var value1 = evaluateStaticallyKnownPreprocessorCondition(condition.c, context);\n if (typeof value1 === \"string\") return value1;\n return value1 === undefined ? undefined : value1 === 0 ? 1 : 0;\n }\n case \"unary\":\n {\n var value2 = evaluateStaticallyKnownPreprocessorCondition(condition.c, context);\n if (typeof value2 === \"string\") return value2;\n if (value2 === undefined) return undefined;\n return condition.op === \"+\" ? value2 | 0 : condition.op === \"-\" ? -value2 | 0 : ~value2;\n }\n case \"bool\":\n return condition.v ? 1 : 0;\n case \"num\":\n return condition.v;\n case \"def\":\n {\n var defined = context == null ? void 0 : context.isDefined(condition.m);\n return defined === undefined ? undefined : defined ? 1 : 0;\n }\n case \"ndef\":\n {\n var defined1 = context == null ? void 0 : context.isDefined(condition.m);\n return defined1 === undefined ? undefined : defined1 ? 0 : 1;\n }\n case \"cmp\":\n {\n var resolved = context == null ? void 0 : context.resolveIdentifier(condition.m);\n if (resolved == null ? void 0 : resolved.error) return resolved.error;\n var value3 = resolved == null ? void 0 : resolved.value;\n if (value3 === undefined) return context ? evaluateUnknownSignedComparison(condition.op, condition.v) : undefined;\n var result = evaluateBinaryExpression(value3, condition.op, condition.v);\n return typeof result === \"string\" ? undefined : result;\n }\n case \"id\":\n {\n var resolved1 = context == null ? void 0 : context.resolveIdentifier(condition.m);\n return (resolved1 == null ? void 0 : resolved1.error) ? resolved1.error : resolved1 == null ? void 0 : resolved1.value;\n }\n case \"deferred\":\n return undefined;\n }\n}\nfunction evaluateBoundedIdentifierComparison(condition, left, right) {\n if (!isComparisonOperator(condition.op)) return undefined;\n if (condition.l.t === \"id\" && left === undefined && right !== undefined) {\n return evaluateUnknownSignedComparison(condition.op, right);\n }\n if (condition.r.t === \"id\" && right === undefined && left !== undefined) {\n return evaluateUnknownSignedComparison(reverseComparison(condition.op), left);\n }\n return undefined;\n}\nfunction evaluateUnknownSignedComparison(operator, value) {\n if (!isComparisonOperator(operator) || operator === \"==\" || operator === \"!=\") return undefined;\n var atMinimum = evaluateBinaryExpression(-0x80000000, operator, value);\n var atMaximum = evaluateBinaryExpression(0x7fffffff, operator, value);\n return typeof atMinimum === \"number\" && atMinimum === atMaximum ? atMinimum : undefined;\n}\nfunction isComparisonOperator(operator) {\n return operator === \"==\" || operator === \"!=\" || operator === \"<\" || operator === \"<=\" || operator === \">\" || operator === \">=\";\n}\nfunction reverseComparison(operator) {\n switch(operator){\n case \"<\":\n return \">\";\n case \"<=\":\n return \">=\";\n case \">\":\n return \"<\";\n case \">=\":\n return \"<=\";\n default:\n return operator;\n }\n}\nfunction isWhitespace(charCode) {\n return charCode === 32 || charCode >= 9 && charCode <= 13;\n}\nfunction isIdentifierStart(charCode) {\n return charCode >= 65 && charCode <= 90 || charCode >= 97 && charCode <= 122 || charCode === 95;\n}\nfunction isIdentifierPart(charCode) {\n return isIdentifierStart(charCode) || charCode >= 48 && charCode <= 57;\n}\nfunction isHexDigit(charCode) {\n return charCode >= 48 && charCode <= 57 || charCode >= 65 && charCode <= 70 || charCode >= 97 && charCode <= 102;\n}\nfunction isIntegerSuffix(charCode) {\n return charCode === 85 || charCode === 117;\n}\nfunction isValidIntegerSuffix(suffix) {\n return suffix === \"\" || suffix === \"u\" || suffix === \"U\";\n}\nfunction isDoubleOperator(charCode, nextCharCode) {\n return charCode === 124 && nextCharCode === 124 || charCode === 38 && nextCharCode === 38 || (charCode === 33 || charCode === 61) && nextCharCode === 61 || (charCode === 60 || charCode === 62) && (nextCharCode === 61 || nextCharCode === charCode);\n}\nfunction isSingleOperator(charCode) {\n return charCode === 33 || charCode === 37 || charCode === 38 || charCode === 40 || charCode === 41 || charCode === 42 || charCode === 43 || charCode === 45 || charCode === 47 || charCode === 58 || charCode === 60 || charCode === 62 || charCode === 63 || charCode === 94 || charCode === 124 || charCode === 126;\n}\n\nvar SHADER_ROOT_URL = \"shaders://root/\";\nvar ABSOLUTE_URL_PATTERN = /^[A-Za-z][A-Za-z\\d+.-]*:/;\n/**\n * Converts a registered shader-include key to its canonical lookup form.\n * @param includeKey - Logical project path, project-root path, or absolute URL.\n * @returns Canonical registry key without the virtual shader-root prefix.\n * @throws Error when the key is empty or an absolute URL is malformed.\n */ function normalizeShaderIncludeKey(includeKey) {\n var normalized = includeKey.trim().replace(/\\\\/g, \"/\");\n if (!normalized) throw new Error(\"Shader include key cannot be empty.\");\n if (normalized.startsWith(SHADER_ROOT_URL)) {\n var key = new URL(normalized).href.slice(SHADER_ROOT_URL.length);\n if (!key) throw new Error(\"Shader include key cannot be the virtual shader root.\");\n return key;\n }\n if (ABSOLUTE_URL_PATTERN.test(normalized)) {\n return new URL(normalized).href;\n }\n return new URL(normalized.replace(/^\\/+/, \"\"), SHADER_ROOT_URL).href.slice(SHADER_ROOT_URL.length);\n}\n\nexport { evaluateContextFreePreprocessorCondition, evaluateContextFreePreprocessorExpression, evaluatePartiallyKnownPreprocessorCondition, evaluatePartiallyKnownPreprocessorConditionResult, evaluatePreprocessorExpression, expandPreprocessorExpressionMacros, expandShaderMacros, normalizeShaderIncludeKey, parsePreprocessorExpression, resolvePreprocessorDefinedOperators };\n//# sourceMappingURL=module.js.map\n","import{parsePreprocessorExpression,evaluateContextFreePreprocessorCondition,normalizeShaderIncludeKey,resolvePreprocessorDefinedOperators,expandPreprocessorExpressionMacros,evaluatePartiallyKnownPreprocessorConditionResult}from\"@galacean/engine-design\";import{Logger,RenderStateElementKey,RenderQueueType,CompareFunction,StencilOperation,BlendOperation,BlendFactor,CullMode,ColorWriteMask}from\"@galacean/engine-core\";import{Color}from\"@galacean/engine-math\";var ShaderRange=function(){function ShaderRange(){}var _proto=ShaderRange.prototype;_proto.set=function set(start,end){this.start=start;this.end=end};return ShaderRange}();var ShaderPosition=function(){function ShaderPosition(){}var _proto=ShaderPosition.prototype;_proto.set=function set(index,line,column){this.index=index;this.line=line;this.column=column};return ShaderPosition}();var ETokenType=function(ETokenType){ETokenType[ETokenType[\"ID\"]=1e3]=\"ID\";ETokenType[ETokenType[\"FLOAT_CONSTANT\"]=1001]=\"FLOAT_CONSTANT\";ETokenType[ETokenType[\"INT_CONSTANT\"]=1002]=\"INT_CONSTANT\";ETokenType[ETokenType[\"STRING_CONST\"]=1003]=\"STRING_CONST\";ETokenType[ETokenType[\"LEFT_OP\"]=1004]=\"LEFT_OP\";ETokenType[ETokenType[\"RIGHT_OP\"]=1005]=\"RIGHT_OP\";ETokenType[ETokenType[\"INC_OP\"]=1006]=\"INC_OP\";ETokenType[ETokenType[\"DEC_OP\"]=1007]=\"DEC_OP\";ETokenType[ETokenType[\"LE_OP\"]=1008]=\"LE_OP\";ETokenType[ETokenType[\"GE_OP\"]=1009]=\"GE_OP\";ETokenType[ETokenType[\"EQ_OP\"]=1010]=\"EQ_OP\";ETokenType[ETokenType[\"NE_OP\"]=1011]=\"NE_OP\";ETokenType[ETokenType[\"AND_OP\"]=1012]=\"AND_OP\";ETokenType[ETokenType[\"OR_OP\"]=1013]=\"OR_OP\";ETokenType[ETokenType[\"XOR_OP\"]=1014]=\"XOR_OP\";ETokenType[ETokenType[\"MUL_ASSIGN\"]=1015]=\"MUL_ASSIGN\";ETokenType[ETokenType[\"DIV_ASSIGN\"]=1016]=\"DIV_ASSIGN\";ETokenType[ETokenType[\"ADD_ASSIGN\"]=1017]=\"ADD_ASSIGN\";ETokenType[ETokenType[\"SUB_ASSIGN\"]=1018]=\"SUB_ASSIGN\";ETokenType[ETokenType[\"MOD_ASSIGN\"]=1019]=\"MOD_ASSIGN\";ETokenType[ETokenType[\"LEFT_ASSIGN\"]=1020]=\"LEFT_ASSIGN\";ETokenType[ETokenType[\"RIGHT_ASSIGN\"]=1021]=\"RIGHT_ASSIGN\";ETokenType[ETokenType[\"AND_ASSIGN\"]=1022]=\"AND_ASSIGN\";ETokenType[ETokenType[\"XOR_ASSIGN\"]=1023]=\"XOR_ASSIGN\";ETokenType[ETokenType[\"OR_ASSIGN\"]=1024]=\"OR_ASSIGN\";ETokenType[ETokenType[\"LEFT_PAREN\"]=1025]=\"LEFT_PAREN\";ETokenType[ETokenType[\"RIGHT_PAREN\"]=1026]=\"RIGHT_PAREN\";ETokenType[ETokenType[\"LEFT_BRACKET\"]=1027]=\"LEFT_BRACKET\";ETokenType[ETokenType[\"RIGHT_BRACKET\"]=1028]=\"RIGHT_BRACKET\";ETokenType[ETokenType[\"LEFT_BRACE\"]=1029]=\"LEFT_BRACE\";ETokenType[ETokenType[\"RIGHT_BRACE\"]=1030]=\"RIGHT_BRACE\";ETokenType[ETokenType[\"DOT\"]=1031]=\"DOT\";ETokenType[ETokenType[\"COMMA\"]=1032]=\"COMMA\";ETokenType[ETokenType[\"COLON\"]=1033]=\"COLON\";ETokenType[ETokenType[\"EQUAL\"]=1034]=\"EQUAL\";ETokenType[ETokenType[\"SEMICOLON\"]=1035]=\"SEMICOLON\";ETokenType[ETokenType[\"BANG\"]=1036]=\"BANG\";ETokenType[ETokenType[\"DASH\"]=1037]=\"DASH\";ETokenType[ETokenType[\"TILDE\"]=1038]=\"TILDE\";ETokenType[ETokenType[\"PLUS\"]=1039]=\"PLUS\";ETokenType[ETokenType[\"STAR\"]=1040]=\"STAR\";ETokenType[ETokenType[\"SLASH\"]=1041]=\"SLASH\";ETokenType[ETokenType[\"PERCENT\"]=1042]=\"PERCENT\";ETokenType[ETokenType[\"LEFT_ANGLE\"]=1043]=\"LEFT_ANGLE\";ETokenType[ETokenType[\"RIGHT_ANGLE\"]=1044]=\"RIGHT_ANGLE\";ETokenType[ETokenType[\"VERTICAL_BAR\"]=1045]=\"VERTICAL_BAR\";ETokenType[ETokenType[\"CARET\"]=1046]=\"CARET\";ETokenType[ETokenType[\"AMPERSAND\"]=1047]=\"AMPERSAND\";ETokenType[ETokenType[\"QUESTION\"]=1048]=\"QUESTION\";ETokenType[ETokenType[\"NotWord\"]=1049]=\"NotWord\";ETokenType[ETokenType[\"EPSILON\"]=1998]=\"EPSILON\";ETokenType[ETokenType[\"EOF\"]=1999]=\"EOF\";return ETokenType}({});var TypeAny=3e3;var Keyword=function(Keyword){Keyword[Keyword[\"CONST\"]=0]=\"CONST\";Keyword[Keyword[\"BOOL\"]=1]=\"BOOL\";Keyword[Keyword[\"FLOAT\"]=2]=\"FLOAT\";Keyword[Keyword[\"DOUBLE\"]=3]=\"DOUBLE\";Keyword[Keyword[\"INT\"]=4]=\"INT\";Keyword[Keyword[\"UINT\"]=5]=\"UINT\";Keyword[Keyword[\"BREAK\"]=6]=\"BREAK\";Keyword[Keyword[\"CONTINUE\"]=7]=\"CONTINUE\";Keyword[Keyword[\"DO\"]=8]=\"DO\";Keyword[Keyword[\"ELSE\"]=9]=\"ELSE\";Keyword[Keyword[\"FOR\"]=10]=\"FOR\";Keyword[Keyword[\"IF\"]=11]=\"IF\";Keyword[Keyword[\"WHILE\"]=12]=\"WHILE\";Keyword[Keyword[\"DISCARD\"]=13]=\"DISCARD\";Keyword[Keyword[\"RETURN\"]=14]=\"RETURN\";Keyword[Keyword[\"BVEC2\"]=15]=\"BVEC2\";Keyword[Keyword[\"BVEC3\"]=16]=\"BVEC3\";Keyword[Keyword[\"BVEC4\"]=17]=\"BVEC4\";Keyword[Keyword[\"IVEC2\"]=18]=\"IVEC2\";Keyword[Keyword[\"IVEC3\"]=19]=\"IVEC3\";Keyword[Keyword[\"IVEC4\"]=20]=\"IVEC4\";Keyword[Keyword[\"UVEC2\"]=21]=\"UVEC2\";Keyword[Keyword[\"UVEC3\"]=22]=\"UVEC3\";Keyword[Keyword[\"UVEC4\"]=23]=\"UVEC4\";Keyword[Keyword[\"VEC2\"]=24]=\"VEC2\";Keyword[Keyword[\"VEC3\"]=25]=\"VEC3\";Keyword[Keyword[\"VEC4\"]=26]=\"VEC4\";Keyword[Keyword[\"VEC4_ARRAY\"]=27]=\"VEC4_ARRAY\";Keyword[Keyword[\"MAT2\"]=28]=\"MAT2\";Keyword[Keyword[\"MAT3\"]=29]=\"MAT3\";Keyword[Keyword[\"MAT4\"]=30]=\"MAT4\";Keyword[Keyword[\"MAT2X3\"]=31]=\"MAT2X3\";Keyword[Keyword[\"MAT2X4\"]=32]=\"MAT2X4\";Keyword[Keyword[\"MAT3X2\"]=33]=\"MAT3X2\";Keyword[Keyword[\"MAT3X4\"]=34]=\"MAT3X4\";Keyword[Keyword[\"MAT4X2\"]=35]=\"MAT4X2\";Keyword[Keyword[\"MAT4X3\"]=36]=\"MAT4X3\";Keyword[Keyword[\"IN\"]=37]=\"IN\";Keyword[Keyword[\"OUT\"]=38]=\"OUT\";Keyword[Keyword[\"INOUT\"]=39]=\"INOUT\";Keyword[Keyword[\"CENTROID\"]=40]=\"CENTROID\";Keyword[Keyword[\"SAMPLER2D\"]=41]=\"SAMPLER2D\";Keyword[Keyword[\"SAMPLER3D\"]=42]=\"SAMPLER3D\";Keyword[Keyword[\"SAMPLER_CUBE\"]=43]=\"SAMPLER_CUBE\";Keyword[Keyword[\"SAMPLER2D_SHADOW\"]=44]=\"SAMPLER2D_SHADOW\";Keyword[Keyword[\"SAMPLER_CUBE_SHADOW\"]=45]=\"SAMPLER_CUBE_SHADOW\";Keyword[Keyword[\"SAMPLER2D_ARRAY\"]=46]=\"SAMPLER2D_ARRAY\";Keyword[Keyword[\"SAMPLER2D_ARRAY_SHADOW\"]=47]=\"SAMPLER2D_ARRAY_SHADOW\";Keyword[Keyword[\"I_SAMPLER2D\"]=48]=\"I_SAMPLER2D\";Keyword[Keyword[\"I_SAMPLER3D\"]=49]=\"I_SAMPLER3D\";Keyword[Keyword[\"I_SAMPLER_CUBE\"]=50]=\"I_SAMPLER_CUBE\";Keyword[Keyword[\"I_SAMPLER2D_ARRAY\"]=51]=\"I_SAMPLER2D_ARRAY\";Keyword[Keyword[\"U_SAMPLER2D\"]=52]=\"U_SAMPLER2D\";Keyword[Keyword[\"U_SAMPLER3D\"]=53]=\"U_SAMPLER3D\";Keyword[Keyword[\"U_SAMPLER_CUBE\"]=54]=\"U_SAMPLER_CUBE\";Keyword[Keyword[\"U_SAMPLER2D_ARRAY\"]=55]=\"U_SAMPLER2D_ARRAY\";Keyword[Keyword[\"STRUCT\"]=56]=\"STRUCT\";Keyword[Keyword[\"LAYOUT\"]=57]=\"LAYOUT\";Keyword[Keyword[\"LOCATION\"]=58]=\"LOCATION\";Keyword[Keyword[\"VOID\"]=59]=\"VOID\";Keyword[Keyword[\"PRECISION\"]=60]=\"PRECISION\";Keyword[Keyword[\"PRECISE\"]=61]=\"PRECISE\";Keyword[Keyword[\"HIGHP\"]=62]=\"HIGHP\";Keyword[Keyword[\"MEDIUMP\"]=63]=\"MEDIUMP\";Keyword[Keyword[\"LOWP\"]=64]=\"LOWP\";Keyword[Keyword[\"INVARIANT\"]=65]=\"INVARIANT\";Keyword[Keyword[\"SMOOTH\"]=66]=\"SMOOTH\";Keyword[Keyword[\"FLAT\"]=67]=\"FLAT\";Keyword[Keyword[\"NOPERSPECTIVE\"]=68]=\"NOPERSPECTIVE\";Keyword[Keyword[\"True\"]=69]=\"True\";Keyword[Keyword[\"False\"]=70]=\"False\";Keyword[Keyword[\"LeftBrace\"]=71]=\"LeftBrace\";Keyword[Keyword[\"RightBrace\"]=72]=\"RightBrace\";Keyword[Keyword[\"Equal\"]=73]=\"Equal\";Keyword[Keyword[\"BitwiseOr\"]=74]=\"BitwiseOr\";Keyword[Keyword[\"GSRenderQueueType\"]=75]=\"GSRenderQueueType\";Keyword[Keyword[\"GSBlendState\"]=76]=\"GSBlendState\";Keyword[Keyword[\"GSDepthState\"]=77]=\"GSDepthState\";Keyword[Keyword[\"GSStencilState\"]=78]=\"GSStencilState\";Keyword[Keyword[\"GSRasterState\"]=79]=\"GSRasterState\";Keyword[Keyword[\"GSEditorProperties\"]=80]=\"GSEditorProperties\";Keyword[Keyword[\"GSEditorMacros\"]=81]=\"GSEditorMacros\";Keyword[Keyword[\"GSEditor\"]=82]=\"GSEditor\";Keyword[Keyword[\"GSTags\"]=83]=\"GSTags\";Keyword[Keyword[\"GSVertexShader\"]=84]=\"GSVertexShader\";Keyword[Keyword[\"GSFragmentShader\"]=85]=\"GSFragmentShader\";Keyword[Keyword[\"GSSubShader\"]=86]=\"GSSubShader\";Keyword[Keyword[\"GSPass\"]=87]=\"GSPass\";Keyword[Keyword[\"GSBlendFactor\"]=88]=\"GSBlendFactor\";Keyword[Keyword[\"GSBlendOperation\"]=89]=\"GSBlendOperation\";Keyword[Keyword[\"GSBool\"]=90]=\"GSBool\";Keyword[Keyword[\"GSNumber\"]=91]=\"GSNumber\";Keyword[Keyword[\"GSColor\"]=92]=\"GSColor\";Keyword[Keyword[\"GSCompareFunction\"]=93]=\"GSCompareFunction\";Keyword[Keyword[\"GSStencilOperation\"]=94]=\"GSStencilOperation\";Keyword[Keyword[\"GSCullMode\"]=95]=\"GSCullMode\";Keyword[Keyword[\"GSColorWriteMask\"]=96]=\"GSColorWriteMask\";Keyword[Keyword[\"GSUsePass\"]=97]=\"GSUsePass\";Keyword[Keyword[\"MACRO_IF\"]=98]=\"MACRO_IF\";Keyword[Keyword[\"MACRO_IFDEF\"]=99]=\"MACRO_IFDEF\";Keyword[Keyword[\"MACRO_IFNDEF\"]=100]=\"MACRO_IFNDEF\";Keyword[Keyword[\"MACRO_ELSE\"]=101]=\"MACRO_ELSE\";Keyword[Keyword[\"MACRO_ELIF\"]=102]=\"MACRO_ELIF\";Keyword[Keyword[\"MACRO_ENDIF\"]=103]=\"MACRO_ENDIF\";Keyword[Keyword[\"MACRO_UNDEF\"]=104]=\"MACRO_UNDEF\";Keyword[Keyword[\"MACRO_DEFINE_EXPRESSION\"]=105]=\"MACRO_DEFINE_EXPRESSION\";Keyword[Keyword[\"MACRO_CONDITIONAL_EXPRESSION\"]=106]=\"MACRO_CONDITIONAL_EXPRESSION\";Keyword[Keyword[\"MACRO_CALL\"]=107]=\"MACRO_CALL\";Keyword[Keyword[\"MACRO_DEFINE\"]=108]=\"MACRO_DEFINE\";Keyword[Keyword[\"MACRO_DEFINE_END\"]=109]=\"MACRO_DEFINE_END\";Keyword[Keyword[\"MACRO_DEFINE_PARAMS\"]=110]=\"MACRO_DEFINE_PARAMS\";return Keyword}({});function _instanceof(left,right){if(right!=null&&typeof Symbol!==\"undefined\"&&right[Symbol.hasInstance]){return!!right[Symbol.hasInstance](left)}else return left instanceof right}function _type_of(obj){\"@swc/helpers - typeof\";return obj&&typeof Symbol!==\"undefined\"&&obj.constructor===Symbol?\"symbol\":typeof obj}function _array_like_to_array(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function _unsupported_iterable_to_array(o,minLen){if(!o)return;if(typeof o===\"string\")return _array_like_to_array(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n===\"Object\"&&o.constructor)n=o.constructor.name;if(n===\"Map\"||n===\"Set\")return Array.from(n);if(n===\"Arguments\"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _array_like_to_array(o,minLen)}function _create_for_of_iterator_helper_loose(o,allowArrayLike){var it=typeof Symbol!==\"undefined\"&&o[Symbol.iterator]||o[\"@@iterator\"];if(it)return(it=it.call(o)).next.bind(it);if(Array.isArray(o)||(it=_unsupported_iterable_to_array(o))||allowArrayLike&&o&&typeof o.length===\"number\"){if(it)o=it;var i=0;return function(){if(i>=o.length)return{done:true};return{done:false,value:o[i++]}}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}function sameBranch(a,b){if(a.length!==b.length)return false;for(var i=0,n=a.length;i<n;i++){var left=a[i];var right=b[i];if(left.name!==right.name||left.defined!==right.defined)return false;if(!sameCondition(left.condition,right.condition))return false;var leftPreceding=left.precedingConditions;var rightPreceding=right.precedingConditions;var _leftPreceding_length,_rightPreceding_length;if(((_leftPreceding_length=leftPreceding==null?void 0:leftPreceding.length)!=null?_leftPreceding_length:0)!==((_rightPreceding_length=rightPreceding==null?void 0:rightPreceding.length)!=null?_rightPreceding_length:0))return false;var _leftPreceding_length1;for(var j=0,m=(_leftPreceding_length1=leftPreceding==null?void 0:leftPreceding.length)!=null?_leftPreceding_length1:0;j<m;j++){if(!sameCondition(leftPreceding[j],rightPreceding[j]))return false}}return true}function isLexicalBranchVisibleFrom(declaration,reference){for(var i=0;i<declaration.length;i++){var _declarationConstraint_sourceArm;var declarationConstraint=declaration[i];if(((_declarationConstraint_sourceArm=declarationConstraint.sourceArm)==null?void 0:_declarationConstraint_sourceArm.value)===true)continue;var group=declarationConstraint.conditionalGroup;if(group===undefined)return false;var matched=false;for(var j=0;j<reference.length;j++){var referenceConstraint=reference[j];if(referenceConstraint.conditionalGroup!==group)continue;if(referenceConstraint.conditionalArm!==declarationConstraint.conditionalArm)return false;matched=true;break}if(!matched)return false}return true}function getLexicalBranchCoverage(candidates,reference){return coverLexicalArms(candidates,reference,{remaining:256})?\"covered\":\"unknown\"}function coverLexicalArms(candidates,reference,budget){var _loop=function(arm){var _completeArm_conditionalReachableArms;if(referenceArm!==undefined&&arm!==referenceArm)return\"continue\";if(((_completeArm_conditionalReachableArms=completeArm.conditionalReachableArms)==null?void 0:_completeArm_conditionalReachableArms[arm])===false)return\"continue\";var armCandidates=compatible.filter(function(candidate){return candidate.every(function(constraint){return constraint.conditionalGroup!==group||constraint.conditionalArm===arm})}).map(function(candidate){return candidate.filter(function(constraint){return constraint.conditionalGroup!==group})});if(!coverLexicalArms(armCandidates,remainingReference,budget))return{v:false}};var _reference_find;if(candidates.some(function(candidate){return isLexicalBranchVisibleFrom(candidate,reference)}))return true;if(--budget.remaining<0)return false;var compatible=candidates.filter(function(candidate){return getLexicalDeclarationCoexistence(candidate,reference)!==\"exclusive\"});var completeArm;for(var _iterator=_create_for_of_iterator_helper_loose(compatible),_step;!(_step=_iterator()).done;){var candidate=_step.value;completeArm=candidate.find(function(arm){return arm.conditionalComplete&&arm.conditionalGroup!==undefined&&arm.conditionalArmCount});if(completeArm)break}if(!completeArm)return false;var group=completeArm.conditionalGroup;var referenceArm=(_reference_find=reference.find(function(arm){return arm.conditionalGroup===group}))==null?void 0:_reference_find.conditionalArm;var remainingReference=reference.filter(function(arm){return arm.conditionalGroup!==group});for(var arm=0;arm<completeArm.conditionalArmCount;arm++){var _ret=_loop(arm);if(_type_of(_ret)===\"object\")return _ret.v}return true}function getLexicalDeclarationCoexistence(earlier,later){for(var _iterator=_create_for_of_iterator_helper_loose(earlier),_step;!(_step=_iterator()).done;){var left=_step.value;for(var _iterator1=_create_for_of_iterator_helper_loose(later),_step1;!(_step1=_iterator1()).done;){var right=_step1.value;if(left.conditionalGroup!==undefined&&left.conditionalGroup===right.conditionalGroup&&left.conditionalArm!==right.conditionalArm){return\"exclusive\"}}}for(var _iterator2=_create_for_of_iterator_helper_loose(earlier),_step2;!(_step2=_iterator2()).done;){var constraint=_step2.value;if(constraint.condition!==undefined)return\"unknown\"}for(var _iterator3=_create_for_of_iterator_helper_loose(later),_step3;!(_step3=_iterator3()).done;){var constraint1=_step3.value;if(constraint1.condition!==undefined)return\"unknown\"}return\"coexist\"}function sameCondition(left,right){if(!left||!right)return left===right;if(left.kind!==right.kind)return false;if(left.kind===\"constant\")return right.kind===\"constant\"&&left.value===right.value;if(right.kind===\"constant\")return false;if(left.kind===\"expression\")return right.kind===\"expression\"&&sameExpression(left,right)&&left.negated===right.negated;if(right.kind===\"expression\")return false;if(left.name!==right.name||left.version!==right.version)return false;if(left.kind===\"defined\"&&right.kind===\"defined\")return left.defined===right.defined;return left.kind===\"comparison\"&&right.kind===\"comparison\"&&left.operator===right.operator&&left.value===right.value}function sameExpression(left,right){if(left.expression!==right.expression||left.opaque!==right.opaque||left.names.length!==right.names.length){return false}for(var i=0,n=left.names.length;i<n;i++){if(left.names[i]!==right.names[i]||left.versions[i]!==right.versions[i])return false}return true}var EMPTY_BRANCH=Object.freeze([]);var BaseToken=function(){function BaseToken(_objectPool){this._objectPool=_objectPool;this.branch=EMPTY_BRANCH;this.inMacroDefinition=false}var _proto=BaseToken.prototype;_proto.set=function set(type,lexeme,arg){this.type=type;this.lexeme=lexeme;this.branch=EMPTY_BRANCH;this.inMacroDefinition=false;if(_instanceof(arg,ShaderRange)){this.location=arg}else{var end=this._objectPool?this._objectPool.createPosition(arg.index+lexeme.length,arg.line,arg.column+lexeme.length):createPosition(arg.index+lexeme.length,arg.line,arg.column+lexeme.length);this.location=this._objectPool?this._objectPool.createRange(arg,end):createRange(arg,end)}};return BaseToken}();function createPosition(index,line,column){var position=new ShaderPosition;position.set(index,line,column);return position}function createRange(start,end){var range=new ShaderRange;range.set(start,end);return range}var EOF=new BaseToken;var EOF_POSITION=createPosition(0,0,0);EOF.set(ETokenType.EOF,\"/EOF\",createRange(EOF_POSITION,EOF_POSITION));function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if(\"value\"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _create_class(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}function _set_prototype_of(o,p){_set_prototype_of=Object.setPrototypeOf||function setPrototypeOf(o,p){o.__proto__=p;return o};return _set_prototype_of(o,p)}function _inherits(subClass,superClass){if(typeof superClass!==\"function\"&&superClass!==null){throw new TypeError(\"Super expression must either be null or a function\")}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_set_prototype_of(subClass,superClass)}function _is_native_reflect_construct(){try{var result=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(_){}return(_is_native_reflect_construct=function(){return!!result})()}function _construct(Parent,args,Class){if(_is_native_reflect_construct())_construct=Reflect.construct;else{_construct=function construct(Parent,args,Class){var a=[null];a.push.apply(a,args);var Constructor=Function.bind.apply(Parent,a);var instance=new Constructor;if(Class)_set_prototype_of(instance,Class.prototype);return instance}}return _construct.apply(null,arguments)}function _get_prototype_of(o){_get_prototype_of=Object.setPrototypeOf?Object.getPrototypeOf:function getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)};return _get_prototype_of(o)}function _is_native_function(fn){return Function.toString.call(fn).indexOf(\"[native code]\")!==-1}function _wrap_native_super(Class){var _cache=typeof Map===\"function\"?new Map:undefined;_wrap_native_super=function(Class){if(Class===null||!_is_native_function(Class))return Class;if(typeof Class!==\"function\")throw new TypeError(\"Super expression must either be null or a function\");if(typeof _cache!==\"undefined\"){if(_cache.has(Class))return _cache.get(Class);_cache.set(Class,Wrapper)}function Wrapper(){return _construct(Class,arguments,_get_prototype_of(this).constructor)}Wrapper.prototype=Object.create(Class.prototype,{constructor:{value:Wrapper,enumerable:false,writable:true,configurable:true}});return _set_prototype_of(Wrapper,Class)};return _wrap_native_super(Class)}function formatDiagnosticSource(source,range,header,contextLines){if(contextLines===void 0)contextLines=5;if(!source)return header;var lines=source.split(\"\\n\");var start=range.start,end=range.end;var from=Math.max(0,start.line-contextLines);var to=Math.min(lines.length-1,end.line+contextLines);var gutterWidth=String(to+1).length;var gutterPad=\" \".repeat(gutterWidth);var out=header+\"\\n\";for(var i=from;i<=to;i++){out+=String(i+1).padStart(gutterWidth)+\" | \"+lines[i]+\"\\n\";if(start.line<=i&&i<=end.line){var cs=i===start.line?start.column:0;var ce=i===end.line?end.column:lines[i].length;out+=gutterPad+\" | \"+\" \".repeat(cs)+\"^\".repeat(Math.max(ce-cs,1))+\"\\n\"}}return out}var GSError=function(Error1){_inherits(GSError,Error1);function GSError(name,message,location,source,file,code){var _this;_this=Error1.call(this,message)||this,_this.location=location,_this.source=source,_this.file=file,_this.code=code;_this.name=name;return _this}var _proto=GSError.prototype;_proto.toString=function toString(){var location=this.location;var range=\"start\"in location?location:{start:location,end:location};return formatDiagnosticSource(this.source||undefined,range,this.name+\": \"+this.message)};return GSError}(_wrap_native_super(Error));var GSErrorName=function(GSErrorName){GSErrorName[\"PreprocessorError\"]=\"PreprocessorError\";GSErrorName[\"CompilationError\"]=\"CompilationError\";GSErrorName[\"ScannerError\"]=\"ScannerError\";GSErrorName[\"CompilationWarn\"]=\"CompilationWarning\";return GSErrorName}({});var ShaderCompilerUtils=function(){function ShaderCompilerUtils(){}ShaderCompilerUtils.createPosition=function createPosition(index,line,column){if(line===void 0)line=0;if(column===void 0)column=0;var position=new ShaderPosition;position.set(index,line,column);return position};ShaderCompilerUtils.createRange=function createRange(start,end){var range=new ShaderRange;range.set(start,end);return range};ShaderCompilerUtils.createGSError=function createGSError(message,errorName,source,location,code,file){return new GSError(errorName,message,location,source,file,code)};return ShaderCompilerUtils}();var BaseLexer=function(){function BaseLexer(source,_objectPool){this._objectPool=_objectPool;this._currentIndex=0;this._column=0;this._line=0;this.setSource(source!=null?source:\"\")}var _proto=BaseLexer.prototype;_proto.setSource=function setSource(source){this._source=source;this._currentIndex=0;this._line=this._column=0};_proto.getShaderPosition=function getShaderPosition(backOffset){if(backOffset===void 0)backOffset=0;var index=this._currentIndex-backOffset;return this._createPosition(index,this._line,this._column-backOffset)};_proto._createPosition=function _createPosition(index,line,column){return this._objectPool?this._objectPool.createPosition(index,line,column):ShaderCompilerUtils.createPosition(index,line,column)};_proto._createToken=function _createToken(){return this._objectPool?this._objectPool.createToken():new BaseToken};_proto._createEOFToken=function _createEOFToken(){var position=this.getShaderPosition();var token=this._createToken();token.set(ETokenType.EOF,\"/EOF\",this._createRange(position,position));return token};_proto._createRange=function _createRange(start,end){return this._objectPool?this._objectPool.createRange(start,end):ShaderCompilerUtils.createRange(start,end)};_proto.isEnd=function isEnd(){return this._currentIndex>=this._source.length};_proto.getCurChar=function getCurChar(){return this._source[this._currentIndex]};_proto.getCurCharCode=function getCurCharCode(){return this._source.charCodeAt(this._currentIndex)};_proto.advance=function advance(count){var source=this._source;var startIndex=this._currentIndex;for(var i=0;i<count;i++){if(source.charCodeAt(startIndex+i)===10){this._line+=1;this._column=0}else{this._column+=1}}this._currentIndex+=count};_proto.skipSpace=function skipSpace(includeLineBreak){while(BaseLexer.isWhiteSpaceChar(this.getCurCharCode(),includeLineBreak)){this.advance(1)}};_proto.skipCommentsAndSpace=function skipCommentsAndSpace(){var source=this._source;var length=source.length;var index=this._currentIndex;while(index<length){while(index<length&&BaseLexer.isWhiteSpaceChar(source.charCodeAt(index),true)){index++}var afterBlock=BaseLexer._skipBlockComment(source,index,length);if(afterBlock!==index){index=afterBlock;continue}var afterLine=BaseLexer._skipLineComment(source,index,length);if(afterLine!==index){index=afterLine;continue}break}this.advance(index-this._currentIndex)};_proto.peek=function peek(to){var offset=this._currentIndex;return this._source.substring(offset,offset+to)};_proto.scanLexeme=function scanLexeme(lexeme){this.skipCommentsAndSpace();var length=lexeme.length;var peek=this.peek(length);if(peek!==lexeme){this.throwError(this.getShaderPosition(0),'Expect lexeme \"'+lexeme+'\", but got \"'+peek+'\"')}this.advance(length)};_proto.scanTwoExpectedLexemes=function scanTwoExpectedLexemes(lexeme1,lexeme2){this.skipCommentsAndSpace();if(this.peek(lexeme1.length)===lexeme1){this.advance(lexeme1.length);return lexeme1}if(this.peek(lexeme2.length)===lexeme2){this.advance(lexeme2.length);return lexeme2}return null};_proto.throwError=function throwError(pos){for(var _len=arguments.length,msgs=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++){msgs[_key-1]=arguments[_key]}var error=ShaderCompilerUtils.createGSError(msgs.join(\" \"),GSErrorName.ScannerError,this._source,pos);throw error};_proto.scanPairedChar=function scanPairedChar(left,right,balanced,skipLeading){if(!skipLeading){this.scanLexeme(left)}var start=this._currentIndex;var source=this._source;var sourceLength=source.length;var currentIndex=this._currentIndex;if(balanced){var level=1;while(currentIndex<sourceLength){var currentChar=source[currentIndex];if(currentChar===right&&--level===0){break}else if(currentChar===left){level++}currentIndex++}}else{while(currentIndex<sourceLength){if(source[currentIndex]===right){break}currentIndex++}}if(currentIndex===sourceLength){this.throwError(this.getShaderPosition(),'Expect closing character \"'+right+'\" before end of source.')}this.advance(currentIndex+1-this._currentIndex);return source.substring(start,currentIndex)};BaseLexer.isDigit=function isDigit(charCode){return charCode>=48&&charCode<=57};BaseLexer.isHexDigit=function isHexDigit(charCode){return charCode>=48&&charCode<=57||charCode>=65&&charCode<=70||charCode>=97&&charCode<=102};BaseLexer.isAlpha=function isAlpha(charCode){return charCode===95||charCode>=65&&charCode<=90||charCode>=97&&charCode<=122};BaseLexer.isAlnum=function isAlnum(charCode){return BaseLexer.isAlpha(charCode)||BaseLexer.isDigit(charCode)};BaseLexer.isPreprocessorStartChar=function isPreprocessorStartChar(charCode){return charCode===35};BaseLexer._skipBlockComment=function _skipBlockComment(src,i,len){if(src.charCodeAt(i)!==47||i+1>=len||src.charCodeAt(i+1)!==42)return i;var j=i+2;while(j+1<len){if(src.charCodeAt(j)===42&&src.charCodeAt(j+1)===47)return j+2;j++}return len};BaseLexer._skipLineComment=function _skipLineComment(src,i,len){if(src.charCodeAt(i)!==47||i+1>=len||src.charCodeAt(i+1)!==47)return i;var j=i+2;while(j<len){var c=src.charCodeAt(j);if(c===10||c===13)break;j++}return j};BaseLexer.isWhiteSpaceChar=function isWhiteSpaceChar(charCode,includeBreak){if(charCode===32||charCode===9){return true}return includeBreak&&(charCode===10||charCode===13)};_create_class(BaseLexer,[{key:\"currentIndex\",get:function get(){return this._currentIndex}},{key:\"source\",get:function get(){return this._source}},{key:\"line\",get:function get(){return this._line}},{key:\"column\",get:function get(){return this._column}}]);return BaseLexer}();function parsePreprocessorCondition(expression){var condition=tryParsePreprocessorCondition(expression);if(!condition)throw new Error(\"Unsupported or malformed preprocessor condition '\"+expression+\"'.\");return condition}function tryParsePreprocessorCondition(expression,parsedExpression){if(parsedExpression===void 0)parsedExpression=parsePreprocessorExpression(expression);var result=parsedExpression;if(!result.ok||result.evaluationError)return undefined;var constantValue=evaluateContextFreePreprocessorCondition(result.condition);if(constantValue!==undefined){return result.hasExpandableIdentifier?undefined:{t:\"bool\",v:constantValue!==0}}return toPreprocessorCondition(result.condition)}function toPreprocessorCondition(condition){switch(condition.t){case\"def\":return condition;case\"and\":{var left=toPreprocessorCondition(condition.l);var right=toPreprocessorCondition(condition.r);return left&&right?{t:\"and\",l:left,r:right}:undefined}case\"or\":{var left1=toPreprocessorCondition(condition.l);var right1=toPreprocessorCondition(condition.r);return left1&&right1?{t:\"or\",l:left1,r:right1}:undefined}case\"not\":{var child=toPreprocessorCondition(condition.c);return child?{t:\"not\",c:child}:undefined}case\"id\":return{t:\"cmp\",m:condition.m,op:\"!=\",v:0};case\"binary\":return toComparisonCondition(condition);case\"num\":return{t:\"bool\",v:condition.v!==0};case\"bool\":case\"cmp\":return condition;case\"ndef\":return{t:\"not\",c:{t:\"def\",m:condition.m}};case\"unary\":return undefined;case\"deferred\":return undefined}}function toComparisonCondition(condition){if(!isComparisonOperator(condition.op))return undefined;var right=evaluateContextFreePreprocessorCondition(condition.r);if(condition.l.t===\"id\"&&right!==undefined){return{t:\"cmp\",m:condition.l.m,op:condition.op,v:right}}var left=evaluateContextFreePreprocessorCondition(condition.l);if(condition.r.t===\"id\"&&left!==undefined){return{t:\"cmp\",m:condition.r.m,op:reverseComparison(condition.op),v:left}}return evaluateStaticCondition(condition)}function isComparisonOperator(operator){return operator===\"==\"||operator===\"!=\"||operator===\">\"||operator===\">=\"||operator===\"<\"||operator===\"<=\"}function reverseComparison(operator){switch(operator){case\"<\":return\">\";case\"<=\":return\">=\";case\">\":return\"<\";case\">=\":return\"<=\";default:return operator}}function evaluateStaticCondition(condition){var value=evaluateContextFreePreprocessorCondition(condition);return value===undefined?undefined:{t:\"bool\",v:value!==0}}function _extends(){_extends=Object.assign||function assign(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source)if(Object.prototype.hasOwnProperty.call(source,key))target[key]=source[key]}return target};return _extends.apply(this,arguments)}var INT_MIN=-0x80000000;var INT_MAX=0x7fffffff;var INTEGER_RANGE=[INT_MIN,INT_MAX];var BOOLEAN_RANGE=[0,1];function normalizePreprocessorCondition(condition){return normalize(condition,new WeakMap)}function getPreprocessorConditionRange(condition,cache){if(cache===void 0)cache=new WeakMap;return getRange(condition,cache)}function getRange(condition,cache){if(cache.has(condition))return cache.get(condition);var result=computeRange(condition,cache);cache.set(condition,result);return result}function computeRange(condition,cache){switch(condition.t){case\"num\":return[condition.v,condition.v];case\"bool\":return[Number(condition.v),Number(condition.v)];case\"def\":case\"ndef\":return BOOLEAN_RANGE;case\"not\":{var child=getRange(condition.c,cache);return child&&(excludesZero(child)?[0,0]:child[0]===child[1]?[1,1]:BOOLEAN_RANGE)}case\"and\":case\"or\":{var left=getRange(condition.l,cache);if(!left)return;var conjunction=condition.t===\"and\";if(conjunction&&left[0]===0&&left[1]===0)return[0,0];if(!conjunction&&excludesZero(left))return[1,1];var right=getRange(condition.r,cache);if(!right)return;if(conjunction&&right[0]===0&&right[1]===0)return[0,0];if(!conjunction&&excludesZero(right))return[1,1];if(excludesZero(left)&&excludesZero(right))return[1,1];if(left[0]===0&&left[1]===0&&right[0]===0&&right[1]===0)return[0,0];return BOOLEAN_RANGE}case\"unary\":{var child1=getRange(condition.c,cache);if(!child1)return;if(child1[0]===child1[1])return constantRange(_extends({},condition,{c:numeric(child1[0])}));if(condition.op===\"+\")return child1;if(condition.op===\"~\")return[~child1[1],~child1[0]];return child1[0]===INT_MIN?INTEGER_RANGE:[-child1[1],-child1[0]]}case\"binary\":{var left1=getRange(condition.l,cache);var right1=getRange(condition.r,cache);if(!left1||!right1)return;if(left1[0]===left1[1]&&right1[0]===right1[1]){return constantRange(_extends({},condition,{l:numeric(left1[0]),r:numeric(right1[0])}))}if(isComparison(condition.op))return BOOLEAN_RANGE;switch(condition.op){case\"+\":return boundedRange(left1[0]+right1[0],left1[1]+right1[1]);case\"-\":return boundedRange(left1[0]-right1[1],left1[1]-right1[0]);case\"*\":{var _Math,_Math1;var products=[left1[0]*right1[0],left1[0]*right1[1],left1[1]*right1[0],left1[1]*right1[1]];return boundedRange((_Math=Math).min.apply(_Math,[].concat(products)),(_Math1=Math).max.apply(_Math1,[].concat(products)))}case\"/\":case\"%\":return excludesZero(right1)?INTEGER_RANGE:undefined;case\"<<\":case\">>\":return right1[0]>=0&&right1[1]<=31?INTEGER_RANGE:undefined;default:return left1[0]>=0&&left1[1]<=1&&right1[0]>=0&&right1[1]<=1?BOOLEAN_RANGE:INTEGER_RANGE}}default:return}}function normalize(condition,cache){var range=getRange(condition,cache);if(!range)return condition;if(excludesZero(range))return boolean(true);if(range[0]===0&&range[1]===0)return boolean(false);switch(condition.t){case\"not\":return negate(normalize(condition.c,cache));case\"and\":case\"or\":return combine(condition.t,normalize(condition.l,cache),normalize(condition.r,cache));case\"binary\":if(isComparison(condition.op)){var left=getRange(condition.l,cache);var right=getRange(condition.r,cache);if(right[0]===right[1])return compare(condition.l,condition.op,right[0],cache);if(left[0]===left[1])return compare(condition.r,reverse(condition.op),left[0],cache)}break}var _arithmeticTruth;return(_arithmeticTruth=arithmeticTruth(condition,cache))!=null?_arithmeticTruth:condition}function arithmeticTruth(condition,cache){if(condition.t===\"def\"||condition.t===\"ndef\")return condition;if(condition.t===\"unary\"&&condition.op!==\"~\")return normalize(condition.c,cache);if(condition.t!==\"binary\")return;var left=getRange(condition.l,cache);var right=getRange(condition.r,cache);if(condition.op===\"+\"&&unwrappedSum(left,right)){if(left[0]>=0&&right[0]>=0||left[1]<=0&&right[1]<=0){return combine(\"or\",normalize(condition.l,cache),normalize(condition.r,cache))}}if(condition.op===\"|\"){return combine(\"or\",normalize(condition.l,cache),normalize(condition.r,cache))}if(condition.op===\"&\"&&left[0]>=0&&left[1]<=1&&right[0]>=0&&right[1]<=1){return combine(\"and\",normalize(condition.l,cache),normalize(condition.r,cache))}}function compare(expression,operator,value,cache){switch(operator){case\"<\":return lessThan(expression,value,cache);case\"<=\":return lessThan(expression,value+1,cache);case\">\":return negate(lessThan(expression,value+1,cache));case\">=\":return negate(lessThan(expression,value,cache));case\"==\":return combine(\"and\",negate(lessThan(expression,value,cache)),lessThan(expression,value+1,cache));case\"!=\":return combine(\"or\",lessThan(expression,value,cache),negate(lessThan(expression,value+1,cache)))}}function lessThan(expression,value,cache){var range=getRange(expression,cache);if(range[1]<value)return boolean(true);if(range[0]>=value)return boolean(false);if(range[0]===0&&value===1||range[1]===0&&value===0){var truth=arithmeticTruth(expression,cache);if(truth)return range[0]===0?negate(truth):truth}if(value===range[0]+1||value===range[1]){var maximum=value===range[1];var endpoint=sumEndpoint(expression,maximum,cache);if(endpoint)return maximum?negate(endpoint):endpoint}return{t:\"binary\",op:\"<\",l:expression,r:numeric(value)}}function sumEndpoint(expression,maximum,cache){if(expression.t!==\"binary\"||expression.op!==\"+\")return;var left=getRange(expression.l,cache);var right=getRange(expression.r,cache);if(!unwrappedSum(left,right))return;var bound=maximum?1:0;return combine(\"and\",compare(expression.l,\"==\",left[bound],cache),compare(expression.r,\"==\",right[bound],cache))}function combine(operator,left,right){if(left.t===\"bool\")return left.v===(operator===\"and\")?right:left;if(right.t===\"bool\")return right.v===(operator===\"and\")?left:right;return{t:operator,l:left,r:right}}function negate(condition){switch(condition.t){case\"bool\":return boolean(!condition.v);case\"def\":return{t:\"ndef\",m:condition.m};case\"ndef\":return{t:\"def\",m:condition.m};case\"not\":return condition.c;case\"and\":case\"or\":return combine(condition.t===\"and\"?\"or\":\"and\",negate(condition.l),negate(condition.r));default:return{t:\"not\",c:condition}}}function unwrappedSum(left,right){return left[0]+right[0]>=INT_MIN&&left[1]+right[1]<=INT_MAX}function boundedRange(minimum,maximum){return minimum>=INT_MIN&&maximum<=INT_MAX?[minimum,maximum]:INTEGER_RANGE}function constantRange(condition){var value=evaluateContextFreePreprocessorCondition(condition);return value===undefined?undefined:[value,value]}function excludesZero(range){return range[0]>0||range[1]<0}function numeric(value){return{t:\"num\",v:value}}function boolean(value){return{t:\"bool\",v:value}}function isComparison(operator){return[\"<\",\"<=\",\">\",\">=\",\"==\",\"!=\"].includes(operator)}function reverse(operator){switch(operator){case\"<\":return\">\";case\"<=\":return\">=\";case\">\":return\"<\";case\">=\":return\"<=\";default:return operator}}var MAX_DIAGRAM_WORK=16384;var EXHAUSTED=Symbol(\"condition diagram budget\");function provePreprocessorConditionCoverage(declarations,reference){var diagram=new ConditionDiagram;try{var source=diagram.predicates(reference);var target=diagram.constant(0);for(var _iterator=_create_for_of_iterator_helper_loose(declarations),_step;!(_step=_iterator()).done;){var declaration=_step.value;target=diagram.apply(\"or\",target,diagram.predicates(declaration))}return diagram.coverage(diagram.apply(\"or\",diagram.apply(\"not\",source),target))}catch(error){if(error!==EXHAUSTED)throw error;return undefined}}var ConditionDiagram=function(){function ConditionDiagram(){this._nodes=[];this._constants=new Map;this._variables=new Map;this._opaqueVariables=new Set;this._branches=new Map;this._operations=new Map;this._expressions=new Map;this._remaining=MAX_DIAGRAM_WORK}var _proto=ConditionDiagram.prototype;_proto.coverage=function coverage(root){var pending=[{id:root,opaque:false}];var visited=[new Set,new Set];var unknown=false;while(pending.length){var _pending_pop=pending.pop(),id=_pending_pop.id,opaque=_pending_pop.opaque;var seen=visited[Number(opaque)];if(seen.has(id))continue;seen.add(id);this._spend();var node=this._nodes[id];if(node.variable!==Infinity){var uncertain=opaque||this._opaqueVariables.has(node.variable);pending.push({id:node.low,opaque:uncertain},{id:node.high,opaque:uncertain})}else if(node.value===0){if(!opaque)return false;unknown=true}else if(node.value===undefined)unknown=true}return unknown?undefined:true};_proto.constant=function constant(value){var id=this._constants.get(value);if(id===undefined){this._spend();id=this._nodes.length;this._nodes.push({variable:Infinity,low:0,high:0,value:value});this._constants.set(value,id)}return id};_proto.predicates=function predicates(predicates){if(typeof predicates===\"boolean\")return this.constant(Number(predicates));var value=this.constant(1);for(var _iterator=_create_for_of_iterator_helper_loose(predicates),_step;!(_step=_iterator()).done;){var _step_value=_step.value,condition=_step_value.condition,negated=_step_value.negated;var expression=condition.kind===\"opaque\"?this._variable(\"opaque:\"+condition.identity,true):this._expression(condition.expression,condition);value=this.apply(\"and\",value,this.apply(negated?\"not\":\"truth\",expression))}return value};_proto.apply=function apply(operator,left,right){if(right===void 0)right=left;var key=operator+\":\"+left+\":\"+right;var cached=this._operations.get(key);if(cached!==undefined)return cached;this._spend();var a=this._nodes[left];var b=this._nodes[right];var result;if(a.variable===Infinity&&a.value===undefined){result=left}else if(a.variable===Infinity&&operator===\"and\"&&a.value===0){result=this.constant(0)}else if(a.variable===Infinity&&operator===\"or\"&&a.value!==0){result=this.constant(1)}else if(a.variable===Infinity&&b.variable===Infinity){result=this._evaluate(operator,a.value,b.value)}else{var variable=Math.min(a.variable,b.variable);result=this._branch(variable,this.apply(operator,a.variable===variable?a.low:left,b.variable===variable?b.low:right),this.apply(operator,a.variable===variable?a.high:left,b.variable===variable?b.high:right))}this._operations.set(key,result);return result};_proto._expression=function _expression(expression,owner){var cache=this._expressions.get(owner);if(!cache)this._expressions.set(owner,cache=new Map);var cached=cache.get(expression);if(cached!==undefined)return cached;var result;switch(expression.t){case\"bool\":result=this.constant(Number(expression.v));break;case\"num\":result=this.constant(expression.v);break;case\"def\":case\"ndef\":result=this._variable(\"defined:\"+expression.m+\":\"+owner.versions[expression.m]);if(expression.t===\"ndef\")result=this.apply(\"not\",result);break;case\"not\":result=this.apply(\"not\",this._expression(expression.c,owner));break;case\"unary\":result=this.apply(expression.op===\"+\"?\"positive\":expression.op===\"-\"?\"negative\":\"complement\",this._expression(expression.c,owner));break;case\"and\":case\"or\":case\"binary\":{var operator=expression.t===\"binary\"?expression.op:expression.t;result=[\"and\",\"or\",\"+\",\"*\",\"&\",\"|\",\"^\"].includes(operator)?this._associativeExpression(expression,owner,operator):this.apply(operator,this._expression(expression.l,owner),this._expression(expression.r,owner));break}default:result=this.constant();break}cache.set(expression,result);return result};_proto._associativeExpression=function _associativeExpression(expression,owner,operator){var pending=[expression];var operands=[];while(pending.length){var node=pending.pop();if(node.t===\"binary\"&&node.op===operator||(node.t===\"and\"||node.t===\"or\")&&node.t===operator){pending.push(node.r,node.l)}else{operands.push(this._expression(node,owner))}}while(operands.length>1){var count=0;for(var index=0;index<operands.length;index+=2){operands[count++]=index+1<operands.length?this.apply(operator,operands[index],operands[index+1]):operands[index]}operands.length=count}return operands[0]};_proto._variable=function _variable(identity,opaque){if(opaque===void 0)opaque=false;var variable=this._variables.get(identity);if(variable===undefined)this._variables.set(identity,variable=this._variables.size);if(opaque)this._opaqueVariables.add(variable);return this._branch(variable,this.constant(0),this.constant(1))};_proto._branch=function _branch(variable,low,high){if(low===high)return low;var key=variable+\":\"+low+\":\"+high;var id=this._branches.get(key);if(id===undefined){this._spend();id=this._nodes.length;this._nodes.push({variable:variable,low:low,high:high});this._branches.set(key,id)}return id};_proto._evaluate=function _evaluate(operator,left,right){if(operator===\"truth\")return this.constant(Number(left!==0));if(operator===\"not\")return this.constant(Number(left===0));var l={t:\"num\",v:left};var expression;if(operator===\"positive\"||operator===\"negative\"||operator===\"complement\"){expression={t:\"unary\",op:operator===\"positive\"?\"+\":operator===\"negative\"?\"-\":\"~\",c:l}}else{if(right===undefined)return this.constant();var r={t:\"num\",v:right};expression=operator===\"and\"||operator===\"or\"?{t:operator,l:l,r:r}:{t:\"binary\",op:operator,l:l,r:r}}var value;try{value=evaluateContextFreePreprocessorCondition(expression)}catch(e){value=undefined}return this.constant(value)};_proto._spend=function _spend(){if(--this._remaining<0)throw EXHAUSTED};return ConditionDiagram}();function capturePreprocessorCondition(expression,versions){var dependencies=Object.create(null);var pending=[expression];while(pending.length){var condition=pending.pop();switch(condition.t){case\"def\":case\"ndef\":var _versions_condition_m;dependencies[condition.m]=(_versions_condition_m=versions[condition.m])!=null?_versions_condition_m:0;break;case\"not\":case\"unary\":pending.push(condition.c);break;case\"and\":case\"or\":case\"binary\":pending.push(condition.l,condition.r);break}}return{kind:\"expression\",expression:expression,versions:dependencies}}function canInheritanceBranchesCover(declarations,reference){return proveInheritanceBranchesCover(declarations,reference)===true}function proveInheritanceBranchesCover(declarations,reference){var facts=getPredicates(reference);var alternatives=declarations.map(getPredicates);if(alternatives.includes(true)||facts===false)return true;if(facts===undefined)return undefined;var required=alternatives.filter(function(predicates){return predicates!==undefined});var normalized=new Map;function normalize(predicates){if(typeof predicates===\"boolean\")return predicates;return predicates.map(function(param){var condition=param.condition,negated=param.negated;var canonical=normalized.get(condition);if(!canonical){canonical=condition.kind===\"opaque\"?condition:_extends({},condition,{expression:normalizePreprocessorCondition(condition.expression)});normalized.set(condition,canonical)}return{condition:canonical,negated:negated}})}required=required.map(normalize);facts=normalize(facts);var rangeCache=new WeakMap;if(required.some(function(alternative){return proveCanonicalCoverage(alternative,facts,rangeCache)}))return true;var proof=provePreprocessorConditionCoverage(required,facts);return proof===false&&alternatives.includes(undefined)?undefined:proof}function getPredicates(branch){var predicates=[];for(var _iterator=_create_for_of_iterator_helper_loose(branch),_step;!(_step=_iterator()).done;){var sourceArm=_step.value.sourceArm;var _predicates;if((sourceArm==null?void 0:sourceArm.value)===true)continue;if((sourceArm==null?void 0:sourceArm.value)===false)return false;if(!(sourceArm==null?void 0:sourceArm.predicates))return;(_predicates=predicates).push.apply(_predicates,[].concat(sourceArm.predicates))}return predicates.length?predicates:true}function proveCanonicalCoverage(required,facts,rangeCache){var known=new Set;var ranges=new Map;var keys=new Map;var identities=new Map;var rangeOf=function(expression){return getPreprocessorConditionRange(expression,rangeCache)};var impossible=facts===false;function intern(signature){var identity=identities.get(signature);if(identity===undefined)identities.set(signature,identity=identities.size+1);return identity}function key(expression,owner){var cache=keys.get(owner);if(!cache)keys.set(owner,cache=new Map);var result=cache.get(expression);if(result===undefined){result=canonicalExpressionKey(expression,owner.kind===\"expression\"?owner.versions:{},function(child){return key(child,owner)},rangeOf,intern);cache.set(expression,result)}return result}function interval(expression,negated,owner){var numeric=expression;var allowed;if(expression.t===\"binary\"&&expression.op===\"<\"&&expression.r.t===\"num\"){numeric=expression.l;allowed=negated?[expression.r.v,0x7fffffff]:[-0x80000000,expression.r.v-1]}else if(negated){allowed=[0,0]}else{var domain=rangeOf(numeric);if(!domain||domain[0]<0&&domain[1]>0)return;allowed=domain[0]>=0?[1,0x7fffffff]:[-0x80000000,-1]}var domain1=rangeOf(numeric);if(!domain1)return;return{key:key(numeric,owner),domain:domain1,allowed:[Math.max(domain1[0],allowed[0]),Math.min(domain1[1],allowed[1])]}}function visit(owner,expression,negated,record){if(owner.kind===\"opaque\"){var identity=(negated?-1:1)*intern(opaqueKey(owner.identity));if(record)known.add(identity);return known.has(identity)}if(!expression)return false;if(expression.t===\"not\")return visit(owner,expression.c,!negated,record);if(expression.t===\"bool\"||expression.t===\"num\"){var value=Boolean(expression.v)!==negated;if(record&&!value)impossible=true;return value}var identity1=(negated?-1:1)*key(expression,owner);if(record)known.add(identity1);else if(known.has(identity1))return true;if(expression.t===\"and\"||expression.t===\"or\"){if(!rangeOf(expression))return false;var conjunction=expression.t===\"and\"!==negated;if(record&&!conjunction)return false;var left=visit(owner,expression.l,negated,record);var right=visit(owner,expression.r,negated,record);return conjunction?left&&right:left||right}var constraint=interval(expression,negated,owner);if(!constraint)return false;var _ranges_get;var previous=(_ranges_get=ranges.get(constraint.key))!=null?_ranges_get:constraint.domain;var allowed=constraint.allowed;if(record){var narrowed=[Math.max(previous[0],allowed[0]),Math.min(previous[1],allowed[1])];if(narrowed[0]>narrowed[1])impossible=true;ranges.set(constraint.key,narrowed);return true}return previous[0]>=allowed[0]&&previous[1]<=allowed[1]}if(typeof facts!==\"boolean\"){for(var _iterator=_create_for_of_iterator_helper_loose(facts),_step;!(_step=_iterator()).done;){var _step_value=_step.value,condition=_step_value.condition,negated=_step_value.negated;visit(condition,condition.kind===\"expression\"?condition.expression:undefined,negated,true)}}return impossible||(typeof required===\"boolean\"?required:required.every(function(param){var condition=param.condition,negated=param.negated;return visit(condition,condition.kind===\"expression\"?condition.expression:undefined,negated,false)}))}function canonicalExpressionKey(expression,versions,key,rangeOf,intern){var range=rangeOf(expression);if(range&&range[0]===range[1])return intern(\"num:\"+range[0]);switch(expression.t){case\"def\":case\"ndef\":return intern(expression.t+\":\"+definedKey(expression.m,versions[expression.m]));case\"not\":return intern(\"not(\"+key(expression.c)+\")\");case\"unary\":return intern(expression.op+\"(\"+key(expression.c)+\")\");case\"and\":case\"or\":case\"binary\":{var operator=expression.t===\"binary\"?expression.op:expression.t;var numeric=[\"+\",\"*\",\"&\",\"|\",\"^\"].includes(operator);if(numeric||(operator===\"and\"||operator===\"or\")&&range){var terms=[];var constant;var collect=function(node){if(node.t===\"binary\"&&node.op===operator||(node.t===\"and\"||node.t===\"or\")&&node.t===operator){collect(node.l);collect(node.r)}else{var value=rangeOf(node);if(numeric&&value&&value[0]===value[1]){constant=constant===undefined?value[0]:evaluateContextFreePreprocessorCondition({t:\"binary\",op:operator,l:{t:\"num\",v:constant},r:{t:\"num\",v:value[0]}})}else terms.push(key(node))}};collect(expression);var identity=operator===\"*\"?1:operator===\"&\"?-1:0;if(numeric&&constant!==undefined&&(constant!==identity||!terms.length)){terms.push(intern(\"num:\"+constant))}terms.sort(function(left,right){return left-right});return terms.length===1?terms[0]:intern(operator+\"(\"+terms.join(\",\")+\")\")}return intern(operator+\"(\"+key(expression.l)+\",\"+key(expression.r)+\")\")}default:return intern(JSON.stringify(expression))}}function definedKey(name,version){return\"defined:\"+name+\":\"+version}function opaqueKey(identity){return\"opaque:\"+identity}var SymbolTable=function(){function SymbolTable(){this._table=new Map}var _proto=SymbolTable.prototype;_proto.insert=function insert(symbol,isInMacroBranch,branchSignature,branchSemantics){if(isInMacroBranch===void 0)isInMacroBranch=false;if(branchSignature===void 0)branchSignature=EMPTY_BRANCH;symbol.isInMacroBranch=isInMacroBranch;symbol.branchSignature=branchSignature;var _this__table_get;var entry=(_this__table_get=this._table.get(symbol.ident))!=null?_this__table_get:[];var _symbol_sourceScope;var sourceScope=(_symbol_sourceScope=symbol.sourceScope)!=null?_symbol_sourceScope:0;if(sourceScope>0){for(var i=entry.length-1;i>=0;i--){var existing=entry[i];var _existing_sourceScope;var inheritedScope=(_existing_sourceScope=existing.sourceScope)!=null?_existing_sourceScope:0;if(!existing.equal(symbol)||inheritedScope>=sourceScope)continue;var alternatives=[branchSignature];for(var _iterator=_create_for_of_iterator_helper_loose(entry),_step;!(_step=_iterator()).done;){var candidate=_step.value;var _candidate_sourceScope;if(((_candidate_sourceScope=candidate.sourceScope)!=null?_candidate_sourceScope:0)>inheritedScope&&candidate.equal(symbol)){var _candidate_branchSignature;alternatives.push((_candidate_branchSignature=candidate.branchSignature)!=null?_candidate_branchSignature:EMPTY_BRANCH)}}var _existing_branchSignature;if(canInheritanceBranchesCover(alternatives,(_existing_branchSignature=existing.branchSignature)!=null?_existing_branchSignature:EMPTY_BRANCH)){entry.splice(i,1)}}}if(!branchSemantics){return this._insertWithoutBranchAnalysis(entry,symbol)}var conflict=\"none\";for(var i1=0,n=entry.length;i1<n;i1++){var existing1=entry[i1];if(!existing1.equal(symbol))continue;var _existing_sourceScope1;if(((_existing_sourceScope1=existing1.sourceScope)!=null?_existing_sourceScope1:0)<sourceScope)continue;var _existing_branchSignature1;var existingBranch=(_existing_branchSignature1=existing1.branchSignature)!=null?_existing_branchSignature1:EMPTY_BRANCH;if(existingBranch.length===0&&branchSignature.length===0){entry[i1]=symbol;return\"coexist\"}var coexistence=branchSemantics.getDeclarationCoexistence(existingBranch,branchSignature);if(coexistence===\"coexist\")conflict=\"coexist\";else if(coexistence===\"unknown\"&&conflict===\"none\")conflict=\"unknown\"}entry.push(symbol);this._table.set(symbol.ident,entry);return conflict};_proto._insertWithoutBranchAnalysis=function _insertWithoutBranchAnalysis(entry,symbol){for(var i=0,n=entry.length;i<n;i++){var _entry_i_sourceScope,_symbol_sourceScope;if(entry[i].isInMacroBranch||((_entry_i_sourceScope=entry[i].sourceScope)!=null?_entry_i_sourceScope:0)!==((_symbol_sourceScope=symbol.sourceScope)!=null?_symbol_sourceScope:0)||!entry[i].equal(symbol))continue;entry[i]=symbol;return\"coexist\"}entry.push(symbol);this._table.set(symbol.ident,entry);return\"none\"};_proto.getInheritedConflict=function getInheritedConflict(symbol,branchSemantics,isDeferred){var entry=this._table.get(symbol.ident);if(!(entry==null?void 0:entry.includes(symbol)))return\"none\";var conflict=\"none\";for(var _iterator=_create_for_of_iterator_helper_loose(entry),_step;!(_step=_iterator()).done;){var existing=_step.value;var _existing_sourceScope,_symbol_sourceScope;if(((_existing_sourceScope=existing.sourceScope)!=null?_existing_sourceScope:0)>=((_symbol_sourceScope=symbol.sourceScope)!=null?_symbol_sourceScope:0)||!existing.equal(symbol))continue;if(isDeferred==null?void 0:isDeferred(existing,symbol))continue;var _existing_branchSignature,_symbol_branchSignature;var coexistence=branchSemantics.getDeclarationCoexistence((_existing_branchSignature=existing.branchSignature)!=null?_existing_branchSignature:EMPTY_BRANCH,(_symbol_branchSignature=symbol.branchSignature)!=null?_symbol_branchSignature:EMPTY_BRANCH);if(coexistence===\"coexist\")return\"coexist\";if(coexistence===\"unknown\")conflict=\"unknown\"}return conflict};_proto.getSymbol=function getSymbol(symbol,includeMacro,callsiteBranch,branchSemantics){if(includeMacro===void 0)includeMacro=false;var entry=this._table.get(symbol.ident);if(entry){for(var i=entry.length-1;i>=0;i--){var item=entry[i];var visible=includeMacro||!item.isInMacroBranch;if(branchSemantics&&callsiteBranch!==undefined){var _item_branchSignature;visible=branchSemantics.isBranchVisibleFrom((_item_branchSignature=item.branchSignature)!=null?_item_branchSignature:EMPTY_BRANCH,callsiteBranch)}if(!visible)continue;if(item.equal(symbol))return item}}};_proto.getSymbols=function getSymbols(symbol,includeMacro,out){if(includeMacro===void 0)includeMacro=false;out.length=0;this._getSymbols(symbol,includeMacro,out);return out};_proto.hasSymbol=function hasSymbol(symbol){var entry=this._table.get(symbol.ident);if(!entry)return false;for(var i=0,n=entry.length;i<n;i++){if(entry[i].equal(symbol))return true}return false};_proto._getSymbols=function _getSymbols(symbol,includeMacro,out,callsiteBranch,branchSemantics){if(includeMacro===void 0)includeMacro=false;var entry=this._table.get(symbol.ident);if(entry){for(var i=entry.length-1;i>=0;i--){var item=entry[i];var visible=includeMacro||!item.isInMacroBranch;if(callsiteBranch!==undefined){var _item_branchSignature,_item_branchSignature1;visible=branchSemantics?branchSemantics.canBranchesOverlap((_item_branchSignature=item.branchSignature)!=null?_item_branchSignature:EMPTY_BRANCH,callsiteBranch):getLexicalDeclarationCoexistence((_item_branchSignature1=item.branchSignature)!=null?_item_branchSignature1:EMPTY_BRANCH,callsiteBranch)!==\"exclusive\"}if(!visible)continue;if(item.equal(symbol))out.push(item)}}return out};_proto.forEach=function forEach(callback){for(var _iterator=_create_for_of_iterator_helper_loose(this._table.values()),_step;!(_step=_iterator()).done;){var entries=_step.value;for(var i=0,n=entries.length;i<n;i++){callback(entries[i])}}};return SymbolTable}();var SymbolTableStack=function(){function SymbolTableStack(){this.stack=[];this._macroLevel=0;this._currentBranch=EMPTY_BRANCH}var _proto=SymbolTableStack.prototype;_proto.pushScope=function pushScope(scope){this.stack.push(scope)};_proto.clear=function clear(){this.stack.length=0;this._macroLevel=0;this._currentBranch=EMPTY_BRANCH};_proto.popScope=function popScope(){return this.stack.pop()};_proto.insert=function insert(symbol,branchSignature){if(branchSignature===void 0)branchSignature=this._currentBranch;return this.scope.insert(symbol,this.isInMacroBranch,branchSignature,this.branchSemantics)};_proto.lookup=function lookup(symbol,includeMacro,callsiteBranch){if(includeMacro===void 0)includeMacro=false;for(var i=this.stack.length-1;i>=0;i--){var symbolTable=this.stack[i];var result=symbolTable.getSymbol(symbol,includeMacro,callsiteBranch,this.branchSemantics);if(result)return result}return undefined};_proto.hasSymbol=function hasSymbol(symbol){for(var i=this.stack.length-1;i>=0;i--){if(this.stack[i].hasSymbol(symbol))return true}return false};_proto.lookupAll=function lookupAll(symbol,includeMacro,out,callsiteBranch){if(includeMacro===void 0)includeMacro=false;out.length=0;for(var i=this.stack.length-1;i>=0;i--){var symbolTable=this.stack[i];symbolTable._getSymbols(symbol,includeMacro,out,callsiteBranch,this.branchSemantics);if(out.length>0)break}return out};_proto.lookupAllWithRuntimeFallbacks=function lookupAllWithRuntimeFallbacks(symbol,includeMacro,out,runtimeFallbacks,callsiteBranch){out.length=0;runtimeFallbacks.length=0;for(var i=this.stack.length-1;i>=0;i--){if(!out.length){this.stack[i]._getSymbols(symbol,includeMacro,out,callsiteBranch,this.branchSemantics);if(!out.length)continue;if(this._runtimeCandidatesCoverCallsite(out,callsiteBranch))break}else{var fallbackStart=runtimeFallbacks.length;this.stack[i]._getSymbols(symbol,includeMacro,runtimeFallbacks,callsiteBranch,this.branchSemantics);if(runtimeFallbacks.length>fallbackStart&&this._runtimeCandidatesCoverCallsite(runtimeFallbacks,callsiteBranch)){break}}}return out};_proto._runtimeCandidatesCoverCallsite=function _runtimeCandidatesCoverCallsite(candidates,callsiteBranch){for(var i=0;i<candidates.length;i++){var candidate=candidates[i];var _candidate_branchSignature;if(!candidate.isInMacroBranch||callsiteBranch&&isLexicalBranchVisibleFrom((_candidate_branchSignature=candidate.branchSignature)!=null?_candidate_branchSignature:EMPTY_BRANCH,callsiteBranch)){return true}}return false};_create_class(SymbolTableStack,[{key:\"scope\",get:function get(){return this.stack[this.stack.length-1]}},{key:\"isInMacroBranch\",get:function get(){return this._macroLevel>0}}]);return SymbolTableStack}();var EShaderStage=function(EShaderStage){EShaderStage[EShaderStage[\"VERTEX\"]=0]=\"VERTEX\";EShaderStage[EShaderStage[\"FRAGMENT\"]=1]=\"FRAGMENT\";EShaderStage[EShaderStage[\"ALL\"]=2]=\"ALL\";return EShaderStage}({});function __decorate(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect===\"object\"&&typeof Reflect.decorate===\"function\")r=Reflect.decorate(decorators,target,key,desc);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;return c>3&&r&&Object.defineProperty(target,key,r),r}function __generator(thisArg,body){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);return g.next=verb(0),g[\"throw\"]=verb(1),g[\"return\"]=verb(2),typeof Symbol===\"function\"&&(g[Symbol.iterator]=function(){return this}),g;function verb(n){return function(v){return step([n,v])}}function step(op){if(f)throw new TypeError(\"Generator is already executing.\");while(g&&(g=0,op[0]&&(_=0)),_)try{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;if(y=0,t)op=[op[0]&2,t.value];switch(op[0]){case 0:case 1:t=op;break;case 4:_.label++;return{value:op[1],done:false};case 5:_.label++;y=op[1];op=[0];continue;case 7:op=_.ops.pop();_.trys.pop();continue;default:if(!(t=_.trys,t=t.length>0&&t[t.length-1])&&(op[0]===6||op[0]===2)){_=0;continue}if(op[0]===3&&(!t||op[1]>t[0]&&op[1]<t[3])){_.label=op[1];break}if(op[0]===6&&_.label<t[1]){_.label=t[1];t=op;break}if(t&&_.label<t[2]){_.label=t[2];_.ops.push(op);break}if(t[2])_.ops.pop();_.trys.pop();continue}op=body.call(thisArg,_)}catch(e){op=[6,e];y=0}finally{f=t=0}if(op[0]&5)throw op[1];return{value:op[0]?op[1]:void 0,done:true}}}function __values(o){var s=typeof Symbol===\"function\"&&Symbol.iterator,m=s&&o[s],i=0;if(m)return m.call(o);if(o&&typeof o.length===\"number\")return{next:function(){if(o&&i>=o.length)o=void 0;return{value:o&&o[i++],done:!o}}};throw new TypeError(s?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")}typeof SuppressedError===\"function\"?SuppressedError:function(error,suppressed,message){var e=new Error(message);return e.name=\"SuppressedError\",e.error=error,e.suppressed=suppressed,e};var Lexer=function(BaseLexer1){_inherits(Lexer,BaseLexer1);function Lexer(source,macroDefineList,objectPool,_conditionalArms){var _this;_this=BaseLexer1.call(this,source,objectPool)||this,_this.macroDefineList=macroDefineList,_this._conditionalArms=_conditionalArms,_this.preprocessorExpressions=new Map,_this._needScanMacroConditionExpression=false,_this._inMacroDefineValue=false,_this._macroDefineExpectsNameToken=false,_this._macroDefineExpectsParamsToken=false,_this._currentMacroName=\"\",_this._currentMacroParamsLexeme=undefined,_this._currentMacroValueStart=-1,_this._branchStack=[],_this._branchSnapshot=EMPTY_BRANCH,_this._conditionalGroup=0,_this._pendingBranchPushDefined=null,_this._pendingCodegenConditional=null,_this._codegenConditionalFrames=[];return _this}var _proto=Lexer.prototype;_proto.tokenize=function tokenize(){return __generator(this,function(_state){switch(_state.label){case 0:return[5,__values(this._tokenizeForCodegen())];case 1:_state.sent();return[2,this._createEOFToken()]}})};_proto._tokenizeForCodegen=function _tokenizeForCodegen(){var tok,parsedCondition,conditionalGroup,arm,index,previous,frame,definitelyMatched,condition,_previous_conditionalArm,isMacroName,conditionalGroup1,arm1,_this__conditionalArms,_this__conditionalArms1,_this__conditionalArms2,_this__conditionalArms3,index1,previous1,_this__conditionalArms4,frame1,condition1,_previous_conditionalArm1,frame2,reachableArms,_iterator,_step,arm2;return __generator(this,function(_state){switch(_state.label){case 0:if(!!this.isEnd())return[3,2];tok=this.scanToken();if(this._pendingCodegenConditional&&tok.type===Keyword.MACRO_CONDITIONAL_EXPRESSION){parsedCondition=this._parseCodegenConstantCondition(tok.lexeme);if(this._pendingCodegenConditional===\"push\"){conditionalGroup=++this._conditionalGroup;arm={name:\"__if_\"+conditionalGroup,defined:true,sourceArm:this._pendingCodegenArm,conditionalGroup:conditionalGroup,conditionalArm:0,condition:parsedCondition};this._branchStack.push(arm);this._codegenConditionalFrames.push({arms:[arm],definitelyMatched:(parsedCondition==null?void 0:parsedCondition.kind)===\"constant\"&&parsedCondition.value})}else{index=this._branchStack.length-1;previous=this._branchStack[index];if(previous){frame=this._codegenConditionalFrames[index];definitelyMatched=frame.definitelyMatched;condition=definitelyMatched?{kind:\"constant\",value:false}:parsedCondition;this._branchStack[index]={name:previous.name,defined:true,conditionalGroup:previous.conditionalGroup,conditionalArm:((_previous_conditionalArm=previous.conditionalArm)!=null?_previous_conditionalArm:0)+1,sourceArm:this._pendingCodegenArm,condition:condition};frame.arms.push(this._branchStack[index]);if(!definitelyMatched&&(parsedCondition==null?void 0:parsedCondition.kind)===\"constant\"&&parsedCondition.value){frame.definitelyMatched=true}}}this._pendingCodegenConditional=null}isMacroName=tok.type===ETokenType.ID||tok.type===Keyword.MACRO_CALL;if(this._pendingBranchPushDefined!==null&&isMacroName){conditionalGroup1=++this._conditionalGroup;arm1={name:tok.lexeme,defined:this._pendingBranchPushDefined,sourceArm:this._pendingCodegenArm,conditionalGroup:conditionalGroup1,conditionalArm:0};this._branchStack.push(arm1);this._codegenConditionalFrames.push({arms:[arm1],definitelyMatched:false});this._pendingBranchPushDefined=null}if(this._branchStack.length>0)tok.branch=this._captureBranchSignature();switch(tok.type){case Keyword.MACRO_IFDEF:this._pendingCodegenArm=(_this__conditionalArms=this._conditionalArms)==null?void 0:_this__conditionalArms.get(tok.location.start.index);this._pendingBranchPushDefined=true;break;case Keyword.MACRO_IFNDEF:this._pendingCodegenArm=(_this__conditionalArms1=this._conditionalArms)==null?void 0:_this__conditionalArms1.get(tok.location.start.index);this._pendingBranchPushDefined=false;break;case Keyword.MACRO_IF:this._pendingCodegenArm=(_this__conditionalArms2=this._conditionalArms)==null?void 0:_this__conditionalArms2.get(tok.location.start.index);this._pendingCodegenConditional=\"push\";break;case Keyword.MACRO_ELIF:this._pendingCodegenArm=(_this__conditionalArms3=this._conditionalArms)==null?void 0:_this__conditionalArms3.get(tok.location.start.index);this._pendingCodegenConditional=\"advance\";break;case Keyword.MACRO_ELSE:{index1=this._branchStack.length-1;previous1=this._branchStack[index1];if(previous1){frame1=this._codegenConditionalFrames[index1];condition1=frame1.definitelyMatched?{kind:\"constant\",value:false}:undefined;this._branchStack[index1]={name:previous1.name,defined:!previous1.defined,sourceArm:(_this__conditionalArms4=this._conditionalArms)==null?void 0:_this__conditionalArms4.get(tok.location.start.index),conditionalGroup:previous1.conditionalGroup,conditionalArm:((_previous_conditionalArm1=previous1.conditionalArm)!=null?_previous_conditionalArm1:0)+1,condition:condition1};frame1.arms.push(this._branchStack[index1]);frame1.definitelyMatched=true}break}case Keyword.MACRO_ENDIF:{this._branchStack.pop();frame2=this._codegenConditionalFrames.pop();if(frame2==null?void 0:frame2.definitelyMatched){reachableArms=frame2.arms.map(function(arm){var _arm_condition;return((_arm_condition=arm.condition)==null?void 0:_arm_condition.kind)!==\"constant\"||arm.condition.value});for(_iterator=_create_for_of_iterator_helper_loose(frame2.arms);!(_step=_iterator()).done;){arm2=_step.value;arm2.conditionalComplete=true;arm2.conditionalArmCount=frame2.arms.length;arm2.conditionalReachableArms=reachableArms}}break}}return[4,tok];case 1:_state.sent();return[3,0];case 2:return[2,this._createEOFToken()]}})};_proto._parseCodegenConstantCondition=function _parseCodegenConstantCondition(expression){var parsed=this.preprocessorExpressions.get(expression.trim());var value=(parsed==null?void 0:parsed.ok)&&!parsed.hasExpandableIdentifier?evaluateContextFreePreprocessorCondition(parsed.condition):undefined;return value===undefined?undefined:{kind:\"constant\",value:value!==0}};_proto._isBranchReachable=function _isBranchReachable(branch){return Lexer._isCodegenBranchReachable(branch)};_proto._sameDefinitionBranch=function _sameDefinitionBranch(left,right){return Lexer._sameCodegenBranch(left,right)};_proto._branchesOverlap=function _branchesOverlap(left,right){return getLexicalDeclarationCoexistence(left,right)!==\"exclusive\"};_proto.scanToken=function scanToken(){if(this._inMacroDefineValue){this._skipInlineSpaceAndComments();if(this.isEnd()||this._isAtLineBreak()){return this._emitMacroDefineEnd()}if(this._macroDefineExpectsParamsToken){this._macroDefineExpectsParamsToken=false;if(this.getCurChar()===\"(\"){return this._scanMacroDefineParams()}}}else{this.skipCommentsAndSpace();if(this.isEnd()){return this._createEOFToken()}}if(this._needScanMacroConditionExpression){this._needScanMacroConditionExpression=false;return this._scanMacroConditionExpression()}var curCharCode=this.getCurCharCode();if(BaseLexer.isPreprocessorStartChar(curCharCode)){return this._scanDirectives()}if(BaseLexer.isAlpha(curCharCode)){return this._scanWord()}if(BaseLexer.isDigit(curCharCode)){return this._scanNum()}var start=this.getShaderPosition();var token=this._createToken();var curChar;switch(this.getCurChar()){case\"<\":this.advance(1);curChar=this.getCurChar();if(curChar===\"<\"){this.advance(1);if(this.getCurChar()===\"=\"){this.advance(1);token.set(ETokenType.LEFT_ASSIGN,\"<<=\",start);break}token.set(ETokenType.LEFT_OP,\"<<\",start);break}else if(curChar===\"=\"){this.advance(1);token.set(ETokenType.LE_OP,\"<=\",start);break}token.set(ETokenType.LEFT_ANGLE,\"<\",start);break;case\">\":this.advance(1);curChar=this.getCurChar();if(curChar===\">\"){this.advance(1);if(this.getCurChar()===\"=\"){this.advance(1);token.set(ETokenType.RIGHT_ASSIGN,\">>=\",start);break}token.set(ETokenType.RIGHT_OP,\">>\",start);break}else if(curChar===\"=\"){this.advance(1);token.set(ETokenType.GE_OP,\">=\",start);break}token.set(ETokenType.RIGHT_ANGLE,\">\",start);break;case\"+\":this.advance(1);curChar=this.getCurChar();if(curChar===\"+\"){this.advance(1);token.set(ETokenType.INC_OP,\"++\",start);break}else if(curChar===\"=\"){this.advance(1);token.set(ETokenType.ADD_ASSIGN,\"+=\",start);break}token.set(ETokenType.PLUS,\"+\",start);break;case\"-\":this.advance(1);curChar=this.getCurChar();if(curChar===\"-\"){this.advance(1);token.set(ETokenType.DEC_OP,\"--\",start);break}else if(curChar===\"=\"){this.advance(1);token.set(ETokenType.SUB_ASSIGN,\"-=\",start);break}token.set(ETokenType.DASH,\"-\",start);break;case\"=\":this.advance(1);if(this.getCurChar()===\"=\"){this.advance(1);token.set(ETokenType.EQ_OP,\"==\",start);break}token.set(ETokenType.EQUAL,\"=\",start);break;case\"!\":this.advance(1);if(this.getCurChar()===\"=\"){this.advance(1);token.set(ETokenType.NE_OP,\"!=\",start);break}token.set(ETokenType.BANG,\"!\",start);break;case\"&\":this.advance(1);curChar=this.getCurChar();if(curChar===\"&\"){this.advance(1);token.set(ETokenType.AND_OP,\"&&\",start);break}else if(curChar===\"=\"){this.advance(1);token.set(ETokenType.AND_ASSIGN,\"&=\",start);break}token.set(ETokenType.AMPERSAND,\"&\",start);break;case\"|\":this.advance(1);curChar=this.getCurChar();if(curChar===\"|\"){this.advance(1);token.set(ETokenType.OR_OP,\"||\",start);break}else if(curChar===\"=\"){this.advance(1);token.set(ETokenType.OR_ASSIGN,\"|=\",start);break}token.set(ETokenType.VERTICAL_BAR,\"|\",start);break;case\"^\":this.advance(1);curChar=this.getCurChar();if(curChar===\"^\"){this.advance(1);token.set(ETokenType.XOR_OP,\"^^\",start);break}else if(curChar===\"=\"){this.advance(1);token.set(ETokenType.XOR_ASSIGN,\"^=\",start);break}token.set(ETokenType.CARET,\"^\",start);break;case\"*\":this.advance(1);if(this.getCurChar()===\"=\"){this.advance(1);token.set(ETokenType.MUL_ASSIGN,\"*=\",start);break}token.set(ETokenType.STAR,\"*\",start);break;case\"/\":this.advance(1);if(this.getCurChar()===\"=\"){this.advance(1);token.set(ETokenType.DIV_ASSIGN,\"/=\",start);break}token.set(ETokenType.SLASH,\"/\",start);break;case\"%\":this.advance(1);if(this.getCurChar()===\"=\"){this.advance(1);token.set(ETokenType.MOD_ASSIGN,\"%=\",start);break}token.set(ETokenType.PERCENT,\"%\",start);break;case\"(\":this.advance(1);token.set(ETokenType.LEFT_PAREN,\"(\",start);break;case\")\":this.advance(1);token.set(ETokenType.RIGHT_PAREN,\")\",start);break;case\"{\":this.advance(1);token.set(ETokenType.LEFT_BRACE,\"{\",start);break;case\"}\":this.advance(1);token.set(ETokenType.RIGHT_BRACE,\"}\",start);break;case\"[\":this.advance(1);token.set(ETokenType.LEFT_BRACKET,\"[\",start);break;case\"]\":this.advance(1);token.set(ETokenType.RIGHT_BRACKET,\"]\",start);break;case\".\":this.advance(1);if(BaseLexer.isDigit(this.getCurCharCode())){return this._scanNumAfterDot()}token.set(ETokenType.DOT,\".\",start);break;case\",\":this.advance(1);token.set(ETokenType.COMMA,\",\",start);break;case\":\":this.advance(1);token.set(ETokenType.COLON,\":\",start);return token;case\";\":this.advance(1);token.set(ETokenType.SEMICOLON,\";\",start);break;case\"~\":this.advance(1);token.set(ETokenType.TILDE,\"~\",start);break;case\"?\":this.advance(1);token.set(ETokenType.QUESTION,\"?\",start);break;case'\"':this.advance(1);return this._scanStringConst();default:this.throwError(this.getShaderPosition(0),\"Unexpected character \"+this.getCurChar())}return token};_proto._scanStringConst=function _scanStringConst(){var start=this.getShaderPosition();var buffer=[];while(this.getCurChar()!=='\"'){if(this.isEnd()){var quote=this._createPosition(start.index-1,start.line,start.column-1);this.throwError(this._createRange(quote,start),\"Unterminated string literal.\")}buffer.push(this.getCurChar());this.advance(1)}this.advance(1);var range=this._createRange(start,this.getShaderPosition());var token=this._createToken();token.set(ETokenType.STRING_CONST,buffer.join(\"\"),range);return token};_proto._scanNumAfterDot=function _scanNumAfterDot(){var buffer=[\".\"];while(BaseLexer.isDigit(this.getCurCharCode())){buffer.push(this.getCurChar());this.advance(1)}this._scanFloatSuffix(buffer);var token=this._createToken();token.set(ETokenType.FLOAT_CONSTANT,buffer.join(\"\"),this.getShaderPosition(buffer.length));return token};_proto._scanUtilBreakLine=function _scanUtilBreakLine(outBuffer){var src=this._source;var len=src.length;while(!this.isEnd()){var afterContinuation=Lexer._skipLineContinuation(src,this._currentIndex,len);if(afterContinuation!==this._currentIndex){this.advance(afterContinuation-this._currentIndex);continue}var c=src.charCodeAt(this._currentIndex);if(c===10)break;outBuffer.push(src[this._currentIndex]);this.advance(1)}};_proto._scanDirectives=function _scanDirectives(){var buffer=[this.getCurChar()];var start=this.getShaderPosition();this.advance(1);this.skipSpace(false);while(BaseLexer.isAlpha(this.getCurCharCode())){buffer.push(this.getCurChar());this.advance(1)}var token=this._createToken();var word=buffer.join(\"\");if(word===\"#define\"){var branchReachable=this._isBranchReachable(this._branchStack);if(!branchReachable){this._scanUtilBreakLine(buffer);token.set(Keyword.MACRO_DEFINE_EXPRESSION,\"\\n\"+buffer.join(\"\")+\"\\n\",start);return token}var peek=this._peekMacroDefine();if(peek&&peek.isExpression){this._inMacroDefineValue=true;this._macroDefineExpectsNameToken=true;token.set(Keyword.MACRO_DEFINE,\"#define\",start)}else{this._scanUtilBreakLine(buffer);var lexeme=\"\\n\"+buffer.join(\"\")+\"\\n\";if(peek){this._registerMacroDefine(peek.name,peek.paramsLexeme,peek.valueStart,peek.valueEnd)}token.set(Keyword.MACRO_DEFINE_EXPRESSION,lexeme,start)}}else{var kt=Lexer._lexemeTable[word];token.set(kt!=null?kt:ETokenType.ID,word,start);if(word===\"#if\"||word===\"#elif\"){this._needScanMacroConditionExpression=true}}return token};_proto._isAtLineBreak=function _isAtLineBreak(){var c=this.getCurChar();return c===\"\\n\"||c===\"\\r\"};_proto._peekMacroDefine=function _peekMacroDefine(){var src=this._source;var len=src.length;var i=Lexer._skipNonSemantic(src,this._currentIndex,len);if(!(i<len&&BaseLexer.isAlpha(src.charCodeAt(i))))return null;var nameStart=i;while(i<len&&BaseLexer.isAlnum(src.charCodeAt(i)))i++;var name=src.slice(nameStart,i);var paramsLexeme;if(i<len&&src.charCodeAt(i)===40){var paramsStart=i;var depth=1;i++;while(i<len&&depth>0){i=Lexer._skipNonSemantic(src,i,len);if(i>=len)break;var c=src.charCodeAt(i);if(c===10||c===13){return{name:name,paramsLexeme:undefined,valueStart:i,valueEnd:i,isExpression:false}}if(c===40)depth++;else if(c===41)depth--;i++}paramsLexeme=src.slice(paramsStart,i)}var valueStart=i;var parenDepth=0;var bracketDepth=0;var firstStart=-1;var firstEnd=-1;var firstFollowedByParen=false;var topLevelLast=-1;while(i<len){var skipped=Lexer._skipNonSemantic(src,i,len);if(skipped!==i){i=skipped;continue}var c1=src.charCodeAt(i);if(c1===10||c1===13)break;if(firstStart===-1){firstStart=i;if(BaseLexer.isAlpha(c1)){while(i<len&&BaseLexer.isAlnum(src.charCodeAt(i)))i++;firstEnd=i;var after=Lexer._skipNonSemantic(src,i,len);firstFollowedByParen=after<len&&src.charCodeAt(after)===40;topLevelLast=firstEnd-1;continue}}if(c1===40)parenDepth++;else if(c1===41)parenDepth--;else if(c1===91)bracketDepth++;else if(c1===93)bracketDepth--;if(parenDepth===0&&bracketDepth===0)topLevelLast=i;i++}var result={name:name,paramsLexeme:paramsLexeme,valueStart:valueStart,valueEnd:i,isExpression:false};if(firstStart===-1)return result;if(firstEnd!==-1&&!firstFollowedByParen&&Lexer._isNonExpressionLeadingKeyword(src.slice(firstStart,firstEnd))){return result}var head=src.charCodeAt(firstStart);var tail=topLevelLast>=0?src.charCodeAt(topLevelLast):0;var headIllegal=!BaseLexer.isAlnum(head)&&head!==40&&head!==46&&head!==45&&head!==43&&head!==33&&head!==126;var tailIllegal=!BaseLexer.isAlnum(tail)&&tail!==41&&tail!==93;if(parenDepth!==0||bracketDepth!==0||headIllegal||tailIllegal)return result;result.isExpression=true;return result};_proto._skipInlineSpaceAndComments=function _skipInlineSpaceAndComments(){var next=Lexer._skipNonSemantic(this._source,this._currentIndex,this._source.length);if(next>this._currentIndex)this.advance(next-this._currentIndex)};_proto._scanMacroDefineParams=function _scanMacroDefineParams(){var start=this.getShaderPosition();var src=this._source;var len=src.length;var buffer=[];var depth=0;while(this._currentIndex<len){var afterContinuation=Lexer._skipLineContinuation(src,this._currentIndex,len);if(afterContinuation!==this._currentIndex){this.advance(afterContinuation-this._currentIndex);continue}var ch=src[this._currentIndex];buffer.push(ch);if(ch===\"(\")depth++;else if(ch===\")\"){depth--;this.advance(1);if(depth===0)break;continue}this.advance(1)}var token=this._createToken();var lexeme=buffer.join(\"\");this._currentMacroParamsLexeme=lexeme;this._currentMacroValueStart=this._currentIndex;token.set(Keyword.MACRO_DEFINE_PARAMS,lexeme,start);return token};_proto._emitMacroDefineEnd=function _emitMacroDefineEnd(){var start=this.getShaderPosition();var valueEnd=this._currentIndex;var source=this._source;if(this._currentIndex<source.length){var c=source.charCodeAt(this._currentIndex);if(c===13&&source.charCodeAt(this._currentIndex+1)===10){this.advance(2)}else if(c===10||c===13){this.advance(1)}}this._registerMacroDefine(this._currentMacroName,this._currentMacroParamsLexeme,this._currentMacroValueStart,valueEnd);this._inMacroDefineValue=false;var token=this._createToken();token.set(Keyword.MACRO_DEFINE_END,\"\\n\",start);return token};_proto._registerMacroDefine=function _registerMacroDefine(name,paramsLexeme,valueStart,valueEnd){var params=paramsLexeme?paramsLexeme.slice(1,-1).split(\",\").map(function(p){return p.trim()}).filter(Boolean):[];var dedupKey=(paramsLexeme!=null?paramsLexeme:\"\")+\"=\"+Lexer._normalizeValueText(this._source,valueStart,valueEnd);var info={isFunction:paramsLexeme!==undefined,params:params,dedupKey:dedupKey,branch:this._captureBranchSignature()};var arr=this.macroDefineList[name];if(!arr){this.macroDefineList[name]=[info]}else{var duplicate=false;for(var i=0,n=arr.length;i<n;i++){var e=arr[i];if(e.dedupKey===dedupKey&&this._sameDefinitionBranch(e.branch,info.branch)){duplicate=true;break}}if(!duplicate)arr.push(info)}};_proto._captureBranchSignature=function _captureBranchSignature(){var stack=this._branchStack;var snapshot=this._branchSnapshot;if(stack.length===snapshot.length){var unchanged=true;for(var i=0;i<stack.length;i++){if(stack[i]!==snapshot[i]){unchanged=false;break}}if(unchanged)return snapshot}return this._branchSnapshot=stack.length===0?EMPTY_BRANCH:stack.slice()};_proto._scanMacroConditionExpression=function _scanMacroConditionExpression(){var buffer=new Array;var start=this.getShaderPosition();var source=this._source;while(!this.isEnd()){var afterContinuation=Lexer._skipLineContinuation(source,this._currentIndex,source.length);if(afterContinuation!==this._currentIndex){while(this._currentIndex<afterContinuation){var character=source[this._currentIndex];buffer.push(character===\"\\\\\"?\" \":character);this.advance(1)}continue}if(source.charCodeAt(this._currentIndex)===10)break;buffer.push(source[this._currentIndex]);this.advance(1)}var word=buffer.join(\"\");var result=parsePreprocessorExpression(word);var emittedWord=word.replace(/[\\r\\n]/g,\" \");this.preprocessorExpressions.set(emittedWord.trim(),result);var token=this._createToken();token.set(Keyword.MACRO_CONDITIONAL_EXPRESSION,emittedWord,start);return token};_proto._scanWord=function _scanWord(){var buffer=[this.getCurChar()];var start=this.getShaderPosition();this.advance(1);while(BaseLexer.isAlnum(this.getCurCharCode())){buffer.push(this.getCurChar());this.advance(1)}var token=this._createToken();var word=buffer.join(\"\");var kt=Lexer._lexemeTable[word];if(this._macroDefineExpectsNameToken){this._macroDefineExpectsNameToken=false;this._currentMacroName=word;this._currentMacroParamsLexeme=undefined;if(this._inMacroDefineValue){this._macroDefineExpectsParamsToken=this.getCurChar()===\"(\";this._currentMacroValueStart=this._currentIndex}token.set(ETokenType.ID,word,start)}else if(this._isVisibleMacro(word)){token.set(Keyword.MACRO_CALL,word,start)}else{token.set(kt!=null?kt:ETokenType.ID,word,start)}return token};_proto._isVisibleMacro=function _isVisibleMacro(word){var defs=this.macroDefineList[word];if(!defs||defs.length===0)return false;var callSiteBranch=this._branchStack;for(var i=0,n=defs.length;i<n;i++){if(this._branchesOverlap(defs[i].branch,callSiteBranch)){return true}}return false};_proto._scanNum=function _scanNum(){var buffer=[];if(this.getCurChar()===\"0\"){var nextCode=this._source.charCodeAt(this._currentIndex+1);if(nextCode===120||nextCode===88){buffer.push(this.getCurChar());this.advance(1);buffer.push(this.getCurChar());this.advance(1);while(BaseLexer.isHexDigit(this.getCurCharCode())){buffer.push(this.getCurChar());this.advance(1)}if(buffer.length===2){this.throwError(this.getShaderPosition(0),\"lexing error, hex literal needs at least one digit.\")}this._scanIntegerSuffix(buffer);var token=this._createToken();token.set(ETokenType.INT_CONSTANT,buffer.join(\"\"),this.getShaderPosition(buffer.length));return token}}while(BaseLexer.isDigit(this.getCurCharCode())){buffer.push(this.getCurChar());this.advance(1)}var curChar=this.getCurChar();if(curChar===\".\"){buffer.push(curChar);this.advance(1);while(BaseLexer.isDigit(this.getCurCharCode())){buffer.push(this.getCurChar());this.advance(1)}this._scanFloatSuffix(buffer);var token1=this._createToken();token1.set(ETokenType.FLOAT_CONSTANT,buffer.join(\"\"),this.getShaderPosition(buffer.length));return token1}else if(curChar===\"e\"||curChar===\"E\"){this._scanFloatSuffix(buffer);var token2=this._createToken();token2.set(ETokenType.FLOAT_CONSTANT,buffer.join(\"\"),this.getShaderPosition(buffer.length));return token2}else if(curChar===\"f\"||curChar===\"F\"){buffer.push(curChar);this.advance(1);var token3=this._createToken();token3.set(ETokenType.FLOAT_CONSTANT,buffer.join(\"\"),this.getShaderPosition(buffer.length));return token3}else{this._scanIntegerSuffix(buffer);var token4=this._createToken();token4.set(ETokenType.INT_CONSTANT,buffer.join(\"\"),this.getShaderPosition(buffer.length));return token4}};_proto._scanFloatSuffix=function _scanFloatSuffix(buffer){var curChar=this.getCurChar();if(curChar===\"e\"||curChar===\"E\"){buffer.push(curChar);this.advance(1);curChar=this.getCurChar();if(curChar===\"+\"||curChar===\"-\"){buffer.push(curChar);this.advance(1);curChar=this.getCurChar()}if(!BaseLexer.isDigit(this.getCurCharCode()))this.throwError(this.getShaderPosition(0),\"lexing error, invalid exponent suffix.\");do{buffer.push(curChar);this.advance(1);curChar=this.getCurChar()}while(BaseLexer.isDigit(this.getCurCharCode()))}if(curChar===\"f\"||curChar===\"F\"){buffer.push(curChar);this.advance(1)}};_proto._scanIntegerSuffix=function _scanIntegerSuffix(buffer){var curChar=this.getCurChar();if(curChar===\"u\"||curChar===\"U\"){buffer.push(curChar);this.advance(1)}};Lexer._isCodegenBranchReachable=function _isCodegenBranchReachable(branch){for(var i=0;i<branch.length;i++){var condition=branch[i].condition;if((condition==null?void 0:condition.kind)===\"constant\"&&!condition.value)return false}return true};Lexer._isNonExpressionLeadingKeyword=function _isNonExpressionLeadingKeyword(lexeme){var kw=Lexer._lexemeTable[lexeme];return kw!==undefined&&kw!==Keyword.True&&kw!==Keyword.False&&!lexeme.startsWith(\"#\")};Lexer._skipLineContinuation=function _skipLineContinuation(src,i,len){if(src.charCodeAt(i)!==92||i+1>=len)return i;var n=src.charCodeAt(i+1);if(n===10)return i+2;if(n===13)return i+2<len&&src.charCodeAt(i+2)===10?i+3:i+2;return i};Lexer._skipNonSemantic=function _skipNonSemantic(src,from,len){var i=from;while(i<len){var c=src.charCodeAt(i);if(c===32||c===9){i++;continue}var afterContinuation=Lexer._skipLineContinuation(src,i,len);if(afterContinuation!==i){i=afterContinuation;continue}var afterBlock=Lexer._skipBlockComment(src,i,len);if(afterBlock!==i){i=afterBlock;continue}var afterLine=Lexer._skipLineComment(src,i,len);if(afterLine!==i){i=afterLine;continue}break}return i};Lexer._normalizeValueText=function _normalizeValueText(src,start,end){var out=\"\";var i=start;var pendingSpace=false;while(i<end){var skipped=Lexer._skipNonSemantic(src,i,end);if(skipped!==i){pendingSpace=out.length>0;i=skipped;continue}var c=src.charCodeAt(i);if(c===32||c===9){pendingSpace=out.length>0;i++;continue}if(pendingSpace){out+=\" \";pendingSpace=false}out+=src[i];i++}return out};Lexer._sameCodegenBranch=function _sameCodegenBranch(left,right){if(left.length!==right.length)return false;for(var i=0;i<left.length;i++){if(left[i].conditionalGroup!==right[i].conditionalGroup||left[i].conditionalArm!==right[i].conditionalArm){return false}}return true};return Lexer}(BaseLexer);Lexer._lexemeTable={const:Keyword.CONST,bool:Keyword.BOOL,float:Keyword.FLOAT,double:Keyword.DOUBLE,int:Keyword.INT,uint:Keyword.UINT,break:Keyword.BREAK,continue:Keyword.CONTINUE,do:Keyword.DO,else:Keyword.ELSE,for:Keyword.FOR,if:Keyword.IF,while:Keyword.WHILE,discard:Keyword.DISCARD,return:Keyword.RETURN,bvec2:Keyword.BVEC2,bvec3:Keyword.BVEC3,bvec4:Keyword.BVEC4,ivec2:Keyword.IVEC2,ivec3:Keyword.IVEC3,ivec4:Keyword.IVEC4,uvec2:Keyword.UVEC2,uvec3:Keyword.UVEC3,uvec4:Keyword.UVEC4,vec2:Keyword.VEC2,vec3:Keyword.VEC3,vec4:Keyword.VEC4,mat2:Keyword.MAT2,mat3:Keyword.MAT3,mat4:Keyword.MAT4,mat2x3:Keyword.MAT2X3,mat2x4:Keyword.MAT2X4,mat3x2:Keyword.MAT3X2,mat3x4:Keyword.MAT3X4,mat4x2:Keyword.MAT4X2,mat4x3:Keyword.MAT4X3,in:Keyword.IN,out:Keyword.OUT,inout:Keyword.INOUT,sampler2D:Keyword.SAMPLER2D,samplerCube:Keyword.SAMPLER_CUBE,sampler3D:Keyword.SAMPLER3D,sampler2DShadow:Keyword.SAMPLER2D_SHADOW,samplerCubeShadow:Keyword.SAMPLER_CUBE_SHADOW,sampler2DArray:Keyword.SAMPLER2D_ARRAY,sampler2DArrayShadow:Keyword.SAMPLER2D_ARRAY_SHADOW,isampler2D:Keyword.I_SAMPLER2D,isampler3D:Keyword.I_SAMPLER3D,isamplerCube:Keyword.I_SAMPLER_CUBE,isampler2DArray:Keyword.I_SAMPLER2D_ARRAY,usampler2D:Keyword.U_SAMPLER2D,usampler3D:Keyword.U_SAMPLER3D,usamplerCube:Keyword.U_SAMPLER_CUBE,usampler2DArray:Keyword.U_SAMPLER2D_ARRAY,struct:Keyword.STRUCT,void:Keyword.VOID,true:Keyword.True,false:Keyword.False,precision:Keyword.PRECISION,precise:Keyword.PRECISE,highp:Keyword.HIGHP,mediump:Keyword.MEDIUMP,lowp:Keyword.LOWP,invariant:Keyword.INVARIANT,flat:Keyword.FLAT,smooth:Keyword.SMOOTH,noperspective:Keyword.NOPERSPECTIVE,centroid:Keyword.CENTROID,layout:Keyword.LAYOUT,location:Keyword.LOCATION,\"#if\":Keyword.MACRO_IF,\"#ifdef\":Keyword.MACRO_IFDEF,\"#ifndef\":Keyword.MACRO_IFNDEF,\"#else\":Keyword.MACRO_ELSE,\"#elif\":Keyword.MACRO_ELIF,\"#endif\":Keyword.MACRO_ENDIF,\"#undef\":Keyword.MACRO_UNDEF};var NoneTerminal=function(NoneTerminal){NoneTerminal[NoneTerminal[\"START\"]=2e3]=\"START\";NoneTerminal[NoneTerminal[\"gs_shader_program\"]=2001]=\"gs_shader_program\";NoneTerminal[NoneTerminal[\"global_declaration\"]=2002]=\"global_declaration\";NoneTerminal[NoneTerminal[\"variable_declaration\"]=2003]=\"variable_declaration\";NoneTerminal[NoneTerminal[\"variable_declaration_list\"]=2004]=\"variable_declaration_list\";NoneTerminal[NoneTerminal[\"variable_declaration_statement\"]=2005]=\"variable_declaration_statement\";NoneTerminal[NoneTerminal[\"array_specifier_list\"]=2006]=\"array_specifier_list\";NoneTerminal[NoneTerminal[\"array_specifier\"]=2007]=\"array_specifier\";NoneTerminal[NoneTerminal[\"ext_builtin_type_specifier_nonarray\"]=2008]=\"ext_builtin_type_specifier_nonarray\";NoneTerminal[NoneTerminal[\"precision_specifier\"]=2009]=\"precision_specifier\";NoneTerminal[NoneTerminal[\"variable_identifier\"]=2010]=\"variable_identifier\";NoneTerminal[NoneTerminal[\"variable_identifier_node\"]=2011]=\"variable_identifier_node\";NoneTerminal[NoneTerminal[\"primary_expression\"]=2012]=\"primary_expression\";NoneTerminal[NoneTerminal[\"postfix_expression\"]=2013]=\"postfix_expression\";NoneTerminal[NoneTerminal[\"integer_expression\"]=2014]=\"integer_expression\";NoneTerminal[NoneTerminal[\"function_call\"]=2015]=\"function_call\";NoneTerminal[NoneTerminal[\"function_call_generic\"]=2016]=\"function_call_generic\";NoneTerminal[NoneTerminal[\"function_call_header_no_parameters\"]=2017]=\"function_call_header_no_parameters\";NoneTerminal[NoneTerminal[\"function_call_header_with_parameters\"]=2018]=\"function_call_header_with_parameters\";NoneTerminal[NoneTerminal[\"function_call_parameter_list\"]=2019]=\"function_call_parameter_list\";NoneTerminal[NoneTerminal[\"function_call_header\"]=2020]=\"function_call_header\";NoneTerminal[NoneTerminal[\"function_identifier\"]=2021]=\"function_identifier\";NoneTerminal[NoneTerminal[\"constructor_identifier\"]=2022]=\"constructor_identifier\";NoneTerminal[NoneTerminal[\"unary_expression\"]=2023]=\"unary_expression\";NoneTerminal[NoneTerminal[\"unary_operator\"]=2024]=\"unary_operator\";NoneTerminal[NoneTerminal[\"multiplicative_expression\"]=2025]=\"multiplicative_expression\";NoneTerminal[NoneTerminal[\"additive_expression\"]=2026]=\"additive_expression\";NoneTerminal[NoneTerminal[\"shift_expression\"]=2027]=\"shift_expression\";NoneTerminal[NoneTerminal[\"relational_expression\"]=2028]=\"relational_expression\";NoneTerminal[NoneTerminal[\"equality_expression\"]=2029]=\"equality_expression\";NoneTerminal[NoneTerminal[\"and_expression\"]=2030]=\"and_expression\";NoneTerminal[NoneTerminal[\"inclusive_or_expression\"]=2031]=\"inclusive_or_expression\";NoneTerminal[NoneTerminal[\"exclusive_or_expression\"]=2032]=\"exclusive_or_expression\";NoneTerminal[NoneTerminal[\"logical_and_expression\"]=2033]=\"logical_and_expression\";NoneTerminal[NoneTerminal[\"logical_xor_expression\"]=2034]=\"logical_xor_expression\";NoneTerminal[NoneTerminal[\"logical_or_expression\"]=2035]=\"logical_or_expression\";NoneTerminal[NoneTerminal[\"conditional_expression\"]=2036]=\"conditional_expression\";NoneTerminal[NoneTerminal[\"assignment_expression\"]=2037]=\"assignment_expression\";NoneTerminal[NoneTerminal[\"assignment_operator\"]=2038]=\"assignment_operator\";NoneTerminal[NoneTerminal[\"expression\"]=2039]=\"expression\";NoneTerminal[NoneTerminal[\"integer_constant_expression\"]=2040]=\"integer_constant_expression\";NoneTerminal[NoneTerminal[\"integer_constant_expression_operator\"]=2041]=\"integer_constant_expression_operator\";NoneTerminal[NoneTerminal[\"declaration\"]=2042]=\"declaration\";NoneTerminal[NoneTerminal[\"function_prototype\"]=2043]=\"function_prototype\";NoneTerminal[NoneTerminal[\"function_declarator\"]=2044]=\"function_declarator\";NoneTerminal[NoneTerminal[\"function_header_with_parameters\"]=2045]=\"function_header_with_parameters\";NoneTerminal[NoneTerminal[\"function_header\"]=2046]=\"function_header\";NoneTerminal[NoneTerminal[\"function_parameter_list\"]=2047]=\"function_parameter_list\";NoneTerminal[NoneTerminal[\"parameter_declarator\"]=2048]=\"parameter_declarator\";NoneTerminal[NoneTerminal[\"parameter_declaration\"]=2049]=\"parameter_declaration\";NoneTerminal[NoneTerminal[\"parameter_qualifier\"]=2050]=\"parameter_qualifier\";NoneTerminal[NoneTerminal[\"parameter_type_specifier\"]=2051]=\"parameter_type_specifier\";NoneTerminal[NoneTerminal[\"init_declarator_list\"]=2052]=\"init_declarator_list\";NoneTerminal[NoneTerminal[\"single_declaration\"]=2053]=\"single_declaration\";NoneTerminal[NoneTerminal[\"fully_specified_type\"]=2054]=\"fully_specified_type\";NoneTerminal[NoneTerminal[\"type_qualifier\"]=2055]=\"type_qualifier\";NoneTerminal[NoneTerminal[\"single_type_qualifier\"]=2056]=\"single_type_qualifier\";NoneTerminal[NoneTerminal[\"storage_qualifier\"]=2057]=\"storage_qualifier\";NoneTerminal[NoneTerminal[\"precision_qualifier\"]=2058]=\"precision_qualifier\";NoneTerminal[NoneTerminal[\"interpolation_qualifier\"]=2059]=\"interpolation_qualifier\";NoneTerminal[NoneTerminal[\"invariant_qualifier\"]=2060]=\"invariant_qualifier\";NoneTerminal[NoneTerminal[\"type_specifier\"]=2061]=\"type_specifier\";NoneTerminal[NoneTerminal[\"type_specifier_nonarray\"]=2062]=\"type_specifier_nonarray\";NoneTerminal[NoneTerminal[\"type_specifier_no_prec\"]=2063]=\"type_specifier_no_prec\";NoneTerminal[NoneTerminal[\"basic_type\"]=2064]=\"basic_type\";NoneTerminal[NoneTerminal[\"struct_specifier\"]=2065]=\"struct_specifier\";NoneTerminal[NoneTerminal[\"struct_declaration_list\"]=2066]=\"struct_declaration_list\";NoneTerminal[NoneTerminal[\"struct_declaration\"]=2067]=\"struct_declaration\";NoneTerminal[NoneTerminal[\"layout_qualifier\"]=2068]=\"layout_qualifier\";NoneTerminal[NoneTerminal[\"struct_declarator_list\"]=2069]=\"struct_declarator_list\";NoneTerminal[NoneTerminal[\"struct_declarator\"]=2070]=\"struct_declarator\";NoneTerminal[NoneTerminal[\"identifier_list\"]=2071]=\"identifier_list\";NoneTerminal[NoneTerminal[\"decl_identifier\"]=2072]=\"decl_identifier\";NoneTerminal[NoneTerminal[\"initializer\"]=2073]=\"initializer\";NoneTerminal[NoneTerminal[\"initializer_list\"]=2074]=\"initializer_list\";NoneTerminal[NoneTerminal[\"declaration_statement\"]=2075]=\"declaration_statement\";NoneTerminal[NoneTerminal[\"simple_statement\"]=2076]=\"simple_statement\";NoneTerminal[NoneTerminal[\"compound_statement_no_scope\"]=2077]=\"compound_statement_no_scope\";NoneTerminal[NoneTerminal[\"statement_with_scope\"]=2078]=\"statement_with_scope\";NoneTerminal[NoneTerminal[\"compound_statement\"]=2079]=\"compound_statement\";NoneTerminal[NoneTerminal[\"statement\"]=2080]=\"statement\";NoneTerminal[NoneTerminal[\"statement_list\"]=2081]=\"statement_list\";NoneTerminal[NoneTerminal[\"iteration_statement_no_new_scope\"]=2082]=\"iteration_statement_no_new_scope\";NoneTerminal[NoneTerminal[\"expression_statement\"]=2083]=\"expression_statement\";NoneTerminal[NoneTerminal[\"selection_statement\"]=2084]=\"selection_statement\";NoneTerminal[NoneTerminal[\"selection_rest_statement\"]=2085]=\"selection_rest_statement\";NoneTerminal[NoneTerminal[\"condition\"]=2086]=\"condition\";NoneTerminal[NoneTerminal[\"conditionopt\"]=2087]=\"conditionopt\";NoneTerminal[NoneTerminal[\"iteration_statement\"]=2088]=\"iteration_statement\";NoneTerminal[NoneTerminal[\"for_init_statement\"]=2089]=\"for_init_statement\";NoneTerminal[NoneTerminal[\"for_rest_statement\"]=2090]=\"for_rest_statement\";NoneTerminal[NoneTerminal[\"jump_statement\"]=2091]=\"jump_statement\";NoneTerminal[NoneTerminal[\"external_declaration\"]=2092]=\"external_declaration\";NoneTerminal[NoneTerminal[\"function_definition\"]=2093]=\"function_definition\";NoneTerminal[NoneTerminal[\"field_selection\"]=2094]=\"field_selection\";NoneTerminal[NoneTerminal[\"bool_constant\"]=2095]=\"bool_constant\";NoneTerminal[NoneTerminal[\"function_identifier_node\"]=2096]=\"function_identifier_node\";NoneTerminal[NoneTerminal[\"typename_identifier_node\"]=2097]=\"typename_identifier_node\";NoneTerminal[NoneTerminal[\"scope_brace\"]=2098]=\"scope_brace\";NoneTerminal[NoneTerminal[\"scope_end_brace\"]=2099]=\"scope_end_brace\";NoneTerminal[NoneTerminal[\"macro_undef\"]=2100]=\"macro_undef\";NoneTerminal[NoneTerminal[\"macro_push_context\"]=2101]=\"macro_push_context\";NoneTerminal[NoneTerminal[\"macro_pop_context\"]=2102]=\"macro_pop_context\";NoneTerminal[NoneTerminal[\"macro_elif_expression\"]=2103]=\"macro_elif_expression\";NoneTerminal[NoneTerminal[\"macro_else_expression\"]=2104]=\"macro_else_expression\";NoneTerminal[NoneTerminal[\"global_macro_if_statement\"]=2105]=\"global_macro_if_statement\";NoneTerminal[NoneTerminal[\"global_macro_declaration\"]=2106]=\"global_macro_declaration\";NoneTerminal[NoneTerminal[\"global_macro_branch\"]=2107]=\"global_macro_branch\";NoneTerminal[NoneTerminal[\"macro_struct_declaration\"]=2108]=\"macro_struct_declaration\";NoneTerminal[NoneTerminal[\"macro_struct_branch\"]=2109]=\"macro_struct_branch\";NoneTerminal[NoneTerminal[\"macro_if_statement\"]=2110]=\"macro_if_statement\";NoneTerminal[NoneTerminal[\"macro_branch\"]=2111]=\"macro_branch\";NoneTerminal[NoneTerminal[\"macro_param_case_list\"]=2112]=\"macro_param_case_list\";NoneTerminal[NoneTerminal[\"macro_param_block\"]=2113]=\"macro_param_block\";NoneTerminal[NoneTerminal[\"macro_parameter_branch\"]=2114]=\"macro_parameter_branch\";NoneTerminal[NoneTerminal[\"macro_call_arg_case_list\"]=2115]=\"macro_call_arg_case_list\";NoneTerminal[NoneTerminal[\"macro_call_arg_block\"]=2116]=\"macro_call_arg_block\";NoneTerminal[NoneTerminal[\"macro_call_arg_branch\"]=2117]=\"macro_call_arg_branch\";NoneTerminal[NoneTerminal[\"macro_call_symbol\"]=2118]=\"macro_call_symbol\";NoneTerminal[NoneTerminal[\"macro_call_function\"]=2119]=\"macro_call_function\";NoneTerminal[NoneTerminal[\"macro_define\"]=2120]=\"macro_define\";NoneTerminal[NoneTerminal[\"_ignore\"]=2121]=\"_ignore\";return NoneTerminal}({});var Production=function Production(goal,derivation){this.goal=goal;this.derivation=derivation;this.id=Production._id++;Production.pool.set(this.id,this)};Production._id=0;Production.pool=new Map;var GenericType=function(GenericType){GenericType[GenericType[\"GenType\"]=200]=\"GenType\";GenericType[GenericType[\"GenIntType\"]=201]=\"GenIntType\";GenericType[GenericType[\"GenUintType\"]=202]=\"GenUintType\";GenericType[GenericType[\"GenBoolType\"]=203]=\"GenBoolType\";GenericType[GenericType[\"Mat\"]=204]=\"Mat\";GenericType[GenericType[\"BoolVec\"]=205]=\"BoolVec\";GenericType[GenericType[\"IntVec\"]=206]=\"IntVec\";GenericType[GenericType[\"UintVec\"]=207]=\"UintVec\";GenericType[GenericType[\"Vec\"]=208]=\"Vec\";GenericType[GenericType[\"GVec4\"]=209]=\"GVec4\";GenericType[GenericType[\"GSampler2D\"]=210]=\"GSampler2D\";GenericType[GenericType[\"GSampler3D\"]=211]=\"GSampler3D\";GenericType[GenericType[\"GSamplerCube\"]=212]=\"GSamplerCube\";GenericType[GenericType[\"GSampler2DArray\"]=213]=\"GSampler2DArray\";return GenericType}({});var _obj;var FamilyMembers=(_obj={},_obj[200]={dimension:0,members:[Keyword.FLOAT,Keyword.VEC2,Keyword.VEC3,Keyword.VEC4]},_obj[201]={dimension:0,members:[Keyword.INT,Keyword.IVEC2,Keyword.IVEC3,Keyword.IVEC4]},_obj[202]={dimension:0,members:[Keyword.UINT,Keyword.UVEC2,Keyword.UVEC3,Keyword.UVEC4]},_obj[203]={dimension:0,members:[Keyword.BOOL,Keyword.BVEC2,Keyword.BVEC3,Keyword.BVEC4]},_obj[208]={dimension:0,members:[Keyword.VEC2,Keyword.VEC3,Keyword.VEC4]},_obj[206]={dimension:0,members:[Keyword.IVEC2,Keyword.IVEC3,Keyword.IVEC4]},_obj[207]={dimension:0,members:[Keyword.UVEC2,Keyword.UVEC3,Keyword.UVEC4]},_obj[205]={dimension:0,members:[Keyword.BVEC2,Keyword.BVEC3,Keyword.BVEC4]},_obj[204]={dimension:0,members:[Keyword.MAT2,Keyword.MAT3,Keyword.MAT4]},_obj[210]={dimension:1,members:[Keyword.SAMPLER2D,Keyword.I_SAMPLER2D,Keyword.U_SAMPLER2D]},_obj[211]={dimension:1,members:[Keyword.SAMPLER3D,Keyword.I_SAMPLER3D,Keyword.U_SAMPLER3D]},_obj[212]={dimension:1,members:[Keyword.SAMPLER_CUBE,Keyword.I_SAMPLER_CUBE,Keyword.U_SAMPLER_CUBE]},_obj[213]={dimension:1,members:[Keyword.SAMPLER2D_ARRAY,Keyword.I_SAMPLER2D_ARRAY,Keyword.U_SAMPLER2D_ARRAY]},_obj[209]={dimension:1,members:[Keyword.VEC4,Keyword.IVEC4,Keyword.UVEC4]},_obj);var BuiltinFunctionTable=new Map;var BuiltinFunction=function(){function BuiltinFunction(ident,returnType,scope){for(var _len=arguments.length,args=new Array(_len>3?_len-3:0),_key=3;_key<_len;_key++){args[_key-3]=arguments[_key]}this.ident=ident;this._returnType=returnType;this.args=args;this.scope=scope}BuiltinFunction._create=function _create(ident,returnType){for(var _len=arguments.length,args=new Array(_len>2?_len-2:0),_key=2;_key<_len;_key++){args[_key-2]=arguments[_key]}var fn=_construct(BuiltinFunction,[].concat([ident,returnType,EShaderStage.ALL],args));var _BuiltinFunctionTable_get;var list=(_BuiltinFunctionTable_get=BuiltinFunctionTable.get(ident))!=null?_BuiltinFunctionTable_get:[];list.push(fn);BuiltinFunctionTable.set(ident,list)};BuiltinFunction._createWithScope=function _createWithScope(ident,returnType,scope){for(var _len=arguments.length,args=new Array(_len>3?_len-3:0),_key=3;_key<_len;_key++){args[_key-3]=arguments[_key]}var fn=_construct(BuiltinFunction,[].concat([ident,returnType,scope],args));var _BuiltinFunctionTable_get;var list=(_BuiltinFunctionTable_get=BuiltinFunctionTable.get(ident))!=null?_BuiltinFunctionTable_get:[];list.push(fn);BuiltinFunctionTable.set(ident,list)};BuiltinFunction.resolveOverload=function resolveOverload(funcName,callArgTypes){var overloads=BuiltinFunctionTable.get(funcName);if(!overloads)return undefined;var _callArgTypes_length;var n=(_callArgTypes_length=callArgTypes==null?void 0:callArgTypes.length)!=null?_callArgTypes_length:0;for(var i=0,m=overloads.length;i<m;i++){var candidate=overloads[i];var declaredArgs=candidate.args;if(declaredArgs.length!==n)continue;var sizeLock=-1;var scalarTypeLock=-1;var matched=true;var sizeAmbiguous=false;var scalarTypeAmbiguous=false;for(var j=0;j<n;j++){var declaredType=declaredArgs[j];var actualType=callArgTypes[j];var paramFamily=FamilyMembers[declaredType];if(actualType===TypeAny){if(paramFamily){if(paramFamily.dimension===0)sizeAmbiguous=true;else scalarTypeAmbiguous=true}continue}if(paramFamily){var memberIdx=paramFamily.members.indexOf(actualType);if(memberIdx===-1){matched=false;break}if(paramFamily.dimension===0){if(sizeLock===-1)sizeLock=memberIdx;else if(sizeLock!==memberIdx){matched=false;break}}else{if(scalarTypeLock===-1)scalarTypeLock=memberIdx;else if(scalarTypeLock!==memberIdx){matched=false;break}}}else if(declaredType!==actualType){matched=false;break}}if(!matched)continue;var returnFamily=FamilyMembers[candidate._returnType];if(!returnFamily){candidate._realReturnType=candidate._returnType;return candidate}var returnIsSize=returnFamily.dimension===0;var ambiguous=returnIsSize?sizeAmbiguous:scalarTypeAmbiguous;var returnIdx=returnIsSize?sizeLock:scalarTypeLock;candidate._realReturnType=returnIdx===-1||ambiguous?TypeAny:returnFamily.members[returnIdx];return candidate}return undefined};BuiltinFunction.isExist=function isExist(ident){return BuiltinFunctionTable.has(ident)};_create_class(BuiltinFunction,[{key:\"realReturnType\",get:function get(){return this._realReturnType}}]);return BuiltinFunction}();BuiltinFunction._create(\"radians\",200,200);BuiltinFunction._create(\"degrees\",200,200);BuiltinFunction._create(\"sin\",200,200);BuiltinFunction._create(\"cos\",200,200);BuiltinFunction._create(\"tan\",200,200);BuiltinFunction._create(\"asin\",200,200);BuiltinFunction._create(\"acos\",200,200);BuiltinFunction._create(\"atan\",200,200,200);BuiltinFunction._create(\"atan\",200,200);BuiltinFunction._create(\"sinh\",200,200);BuiltinFunction._create(\"cosh\",200,200);BuiltinFunction._create(\"tanh\",200,200);BuiltinFunction._create(\"asinh\",200,200);BuiltinFunction._create(\"acosh\",200,200);BuiltinFunction._create(\"atanh\",200,200);BuiltinFunction._create(\"pow\",200,200,200);BuiltinFunction._create(\"exp\",200,200);BuiltinFunction._create(\"log\",200,200);BuiltinFunction._create(\"exp2\",200,200);BuiltinFunction._create(\"log2\",200,200);BuiltinFunction._create(\"sqrt\",200,200);BuiltinFunction._create(\"inversesqrt\",200,200);BuiltinFunction._create(\"abs\",200,200);BuiltinFunction._create(\"abs\",201,201);BuiltinFunction._create(\"sign\",200,200);BuiltinFunction._create(\"sign\",201,201);BuiltinFunction._create(\"floor\",200,200);BuiltinFunction._create(\"trunc\",200,200);BuiltinFunction._create(\"round\",200,200);BuiltinFunction._create(\"roundEven\",200,200);BuiltinFunction._create(\"ceil\",200,200);BuiltinFunction._create(\"fract\",200,200);BuiltinFunction._create(\"mod\",200,200,Keyword.FLOAT);BuiltinFunction._create(\"mod\",200,200,200);BuiltinFunction._create(\"min\",200,200,200);BuiltinFunction._create(\"min\",200,200,Keyword.FLOAT);BuiltinFunction._create(\"min\",201,201,201);BuiltinFunction._create(\"min\",201,201,Keyword.INT);BuiltinFunction._create(\"min\",202,202,202);BuiltinFunction._create(\"min\",202,202,Keyword.UINT);BuiltinFunction._create(\"max\",200,200,200);BuiltinFunction._create(\"max\",200,200,Keyword.FLOAT);BuiltinFunction._create(\"max\",201,201,201);BuiltinFunction._create(\"max\",201,201,Keyword.INT);BuiltinFunction._create(\"clamp\",200,200,200,200);BuiltinFunction._create(\"clamp\",200,200,Keyword.FLOAT,Keyword.FLOAT);BuiltinFunction._create(\"clamp\",201,201,201,201);BuiltinFunction._create(\"clamp\",201,201,Keyword.INT,Keyword.INT);BuiltinFunction._create(\"clamp\",202,202,202,202);BuiltinFunction._create(\"clamp\",202,202,Keyword.UINT,Keyword.UINT);BuiltinFunction._create(\"mix\",200,200,200,200);BuiltinFunction._create(\"mix\",200,200,200,Keyword.FLOAT);BuiltinFunction._create(\"mix\",200,200,200,203);BuiltinFunction._create(\"step\",200,200,200);BuiltinFunction._create(\"step\",200,Keyword.FLOAT,200);BuiltinFunction._create(\"smoothstep\",200,200,200,200);BuiltinFunction._create(\"smoothstep\",200,Keyword.FLOAT,Keyword.FLOAT,200);BuiltinFunction._create(\"isnan\",203,200);BuiltinFunction._create(\"isinf\",203,200);BuiltinFunction._create(\"floatBitsToInt\",200,200);BuiltinFunction._create(\"floatBitsToUint\",202,200);BuiltinFunction._create(\"intBitsToFloat\",200,201);BuiltinFunction._create(\"uintBitsToFloat\",200,202);BuiltinFunction._create(\"packSnorm2x16\",Keyword.UINT,Keyword.VEC2);BuiltinFunction._create(\"unpackSnorm2x16\",Keyword.VEC2,Keyword.UINT);BuiltinFunction._create(\"packUnorm2x16\",Keyword.UINT,Keyword.VEC2);BuiltinFunction._create(\"unpackUnorm2x16\",Keyword.VEC2,Keyword.UINT);BuiltinFunction._create(\"packHalf2x16\",Keyword.UINT,Keyword.VEC2);BuiltinFunction._create(\"unpackHalf2x16\",Keyword.VEC2,Keyword.UINT);BuiltinFunction._create(\"length\",Keyword.FLOAT,200);BuiltinFunction._create(\"distance\",Keyword.FLOAT,200,200);BuiltinFunction._create(\"dot\",Keyword.FLOAT,200,200);BuiltinFunction._create(\"cross\",Keyword.VEC3,Keyword.VEC3,Keyword.VEC3);BuiltinFunction._create(\"normalize\",200,200);BuiltinFunction._create(\"faceforward\",200,200,200,200);BuiltinFunction._create(\"reflect\",200,200,200);BuiltinFunction._create(\"refract\",200,200,200,Keyword.FLOAT);BuiltinFunction._create(\"matrixCompMult\",204,204,204);BuiltinFunction._create(\"outerProduct\",Keyword.MAT2,Keyword.VEC2,Keyword.VEC2);BuiltinFunction._create(\"outerProduct\",Keyword.MAT3,Keyword.VEC3,Keyword.VEC3);BuiltinFunction._create(\"outerProduct\",Keyword.MAT4,Keyword.VEC4,Keyword.VEC4);BuiltinFunction._create(\"outerProduct\",Keyword.MAT2X3,Keyword.VEC3,Keyword.VEC2);BuiltinFunction._create(\"outerProduct\",Keyword.MAT3X2,Keyword.VEC2,Keyword.VEC3);BuiltinFunction._create(\"outerProduct\",Keyword.MAT2X4,Keyword.VEC4,Keyword.VEC2);BuiltinFunction._create(\"outerProduct\",Keyword.MAT4X2,Keyword.VEC2,Keyword.VEC4);BuiltinFunction._create(\"outerProduct\",Keyword.MAT3X4,Keyword.VEC4,Keyword.VEC3);BuiltinFunction._create(\"outerProduct\",Keyword.MAT4X3,Keyword.VEC3,Keyword.VEC4);BuiltinFunction._create(\"transpose\",Keyword.MAT2,Keyword.MAT2);BuiltinFunction._create(\"transpose\",Keyword.MAT3,Keyword.MAT3);BuiltinFunction._create(\"transpose\",Keyword.MAT4,Keyword.MAT4);BuiltinFunction._create(\"transpose\",Keyword.MAT2X3,Keyword.MAT3X2);BuiltinFunction._create(\"transpose\",Keyword.MAT3X2,Keyword.MAT2X3);BuiltinFunction._create(\"transpose\",Keyword.MAT4X2,Keyword.MAT2X4);BuiltinFunction._create(\"transpose\",Keyword.MAT2X4,Keyword.MAT4X2);BuiltinFunction._create(\"transpose\",Keyword.MAT3X4,Keyword.MAT4X3);BuiltinFunction._create(\"transpose\",Keyword.MAT4X3,Keyword.MAT3X4);BuiltinFunction._create(\"determinant\",Keyword.FLOAT,Keyword.MAT2);BuiltinFunction._create(\"determinant\",Keyword.FLOAT,Keyword.MAT3);BuiltinFunction._create(\"determinant\",Keyword.FLOAT,Keyword.MAT4);BuiltinFunction._create(\"inverse\",Keyword.MAT2,Keyword.MAT2);BuiltinFunction._create(\"inverse\",Keyword.MAT3,Keyword.MAT3);BuiltinFunction._create(\"inverse\",Keyword.MAT4,Keyword.MAT4);BuiltinFunction._create(\"lessThan\",205,208,208);BuiltinFunction._create(\"lessThan\",205,206,206);BuiltinFunction._create(\"lessThan\",205,207,207);BuiltinFunction._create(\"lessThanEqual\",205,208,208);BuiltinFunction._create(\"lessThanEqual\",205,206,206);BuiltinFunction._create(\"lessThanEqual\",205,207,207);BuiltinFunction._create(\"greaterThan\",205,208,208);BuiltinFunction._create(\"greaterThan\",205,206,206);BuiltinFunction._create(\"greaterThan\",205,207,207);BuiltinFunction._create(\"greaterThanEqual\",205,208,208);BuiltinFunction._create(\"greaterThanEqual\",205,206,206);BuiltinFunction._create(\"greaterThanEqual\",205,207,207);BuiltinFunction._create(\"equal\",205,208,208);BuiltinFunction._create(\"equal\",205,206,206);BuiltinFunction._create(\"equal\",205,207,207);BuiltinFunction._create(\"equal\",205,205,205);BuiltinFunction._create(\"notEqual\",205,208,208);BuiltinFunction._create(\"notEqual\",205,206,206);BuiltinFunction._create(\"notEqual\",205,207,207);BuiltinFunction._create(\"notEqual\",205,205,205);BuiltinFunction._create(\"any\",Keyword.BOOL,205);BuiltinFunction._create(\"all\",Keyword.BOOL,205);BuiltinFunction._create(\"not\",205,205);BuiltinFunction._create(\"textureSize\",Keyword.IVEC2,210,Keyword.INT);BuiltinFunction._create(\"textureSize\",Keyword.IVEC3,211,Keyword.INT);BuiltinFunction._create(\"textureSize\",Keyword.IVEC2,212,Keyword.INT);BuiltinFunction._create(\"textureSize\",Keyword.IVEC2,Keyword.SAMPLER2D_SHADOW,Keyword.INT);BuiltinFunction._create(\"textureSize\",Keyword.IVEC2,Keyword.SAMPLER_CUBE_SHADOW,Keyword.INT);BuiltinFunction._create(\"textureSize\",Keyword.IVEC3,213,Keyword.INT);BuiltinFunction._create(\"textureSize\",Keyword.IVEC3,Keyword.SAMPLER2D_ARRAY_SHADOW,Keyword.INT);BuiltinFunction._create(\"texture2D\",209,210,Keyword.VEC2);BuiltinFunction._create(\"texture2D\",209,210,Keyword.VEC2,Keyword.FLOAT);BuiltinFunction._create(\"texture\",209,210,Keyword.VEC2,Keyword.FLOAT);BuiltinFunction._create(\"texture\",209,210,Keyword.VEC2);BuiltinFunction._create(\"texture\",209,211,Keyword.VEC3,Keyword.FLOAT);BuiltinFunction._create(\"texture\",209,211,Keyword.VEC3);BuiltinFunction._create(\"texture\",209,212,Keyword.VEC3,Keyword.FLOAT);BuiltinFunction._create(\"texture\",209,212,Keyword.VEC3);BuiltinFunction._create(\"texture\",Keyword.FLOAT,Keyword.SAMPLER2D_SHADOW,Keyword.VEC3,Keyword.FLOAT);BuiltinFunction._create(\"texture\",Keyword.FLOAT,Keyword.SAMPLER2D_SHADOW,Keyword.VEC3);BuiltinFunction._create(\"texture\",Keyword.FLOAT,Keyword.SAMPLER_CUBE_SHADOW,Keyword.VEC4,Keyword.FLOAT);BuiltinFunction._create(\"texture\",Keyword.FLOAT,Keyword.SAMPLER_CUBE_SHADOW,Keyword.VEC4);BuiltinFunction._create(\"texture\",209,Keyword.SAMPLER2D_ARRAY,Keyword.VEC3,Keyword.FLOAT);BuiltinFunction._create(\"texture\",209,Keyword.SAMPLER2D_ARRAY,Keyword.VEC3);BuiltinFunction._create(\"texture\",Keyword.FLOAT,Keyword.SAMPLER2D_ARRAY_SHADOW,Keyword.VEC4);BuiltinFunction._create(\"textureProj\",209,210,Keyword.VEC3,Keyword.FLOAT);BuiltinFunction._create(\"textureProj\",209,210,Keyword.VEC3);BuiltinFunction._create(\"textureProj\",209,210,Keyword.VEC4,Keyword.FLOAT);BuiltinFunction._create(\"textureProj\",209,210,Keyword.VEC4);BuiltinFunction._create(\"textureProj\",209,211,Keyword.VEC4,Keyword.FLOAT);BuiltinFunction._create(\"textureProj\",209,211,Keyword.VEC4);BuiltinFunction._create(\"textureProj\",Keyword.FLOAT,Keyword.SAMPLER2D_SHADOW,Keyword.VEC4,Keyword.FLOAT);BuiltinFunction._create(\"textureProj\",Keyword.FLOAT,Keyword.SAMPLER2D_SHADOW,Keyword.VEC4);BuiltinFunction._create(\"textureLod\",209,210,Keyword.VEC2,Keyword.FLOAT);BuiltinFunction._create(\"textureLod\",209,211,Keyword.VEC3,Keyword.FLOAT);BuiltinFunction._create(\"textureLod\",209,212,Keyword.VEC3,Keyword.FLOAT);BuiltinFunction._create(\"textureLod\",Keyword.FLOAT,Keyword.SAMPLER2D_SHADOW,Keyword.VEC3,Keyword.FLOAT);BuiltinFunction._create(\"textureLod\",209,213,Keyword.VEC3,Keyword.FLOAT);BuiltinFunction._create(\"texture2DLod\",209,210,Keyword.VEC2,Keyword.FLOAT);BuiltinFunction._create(\"texture2DLodEXT\",209,210,Keyword.VEC2,Keyword.FLOAT);BuiltinFunction._create(\"texture2DLodEXT\",209,211,Keyword.VEC3,Keyword.FLOAT);BuiltinFunction._create(\"textureCube\",209,212,Keyword.VEC3);BuiltinFunction._create(\"textureCube\",209,212,Keyword.VEC3,Keyword.FLOAT);BuiltinFunction._create(\"textureCubeLod\",209,212,Keyword.VEC3,Keyword.FLOAT);BuiltinFunction._create(\"textureCubeLodEXT\",209,212,Keyword.VEC3,Keyword.FLOAT);BuiltinFunction._create(\"textureOffset\",209,210,Keyword.VEC2,Keyword.IVEC2,Keyword.FLOAT);BuiltinFunction._create(\"textureOffset\",209,210,Keyword.VEC2,Keyword.IVEC2);BuiltinFunction._create(\"textureOffset\",209,211,Keyword.VEC3,Keyword.IVEC3,Keyword.FLOAT);BuiltinFunction._create(\"textureOffset\",209,211,Keyword.VEC3,Keyword.IVEC3);BuiltinFunction._create(\"textureOffset\",Keyword.FLOAT,Keyword.SAMPLER2D_SHADOW,Keyword.VEC3,Keyword.IVEC2,Keyword.FLOAT);BuiltinFunction._create(\"textureOffset\",Keyword.FLOAT,Keyword.SAMPLER2D_SHADOW,Keyword.VEC3,Keyword.IVEC2);BuiltinFunction._create(\"textureOffset\",209,213,Keyword.VEC3,Keyword.IVEC2,Keyword.FLOAT);BuiltinFunction._create(\"textureOffset\",209,213,Keyword.VEC3,Keyword.IVEC2);BuiltinFunction._create(\"texelFetch\",209,210,Keyword.IVEC2,Keyword.INT);BuiltinFunction._create(\"texelFetch\",209,211,Keyword.IVEC3,Keyword.INT);BuiltinFunction._create(\"texelFetch\",209,213,Keyword.IVEC3,Keyword.INT);BuiltinFunction._create(\"texelFetchOffset\",209,210,Keyword.IVEC2,Keyword.INT,Keyword.IVEC2);BuiltinFunction._create(\"texelFetchOffset\",209,211,Keyword.IVEC3,Keyword.INT,Keyword.IVEC3);BuiltinFunction._create(\"texelFetchOffset\",209,213,Keyword.IVEC3,Keyword.INT,Keyword.IVEC2);BuiltinFunction._create(\"textureProjOffset\",209,210,Keyword.VEC3,Keyword.IVEC2,Keyword.FLOAT);BuiltinFunction._create(\"textureProjOffset\",209,210,Keyword.VEC3,Keyword.IVEC2);BuiltinFunction._create(\"textureProjOffset\",209,210,Keyword.VEC4,Keyword.IVEC2,Keyword.FLOAT);BuiltinFunction._create(\"textureProjOffset\",209,210,Keyword.VEC4,Keyword.IVEC2);BuiltinFunction._create(\"textureProjOffset\",209,211,Keyword.VEC4,Keyword.IVEC3,Keyword.FLOAT);BuiltinFunction._create(\"textureProjOffset\",209,211,Keyword.VEC4,Keyword.IVEC3);BuiltinFunction._create(\"textureProjOffset\",Keyword.FLOAT,Keyword.SAMPLER2D_SHADOW,Keyword.VEC4,Keyword.IVEC2,Keyword.FLOAT);BuiltinFunction._create(\"textureProjOffset\",Keyword.FLOAT,Keyword.SAMPLER2D_SHADOW,Keyword.VEC4,Keyword.IVEC2);BuiltinFunction._create(\"textureLodOffset\",209,210,Keyword.VEC2,Keyword.FLOAT,Keyword.IVEC2);BuiltinFunction._create(\"textureLodOffset\",209,211,Keyword.VEC3,Keyword.FLOAT,Keyword.IVEC3);BuiltinFunction._create(\"textureLodOffset\",Keyword.FLOAT,Keyword.SAMPLER2D_SHADOW,Keyword.VEC3,Keyword.FLOAT,Keyword.IVEC2);BuiltinFunction._create(\"textureLodOffset\",209,213,Keyword.VEC3,Keyword.FLOAT,Keyword.IVEC2);BuiltinFunction._create(\"textureProjLod\",209,210,Keyword.VEC3,Keyword.FLOAT);BuiltinFunction._create(\"textureProjLod\",209,210,Keyword.VEC4,Keyword.FLOAT);BuiltinFunction._create(\"textureProjLod\",209,211,Keyword.VEC4,Keyword.FLOAT);BuiltinFunction._create(\"textureProjLod\",Keyword.FLOAT,Keyword.SAMPLER2D_SHADOW,Keyword.VEC4,Keyword.FLOAT);BuiltinFunction._create(\"textureProjLodOffset\",209,210,Keyword.VEC3,Keyword.FLOAT,Keyword.IVEC2);BuiltinFunction._create(\"textureProjLodOffset\",209,210,Keyword.VEC4,Keyword.FLOAT,Keyword.IVEC2);BuiltinFunction._create(\"textureProjLodOffset\",209,211,Keyword.VEC4,Keyword.FLOAT,Keyword.IVEC3);BuiltinFunction._create(\"textureProjLodOffset\",Keyword.FLOAT,Keyword.SAMPLER2D_SHADOW,Keyword.VEC4,Keyword.FLOAT,Keyword.IVEC2);BuiltinFunction._create(\"textureGrad\",209,210,Keyword.VEC2,Keyword.VEC2,Keyword.VEC2);BuiltinFunction._create(\"textureGrad\",209,211,Keyword.VEC3,Keyword.VEC3,Keyword.VEC3);BuiltinFunction._create(\"textureGrad\",209,212,Keyword.VEC3,Keyword.VEC3,Keyword.VEC3);BuiltinFunction._create(\"textureGrad\",Keyword.FLOAT,Keyword.SAMPLER2D_SHADOW,Keyword.VEC3,Keyword.VEC2,Keyword.VEC2);BuiltinFunction._create(\"textureGrad\",Keyword.FLOAT,Keyword.SAMPLER_CUBE_SHADOW,Keyword.VEC4,Keyword.VEC3,Keyword.VEC3);BuiltinFunction._create(\"textureGrad\",209,213,Keyword.VEC3,Keyword.VEC2,Keyword.VEC2);BuiltinFunction._create(\"textureGrad\",Keyword.FLOAT,Keyword.SAMPLER2D_ARRAY_SHADOW,Keyword.VEC4,Keyword.VEC2,Keyword.VEC2);BuiltinFunction._create(\"textureGradOffset\",209,210,Keyword.VEC2,Keyword.VEC2,Keyword.VEC2,Keyword.IVEC2);BuiltinFunction._create(\"textureGradOffset\",209,211,Keyword.VEC3,Keyword.VEC3,Keyword.VEC3,Keyword.IVEC3);BuiltinFunction._create(\"textureGradOffset\",Keyword.FLOAT,Keyword.SAMPLER2D_SHADOW,Keyword.VEC3,Keyword.VEC2,Keyword.VEC2,Keyword.IVEC2);BuiltinFunction._create(\"textureGradOffset\",209,213,Keyword.VEC3,Keyword.VEC2,Keyword.VEC2,Keyword.IVEC2);BuiltinFunction._create(\"textureGradOffset\",Keyword.FLOAT,Keyword.SAMPLER2D_ARRAY_SHADOW,Keyword.VEC3,Keyword.VEC2,Keyword.VEC2,Keyword.IVEC2);BuiltinFunction._create(\"textureProjGrad\",209,210,Keyword.VEC3,Keyword.VEC2,Keyword.VEC2);BuiltinFunction._create(\"textureProjGrad\",209,210,Keyword.VEC4,Keyword.VEC2,Keyword.VEC2);BuiltinFunction._create(\"textureProjGrad\",209,211,Keyword.VEC4,Keyword.VEC3,Keyword.VEC3);BuiltinFunction._create(\"textureProjGrad\",Keyword.FLOAT,Keyword.SAMPLER2D_SHADOW,Keyword.VEC4,Keyword.VEC2,Keyword.VEC2);BuiltinFunction._create(\"textureProjGradOffset\",209,210,Keyword.VEC3,Keyword.VEC2,Keyword.VEC2,Keyword.IVEC2);BuiltinFunction._create(\"textureProjGradOffset\",209,210,Keyword.VEC4,Keyword.VEC2,Keyword.VEC2,Keyword.IVEC2);BuiltinFunction._create(\"textureProjGradOffset\",209,211,Keyword.VEC4,Keyword.VEC3,Keyword.VEC3,Keyword.IVEC3);BuiltinFunction._create(\"textureProjGradOffset\",Keyword.FLOAT,Keyword.SAMPLER2D_SHADOW,Keyword.VEC4,Keyword.VEC2,Keyword.VEC2,Keyword.IVEC2);BuiltinFunction._createWithScope(\"dFdx\",200,EShaderStage.FRAGMENT,200);BuiltinFunction._createWithScope(\"dFdy\",200,EShaderStage.FRAGMENT,200);BuiltinFunction._createWithScope(\"fwidth\",200,EShaderStage.FRAGMENT,200);var ShaderBuiltinSemantic=function(ShaderBuiltinSemantic){ShaderBuiltinSemantic[\"VertexPosition\"]=\"vertex-position\";ShaderBuiltinSemantic[\"FragmentOutput0\"]=\"fragment-output-0\";ShaderBuiltinSemantic[\"FragmentOutputArray\"]=\"fragment-output-array\";ShaderBuiltinSemantic[\"FragmentDepth\"]=\"fragment-depth\";return ShaderBuiltinSemantic}({});var BuiltinVariableTable=new Map;var BuiltinVariable=function(){function BuiltinVariable(type,lexeme,scope,semantic){this.type=type;this.lexeme=lexeme;this.scope=scope;this.semantic=semantic}BuiltinVariable.createVariable=function createVariable(lexeme,type,scope,semantic){if(scope===void 0)scope=EShaderStage.ALL;var item=new BuiltinVariable(type,lexeme,scope,semantic);BuiltinVariableTable.set(lexeme,item)};BuiltinVariable.getVar=function getVar(ident){return BuiltinVariableTable.get(ident)};return BuiltinVariable}();BuiltinVariable.createVariable(\"gl_VertexID\",Keyword.INT,EShaderStage.VERTEX);BuiltinVariable.createVariable(\"gl_InstanceID\",Keyword.INT,EShaderStage.VERTEX);BuiltinVariable.createVariable(\"gl_Position\",Keyword.VEC4,EShaderStage.VERTEX,ShaderBuiltinSemantic.VertexPosition);BuiltinVariable.createVariable(\"gl_PointSize\",Keyword.FLOAT,EShaderStage.VERTEX);BuiltinVariable.createVariable(\"gl_FragCoord\",Keyword.VEC4,EShaderStage.FRAGMENT);BuiltinVariable.createVariable(\"gl_FrontFacing\",Keyword.BOOL,EShaderStage.FRAGMENT);BuiltinVariable.createVariable(\"gl_FragDepth\",Keyword.FLOAT,EShaderStage.FRAGMENT,ShaderBuiltinSemantic.FragmentDepth);BuiltinVariable.createVariable(\"gl_FragDepthEXT\",Keyword.FLOAT,EShaderStage.FRAGMENT,ShaderBuiltinSemantic.FragmentDepth);BuiltinVariable.createVariable(\"gl_PointCoord\",Keyword.VEC2,EShaderStage.FRAGMENT);BuiltinVariable.createVariable(\"gl_FragColor\",Keyword.VEC4,EShaderStage.FRAGMENT,ShaderBuiltinSemantic.FragmentOutput0);BuiltinVariable.createVariable(\"gl_FragData\",Keyword.VEC4_ARRAY,EShaderStage.FRAGMENT,ShaderBuiltinSemantic.FragmentOutputArray);BuiltinVariable.createVariable(\"gl_MaxVertexAttribs\",Keyword.INT);BuiltinVariable.createVariable(\"gl_MaxVertexUniformVectors\",Keyword.INT);BuiltinVariable.createVariable(\"gl_MaxVertexOutputVectors\",Keyword.INT);BuiltinVariable.createVariable(\"gl_MaxFragmentInputVectors\",Keyword.INT);BuiltinVariable.createVariable(\"gl_MaxVertexTextureImageUnits\",Keyword.INT);BuiltinVariable.createVariable(\"gl_MaxCombinedTextureImageUnits\",Keyword.INT);BuiltinVariable.createVariable(\"gl_MaxTextureImageUnits\",Keyword.INT);BuiltinVariable.createVariable(\"gl_MaxFragmentUniformVectors\",Keyword.INT);BuiltinVariable.createVariable(\"gl_MaxDrawBuffers\",Keyword.INT);BuiltinVariable.createVariable(\"gl_MinProgramTexelOffset\",Keyword.INT);BuiltinVariable.createVariable(\"gl_MaxProgramTexelOffset\",Keyword.INT);var SymbolDataType=function SymbolDataType(type,typeLexeme,arraySpecifier,structDeclarations){if(structDeclarations===void 0)structDeclarations=[];this.type=type;this.typeLexeme=typeLexeme;this.arraySpecifier=arraySpecifier;this.structDeclarations=structDeclarations};var ESymbolType=function(ESymbolType){ESymbolType[ESymbolType[\"VAR\"]=0]=\"VAR\";ESymbolType[ESymbolType[\"FN\"]=1]=\"FN\";ESymbolType[ESymbolType[\"STRUCT\"]=2]=\"STRUCT\";ESymbolType[ESymbolType[\"Any\"]=3]=\"Any\";return ESymbolType}({});var SymbolInfo=function(){function SymbolInfo(ident,type,astNode,dataType,paramSignature,isInMacroBranch){if(isInMacroBranch===void 0)isInMacroBranch=false;this.ident=ident;this.type=type;this.astNode=astNode;this.dataType=dataType;this.paramSignature=paramSignature;this.isInMacroBranch=isInMacroBranch;this.sourceScope=0;this.branchSignature=EMPTY_BRANCH}var _proto=SymbolInfo.prototype;_proto.set=function set(ident,symbolType,astNode,dataType,paramSignature){this.ident=ident;this.type=symbolType;this.astNode=astNode;this.dataType=dataType;this.paramSignature=paramSignature};_proto.equal=function equal(symbol){if(symbol.type!==3&&this.type!==symbol.type)return false;if(this.type===1){if(!symbol.astNode&&!symbol.paramSignature)return true;var params=this.astNode.protoType.paramSig;var _symbol_paramSignature;var comparedParams=(_symbol_paramSignature=symbol.paramSignature)!=null?_symbol_paramSignature:symbol.astNode.protoType.paramSig;var length=params==null?void 0:params.length;if(length!==(comparedParams==null?void 0:comparedParams.length))return false;for(var i=0;i<length;i++){var t1=params[i],t2=comparedParams[i];if(t1===TypeAny||t2===TypeAny)continue;if(t1!==t2)return false}return true}return true};return SymbolInfo}();var FnSymbol=function(SymbolInfo){_inherits(FnSymbol,SymbolInfo);function FnSymbol(lexeme,astNode,localVariables,calledFunctions){if(localVariables===void 0)localVariables=[];if(calledFunctions===void 0)calledFunctions=[];var _this;var type=new SymbolDataType(astNode.protoType.returnType.type,astNode.protoType.returnType.typeSpecifier.lexeme,undefined,astNode.protoType.returnType.typeSpecifier.structDeclarations);_this=SymbolInfo.call(this,lexeme,ESymbolType.FN,astNode,type)||this;_this.localVariables=localVariables.slice();_this.calledFunctions=calledFunctions.slice();return _this}return FnSymbol}(SymbolInfo);var StructSymbol=function(SymbolInfo){_inherits(StructSymbol,SymbolInfo);function StructSymbol(lexeme,astNode){return SymbolInfo.call(this,lexeme,ESymbolType.STRUCT,astNode)||this}return StructSymbol}(SymbolInfo);var VarSymbol=function(SymbolInfo){_inherits(VarSymbol,SymbolInfo);function VarSymbol(ident,dataType,isGlobalVariable,initAst,isConst,isUniform){if(isConst===void 0)isConst=false;if(isUniform===void 0)isUniform=false;var _this;_this=SymbolInfo.call(this,ident,ESymbolType.VAR,initAst,dataType)||this;_this.isGlobalVariable=isGlobalVariable;_this.isConst=isConst;_this.isUniform=isUniform;return _this}return VarSymbol}(SymbolInfo);var TypeSystem=function(){function TypeSystem(){}TypeSystem.isAssignable=function isAssignable(target,source){if(target==undefined||source==undefined||target===TypeAny||source===TypeAny)return true;return target===source};TypeSystem.typeName=function typeName(type){if(typeof type===\"string\")return type;if(type==undefined)return\"unknown\";var _Keyword_type;return((_Keyword_type=Keyword[type])!=null?_Keyword_type:String(type)).toLowerCase()};TypeSystem.isSamplerType=function isSamplerType(type){switch(type){case Keyword.SAMPLER2D:case Keyword.SAMPLER3D:case Keyword.SAMPLER_CUBE:case Keyword.SAMPLER2D_SHADOW:case Keyword.SAMPLER_CUBE_SHADOW:case Keyword.SAMPLER2D_ARRAY:case Keyword.SAMPLER2D_ARRAY_SHADOW:case Keyword.I_SAMPLER2D:case Keyword.I_SAMPLER3D:case Keyword.I_SAMPLER_CUBE:case Keyword.I_SAMPLER2D_ARRAY:case Keyword.U_SAMPLER2D:case Keyword.U_SAMPLER3D:case Keyword.U_SAMPLER_CUBE:case Keyword.U_SAMPLER2D_ARRAY:return true;default:return false}};TypeSystem.isBoolType=function isBoolType(type){return type===Keyword.BOOL||type===Keyword.BVEC2||type===Keyword.BVEC3||type===Keyword.BVEC4};TypeSystem.isIntegerType=function isIntegerType(type){switch(type){case Keyword.INT:case Keyword.UINT:case Keyword.IVEC2:case Keyword.IVEC3:case Keyword.IVEC4:case Keyword.UVEC2:case Keyword.UVEC3:case Keyword.UVEC4:return true;default:return false}};TypeSystem.nonArithmeticOperand=function nonArithmeticOperand(type){return type!=undefined&&type!==TypeAny&&(this.isBoolType(type)||this.isSamplerType(type)||typeof type===\"string\")};TypeSystem.isScalarType=function isScalarType(type){return type===Keyword.FLOAT||type===Keyword.INT||type===Keyword.UINT||type===Keyword.BOOL};TypeSystem.arithmeticOperation=function arithmeticOperation(left,right,operator){if(left==undefined||right==undefined||left===TypeAny||right===TypeAny){return{resultType:TypeAny,valid:undefined}}var leftFamily=this._arithmeticFamily(left);var rightFamily=this._arithmeticFamily(right);if(!leftFamily||!rightFamily){return{resultType:TypeAny,valid:false,reason:\"non-arithmetic\"}}if(leftFamily!==rightFamily){return{resultType:TypeAny,valid:false,reason:\"family-mismatch\"}}if(operator===\"%\"&&leftFamily===\"float\"){return{resultType:TypeAny,valid:false,reason:\"integer-required\"}}var leftScalar=this.isScalarType(left);var rightScalar=this.isScalarType(right);if(leftScalar||rightScalar){return{resultType:leftScalar?right:left,valid:true}}var leftVectorSize=this.vectorComponentCount(left);var rightVectorSize=this.vectorComponentCount(right);var leftMatrix=this.matrixDimensions(left);var rightMatrix=this.matrixDimensions(right);if(leftVectorSize&&rightVectorSize){return leftVectorSize===rightVectorSize?{resultType:left,valid:true}:{resultType:TypeAny,valid:false,reason:\"shape-mismatch\"}}if(leftMatrix&&rightMatrix){if(operator===\"*\"){return leftMatrix.columns===rightMatrix.rows?{resultType:this._matrixType(rightMatrix.columns,leftMatrix.rows),valid:true}:{resultType:TypeAny,valid:false,reason:\"shape-mismatch\"}}return leftMatrix.columns===rightMatrix.columns&&leftMatrix.rows===rightMatrix.rows?{resultType:left,valid:true}:{resultType:TypeAny,valid:false,reason:\"shape-mismatch\"}}if(operator===\"*\"&&leftMatrix&&rightVectorSize){return leftMatrix.columns===rightVectorSize?{resultType:this._vectorType(leftMatrix.rows),valid:true}:{resultType:TypeAny,valid:false,reason:\"shape-mismatch\"}}if(operator===\"*\"&&leftVectorSize&&rightMatrix){return leftVectorSize===rightMatrix.rows?{resultType:this._vectorType(rightMatrix.columns),valid:true}:{resultType:TypeAny,valid:false,reason:\"shape-mismatch\"}}return{resultType:TypeAny,valid:false,reason:\"shape-mismatch\"}};TypeSystem.arithmeticResultType=function arithmeticResultType(a,b,operator){if(operator===void 0)operator=\"+\";return this.arithmeticOperation(a,b,operator).resultType};TypeSystem._arithmeticFamily=function _arithmeticFamily(type){if(typeof type===\"string\"||this.isBoolType(type)||this.isSamplerType(type))return undefined;if(this.matrixDimensions(type))return\"float\";switch(type){case Keyword.FLOAT:case Keyword.VEC2:case Keyword.VEC3:case Keyword.VEC4:return\"float\";case Keyword.INT:case Keyword.IVEC2:case Keyword.IVEC3:case Keyword.IVEC4:return\"int\";case Keyword.UINT:case Keyword.UVEC2:case Keyword.UVEC3:case Keyword.UVEC4:return\"uint\";default:return undefined}};TypeSystem._vectorType=function _vectorType(size){return size===2?Keyword.VEC2:size===3?Keyword.VEC3:size===4?Keyword.VEC4:TypeAny};TypeSystem._matrixType=function _matrixType(columns,rows){var key=\"MAT\"+columns+(columns===rows?\"\":\"X\"+rows);var _Keyword_key;return(_Keyword_key=Keyword[key])!=null?_Keyword_key:TypeAny};TypeSystem.vectorComponentCount=function vectorComponentCount(type){switch(type){case Keyword.VEC2:case Keyword.IVEC2:case Keyword.UVEC2:case Keyword.BVEC2:return 2;case Keyword.VEC3:case Keyword.IVEC3:case Keyword.UVEC3:case Keyword.BVEC3:return 3;case Keyword.VEC4:case Keyword.IVEC4:case Keyword.UVEC4:case Keyword.BVEC4:return 4;default:return 0}};TypeSystem.matrixComponentCount=function matrixComponentCount(type){var dimensions=this.matrixDimensions(type);return dimensions?dimensions.columns*dimensions.rows:0};TypeSystem.matrixDimensions=function matrixDimensions(type){switch(type){case Keyword.MAT2:return{columns:2,rows:2};case Keyword.MAT3:return{columns:3,rows:3};case Keyword.MAT4:return{columns:4,rows:4};case Keyword.MAT2X3:return{columns:2,rows:3};case Keyword.MAT3X2:return{columns:3,rows:2};case Keyword.MAT2X4:return{columns:2,rows:4};case Keyword.MAT4X2:return{columns:4,rows:2};case Keyword.MAT3X4:return{columns:3,rows:4};case Keyword.MAT4X3:return{columns:4,rows:3};default:return undefined}};return TypeSystem}();var ParserUtils=function(){function ParserUtils(){}ParserUtils.unwrapNodeByType=function unwrapNodeByType(node,type){var child=node.children[0];if(_instanceof(child,BaseToken))return;if(child.nt===type)return child;return ParserUtils.unwrapNodeByType(child,type)};ParserUtils.parseMacroParamList=function parseMacroParamList(lexeme){var inner=lexeme.replace(/^\\s*\\(\\s*|\\s*\\)\\s*$/g,\"\");if(!inner)return[];return inner.split(\",\").map(function(s){return s.trim()}).filter(Boolean)};ParserUtils.unwrapBareIdentifier=function unwrapBareIdentifier(node,options){var cur=node;while(true){if(_instanceof(cur,ASTNode.VariableIdentifier))return cur;if(options.allowParens&&_instanceof(cur,ASTNode.PrimaryExpression)&&cur.children.length===3){var inner=cur.children[1];if(!_instanceof(inner,TreeNode))return undefined;cur=inner;continue}if(_instanceof(cur,ASTNode.ExpressionAstNode)&&cur.children.length===1){var child=cur.children[0];if(!_instanceof(child,TreeNode))return undefined;cur=child;continue}return undefined}};ParserUtils.extractDirectIdentLexeme=function extractDirectIdentLexeme(expr){var ident=ParserUtils.unwrapBareIdentifier(expr,{allowParens:true});if(!ident)return null;var child=ident.children[0];return _instanceof(child,BaseToken)?child.lexeme:null};ParserUtils.lastStatement=function lastStatement(node){if(_instanceof(node,ASTNode.Statement)||_instanceof(node,ASTNode.SimpleStatement)||_instanceof(node,ASTNode.CompoundStatement)||_instanceof(node,ASTNode.CompoundStatementNoScope)){if(node.children.length===2)return;for(var _iterator=_create_for_of_iterator_helper_loose(node.children),_step;!(_step=_iterator()).done;){var child=_step.value;if(!_instanceof(child,TreeNode))continue;var statement=ParserUtils.lastStatement(child);if(statement)return statement}return}if(_instanceof(node,ASTNode.StatementList)){for(var i=node.children.length-1;i>=0;i--){var child1=node.children[i];if(!_instanceof(child1,TreeNode))continue;var statement1=ParserUtils.lastStatement(child1);if(statement1)return statement1}return}return node};ParserUtils.swizzleError=function swizzleError(baseType,swizzle,size){if(size===void 0)size=TypeSystem.vectorComponentCount(baseType);if(size===0)return null;if(swizzle.length<1||swizzle.length>4){return'Invalid swizzle \".'+swizzle+'\": a vector swizzle selects 1-4 components.'}var sets=ParserUtils._swizzleSets;var setIndex=-1;for(var _iterator=_create_for_of_iterator_helper_loose(swizzle),_step;!(_step=_iterator()).done;){var ch=_step.value;var matched=false;for(var s=0;s<sets.length;s++){var idx=sets[s].indexOf(ch);if(idx===-1)continue;if(setIndex===-1)setIndex=s;else if(setIndex!==s)return'Invalid swizzle \".'+swizzle+'\": components must come from one set (xyzw, rgba, or stpq).';if(idx>=size)return'Invalid swizzle \".'+swizzle+\"\\\": component '\"+ch+\"' is out of range for a \"+size+\"-component vector.\";matched=true;break}if(!matched)return'Invalid swizzle \".'+swizzle+\"\\\": '\"+ch+\"' is not a vector component.\"}return null};ParserUtils.constNumericValue=function constNumericValue(node){var cur=node;while(true){if(_instanceof(cur,ASTNode.PrimaryExpression)){if(cur.children.length===3){var inner=cur.children[1];if(!_instanceof(inner,TreeNode))return undefined;cur=inner;continue}var leaf=cur.children[0];if(_instanceof(leaf,BaseToken)&&(leaf.type===ETokenType.INT_CONSTANT||leaf.type===ETokenType.FLOAT_CONSTANT)){var n=Number(leaf.lexeme);return Number.isNaN(n)?undefined:n}return undefined}if(_instanceof(cur,ASTNode.ExpressionAstNode)&&cur.children.length===1){var child=cur.children[0];if(!_instanceof(child,TreeNode))return undefined;cur=child;continue}return undefined}};ParserUtils.constIntegerValue=function constIntegerValue(node){return ParserUtils._constIntegerValue(node,new Set)};ParserUtils._constIntegerValue=function _constIntegerValue(node,resolving){if(_instanceof(node,ASTNode.PrimaryExpression)){if(node.children.length===3){var inner=node.children[1];return _instanceof(inner,TreeNode)?ParserUtils._constIntegerValue(inner,resolving):undefined}var leaf=node.children[0];if(_instanceof(leaf,BaseToken)&&leaf.type===ETokenType.INT_CONSTANT){var value=Number(leaf.lexeme.replace(/[uU]$/,\"\"));return Number.isSafeInteger(value)?ParserUtils._normalizeInteger(value,node.type):undefined}}var ident=ParserUtils.unwrapBareIdentifier(node,{allowParens:true});if(ident){var child=ident.children[0];if(!_instanceof(child,BaseToken))return;var symbols=ident.resolvedSymbols();if(!symbols.length)return;var resolvedValue;for(var _iterator=_create_for_of_iterator_helper_loose(symbols),_step;!(_step=_iterator()).done;){var symbol=_step.value;if(!_instanceof(symbol,VarSymbol)||!symbol.isConst||resolving.has(symbol))return;var initializer=ParserUtils._constInitializer(symbol);if(!initializer)return;resolving.add(symbol);var value1=ParserUtils._constIntegerValue(initializer,resolving);resolving.delete(symbol);if(value1===undefined||resolvedValue!==undefined&&resolvedValue!==value1)return;resolvedValue=value1}return resolvedValue}if(_instanceof(node,ASTNode.FunctionCallGeneric)){var fn=node.children[0];if(fn.ident!==\"int\"&&fn.ident!==\"uint\")return;var params=node.children[2];if(!_instanceof(params,ASTNode.FunctionCallParameterList)||params.paramNodes.length!==1)return;var value2=ParserUtils._constIntegerValue(params.paramNodes[0],resolving);return value2===undefined?undefined:ParserUtils._normalizeInteger(value2,node.type)}var children=node.children;var nodeType=_instanceof(node,ASTNode.ExpressionAstNode)?node.type:undefined;if(children.length===1){var child1=children[0];return _instanceof(child1,TreeNode)?ParserUtils._constIntegerValue(child1,resolving):undefined}if(_instanceof(node,ASTNode.ConditionalExpression)&&children.length===5){var condition=children[0];var whenTrue=children[2];var whenFalse=children[4];if(!_instanceof(condition,TreeNode)||!_instanceof(whenTrue,TreeNode)||!_instanceof(whenFalse,TreeNode)){return}var conditionValue=ParserUtils._constIntegerValue(condition,resolving);return conditionValue===undefined?undefined:ParserUtils._constIntegerValue(conditionValue!==0?whenTrue:whenFalse,resolving)}if(children.length===2&&_instanceof(children[1],TreeNode)){var operator=ParserUtils._operatorLexeme(children[0]);var operand=ParserUtils._constIntegerValue(children[1],resolving);if(operator===undefined||operand===undefined)return;var value3;if(operator===\"+\")value3=operand;else if(operator===\"-\")value3=-operand;else if(operator===\"~\")value3=~operand;else if(operator===\"!\")value3=operand===0?1:0;else return;return ParserUtils._normalizeInteger(value3,nodeType)}if(children.length===3&&_instanceof(children[0],TreeNode)&&_instanceof(children[2],TreeNode)){if(_instanceof(node,ASTNode.AssignmentExpression))return;var operator1=ParserUtils._operatorLexeme(children[1]);var left=ParserUtils._constIntegerValue(children[0],resolving);var right=ParserUtils._constIntegerValue(children[2],resolving);if(operator1===undefined||left===undefined||right===undefined)return;var value4;switch(operator1){case\"+\":value4=left+right;break;case\"-\":value4=left-right;break;case\"*\":value4=left*right;break;case\"/\":if(right===0)return;value4=Math.trunc(left/right);break;case\"%\":if(right===0)return;value4=left%right;break;case\"<<\":value4=left<<right;break;case\">>\":value4=nodeType===Keyword.UINT?left>>>right:left>>right;break;case\"&\":value4=left&right;break;case\"^\":value4=left^right;break;case\"|\":value4=left|right;break;case\"&&\":value4=left!==0&&right!==0?1:0;break;case\"^^\":value4=left!==0!==(right!==0)?1:0;break;case\"||\":value4=left!==0||right!==0?1:0;break;case\"<\":value4=left<right?1:0;break;case\">\":value4=left>right?1:0;break;case\"<=\":value4=left<=right?1:0;break;case\">=\":value4=left>=right?1:0;break;case\"==\":value4=left===right?1:0;break;case\"!=\":value4=left!==right?1:0;break;default:return}return ParserUtils._normalizeInteger(value4,nodeType)}return};ParserUtils._constInitializer=function _constInitializer(symbol){var declaration=symbol.astNode;if(_instanceof(declaration,ASTNode.InitDeclaratorList)||_instanceof(declaration,ASTNode.VariableDeclaration)){var _declaration_declarator;return(_declaration_declarator=declaration.declarator)==null?void 0:_declaration_declarator.initializer}return _instanceof(declaration,TreeNode)?declaration:undefined};ParserUtils._operatorLexeme=function _operatorLexeme(node){if(_instanceof(node,BaseToken))return node.lexeme;if(!_instanceof(node,TreeNode))return;for(var _iterator=_create_for_of_iterator_helper_loose(node.children),_step;!(_step=_iterator()).done;){var child=_step.value;var lexeme=ParserUtils._operatorLexeme(child);if(lexeme!==undefined)return lexeme}return};ParserUtils._normalizeInteger=function _normalizeInteger(value,type){return type===Keyword.UINT?value>>>0:value|0};ParserUtils.hasQualifier=function hasQualifier(node,keyword){for(var _iterator=_create_for_of_iterator_helper_loose(node.children),_step;!(_step=_iterator()).done;){var child=_step.value;if(_instanceof(child,BaseToken)){if(child.type===keyword)return true}else if(_instanceof(child,TreeNode)&&ParserUtils.hasQualifier(child,keyword)){return true}}return false};ParserUtils.isConstExpr=function isConstExpr(node){if(ParserUtils.constNumericValue(node)!==undefined)return true;if(ParserUtils._isBooleanLiteral(node))return true;var ident=ParserUtils.unwrapBareIdentifier(node,{allowParens:true});if(ident){var child=ident.children[0];if(_instanceof(child,ASTNode.MacroCallSymbol)||_instanceof(child,ASTNode.MacroCallFunction))return true;if(!_instanceof(child,BaseToken))return false;var symbols=ident.resolvedSymbols();return symbols.length>0&&symbols.every(function(symbol){return _instanceof(symbol,VarSymbol)&&symbol.isConst})}if(_instanceof(node,ASTNode.FunctionCallGeneric)){var fnIdent=node.children[0];var isConstructor=fnIdent.isBuiltin;var isBuiltinFn=typeof fnIdent.ident===\"string\"&&BuiltinFunction.isExist(fnIdent.ident);if(!isConstructor&&!isBuiltinFn)return false;var list=node.children[2];if(!_instanceof(list,ASTNode.FunctionCallParameterList))return true;for(var _iterator=_create_for_of_iterator_helper_loose(list.paramNodes),_step;!(_step=_iterator()).done;){var arg=_step.value;if(_instanceof(arg,TreeNode)&&!ParserUtils.isConstExpr(arg))return false}return true}if(_instanceof(node,ASTNode.ExpressionAstNode)){var sawSubExpr=false;for(var _iterator1=_create_for_of_iterator_helper_loose(node.children),_step1;!(_step1=_iterator1()).done;){var c=_step1.value;if(_instanceof(c,ASTNode.ExpressionAstNode)){sawSubExpr=true;if(!ParserUtils.isConstExpr(c))return false}}return sawSubExpr}return false};ParserUtils._isBooleanLiteral=function _isBooleanLiteral(node){var current=node;while(true){if(_instanceof(current,ASTNode.PrimaryExpression)){if(current.children.length===3){var child=current.children[1];if(!_instanceof(child,TreeNode))return false;current=child;continue}var token=current.children[0];return _instanceof(token,BaseToken)&&(token.type===Keyword.True||token.type===Keyword.False)}if(_instanceof(current,ASTNode.ExpressionAstNode)&¤t.children.length===1){var child1=current.children[0];if(!_instanceof(child1,TreeNode))return false;current=child1;continue}return false}};ParserUtils.firstNonArithmeticOperand=function firstNonArithmeticOperand(a,b){for(var _i=0,_iter=[a,b];_i<_iter.length;_i++){var n=_iter[_i];if(_instanceof(n,ASTNode.ExpressionAstNode)&&TypeSystem.nonArithmeticOperand(n.type))return n}return undefined};ParserUtils.toString=function toString(sm){if(this.isTerminal(sm)){var _ETokenType_sm;return(_ETokenType_sm=ETokenType[sm])!=null?_ETokenType_sm:Keyword[sm]}return NoneTerminal[sm]};ParserUtils.isTerminal=function isTerminal(sm){return sm<NoneTerminal.START};return ParserUtils}();ParserUtils._swizzleSets=[\"xyzw\",\"rgba\",\"stpq\"];var SymbolType=function(SymbolDataType){_inherits(SymbolType,SymbolDataType);function SymbolType(){return SymbolDataType.apply(this,arguments)||this}return SymbolType}(SymbolDataType);var StructProp=function StructProp(typeInfo,ident,mrtIndex,isInMacroBranch,isFlat){if(isInMacroBranch===void 0)isInMacroBranch=false;if(isFlat===void 0)isFlat=false;this.typeInfo=typeInfo;this.ident=ident;this.mrtIndex=mrtIndex;this.isInMacroBranch=isInMacroBranch;this.isFlat=isFlat};var TEXTURE_SAMPLING_BUILTINS=new Set([\"texture\",\"texture2D\",\"texture2DLod\",\"texture2DLodEXT\",\"textureCube\",\"textureCubeLod\",\"textureCubeLodEXT\",\"textureLod\",\"textureOffset\",\"textureProj\",\"textureProjLod\",\"textureProjOffset\",\"textureSize\",\"texelFetch\"]);var EMPTY_FN_SYMBOLS=Object.freeze([]);var EMPTY_STRUCT_DECLARATIONS=Object.freeze([]);var EMPTY_VALUE_SYMBOLS=Object.freeze([]);function ASTNodeDecorator(nonTerminal){return function(ASTNode){ASTNode.prototype.nt=nonTerminal}}var TreeNode=function(){function TreeNode(){this._branch=EMPTY_BRANCH;this._inMacroDefinition=false}var _proto=TreeNode.prototype;_proto.set=function set(loc,children){this._location=loc;this._children=children;this._parent=undefined;var branch=EMPTY_BRANCH;var inheritedBranch=false;var inMacroDefinition=false;for(var _iterator=_create_for_of_iterator_helper_loose(children),_step;!(_step=_iterator()).done;){var child=_step.value;if(_instanceof(child,TreeNode)){child._parent=this;if(!inheritedBranch){branch=child._branch;inMacroDefinition=child._inMacroDefinition;inheritedBranch=true}}else if(!inheritedBranch&&_instanceof(child,BaseToken)){branch=child.branch;inMacroDefinition=child.inMacroDefinition;inheritedBranch=true}}this._branch=branch;this._inMacroDefinition=inMacroDefinition;this.init()};_proto.init=function init(){};_proto.codeGen=function codeGen(visitor){return visitor.cache(this,visitor.defaultCodeGen(this.children))};_proto.semanticAnalyze=function semanticAnalyze(sa){};_create_class(TreeNode,[{key:\"parent\",get:function get(){return this._parent}},{key:\"children\",get:function get(){return this._children}},{key:\"location\",get:function get(){return this._location}}]);return TreeNode}();(function(ASTNodes){function mergeBranchSignatures(left,right){if(!left.length)return right;if(!right.length)return left;var merged=left.slice();for(var _iterator=_create_for_of_iterator_helper_loose(right),_step;!(_step=_iterator()).done;){var constraint=_step.value;if(merged.indexOf(constraint)===-1)merged.push(constraint)}return merged}function appendMacroReference(references,candidate){var duplicate=references.find(function(reference){return reference.name===candidate.name&&reference.formalParameterIndex===candidate.formalParameterIndex&&reference.unresolved===candidate.unresolved&&reference.branch.length===candidate.branch.length&&reference.branch.every(function(constraint,index){return constraint===candidate.branch[index]})&&reference.replacementMemberOwner===candidate.replacementMemberOwner&&reference.requiresRuntimeOwnerExpansion===candidate.requiresRuntimeOwnerExpansion});if(duplicate){if(candidate.isValueIdentity)duplicate.isValueIdentity=true}else{references.push(candidate)}}function appendSubstitutedValueIdentityReferences(node,template,references,names){var identity=ParserUtils.unwrapBareIdentifier(node,{allowParens:true});if(!identity)return;var child=identity.children[0];if(_instanceof(child,BaseToken)){appendMacroReference(references,{name:child.lexeme,branch:mergeBranchSignatures(template.branch,identity._branch),isValueIdentity:true});if(names.indexOf(child.lexeme)===-1)names.push(child.lexeme);return}if(!(_instanceof(child,MacroCallSymbol)||_instanceof(child,MacroCallFunction)))return;var appendedIdentity=false;for(var _iterator=_create_for_of_iterator_helper_loose(child.referenceSymbols),_step;!(_step=_iterator()).done;){var actualReference=_step.value;if(!actualReference.isValueIdentity)continue;if(actualReference.unresolved){appendMacroReference(references,{unresolved:true,branch:mergeBranchSignatures(template.branch,actualReference.branch),isValueIdentity:true});appendedIdentity=true;continue}if(actualReference.name===undefined)continue;appendMacroReference(references,{name:actualReference.name,branch:mergeBranchSignatures(template.branch,actualReference.branch),isValueIdentity:true});if(names.indexOf(actualReference.name)===-1)names.push(actualReference.name);appendedIdentity=true}if(!appendedIdentity&&!child.visibleHasAstValue&&child.macroName){appendMacroReference(references,{name:child.macroName,branch:mergeBranchSignatures(template.branch,identity._branch),isValueIdentity:true});if(names.indexOf(child.macroName)===-1)names.push(child.macroName)}}function appendSubstitutedOwnerReferences(node,template,references,names){if(template.isValueIdentity){appendSubstitutedValueIdentityReferences(node,template,references,names);return}if(_instanceof(node,VariableIdentifier)){var child=node.children[0];if(_instanceof(child,BaseToken)){appendMacroReference(references,{name:child.lexeme,branch:mergeBranchSignatures(template.branch,node._branch),replacementMemberOwner:template.replacementMemberOwner,requiresRuntimeOwnerExpansion:true});if(names.indexOf(child.lexeme)===-1)names.push(child.lexeme)}else if(_instanceof(child,MacroCallSymbol)||_instanceof(child,MacroCallFunction)){var actualReferences=child.referenceSymbols;for(var _iterator=_create_for_of_iterator_helper_loose(actualReferences),_step;!(_step=_iterator()).done;){var actualReference=_step.value;if(actualReference.unresolved){appendMacroReference(references,{unresolved:true,branch:mergeBranchSignatures(template.branch,actualReference.branch),replacementMemberOwner:template.replacementMemberOwner,requiresRuntimeOwnerExpansion:true});continue}if(actualReference.name===undefined)continue;appendMacroReference(references,{name:actualReference.name,branch:mergeBranchSignatures(template.branch,actualReference.branch),replacementMemberOwner:template.replacementMemberOwner,requiresRuntimeOwnerExpansion:true});if(names.indexOf(actualReference.name)===-1)names.push(actualReference.name)}if(!actualReferences.length&&child.macroName){appendMacroReference(references,{name:child.macroName,branch:mergeBranchSignatures(template.branch,node._branch),replacementMemberOwner:template.replacementMemberOwner,requiresRuntimeOwnerExpansion:true});if(names.indexOf(child.macroName)===-1)names.push(child.macroName)}}return}for(var _iterator1=_create_for_of_iterator_helper_loose(node.children),_step1;!(_step1=_iterator1()).done;){var child1=_step1.value;if(_instanceof(child1,TreeNode))appendSubstitutedOwnerReferences(child1,template,references,names)}}function _unwrapToken(node){if(_instanceof(node,BaseToken)){return node}throw\"not token\"}ASTNodes._unwrapToken=_unwrapToken;function get(type,sa,loc,children){var node=sa.objectPool?sa.objectPool.createNode(type):new type;node.set(loc,children);if(!sa.diagnosticsEnabled){node.semanticAnalyze(sa);sa.semanticStack.push(node);return}var prev=sa.symbolTableStack._currentBranch;var previousMacroDefinition=sa.inMacroDefinition;sa.symbolTableStack._currentBranch=node._branch;sa.inMacroDefinition=node._inMacroDefinition;node.semanticAnalyze(sa);sa.symbolTableStack._currentBranch=prev;sa.inMacroDefinition=previousMacroDefinition;sa.semanticStack.push(node)}ASTNodes.get=get;var TrivialNode=function(TreeNode){_inherits(TrivialNode,TreeNode);function TrivialNode(){return TreeNode.apply(this,arguments)||this}return TrivialNode}(TreeNode);ASTNodes.TrivialNode=TrivialNode;TrivialNode=__decorate([ASTNodeDecorator(NoneTerminal._ignore)],TrivialNode);var ScopeBrace=function(TreeNode){_inherits(ScopeBrace,TreeNode);function ScopeBrace(){return TreeNode.apply(this,arguments)||this}var _proto=ScopeBrace.prototype;_proto.semanticAnalyze=function semanticAnalyze(sa){sa.pushScope()};return ScopeBrace}(TreeNode);ASTNodes.ScopeBrace=ScopeBrace;ScopeBrace=__decorate([ASTNodeDecorator(NoneTerminal.scope_brace)],ScopeBrace);var ScopeEndBrace=function(TreeNode){_inherits(ScopeEndBrace,TreeNode);function ScopeEndBrace(){return TreeNode.apply(this,arguments)||this}var _proto=ScopeEndBrace.prototype;_proto.semanticAnalyze=function semanticAnalyze(sa){sa.popScope()};return ScopeEndBrace}(TreeNode);ASTNodes.ScopeEndBrace=ScopeEndBrace;ScopeEndBrace=__decorate([ASTNodeDecorator(NoneTerminal.scope_end_brace)],ScopeEndBrace);var JumpStatement=function(TreeNode){_inherits(JumpStatement,TreeNode);function JumpStatement(){return TreeNode.apply(this,arguments)||this}var _proto=JumpStatement.prototype;_proto.codeGen=function codeGen(visitor){return visitor.cache(this,visitor.visitJumpStatement(this))};return JumpStatement}(TreeNode);ASTNodes.JumpStatement=JumpStatement;JumpStatement=__decorate([ASTNodeDecorator(NoneTerminal.jump_statement)],JumpStatement);var ConditionOpt=function(TreeNode){_inherits(ConditionOpt,TreeNode);function ConditionOpt(){return TreeNode.apply(this,arguments)||this}return ConditionOpt}(TreeNode);ASTNodes.ConditionOpt=ConditionOpt;ConditionOpt=__decorate([ASTNodeDecorator(NoneTerminal.conditionopt)],ConditionOpt);var ForRestStatement=function(TreeNode){_inherits(ForRestStatement,TreeNode);function ForRestStatement(){return TreeNode.apply(this,arguments)||this}return ForRestStatement}(TreeNode);ASTNodes.ForRestStatement=ForRestStatement;ForRestStatement=__decorate([ASTNodeDecorator(NoneTerminal.for_rest_statement)],ForRestStatement);var Condition=function(TreeNode){_inherits(Condition,TreeNode);function Condition(){return TreeNode.apply(this,arguments)||this}return Condition}(TreeNode);ASTNodes.Condition=Condition;Condition=__decorate([ASTNodeDecorator(NoneTerminal.condition)],Condition);var ForInitStatement=function(TreeNode){_inherits(ForInitStatement,TreeNode);function ForInitStatement(){return TreeNode.apply(this,arguments)||this}return ForInitStatement}(TreeNode);ASTNodes.ForInitStatement=ForInitStatement;ForInitStatement=__decorate([ASTNodeDecorator(NoneTerminal.for_init_statement)],ForInitStatement);var IterationStatement=function(TreeNode){_inherits(IterationStatement,TreeNode);function IterationStatement(){return TreeNode.apply(this,arguments)||this}var _proto=IterationStatement.prototype;_proto.semanticAnalyze=function semanticAnalyze(sa){if(sa.diagnosticsEnabled)sa.popScope()};return IterationStatement}(TreeNode);ASTNodes.IterationStatement=IterationStatement;IterationStatement=__decorate([ASTNodeDecorator(NoneTerminal.iteration_statement)],IterationStatement);var SelectionStatement=function(TreeNode){_inherits(SelectionStatement,TreeNode);function SelectionStatement(){return TreeNode.apply(this,arguments)||this}return SelectionStatement}(TreeNode);ASTNodes.SelectionStatement=SelectionStatement;SelectionStatement=__decorate([ASTNodeDecorator(NoneTerminal.selection_statement)],SelectionStatement);var ExpressionStatement=function(TreeNode){_inherits(ExpressionStatement,TreeNode);function ExpressionStatement(){return TreeNode.apply(this,arguments)||this}return ExpressionStatement}(TreeNode);ASTNodes.ExpressionStatement=ExpressionStatement;ExpressionStatement=__decorate([ASTNodeDecorator(NoneTerminal.expression_statement)],ExpressionStatement);var ExpressionAstNode=function(TreeNode){_inherits(ExpressionAstNode,TreeNode);function ExpressionAstNode(){return TreeNode.apply(this,arguments)||this}var _proto=ExpressionAstNode.prototype;_proto.init=function init(){this._type=undefined};_create_class(ExpressionAstNode,[{key:\"type\",get:function get(){var _this__type;return(_this__type=this._type)!=null?_this__type:TypeAny},set:function set(t){this._type=t}}]);return ExpressionAstNode}(TreeNode);ASTNodes.ExpressionAstNode=ExpressionAstNode;var InitializerList=function(ExpressionAstNode){_inherits(InitializerList,ExpressionAstNode);function InitializerList(){return ExpressionAstNode.apply(this,arguments)||this}var _proto=InitializerList.prototype;_proto.semanticAnalyze=function semanticAnalyze(sa){var init=this.children[0];this.type=init.type};return InitializerList}(ExpressionAstNode);ASTNodes.InitializerList=InitializerList;InitializerList=__decorate([ASTNodeDecorator(NoneTerminal.initializer_list)],InitializerList);var Initializer=function(ExpressionAstNode){_inherits(Initializer,ExpressionAstNode);function Initializer(){return ExpressionAstNode.apply(this,arguments)||this}var _proto=Initializer.prototype;_proto.semanticAnalyze=function semanticAnalyze(sa){if(this.children.length===1){this.type=this.children[0].type}else{this.type=this.children[1].type}};return Initializer}(ExpressionAstNode);ASTNodes.Initializer=Initializer;Initializer=__decorate([ASTNodeDecorator(NoneTerminal.initializer)],Initializer);var SingleDeclaration=function(TreeNode){_inherits(SingleDeclaration,TreeNode);function SingleDeclaration(){return TreeNode.apply(this,arguments)||this}var _proto=SingleDeclaration.prototype;_proto.init=function init(){this.typeSpecifier=undefined;this.arraySpecifier=undefined;this.isConst=false;this.declarator=undefined};_proto.semanticAnalyze=function semanticAnalyze(sa){var children=this.children;var childrenLen=children.length;var fullyType=children[0];var typeSpecifier=fullyType.typeSpecifier;this.typeSpecifier=typeSpecifier;this.arraySpecifier=typeSpecifier.arraySpecifier;var id=children[1];var isConst=fullyType.isConst;this.isConst=isConst;var symbolType;var initializer;if(childrenLen===2||childrenLen===4){symbolType=new SymbolType(fullyType.type,typeSpecifier.lexeme,this.arraySpecifier,typeSpecifier.structDeclarations);initializer=children[3]}else{var arraySpecifier=children[2];this.arraySpecifier=arraySpecifier;symbolType=new SymbolType(fullyType.type,typeSpecifier.lexeme,this.arraySpecifier,typeSpecifier.structDeclarations);initializer=children[4]}var sm=sa.assignSourceScope(new VarSymbol(id.lexeme,symbolType,false,initializer,isConst),id.location);this.declarator={identifier:id,typeInfo:symbolType,initializer:initializer,isConst:isConst,isGlobal:false,symbol:sm};sa.recordFunctionVariable(sm);var insertResult=sa.symbolTableStack.insert(sm,id.branch);sa.reportRedefinition(id.location,sm,insertResult)};_proto.codeGen=function codeGen(visitor){return visitor.cache(this,visitor.visitSingleDeclaration(this))};return SingleDeclaration}(TreeNode);ASTNodes.SingleDeclaration=SingleDeclaration;SingleDeclaration=__decorate([ASTNodeDecorator(NoneTerminal.single_declaration)],SingleDeclaration);var FullySpecifiedType=function(TreeNode){_inherits(FullySpecifiedType,TreeNode);function FullySpecifiedType(){return TreeNode.apply(this,arguments)||this}var _proto=FullySpecifiedType.prototype;_proto.semanticAnalyze=function semanticAnalyze(_){var children=this.children;this.isConst=children.length===2&&ParserUtils.hasQualifier(children[0],Keyword.CONST);this.typeSpecifier=children.length===1?children[0]:children[1];this.type=this.typeSpecifier.type};return FullySpecifiedType}(TreeNode);ASTNodes.FullySpecifiedType=FullySpecifiedType;FullySpecifiedType=__decorate([ASTNodeDecorator(NoneTerminal.fully_specified_type)],FullySpecifiedType);var TypeQualifier=function(TreeNode){_inherits(TypeQualifier,TreeNode);function TypeQualifier(){return TreeNode.apply(this,arguments)||this}return TypeQualifier}(TreeNode);ASTNodes.TypeQualifier=TypeQualifier;TypeQualifier=__decorate([ASTNodeDecorator(NoneTerminal.type_qualifier)],TypeQualifier);var SingleTypeQualifier=function(TreeNode){_inherits(SingleTypeQualifier,TreeNode);function SingleTypeQualifier(){return TreeNode.apply(this,arguments)||this}var _proto=SingleTypeQualifier.prototype;_proto.semanticAnalyze=function semanticAnalyze(sa){var child=this.children[0];if(_instanceof(child,BaseToken)){this.qualifier=child.type;this.lexeme=child.lexeme}else{this.qualifier=child.qualifier;this.lexeme=child.lexeme}};return SingleTypeQualifier}(TreeNode);ASTNodes.SingleTypeQualifier=SingleTypeQualifier;SingleTypeQualifier=__decorate([ASTNodeDecorator(NoneTerminal.single_type_qualifier)],SingleTypeQualifier);var BasicTypeQualifier=function(TreeNode){_inherits(BasicTypeQualifier,TreeNode);function BasicTypeQualifier(){return TreeNode.apply(this,arguments)||this}var _proto=BasicTypeQualifier.prototype;_proto.semanticAnalyze=function semanticAnalyze(sa){var token=this.children[0];this.qualifier=token.type;this.lexeme=token.lexeme};return BasicTypeQualifier}(TreeNode);var StorageQualifier=function(BasicTypeQualifier){_inherits(StorageQualifier,BasicTypeQualifier);function StorageQualifier(){return BasicTypeQualifier.apply(this,arguments)||this}return StorageQualifier}(BasicTypeQualifier);ASTNodes.StorageQualifier=StorageQualifier;StorageQualifier=__decorate([ASTNodeDecorator(NoneTerminal.storage_qualifier)],StorageQualifier);var PrecisionQualifier=function(BasicTypeQualifier){_inherits(PrecisionQualifier,BasicTypeQualifier);function PrecisionQualifier(){return BasicTypeQualifier.apply(this,arguments)||this}return PrecisionQualifier}(BasicTypeQualifier);ASTNodes.PrecisionQualifier=PrecisionQualifier;PrecisionQualifier=__decorate([ASTNodeDecorator(NoneTerminal.precision_qualifier)],PrecisionQualifier);var InterpolationQualifier=function(BasicTypeQualifier){_inherits(InterpolationQualifier,BasicTypeQualifier);function InterpolationQualifier(){return BasicTypeQualifier.apply(this,arguments)||this}return InterpolationQualifier}(BasicTypeQualifier);ASTNodes.InterpolationQualifier=InterpolationQualifier;InterpolationQualifier=__decorate([ASTNodeDecorator(NoneTerminal.interpolation_qualifier)],InterpolationQualifier);var InvariantQualifier=function(BasicTypeQualifier){_inherits(InvariantQualifier,BasicTypeQualifier);function InvariantQualifier(){return BasicTypeQualifier.apply(this,arguments)||this}return InvariantQualifier}(BasicTypeQualifier);ASTNodes.InvariantQualifier=InvariantQualifier;InvariantQualifier=__decorate([ASTNodeDecorator(NoneTerminal.invariant_qualifier)],InvariantQualifier);var TypeSpecifier=function(TreeNode){_inherits(TypeSpecifier,TreeNode);function TypeSpecifier(){return TreeNode.apply(this,arguments)||this}var _proto=TypeSpecifier.prototype;_proto.init=function init(){this.arraySize=undefined;this.structDeclarations=EMPTY_STRUCT_DECLARATIONS;this.structDependencies=EMPTY_STRUCT_DECLARATIONS};_proto.semanticAnalyze=function semanticAnalyze(sa){var _children_;var children=this.children;var firstChild=children[0];this.type=firstChild.type;this.lexeme=firstChild.lexeme;this.arraySize=children==null?void 0:(_children_=children[1])==null?void 0:_children_.size;this.isCustom=typeof this.type===\"string\";if(this.isCustom){var lookup=sa.lookupSymbol;lookup.set(this.lexeme,ESymbolType.STRUCT);var structs=sa.symbolTableStack.lookupAll(lookup,true,sa.structScratch,this._branch);this.structDeclarations=structs.length?structs.map(function(symbol){return symbol.astNode}):EMPTY_STRUCT_DECLARATIONS;this.structDependencies=this.structDeclarations}else if(_instanceof(firstChild.children[0],MacroCallSymbol)){var dependencies=[];for(var _iterator=_create_for_of_iterator_helper_loose(firstChild.children[0].referenceSymbols),_step;!(_step=_iterator()).done;){var reference=_step.value;if(!reference.name)continue;sa.lookupSymbol.set(reference.name,ESymbolType.STRUCT);var symbols=sa.symbolTableStack.lookupAll(sa.lookupSymbol,true,sa.structScratch,reference.branch);for(var _iterator1=_create_for_of_iterator_helper_loose(symbols),_step1;!(_step1=_iterator1()).done;){var symbol=_step1.value;var declaration=symbol.astNode;if(!dependencies.includes(declaration))dependencies.push(declaration)}}if(dependencies.length)this.structDependencies=dependencies}};_proto.codeGen=function codeGen(visitor){return visitor.cache(this,visitor.visitTypeSpecifier(this))};_create_class(TypeSpecifier,[{key:\"arraySpecifier\",get:function get(){return this.children[1]}}]);return TypeSpecifier}(TreeNode);ASTNodes.TypeSpecifier=TypeSpecifier;TypeSpecifier=__decorate([ASTNodeDecorator(NoneTerminal.type_specifier)],TypeSpecifier);var ArraySpecifier=function(TreeNode){_inherits(ArraySpecifier,TreeNode);function ArraySpecifier(){return TreeNode.apply(this,arguments)||this}var _proto=ArraySpecifier.prototype;_proto.init=function init(){this.size=undefined};_proto.semanticAnalyze=function semanticAnalyze(sa){var integerConstantExpr=this.children[1];if(!_instanceof(integerConstantExpr,IntegerConstantExpression))return;this.size=integerConstantExpr.value;var exprChildren=integerConstantExpr.children;if(this.size===undefined&&exprChildren.length===1&&_instanceof(exprChildren[0],VariableIdentifier)){var bare=exprChildren[0].children[0];if(_instanceof(bare,BaseToken)&&!sa.macroDefineList[bare.lexeme]){var lookup=sa.lookupSymbol;lookup.set(bare.lexeme,ESymbolType.VAR);var symbols=sa.symbolTableStack.lookupAll(lookup,true,sa.arraySymbolScratch,this._branch);if(!symbols.length)return;var firstIsConst=symbols[0].isConst;var divergent=symbols.some(function(symbol){return symbol.isConst!==firstIsConst});if(divergent){sa.reportBranchAmbiguity(exprChildren[0].location,bare.lexeme,\"const-qualification\",bare.lexeme)}else if(!firstIsConst){sa.reportNonConstArraySize(exprChildren[0].location)}}}};return ArraySpecifier}(TreeNode);ASTNodes.ArraySpecifier=ArraySpecifier;ArraySpecifier=__decorate([ASTNodeDecorator(NoneTerminal.array_specifier)],ArraySpecifier);var IntegerConstantExpressionOperator=function(TreeNode){_inherits(IntegerConstantExpressionOperator,TreeNode);function IntegerConstantExpressionOperator(){return TreeNode.apply(this,arguments)||this}var _proto=IntegerConstantExpressionOperator.prototype;_proto.semanticAnalyze=function semanticAnalyze(sa){var operator=this.children[0];this.lexeme=operator.lexeme;switch(operator.type){case ETokenType.PLUS:this.compute=function(a,b){return a+b};break;case ETokenType.DASH:this.compute=function(a,b){return a-b};break;case ETokenType.STAR:this.compute=function(a,b){return a*b};break;case ETokenType.SLASH:this.compute=function(a,b){return a/b};break;case ETokenType.PERCENT:this.compute=function(a,b){return a%b};break}};return IntegerConstantExpressionOperator}(TreeNode);ASTNodes.IntegerConstantExpressionOperator=IntegerConstantExpressionOperator;IntegerConstantExpressionOperator=__decorate([ASTNodeDecorator(NoneTerminal.integer_constant_expression_operator)],IntegerConstantExpressionOperator);var IntegerConstantExpression=function(TreeNode){_inherits(IntegerConstantExpression,TreeNode);function IntegerConstantExpression(){return TreeNode.apply(this,arguments)||this}var _proto=IntegerConstantExpression.prototype;_proto.init=function init(){this.value=undefined};_proto.semanticAnalyze=function semanticAnalyze(sa){if(this.children.length===1){var child=this.children[0];if(_instanceof(child,BaseToken)){this.value=Number(child.lexeme)}}};return IntegerConstantExpression}(TreeNode);ASTNodes.IntegerConstantExpression=IntegerConstantExpression;IntegerConstantExpression=__decorate([ASTNodeDecorator(NoneTerminal.integer_constant_expression)],IntegerConstantExpression);var TypeSpecifierNonArray=function(TreeNode){_inherits(TypeSpecifierNonArray,TreeNode);function TypeSpecifierNonArray(){return TreeNode.apply(this,arguments)||this}var _proto=TypeSpecifierNonArray.prototype;_proto.init=function init(){var tt=this.children[0];if(_instanceof(tt,BaseToken)){this.type=tt.lexeme;this.lexeme=tt.lexeme}else if(_instanceof(tt,MacroCallSymbol)){this.type=TypeAny;this.lexeme=tt.macroName}else{this.type=tt.type;this.lexeme=tt.lexeme}};return TypeSpecifierNonArray}(TreeNode);ASTNodes.TypeSpecifierNonArray=TypeSpecifierNonArray;TypeSpecifierNonArray=__decorate([ASTNodeDecorator(NoneTerminal.type_specifier_nonarray)],TypeSpecifierNonArray);var ExtBuiltinTypeSpecifierNonArray=function(TreeNode){_inherits(ExtBuiltinTypeSpecifierNonArray,TreeNode);function ExtBuiltinTypeSpecifierNonArray(){return TreeNode.apply(this,arguments)||this}var _proto=ExtBuiltinTypeSpecifierNonArray.prototype;_proto.init=function init(){var token=this.children[0];this.type=token.type;this.lexeme=token.lexeme};return ExtBuiltinTypeSpecifierNonArray}(TreeNode);ASTNodes.ExtBuiltinTypeSpecifierNonArray=ExtBuiltinTypeSpecifierNonArray;ExtBuiltinTypeSpecifierNonArray=__decorate([ASTNodeDecorator(NoneTerminal.ext_builtin_type_specifier_nonarray)],ExtBuiltinTypeSpecifierNonArray);var InitDeclaratorList=function(TreeNode){_inherits(InitDeclaratorList,TreeNode);function InitDeclaratorList(){return TreeNode.apply(this,arguments)||this}var _proto=InitDeclaratorList.prototype;_proto.init=function init(){this.isConst=false;this.declarator=undefined};_proto.semanticAnalyze=function semanticAnalyze(sa){var sm;var children=this.children;var childrenLength=children.length;if(childrenLength===1){var _children_=children[0],typeSpecifier=_children_.typeSpecifier,arraySpecifier=_children_.arraySpecifier,isConst=_children_.isConst;this.typeInfo=new SymbolType(typeSpecifier.type,typeSpecifier.lexeme,arraySpecifier,typeSpecifier.structDeclarations);this.isConst=isConst}else{var initDeclList=children[0];this.typeInfo=initDeclList.typeInfo;this.isConst=initDeclList.isConst}if(childrenLength===3||childrenLength===5){var id=children[2];var initializer=childrenLength===5?children[4]:undefined;var typeInfo=new SymbolType(this.typeInfo.type,this.typeInfo.typeLexeme,undefined,this.typeInfo.structDeclarations);sm=sa.assignSourceScope(new VarSymbol(id.lexeme,typeInfo,false,this,this.isConst),id.location);this.declarator={identifier:id,typeInfo:typeInfo,initializer:initializer,isConst:this.isConst,isGlobal:false,symbol:sm};sa.recordFunctionVariable(sm);var insertResult=sa.symbolTableStack.insert(sm,id.branch);sa.reportRedefinition(id.location,sm,insertResult)}else if(childrenLength===4||childrenLength===6){var typeInfo1=new SymbolType(this.typeInfo.type,this.typeInfo.typeLexeme,undefined,this.typeInfo.structDeclarations);var arraySpecifier1=this.children[3];typeInfo1.arraySpecifier=arraySpecifier1;var id1=children[2];var initializer1=childrenLength===6?children[5]:undefined;sm=sa.assignSourceScope(new VarSymbol(id1.lexeme,typeInfo1,false,this,this.isConst),id1.location);this.declarator={identifier:id1,typeInfo:typeInfo1,initializer:initializer1,isConst:this.isConst,isGlobal:false,symbol:sm};sa.recordFunctionVariable(sm);var insertResult1=sa.symbolTableStack.insert(sm,id1.branch);sa.reportRedefinition(id1.location,sm,insertResult1)}};return InitDeclaratorList}(TreeNode);ASTNodes.InitDeclaratorList=InitDeclaratorList;InitDeclaratorList=__decorate([ASTNodeDecorator(NoneTerminal.init_declarator_list)],InitDeclaratorList);var IdentifierList=function(TreeNode){_inherits(IdentifierList,TreeNode);function IdentifierList(){var _this;_this=TreeNode.apply(this,arguments)||this,_this.idList=[];return _this}var _proto=IdentifierList.prototype;_proto.init=function init(){this.idList.length=0};_proto.semanticAnalyze=function semanticAnalyze(sa){var _this=this,children=_this.children,curIdList=_this.idList;if(children.length===2){curIdList.push(children[1])}else{var list=children[0];var id=children[2];var listIdLength=list.idList.length;curIdList.length=listIdLength+1;for(var i=0;i<listIdLength;i++){curIdList[i]=list.idList[i]}curIdList[listIdLength]=id}};return IdentifierList}(TreeNode);ASTNodes.IdentifierList=IdentifierList;IdentifierList=__decorate([ASTNodeDecorator(NoneTerminal.identifier_list)],IdentifierList);var Declaration=function(TreeNode){_inherits(Declaration,TreeNode);function Declaration(){return TreeNode.apply(this,arguments)||this}var _proto=Declaration.prototype;_proto.semanticAnalyze=function semanticAnalyze(sa){if(_instanceof(this.children[0],FunctionProtoType)){sa.popScope();sa.endFunction()}};_proto.codeGen=function codeGen(visitor){return visitor.cache(this,visitor.visitDeclaration(this))};return Declaration}(TreeNode);ASTNodes.Declaration=Declaration;Declaration=__decorate([ASTNodeDecorator(NoneTerminal.declaration)],Declaration);var FunctionProtoType=function(TreeNode){_inherits(FunctionProtoType,TreeNode);function FunctionProtoType(){return TreeNode.apply(this,arguments)||this}var _proto=FunctionProtoType.prototype;_proto.semanticAnalyze=function semanticAnalyze(sa){var declarator=this.children[0];this.ident=declarator.ident;this.returnType=declarator.returnType;this.parameterList=declarator.parameterInfoList;this.paramSig=declarator.paramSig};return FunctionProtoType}(TreeNode);ASTNodes.FunctionProtoType=FunctionProtoType;FunctionProtoType=__decorate([ASTNodeDecorator(NoneTerminal.function_prototype)],FunctionProtoType);var FunctionDeclarator=function(TreeNode){_inherits(FunctionDeclarator,TreeNode);function FunctionDeclarator(){return TreeNode.apply(this,arguments)||this}var _proto=FunctionDeclarator.prototype;_proto.semanticAnalyze=function semanticAnalyze(sa){var children=this.children;var header=children[0];var parameterList=children[1];this.ident=header.ident;this.returnType=header.returnType;this.parameterInfoList=parameterList==null?void 0:parameterList.parameterInfoList;this.paramSig=parameterList==null?void 0:parameterList.paramSig;sa.beginFunction(this)};return FunctionDeclarator}(TreeNode);ASTNodes.FunctionDeclarator=FunctionDeclarator;FunctionDeclarator=__decorate([ASTNodeDecorator(NoneTerminal.function_declarator)],FunctionDeclarator);var FunctionHeader=function(TreeNode){_inherits(FunctionHeader,TreeNode);function FunctionHeader(){return TreeNode.apply(this,arguments)||this}var _proto=FunctionHeader.prototype;_proto.semanticAnalyze=function semanticAnalyze(sa){sa.pushScope();var children=this.children;this.ident=children[1];this.returnType=children[0]};_proto.codeGen=function codeGen(visitor){return visitor.cache(this,visitor.visitFunctionHeader(this))};return FunctionHeader}(TreeNode);ASTNodes.FunctionHeader=FunctionHeader;FunctionHeader=__decorate([ASTNodeDecorator(NoneTerminal.function_header)],FunctionHeader);var FunctionParameterList=function(TreeNode){_inherits(FunctionParameterList,TreeNode);function FunctionParameterList(){var _this;_this=TreeNode.apply(this,arguments)||this,_this.parameterInfoList=[],_this.paramSig=[];return _this}var _proto=FunctionParameterList.prototype;_proto.init=function init(){this.parameterInfoList.length=0;this.paramSig.length=0};_proto.semanticAnalyze=function semanticAnalyze(sa){var children=this.children;var _this=this,parameterInfoList=_this.parameterInfoList,paramSig=_this.paramSig;if(_instanceof(children[0],ParameterDeclaration)){var _decl_typeInfo;var decl=children[0];parameterInfoList.push({ident:decl.ident,typeInfo:decl.typeInfo,astNode:decl});var _decl_typeInfo_type;paramSig.push((_decl_typeInfo_type=(_decl_typeInfo=decl.typeInfo)==null?void 0:_decl_typeInfo.type)!=null?_decl_typeInfo_type:TypeAny)}else if(_instanceof(children[2],ParameterDeclaration)){var _parameterInfoList,_paramSig;var _decl_typeInfo1;var list=children[0];var decl1=children[2];(_parameterInfoList=parameterInfoList).push.apply(_parameterInfoList,[].concat(list.parameterInfoList,[{ident:decl1.ident,typeInfo:decl1.typeInfo,astNode:decl1}]));var _decl_typeInfo_type1;(_paramSig=paramSig).push.apply(_paramSig,[].concat(list.paramSig,[(_decl_typeInfo_type1=(_decl_typeInfo1=decl1.typeInfo)==null?void 0:_decl_typeInfo1.type)!=null?_decl_typeInfo_type1:TypeAny]))}else if(_instanceof(children[0],FunctionParameterList)&&_instanceof(children[1],MacroParamBlock)){var _parameterInfoList1,_paramSig1;(_parameterInfoList1=parameterInfoList).push.apply(_parameterInfoList1,[].concat(children[0].parameterInfoList,[{astNode:children[1]}]));(_paramSig1=paramSig).push.apply(_paramSig1,[].concat(children[0].paramSig,[TypeAny]))}else if(_instanceof(children[0],MacroParamBlock)){parameterInfoList.push({astNode:children[0]});paramSig.push(TypeAny)}};_proto.codeGen=function codeGen(visitor){return visitor.cache(this,visitor.visitFunctionParameterList(this))};return FunctionParameterList}(TreeNode);ASTNodes.FunctionParameterList=FunctionParameterList;FunctionParameterList=__decorate([ASTNodeDecorator(NoneTerminal.function_parameter_list)],FunctionParameterList);var MacroParamCaseList=function(TreeNode){_inherits(MacroParamCaseList,TreeNode);function MacroParamCaseList(){return TreeNode.apply(this,arguments)||this}return MacroParamCaseList}(TreeNode);ASTNodes.MacroParamCaseList=MacroParamCaseList;MacroParamCaseList=__decorate([ASTNodeDecorator(NoneTerminal.macro_param_case_list)],MacroParamCaseList);var MacroParamBlock=function(TreeNode){_inherits(MacroParamBlock,TreeNode);function MacroParamBlock(){return TreeNode.apply(this,arguments)||this}return MacroParamBlock}(TreeNode);ASTNodes.MacroParamBlock=MacroParamBlock;MacroParamBlock=__decorate([ASTNodeDecorator(NoneTerminal.macro_param_block)],MacroParamBlock);var MacroParameterBranch=function(TreeNode){_inherits(MacroParameterBranch,TreeNode);function MacroParameterBranch(){return TreeNode.apply(this,arguments)||this}return MacroParameterBranch}(TreeNode);ASTNodes.MacroParameterBranch=MacroParameterBranch;MacroParameterBranch=__decorate([ASTNodeDecorator(NoneTerminal.macro_parameter_branch)],MacroParameterBranch);var ParameterDeclaration=function(TreeNode){_inherits(ParameterDeclaration,TreeNode);function ParameterDeclaration(){return TreeNode.apply(this,arguments)||this}var _proto=ParameterDeclaration.prototype;_proto.init=function init(){this.typeInfo=undefined;this.ident=undefined;this.symbol=undefined};_proto.semanticAnalyze=function semanticAnalyze(sa){var children=this.children;var parameterDeclarator;if(_instanceof(children[0],ParameterDeclarator)){parameterDeclarator=children[0]}else if(_instanceof(children[1],ParameterDeclarator)){parameterDeclarator=children[1]}if(parameterDeclarator){this.typeInfo=parameterDeclarator.typeInfo;this.ident=parameterDeclarator.ident;var varSymbol=new VarSymbol(parameterDeclarator.ident.lexeme,parameterDeclarator.typeInfo,false,parameterDeclarator);this.symbol=varSymbol;sa.symbolTableStack.insert(varSymbol,parameterDeclarator.ident.branch)}};return ParameterDeclaration}(TreeNode);ASTNodes.ParameterDeclaration=ParameterDeclaration;ParameterDeclaration=__decorate([ASTNodeDecorator(NoneTerminal.parameter_declaration)],ParameterDeclaration);var ParameterDeclarator=function(TreeNode){_inherits(ParameterDeclarator,TreeNode);function ParameterDeclarator(){return TreeNode.apply(this,arguments)||this}var _proto=ParameterDeclarator.prototype;_proto.semanticAnalyze=function semanticAnalyze(sa){var children=this.children;this.ident=children[1];var typeSpecifier=children[0];var arraySpecifier=children[2];this.typeInfo=new SymbolType(typeSpecifier.type,typeSpecifier.lexeme,arraySpecifier,typeSpecifier.structDeclarations)};return ParameterDeclarator}(TreeNode);ASTNodes.ParameterDeclarator=ParameterDeclarator;ParameterDeclarator=__decorate([ASTNodeDecorator(NoneTerminal.parameter_declarator)],ParameterDeclarator);var SimpleStatement=function(TreeNode){_inherits(SimpleStatement,TreeNode);function SimpleStatement(){return TreeNode.apply(this,arguments)||this}return SimpleStatement}(TreeNode);ASTNodes.SimpleStatement=SimpleStatement;SimpleStatement=__decorate([ASTNodeDecorator(NoneTerminal.simple_statement)],SimpleStatement);var CompoundStatement=function(TreeNode){_inherits(CompoundStatement,TreeNode);function CompoundStatement(){return TreeNode.apply(this,arguments)||this}return CompoundStatement}(TreeNode);ASTNodes.CompoundStatement=CompoundStatement;CompoundStatement=__decorate([ASTNodeDecorator(NoneTerminal.compound_statement)],CompoundStatement);var CompoundStatementNoScope=function(TreeNode){_inherits(CompoundStatementNoScope,TreeNode);function CompoundStatementNoScope(){return TreeNode.apply(this,arguments)||this}return CompoundStatementNoScope}(TreeNode);ASTNodes.CompoundStatementNoScope=CompoundStatementNoScope;CompoundStatementNoScope=__decorate([ASTNodeDecorator(NoneTerminal.compound_statement_no_scope)],CompoundStatementNoScope);var Statement=function(TreeNode){_inherits(Statement,TreeNode);function Statement(){return TreeNode.apply(this,arguments)||this}return Statement}(TreeNode);ASTNodes.Statement=Statement;Statement=__decorate([ASTNodeDecorator(NoneTerminal.statement)],Statement);var StatementList=function(TreeNode){_inherits(StatementList,TreeNode);function StatementList(){return TreeNode.apply(this,arguments)||this}var _proto=StatementList.prototype;_proto.codeGen=function codeGen(visitor){return visitor.cache(this,visitor.visitStatementList(this))};return StatementList}(TreeNode);ASTNodes.StatementList=StatementList;StatementList=__decorate([ASTNodeDecorator(NoneTerminal.statement_list)],StatementList);var FunctionDefinition=function(TreeNode){_inherits(FunctionDefinition,TreeNode);function FunctionDefinition(){return TreeNode.apply(this,arguments)||this}var _proto=FunctionDefinition.prototype;_proto.semanticAnalyze=function semanticAnalyze(sa){var children=this.children;this.protoType=children[0];this.statements=children[1];sa.popScope();var capture=sa.endFunction();var sm=sa.assignSourceScope(new FnSymbol(this.protoType.ident.lexeme,this,capture.localVariables,capture.calledFunctions),this.protoType.ident.location);var existing=this.protoType.ident.branch.length===0?sa.symbolTableStack.lookup(sm):undefined;var unconditionalDuplicate=existing&&existing.sourceScope===sm.sourceScope;var conflict=unconditionalDuplicate?\"coexist\":sa.symbolTableStack.insert(sm,this.protoType.ident.branch);sa.reportRedefinition(this.protoType.ident.location,sm,conflict);this.isInMacroBranch=sa.symbolTableStack.isInMacroBranch};_proto.codeGen=function codeGen(visitor){return visitor.cache(this,visitor.visitFunctionDefinition(this))};return FunctionDefinition}(TreeNode);ASTNodes.FunctionDefinition=FunctionDefinition;FunctionDefinition=__decorate([ASTNodeDecorator(NoneTerminal.function_definition)],FunctionDefinition);var FunctionCall=function(ExpressionAstNode){_inherits(FunctionCall,ExpressionAstNode);function FunctionCall(){return ExpressionAstNode.apply(this,arguments)||this}var _proto=FunctionCall.prototype;_proto.semanticAnalyze=function semanticAnalyze(sa){this.type=this.children[0].type};_proto.codeGen=function codeGen(visitor){return visitor.cache(this,visitor.visitFunctionCall(this))};return FunctionCall}(ExpressionAstNode);ASTNodes.FunctionCall=FunctionCall;FunctionCall=__decorate([ASTNodeDecorator(NoneTerminal.function_call)],FunctionCall);var FunctionCallGeneric=function(ExpressionAstNode){_inherits(FunctionCallGeneric,ExpressionAstNode);function FunctionCallGeneric(){return ExpressionAstNode.apply(this,arguments)||this}var _proto=FunctionCallGeneric.prototype;_proto.init=function init(){ExpressionAstNode.prototype.init.call(this);this.fnSymbol=undefined;this.fnSymbols=undefined};_proto.semanticAnalyze=function semanticAnalyze(sa){var functionIdentifier=this.children[0];if(functionIdentifier.isBuiltin){this.type=functionIdentifier.ident}else{var _fnSymbol_dataType;var fnIdent=functionIdentifier.ident;var paramSig;if(this.children.length===4){var paramList=this.children[2];if(_instanceof(paramList,FunctionCallParameterList)){paramSig=paramList.paramSig}}if(sa.diagnosticsEnabled){var _header_ident,_fnSymbol_dataType1;var header=sa.currentFunctionHeader;if((header==null?void 0:(_header_ident=header.ident)==null?void 0:_header_ident.lexeme)===fnIdent){var _header_paramSig;var hSig=(_header_paramSig=header.paramSig)!=null?_header_paramSig:[];var cSig=paramSig!=null?paramSig:[];if(hSig.length===cSig.length&&hSig.every(function(t,i){return t===cSig[i]})){return}}if(TEXTURE_SAMPLING_BUILTINS.has(fnIdent)){var arg0=paramSig==null?void 0:paramSig[0];if(arg0!==undefined&&arg0!==TypeAny&&!TypeSystem.isSamplerType(arg0)){sa.reportExpectedSampler(this.location,fnIdent,arg0);return}}var builtinFn=BuiltinFunction.resolveOverload(fnIdent,paramSig);if(builtinFn){this.type=builtinFn.realReturnType;return}var lookupSymbol=sa.lookupSymbol;lookupSymbol.set(fnIdent,ESymbolType.FN,undefined,undefined,paramSig);var allMatches=sa.overloadScratch;sa.symbolTableStack.lookupAll(lookupSymbol,true,allMatches,this._branch);var branchCoverage=sa.getBranchCoverage(allMatches.map(function(symbol){var _symbol_branchSignature;return(_symbol_branchSignature=symbol.branchSignature)!=null?_symbol_branchSignature:EMPTY_BRANCH}),this._branch);var branchCovered=branchCoverage===\"covered\"||FunctionCallGeneric._hasConflictingBranches(sa,allMatches);var fnSymbol=branchCovered?allMatches[0]:undefined;var overloadTypeAmbiguous=false;if(fnSymbol&&(paramSig==null?void 0:paramSig.some(function(t){return t===TypeAny}))){if(allMatches.length>1){var _allMatches__dataType;var firstType=(_allMatches__dataType=allMatches[0].dataType)==null?void 0:_allMatches__dataType.type;overloadTypeAmbiguous=allMatches.some(function(s){var _s_dataType;return((_s_dataType=s.dataType)==null?void 0:_s_dataType.type)!==firstType})}}if(!fnSymbol){var codegenFn=sa.symbolTableStack.lookup(lookupSymbol,true);if(codegenFn){this.fnSymbol=codegenFn;sa.recordFunctionCall(codegenFn)}if(allMatches.length){sa.reportBranchAvailability(this.location,\"Function\",fnIdent,branchCoverage);return}lookupSymbol.set(fnIdent,ESymbolType.FN);var nameDeclared=sa.symbolTableStack.lookupAll(lookupSymbol,true,allMatches,this._branch).length>0||BuiltinFunction.isExist(fnIdent);if(nameDeclared){sa.reportNoMatchingOverload(this.location,fnIdent)}return}this.type=overloadTypeAmbiguous?TypeAny:fnSymbol==null?void 0:(_fnSymbol_dataType1=fnSymbol.dataType)==null?void 0:_fnSymbol_dataType1.type;this.fnSymbol=fnSymbol;if(allMatches.length>1){var first=allMatches[0];this.fnSymbols=allMatches.every(function(candidate){return FunctionCallGeneric._hasSameParameterSignature(first,candidate)})?allMatches.slice():EMPTY_FN_SYMBOLS}if(this.fnSymbols!==undefined){for(var _iterator=_create_for_of_iterator_helper_loose(this.fnSymbols),_step;!(_step=_iterator()).done;){var candidate=_step.value;sa.recordFunctionCall(candidate)}}else if(_instanceof(fnSymbol,FnSymbol)){sa.recordFunctionCall(fnSymbol)}return}var lookupSymbol1=sa.lookupSymbol;lookupSymbol1.set(fnIdent,ESymbolType.FN,undefined,undefined,paramSig);var fnSymbol1=sa.symbolTableStack.lookup(lookupSymbol1,true);if(!fnSymbol1)return;this.type=(_fnSymbol_dataType=fnSymbol1.dataType)==null?void 0:_fnSymbol_dataType.type;this.fnSymbol=fnSymbol1;if(_instanceof(fnSymbol1,FnSymbol))sa.recordFunctionCall(fnSymbol1)}};FunctionCallGeneric._hasConflictingBranches=function _hasConflictingBranches(sa,symbols){for(var i=0,n=symbols.length;i<n;i++){for(var j=i+1;j<n;j++){var left=symbols[i];var right=symbols[j];var _left_branchSignature,_right_branchSignature;if(FunctionCallGeneric._hasSameParameterSignature(left,right)&&sa.canDeclarationsCoexist((_left_branchSignature=left.branchSignature)!=null?_left_branchSignature:EMPTY_BRANCH,(_right_branchSignature=right.branchSignature)!=null?_right_branchSignature:EMPTY_BRANCH)){return true}}}return false};FunctionCallGeneric._hasSameParameterSignature=function _hasSameParameterSignature(left,right){var _left_astNode_protoType_paramSig;var leftSignature=(_left_astNode_protoType_paramSig=left.astNode.protoType.paramSig)!=null?_left_astNode_protoType_paramSig:[];var _right_astNode_protoType_paramSig;var rightSignature=(_right_astNode_protoType_paramSig=right.astNode.protoType.paramSig)!=null?_right_astNode_protoType_paramSig:[];return leftSignature.length===rightSignature.length&&leftSignature.every(function(type,index){return type===rightSignature[index]})};return FunctionCallGeneric}(ExpressionAstNode);ASTNodes.FunctionCallGeneric=FunctionCallGeneric;FunctionCallGeneric=__decorate([ASTNodeDecorator(NoneTerminal.function_call_generic)],FunctionCallGeneric);var FunctionCallParameterList=function(TreeNode){_inherits(FunctionCallParameterList,TreeNode);function FunctionCallParameterList(){var _this;_this=TreeNode.apply(this,arguments)||this,_this.paramSig=[],_this.paramNodes=[];return _this}var _proto=FunctionCallParameterList.prototype;_proto.init=function init(){this.paramSig.length=0;this.paramNodes.length=0};_proto.semanticAnalyze=function semanticAnalyze(sa){var _this=this,children=_this.children,paramSig=_this.paramSig,paramNodes=_this.paramNodes;if(_instanceof(children[0],AssignmentExpression)){var expr=children[0];paramSig.push(expr.type);paramNodes.push(expr)}else if(_instanceof(children[2],AssignmentExpression)){var _paramSig,_paramNodes;var list=children[0];var decl=children[2];(_paramSig=paramSig).push.apply(_paramSig,[].concat(list.paramSig,[decl.type]));(_paramNodes=paramNodes).push.apply(_paramNodes,[].concat(list.paramNodes,[decl]))}else if(_instanceof(children[0],FunctionCallParameterList)&&_instanceof(children[1],MacroCallArgBlock)){var _paramSig1,_paramNodes1;(_paramSig1=paramSig).push.apply(_paramSig1,[].concat(children[0].paramSig,[TypeAny]));(_paramNodes1=paramNodes).push.apply(_paramNodes1,[].concat(children[0].paramNodes,[children[1]]))}else if(_instanceof(children[0],MacroCallArgBlock)){paramSig.push(TypeAny);paramNodes.push(children[0])}};return FunctionCallParameterList}(TreeNode);ASTNodes.FunctionCallParameterList=FunctionCallParameterList;FunctionCallParameterList=__decorate([ASTNodeDecorator(NoneTerminal.function_call_parameter_list)],FunctionCallParameterList);var MacroCallArgCaseList=function(TreeNode){_inherits(MacroCallArgCaseList,TreeNode);function MacroCallArgCaseList(){return TreeNode.apply(this,arguments)||this}return MacroCallArgCaseList}(TreeNode);ASTNodes.MacroCallArgCaseList=MacroCallArgCaseList;MacroCallArgCaseList=__decorate([ASTNodeDecorator(NoneTerminal.macro_call_arg_case_list)],MacroCallArgCaseList);var MacroCallArgBlock=function(TreeNode){_inherits(MacroCallArgBlock,TreeNode);function MacroCallArgBlock(){return TreeNode.apply(this,arguments)||this}return MacroCallArgBlock}(TreeNode);ASTNodes.MacroCallArgBlock=MacroCallArgBlock;MacroCallArgBlock=__decorate([ASTNodeDecorator(NoneTerminal.macro_call_arg_block)],MacroCallArgBlock);var MacroCallArgBranch=function(TreeNode){_inherits(MacroCallArgBranch,TreeNode);function MacroCallArgBranch(){return TreeNode.apply(this,arguments)||this}return MacroCallArgBranch}(TreeNode);ASTNodes.MacroCallArgBranch=MacroCallArgBranch;MacroCallArgBranch=__decorate([ASTNodeDecorator(NoneTerminal.macro_call_arg_branch)],MacroCallArgBranch);var PrecisionSpecifier=function(TreeNode){_inherits(PrecisionSpecifier,TreeNode);function PrecisionSpecifier(){return TreeNode.apply(this,arguments)||this}var _proto=PrecisionSpecifier.prototype;_proto.semanticAnalyze=function semanticAnalyze(sa){if(!sa.symbolTableStack.isInMacroBranch){sa.shaderData.globalPrecisions.push(this)}};return PrecisionSpecifier}(TreeNode);ASTNodes.PrecisionSpecifier=PrecisionSpecifier;PrecisionSpecifier=__decorate([ASTNodeDecorator(NoneTerminal.precision_specifier)],PrecisionSpecifier);var FunctionIdentifier=function(TreeNode){_inherits(FunctionIdentifier,TreeNode);function FunctionIdentifier(){return TreeNode.apply(this,arguments)||this}var _proto=FunctionIdentifier.prototype;_proto.semanticAnalyze=function semanticAnalyze(sa){var typeSpecifier=this.children[0];this.ident=typeSpecifier.type;this.lexeme=typeSpecifier.lexeme;this.isBuiltin=typeof this.ident!==\"string\"};_proto.codeGen=function codeGen(visitor){return visitor.cache(this,visitor.visitFunctionIdentifier(this))};return FunctionIdentifier}(TreeNode);ASTNodes.FunctionIdentifier=FunctionIdentifier;FunctionIdentifier=__decorate([ASTNodeDecorator(NoneTerminal.function_identifier)],FunctionIdentifier);var AssignmentExpression=function(ExpressionAstNode){_inherits(AssignmentExpression,ExpressionAstNode);function AssignmentExpression(){return ExpressionAstNode.apply(this,arguments)||this}var _proto=AssignmentExpression.prototype;_proto.semanticAnalyze=function semanticAnalyze(sa){if(this.children.length===1){var expr=this.children[0];var _expr_type;this.type=(_expr_type=expr.type)!=null?_expr_type:TypeAny}else{var rhs=this.children[2];var _rhs_type;this.type=(_rhs_type=rhs.type)!=null?_rhs_type:TypeAny}};return AssignmentExpression}(ExpressionAstNode);ASTNodes.AssignmentExpression=AssignmentExpression;AssignmentExpression=__decorate([ASTNodeDecorator(NoneTerminal.assignment_expression)],AssignmentExpression);var AssignmentOperator=function(TreeNode){_inherits(AssignmentOperator,TreeNode);function AssignmentOperator(){return TreeNode.apply(this,arguments)||this}return AssignmentOperator}(TreeNode);ASTNodes.AssignmentOperator=AssignmentOperator;AssignmentOperator=__decorate([ASTNodeDecorator(NoneTerminal.assignment_operator)],AssignmentOperator);var Expression=function(ExpressionAstNode){_inherits(Expression,ExpressionAstNode);function Expression(){return ExpressionAstNode.apply(this,arguments)||this}var _proto=Expression.prototype;_proto.semanticAnalyze=function semanticAnalyze(sa){if(this.children.length===1){var expr=this.children[0];this.type=expr.type}else{var expr1=this.children[2];this.type=expr1.type}};return Expression}(ExpressionAstNode);ASTNodes.Expression=Expression;Expression=__decorate([ASTNodeDecorator(NoneTerminal.expression)],Expression);var PrimaryExpression=function(ExpressionAstNode){_inherits(PrimaryExpression,ExpressionAstNode);function PrimaryExpression(){return ExpressionAstNode.apply(this,arguments)||this}var _proto=PrimaryExpression.prototype;_proto.semanticAnalyze=function semanticAnalyze(sa){if(this.children.length===1){var id=this.children[0];if(_instanceof(id,VariableIdentifier)){var _id_typeInfo;this.type=(_id_typeInfo=id.typeInfo)!=null?_id_typeInfo:TypeAny}else{switch(id.type){case ETokenType.INT_CONSTANT:this._type=Keyword.INT;break;case ETokenType.FLOAT_CONSTANT:this.type=Keyword.FLOAT;break;case Keyword.True:case Keyword.False:this.type=Keyword.BOOL;break}}}else{var expression=this.children[1];this.type=expression.type}};return PrimaryExpression}(ExpressionAstNode);ASTNodes.PrimaryExpression=PrimaryExpression;PrimaryExpression=__decorate([ASTNodeDecorator(NoneTerminal.primary_expression)],PrimaryExpression);var PostfixExpression=function(ExpressionAstNode){_inherits(PostfixExpression,ExpressionAstNode);function PostfixExpression(){return ExpressionAstNode.apply(this,arguments)||this}var _proto=PostfixExpression.prototype;_proto.init=function init(){ExpressionAstNode.prototype.init.call(this);if(this.children.length===1){var child=this.children[0];this.type=child.type}};_proto.semanticAnalyze=function semanticAnalyze(sa){var children=this.children;if(children.length===3&&_instanceof(children[2],BaseToken)){var base=children[0];if(!this._inMacroDefinition){var reference=ParserUtils.unwrapBareIdentifier(base,{allowParens:true});if(reference)sa.shaderData.directMemberOwnerReferences.push(reference)}if(typeof base.type===\"string\"){PostfixExpression._checkStructField(sa,base.type,children[2],this._branch)}}};_proto.codeGen=function codeGen(visitor){return visitor.cache(this,visitor.visitPostfixExpression(this))};PostfixExpression._checkStructField=function _checkStructField(sa,structName,field,callsiteBranch){var lookup=sa.lookupSymbol;lookup.set(structName,ESymbolType.STRUCT);var structs=sa.symbolTableStack.lookupAll(lookup,true,sa.structScratch,callsiteBranch);if(!structs.length)return;var coverage=sa.getBranchCoverage(structs.map(function(struct){var _struct_branchSignature;return(_struct_branchSignature=struct.branchSignature)!=null?_struct_branchSignature:EMPTY_BRANCH}),callsiteBranch);if(coverage!==\"covered\"){sa.reportBranchAvailability(field.location,\"Struct\",structName,coverage);return}var firstProp=structs[0].astNode.propList.find(function(prop){return prop.ident.lexeme===field.lexeme});var memberPresenceDivergent=false;var memberTypeDivergent=false;for(var i=1;i<structs.length;i++){var prop=structs[i].astNode.propList.find(function(item){return item.ident.lexeme===field.lexeme});if(!!prop!==!!firstProp){memberPresenceDivergent=true;break}if(prop&&firstProp){var firstArray=firstProp.typeInfo.arraySpecifier;var array=prop.typeInfo.arraySpecifier;if(prop.typeInfo.type!==firstProp.typeInfo.type||!!array!==!!firstArray||(array==null?void 0:array.size)!==(firstArray==null?void 0:firstArray.size)){memberTypeDivergent=true;break}}}if(memberPresenceDivergent){sa.reportBranchAmbiguity(field.location,structName+\".\"+field.lexeme,\"struct-member-presence\",field.lexeme,structName);return}if(memberTypeDivergent){return}if(firstProp)return;sa.reportUndeclaredStructMember(field.location,structName,field.lexeme)};return PostfixExpression}(ExpressionAstNode);ASTNodes.PostfixExpression=PostfixExpression;PostfixExpression=__decorate([ASTNodeDecorator(NoneTerminal.postfix_expression)],PostfixExpression);var UnaryOperator=function(TreeNode){_inherits(UnaryOperator,TreeNode);function UnaryOperator(){return TreeNode.apply(this,arguments)||this}return UnaryOperator}(TreeNode);ASTNodes.UnaryOperator=UnaryOperator;UnaryOperator=__decorate([ASTNodeDecorator(NoneTerminal.unary_operator)],UnaryOperator);var UnaryExpression=function(ExpressionAstNode){_inherits(UnaryExpression,ExpressionAstNode);function UnaryExpression(){return ExpressionAstNode.apply(this,arguments)||this}var _proto=UnaryExpression.prototype;_proto.init=function init(){this.type=this.children[0].type};return UnaryExpression}(ExpressionAstNode);ASTNodes.UnaryExpression=UnaryExpression;UnaryExpression=__decorate([ASTNodeDecorator(NoneTerminal.unary_expression)],UnaryExpression);var MultiplicativeExpression=function(ExpressionAstNode){_inherits(MultiplicativeExpression,ExpressionAstNode);function MultiplicativeExpression(){return ExpressionAstNode.apply(this,arguments)||this}var _proto=MultiplicativeExpression.prototype;_proto.init=function init(){ExpressionAstNode.prototype.init.call(this);if(this.children.length===1){this.type=this.children[0].type}else{this.type=TypeSystem.arithmeticResultType(this.children[0].type,this.children[2].type,this.children[1].lexeme)}};return MultiplicativeExpression}(ExpressionAstNode);ASTNodes.MultiplicativeExpression=MultiplicativeExpression;MultiplicativeExpression=__decorate([ASTNodeDecorator(NoneTerminal.multiplicative_expression)],MultiplicativeExpression);var AdditiveExpression=function(ExpressionAstNode){_inherits(AdditiveExpression,ExpressionAstNode);function AdditiveExpression(){return ExpressionAstNode.apply(this,arguments)||this}var _proto=AdditiveExpression.prototype;_proto.init=function init(){ExpressionAstNode.prototype.init.call(this);if(this.children.length===1){this.type=this.children[0].type}else{this.type=TypeSystem.arithmeticResultType(this.children[0].type,this.children[2].type,this.children[1].lexeme)}};return AdditiveExpression}(ExpressionAstNode);ASTNodes.AdditiveExpression=AdditiveExpression;AdditiveExpression=__decorate([ASTNodeDecorator(NoneTerminal.additive_expression)],AdditiveExpression);var ShiftExpression=function(ExpressionAstNode){_inherits(ShiftExpression,ExpressionAstNode);function ShiftExpression(){return ExpressionAstNode.apply(this,arguments)||this}var _proto=ShiftExpression.prototype;_proto.semanticAnalyze=function semanticAnalyze(sa){var expr=this.children[0];this.type=expr.type};return ShiftExpression}(ExpressionAstNode);ASTNodes.ShiftExpression=ShiftExpression;ShiftExpression=__decorate([ASTNodeDecorator(NoneTerminal.shift_expression)],ShiftExpression);var RelationalExpression=function(ExpressionAstNode){_inherits(RelationalExpression,ExpressionAstNode);function RelationalExpression(){return ExpressionAstNode.apply(this,arguments)||this}var _proto=RelationalExpression.prototype;_proto.semanticAnalyze=function semanticAnalyze(sa){if(this.children.length===1){this.type=this.children[0].type}else{this.type=Keyword.BOOL}};return RelationalExpression}(ExpressionAstNode);ASTNodes.RelationalExpression=RelationalExpression;RelationalExpression=__decorate([ASTNodeDecorator(NoneTerminal.relational_expression)],RelationalExpression);var EqualityExpression=function(ExpressionAstNode){_inherits(EqualityExpression,ExpressionAstNode);function EqualityExpression(){return ExpressionAstNode.apply(this,arguments)||this}var _proto=EqualityExpression.prototype;_proto.semanticAnalyze=function semanticAnalyze(sa){if(this.children.length===1){this.type=this.children[0].type}else{this.type=Keyword.BOOL}};return EqualityExpression}(ExpressionAstNode);ASTNodes.EqualityExpression=EqualityExpression;EqualityExpression=__decorate([ASTNodeDecorator(NoneTerminal.equality_expression)],EqualityExpression);var AndExpression=function(ExpressionAstNode){_inherits(AndExpression,ExpressionAstNode);function AndExpression(){return ExpressionAstNode.apply(this,arguments)||this}var _proto=AndExpression.prototype;_proto.semanticAnalyze=function semanticAnalyze(sa){if(this.children.length===1){this.type=this.children[0].type}else{this.type=Keyword.UINT}};return AndExpression}(ExpressionAstNode);ASTNodes.AndExpression=AndExpression;AndExpression=__decorate([ASTNodeDecorator(NoneTerminal.and_expression)],AndExpression);var ExclusiveOrExpression=function(ExpressionAstNode){_inherits(ExclusiveOrExpression,ExpressionAstNode);function ExclusiveOrExpression(){return ExpressionAstNode.apply(this,arguments)||this}var _proto=ExclusiveOrExpression.prototype;_proto.semanticAnalyze=function semanticAnalyze(sa){if(this.children.length===1){this.type=this.children[0].type}else{this.type=Keyword.UINT}};return ExclusiveOrExpression}(ExpressionAstNode);ASTNodes.ExclusiveOrExpression=ExclusiveOrExpression;ExclusiveOrExpression=__decorate([ASTNodeDecorator(NoneTerminal.exclusive_or_expression)],ExclusiveOrExpression);var InclusiveOrExpression=function(ExpressionAstNode){_inherits(InclusiveOrExpression,ExpressionAstNode);function InclusiveOrExpression(){return ExpressionAstNode.apply(this,arguments)||this}var _proto=InclusiveOrExpression.prototype;_proto.semanticAnalyze=function semanticAnalyze(sa){if(this.children.length===1){this.type=this.children[0].type}else{this.type=Keyword.UINT}};return InclusiveOrExpression}(ExpressionAstNode);ASTNodes.InclusiveOrExpression=InclusiveOrExpression;InclusiveOrExpression=__decorate([ASTNodeDecorator(NoneTerminal.inclusive_or_expression)],InclusiveOrExpression);var LogicalAndExpression=function(ExpressionAstNode){_inherits(LogicalAndExpression,ExpressionAstNode);function LogicalAndExpression(){return ExpressionAstNode.apply(this,arguments)||this}var _proto=LogicalAndExpression.prototype;_proto.semanticAnalyze=function semanticAnalyze(sa){if(this.children.length===1){this.type=this.children[0].type}else{this.type=Keyword.BOOL}};return LogicalAndExpression}(ExpressionAstNode);ASTNodes.LogicalAndExpression=LogicalAndExpression;LogicalAndExpression=__decorate([ASTNodeDecorator(NoneTerminal.logical_and_expression)],LogicalAndExpression);var LogicalXorExpression=function(ExpressionAstNode){_inherits(LogicalXorExpression,ExpressionAstNode);function LogicalXorExpression(){return ExpressionAstNode.apply(this,arguments)||this}var _proto=LogicalXorExpression.prototype;_proto.semanticAnalyze=function semanticAnalyze(sa){if(this.children.length===1){this.type=this.children[0].type}else{this.type=Keyword.BOOL}};return LogicalXorExpression}(ExpressionAstNode);ASTNodes.LogicalXorExpression=LogicalXorExpression;LogicalXorExpression=__decorate([ASTNodeDecorator(NoneTerminal.logical_xor_expression)],LogicalXorExpression);var LogicalOrExpression=function(ExpressionAstNode){_inherits(LogicalOrExpression,ExpressionAstNode);function LogicalOrExpression(){return ExpressionAstNode.apply(this,arguments)||this}var _proto=LogicalOrExpression.prototype;_proto.semanticAnalyze=function semanticAnalyze(sa){if(this.children.length===1){this.type=this.children[0].type}else{this.type=Keyword.BOOL}};return LogicalOrExpression}(ExpressionAstNode);ASTNodes.LogicalOrExpression=LogicalOrExpression;LogicalOrExpression=__decorate([ASTNodeDecorator(NoneTerminal.logical_or_expression)],LogicalOrExpression);var ConditionalExpression=function(ExpressionAstNode){_inherits(ConditionalExpression,ExpressionAstNode);function ConditionalExpression(){return ExpressionAstNode.apply(this,arguments)||this}var _proto=ConditionalExpression.prototype;_proto.semanticAnalyze=function semanticAnalyze(sa){if(this.children.length===1){this.type=this.children[0].type}};return ConditionalExpression}(ExpressionAstNode);ASTNodes.ConditionalExpression=ConditionalExpression;ConditionalExpression=__decorate([ASTNodeDecorator(NoneTerminal.conditional_expression)],ConditionalExpression);var StructSpecifier=function(TreeNode){_inherits(StructSpecifier,TreeNode);function StructSpecifier(){return TreeNode.apply(this,arguments)||this}var _proto=StructSpecifier.prototype;_proto.init=function init(){this.ident=undefined};_proto.semanticAnalyze=function semanticAnalyze(sa){var children=this.children;this.isInMacroBranch=sa.symbolTableStack.isInMacroBranch;if(children.length===6){this.ident=children[1];var symbol=sa.assignSourceScope(new StructSymbol(this.ident.lexeme,this),this.ident.location);var insertResult=sa.symbolTableStack.insert(symbol,this.ident.branch);sa.reportRedefinition(this.ident.location,symbol,insertResult);this.propList=children[3].propList;this.macroExpressions=children[3].macroExpressions}else{this.propList=children[2].propList;this.macroExpressions=children[2].macroExpressions}};_proto.codeGen=function codeGen(visitor){return visitor.cache(this,visitor.visitStructSpecifier(this))};return StructSpecifier}(TreeNode);ASTNodes.StructSpecifier=StructSpecifier;StructSpecifier=__decorate([ASTNodeDecorator(NoneTerminal.struct_specifier)],StructSpecifier);var StructDeclarationList=function(TreeNode){_inherits(StructDeclarationList,TreeNode);function StructDeclarationList(){var _this;_this=TreeNode.apply(this,arguments)||this,_this.propList=[],_this.macroExpressions=[];return _this}var _proto=StructDeclarationList.prototype;_proto.init=function init(){this.propList.length=0;this.macroExpressions.length=0};_proto.semanticAnalyze=function semanticAnalyze(sa){var _this=this,children=_this.children,propList=_this.propList,macroExpressions=_this.macroExpressions;if(children.length===1){var _propList,_macroExpressions;(_propList=propList).push.apply(_propList,[].concat(children[0].props));(_macroExpressions=macroExpressions).push.apply(_macroExpressions,[].concat(children[0].macroExpressions))}else{var _propList1,_propList2,_macroExpressions1,_macroExpressions2;(_propList1=propList).push.apply(_propList1,[].concat(children[0].propList));(_propList2=propList).push.apply(_propList2,[].concat(children[1].props));(_macroExpressions1=macroExpressions).push.apply(_macroExpressions1,[].concat(children[0].macroExpressions));(_macroExpressions2=macroExpressions).push.apply(_macroExpressions2,[].concat(children[1].macroExpressions))}};return StructDeclarationList}(TreeNode);ASTNodes.StructDeclarationList=StructDeclarationList;StructDeclarationList=__decorate([ASTNodeDecorator(NoneTerminal.struct_declaration_list)],StructDeclarationList);var StructDeclaration=function(TreeNode){_inherits(StructDeclaration,TreeNode);function StructDeclaration(){var _this;_this=TreeNode.apply(this,arguments)||this,_this.props=[],_this.macroExpressions=[];return _this}var _proto=StructDeclaration.prototype;_proto.init=function init(){this._typeSpecifier=undefined;this._declaratorList=undefined;this.props.length=0;this.macroExpressions.length=0};_proto.semanticAnalyze=function semanticAnalyze(sa){var _this=this,children=_this.children,props=_this.props,macroExpressions=_this.macroExpressions;if(children.length===1){var _macroExpressions;var macroStructDeclaration=children[0];var macroProps=macroStructDeclaration.props;for(var i=0,length=macroProps.length;i<length;i++){macroProps[i].isInMacroBranch=true;props.push(macroProps[i])}(_macroExpressions=macroExpressions).push.apply(_macroExpressions,[].concat(macroStructDeclaration.macroExpressions));return}if(children.length===3){this._typeSpecifier=children[0];this._declaratorList=children[1]}else{this._typeSpecifier=children[1];this._declaratorList=children[2]}var firstChild=children[0];var _this__typeSpecifier=this._typeSpecifier,type=_this__typeSpecifier.type,lexeme=_this__typeSpecifier.lexeme;var isInMacroBranch=sa.symbolTableStack.isInMacroBranch;if(_instanceof(firstChild,LayoutQualifier)){var declarator=children[2];var typeInfo=new SymbolType(type,lexeme,undefined,this._typeSpecifier.structDeclarations);var prop=new StructProp(typeInfo,declarator.ident,firstChild.index,isInMacroBranch);props.push(prop)}else{var isFlat=children.length===4&&ParserUtils.hasQualifier(children[0],Keyword.FLAT);var declaratorList=this._declaratorList.declaratorList;var declaratorListLength=declaratorList.length;props.length=declaratorListLength;for(var i1=0;i1<declaratorListLength;i1++){var declarator1=declaratorList[i1];var typeInfo1=new SymbolType(type,lexeme,declarator1.arraySpecifier,this._typeSpecifier.structDeclarations);var prop1=new StructProp(typeInfo1,declarator1.ident,undefined,isInMacroBranch,isFlat);props[i1]=prop1}}};return StructDeclaration}(TreeNode);ASTNodes.StructDeclaration=StructDeclaration;StructDeclaration=__decorate([ASTNodeDecorator(NoneTerminal.struct_declaration)],StructDeclaration);var MacroStructDeclaration=function(TreeNode){_inherits(MacroStructDeclaration,TreeNode);function MacroStructDeclaration(){var _this;_this=TreeNode.apply(this,arguments)||this,_this.props=[],_this.macroExpressions=[];return _this}var _proto=MacroStructDeclaration.prototype;_proto.init=function init(){this.props.length=0;this.macroExpressions.length=0};_proto.semanticAnalyze=function semanticAnalyze(){var children=this.children;this.macroExpressions.push(children[0]);if(children.length===3){var _this_props,_this_props1,_this_macroExpressions,_this_macroExpressions1;(_this_props=this.props).push.apply(_this_props,[].concat(children[1].propList));(_this_props1=this.props).push.apply(_this_props1,[].concat(children[2].props));(_this_macroExpressions=this.macroExpressions).push.apply(_this_macroExpressions,[].concat(children[1].macroExpressions));(_this_macroExpressions1=this.macroExpressions).push.apply(_this_macroExpressions1,[].concat(children[2].macroExpressions))}else{var _this_props2,_this_macroExpressions2;(_this_props2=this.props).push.apply(_this_props2,[].concat(children[1].props));(_this_macroExpressions2=this.macroExpressions).push.apply(_this_macroExpressions2,[].concat(children[1].macroExpressions))}};return MacroStructDeclaration}(TreeNode);ASTNodes.MacroStructDeclaration=MacroStructDeclaration;MacroStructDeclaration=__decorate([ASTNodeDecorator(NoneTerminal.macro_struct_declaration)],MacroStructDeclaration);var MacroStructBranch=function(TreeNode){_inherits(MacroStructBranch,TreeNode);function MacroStructBranch(){var _this;_this=TreeNode.apply(this,arguments)||this,_this.props=[],_this.macroExpressions=[];return _this}var _proto=MacroStructBranch.prototype;_proto.init=function init(){this.props.length=0;this.macroExpressions.length=0};_proto.semanticAnalyze=function semanticAnalyze(){var children=this.children;var lastNode=children[children.length-1];this.macroExpressions.push(children[0]);if(_instanceof(children[1],StructDeclarationList)){var _this_props,_this_macroExpressions;(_this_props=this.props).push.apply(_this_props,[].concat(children[1].propList));(_this_macroExpressions=this.macroExpressions).push.apply(_this_macroExpressions,[].concat(children[1].macroExpressions))}if(_instanceof(lastNode,MacroStructBranch)){var _this_props1,_this_macroExpressions1;(_this_props1=this.props).push.apply(_this_props1,[].concat(lastNode.props));(_this_macroExpressions1=this.macroExpressions).push.apply(_this_macroExpressions1,[].concat(lastNode.macroExpressions))}if(children.length>1&&_instanceof(lastNode,MacroPopContext)){this.macroExpressions.push(lastNode)}};return MacroStructBranch}(TreeNode);ASTNodes.MacroStructBranch=MacroStructBranch;MacroStructBranch=__decorate([ASTNodeDecorator(NoneTerminal.macro_struct_branch)],MacroStructBranch);var LayoutQualifier=function(TreeNode){_inherits(LayoutQualifier,TreeNode);function LayoutQualifier(){return TreeNode.apply(this,arguments)||this}var _proto=LayoutQualifier.prototype;_proto.semanticAnalyze=function semanticAnalyze(sa){this.index=Number(this.children[4].lexeme)};return LayoutQualifier}(TreeNode);ASTNodes.LayoutQualifier=LayoutQualifier;LayoutQualifier=__decorate([ASTNodeDecorator(NoneTerminal.layout_qualifier)],LayoutQualifier);var StructDeclaratorList=function(TreeNode){_inherits(StructDeclaratorList,TreeNode);function StructDeclaratorList(){var _this;_this=TreeNode.apply(this,arguments)||this,_this.declaratorList=[];return _this}var _proto=StructDeclaratorList.prototype;_proto.init=function init(){this.declaratorList.length=0};_proto.semanticAnalyze=function semanticAnalyze(sa){var _this=this,children=_this.children,declaratorList=_this.declaratorList;if(children.length===1){declaratorList.push(children[0])}else{var list=children[0];var declarator=children[1];var listLength=list.declaratorList.length;declaratorList.length=listLength+1;for(var i=0;i<listLength;i++){declaratorList[i]=list.declaratorList[i]}declaratorList[listLength]=declarator}};return StructDeclaratorList}(TreeNode);ASTNodes.StructDeclaratorList=StructDeclaratorList;StructDeclaratorList=__decorate([ASTNodeDecorator(NoneTerminal.struct_declarator_list)],StructDeclaratorList);var StructDeclarator=function(TreeNode){_inherits(StructDeclarator,TreeNode);function StructDeclarator(){return TreeNode.apply(this,arguments)||this}var _proto=StructDeclarator.prototype;_proto.init=function init(){this.arraySpecifier=undefined};_proto.semanticAnalyze=function semanticAnalyze(sa){var children=this.children;this.ident=children[0];this.arraySpecifier=children[1]};return StructDeclarator}(TreeNode);ASTNodes.StructDeclarator=StructDeclarator;StructDeclarator=__decorate([ASTNodeDecorator(NoneTerminal.struct_declarator)],StructDeclarator);var VariableDeclaration=function(TreeNode){_inherits(VariableDeclaration,TreeNode);function VariableDeclaration(){return TreeNode.apply(this,arguments)||this}var _proto=VariableDeclaration.prototype;_proto.init=function init(){this.isStatic=false;this.declarator=undefined};_proto.semanticAnalyze=function semanticAnalyze(sa){var children=this.children;var type=children[0];var ident=children[1];this.type=type;var hasInitializer=children.length===4;var arraySpecifier=children.length===3?children[2]:undefined;var initializer=hasInitializer?children[3]:undefined;var typeInfo=new SymbolType(type.type,type.typeSpecifier.lexeme,arraySpecifier,type.typeSpecifier.structDeclarations);var sm=sa.assignSourceScope(new VarSymbol(ident.lexeme,typeInfo,true,this,type.isConst,!hasInitializer&&!type.isConst),ident.location);this.declarator={identifier:ident,typeInfo:typeInfo,initializer:initializer,isConst:type.isConst,isGlobal:true,symbol:sm};var insertResult=sa.symbolTableStack.insert(sm,ident.branch);sa.reportRedefinition(ident.location,sm,insertResult);if(children.length===4){this.isStatic=true}};_proto.codeGen=function codeGen(visitor){if(this.isStatic){return TreeNode.prototype.codeGen.call(this,visitor)}else{return visitor.cache(this,visitor.visitGlobalVariableDeclaration(this))}};return VariableDeclaration}(TreeNode);ASTNodes.VariableDeclaration=VariableDeclaration;VariableDeclaration=__decorate([ASTNodeDecorator(NoneTerminal.variable_declaration)],VariableDeclaration);var VariableDeclarationList=function(TreeNode){_inherits(VariableDeclarationList,TreeNode);function VariableDeclarationList(){var _this;_this=TreeNode.apply(this,arguments)||this,_this.variableDeclarations=[];return _this}var _proto=VariableDeclarationList.prototype;_proto.init=function init(){this.variableDeclarations.length=0};_proto.semanticAnalyze=function semanticAnalyze(sa){var children=this.children;var length=children.length;var child=children[0];var type=child.type;this.type=type;if(_instanceof(child,VariableDeclaration)){this.variableDeclarations.push(child)}else{var _this_variableDeclarations;(_this_variableDeclarations=this.variableDeclarations).push.apply(_this_variableDeclarations,[].concat(child.variableDeclarations));var ident=children[2];var newVariable=sa.objectPool?sa.objectPool.createNode(VariableDeclaration):new VariableDeclaration;if(length===3){newVariable.set(ident.location,[type,ident])}else{newVariable.set(ident.location,[type,ident,children[3]])}newVariable.semanticAnalyze(sa);this.variableDeclarations.push(newVariable)}};return VariableDeclarationList}(TreeNode);ASTNodes.VariableDeclarationList=VariableDeclarationList;VariableDeclarationList=__decorate([ASTNodeDecorator(NoneTerminal.variable_declaration_list)],VariableDeclarationList);var VariableIdentifier=function(TreeNode){_inherits(VariableIdentifier,TreeNode);function VariableIdentifier(){var _this;_this=TreeNode.apply(this,arguments)||this,_this.referenceGlobalSymbolNames=[],_this._symbols=[];return _this}var _proto=VariableIdentifier.prototype;_proto.resolvedSymbols=function resolvedSymbols(){return this._symbols};_proto.resolvedValueSymbols=function resolvedValueSymbols(){var child=this.children[0];if(_instanceof(child,MacroCallSymbol)||_instanceof(child,MacroCallFunction)){var _this__valueSymbols;return(_this__valueSymbols=this._valueSymbols)!=null?_this__valueSymbols:EMPTY_VALUE_SYMBOLS}return this._symbols};_proto.init=function init(){this.typeInfo=TypeAny;this.builtinSemantic=undefined;this.isArray=false;this.arraySize=undefined;this.referenceGlobalSymbolNames.length=0;this._symbols.length=0;if(this._valueSymbols)this._valueSymbols.length=0};_proto.semanticAnalyze=function semanticAnalyze(sa){if(sa.diagnosticsEnabled){var child=this.children[0];var referenceGlobalSymbolNames=this.referenceGlobalSymbolNames;var symbols=this._symbols;var references=_instanceof(child,BaseToken)?[{name:child.lexeme,branch:this._branch}]:child.referenceSymbols;var needFindNames=[];var builtinAliasType;if(!_instanceof(child,BaseToken)){for(var _iterator=_create_for_of_iterator_helper_loose(references),_step;!(_step=_iterator()).done;){var reference=_step.value;var builtin=reference.name===undefined?undefined:BuiltinVariable.getVar(reference.name);if(!reference.isValueIdentity||reference.unresolved||!builtin||builtinAliasType!==undefined&&builtinAliasType!==builtin.type){builtinAliasType=undefined;break}builtinAliasType=builtin.type}}for(var i=0;i<references.length;i++){var _references_i=references[i],name=_references_i.name,branch=_references_i.branch,isValueIdentity=_references_i.isValueIdentity,replacementMemberOwner=_references_i.replacementMemberOwner,requiresRuntimeOwnerExpansion=_references_i.requiresRuntimeOwnerExpansion,unresolved=_references_i.unresolved;if(unresolved){this._registerUnresolvedReferenceResolution(sa,branch,replacementMemberOwner,requiresRuntimeOwnerExpansion,isValueIdentity);continue}if(name===undefined)continue;needFindNames.push(name);if(sa.macroDefineList[name]){if(replacementMemberOwner||isValueIdentity){this._registerUnresolvedReferenceResolution(sa,branch,replacementMemberOwner,requiresRuntimeOwnerExpansion,isValueIdentity)}continue}if(!_instanceof(child,BaseToken)&&BuiltinFunction.isExist(name)){continue}var builtinVar=BuiltinVariable.getVar(name);if(builtinVar){this.typeInfo=_instanceof(child,BaseToken)?builtinVar.type:builtinAliasType!=null?builtinAliasType:TypeAny;if(_instanceof(child,BaseToken))this.builtinSemantic=builtinVar.semantic;continue}var hit=VariableIdentifier._lookupAndMarkGlobalReference(sa,name,symbols,referenceGlobalSymbolNames,this.location,branch,this,false,!_instanceof(child,BaseToken)&&(replacementMemberOwner!==undefined||isValueIdentity===true),replacementMemberOwner,requiresRuntimeOwnerExpansion,isValueIdentity);if(isValueIdentity)this._appendValueSymbols(symbols);if(hit&&(_instanceof(child,BaseToken)||!child.visibleHasAstValue)){var _first_dataType,_first_dataType1,_first_dataType_arraySpecifier,_first_dataType2;var first=symbols[0];var firstType=(_first_dataType=first.dataType)==null?void 0:_first_dataType.type;var firstIsArray=!!((_first_dataType1=first.dataType)==null?void 0:_first_dataType1.arraySpecifier);var firstArraySize=(_first_dataType2=first.dataType)==null?void 0:(_first_dataType_arraySpecifier=_first_dataType2.arraySpecifier)==null?void 0:_first_dataType_arraySpecifier.size;var divergent=false;var arraySizeDivergent=false;if(symbols.length>1){for(var s=1;s<symbols.length;s++){var _d_arraySpecifier;var d=symbols[s].dataType;if((d==null?void 0:d.type)!==firstType||!!(d==null?void 0:d.arraySpecifier)!==firstIsArray){divergent=true;break}if((d==null?void 0:(_d_arraySpecifier=d.arraySpecifier)==null?void 0:_d_arraySpecifier.size)!==firstArraySize)arraySizeDivergent=true}}if(divergent){this.typeInfo=TypeAny;this.isArray=false;this.arraySize=undefined}else{this.typeInfo=firstType;this.isArray=firstIsArray;this.arraySize=arraySizeDivergent?undefined:firstArraySize}}}if(!_instanceof(child,BaseToken)){VariableIdentifier._probeCrossArmShadowing(sa,child,needFindNames,symbols,referenceGlobalSymbolNames)}return}this._semanticAnalyzeForCodegen(sa)};_proto._semanticAnalyzeForCodegen=function _semanticAnalyzeForCodegen(sa){var _this=this;var child=this.children[0];if(_instanceof(child,BaseToken)){var name=child.lexeme;if(sa.macroDefineList[name])return;var builtinVar=BuiltinVariable.getVar(name);if(builtinVar){this.typeInfo=builtinVar.type;this.builtinSemantic=builtinVar.semantic;return}this._resolveCodegenReference(sa,name,true,this._branch);return}var references=child.referenceSymbols.length?child.referenceSymbols:child.referenceSymbolNames.map(function(name){return{name:name,branch:_this._branch}});for(var i=0;i<references.length;i++){var _references_i=references[i],name1=_references_i.name,branch=_references_i.branch,isValueIdentity=_references_i.isValueIdentity,replacementMemberOwner=_references_i.replacementMemberOwner,requiresRuntimeOwnerExpansion=_references_i.requiresRuntimeOwnerExpansion,unresolved=_references_i.unresolved;if(unresolved){this._registerUnresolvedReferenceResolution(sa,branch,replacementMemberOwner,requiresRuntimeOwnerExpansion,isValueIdentity);continue}if(name1===undefined)continue;if(sa.macroDefineList[name1]){if(replacementMemberOwner||isValueIdentity){this._registerUnresolvedReferenceResolution(sa,branch,replacementMemberOwner,requiresRuntimeOwnerExpansion,isValueIdentity)}continue}if(BuiltinFunction.isExist(name1))continue;var builtinVar1=BuiltinVariable.getVar(name1);if(builtinVar1){this.typeInfo=builtinVar1.type;continue}this._resolveCodegenReference(sa,name1,!child.hasAstValue,branch,replacementMemberOwner!==undefined||isValueIdentity===true,replacementMemberOwner,requiresRuntimeOwnerExpansion,isValueIdentity)}var macroName=child.macroName;if(!macroName||BuiltinFunction.isExist(macroName)||BuiltinVariable.getVar(macroName))return;for(var i1=0;i1<references.length;i1++){if(references[i1].name===macroName)return}var lookupSymbol=sa.lookupSymbol;lookupSymbol.set(macroName,ESymbolType.Any);sa.symbolTableStack.lookupAllWithRuntimeFallbacks(lookupSymbol,true,sa.runtimeLookupScratch,sa.runtimeFallbackScratch,this._branch);this._markCodegenReference(macroName,sa.runtimeLookupScratch);this._markCodegenReference(macroName,sa.runtimeFallbackScratch)};_proto._resolveCodegenReference=function _resolveCodegenReference(sa,name,inferType,callSiteBranch,captureResolution,replacementMemberOwner,requiresRuntimeOwnerExpansion,isValueIdentity){if(captureResolution===void 0)captureResolution=false;var lookupSymbol=sa.lookupSymbol;lookupSymbol.set(name,ESymbolType.Any);var symbols=this._symbols;var runtimeFallbacks=sa.runtimeFallbackScratch;sa.symbolTableStack.lookupAllWithRuntimeFallbacks(lookupSymbol,true,symbols,runtimeFallbacks,callSiteBranch);if(!symbols.length){if(captureResolution&&(replacementMemberOwner||isValueIdentity)){this._registerUnresolvedReferenceResolution(sa,callSiteBranch,replacementMemberOwner,requiresRuntimeOwnerExpansion,isValueIdentity)}return}this._appendCodegenRuntimeFallbacks(sa,symbols,runtimeFallbacks,callSiteBranch,captureResolution,replacementMemberOwner,requiresRuntimeOwnerExpansion,isValueIdentity);this._markCodegenReference(name,symbols);if(isValueIdentity)this._appendValueSymbols(symbols);if(!inferType)return;var first=symbols[0].dataType;var arraySizeDivergent=false;for(var i=1;i<symbols.length;i++){var _current_arraySpecifier,_first_arraySpecifier;var current=symbols[i].dataType;if((current==null?void 0:current.type)!==(first==null?void 0:first.type)||!!(current==null?void 0:current.arraySpecifier)!==!!(first==null?void 0:first.arraySpecifier))return;if((current==null?void 0:(_current_arraySpecifier=current.arraySpecifier)==null?void 0:_current_arraySpecifier.size)!==(first==null?void 0:(_first_arraySpecifier=first.arraySpecifier)==null?void 0:_first_arraySpecifier.size))arraySizeDivergent=true}this._setCodegenType(first,arraySizeDivergent)};_proto._appendCodegenRuntimeFallbacks=function _appendCodegenRuntimeFallbacks(sa,symbols,runtimeFallbacks,callSiteBranch,captureResolution,replacementMemberOwner,requiresRuntimeOwnerExpansion,isValueIdentity){var fallbackStart=symbols.length;for(var i=0,n=runtimeFallbacks.length;i<n;i++){var fallback=runtimeFallbacks[i];if(!(_instanceof(fallback,VarSymbol)||_instanceof(fallback,FnSymbol)))continue;if(symbols.indexOf(fallback)===-1)symbols.push(fallback)}this._registerReferenceResolution(sa,fallbackStart,callSiteBranch,captureResolution,replacementMemberOwner,requiresRuntimeOwnerExpansion,isValueIdentity)};_proto._appendValueSymbols=function _appendValueSymbols(symbols){if(!symbols.length)return;var _this__valueSymbols;var valueSymbols=(_this__valueSymbols=this._valueSymbols)!=null?_this__valueSymbols:this._valueSymbols=[];for(var _iterator=_create_for_of_iterator_helper_loose(symbols),_step;!(_step=_iterator()).done;){var symbol=_step.value;if(valueSymbols.indexOf(symbol)===-1)valueSymbols.push(symbol)}};_proto._markCodegenReference=function _markCodegenReference(name,symbols){for(var i=0;i<symbols.length;i++){var symbol=symbols[i];if(_instanceof(symbol,FnSymbol)||_instanceof(symbol,VarSymbol)&&symbol.isGlobalVariable){if(this.referenceGlobalSymbolNames.indexOf(name)===-1){this.referenceGlobalSymbolNames.push(name)}return}}};_proto._setCodegenType=function _setCodegenType(dataType,arraySizeDivergent){if(arraySizeDivergent===void 0)arraySizeDivergent=false;var _dataType_arraySpecifier;this.typeInfo=dataType==null?void 0:dataType.type;this.isArray=!!(dataType==null?void 0:dataType.arraySpecifier);this.arraySize=arraySizeDivergent?undefined:dataType==null?void 0:(_dataType_arraySpecifier=dataType.arraySpecifier)==null?void 0:_dataType_arraySpecifier.size};_proto._registerReferenceResolution=function _registerReferenceResolution(sa,fallbackStart,callSiteBranch,captureResolution,replacementMemberOwner,requiresRuntimeOwnerExpansion,isValueIdentity){var capturesEmptyResolution=captureResolution&&(replacementMemberOwner!==undefined||isValueIdentity===true);if(!this._symbols.length&&!capturesEmptyResolution||!captureResolution&&fallbackStart>=this._symbols.length){return}sa.shaderData.referenceResolutionSnapshots.push({reference:this,symbols:this._symbols.slice(),fallbackStart:fallbackStart,callSiteBranch:callSiteBranch,replacementMemberOwner:replacementMemberOwner,requiresRuntimeOwnerExpansion:requiresRuntimeOwnerExpansion,isValueIdentity:isValueIdentity})};_proto._registerUnresolvedReferenceResolution=function _registerUnresolvedReferenceResolution(sa,callSiteBranch,replacementMemberOwner,requiresRuntimeOwnerExpansion,isValueIdentity){sa.shaderData.referenceResolutionSnapshots.push({reference:this,symbols:EMPTY_VALUE_SYMBOLS,fallbackStart:0,callSiteBranch:callSiteBranch,replacementMemberOwner:replacementMemberOwner,requiresRuntimeOwnerExpansion:requiresRuntimeOwnerExpansion,isValueIdentity:isValueIdentity})};_proto.codeGen=function codeGen(visitor){return visitor.cache(this,visitor.visitVariableIdentifier(this))};_proto.getLexeme=function getLexeme(visitor){var child=this.children[0];if(_instanceof(child,BaseToken)){return child.lexeme}else{return child.codeGen(visitor)}};VariableIdentifier._probeCrossArmShadowing=function _probeCrossArmShadowing(sa,child,needFindNames,symbols,referenceGlobalSymbolNames){var macroName=child.macroName;if(!macroName)return;if(needFindNames.indexOf(macroName)!==-1)return;if(BuiltinFunction.isExist(macroName)||BuiltinVariable.getVar(macroName))return;VariableIdentifier._lookupAndMarkGlobalReference(sa,macroName,symbols,referenceGlobalSymbolNames,null,EMPTY_BRANCH,undefined,true)};VariableIdentifier._lookupAndMarkGlobalReference=function _lookupAndMarkGlobalReference(sa,name,symbols,referenceGlobalSymbolNames,missErrorLoc,callsiteBranch,resolvedReference,retainPartialBranchCandidates,captureResolution,replacementMemberOwner,requiresRuntimeOwnerExpansion,isValueIdentity){if(retainPartialBranchCandidates===void 0)retainPartialBranchCandidates=false;if(captureResolution===void 0)captureResolution=false;var lookupSymbol=sa.lookupSymbol;lookupSymbol.set(name,ESymbolType.Any);var runtimeFallbacks=sa.runtimeFallbackScratch;sa.symbolTableStack.lookupAllWithRuntimeFallbacks(lookupSymbol,true,symbols,runtimeFallbacks,callsiteBranch);var directlyVisibleCount=0;for(var i=0,n=symbols.length;i<n;i++){var symbol=symbols[i];var _symbol_branchSignature;if(sa.isBranchVisibleFrom((_symbol_branchSignature=symbol.branchSignature)!=null?_symbol_branchSignature:EMPTY_BRANCH,callsiteBranch)){symbols[directlyVisibleCount++]=symbol}}if(directlyVisibleCount)symbols.length=directlyVisibleCount;var fallbackStart=symbols.length;for(var i1=0,n1=runtimeFallbacks.length;i1<n1;i1++){var fallback=runtimeFallbacks[i1];if(!(_instanceof(fallback,VarSymbol)||_instanceof(fallback,FnSymbol)))continue;if(symbols.indexOf(fallback)===-1)symbols.push(fallback)}resolvedReference==null?void 0:resolvedReference._registerReferenceResolution(sa,fallbackStart,callsiteBranch,captureResolution,replacementMemberOwner,requiresRuntimeOwnerExpansion,isValueIdentity);if(!symbols.length){if(missErrorLoc){if(sa.symbolTableStack.hasSymbol(lookupSymbol)){sa.symbolTableStack.lookupAll(lookupSymbol,true,symbols);sa.reportBranchAvailability(missErrorLoc,\"Identifier\",name,sa.getBranchCoverage(symbols.map(function(symbol){var _symbol_branchSignature;return(_symbol_branchSignature=symbol.branchSignature)!=null?_symbol_branchSignature:EMPTY_BRANCH}),callsiteBranch));symbols.length=0;return false}}return false}var coverage=sa.getBranchCoverage(symbols.map(function(symbol){var _symbol_branchSignature;return(_symbol_branchSignature=symbol.branchSignature)!=null?_symbol_branchSignature:EMPTY_BRANCH}),callsiteBranch);if((VariableIdentifier._containsGlobalSymbol(symbols)||VariableIdentifier._containsGlobalSymbol(runtimeFallbacks))&&referenceGlobalSymbolNames.indexOf(name)===-1){referenceGlobalSymbolNames.push(name)}if(!retainPartialBranchCandidates&&coverage!==\"covered\"&&!VariableIdentifier._hasConflictingGlobalBranches(sa,symbols)){if(missErrorLoc){sa.reportBranchAvailability(missErrorLoc,\"Identifier\",name,coverage)}return false}return true};VariableIdentifier._hasConflictingGlobalBranches=function _hasConflictingGlobalBranches(sa,symbols){for(var i=0,n=symbols.length;i<n;i++){var left=symbols[i];if(!_instanceof(left,FnSymbol)&&!left.isGlobalVariable)continue;for(var j=i+1;j<n;j++){var right=symbols[j];if(!_instanceof(right,FnSymbol)&&!right.isGlobalVariable)continue;var _left_branchSignature,_right_branchSignature;if(sa.canDeclarationsCoexist((_left_branchSignature=left.branchSignature)!=null?_left_branchSignature:EMPTY_BRANCH,(_right_branchSignature=right.branchSignature)!=null?_right_branchSignature:EMPTY_BRANCH))return true}}return false};VariableIdentifier._containsGlobalSymbol=function _containsGlobalSymbol(symbols){for(var i=0;i<symbols.length;i++){var symbol=symbols[i];if(_instanceof(symbol,FnSymbol)||_instanceof(symbol,VarSymbol)&&symbol.isGlobalVariable)return true}return false};return VariableIdentifier}(TreeNode);ASTNodes.VariableIdentifier=VariableIdentifier;VariableIdentifier=__decorate([ASTNodeDecorator(NoneTerminal.variable_identifier)],VariableIdentifier);var GLShaderProgram=function(TreeNode){_inherits(GLShaderProgram,TreeNode);function GLShaderProgram(){return TreeNode.apply(this,arguments)||this}var _proto=GLShaderProgram.prototype;_proto.semanticAnalyze=function semanticAnalyze(sa){this.shaderData=sa.shaderData;this.shaderData.symbolTable=sa.symbolTableStack.scope};return GLShaderProgram}(TreeNode);ASTNodes.GLShaderProgram=GLShaderProgram;GLShaderProgram=__decorate([ASTNodeDecorator(NoneTerminal.gs_shader_program)],GLShaderProgram);var GlobalDeclaration=function(TreeNode){_inherits(GlobalDeclaration,TreeNode);function GlobalDeclaration(){var _this;_this=TreeNode.apply(this,arguments)||this,_this.macroExpressions=[];return _this}var _proto=GlobalDeclaration.prototype;_proto.init=function init(){this.macroExpressions.length=0};_proto.semanticAnalyze=function semanticAnalyze(sa){var child=this.children[0];if(_instanceof(child,MacroUndef)||_instanceof(child,GlobalMacroIfStatement)||_instanceof(child,MacroDefine)||_instanceof(child,BaseToken)){sa.shaderData.globalMacroDeclarations.push(this);if(_instanceof(child,GlobalMacroIfStatement)){var _this_macroExpressions;(_this_macroExpressions=this.macroExpressions).push.apply(_this_macroExpressions,[].concat(child.macroExpressions))}else{this.macroExpressions.push(child)}}};return GlobalDeclaration}(TreeNode);ASTNodes.GlobalDeclaration=GlobalDeclaration;GlobalDeclaration=__decorate([ASTNodeDecorator(NoneTerminal.global_declaration)],GlobalDeclaration);var MacroUndef=function(TreeNode){_inherits(MacroUndef,TreeNode);function MacroUndef(){return TreeNode.apply(this,arguments)||this}var _proto=MacroUndef.prototype;_proto.codeGen=function codeGen(visitor){return visitor.cache(this,TreeNode.prototype.codeGen.call(this,visitor)+\"\\n\")};return MacroUndef}(TreeNode);ASTNodes.MacroUndef=MacroUndef;MacroUndef=__decorate([ASTNodeDecorator(NoneTerminal.macro_undef)],MacroUndef);var MacroPushContext=function(TreeNode){_inherits(MacroPushContext,TreeNode);function MacroPushContext(){return TreeNode.apply(this,arguments)||this}var _proto=MacroPushContext.prototype;_proto.semanticAnalyze=function semanticAnalyze(sa){sa.symbolTableStack._macroLevel++};_proto.codeGen=function codeGen(visitor){return visitor.cache(this,\"\\n\"+TreeNode.prototype.codeGen.call(this,visitor)+\"\\n\")};return MacroPushContext}(TreeNode);ASTNodes.MacroPushContext=MacroPushContext;MacroPushContext=__decorate([ASTNodeDecorator(NoneTerminal.macro_push_context)],MacroPushContext);var MacroPopContext=function(TreeNode){_inherits(MacroPopContext,TreeNode);function MacroPopContext(){return TreeNode.apply(this,arguments)||this}var _proto=MacroPopContext.prototype;_proto.semanticAnalyze=function semanticAnalyze(sa){sa.symbolTableStack._macroLevel--};_proto.codeGen=function codeGen(visitor){return visitor.cache(this,\"\\n\"+TreeNode.prototype.codeGen.call(this,visitor)+\"\\n\")};return MacroPopContext}(TreeNode);ASTNodes.MacroPopContext=MacroPopContext;MacroPopContext=__decorate([ASTNodeDecorator(NoneTerminal.macro_pop_context)],MacroPopContext);var MacroElifExpression=function(TreeNode){_inherits(MacroElifExpression,TreeNode);function MacroElifExpression(){return TreeNode.apply(this,arguments)||this}var _proto=MacroElifExpression.prototype;_proto.codeGen=function codeGen(visitor){return visitor.cache(this,\"\\n\"+TreeNode.prototype.codeGen.call(this,visitor)+\"\\n\")};return MacroElifExpression}(TreeNode);ASTNodes.MacroElifExpression=MacroElifExpression;MacroElifExpression=__decorate([ASTNodeDecorator(NoneTerminal.macro_elif_expression)],MacroElifExpression);var MacroElseExpression=function(TreeNode){_inherits(MacroElseExpression,TreeNode);function MacroElseExpression(){return TreeNode.apply(this,arguments)||this}var _proto=MacroElseExpression.prototype;_proto.codeGen=function codeGen(visitor){return visitor.cache(this,\"\\n\"+TreeNode.prototype.codeGen.call(this,visitor)+\"\\n\")};return MacroElseExpression}(TreeNode);ASTNodes.MacroElseExpression=MacroElseExpression;MacroElseExpression=__decorate([ASTNodeDecorator(NoneTerminal.macro_else_expression)],MacroElseExpression);var GlobalMacroDeclaration=function(TreeNode){_inherits(GlobalMacroDeclaration,TreeNode);function GlobalMacroDeclaration(){var _this;_this=TreeNode.apply(this,arguments)||this,_this.macroExpressions=[];return _this}var _proto=GlobalMacroDeclaration.prototype;_proto.init=function init(){this.macroExpressions.length=0};_proto.semanticAnalyze=function semanticAnalyze(sa){var children=this.children;var macroExpressions=this.macroExpressions;if(children.length===1){var _macroExpressions;(_macroExpressions=macroExpressions).push.apply(_macroExpressions,[].concat(children[0].macroExpressions))}else{var _macroExpressions1,_macroExpressions2;(_macroExpressions1=macroExpressions).push.apply(_macroExpressions1,[].concat(children[0].macroExpressions));(_macroExpressions2=macroExpressions).push.apply(_macroExpressions2,[].concat(children[1].macroExpressions))}};_proto.codeGen=function codeGen(visitor){var children=this.children;if(children.length===1){return visitor.cache(this,children[0].codeGen(visitor))}else{return visitor.cache(this,children[0].codeGen(visitor)+\"\\n\"+children[1].codeGen(visitor))}};return GlobalMacroDeclaration}(TreeNode);ASTNodes.GlobalMacroDeclaration=GlobalMacroDeclaration;GlobalMacroDeclaration=__decorate([ASTNodeDecorator(NoneTerminal.global_macro_declaration)],GlobalMacroDeclaration);var GlobalMacroIfStatement=function(TreeNode){_inherits(GlobalMacroIfStatement,TreeNode);function GlobalMacroIfStatement(){var _this;_this=TreeNode.apply(this,arguments)||this,_this.macroExpressions=[];return _this}var _proto=GlobalMacroIfStatement.prototype;_proto.init=function init(){this.macroExpressions.length=0};_proto.semanticAnalyze=function semanticAnalyze(sa){var children=this.children;var macroExpressions=this.macroExpressions;if(children.length===3){var _macroExpressions,_macroExpressions1;macroExpressions.push(children[0]);(_macroExpressions=macroExpressions).push.apply(_macroExpressions,[].concat(children[1].macroExpressions));(_macroExpressions1=macroExpressions).push.apply(_macroExpressions1,[].concat(children[2].macroExpressions))}else{var _macroExpressions2;macroExpressions.push(children[0]);(_macroExpressions2=macroExpressions).push.apply(_macroExpressions2,[].concat(children[1].macroExpressions))}};return GlobalMacroIfStatement}(TreeNode);ASTNodes.GlobalMacroIfStatement=GlobalMacroIfStatement;GlobalMacroIfStatement=__decorate([ASTNodeDecorator(NoneTerminal.global_macro_if_statement)],GlobalMacroIfStatement);var GlobalMacroBranch=function(TreeNode){_inherits(GlobalMacroBranch,TreeNode);function GlobalMacroBranch(){var _this;_this=TreeNode.apply(this,arguments)||this,_this.macroExpressions=[];return _this}var _proto=GlobalMacroBranch.prototype;_proto.init=function init(){this.macroExpressions.length=0};_proto.semanticAnalyze=function semanticAnalyze(sa){var children=this.children;var lastNode=children[children.length-1];var macroExpressions=this.macroExpressions;macroExpressions.push(children[0]);if(_instanceof(children[1],GlobalMacroDeclaration)){var _macroExpressions;(_macroExpressions=macroExpressions).push.apply(_macroExpressions,[].concat(children[1].macroExpressions))}if(_instanceof(lastNode,GlobalMacroBranch)){var _macroExpressions1;(_macroExpressions1=macroExpressions).push.apply(_macroExpressions1,[].concat(lastNode.macroExpressions))}if(children.length>1&&_instanceof(lastNode,MacroPopContext)){macroExpressions.push(lastNode)}};return GlobalMacroBranch}(TreeNode);ASTNodes.GlobalMacroBranch=GlobalMacroBranch;GlobalMacroBranch=__decorate([ASTNodeDecorator(NoneTerminal.global_macro_branch)],GlobalMacroBranch);var MacroIfStatement=function(TreeNode){_inherits(MacroIfStatement,TreeNode);function MacroIfStatement(){return TreeNode.apply(this,arguments)||this}return MacroIfStatement}(TreeNode);ASTNodes.MacroIfStatement=MacroIfStatement;MacroIfStatement=__decorate([ASTNodeDecorator(NoneTerminal.macro_if_statement)],MacroIfStatement);var MacroBranch=function(TreeNode){_inherits(MacroBranch,TreeNode);function MacroBranch(){return TreeNode.apply(this,arguments)||this}return MacroBranch}(TreeNode);ASTNodes.MacroBranch=MacroBranch;MacroBranch=__decorate([ASTNodeDecorator(NoneTerminal.macro_branch)],MacroBranch);var MacroCallSymbol=function(TreeNode1){_inherits(MacroCallSymbol,TreeNode1);function MacroCallSymbol(){var _this;_this=TreeNode1.apply(this,arguments)||this,_this.referenceSymbolNames=[],_this.referenceSymbols=[],_this.hasAstValue=false,_this.visibleHasAstValue=false,_this.isFunctionLikeMacro=false,_this.aliasesNonBuiltinIdent=false;return _this}var _proto=MacroCallSymbol.prototype;_proto.init=function init(){this.expandedSyntax=undefined;this.referenceSymbolNames.length=0;this.referenceSymbols.length=0;this.hasAstValue=false;this.visibleHasAstValue=false;this.isFunctionLikeMacro=false;this.aliasesNonBuiltinIdent=false};_proto.semanticAnalyze=function semanticAnalyze(sa){var _sa_semanticDiagnostics_macroExpansion,_sa_semanticDiagnostics;var nameToken=this.children[0];var macroName=nameToken.lexeme;this.macroName=macroName;var defList=sa.macroDefineList[macroName];var refs=this.referenceSymbolNames;refs.length=0;this.referenceSymbols.length=0;this._analyzeForCodegen(defList,refs);var callSiteBranch=nameToken.branch;var referenceSymbols=this.referenceSymbols;var visibleCount=0;var allAst=true;if(defList){for(var i=0,n=defList.length;i<n;i++){var info=defList[i];if(!sa.canBranchesOverlap(info.branch,callSiteBranch))continue;visibleCount++;if(info.valueAst==null){allAst=false;appendMacroReference(referenceSymbols,{unresolved:true,branch:mergeBranchSignatures(callSiteBranch,info.branch),isValueIdentity:true})}else{MacroCallSymbol._collectIdentifierRefs(info.valueAst,info.params,refs,referenceSymbols,callSiteBranch,undefined,ParserUtils.unwrapBareIdentifier(info.valueAst,{allowParens:true}))}}}this.visibleHasAstValue=visibleCount>0&&allAst;if(sa.diagnosticsEnabled)this.expandedSyntax=(_sa_semanticDiagnostics=sa.semanticDiagnostics)==null?void 0:(_sa_semanticDiagnostics_macroExpansion=_sa_semanticDiagnostics.macroExpansion)==null?void 0:_sa_semanticDiagnostics_macroExpansion.call(_sa_semanticDiagnostics,this,sa)};_proto._analyzeForCodegen=function _analyzeForCodegen(defList,refs){var allAst=true;var isFunctionLike=false;var allAliasNonBuiltinIdent=true;var _defList_length;var count=(_defList_length=defList==null?void 0:defList.length)!=null?_defList_length:0;for(var i=0;i<count;i++){var info=defList[i];if(!info.valueAst)allAst=false;if(info.isFunction)isFunctionLike=true;if(info.valueAst)MacroCallSymbol._collectIdentifierRefs(info.valueAst,info.params,refs);if(info.isFunction||!info.valueAst){allAliasNonBuiltinIdent=false}else{var leadingIdent=ParserUtils.unwrapBareIdentifier(info.valueAst,{allowParens:false});var leadingChild=leadingIdent==null?void 0:leadingIdent.children[0];var leadingId=_instanceof(leadingChild,BaseToken)?leadingChild.lexeme:undefined;if(!leadingId||BuiltinFunction.isExist(leadingId))allAliasNonBuiltinIdent=false}}this.hasAstValue=count>0&&allAst;this.isFunctionLikeMacro=isFunctionLike;this.aliasesNonBuiltinIdent=count>0&&allAliasNonBuiltinIdent};MacroCallSymbol._collectIdentifierRefs=function _collectIdentifierRefs(node,params,out,references,callSiteBranch,projectedMemberOwner,valueIdentity){if(callSiteBranch===void 0)callSiteBranch=EMPTY_BRANCH;if(_instanceof(node,PostfixExpression)&&node.children.length===3&&_instanceof(node.children[2],BaseToken)){var base=node.children[0];if(_instanceof(base,TreeNode)){var directOwner=ParserUtils.unwrapBareIdentifier(base,{allowParens:true});if(directOwner){MacroCallSymbol._collectIdentifierRefs(base,params,out,references,callSiteBranch,directOwner,valueIdentity);return}}}if(_instanceof(node,VariableIdentifier)){var child=node.children[0];var isValueIdentity=valueIdentity===node;var replacementMemberOwner=projectedMemberOwner===node?node:undefined;var branch=mergeBranchSignatures(callSiteBranch,node._branch);if(_instanceof(child,BaseToken)){var name=child.lexeme;var formalParameterIndex=params.indexOf(name);if(formalParameterIndex===-1){if(out.indexOf(name)===-1)out.push(name);if(references){appendMacroReference(references,{name:name,branch:branch,isValueIdentity:isValueIdentity,replacementMemberOwner:replacementMemberOwner})}}else if(references&&(replacementMemberOwner||isValueIdentity)){appendMacroReference(references,{formalParameterIndex:formalParameterIndex,branch:branch,isValueIdentity:isValueIdentity,replacementMemberOwner:replacementMemberOwner,requiresRuntimeOwnerExpansion:replacementMemberOwner?true:undefined})}}else if(_instanceof(child,MacroCallSymbol)||_instanceof(child,MacroCallFunction)){var nestedReferences=child.referenceSymbols;for(var _iterator=_create_for_of_iterator_helper_loose(nestedReferences),_step;!(_step=_iterator()).done;){var nestedReference=_step.value;if(nestedReference.unresolved){if(references&&(replacementMemberOwner||isValueIdentity)){appendMacroReference(references,{unresolved:true,branch:mergeBranchSignatures(branch,nestedReference.branch),isValueIdentity:isValueIdentity,replacementMemberOwner:replacementMemberOwner,requiresRuntimeOwnerExpansion:replacementMemberOwner?true:undefined})}continue}var name1=nestedReference.name;var formalParameterIndex1=nestedReference.formalParameterIndex;if(name1!==undefined){var outerFormalIndex=params.indexOf(name1);if(outerFormalIndex===-1){if(out.indexOf(name1)===-1)out.push(name1)}else{name1=undefined;formalParameterIndex1=outerFormalIndex}}if(!references)continue;var nestedBranch=mergeBranchSignatures(branch,nestedReference.branch);var nestedOwner=replacementMemberOwner!=null?replacementMemberOwner:nestedReference.replacementMemberOwner;var nestedIsValueIdentity=isValueIdentity&&nestedReference.isValueIdentity;var requiresRuntimeExpansion=replacementMemberOwner!==undefined||nestedReference.requiresRuntimeOwnerExpansion;if(name1!==undefined){appendMacroReference(references,{name:name1,branch:nestedBranch,isValueIdentity:nestedIsValueIdentity,replacementMemberOwner:nestedOwner,requiresRuntimeOwnerExpansion:requiresRuntimeExpansion})}else if(formalParameterIndex1!==undefined){appendMacroReference(references,{formalParameterIndex:formalParameterIndex1,branch:nestedBranch,isValueIdentity:nestedIsValueIdentity,replacementMemberOwner:nestedOwner,requiresRuntimeOwnerExpansion:requiresRuntimeExpansion})}}var hasNestedValueIdentity=nestedReferences.some(function(reference){return reference.isValueIdentity});if(references&&child.macroName&&(!nestedReferences.length&&replacementMemberOwner||isValueIdentity&&!hasNestedValueIdentity&&!child.visibleHasAstValue)){appendMacroReference(references,{name:child.macroName,branch:branch,isValueIdentity:isValueIdentity,replacementMemberOwner:replacementMemberOwner,requiresRuntimeOwnerExpansion:true});if(out.indexOf(child.macroName)===-1)out.push(child.macroName)}}return}var children=node.children;if(!children)return;for(var i=0,n=children.length;i<n;i++){var c=children[i];if(_instanceof(c,TreeNode)){MacroCallSymbol._collectIdentifierRefs(c,params,out,references,callSiteBranch,projectedMemberOwner,valueIdentity)}}};return MacroCallSymbol}(TreeNode);ASTNodes.MacroCallSymbol=MacroCallSymbol;MacroCallSymbol=__decorate([ASTNodeDecorator(NoneTerminal.macro_call_symbol)],MacroCallSymbol);var MacroCallFunction=function(TreeNode1){_inherits(MacroCallFunction,TreeNode1);function MacroCallFunction(){var _this;_this=TreeNode1.apply(this,arguments)||this,_this.referenceSymbolNames=[],_this.referenceSymbols=[],_this.macroName=\"\",_this.hasAstValue=false,_this.visibleHasAstValue=false,_this.isFunctionLikeMacro=false,_this.aliasesNonBuiltinIdent=false;return _this}var _proto=MacroCallFunction.prototype;_proto.init=function init(){this.expandedSyntax=undefined;this.referenceSymbolNames.length=0;this.referenceSymbols.length=0;this.macroName=\"\";this.hasAstValue=false;this.visibleHasAstValue=false;this.isFunctionLikeMacro=false;this.aliasesNonBuiltinIdent=false};_proto.semanticAnalyze=function semanticAnalyze(sa){var _sa_semanticDiagnostics_macroExpansion,_sa_semanticDiagnostics;var child=this.children[0];var paramList=this.children[2];var paramNodes=_instanceof(paramList,FunctionCallParameterList)?paramList.paramNodes:undefined;for(var _iterator=_create_for_of_iterator_helper_loose(child.referenceSymbols),_step;!(_step=_iterator()).done;){var reference=_step.value;var formalParameterIndex=reference.formalParameterIndex;if(formalParameterIndex===undefined){appendMacroReference(this.referenceSymbols,reference);if(reference.name!==undefined&&this.referenceSymbolNames.indexOf(reference.name)===-1){this.referenceSymbolNames.push(reference.name)}continue}var actual=paramNodes==null?void 0:paramNodes[formalParameterIndex];if(!_instanceof(actual,TreeNode))continue;appendSubstitutedOwnerReferences(actual,reference,this.referenceSymbols,this.referenceSymbolNames)}this.macroName=child.macroName;this.hasAstValue=child.hasAstValue;this.visibleHasAstValue=child.visibleHasAstValue;this.isFunctionLikeMacro=child.isFunctionLikeMacro;this.aliasesNonBuiltinIdent=child.aliasesNonBuiltinIdent;if(sa.diagnosticsEnabled)this.expandedSyntax=(_sa_semanticDiagnostics=sa.semanticDiagnostics)==null?void 0:(_sa_semanticDiagnostics_macroExpansion=_sa_semanticDiagnostics.macroExpansion)==null?void 0:_sa_semanticDiagnostics_macroExpansion.call(_sa_semanticDiagnostics,this,sa)};_proto.codeGen=function codeGen(visitor){return visitor.cache(this,visitor.visitMacroCallFunction(this))};return MacroCallFunction}(TreeNode);ASTNodes.MacroCallFunction=MacroCallFunction;MacroCallFunction=__decorate([ASTNodeDecorator(NoneTerminal.macro_call_function)],MacroCallFunction);var MacroDefine=function(TreeNode){_inherits(MacroDefine,TreeNode);function MacroDefine(){return TreeNode.apply(this,arguments)||this}var _proto=MacroDefine.prototype;_proto.init=function init(){this.macroName=\"\";this.isFunction=false;this.valueExpression=undefined};_proto.semanticAnalyze=function semanticAnalyze(sa){var _this=this;var children=this.children;this.macroName=children[1].lexeme;var params=[];var valueIdx=2;if(_instanceof(children[2],BaseToken)&&children[2].type===Keyword.MACRO_DEFINE_PARAMS){this.isFunction=true;params=ParserUtils.parseMacroParamList(children[2].lexeme);valueIdx=3}if(_instanceof(children[valueIdx],Expression)){this.valueExpression=children[valueIdx]}var definingBranch=children[1].branch;var list=sa.macroDefineList;var entries=list[this.macroName];var sameArity=function(info){return info.isFunction===_this.isFunction&&info.params.length===params.length&&info.params.every(function(p,i){return p===params[i]})};var upgradable=entries==null?void 0:entries.find(function(info){return!info.valueAst&&sameArity(info)&&sameBranch(info.branch,definingBranch)});if(upgradable){upgradable.valueAst=this.valueExpression}else{var info={isFunction:this.isFunction,params:params,valueAst:this.valueExpression,dedupKey:this.macroName+\"#ast/\"+(this.isFunction?params.join(\",\"):\"\"),branch:definingBranch};if(entries)entries.push(info);else list[this.macroName]=[info]}if(this.isFunction){sa.popScope()}};_proto.codeGen=function codeGen(visitor){return visitor.cache(this,visitor.visitMacroDefine(this))};return MacroDefine}(TreeNode);ASTNodes.MacroDefine=MacroDefine;MacroDefine=__decorate([ASTNodeDecorator(NoneTerminal.macro_define)],MacroDefine)})(ASTNodes||(ASTNodes={}));var ASTNode=ASTNodes;var ASTNodes;var EAction=function(EAction){EAction[EAction[\"Shift\"]=0]=\"Shift\";EAction[EAction[\"Reduce\"]=1]=\"Reduce\";EAction[EAction[\"Accept\"]=2]=\"Accept\";return EAction}({});var GrammarUtils=function(){function GrammarUtils(){}GrammarUtils.isTerminal=function isTerminal(sm){return sm<NoneTerminal.START};GrammarUtils.toString=function toString(sm){if(this.isTerminal(sm)){var _ETokenType_sm;return(_ETokenType_sm=ETokenType[sm])!=null?_ETokenType_sm:Keyword[sm]}return NoneTerminal[sm]};GrammarUtils.createProductionWithOptions=function createProductionWithOptions(goal,options,astType){return this._createProductionWithOptions(goal,options,astType,astType)};GrammarUtils.createAnalyzerProductionWithOptions=function createAnalyzerProductionWithOptions(goal,options,analyzerType){return this._createProductionWithOptions(goal,options,undefined,analyzerType)};GrammarUtils._createProductionWithOptions=function _createProductionWithOptions(goal,options,runtimeType,analyzerType){var _loop=function(){var opt=_step.value;var runtimeCanElide=!runtimeType&&opt.length===1&&!GrammarUtils.isTerminal(opt[0]);var analyzerCanElide=!analyzerType&&opt.length===1&&!GrammarUtils.isTerminal(opt[0]);ret.push([[].concat([goal],opt),function(sa){for(var _len=arguments.length,children=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++){children[_key-1]=arguments[_key]}if(!children[0])return;var analyzerMode=sa.diagnosticsEnabled;var canElide=analyzerMode?analyzerCanElide:runtimeCanElide;if(canElide){sa.semanticStack.push(children[0])}else{var start=children[0].location.start;var end=children[children.length-1].location.end;var location=sa.objectPool?sa.objectPool.createRange(start,end):ShaderCompilerUtils.createRange(start,end);ASTNode.get(analyzerMode?analyzerResolvedType:runtimeResolvedType,sa,location,children)}}])};var runtimeResolvedType=runtimeType!=null?runtimeType:ASTNode.TrivialNode;var analyzerResolvedType=analyzerType!=null?analyzerType:ASTNode.TrivialNode;var ret=[];for(var _iterator=_create_for_of_iterator_helper_loose(options),_step;!(_step=_iterator()).done;)_loop();return ret};GrammarUtils.addMapSetItem=function addMapSetItem(map,k,v){var _map_get;var set=(_map_get=map.get(k))!=null?_map_get:new Set;set.add(v);map.set(k,set)};GrammarUtils.isSubSet=function isSubSet(sa,sb){for(var _iterator=_create_for_of_iterator_helper_loose(sa),_step;!(_step=_iterator()).done;){var item=_step.value;if(!sb.has(item))return false}return true};GrammarUtils.isActionEqual=function isActionEqual(a,b){return a.action===b.action&&a.target===b.target};GrammarUtils.printAction=function printAction(actionInfo){var production=Production.pool.get(actionInfo.target);return\"<Action: \"+EAction[actionInfo.action]+\" -> \"+this.printProduction(production)+\">\"};GrammarUtils.printProduction=function printProduction(production){var deriv=production.derivation.map(function(gs){return GrammarUtils.toString(gs)}).join(\"|\");return NoneTerminal[production.goal]+\" :=> \"+deriv};return GrammarUtils}();var StateItem=function(){function StateItem(production,position,lookahead){this._needReInfer=true;this.production=production;this.position=position;this.lookaheadSet=new Set;for(var _iterator=_create_for_of_iterator_helper_loose(lookahead),_step;!(_step=_iterator()).done;){var la=_step.value;this.lookaheadSet.add(la)}this.id=StateItem._id++}var _proto=StateItem.prototype;_proto.addLookahead=function addLookahead(ts){for(var _iterator=_create_for_of_iterator_helper_loose(ts),_step;!(_step=_iterator()).done;){var t=_step.value;if(this.lookaheadSet.has(t))continue;this.lookaheadSet.add(t);this.needReInfer=true}};_proto.symbolByOffset=function symbolByOffset(offset){return this.production.derivation[this.position+offset]};_proto.canReduce=function canReduce(){if(this.position>this.production.derivation.length-1)return true;else{for(var i=this.position;i<this.production.derivation.length;i++){if(this.production.derivation[i]!==ETokenType.EPSILON)return false}return true}};_proto.advance=function advance(){if(this.canReduce())throw\"Error: advance reduce-able parsing state item\";return new StateItem(this.production,this.position+1,this.lookaheadSet)};_proto.toString=function toString(){var coreItem=this.production.derivation.map(function(item){return GrammarUtils.toString(item)});var _coreItem_this_position;coreItem[this.position]=\".\"+((_coreItem_this_position=coreItem[this.position])!=null?_coreItem_this_position:\"\");return NoneTerminal[this.production.goal]+\" :=> \"+coreItem.join(\"|\")+\" ;\"+Array.from(this.lookaheadSet).map(function(item){return GrammarUtils.toString(item)}).join(\"/\")};_create_class(StateItem,[{key:\"needReInfer\",get:function get(){return this._needReInfer},set:function set(v){this._needReInfer=v}},{key:\"curSymbol\",get:function get(){return this.production.derivation[this.position]}},{key:\"nextSymbol\",get:function get(){return this.production.derivation[this.position+1]}}]);return StateItem}();StateItem._id=0;var State=function(){function State(cores){this.closured=false;this._stateItemPool=new Map;this.id=State._id++;this._items=new Set([].concat(cores));this.cores=new Set([].concat(cores));for(var _iterator=_create_for_of_iterator_helper_loose(cores),_step;!(_step=_iterator()).done;){var it=_step.value;var itemMapKey=this.getStateItemMapKey(it.production,it.position);this._stateItemPool.set(itemMapKey,it)}State.pool.set(this.id,this)}var _proto=State.prototype;_proto.getStateItemMapKey=function getStateItemMapKey(production,position){return production.id+\",\"+position};_proto.createStateItem=function createStateItem(production,position,lookaheadSet){if(lookaheadSet===void 0)lookaheadSet=new Set;var mapId=this.getStateItemMapKey(production,position);var item=this._stateItemPool.get(mapId);if(item){for(var _iterator=_create_for_of_iterator_helper_loose(lookaheadSet),_step;!(_step=_iterator()).done;){var la=_step.value;if(item.lookaheadSet.has(la))continue;item.lookaheadSet.add(la);item.needReInfer=true}return item}var newItem=new StateItem(production,position,lookaheadSet);this._stateItemPool.set(mapId,newItem);return newItem};State.create=function create(cores){var cacheKey=this.getMapKey(cores);var state=this.closureMap.get(cacheKey);if(state){for(var _iterator=_create_for_of_iterator_helper_loose(cores),_step;!(_step=_iterator()).done;){var core=_step.value;state.createStateItem(core.production,core.position,core.lookaheadSet)}return state}var newState=new State(cores);this.closureMap.set(cacheKey,newState);return newState};State.getMapKey=function getMapKey(cores){return cores.map(function(item){return item.production.id+\",\"+item.position}).join(\";\")};_create_class(State,[{key:\"items\",get:function get(){return this._items}},{key:\"needReInfer\",get:function get(){for(var _iterator=_create_for_of_iterator_helper_loose(this.cores),_step;!(_step=_iterator()).done;){var core=_step.value;if(core.needReInfer)return true}return false}}]);return State}();State.closureMap=new Map;State.pool=new Map;State._id=0;var LALR1=function(){function LALR1(grammar){this.firstSetMap=new Map;this.followSetMap=new Map;this.actionTable=new Map;this.gotoTable=new Map;this._firstSetNTStack=[];this.grammar=grammar}var _proto=LALR1.prototype;_proto.generate=function generate(){this.computeFirstSet();this.buildStateTable()};_proto.buildStateTable=function buildStateTable(){var startStateItemCore=[new StateItem(this.grammar.productions[0],0,[ETokenType.EOF])];var startState=State.create(startStateItemCore);this._extendState(startState)};_proto._extendState=function _extendState(state){if(!state.needReInfer)return;this._closure(state);var newStates=this._inferNextState(state);for(var _iterator=_create_for_of_iterator_helper_loose(newStates),_step;!(_step=_iterator()).done;){var ns=_step.value;this._extendState(ns)}};_proto._closure=function _closure(state){for(var _iterator=_create_for_of_iterator_helper_loose(state.cores),_step;!(_step=_iterator()).done;){var core=_step.value;if(!core.canReduce()){this._extendStateItem(state,core)}}state.closured=true;return state};_proto._extendStateItem=function _extendStateItem(state,item){if(GrammarUtils.isTerminal(item.curSymbol))return;var productionList=this.grammar.getProductionList(item.curSymbol);if(item.nextSymbol!==undefined){var newLookaheadSet=new Set;var lastFirstSet;var terminalExist=false;for(var i=1,nextSymbol=item.symbolByOffset(1);nextSymbol!==undefined;nextSymbol=item.symbolByOffset(++i)){if(GrammarUtils.isTerminal(nextSymbol)){newLookaheadSet.add(nextSymbol);terminalExist=true;break}lastFirstSet=this.firstSetMap.get(nextSymbol);for(var _iterator=_create_for_of_iterator_helper_loose(lastFirstSet),_step;!(_step=_iterator()).done;){var t=_step.value;newLookaheadSet.add(t)}if(!lastFirstSet.has(ETokenType.EPSILON))break}if(!terminalExist&&(lastFirstSet==null?void 0:lastFirstSet.has(ETokenType.EPSILON))){for(var _iterator1=_create_for_of_iterator_helper_loose(item.lookaheadSet),_step1;!(_step1=_iterator1()).done;){var t1=_step1.value;newLookaheadSet.add(t1)}}for(var _iterator2=_create_for_of_iterator_helper_loose(productionList),_step2;!(_step2=_iterator2()).done;){var production=_step2.value;var newItem=state.createStateItem(production,0);if(!state.items.has(newItem)||!GrammarUtils.isSubSet(newLookaheadSet,newItem.lookaheadSet)){state.items.add(newItem);newItem.addLookahead(newLookaheadSet);this._extendStateItem(state,newItem)}}}else{for(var _iterator3=_create_for_of_iterator_helper_loose(productionList),_step3;!(_step3=_iterator3()).done;){var production1=_step3.value;var newItem1=state.createStateItem(production1,0);if(!state.items.has(newItem1)||!GrammarUtils.isSubSet(item.lookaheadSet,newItem1.lookaheadSet)){state.items.add(newItem1);newItem1.addLookahead(item.lookaheadSet);this._extendStateItem(state,newItem1)}}}};_proto._inferNextState=function _inferNextState(state){var coreMap=new Map;var _this_actionTable_get;var stateActionTable=(_this_actionTable_get=this.actionTable.get(state.id))!=null?_this_actionTable_get:new Map;var _this_gotoTable_get;var stateGotoTable=(_this_gotoTable_get=this.gotoTable.get(state.id))!=null?_this_gotoTable_get:new Map;this.actionTable.set(state.id,stateActionTable);this.gotoTable.set(state.id,stateGotoTable);for(var _iterator=_create_for_of_iterator_helper_loose(state.items),_step;!(_step=_iterator()).done;){var stateItem=_step.value;if(stateItem.canReduce()){var action=void 0;if(stateItem.production.goal!==NoneTerminal.START){action={action:EAction.Reduce,target:stateItem.production.id}}else{action={action:EAction.Accept}}for(var _iterator1=_create_for_of_iterator_helper_loose(stateItem.lookaheadSet),_step1;!(_step1=_iterator1()).done;){var t=_step1.value;this._addAction(stateActionTable,t,action)}}else{var nextItem=stateItem.advance();GrammarUtils.addMapSetItem(coreMap,stateItem.curSymbol,nextItem)}stateItem.needReInfer=false}var newStates=new Set;for(var _iterator2=_create_for_of_iterator_helper_loose(coreMap.entries()),_step2;!(_step2=_iterator2()).done;){var _step_value=_step2.value,gs=_step_value[0],cores=_step_value[1];var newState=State.create(Array.from(cores));if(GrammarUtils.isTerminal(gs)){this._addAction(stateActionTable,gs,{action:EAction.Shift,target:newState.id})}else{stateGotoTable.set(gs,newState.id)}newStates.add(newState)}return newStates};_proto._addAction=function _addAction(table,terminal,action){var exist=table.get(terminal);if(exist&&!GrammarUtils.isActionEqual(exist,action)){if(LALR1._isKnownShiftPreferred(terminal,exist,action)){if(exist.action===EAction.Shift&&action.action===EAction.Reduce)return}else{Logger.warn(\"conflict detect: <Terminal \"+GrammarUtils.toString(terminal)+\"> \\n\",GrammarUtils.printAction(exist),\"\\n\",GrammarUtils.printAction(action))}}table.set(terminal,action)};_proto.computeFirstSet=function computeFirstSet(){for(var _iterator=_create_for_of_iterator_helper_loose(this.grammar.productions.slice(1)),_step;!(_step=_iterator()).done;){var production=_step.value;this._computeFirstSetForNT(production.goal)}};_proto._computeFirstSetForNT=function _computeFirstSetForNT(NT){var idx=this._firstSetNTStack.findIndex(function(item){return item===NT});if(idx!==-1){var computingFS=this.firstSetMap.get(NT);var len=this._firstSetNTStack.length;for(var i=len-1;i>idx;i--){var curNT=this._firstSetNTStack[i];this.firstSetMap.set(curNT,computingFS)}return computingFS}this._firstSetNTStack.push(NT);var productionList=this.grammar.getProductionList(NT);var firstSet=new Set;this.firstSetMap.set(NT,firstSet);if(this.grammar.isNullableNT(NT))firstSet.add(ETokenType.EPSILON);for(var _iterator=_create_for_of_iterator_helper_loose(productionList),_step;!(_step=_iterator()).done;){var production=_step.value;var i1=0;for(;i1<production.derivation.length;i1++){var gs=production.derivation[i1];if(GrammarUtils.isTerminal(gs)){firstSet.add(gs);break}var succeedFirstSet=this._computeFirstSetForNT(gs);for(var _iterator1=_create_for_of_iterator_helper_loose(succeedFirstSet),_step1;!(_step1=_iterator1()).done;){var item=_step1.value;if(item!==ETokenType.EPSILON)firstSet.add(item)}if(!this.grammar.isNullableNT(gs))break}if(i1===production.derivation.length)firstSet.add(ETokenType.EPSILON)}this._firstSetNTStack.pop();return firstSet};LALR1._isKnownShiftPreferred=function _isKnownShiftPreferred(terminal,exist,action){if(terminal===Keyword.ELSE)return true;if(terminal!==ETokenType.LEFT_PAREN)return false;var reduce=exist.action===EAction.Reduce?exist:action.action===EAction.Reduce?action:null;if(!reduce)return false;var prod=Production.pool.get(reduce.target);return!!prod&&prod.goal===NoneTerminal.type_specifier_nonarray&&prod.derivation.length===1&&prod.derivation[0]===NoneTerminal.macro_call_symbol};return LALR1}();var Grammar=function(){function Grammar(start,productions){this.startSymbol=start;productions.unshift(new Production(NoneTerminal.START,[start]));this.productions=productions}var _proto=Grammar.prototype;_proto.getProductionList=function getProductionList(nonTerminal){return this.productions.filter(function(item){return item.goal===nonTerminal})};_proto.isNullableNT=function isNullableNT(NT){return this.productions.find(function(item){return item.goal===NT&&item.derivation[0]===ETokenType.EPSILON})};_proto.getProductionByID=function getProductionByID(pid){return Production.pool.get(pid)};Grammar.create=function create(start,productions){var _ps=productions.map(function(gsl){return new Production(gsl[0],gsl.slice(1))});return new Grammar(start,_ps)};return Grammar}();var productionAndRules=[].concat(GrammarUtils.createProductionWithOptions(NoneTerminal.gs_shader_program,[[NoneTerminal.global_declaration],[NoneTerminal.gs_shader_program,NoneTerminal.global_declaration]],ASTNode.GLShaderProgram),GrammarUtils.createProductionWithOptions(NoneTerminal.global_declaration,[[NoneTerminal.precision_specifier],[NoneTerminal.variable_declaration_statement],[NoneTerminal.struct_specifier],[NoneTerminal.function_definition],[NoneTerminal.global_macro_if_statement],[NoneTerminal.macro_undef],[NoneTerminal.macro_define],[Keyword.MACRO_DEFINE_EXPRESSION]],ASTNode.GlobalDeclaration),GrammarUtils.createProductionWithOptions(NoneTerminal.macro_define,[[Keyword.MACRO_DEFINE,ETokenType.ID,NoneTerminal.expression,Keyword.MACRO_DEFINE_END],[Keyword.MACRO_DEFINE,ETokenType.ID,Keyword.MACRO_DEFINE_PARAMS,NoneTerminal.expression,Keyword.MACRO_DEFINE_END]],ASTNode.MacroDefine),GrammarUtils.createProductionWithOptions(NoneTerminal.macro_call_symbol,[[Keyword.MACRO_CALL]],ASTNode.MacroCallSymbol),GrammarUtils.createProductionWithOptions(NoneTerminal.macro_call_function,[[NoneTerminal.macro_call_symbol,ETokenType.LEFT_PAREN,ETokenType.RIGHT_PAREN],[NoneTerminal.macro_call_symbol,ETokenType.LEFT_PAREN,NoneTerminal.function_call_parameter_list,ETokenType.RIGHT_PAREN]],ASTNode.MacroCallFunction),GrammarUtils.createProductionWithOptions(NoneTerminal.macro_undef,[[Keyword.MACRO_UNDEF,ETokenType.ID],[Keyword.MACRO_UNDEF,Keyword.MACRO_CALL]],ASTNode.MacroUndef),GrammarUtils.createProductionWithOptions(NoneTerminal.macro_push_context,[[Keyword.MACRO_IF,Keyword.MACRO_CONDITIONAL_EXPRESSION],[Keyword.MACRO_IFDEF,ETokenType.ID],[Keyword.MACRO_IFNDEF,ETokenType.ID],[Keyword.MACRO_IFDEF,NoneTerminal.macro_call_symbol],[Keyword.MACRO_IFNDEF,NoneTerminal.macro_call_symbol]],ASTNode.MacroPushContext),GrammarUtils.createProductionWithOptions(NoneTerminal.macro_pop_context,[[Keyword.MACRO_ENDIF]],ASTNode.MacroPopContext),GrammarUtils.createProductionWithOptions(NoneTerminal.macro_elif_expression,[[Keyword.MACRO_ELIF,Keyword.MACRO_CONDITIONAL_EXPRESSION]],ASTNode.MacroElifExpression),GrammarUtils.createProductionWithOptions(NoneTerminal.macro_else_expression,[[Keyword.MACRO_ELSE]],ASTNode.MacroElseExpression),GrammarUtils.createProductionWithOptions(NoneTerminal.global_macro_declaration,[[NoneTerminal.global_declaration],[NoneTerminal.global_macro_declaration,NoneTerminal.global_declaration]],ASTNode.GlobalMacroDeclaration),GrammarUtils.createProductionWithOptions(NoneTerminal.global_macro_if_statement,[[NoneTerminal.macro_push_context,NoneTerminal.global_macro_declaration,NoneTerminal.global_macro_branch],[NoneTerminal.macro_push_context,NoneTerminal.global_macro_branch]],ASTNode.GlobalMacroIfStatement),GrammarUtils.createProductionWithOptions(NoneTerminal.global_macro_branch,[[NoneTerminal.macro_pop_context],[NoneTerminal.macro_elif_expression,NoneTerminal.global_macro_declaration,NoneTerminal.global_macro_branch],[NoneTerminal.macro_else_expression,NoneTerminal.global_macro_declaration,NoneTerminal.macro_pop_context],[NoneTerminal.macro_elif_expression,NoneTerminal.global_macro_branch],[NoneTerminal.macro_else_expression,NoneTerminal.macro_pop_context]],ASTNode.GlobalMacroBranch),GrammarUtils.createProductionWithOptions(NoneTerminal.variable_declaration,[[NoneTerminal.fully_specified_type,ETokenType.ID],[NoneTerminal.fully_specified_type,ETokenType.ID,NoneTerminal.array_specifier],[NoneTerminal.fully_specified_type,ETokenType.ID,ETokenType.EQUAL,NoneTerminal.initializer]],ASTNode.VariableDeclaration),GrammarUtils.createProductionWithOptions(NoneTerminal.variable_declaration_list,[[NoneTerminal.variable_declaration],[NoneTerminal.variable_declaration_list,ETokenType.COMMA,ETokenType.ID],[NoneTerminal.variable_declaration_list,ETokenType.COMMA,ETokenType.ID,NoneTerminal.array_specifier]],ASTNode.VariableDeclarationList),GrammarUtils.createProductionWithOptions(NoneTerminal.variable_declaration_statement,[[NoneTerminal.variable_declaration_list,ETokenType.SEMICOLON]]),GrammarUtils.createProductionWithOptions(NoneTerminal.ext_builtin_type_specifier_nonarray,[[Keyword.VOID],[Keyword.FLOAT],[Keyword.BOOL],[Keyword.INT],[Keyword.UINT],[Keyword.VEC2],[Keyword.VEC3],[Keyword.VEC4],[Keyword.BVEC2],[Keyword.BVEC3],[Keyword.BVEC4],[Keyword.IVEC2],[Keyword.IVEC3],[Keyword.IVEC4],[Keyword.UVEC2],[Keyword.UVEC3],[Keyword.UVEC4],[Keyword.MAT2],[Keyword.MAT3],[Keyword.MAT4],[Keyword.MAT2X3],[Keyword.MAT2X4],[Keyword.MAT3X2],[Keyword.MAT3X4],[Keyword.MAT4X2],[Keyword.MAT4X3],[Keyword.SAMPLER2D],[Keyword.SAMPLER3D],[Keyword.SAMPLER_CUBE],[Keyword.SAMPLER2D_SHADOW],[Keyword.SAMPLER_CUBE_SHADOW],[Keyword.SAMPLER2D_ARRAY],[Keyword.SAMPLER2D_ARRAY_SHADOW],[Keyword.I_SAMPLER2D],[Keyword.I_SAMPLER3D],[Keyword.I_SAMPLER_CUBE],[Keyword.I_SAMPLER2D_ARRAY],[Keyword.U_SAMPLER2D],[Keyword.U_SAMPLER3D],[Keyword.U_SAMPLER_CUBE],[Keyword.U_SAMPLER2D_ARRAY]],ASTNode.ExtBuiltinTypeSpecifierNonArray),GrammarUtils.createProductionWithOptions(NoneTerminal.type_specifier_nonarray,[[ETokenType.ID],[NoneTerminal.ext_builtin_type_specifier_nonarray],[NoneTerminal.macro_call_symbol]],ASTNode.TypeSpecifierNonArray),GrammarUtils.createProductionWithOptions(NoneTerminal.fully_specified_type,[[NoneTerminal.type_specifier],[NoneTerminal.type_qualifier,NoneTerminal.type_specifier]],ASTNode.FullySpecifiedType),GrammarUtils.createProductionWithOptions(NoneTerminal.type_specifier,[[NoneTerminal.type_specifier_nonarray],[NoneTerminal.ext_builtin_type_specifier_nonarray,NoneTerminal.array_specifier]],ASTNode.TypeSpecifier),GrammarUtils.createProductionWithOptions(NoneTerminal.type_qualifier,[[NoneTerminal.single_type_qualifier],[NoneTerminal.type_qualifier,NoneTerminal.single_type_qualifier]],ASTNode.TypeQualifier),GrammarUtils.createProductionWithOptions(NoneTerminal.single_type_qualifier,[[NoneTerminal.storage_qualifier],[NoneTerminal.precision_qualifier],[NoneTerminal.interpolation_qualifier],[NoneTerminal.invariant_qualifier],[Keyword.PRECISE]],ASTNode.SingleTypeQualifier),GrammarUtils.createAnalyzerProductionWithOptions(NoneTerminal.storage_qualifier,[[Keyword.CONST],[Keyword.IN],[Keyword.INOUT],[Keyword.OUT],[Keyword.CENTROID]],ASTNode.StorageQualifier),GrammarUtils.createAnalyzerProductionWithOptions(NoneTerminal.interpolation_qualifier,[[Keyword.SMOOTH],[Keyword.FLAT]],ASTNode.InterpolationQualifier),GrammarUtils.createAnalyzerProductionWithOptions(NoneTerminal.invariant_qualifier,[[Keyword.INVARIANT]],ASTNode.InvariantQualifier),GrammarUtils.createAnalyzerProductionWithOptions(NoneTerminal.precision_qualifier,[[Keyword.HIGHP],[Keyword.MEDIUMP],[Keyword.LOWP]],ASTNode.PrecisionQualifier),GrammarUtils.createProductionWithOptions(NoneTerminal.struct_specifier,[[Keyword.STRUCT,ETokenType.ID,ETokenType.LEFT_BRACE,NoneTerminal.struct_declaration_list,ETokenType.RIGHT_BRACE,ETokenType.SEMICOLON],[Keyword.STRUCT,ETokenType.LEFT_BRACE,NoneTerminal.struct_declaration_list,ETokenType.RIGHT_BRACE,ETokenType.SEMICOLON]],ASTNode.StructSpecifier),GrammarUtils.createProductionWithOptions(NoneTerminal.struct_declaration_list,[[NoneTerminal.struct_declaration],[NoneTerminal.struct_declaration_list,NoneTerminal.struct_declaration]],ASTNode.StructDeclarationList),GrammarUtils.createProductionWithOptions(NoneTerminal.struct_declaration,[[NoneTerminal.type_specifier,NoneTerminal.struct_declarator_list,ETokenType.SEMICOLON],[NoneTerminal.type_qualifier,NoneTerminal.type_specifier,NoneTerminal.struct_declarator_list,ETokenType.SEMICOLON],[NoneTerminal.layout_qualifier,NoneTerminal.type_specifier,NoneTerminal.struct_declarator,ETokenType.SEMICOLON],[NoneTerminal.macro_struct_declaration]],ASTNode.StructDeclaration),GrammarUtils.createProductionWithOptions(NoneTerminal.macro_struct_declaration,[[NoneTerminal.macro_push_context,NoneTerminal.struct_declaration_list,NoneTerminal.macro_struct_branch],[NoneTerminal.macro_push_context,NoneTerminal.macro_struct_branch]],ASTNode.MacroStructDeclaration),GrammarUtils.createProductionWithOptions(NoneTerminal.macro_struct_branch,[[NoneTerminal.macro_pop_context],[NoneTerminal.macro_elif_expression,NoneTerminal.struct_declaration_list,NoneTerminal.macro_struct_branch],[NoneTerminal.macro_else_expression,NoneTerminal.struct_declaration_list,NoneTerminal.macro_pop_context],[NoneTerminal.macro_elif_expression,NoneTerminal.macro_struct_branch],[NoneTerminal.macro_else_expression,NoneTerminal.macro_pop_context]],ASTNode.MacroStructBranch),GrammarUtils.createProductionWithOptions(NoneTerminal.layout_qualifier,[[Keyword.LAYOUT,ETokenType.LEFT_PAREN,Keyword.LOCATION,ETokenType.EQUAL,ETokenType.INT_CONSTANT,ETokenType.RIGHT_PAREN]],ASTNode.LayoutQualifier),GrammarUtils.createProductionWithOptions(NoneTerminal.struct_declarator_list,[[NoneTerminal.struct_declarator],[NoneTerminal.struct_declarator_list,ETokenType.COMMA,NoneTerminal.struct_declarator]],ASTNode.StructDeclaratorList),GrammarUtils.createProductionWithOptions(NoneTerminal.struct_declarator,[[ETokenType.ID],[ETokenType.ID,NoneTerminal.array_specifier]],ASTNode.StructDeclarator),GrammarUtils.createProductionWithOptions(NoneTerminal.array_specifier,[[ETokenType.LEFT_BRACKET,ETokenType.RIGHT_BRACKET],[ETokenType.LEFT_BRACKET,NoneTerminal.integer_constant_expression,ETokenType.RIGHT_BRACKET]],ASTNode.ArraySpecifier),GrammarUtils.createProductionWithOptions(NoneTerminal.integer_constant_expression_operator,[[ETokenType.PLUS],[ETokenType.DASH],[ETokenType.STAR],[ETokenType.SLASH],[ETokenType.PERCENT]],ASTNode.IntegerConstantExpressionOperator),GrammarUtils.createProductionWithOptions(NoneTerminal.integer_constant_expression,[[NoneTerminal.variable_identifier],[ETokenType.INT_CONSTANT],[NoneTerminal.integer_constant_expression,NoneTerminal.integer_constant_expression_operator,ETokenType.INT_CONSTANT],[NoneTerminal.integer_constant_expression,NoneTerminal.integer_constant_expression_operator,NoneTerminal.variable_identifier]],ASTNode.IntegerConstantExpression),GrammarUtils.createAnalyzerProductionWithOptions(NoneTerminal.conditional_expression,[[NoneTerminal.logical_or_expression],[NoneTerminal.logical_or_expression,ETokenType.QUESTION,NoneTerminal.expression,ETokenType.COLON,NoneTerminal.assignment_expression]],ASTNode.ConditionalExpression),GrammarUtils.createAnalyzerProductionWithOptions(NoneTerminal.logical_or_expression,[[NoneTerminal.logical_xor_expression],[NoneTerminal.logical_or_expression,ETokenType.OR_OP,NoneTerminal.logical_xor_expression]],ASTNode.LogicalOrExpression),GrammarUtils.createAnalyzerProductionWithOptions(NoneTerminal.logical_xor_expression,[[NoneTerminal.logical_and_expression],[NoneTerminal.logical_xor_expression,ETokenType.XOR_OP,NoneTerminal.logical_and_expression]],ASTNode.LogicalXorExpression),GrammarUtils.createAnalyzerProductionWithOptions(NoneTerminal.logical_and_expression,[[NoneTerminal.inclusive_or_expression],[NoneTerminal.logical_and_expression,ETokenType.AND_OP,NoneTerminal.inclusive_or_expression]],ASTNode.LogicalAndExpression),GrammarUtils.createAnalyzerProductionWithOptions(NoneTerminal.inclusive_or_expression,[[NoneTerminal.exclusive_or_expression],[NoneTerminal.inclusive_or_expression,ETokenType.VERTICAL_BAR,NoneTerminal.exclusive_or_expression]],ASTNode.InclusiveOrExpression),GrammarUtils.createAnalyzerProductionWithOptions(NoneTerminal.exclusive_or_expression,[[NoneTerminal.and_expression],[NoneTerminal.exclusive_or_expression,ETokenType.CARET,NoneTerminal.and_expression]],ASTNode.ExclusiveOrExpression),GrammarUtils.createAnalyzerProductionWithOptions(NoneTerminal.and_expression,[[NoneTerminal.equality_expression],[NoneTerminal.and_expression,ETokenType.AMPERSAND,NoneTerminal.equality_expression]],ASTNode.AndExpression),GrammarUtils.createAnalyzerProductionWithOptions(NoneTerminal.equality_expression,[[NoneTerminal.relational_expression],[NoneTerminal.equality_expression,ETokenType.EQ_OP,NoneTerminal.relational_expression],[NoneTerminal.equality_expression,ETokenType.NE_OP,NoneTerminal.relational_expression]],ASTNode.EqualityExpression),GrammarUtils.createAnalyzerProductionWithOptions(NoneTerminal.relational_expression,[[NoneTerminal.shift_expression],[NoneTerminal.relational_expression,ETokenType.LEFT_ANGLE,NoneTerminal.shift_expression],[NoneTerminal.relational_expression,ETokenType.RIGHT_ANGLE,NoneTerminal.shift_expression],[NoneTerminal.relational_expression,ETokenType.LE_OP,NoneTerminal.shift_expression],[NoneTerminal.relational_expression,ETokenType.GE_OP,NoneTerminal.shift_expression]],ASTNode.RelationalExpression),GrammarUtils.createAnalyzerProductionWithOptions(NoneTerminal.shift_expression,[[NoneTerminal.additive_expression],[NoneTerminal.shift_expression,ETokenType.LEFT_OP,NoneTerminal.additive_expression],[NoneTerminal.shift_expression,ETokenType.RIGHT_OP,NoneTerminal.additive_expression]],ASTNode.ShiftExpression),GrammarUtils.createAnalyzerProductionWithOptions(NoneTerminal.additive_expression,[[NoneTerminal.multiplicative_expression],[NoneTerminal.additive_expression,ETokenType.PLUS,NoneTerminal.multiplicative_expression],[NoneTerminal.additive_expression,ETokenType.DASH,NoneTerminal.multiplicative_expression]],ASTNode.AdditiveExpression),GrammarUtils.createAnalyzerProductionWithOptions(NoneTerminal.multiplicative_expression,[[NoneTerminal.unary_expression],[NoneTerminal.multiplicative_expression,ETokenType.STAR,NoneTerminal.unary_expression],[NoneTerminal.multiplicative_expression,ETokenType.SLASH,NoneTerminal.unary_expression],[NoneTerminal.multiplicative_expression,ETokenType.PERCENT,NoneTerminal.unary_expression]],ASTNode.MultiplicativeExpression),GrammarUtils.createAnalyzerProductionWithOptions(NoneTerminal.unary_expression,[[NoneTerminal.postfix_expression],[ETokenType.INC_OP,NoneTerminal.unary_expression],[ETokenType.DEC_OP,NoneTerminal.unary_expression],[NoneTerminal.unary_operator,NoneTerminal.unary_expression]],ASTNode.UnaryExpression),GrammarUtils.createAnalyzerProductionWithOptions(NoneTerminal.unary_operator,[[ETokenType.PLUS],[ETokenType.DASH],[ETokenType.BANG],[ETokenType.TILDE]],ASTNode.UnaryOperator),GrammarUtils.createProductionWithOptions(NoneTerminal.postfix_expression,[[NoneTerminal.primary_expression],[NoneTerminal.postfix_expression,ETokenType.LEFT_BRACKET,NoneTerminal.expression,ETokenType.RIGHT_BRACKET],[NoneTerminal.function_call],[NoneTerminal.postfix_expression,ETokenType.DOT,ETokenType.ID],[NoneTerminal.postfix_expression,ETokenType.DOT,NoneTerminal.function_call],[NoneTerminal.postfix_expression,ETokenType.INC_OP],[NoneTerminal.postfix_expression,ETokenType.DEC_OP]],ASTNode.PostfixExpression),GrammarUtils.createProductionWithOptions(NoneTerminal.primary_expression,[[NoneTerminal.variable_identifier],[ETokenType.INT_CONSTANT],[ETokenType.FLOAT_CONSTANT],[Keyword.True],[Keyword.False],[ETokenType.LEFT_PAREN,NoneTerminal.expression,ETokenType.RIGHT_PAREN]],ASTNode.PrimaryExpression),GrammarUtils.createProductionWithOptions(NoneTerminal.expression,[[NoneTerminal.assignment_expression],[NoneTerminal.expression,ETokenType.COMMA,NoneTerminal.assignment_expression]],ASTNode.Expression),GrammarUtils.createProductionWithOptions(NoneTerminal.assignment_expression,[[NoneTerminal.conditional_expression],[NoneTerminal.unary_expression,NoneTerminal.assignment_operator,NoneTerminal.assignment_expression]],ASTNode.AssignmentExpression),GrammarUtils.createAnalyzerProductionWithOptions(NoneTerminal.assignment_operator,[[ETokenType.EQUAL],[ETokenType.MUL_ASSIGN],[ETokenType.DIV_ASSIGN],[ETokenType.MOD_ASSIGN],[ETokenType.ADD_ASSIGN],[ETokenType.SUB_ASSIGN],[ETokenType.LEFT_ASSIGN],[ETokenType.RIGHT_ASSIGN],[ETokenType.AND_ASSIGN],[ETokenType.XOR_ASSIGN],[ETokenType.OR_ASSIGN]],ASTNode.AssignmentOperator),GrammarUtils.createProductionWithOptions(NoneTerminal.function_call,[[NoneTerminal.function_call_generic]],ASTNode.FunctionCall),GrammarUtils.createProductionWithOptions(NoneTerminal.function_call_generic,[[NoneTerminal.function_identifier,ETokenType.LEFT_PAREN,NoneTerminal.function_call_parameter_list,ETokenType.RIGHT_PAREN],[NoneTerminal.function_identifier,ETokenType.LEFT_PAREN,ETokenType.RIGHT_PAREN],[NoneTerminal.function_identifier,Keyword.VOID,ETokenType.RIGHT_PAREN]],ASTNode.FunctionCallGeneric),GrammarUtils.createProductionWithOptions(NoneTerminal.function_call_parameter_list,[[NoneTerminal.assignment_expression],[NoneTerminal.function_call_parameter_list,ETokenType.COMMA,NoneTerminal.assignment_expression],[NoneTerminal.macro_call_arg_block],[NoneTerminal.function_call_parameter_list,NoneTerminal.macro_call_arg_block]],ASTNode.FunctionCallParameterList),GrammarUtils.createProductionWithOptions(NoneTerminal.macro_call_arg_case_list,[[NoneTerminal.assignment_expression],[ETokenType.COMMA,NoneTerminal.assignment_expression],[NoneTerminal.macro_call_arg_block],[NoneTerminal.macro_call_arg_case_list,NoneTerminal.macro_call_arg_block],[NoneTerminal.macro_call_arg_case_list,ETokenType.COMMA,NoneTerminal.assignment_expression]],ASTNode.MacroCallArgCaseList),GrammarUtils.createProductionWithOptions(NoneTerminal.macro_call_arg_block,[[NoneTerminal.macro_push_context,NoneTerminal.macro_call_arg_branch],[NoneTerminal.macro_push_context,NoneTerminal.macro_call_arg_case_list,NoneTerminal.macro_call_arg_branch]],ASTNode.MacroCallArgBlock),GrammarUtils.createProductionWithOptions(NoneTerminal.macro_call_arg_branch,[[NoneTerminal.macro_pop_context],[NoneTerminal.macro_elif_expression,NoneTerminal.macro_call_arg_case_list,NoneTerminal.macro_call_arg_branch],[NoneTerminal.macro_else_expression,NoneTerminal.macro_call_arg_case_list,NoneTerminal.macro_pop_context],[NoneTerminal.macro_elif_expression,NoneTerminal.macro_call_arg_branch],[NoneTerminal.macro_else_expression,NoneTerminal.macro_pop_context]],ASTNode.MacroCallArgBranch),GrammarUtils.createProductionWithOptions(NoneTerminal.function_identifier,[[NoneTerminal.type_specifier]],ASTNode.FunctionIdentifier),GrammarUtils.createProductionWithOptions(NoneTerminal.function_definition,[[NoneTerminal.function_prototype,NoneTerminal.compound_statement_no_scope]],ASTNode.FunctionDefinition),GrammarUtils.createProductionWithOptions(NoneTerminal.function_prototype,[[NoneTerminal.function_declarator,ETokenType.RIGHT_PAREN]],ASTNode.FunctionProtoType),GrammarUtils.createProductionWithOptions(NoneTerminal.function_declarator,[[NoneTerminal.function_header],[NoneTerminal.function_header,NoneTerminal.function_parameter_list]],ASTNode.FunctionDeclarator),GrammarUtils.createProductionWithOptions(NoneTerminal.function_header,[[NoneTerminal.fully_specified_type,ETokenType.ID,ETokenType.LEFT_PAREN]],ASTNode.FunctionHeader),GrammarUtils.createProductionWithOptions(NoneTerminal.function_parameter_list,[[NoneTerminal.parameter_declaration],[NoneTerminal.function_parameter_list,ETokenType.COMMA,NoneTerminal.parameter_declaration],[NoneTerminal.macro_param_block],[NoneTerminal.function_parameter_list,NoneTerminal.macro_param_block]],ASTNode.FunctionParameterList),GrammarUtils.createProductionWithOptions(NoneTerminal.macro_param_case_list,[[NoneTerminal.parameter_declaration],[ETokenType.COMMA,NoneTerminal.parameter_declaration],[NoneTerminal.macro_param_block],[NoneTerminal.macro_param_case_list,NoneTerminal.macro_param_block],[NoneTerminal.macro_param_case_list,ETokenType.COMMA,NoneTerminal.parameter_declaration]],ASTNode.MacroParamCaseList),GrammarUtils.createProductionWithOptions(NoneTerminal.macro_param_block,[[NoneTerminal.macro_push_context,NoneTerminal.macro_parameter_branch],[NoneTerminal.macro_push_context,NoneTerminal.macro_param_case_list,NoneTerminal.macro_parameter_branch]],ASTNode.MacroParamBlock),GrammarUtils.createProductionWithOptions(NoneTerminal.macro_parameter_branch,[[NoneTerminal.macro_pop_context],[NoneTerminal.macro_elif_expression,NoneTerminal.macro_param_case_list,NoneTerminal.macro_parameter_branch],[NoneTerminal.macro_else_expression,NoneTerminal.macro_param_case_list,NoneTerminal.macro_pop_context],[NoneTerminal.macro_elif_expression,NoneTerminal.macro_parameter_branch],[NoneTerminal.macro_else_expression,NoneTerminal.macro_pop_context]],ASTNode.MacroParameterBranch),GrammarUtils.createProductionWithOptions(NoneTerminal.parameter_declaration,[[NoneTerminal.type_qualifier,NoneTerminal.parameter_declarator],[NoneTerminal.parameter_declarator],[NoneTerminal.macro_call_symbol],[NoneTerminal.macro_call_function]],ASTNode.ParameterDeclaration),GrammarUtils.createProductionWithOptions(NoneTerminal.parameter_declarator,[[NoneTerminal.type_specifier,ETokenType.ID],[NoneTerminal.type_specifier,ETokenType.ID,NoneTerminal.array_specifier]],ASTNode.ParameterDeclarator),GrammarUtils.createProductionWithOptions(NoneTerminal.statement_list,[[NoneTerminal.statement],[NoneTerminal.statement_list,NoneTerminal.statement]],ASTNode.StatementList),GrammarUtils.createAnalyzerProductionWithOptions(NoneTerminal.statement,[[NoneTerminal.compound_statement],[NoneTerminal.simple_statement]],ASTNode.Statement),GrammarUtils.createProductionWithOptions(NoneTerminal.compound_statement_no_scope,[[ETokenType.LEFT_BRACE,ETokenType.RIGHT_BRACE],[ETokenType.LEFT_BRACE,NoneTerminal.statement_list,ETokenType.RIGHT_BRACE]],ASTNode.CompoundStatementNoScope),GrammarUtils.createAnalyzerProductionWithOptions(NoneTerminal.compound_statement,[[ETokenType.LEFT_BRACE,ETokenType.RIGHT_BRACE],[NoneTerminal.scope_brace,NoneTerminal.statement_list,NoneTerminal.scope_end_brace]],ASTNode.CompoundStatement),GrammarUtils.createAnalyzerProductionWithOptions(NoneTerminal.simple_statement,[[NoneTerminal.declaration],[NoneTerminal.expression_statement],[NoneTerminal.selection_statement],[NoneTerminal.iteration_statement],[NoneTerminal.jump_statement],[NoneTerminal.macro_if_statement],[NoneTerminal.macro_undef],[NoneTerminal.macro_define],[Keyword.MACRO_DEFINE_EXPRESSION]],ASTNode.SimpleStatement),GrammarUtils.createProductionWithOptions(NoneTerminal.declaration,[[NoneTerminal.function_prototype,ETokenType.SEMICOLON],[NoneTerminal.init_declarator_list,ETokenType.SEMICOLON],[Keyword.PRECISION,NoneTerminal.precision_qualifier,NoneTerminal.ext_builtin_type_specifier_nonarray,ETokenType.SEMICOLON],[NoneTerminal.type_qualifier,ETokenType.ID,ETokenType.SEMICOLON],[NoneTerminal.type_qualifier,ETokenType.ID,NoneTerminal.identifier_list,ETokenType.SEMICOLON]],ASTNode.Declaration),GrammarUtils.createProductionWithOptions(NoneTerminal.identifier_list,[[ETokenType.COMMA,ETokenType.ID],[NoneTerminal.identifier_list,ETokenType.COMMA,ETokenType.ID]],ASTNode.IdentifierList),GrammarUtils.createProductionWithOptions(NoneTerminal.init_declarator_list,[[NoneTerminal.single_declaration],[NoneTerminal.init_declarator_list,ETokenType.COMMA,ETokenType.ID],[NoneTerminal.init_declarator_list,ETokenType.COMMA,ETokenType.ID,NoneTerminal.array_specifier],[NoneTerminal.init_declarator_list,ETokenType.COMMA,ETokenType.ID,NoneTerminal.array_specifier,ETokenType.EQUAL,NoneTerminal.initializer],[NoneTerminal.init_declarator_list,ETokenType.COMMA,ETokenType.ID,ETokenType.EQUAL,NoneTerminal.initializer]],ASTNode.InitDeclaratorList),GrammarUtils.createProductionWithOptions(NoneTerminal.single_declaration,[[NoneTerminal.fully_specified_type,ETokenType.ID],[NoneTerminal.fully_specified_type,ETokenType.ID,NoneTerminal.array_specifier],[NoneTerminal.fully_specified_type,ETokenType.ID,NoneTerminal.array_specifier,ETokenType.EQUAL,NoneTerminal.initializer],[NoneTerminal.fully_specified_type,ETokenType.ID,ETokenType.EQUAL,NoneTerminal.initializer],[NoneTerminal.fully_specified_type,Keyword.MACRO_CALL],[NoneTerminal.fully_specified_type,Keyword.MACRO_CALL,ETokenType.EQUAL,NoneTerminal.initializer]],ASTNode.SingleDeclaration),GrammarUtils.createAnalyzerProductionWithOptions(NoneTerminal.initializer,[[NoneTerminal.assignment_expression],[ETokenType.LEFT_BRACE,NoneTerminal.initializer_list,ETokenType.RIGHT_BRACE]],ASTNode.Initializer),GrammarUtils.createAnalyzerProductionWithOptions(NoneTerminal.initializer_list,[[NoneTerminal.initializer],[NoneTerminal.initializer_list,ETokenType.COMMA,NoneTerminal.initializer]],ASTNode.InitializerList),GrammarUtils.createAnalyzerProductionWithOptions(NoneTerminal.expression_statement,[[ETokenType.SEMICOLON],[NoneTerminal.expression,ETokenType.SEMICOLON]],ASTNode.ExpressionStatement),GrammarUtils.createAnalyzerProductionWithOptions(NoneTerminal.selection_statement,[[Keyword.IF,ETokenType.LEFT_PAREN,NoneTerminal.expression,ETokenType.RIGHT_PAREN,NoneTerminal.statement],[Keyword.IF,ETokenType.LEFT_PAREN,NoneTerminal.expression,ETokenType.RIGHT_PAREN,NoneTerminal.statement,Keyword.ELSE,NoneTerminal.statement]],ASTNode.SelectionStatement),GrammarUtils.createAnalyzerProductionWithOptions(NoneTerminal.iteration_statement,[[Keyword.WHILE,ETokenType.LEFT_PAREN,NoneTerminal.condition,ETokenType.RIGHT_PAREN,NoneTerminal.statement],[Keyword.FOR,ETokenType.LEFT_PAREN,NoneTerminal.for_init_statement,NoneTerminal.for_rest_statement,ETokenType.RIGHT_PAREN,NoneTerminal.statement]],ASTNode.IterationStatement),GrammarUtils.createProductionWithOptions(NoneTerminal.precision_specifier,[[Keyword.PRECISION,NoneTerminal.precision_qualifier,NoneTerminal.ext_builtin_type_specifier_nonarray,ETokenType.SEMICOLON]],ASTNode.PrecisionSpecifier),GrammarUtils.createAnalyzerProductionWithOptions(NoneTerminal.for_init_statement,[[NoneTerminal.expression_statement],[NoneTerminal.declaration]],ASTNode.ForInitStatement),GrammarUtils.createAnalyzerProductionWithOptions(NoneTerminal.condition,[[NoneTerminal.expression],[NoneTerminal.fully_specified_type,ETokenType.ID,ETokenType.EQUAL,NoneTerminal.initializer]],ASTNode.Condition),GrammarUtils.createAnalyzerProductionWithOptions(NoneTerminal.for_rest_statement,[[NoneTerminal.conditionopt,ETokenType.SEMICOLON],[NoneTerminal.conditionopt,ETokenType.SEMICOLON,NoneTerminal.expression]],ASTNode.ForRestStatement),GrammarUtils.createAnalyzerProductionWithOptions(NoneTerminal.conditionopt,[[ETokenType.EPSILON],[NoneTerminal.condition]],ASTNode.ConditionOpt),GrammarUtils.createProductionWithOptions(NoneTerminal.jump_statement,[[Keyword.CONTINUE,ETokenType.SEMICOLON],[Keyword.BREAK,ETokenType.SEMICOLON],[Keyword.RETURN,ETokenType.SEMICOLON],[Keyword.RETURN,NoneTerminal.expression,ETokenType.SEMICOLON],[Keyword.DISCARD,ETokenType.SEMICOLON]],ASTNode.JumpStatement),GrammarUtils.createProductionWithOptions(NoneTerminal.scope_brace,[[ETokenType.LEFT_BRACE]],ASTNode.ScopeBrace),GrammarUtils.createProductionWithOptions(NoneTerminal.scope_end_brace,[[ETokenType.RIGHT_BRACE]],ASTNode.ScopeEndBrace),GrammarUtils.createProductionWithOptions(NoneTerminal.variable_identifier,[[ETokenType.ID],[NoneTerminal.macro_call_symbol],[NoneTerminal.macro_call_function]],ASTNode.VariableIdentifier),GrammarUtils.createProductionWithOptions(NoneTerminal.macro_if_statement,[[NoneTerminal.macro_push_context,NoneTerminal.statement_list,NoneTerminal.macro_branch],[NoneTerminal.macro_push_context,NoneTerminal.macro_branch]],ASTNode.MacroIfStatement),GrammarUtils.createProductionWithOptions(NoneTerminal.macro_branch,[[NoneTerminal.macro_pop_context],[NoneTerminal.macro_elif_expression,NoneTerminal.statement_list,NoneTerminal.macro_branch],[NoneTerminal.macro_else_expression,NoneTerminal.statement_list,NoneTerminal.macro_pop_context],[NoneTerminal.macro_elif_expression,NoneTerminal.macro_branch],[NoneTerminal.macro_else_expression,NoneTerminal.macro_pop_context]],ASTNode.MacroBranch));var createGrammar=function(){return Grammar.create(NoneTerminal.gs_shader_program,productionAndRules.map(function(item){return item[0]}))};var translationRules=productionAndRules.map(function(item){return item[1]});var addTranslationRule=function(sa){sa.setTranslationRules(translationRules)};var ShaderData=function(){function ShaderData(){this.globalPrecisions=[];this.globalMacroDeclarations=[];this.directMemberOwnerReferences=[];this.referenceResolutionSnapshots=[]}var _proto=ShaderData.prototype;_proto.getOuterGlobalMacroDeclarations=function getOuterGlobalMacroDeclarations(){return this.globalMacroDeclarations.filter(function(node){return _instanceof(node.parent,ASTNode.GLShaderProgram)})};return ShaderData}();function createShaderDeclarationOwnership(symbolTable){var groups=new Map;var names=new Map;var keys=new Map;symbolTable.forEach(function(symbol){if(!symbol.astNode)return;var name=JSON.stringify([symbol.type,symbol.ident]);var _names_get;var candidates=(_names_get=names.get(name))!=null?_names_get:[];candidates.push(symbol);names.set(name,candidates);var key=declarationKey(symbol);keys.set(symbol,key);if(key===undefined)return;var _groups_get;var group=(_groups_get=groups.get(key))!=null?_groups_get:[];group.push(symbol);groups.set(key,group)});var declarations=new Map;var coverage=new Map;var unsupported=new Set;var groupId=0;for(var _iterator=_create_for_of_iterator_helper_loose(groups.values()),_step;!(_step=_iterator()).done;){var _loop=function(){var earlier=_step1.value;var narrower=group.filter(function(candidate){return candidate.sourceScope>earlier.sourceScope});if(!narrower.length)return\"continue\";var proof=proveInheritanceBranchesCover(narrower.map(function(candidate){return candidate.branchSignature}),earlier.branchSignature);coverage.set(earlier,proof);deferred||(deferred=proof===undefined)};var group=_step.value;var deferred=false;for(var _iterator1=_create_for_of_iterator_helper_loose(group),_step1;!(_step1=_iterator1()).done;)_loop();if(!deferred)continue;groupId++;for(var _iterator2=_create_for_of_iterator_helper_loose(group),_step2;!(_step2=_iterator2()).done;){var symbol=_step2.value;declarations.set(symbol,{id:declarations.size+1,group:groupId,sourceScope:symbol.sourceScope});if(coverage.get(symbol)!==false)continue;for(var _iterator3=_create_for_of_iterator_helper_loose(group),_step3;!(_step3=_iterator3()).done;){var narrower=_step3.value;if(narrower.sourceScope<=symbol.sourceScope)continue;if(proveInheritanceBranchesCover([],symbol.branchSignature.concat(narrower.branchSignature))===false){unsupported.add(symbol);unsupported.add(narrower)}}}}for(var _iterator4=_create_for_of_iterator_helper_loose(names.values()),_step4;!(_step4=_iterator4()).done;){var _loop1=function(){var earlier=_step5.value;var narrower=candidates.filter(function(candidate){return candidate.sourceScope>earlier.sourceScope&&candidate.equal(earlier)});if(!narrower.length||keys.get(earlier)!==undefined&&narrower.every(function(candidate){return keys.get(candidate)}))return\"continue\";if(proveInheritanceBranchesCover(narrower.map(function(candidate){return candidate.branchSignature}),earlier.branchSignature)===undefined){unsupported.add(earlier);for(var _iterator=_create_for_of_iterator_helper_loose(narrower),_step;!(_step=_iterator()).done;){var candidate=_step.value;unsupported.add(candidate)}}};var candidates=_step4.value;if(!candidates.some(function(candidate){return keys.get(candidate)===undefined}))continue;for(var _iterator5=_create_for_of_iterator_helper_loose(candidates),_step5;!(_step5=_iterator5()).done;)_loop1()}return{declarations:declarations,unsupported:Array.from(unsupported),coverage:coverage}}function isDeferredDeclarationPair(facts,left,right){var _facts_declarations_get,_facts_declarations_get1;if(left.sourceScope===right.sourceScope)return false;var group=(_facts_declarations_get=facts.declarations.get(left))==null?void 0:_facts_declarations_get.group;if(group===undefined||((_facts_declarations_get1=facts.declarations.get(right))==null?void 0:_facts_declarations_get1.group)!==group)return false;var earlier=left.sourceScope<right.sourceScope?left:right;return facts.coverage.has(earlier)&&facts.coverage.get(earlier)===undefined}function declarationKey(symbol){if(symbol.type!==ESymbolType.FN)return JSON.stringify([symbol.type,symbol.ident]);if(!_instanceof(symbol,FnSymbol))return;var _symbol_astNode_protoType_parameterList;var parameters=(_symbol_astNode_protoType_parameterList=symbol.astNode.protoType.parameterList)!=null?_symbol_astNode_protoType_parameterList:[];var signature=[];for(var _iterator=_create_for_of_iterator_helper_loose(parameters),_step;!(_step=_iterator()).done;){var parameter=_step.value;var type=parameter.typeInfo;if(!type||type.type===TypeAny)return;if(type.type===Keyword.VOID&¶meters.length===1&&!type.arraySpecifier)continue;var array=type.arraySpecifier;var shape=null;if(array){if(array.children.some(function(child){return _instanceof(child,ASTNode.ArraySpecifier)}))return;if(array.children.length===2)shape=\"unsized\";else if(array.size!==undefined)shape=array.size;else return}signature.push([type.type,shape])}return JSON.stringify([symbol.type,symbol.ident,signature])}var SemanticAnalyzer=function(){function SemanticAnalyzer(branchSemantics,semanticDiagnostics,objectPool,diagnosticsEnabled){if(diagnosticsEnabled===void 0)diagnosticsEnabled=semanticDiagnostics!==undefined;this.branchSemantics=branchSemantics;this.semanticDiagnostics=semanticDiagnostics;this.objectPool=objectPool;this.lookupSymbol=new SymbolInfo(\"\",null);this.arraySymbolScratch=[];this.overloadScratch=[];this.structScratch=[];this.runtimeLookupScratch=[];this.runtimeFallbackScratch=[];this.semanticStack=[];this.acceptRule=undefined;this.symbolTableStack=new SymbolTableStack;this._functionCaptures=[];this._shaderData=new ShaderData;this._translationRules=[];this._sourceScopes=[];this._inheritedDeclarations=[];this.errors=[];this.inMacroDefinition=false;this._ambiguousReported=new Set;this.diagnosticsEnabled=diagnosticsEnabled;this.symbolTableStack.branchSemantics=branchSemantics;this.pushScope()}var _proto=SemanticAnalyzer.prototype;_proto.reset=function reset(macroDefineList){this._macroDefineList=macroDefineList;this.semanticStack.length=0;this._shaderData=new ShaderData;this.symbolTableStack.clear();this.pushScope();this.errors.length=0;this.inMacroDefinition=false;this._ambiguousReported.clear();this._inheritedDeclarations.length=0;this._functionCaptures.length=0;this.runtimeLookupScratch.length=0;this.runtimeFallbackScratch.length=0};_proto.pushScope=function pushScope(){this.symbolTableStack.pushScope(new SymbolTable)};_proto.popScope=function popScope(){return this.symbolTableStack.popScope()};_proto.setTranslationRules=function setTranslationRules(rules){this._translationRules=rules};_proto.setSourceScopes=function setSourceScopes(sourceScopes){this._sourceScopes=sourceScopes};_proto.assignSourceScope=function assignSourceScope(symbol,location){var offset=location.start.index;var segments=this._sourceScopes;var low=0;var high=segments.length-1;while(low<=high){var mid=low+high>>>1;var segment=segments[mid];if(offset<segment.generatedStart){high=mid-1}else if(offset>=segment.generatedEnd){low=mid+1}else{var _segment_sourceScope;symbol.sourceScope=(_segment_sourceScope=segment.sourceScope)!=null?_segment_sourceScope:0;return symbol}}symbol.sourceScope=0;return symbol};_proto.getTranslationRule=function getTranslationRule(pid){return this._translationRules[pid]};_proto.beginFunction=function beginFunction(header){this._functionCaptures.push({header:header,localVariables:[],calledFunctions:[]})};_proto.endFunction=function endFunction(){return this._functionCaptures.pop()};_proto.recordFunctionVariable=function recordFunctionVariable(variable){var _this__functionCaptures_;(_this__functionCaptures_=this._functionCaptures[this._functionCaptures.length-1])==null?void 0:_this__functionCaptures_.localVariables.push(variable)};_proto.recordFunctionCall=function recordFunctionCall(fn){var _this__functionCaptures_;(_this__functionCaptures_=this._functionCaptures[this._functionCaptures.length-1])==null?void 0:_this__functionCaptures_.calledFunctions.push(fn)};_proto.reportRedefinition=function reportRedefinition(loc,symbol,conflict){var _this_semanticDiagnostics;this._report((_this_semanticDiagnostics=this.semanticDiagnostics)==null?void 0:_this_semanticDiagnostics.redefinition(loc,symbol.ident,conflict,symbol.branchSignature));if(this.semanticDiagnostics&&symbol.sourceScope>0&&this.symbolTableStack.stack.length===1&&!this.inMacroDefinition&&this._isCurrentBranchReachable()){this._inheritedDeclarations.push({symbol:symbol,location:loc})}};_proto.finalizeInheritance=function finalizeInheritance(){var ownership=this._shaderData.declarationOwnership=createShaderDeclarationOwnership(this.symbolTableStack.scope);if(!this.branchSemantics||!this.semanticDiagnostics)return;for(var _iterator=_create_for_of_iterator_helper_loose(this._inheritedDeclarations),_step;!(_step=_iterator()).done;){var _step_value=_step.value,symbol=_step_value.symbol,location=_step_value.location;var conflict=this.symbolTableStack.scope.getInheritedConflict(symbol,this.branchSemantics,function(left,right){return isDeferredDeclarationPair(ownership,left,right)});var error=this.semanticDiagnostics.redefinition(location,symbol.ident,conflict,symbol.branchSignature);if(error)this.errors.push(error)}this._inheritedDeclarations.length=0};_proto.reportBranchAvailability=function reportBranchAvailability(loc,subjectKind,name,coverage){var _this_semanticDiagnostics;this._report((_this_semanticDiagnostics=this.semanticDiagnostics)==null?void 0:_this_semanticDiagnostics.branchAvailability(loc,subjectKind,name,coverage))};_proto.reportBranchAmbiguity=function reportBranchAmbiguity(loc,key,kind,name,owner){var _this_semanticDiagnostics;var createDiagnostic=(_this_semanticDiagnostics=this.semanticDiagnostics)==null?void 0:_this_semanticDiagnostics.branchAmbiguity;if(!createDiagnostic)return;var dedupKey=kind+\":\"+key;if(this._ambiguousReported.has(dedupKey))return;var error=createDiagnostic.call(this.semanticDiagnostics,loc,kind,name,owner);if(!error)return;this._ambiguousReported.add(dedupKey);this._report(error)};_proto.reportNonConstArraySize=function reportNonConstArraySize(loc){var _this_semanticDiagnostics_nonConstArraySize,_this_semanticDiagnostics;this._report((_this_semanticDiagnostics=this.semanticDiagnostics)==null?void 0:(_this_semanticDiagnostics_nonConstArraySize=_this_semanticDiagnostics.nonConstArraySize)==null?void 0:_this_semanticDiagnostics_nonConstArraySize.call(_this_semanticDiagnostics,loc))};_proto.reportExpectedSampler=function reportExpectedSampler(loc,functionName,actualType){var _this_semanticDiagnostics_expectedSampler,_this_semanticDiagnostics;this._report((_this_semanticDiagnostics=this.semanticDiagnostics)==null?void 0:(_this_semanticDiagnostics_expectedSampler=_this_semanticDiagnostics.expectedSampler)==null?void 0:_this_semanticDiagnostics_expectedSampler.call(_this_semanticDiagnostics,loc,functionName,actualType))};_proto.reportNoMatchingOverload=function reportNoMatchingOverload(loc,functionName){var _this_semanticDiagnostics_noMatchingOverload,_this_semanticDiagnostics;this._report((_this_semanticDiagnostics=this.semanticDiagnostics)==null?void 0:(_this_semanticDiagnostics_noMatchingOverload=_this_semanticDiagnostics.noMatchingOverload)==null?void 0:_this_semanticDiagnostics_noMatchingOverload.call(_this_semanticDiagnostics,loc,functionName))};_proto.reportUndeclaredStructMember=function reportUndeclaredStructMember(loc,structName,memberName){var _this_semanticDiagnostics_undeclaredStructMember,_this_semanticDiagnostics;this._report((_this_semanticDiagnostics=this.semanticDiagnostics)==null?void 0:(_this_semanticDiagnostics_undeclaredStructMember=_this_semanticDiagnostics.undeclaredStructMember)==null?void 0:_this_semanticDiagnostics_undeclaredStructMember.call(_this_semanticDiagnostics,loc,structName,memberName))};_proto.canBranchesOverlap=function canBranchesOverlap(left,right){var _this_branchSemantics;var _this_branchSemantics_canBranchesOverlap;return(_this_branchSemantics_canBranchesOverlap=(_this_branchSemantics=this.branchSemantics)==null?void 0:_this_branchSemantics.canBranchesOverlap(left,right))!=null?_this_branchSemantics_canBranchesOverlap:getLexicalDeclarationCoexistence(left,right)!==\"exclusive\"};_proto.canDeclarationsCoexist=function canDeclarationsCoexist(earlier,later){var _this_branchSemantics;var _this_branchSemantics_canDeclarationsCoexist;return(_this_branchSemantics_canDeclarationsCoexist=(_this_branchSemantics=this.branchSemantics)==null?void 0:_this_branchSemantics.canDeclarationsCoexist(earlier,later))!=null?_this_branchSemantics_canDeclarationsCoexist:true};_proto.getBranchCoverage=function getBranchCoverage(candidates,callSiteBranch){var _this_branchSemantics;var _this_branchSemantics_getBranchCoverage;return(_this_branchSemantics_getBranchCoverage=(_this_branchSemantics=this.branchSemantics)==null?void 0:_this_branchSemantics.getBranchCoverage(candidates,callSiteBranch))!=null?_this_branchSemantics_getBranchCoverage:\"covered\"};_proto.isBranchVisibleFrom=function isBranchVisibleFrom(defBranch,callSiteBranch){var _this_branchSemantics;var _this_branchSemantics_isBranchVisibleFrom;return(_this_branchSemantics_isBranchVisibleFrom=(_this_branchSemantics=this.branchSemantics)==null?void 0:_this_branchSemantics.isBranchVisibleFrom(defBranch,callSiteBranch))!=null?_this_branchSemantics_isBranchVisibleFrom:true};_proto._report=function _report(error){if(!error||this.inMacroDefinition||!this._isCurrentBranchReachable())return;this.errors.push(error)};_proto._isCurrentBranchReachable=function _isCurrentBranchReachable(){var _this_branchSemantics;var _this_branchSemantics_isBranchReachable;return(_this_branchSemantics_isBranchReachable=(_this_branchSemantics=this.branchSemantics)==null?void 0:_this_branchSemantics.isBranchReachable(this.symbolTableStack._currentBranch))!=null?_this_branchSemantics_isBranchReachable:true};_create_class(SemanticAnalyzer,[{key:\"shaderData\",get:function get(){return this._shaderData}},{key:\"macroDefineList\",get:function get(){return this._macroDefineList}},{key:\"currentFunctionHeader\",get:function get(){var _this__functionCaptures_;return(_this__functionCaptures_=this._functionCaptures[this._functionCaptures.length-1])==null?void 0:_this__functionCaptures_.header}}]);return SemanticAnalyzer}();var ShaderTargetParser=function(){function ShaderTargetParser(actionTable,gotoTable,grammar,branchSemantics,semanticDiagnostics,_source,objectPool,semanticErrorsBlockCodegen,authoringAnalysisEnabled){if(semanticErrorsBlockCodegen===void 0)semanticErrorsBlockCodegen=false;if(authoringAnalysisEnabled===void 0)authoringAnalysisEnabled=semanticDiagnostics!==undefined;this._source=_source;this.semanticErrorsBlockCodegen=semanticErrorsBlockCodegen;this.blockingErrors=[];this._traceBackStack=[];this.actionTable=actionTable;this.gotoTable=gotoTable;this.grammar=grammar;this.semanticAnalyzer=new SemanticAnalyzer(branchSemantics,semanticDiagnostics,objectPool,authoringAnalysisEnabled)}var _proto=ShaderTargetParser.prototype;_proto.setSource=function setSource(source){var _this_semanticAnalyzer_semanticDiagnostics_setSource,_this_semanticAnalyzer_semanticDiagnostics;this._source=source;(_this_semanticAnalyzer_semanticDiagnostics=this.semanticAnalyzer.semanticDiagnostics)==null?void 0:(_this_semanticAnalyzer_semanticDiagnostics_setSource=_this_semanticAnalyzer_semanticDiagnostics.setSource)==null?void 0:_this_semanticAnalyzer_semanticDiagnostics_setSource.call(_this_semanticAnalyzer_semanticDiagnostics,source)};_proto.setSourceScopes=function setSourceScopes(sourceScopes){this.semanticAnalyzer.setSourceScopes(sourceScopes)};_proto.parse=function parse(tokens,macroDefineList){this.semanticAnalyzer.reset(macroDefineList);this.blockingErrors.length=0;var _this=this,traceBackStack=_this._traceBackStack,semanticAnalyzer=_this.semanticAnalyzer;traceBackStack.length=0;traceBackStack.push(0);try{var nextToken=tokens.next();while(true){var token=nextToken.value;var actionInfo=this.stateActionTable.get(token.type);if((actionInfo==null?void 0:actionInfo.action)===EAction.Shift){traceBackStack.push(token,actionInfo.target);if(token.type===Keyword.MACRO_DEFINE_PARAMS){semanticAnalyzer.pushScope();for(var _iterator=_create_for_of_iterator_helper_loose(ParserUtils.parseMacroParamList(token.lexeme)),_step;!(_step=_iterator()).done;){var p=_step.value;semanticAnalyzer.symbolTableStack.insert(new SymbolInfo(p,ESymbolType.VAR))}}if(semanticAnalyzer.semanticDiagnostics&&(token.type===Keyword.FOR||token.type===Keyword.WHILE)){semanticAnalyzer.pushScope()}nextToken=tokens.next()}else if((actionInfo==null?void 0:actionInfo.action)===EAction.Accept){semanticAnalyzer.acceptRule==null?void 0:semanticAnalyzer.acceptRule.call(semanticAnalyzer,semanticAnalyzer);semanticAnalyzer.finalizeInheritance();var program=semanticAnalyzer.semanticStack.pop();return program}else if((actionInfo==null?void 0:actionInfo.action)===EAction.Reduce){var target=actionInfo.target;var reduceProduction=this.grammar.getProductionByID(target);var translationRule=semanticAnalyzer.getTranslationRule(reduceProduction.id);var values=[];for(var i=reduceProduction.derivation.length-1;i>=0;i--){if(reduceProduction.derivation[i]===ETokenType.EPSILON)continue;traceBackStack.pop();var token1=traceBackStack.pop();if(_instanceof(token1,BaseToken)){values.unshift(token1)}else{var astNode=semanticAnalyzer.semanticStack.pop();values.unshift(astNode)}}translationRule==null?void 0:translationRule.apply(void 0,[].concat([semanticAnalyzer],values));if(semanticAnalyzer.semanticDiagnostics&&!semanticAnalyzer.diagnosticsEnabled&&reduceProduction.goal===NoneTerminal.iteration_statement){semanticAnalyzer.popScope()}var gotoTable=this.stateGotoTable;traceBackStack.push(reduceProduction.goal);var nextState=gotoTable.get(reduceProduction.goal);traceBackStack.push(nextState);continue}else{var _$error=ShaderCompilerUtils.createGSError(\"Unexpected token \"+token.lexeme,GSErrorName.CompilationError,this._source,token.location);this.semanticAnalyzer.errors.push(_$error);this.blockingErrors.push(_$error);return null}}}catch(error){if(!_instanceof(error,GSError)||error.name!==GSErrorName.ScannerError)throw error;this.semanticAnalyzer.errors.push(error);this.blockingErrors.push(error);return null}};ShaderTargetParser.create=function create(branchSemantics,semanticDiagnostics,source,objectPool,semanticErrorsBlockCodegen,authoringAnalysisEnabled){if(semanticErrorsBlockCodegen===void 0)semanticErrorsBlockCodegen=false;if(authoringAnalysisEnabled===void 0)authoringAnalysisEnabled=semanticDiagnostics!==undefined;var tables=this._tables;if(!tables){var grammar=createGrammar();var generator=new LALR1(grammar);generator.generate();tables=this._tables={actionTable:generator.actionTable,gotoTable:generator.gotoTable,grammar:grammar}}var parser=new ShaderTargetParser(tables.actionTable,tables.gotoTable,tables.grammar,branchSemantics,semanticDiagnostics,source,objectPool,semanticErrorsBlockCodegen,authoringAnalysisEnabled);addTranslationRule(parser.semanticAnalyzer);return parser};_create_class(ShaderTargetParser,[{key:\"curState\",get:function get(){return this._traceBackStack[this._traceBackStack.length-1]}},{key:\"stateActionTable\",get:function get(){return this.actionTable.get(this.curState)}},{key:\"stateGotoTable\",get:function get(){return this.gotoTable.get(this.curState)}},{key:\"errors\",get:function get(){return this.semanticAnalyzer.errors}}]);return ShaderTargetParser}();var parsedShaderPassPayloads=new WeakMap;function createParsedShaderPass(data,vertexEntry,fragmentEntry,coreInfo){var pass=Object.freeze({});parsedShaderPassPayloads.set(pass,Object.freeze({data:data,vertexEntry:vertexEntry,fragmentEntry:fragmentEntry,coreInfo:coreInfo}));return pass}function getParsedShaderPassPayload(pass){var payload=parsedShaderPassPayloads.get(pass);if(!payload)throw new TypeError(\"Invalid parsed shader pass handle.\");return payload}var SHADER_ROOT_URL=\"shaders://root/\";var ABSOLUTE_URL_PATTERN$1=/^[A-Za-z][A-Za-z\\d+.-]*:/;function normalizeShaderSourceFile(sourceFile){if(!sourceFile)return undefined;var normalized=sourceFile.trim().replace(/\\\\/g,\"/\");if(!normalized)return undefined;if(normalized.startsWith(SHADER_ROOT_URL)){return normalized===SHADER_ROOT_URL?undefined:normalizeShaderIncludeKey(normalized)}if(!ABSOLUTE_URL_PATTERN$1.test(normalized)){return normalizeShaderIncludeKey(normalized)}return new URL(normalized).href}function normalizeShaderIncludeMap(includeMap){if(!includeMap)return Object.create(null);var inputKeysByCanonicalKey=Object.create(null);for(var _iterator=_create_for_of_iterator_helper_loose(Object.keys(includeMap)),_step;!(_step=_iterator()).done;){var inputKey=_step.value;var canonicalKey=normalizeShaderIncludeKey(inputKey);if(Object.prototype.hasOwnProperty.call(inputKeysByCanonicalKey,canonicalKey)){throw new Error('Shader include key collision after normalization: \"'+inputKey+'\" resolves to \"'+canonicalKey+'\".')}inputKeysByCanonicalKey[canonicalKey]=inputKey}return new Proxy(Object.create(null),{get:function get(_target,property){if(typeof property!==\"string\")return undefined;var inputKey=inputKeysByCanonicalKey[property];if(inputKey!==undefined){var source=includeMap[inputKey];return typeof source===\"string\"?source:undefined}var source1=includeMap[property];return typeof source1===\"string\"?source1:undefined}})}function shaderSourceBaseURL(sourceFile){if(!sourceFile)return\"\";if(!ABSOLUTE_URL_PATTERN$1.test(sourceFile)){return new URL(sourceFile,SHADER_ROOT_URL).href}return new URL(sourceFile).href}var PreprocessorMacroState=function(){function PreprocessorMacroState(){this._states=Object.create(null);this._versions=Object.create(null);this._frames=[];this._expressionContext={resolveIdentifier:function(){return{}},isDefined:function(){return undefined}};this.reachable=true}var _proto=PreprocessorMacroState.prototype;_proto.processDirective=function processDirective(directive,body){switch(directive){case\"if\":{var condition=this.reachable?this._evaluate(body):{value:undefined};return{keep:this._openConditional(condition),arm:this._arm(condition.value,[],condition),error:condition.error,errorStart:condition.errorStart,errorEnd:condition.errorEnd}}case\"ifdef\":{var condition1=this._definedCondition(body,true);return{keep:this._openConditional(condition1),arm:this._arm(condition1.value,[],condition1),error:condition1.error}}case\"ifndef\":{var condition2=this._definedCondition(body,false);return{keep:this._openConditional(condition2),arm:this._arm(condition2.value,[],condition2),error:condition2.error}}case\"elif\":return this._advanceConditional(body);case\"else\":return this._advanceElse();case\"endif\":return{keep:this._closeConditional()};case\"define\":{var keep=this.reachable;if(keep)this._define(body);return{keep:keep}}case\"undef\":{var keep1=this.reachable;if(keep1)this._undef(body);return{keep:keep1}}default:return{keep:this.reachable}}};_proto.captureSnapshot=function captureSnapshot(){return{states:PreprocessorMacroState._cloneStates(this._states),versions:Object.assign(Object.create(null),this._versions)}};_proto.createCachedState=function createCachedState(before){var names=new Set([].concat(Object.keys(before.states),Object.keys(this._states)));var mutatedNames=[];for(var _iterator=_create_for_of_iterator_helper_loose(names),_step;!(_step=_iterator()).done;){var name=_step.value;var _before_versions_name,_this__versions_name;if(((_before_versions_name=before.versions[name])!=null?_before_versions_name:0)!==((_this__versions_name=this._versions[name])!=null?_this__versions_name:0)){mutatedNames.push(name)}}return{snapshot:this.captureSnapshot(),mutatedNames:mutatedNames}};_proto.applyCachedState=function applyCachedState(cached){for(var _iterator=_create_for_of_iterator_helper_loose(cached.mutatedNames),_step;!(_step=_iterator()).done;){var name=_step.value;for(var _iterator1=_create_for_of_iterator_helper_loose(this._frames),_step1;!(_step1=_iterator1()).done;){var frame=_step1.value;frame.mutatedNames.add(name)}}this._states=PreprocessorMacroState._cloneStates(cached.snapshot.states);this._versions=Object.assign(Object.create(null),cached.snapshot.versions);this._versionKey=undefined};_proto.cacheKey=function cacheKey(){var names=Object.keys(this._states).sort();var key=\"\";for(var i=0,n=names.length;i<n;i++){var name=names[i];var state=this._states[name];var defined=state.defined===undefined?\"?\":state.defined?\"1\":\"0\";var replacement=state.replacementKey;var _replacement_length;key+=name.length+\":\"+name+defined+(state.functionParams?\"f\":\"v\")+((_replacement_length=replacement==null?void 0:replacement.length)!=null?_replacement_length:\"?\")+\":\"+(replacement!=null?replacement:\"\")}return key+\"\\0\"+this._macroVersionKey()};_proto._openConditional=function _openConditional(condition){var parentReachable=this.reachable;var entryState=PreprocessorMacroState._cloneStates(this._states);var remainderState=PreprocessorMacroState._cloneStates(entryState);if(parentReachable&&condition.value===undefined){this._applyAssumption(this._states,condition.trueAssumption);this._applyAssumption(remainderState,condition.falseAssumption)}this._frames.push({parentReachable:parentReachable,remainderReachable:parentReachable&&condition.value!==true,remainderValue:condition.value===undefined?undefined:!condition.value,remainderConditions:this._appendCondition([],condition,true),hasElse:false,entryState:entryState,remainderState:remainderState,armStates:[],mutatedNames:new Set});this.reachable=parentReachable&&condition.value!==false;return parentReachable};_proto._advanceConditional=function _advanceConditional(body){var frame=this._frames[this._frames.length-1];if(!frame)return{keep:this.reachable};this._finishCurrentArm(frame);this._states=PreprocessorMacroState._cloneStates(frame.remainderState);if(frame.hasElse){this.reachable=false;return{keep:frame.parentReachable}}var keep=frame.remainderReachable;if(!keep){this.reachable=false;return{keep:false}}var condition=this._evaluate(body);var armValue=PreprocessorMacroState._and(frame.remainderValue,condition.value);var arm=this._arm(armValue,frame.remainderConditions,condition);frame.remainderConditions=this._appendCondition(frame.remainderConditions,condition,true);frame.remainderValue=PreprocessorMacroState._and(frame.remainderValue,condition.value===undefined?undefined:!condition.value);frame.remainderState=PreprocessorMacroState._cloneStates(this._states);if(condition.value===undefined){this._applyAssumption(this._states,condition.trueAssumption);this._applyAssumption(frame.remainderState,condition.falseAssumption)}this.reachable=condition.value!==false;if(condition.value===true)frame.remainderReachable=false;return{keep:true,arm:arm,error:condition.error,errorStart:condition.errorStart,errorEnd:condition.errorEnd}};_proto._advanceElse=function _advanceElse(){var frame=this._frames[this._frames.length-1];if(!frame)return{keep:this.reachable};this._finishCurrentArm(frame);this._states=PreprocessorMacroState._cloneStates(frame.remainderState);var keep=!frame.hasElse&&frame.remainderReachable;var armValue=frame.hasElse?false:frame.remainderValue;this.reachable=keep;frame.remainderReachable=false;frame.remainderValue=false;frame.hasElse=true;return{keep:keep,arm:{value:armValue,predicates:frame.remainderConditions}}};_proto._closeConditional=function _closeConditional(){var frame=this._frames.pop();if(!frame)return this.reachable;this._finishCurrentArm(frame);if(!frame.hasElse&&frame.remainderReachable){frame.armStates.push(PreprocessorMacroState._cloneStates(frame.remainderState))}this._states=this._mergeStates(frame);this.reachable=frame.parentReachable;return frame.parentReachable};_proto._finishCurrentArm=function _finishCurrentArm(frame){if(this.reachable)frame.armStates.push(PreprocessorMacroState._cloneStates(this._states))};_proto._mergeStates=function _mergeStates(frame){var _this,_loop=function(){var name=_step.value;var candidates=frame.armStates.map(function(state){return _this1._stateFrom(state,name)});var _candidates_;var first=(_candidates_=candidates[0])!=null?_candidates_:_this._stateFrom(frame.entryState,name);if(candidates.every(function(candidate){return PreprocessorMacroState._sameState(first,candidate)})){merged[name]=first;return\"continue\"}var defined=candidates.every(function(candidate){return candidate.defined===true})?true:candidates.every(function(candidate){return candidate.defined===false})?false:undefined;merged[name]={defined:defined}};var _this1=this;var merged=PreprocessorMacroState._cloneStates(frame.entryState);for(var _iterator=_create_for_of_iterator_helper_loose(frame.mutatedNames),_step;!(_step=_iterator()).done;)_this=this,_loop();return merged};_proto._define=function _define(body){var match=/^[ \\t]*([A-Za-z_]\\w*)([\\s\\S]*)$/.exec(body);if(!match)return;var name=match[1];var suffix=match[2];this._markMutation(name);var replacementKey=suffix.trim();if(suffix[0]===\"(\"){var closeParen=suffix.indexOf(\")\");if(closeParen<0){this._states[name]={defined:true,replacementKey:replacementKey};return}var params=suffix.slice(1,closeParen).split(\",\").map(function(param){return param.trim()}).filter(Boolean);this._states[name]={defined:true,replacementKey:replacementKey,functionParams:params,functionBody:suffix.slice(closeParen+1).trim()};return}this._states[name]={defined:true,replacementKey:replacementKey}};_proto._undef=function _undef(body){var _exec;var name=(_exec=/^[ \\t]*([A-Za-z_]\\w*)/.exec(body))==null?void 0:_exec[1];if(!name)return;this._markMutation(name);this._states[name]={defined:false}};_proto._markMutation=function _markMutation(name){var _this__versions_name;this._versions[name]=((_this__versions_name=this._versions[name])!=null?_this__versions_name:0)+1;this._versionKey=undefined;for(var i=0,n=this._frames.length;i<n;i++)this._frames[i].mutatedNames.add(name)};_proto._evaluate=function _evaluate(expression){var _this=this;var trimmedExpression=expression.trim();var unexpanded=parsePreprocessorExpression(trimmedExpression);var withDefinedValues=resolvePreprocessorDefinedOperators(trimmedExpression,function(name){return _this._state(name).defined});var expansion=expandPreprocessorExpressionMacros(withDefinedValues,function(name){return _this._state(name).defined===false?{body:\"0\"}:_this._macro(name)});if(expansion.error){return{value:undefined,error:expansion.error,errorStart:0,errorEnd:trimmedExpression.length}}var expandedExpression=resolvePreprocessorDefinedOperators(expansion.expression,function(name){return _this._state(name).defined});var parsed=parsePreprocessorExpression(expandedExpression);if(\"error\"in parsed){if(\"error\"in unexpanded&&unexpanded.error.certain){return{value:undefined,error:unexpanded.error.message,errorStart:unexpanded.error.start,errorEnd:unexpanded.error.end}}var error=parsed.error.certain||!parsed.hasExpandableIdentifier?expandedExpression===withDefinedValues?parsed.error.message:\"Invalid preprocessor expression after expanding source macros: \"+parsed.error.message:undefined;return{value:undefined,error:error,errorStart:0,errorEnd:trimmedExpression.length}}var evaluated=parsed.hasExpandableIdentifier?{value:undefined,error:undefined}:evaluatePartiallyKnownPreprocessorConditionResult(parsed.condition,this._expressionContext);var value=evaluated.value!==undefined&&!getPreprocessorConditionRange(parsed.condition)?undefined:evaluated.value;var assumptions=PreprocessorMacroState._conditionAssumptions(parsed.condition);return{value:value===undefined?undefined:value!==0,condition:value!==undefined?undefined:parsed.hasExpandableIdentifier?{kind:\"opaque\",identity:JSON.stringify([expandedExpression,this._macroVersionKey()])}:capturePreprocessorCondition(parsed.condition,this._versions),error:evaluated.error,errorStart:evaluated.error?0:undefined,errorEnd:evaluated.error?trimmedExpression.length:undefined,trueAssumption:assumptions==null?void 0:assumptions.trueAssumption,falseAssumption:assumptions==null?void 0:assumptions.falseAssumption}};_proto._definedCondition=function _definedCondition(body,whenDefined){var _exec;var name=(_exec=/^[ \\t]*([A-Za-z_]\\w*)/.exec(body))==null?void 0:_exec[1];if(!name||!this.reachable)return{value:undefined};var defined=this._state(name).defined;return{value:defined===undefined?undefined:defined===whenDefined,condition:capturePreprocessorCondition({t:whenDefined?\"def\":\"ndef\",m:name},this._versions),trueAssumption:{name:name,defined:whenDefined},falseAssumption:{name:name,defined:!whenDefined}}};_proto._arm=function _arm(value,preceding,condition){return{value:value,predicates:value===true?[]:this._appendCondition(preceding,condition)}};_proto._appendCondition=function _appendCondition(preceding,condition,negate){if(negate===void 0)negate=false;if(!preceding)return;if(condition.value!==undefined)return condition.value!==negate?preceding:undefined;if(!condition.condition)return;return[].concat(preceding,[{condition:condition.condition,negated:negate}])};_proto._macroVersionKey=function _macroVersionKey(){var _this=this;var _this__versionKey;return(_this__versionKey=this._versionKey)!=null?_this__versionKey:this._versionKey=JSON.stringify(Object.keys(this._versions).sort().map(function(name){return[name,_this._versions[name]]}))};_proto._applyAssumption=function _applyAssumption(states,assumption){if(!assumption)return;var current=this._stateFrom(states,assumption.name);states[assumption.name]=assumption.defined?_extends({},current,{defined:true}):{defined:false}};_proto._macro=function _macro(name){var state=this._state(name);if(state.defined!==true||state.replacementKey===undefined)return;var _state_functionBody;return state.functionParams?{body:(_state_functionBody=state.functionBody)!=null?_state_functionBody:\"\",parameters:state.functionParams}:{body:state.replacementKey}};_proto._state=function _state(name){return this._stateFrom(this._states,name)};_proto._stateFrom=function _stateFrom(states,name){var _states_name;return(_states_name=states[name])!=null?_states_name:{defined:undefined}};PreprocessorMacroState._cloneStates=function _cloneStates(states){var clone=Object.create(null);for(var name in states)clone[name]=states[name];return clone};PreprocessorMacroState._sameState=function _sameState(left,right){return left.defined===right.defined&&left.replacementKey===right.replacementKey&&!!left.functionParams===!!right.functionParams};PreprocessorMacroState._and=function _and(left,right){return left===false||right===false?false:left===true&&right===true?true:undefined};PreprocessorMacroState._conditionAssumptions=function _conditionAssumptions(condition){if(condition.t===\"def\"){return{trueAssumption:{name:condition.m,defined:true},falseAssumption:{name:condition.m,defined:false}}}if(condition.t===\"ndef\"){return{trueAssumption:{name:condition.m,defined:false},falseAssumption:{name:condition.m,defined:true}}}if(condition.t!==\"not\")return;var nested=this._conditionAssumptions(condition.c);return nested?{trueAssumption:nested.falseAssumption,falseAssumption:nested.trueAssumption}:undefined};return PreprocessorMacroState}();var SHADER_ROOT_PATH=\"shaders://root/\";var ABSOLUTE_URL_PATTERN=/^[A-Za-z][A-Za-z\\d+.-]*:/;var cachedMacroStates=new WeakMap;var expandedSegmentCounts=new WeakMap;var MAX_INCLUDE_DEPTH=128;var MAX_EXPANDED_SOURCE_LENGTH=8*1024*1024;var MAX_EXPANDED_SOURCE_SEGMENTS=65536;var Preprocessor=function(){function Preprocessor(){}Preprocessor.parse=function parse(source,basePathForIncludeKey,includeMap,chunkOutputCache,sourceFile,sourceScopeStarts){var result=this.parseWithErrors(source,basePathForIncludeKey,includeMap,chunkOutputCache,sourceFile,true,sourceScopeStarts);for(var _iterator=_create_for_of_iterator_helper_loose(result.errors),_step;!(_step=_iterator()).done;){var error=_step.value;Logger.error(error.toString())}return result.content};Preprocessor.parseWithErrors=function parseWithErrors(source,basePathForIncludeKey,includeMap,chunkOutputCache,sourceFile,trackSourceMap,sourceScopeStarts){if(trackSourceMap===void 0)trackSourceMap=true;try{return this._expand(source,basePathForIncludeKey,includeMap,chunkOutputCache,new Set,sourceFile,trackSourceMap,new PreprocessorMacroState,sourceScopeStarts,0)}catch(error){if(!_instanceof(error,GSError)||error.name!==GSErrorName.PreprocessorError)throw error;return{content:\"\",errors:[error],sourceMap:[],sourceScopes:[],conditionalArms:new Map}}};Preprocessor._expand=function _expand(source,basePathForIncludeKey,includeMap,chunkOutputCache,activeIncludePaths,sourceFile,trackSourceMap,macroState,sourceScopeStarts,inheritedSourceScope){var _this=this;var splices=[];var removed=0;var logicalSource=source.replace(/\\\\(?:\\r\\n|\\n|\\r)/g,function(text,offset){splices.push({offset:offset-removed,length:text.length,removed:removed+text.length});removed+=text.length;return\"\"});if(splices.length){var logicalScopeStarts=sourceScopeStarts==null?void 0:sourceScopeStarts.map(function(start){var removedBefore=0;for(var _iterator=_create_for_of_iterator_helper_loose(splices),_step;!(_step=_iterator()).done;){var splice=_step.value;removedBefore+=Math.min(splice.length,Math.max(0,start-splice.offset-removedBefore))}return start-removedBefore});sourceScopeStarts=logicalScopeStarts}var originalSource=source;source=logicalSource;var errors=[];var sourceMap=[];var sourceScopes=[];var conditionalArms=new Map;var parts=[];var sourceOffset=0;var generatedOffset=0;var segmentCount=0;var match;var directiveSource=this._maskDirectiveTrivia(source);var directiveReg=new RegExp(this._directiveReg.source,this._directiveReg.flags);var failExpansion=function(offset,message){throw _this._createPreprocessorError(originalSource,_this._physicalOffset(offset,splices),message,sourceFile)};var reserveExpansion=function(length,segments,offset){if(generatedOffset+length>MAX_EXPANDED_SOURCE_LENGTH){failExpansion(offset,\"Expanded shader source exceeds \"+MAX_EXPANDED_SOURCE_LENGTH+\" characters.\")}if(segmentCount+segments>MAX_EXPANDED_SOURCE_SEGMENTS){failExpansion(offset,\"Shader include expansion exceeds \"+MAX_EXPANDED_SOURCE_SEGMENTS+\" source segments.\")}segmentCount+=segments};reserveExpansion(0,splices.length,0);var currentScope;var appendScope=function(length,sourceScope){if(!(sourceScopeStarts==null?void 0:sourceScopeStarts.length)||!length)return;if((currentScope==null?void 0:currentScope.sourceScope)===sourceScope){currentScope.generatedEnd=generatedOffset+length}else{currentScope={generatedStart:generatedOffset,generatedEnd:generatedOffset+length,sourceScope:sourceScope};sourceScopes.push(currentScope)}};var appendSource=function(start,end,keep){while(start<end){var nextBoundary=_this._nextSourceScopeStart(start,end,sourceScopeStarts);var segmentEnd=nextBoundary!=null?nextBoundary:end;var originalText=source.slice(start,segmentEnd);var text=keep?originalText:_this._maskText(originalText);var sourceScope=_this._sourceScopeAt(start,sourceScopeStarts,inheritedSourceScope);reserveExpansion(text.length,1,start);parts.push(text);appendScope(text.length,sourceScope);if(trackSourceMap){sourceMap.push({generatedStart:generatedOffset,generatedEnd:generatedOffset+text.length,sourceStart:start,source:source,sourceFile:sourceFile,sourceScope:sourceScope})}generatedOffset+=text.length;start=segmentEnd}};while(match=directiveReg.exec(directiveSource)){var _errors;var _this__includePathReg_exec;appendSource(sourceOffset,match.index,macroState.reachable);var directive=match[1];var _match_;var directiveBody=(_match_=match[2])!=null?_match_:\"\";if(directive!==\"include\"){var result=macroState.processDirective(directive,this._stripLineComment(directiveBody));if(result.keep&&result.arm){var hashOffset=directiveSource.indexOf(\"#\",match.index)-match.index;conditionalArms.set(generatedOffset+hashOffset,result.arm)}if(result.error){var leadingWhitespace=directiveBody.length-directiveBody.trimStart().length;var expressionLength=directiveBody.trim().length;var expressionOffset=directiveReg.lastIndex-directiveBody.length+leadingWhitespace;var _result_errorStart;var expressionStart=expressionOffset+Math.min((_result_errorStart=result.errorStart)!=null?_result_errorStart:0,expressionLength);var _result_errorEnd;var expressionEnd=expressionOffset+Math.min((_result_errorEnd=result.errorEnd)!=null?_result_errorEnd:expressionLength,expressionLength);errors.push(this._createPreprocessorError(source,expressionStart,result.error,sourceFile,expressionEnd))}appendSource(match.index,directiveReg.lastIndex,result.keep);sourceOffset=directiveReg.lastIndex;continue}if(!macroState.reachable){appendSource(match.index,directiveReg.lastIndex,false);sourceOffset=directiveReg.lastIndex;continue}var includeName=(_this__includePathReg_exec=this._includePathReg.exec(directiveBody))==null?void 0:_this__includePathReg_exec[1];if(!includeName){errors.push(this._createPreprocessorError(source,match.index,\"Invalid shader include directive.\",sourceFile));sourceOffset=directiveReg.lastIndex;continue}var path=this._resolveIncludePath(includeName,basePathForIncludeKey);if(!path){errors.push(this._createPreprocessorError(source,match.index,'Invalid shader include path \"'+includeName+'\".',sourceFile));sourceOffset=directiveReg.lastIndex;continue}var chunk=includeMap[path];if(chunk===undefined){errors.push(this._createPreprocessorError(source,match.index,'Shader include \"'+path+'\" was not found.',sourceFile));sourceOffset=directiveReg.lastIndex;continue}if(activeIncludePaths.has(path)){errors.push(this._createPreprocessorError(source,match.index,'Shader include cycle detected at \"'+path+'\".',sourceFile));sourceOffset=directiveReg.lastIndex;continue}if(activeIncludePaths.size>=MAX_INCLUDE_DEPTH){failExpansion(match.index,\"Shader include nesting exceeds \"+MAX_INCLUDE_DEPTH+\" levels.\")}var inputMacroState=macroState.captureSnapshot();var includeSourceScope=this._sourceScopeAt(match.index,sourceScopeStarts,inheritedSourceScope);var cacheKey=(trackSourceMap?1:0)+\"\\0\"+path+\"\\0\"+macroState.cacheKey();var expanded=chunkOutputCache.get(cacheKey);var cachedState=expanded&&cachedMacroStates.get(expanded);if(!expanded||!cachedState){activeIncludePaths.add(path);expanded=this._expand(chunk,this._canonicalIncludeURL(path),includeMap,chunkOutputCache,activeIncludePaths,path,trackSourceMap,macroState,undefined,includeSourceScope);activeIncludePaths.delete(path);cachedMacroStates.set(expanded,macroState.createCachedState(inputMacroState));chunkOutputCache.set(cacheKey,expanded)}else{macroState.applyCachedState(cachedState)}var _expandedSegmentCounts_get;reserveExpansion(expanded.content.length,(_expandedSegmentCounts_get=expandedSegmentCounts.get(expanded))!=null?_expandedSegmentCounts_get:1,match.index);for(var _iterator=_create_for_of_iterator_helper_loose(expanded.conditionalArms),_step;!(_step=_iterator()).done;){var _step_value=_step.value,offset=_step_value[0],value=_step_value[1];conditionalArms.set(generatedOffset+offset,value)}parts.push(expanded.content);appendScope(expanded.content.length,includeSourceScope);if(trackSourceMap){for(var _iterator1=_create_for_of_iterator_helper_loose(expanded.sourceMap),_step1;!(_step1=_iterator1()).done;){var segment=_step1.value;sourceMap.push({generatedStart:generatedOffset+segment.generatedStart,generatedEnd:generatedOffset+segment.generatedEnd,sourceStart:segment.sourceStart,source:segment.source,sourceFile:segment.sourceFile,sourceScope:includeSourceScope})}}generatedOffset+=expanded.content.length;(_errors=errors).push.apply(_errors,[].concat(expanded.errors));sourceOffset=directiveReg.lastIndex}appendSource(sourceOffset,source.length,macroState.reachable);var result1={content:parts.join(\"\"),errors:errors,sourceMap:sourceMap,sourceScopes:sourceScopes,conditionalArms:conditionalArms};if(splices.length)this._restoreSplicedSource(result1,source,originalSource,sourceFile,splices);expandedSegmentCounts.set(result1,segmentCount);return result1};Preprocessor._restoreSplicedSource=function _restoreSplicedSource(result,source,originalSource,sourceFile,splices){var _loop=function(){var segment=_step.value;if(segment.source!==source||segment.sourceFile!==sourceFile){mappedSegments.push(segment);return\"continue\"}var start=segment.sourceStart;var end=start+segment.generatedEnd-segment.generatedStart;var append=function(partEnd){if(partEnd<=start)return;mappedSegments.push(_extends({},segment,{generatedStart:segment.generatedStart+start-segment.sourceStart,generatedEnd:segment.generatedStart+partEnd-segment.sourceStart,sourceStart:_this._physicalOffset(start,splices),source:originalSource}));start=partEnd};while(spliceIndex<splices.length&&splices[spliceIndex].offset<=start)spliceIndex++;while(spliceIndex<splices.length&&splices[spliceIndex].offset<end)append(splices[spliceIndex++].offset);append(end)};var _this=this;var mappedSegments=[];var spliceIndex=0;for(var _iterator=_create_for_of_iterator_helper_loose(result.sourceMap),_step;!(_step=_iterator()).done;)_loop();result.sourceMap=mappedSegments;result.errors=result.errors.map(function(error){if(error.source!==source||error.file!==sourceFile)return error;var location=error.location;var start=\"start\"in location?location.start.index:location.index;var end=\"end\"in location?location.end.index:start;return _this._createPreprocessorError(originalSource,_this._physicalOffset(start,splices),error.message,sourceFile,_this._physicalOffset(end,splices,end>start))});return result};Preprocessor._physicalOffset=function _physicalOffset(offset,splices,isEnd){if(isEnd===void 0)isEnd=false;var low=0;var high=splices.length;while(low<high){var middle=low+high>>>1;var seam=splices[middle].offset;if(seam<offset||!isEnd&&seam===offset)low=middle+1;else high=middle}return offset+(low?splices[low-1].removed:0)};Preprocessor._sourceScopeAt=function _sourceScopeAt(offset,scopeStarts,inheritedScope){if(!(scopeStarts==null?void 0:scopeStarts.length))return inheritedScope;var scope=0;for(var index=1;index<scopeStarts.length&&scopeStarts[index]<=offset;index++)scope=index;return scope};Preprocessor._nextSourceScopeStart=function _nextSourceScopeStart(offset,end,scopeStarts){if(!scopeStarts)return;for(var _iterator=_create_for_of_iterator_helper_loose(scopeStarts),_step;!(_step=_iterator()).done;){var start=_step.value;if(start>offset&&start<end)return start}};Preprocessor._maskDirectiveTrivia=function _maskDirectiveTrivia(source){return source.replace(/\\/\\/[^\\r\\n]*|\"[^\"\\r\\n]*\"|\\/\\*[\\s\\S]*?\\*\\//g,function(trivia){return trivia.startsWith(\"/*\")?trivia.replace(/[^\\r\\n]/g,\" \"):trivia})};Preprocessor._stripLineComment=function _stripLineComment(source){return source.replace(/\\/\\/.*$/,\"\")};Preprocessor._maskText=function _maskText(source){return source.replace(/[^\\r\\n]/g,\" \")};Preprocessor._resolveIncludePath=function _resolveIncludePath(includeName,basePathForIncludeKey){var basePath=includeName[0]===\".\"?basePathForIncludeKey||SHADER_ROOT_PATH:SHADER_ROOT_PATH;if(!ABSOLUTE_URL_PATTERN.test(includeName)&&basePath.startsWith(SHADER_ROOT_PATH)){return normalizeShaderIncludeKey(new URL(includeName,basePath).href)}try{var url=new URL(includeName,basePath);return normalizeShaderIncludeKey(url.href)}catch(e){return}};Preprocessor._canonicalIncludeURL=function _canonicalIncludeURL(path){return ABSOLUTE_URL_PATTERN.test(path)?new URL(path).href:new URL(path,SHADER_ROOT_PATH).href};Preprocessor._createPreprocessorError=function _createPreprocessorError(source,offset,message,file,endOffset){if(endOffset===void 0)endOffset=offset;var start=this._positionAt(source,offset);if(endOffset<=offset)return new GSError(GSErrorName.PreprocessorError,message,start,source,file);var range=new ShaderRange;range.set(start,this._positionAt(source,endOffset));return new GSError(GSErrorName.PreprocessorError,message,range,source,file)};Preprocessor._positionAt=function _positionAt(source,offset){var line=0;var lastBreak=-1;for(var i=0;i<offset;i++){var char=source.charCodeAt(i);if(char===10){line++;lastBreak=i}else if(char===13){lastBreak=i}}var position=new ShaderPosition;position.set(offset,line,offset-lastBreak-1);return position};return Preprocessor}();Preprocessor._includePathReg=/^[ \\t]*\"([^\"\\r\\n]+)\"[ \\t]*(?:(?:\\/\\/.*)|(?:\\/\\*.*\\*\\/[ \\t]*))?$/;Preprocessor._directiveReg=/^[ \\t]*#[ \\t]*(include|define|undef|if|ifdef|ifndef|elif|else|endif)\\b([^\\r\\n]*)/gm;var ShaderClueIR=function ShaderClueIR(program,source,sourceMap){if(sourceMap===void 0)sourceMap=[];this.program=program;this.source=source;this.sourceMap=sourceMap;this.shaderData=program.shaderData};function findUnsupportedStructOwnership(ownership,entries,roles,snapshots){var _loop=function(){var _loop=function(){var _loop=function(){var _loop=function(){var member=_step1.value;if(proveInheritanceBranchesCover([],selected.branchSignature.concat(member.branch))===true)return\"continue\";var declarations=member.declarations.filter(function(type){return structs.has(type)});if(!declarations.length)return\"continue\";members.push({declarations:declarations,field:member.field,branch:member.branch});if(targetRole&&declarations.some(function(type){return roles.get(type)===targetRole})&&target.propList.some(function(prop){return prop.ident.lexeme===member.field.lexeme}))referenced=true};var consumer=pending.pop();if(visited.has(consumer)||!consumer.astNode)return\"continue\";visited.add(consumer);var context=selected.branchSignature.concat(consumer.branchSignature);if(proveInheritanceBranchesCover([],context)===true)return\"continue\";var owner=ownership.declarations.get(consumer);var alternatives=owner?families.get(owner.group):[consumer];var replacements=alternatives.filter(function(candidate){return candidate.sourceScope>consumer.sourceScope});if(replacements.length&&proveInheritanceBranchesCover(replacements.map(function(candidate){return candidate.branchSignature}),context)===true)return\"continue\";var facts=references(consumer);for(var _iterator=_create_for_of_iterator_helper_loose(facts.symbols),_step;!(_step=_iterator()).done;){var dependency=_step.value;var _pending;var dependencyOwner=ownership.declarations.get(dependency);(_pending=pending).push.apply(_pending,[].concat(dependencyOwner?families.get(dependencyOwner.group):[dependency]))}if(facts.types.some(function(type){return structs.has(type)&&!roles.has(type)}))referenced=true;for(var _iterator1=_create_for_of_iterator_helper_loose(facts.members),_step1;!(_step1=_iterator1()).done;)_loop()},_loop1=function(){var _step_value=_step1.value,declarations=_step_value.declarations,field=_step_value.field,branch=_step_value.branch;for(var _iterator=_create_for_of_iterator_helper_loose(declarations),_step;!(_step=_iterator()).done;){var _loop=function(){var prop=_step2.value;var compatible=target.propList.filter(function(candidate){return compatibleProperty(prop,candidate)});if(roles.get(source)!==targetRole||proveInheritanceBranchesCover(compatible.map(function(candidate){return candidate.ident.branch}),selected.branchSignature.concat(branch,prop.ident.branch))!==true)unsupported.add(selected)};var source=_step.value;if(source===target)continue;var sourceProps=source.propList.filter(function(prop){return prop.ident.lexeme===field.lexeme});for(var _iterator1=_create_for_of_iterator_helper_loose(sourceProps),_step2;!(_step2=_iterator1()).done;)_loop()}};var selected=_step.value;var target=selected.astNode;var targetRole=roles.get(target);var visited=new Set;var pending=entries.slice();var members=[];var referenced=false;while(pending.length)_loop();if(!referenced)return\"continue\";for(var _iterator=_create_for_of_iterator_helper_loose(members),_step1;!(_step1=_iterator()).done;)_loop1()};var family=_step2.value;if(!_instanceof(family[0],StructSymbol))return\"continue\";var structs=new Set(family.map(function(symbol){return symbol.astNode}));for(var _iterator=_create_for_of_iterator_helper_loose(family),_step;!(_step=_iterator()).done;)_loop()};var families=new Map;var hasStructFamily=false;ownership.declarations.forEach(function(owner,symbol){if(_instanceof(symbol,StructSymbol))hasStructFamily=true;var _families_get;var family=(_families_get=families.get(owner.group))!=null?_families_get:[];family.push(symbol);families.set(owner.group,family)});if(!hasStructFamily)return[];var projectedMembers=new Map;for(var _iterator=_create_for_of_iterator_helper_loose(snapshots),_step;!(_step=_iterator()).done;){var snapshot=_step.value;var _declarations;var _symbol_dataType;var node=snapshot.replacementMemberOwner;if(!node)continue;while(node&&!(_instanceof(node,ASTNode.PostfixExpression)&&node.children.length===3))node=node.parent;var field=node==null?void 0:node.children[2];if(!_instanceof(field,BaseToken))continue;var declarations=[];var _symbol_dataType_structDeclarations;for(var _iterator1=_create_for_of_iterator_helper_loose(snapshot.symbols),_step1;!(_step1=_iterator1()).done;){var symbol=_step1.value;(_declarations=declarations).push.apply(_declarations,[].concat((_symbol_dataType_structDeclarations=(_symbol_dataType=symbol.dataType)==null?void 0:_symbol_dataType.structDeclarations)!=null?_symbol_dataType_structDeclarations:[]))}var _projectedMembers_get;var members=(_projectedMembers_get=projectedMembers.get(snapshot.reference))!=null?_projectedMembers_get:[];members.push({declarations:declarations,field:field,branch:snapshot.callSiteBranch});projectedMembers.set(snapshot.reference,members)}var unsupported=new Set;var referenceCache=new Map;var references=function(symbol){var facts=referenceCache.get(symbol);if(!facts){facts=collectReferences(symbol,projectedMembers);referenceCache.set(symbol,facts)}return facts};for(var _iterator2=_create_for_of_iterator_helper_loose(families.values()),_step2;!(_step2=_iterator2()).done;)_loop();return Array.from(unsupported)}function collectReferences(symbol,projectedMembers){var symbols=new Set(_instanceof(symbol,FnSymbol)?symbol.calledFunctions:[]);var types=new Set;var members=[];var pending=[symbol.astNode];var visited=new Set;while(pending.length){var node=pending.pop();if(visited.has(node))continue;visited.add(node);if(_instanceof(node,ASTNode.TypeSpecifier)){for(var _iterator=_create_for_of_iterator_helper_loose(node.structDeclarations),_step;!(_step=_iterator()).done;){var type=_step.value;types.add(type);pending.push(type)}}else if(_instanceof(node,ASTNode.VariableIdentifier)){var _members;var _projectedMembers_get;(_members=members).push.apply(_members,[].concat((_projectedMembers_get=projectedMembers.get(node))!=null?_projectedMembers_get:[]));for(var _iterator1=_create_for_of_iterator_helper_loose(node.resolvedSymbols()),_step1;!(_step1=_iterator1()).done;){var reference=_step1.value;if(_instanceof(reference,FnSymbol)||reference.isGlobalVariable)symbols.add(reference)}}else if(_instanceof(node,ASTNode.PostfixExpression)&&node.children.length===3&&_instanceof(node.children[2],BaseToken)){var declarations=expressionStructs(node.children[0]);if(declarations.length)members.push({declarations:declarations,field:node.children[2],branch:node._branch})}for(var _iterator2=_create_for_of_iterator_helper_loose(node.children),_step2;!(_step2=_iterator2()).done;){var child=_step2.value;if(_instanceof(child,TreeNode))pending.push(child)}}return{symbols:Array.from(symbols),types:Array.from(types),members:members}}function expressionStructs(node){if(_instanceof(node,ASTNode.VariableIdentifier)){var _result;var _symbol_dataType;var result=[];var _symbol_dataType_structDeclarations;for(var _iterator=_create_for_of_iterator_helper_loose(node.resolvedValueSymbols()),_step;!(_step=_iterator()).done;){var symbol=_step.value;(_result=result).push.apply(_result,[].concat((_symbol_dataType_structDeclarations=(_symbol_dataType=symbol.dataType)==null?void 0:_symbol_dataType.structDeclarations)!=null?_symbol_dataType_structDeclarations:[]))}return result}if(_instanceof(node,ASTNode.FunctionCallGeneric)){var result1=[];var _node_fnSymbols;for(var _iterator1=_create_for_of_iterator_helper_loose((_node_fnSymbols=node.fnSymbols)!=null?_node_fnSymbols:node.fnSymbol?[node.fnSymbol]:[]),_step1;!(_step1=_iterator1()).done;){var symbol1=_step1.value;var _result1;var _symbol_dataType1;var _symbol_dataType_structDeclarations1;(_result1=result1).push.apply(_result1,[].concat((_symbol_dataType_structDeclarations1=(_symbol_dataType1=symbol1.dataType)==null?void 0:_symbol_dataType1.structDeclarations)!=null?_symbol_dataType_structDeclarations1:[]))}return result1}if(_instanceof(node,ASTNode.PostfixExpression)&&node.children.length===3&&_instanceof(node.children[2],BaseToken)){var result2=[];for(var _iterator2=_create_for_of_iterator_helper_loose(expressionStructs(node.children[0])),_step2;!(_step2=_iterator2()).done;){var type=_step2.value;for(var _iterator3=_create_for_of_iterator_helper_loose(type.propList),_step3;!(_step3=_iterator3()).done;){var prop=_step3.value;var _result2;if(prop.ident.lexeme===node.children[2].lexeme)(_result2=result2).push.apply(_result2,[].concat(prop.typeInfo.structDeclarations))}}return result2}var child=node.children[_instanceof(node.children[0],BaseToken)?1:0];return _instanceof(child,TreeNode)?expressionStructs(child):[]}function compatibleProperty(source,target){if(source.ident.lexeme!==target.ident.lexeme||source.typeInfo.type!==target.typeInfo.type||source.isFlat!==target.isFlat||source.mrtIndex!==target.mrtIndex)return false;var left=source.typeInfo.arraySpecifier;var right=target.typeInfo.arraySpecifier;if(!left||!right)return left===right;return left===right||left.size!==undefined&&left.size===right.size}var ShaderStructRole=function(ShaderStructRole){ShaderStructRole[\"Varying\"]=\"varying\";ShaderStructRole[\"Attribute\"]=\"attribute\";ShaderStructRole[\"Mrt\"]=\"mrt\";return ShaderStructRole}({});var ShaderCoreInfo=function(){function ShaderCoreInfo(ir,vertexEntry,fragmentEntry,getDeclarationCoexistence,getBranchCoverage){this.getDeclarationCoexistence=getDeclarationCoexistence;this.getBranchCoverage=getBranchCoverage;var symbolTable=ir.shaderData.symbolTable;var ownership=ir.shaderData.declarationOwnership;this.deferredDeclarationOwnership=ownership.declarations;var vertexFunctions=findFunctions(symbolTable,vertexEntry);var fragmentFunctions=findFunctions(symbolTable,fragmentEntry);this.vertexEntry=createEntryPointInfo(EShaderStage.VERTEX,vertexEntry,vertexFunctions,getDeclarationCoexistence,ownership);this.fragmentEntry=createEntryPointInfo(EShaderStage.FRAGMENT,fragmentEntry,fragmentFunctions,getDeclarationCoexistence,ownership);var mutableIO=createIOInfo();collectEntryIO(vertexFunctions,fragmentFunctions,mutableIO);this.roleConflicts=removeRoleConflicts(mutableIO);var roles=new Map;registerStructRoles(roles,mutableIO.attributeStructs,\"attribute\");registerStructRoles(roles,mutableIO.varyingStructs,\"varying\");registerStructRoles(roles,mutableIO.mrtStructs,\"mrt\");this.unsupportedDeferredDeclarations=ownership.unsupported.concat(findUnsupportedStructOwnership(ownership,vertexFunctions.concat(fragmentFunctions),roles,ir.shaderData.referenceResolutionSnapshots));deriveStructVariableRoles(symbolTable,vertexFunctions,fragmentFunctions,mutableIO,roles);this.io=mutableIO;this.outerGlobalMacroDeclarations=ir.shaderData.getOuterGlobalMacroDeclarations()}ShaderCoreInfo.create=function create(ir,vertexEntry,fragmentEntry,getDeclarationCoexistence,getBranchCoverage){if(getDeclarationCoexistence===void 0)getDeclarationCoexistence=getLexicalDeclarationCoexistence;if(getBranchCoverage===void 0)getBranchCoverage=getLexicalBranchCoverage;return new ShaderCoreInfo(ir,vertexEntry,fragmentEntry,getDeclarationCoexistence,getBranchCoverage)};return ShaderCoreInfo}();function createIOInfo(){return{attributeStructs:[],attributeList:[],varyingStructs:[],varyingList:[],mrtStructs:[],mrtList:[],structVariableRoles:new Map,vertexStructVariableRoles:new Map,fragmentStructVariableRoles:new Map}}function findFunctions(symbolTable,entry){var lookupSymbol=new SymbolInfo(\"\",null);lookupSymbol.set(entry,ESymbolType.FN);var functions=symbolTable.getSymbols(lookupSymbol,true,[]);functions.sort(function(left,right){return left.astNode.location.start.index-right.astNode.location.start.index});return functions}function createEntryPointInfo(stage,name,functions,getDeclarationCoexistence,ownership){var hasDefiniteAmbiguity=false;for(var i=0,n=functions.length;i<n&&!hasDefiniteAmbiguity;i++){for(var j=i+1;j<n;j++){if(isDeferredDeclarationPair(ownership,functions[i],functions[j]))continue;if(getDeclarationCoexistence(functions[i].branchSignature,functions[j].branchSignature)===\"coexist\"){hasDefiniteAmbiguity=true;break}}}return{stage:stage,name:name,functions:functions,hasDefiniteAmbiguity:hasDefiniteAmbiguity}}function appendStructs(declarations,structs,props,seen){for(var _iterator=_create_for_of_iterator_helper_loose(declarations),_step;!(_step=_iterator()).done;){var node=_step.value;var _props;if(seen.has(node))continue;seen.add(node);structs.push(node);(_props=props).push.apply(_props,[].concat(node.propList))}}function collectEntryIO(vertexFunctions,fragmentFunctions,io){var attributeStructs=new Set;var varyingStructs=new Set;var mrtStructs=new Set;for(var _iterator=_create_for_of_iterator_helper_loose(vertexFunctions),_step;!(_step=_iterator()).done;){var fn=_step.value;var _proto_parameterList_,_proto_parameterList;var proto=fn.astNode.protoType;if(typeof proto.returnType.type===\"string\"){appendStructs(proto.returnType.typeSpecifier.structDeclarations,io.varyingStructs,io.varyingList,varyingStructs)}var attributeType=(_proto_parameterList=proto.parameterList)==null?void 0:(_proto_parameterList_=_proto_parameterList[0])==null?void 0:_proto_parameterList_.typeInfo.type;if(typeof attributeType===\"string\"){appendStructs(proto.parameterList[0].typeInfo.structDeclarations,io.attributeStructs,io.attributeList,attributeStructs)}}for(var _iterator1=_create_for_of_iterator_helper_loose(fragmentFunctions),_step1;!(_step1=_iterator1()).done;){var fn1=_step1.value;var returnType=fn1.astNode.protoType.returnType.type;if(typeof returnType===\"string\"){appendStructs(fn1.astNode.protoType.returnType.typeSpecifier.structDeclarations,io.mrtStructs,io.mrtList,mrtStructs)}}}function removeRoleConflicts(io){var roles=new Map;var register=function(nodes,role){for(var _iterator=_create_for_of_iterator_helper_loose(nodes),_step;!(_step=_iterator()).done;){var node=_step.value;var _roles_get;var nodeRoles=(_roles_get=roles.get(node))!=null?_roles_get:[];if(nodeRoles.indexOf(role)===-1)nodeRoles.push(role);roles.set(node,nodeRoles)}};register(io.attributeStructs,\"attribute\");register(io.varyingStructs,\"varying\");register(io.mrtStructs,\"mrt\");var conflicts=[];var conflictingStructs=new Set;roles.forEach(function(structRoles,struct){if(structRoles.length>1){conflicts.push({struct:struct,roles:structRoles});conflictingStructs.add(struct)}});if(!conflictingStructs.size)return conflicts;var droppedProps=new Set;var filterStructs=function(structs){for(var index=structs.length-1;index>=0;index--){if(conflictingStructs.has(structs[index])){for(var _iterator=_create_for_of_iterator_helper_loose(structs[index].propList),_step;!(_step=_iterator()).done;){var prop=_step.value;droppedProps.add(prop)}structs.splice(index,1)}}};filterStructs(io.attributeStructs);filterStructs(io.varyingStructs);filterStructs(io.mrtStructs);var filterProps=function(props){for(var index=props.length-1;index>=0;index--){if(droppedProps.has(props[index]))props.splice(index,1)}};filterProps(io.attributeList);filterProps(io.varyingList);filterProps(io.mrtList);return conflicts}function deriveStructVariableRoles(symbolTable,vertexFunctions,fragmentFunctions,io,structRoles){var functionFacts=new Map;symbolTable.forEach(function(symbol){if(_instanceof(symbol,FnSymbol)){functionFacts.set(symbol,collectFunctionRoleFacts(symbol,structRoles,io.structVariableRoles))}else if(_instanceof(symbol,VarSymbol)&&symbol.isGlobalVariable){registerVariableRole(io.structVariableRoles,symbol,structRoles);registerVariableRole(io.vertexStructVariableRoles,symbol,structRoles);registerVariableRole(io.fragmentStructVariableRoles,symbol,structRoles)}});populateReachableFunctionVariables(io.vertexStructVariableRoles,vertexFunctions,functionFacts);populateReachableFunctionVariables(io.fragmentStructVariableRoles,fragmentFunctions,functionFacts)}function populateReachableFunctionVariables(target,entries,functionFacts){var visited=new Set;var pending=entries.slice();while(pending.length){var _pending;var fn=pending.pop();if(visited.has(fn))continue;visited.add(fn);var facts=functionFacts.get(fn);if(!facts)continue;for(var _iterator=_create_for_of_iterator_helper_loose(facts.variables),_step;!(_step=_iterator()).done;){var _step_value=_step.value,variable=_step_value.variable,role=_step_value.role;target.set(variable,role)}(_pending=pending).push.apply(_pending,[].concat(facts.callees))}}function collectFunctionRoleFacts(fn,roles,allVariableRoles){var _callees;var variables=[];var callees=[];var register=function(variable){var role=resolveVariableRole(variable,roles);if(!role)return;variables.push({variable:variable,role:role});allVariableRoles.set(variable,role)};var parameters=fn.astNode.protoType.parameterList;if(parameters){for(var _iterator=_create_for_of_iterator_helper_loose(parameters),_step;!(_step=_iterator()).done;){var parameter=_step.value;var parameterNode=parameter.astNode;if(_instanceof(parameterNode,ASTNode.ParameterDeclaration)&¶meterNode.symbol){register(parameterNode.symbol)}}}for(var _iterator1=_create_for_of_iterator_helper_loose(fn.localVariables),_step1;!(_step1=_iterator1()).done;){var variable=_step1.value;register(variable)}(_callees=callees).push.apply(_callees,[].concat(fn.calledFunctions));return{variables:variables,callees:callees}}function registerStructRoles(roles,structs,role){for(var _iterator=_create_for_of_iterator_helper_loose(structs),_step;!(_step=_iterator()).done;){var struct=_step.value;roles.set(struct,role)}}function registerVariableRole(target,variable,roles){var role=resolveVariableRole(variable,roles);if(role)target.set(variable,role)}function resolveVariableRole(variable,roles){var _variable_dataType;var resolvedRole;var _variable_dataType_structDeclarations;for(var _iterator=_create_for_of_iterator_helper_loose((_variable_dataType_structDeclarations=(_variable_dataType=variable.dataType)==null?void 0:_variable_dataType.structDeclarations)!=null?_variable_dataType_structDeclarations:[]),_step;!(_step=_iterator()).done;){var declaration=_step.value;var role=roles.get(declaration);if(!role||resolvedRole&&resolvedRole!==role)return;resolvedRole=role}return resolvedRole}var SIGNED_INT32_MIN=-0x80000000;var SIGNED_INT32_MAX=0x7fffffff;var MAX_BRANCH_PROOF_STATES=256;function areConditionsComplementary(left,right){if(!left||!right)return false;if(left.kind===\"constant\"||right.kind===\"constant\"){return left.kind===\"constant\"&&right.kind===\"constant\"&&left.value!==right.value}if(left.kind===\"expression\"||right.kind===\"expression\"){return left.kind===\"expression\"&&right.kind===\"expression\"&&sameExpression(left,right)&&left.negated!==right.negated}if(left.kind!==right.kind||left.name!==right.name||left.version!==right.version)return false;if(left.kind===\"defined\"&&right.kind===\"defined\")return left.defined!==right.defined;if(left.kind!==\"comparison\"||right.kind!==\"comparison\")return false;if(hasExactIntegerValue(left)&&hasExactIntegerValue(right)){return complementaryConditionKey(left)===simpleConditionKey(right)}if(left.value!==right.value)return false;return left.operator===\"==\"&&right.operator===\"!=\"||left.operator===\"!=\"&&right.operator===\"==\"||left.operator===\">\"&&right.operator===\"<=\"||left.operator===\">=\"&&right.operator===\"<\"||left.operator===\"<\"&&right.operator===\">=\"||left.operator===\"<=\"&&right.operator===\">\"}function isConditionalChainExhaustive(constraints){for(var i=0,n=constraints.length;i<n;i++){var condition=constraints[i].condition;if((condition==null?void 0:condition.kind)===\"constant\"&&condition.value)return true;var _constraints_i_precedingConditions;if(condition&&isConditionImplied(condition,(_constraints_i_precedingConditions=constraints[i].precedingConditions)!=null?_constraints_i_precedingConditions:[]))return true;for(var j=0;j<i;j++){if(areConditionsComplementary(constraints[j].condition,condition))return true}}return false}function isBranchVisibleFrom(defBranch,callSiteBranch){var _loop=function(i,n){var constraint=defBranch[i];if(constraint.conditionalGroup!==undefined){var matchingArm=callSiteBranch.find(function(candidate){return candidate.conditionalGroup===constraint.conditionalGroup&&candidate.conditionalArm===constraint.conditionalArm});var otherArm=callSiteBranch.find(function(candidate){return candidate.conditionalGroup===constraint.conditionalGroup&&candidate.conditionalArm!==constraint.conditionalArm});if(otherArm)return{v:false};if(matchingArm)return\"continue\"}var required=getConstraintConditions(constraint);if(!constraint.condition&&required.length===0)return{v:false};for(var j=0,m=required.length;j<m;j++){if(!isConditionImplied(required[j],callConditions))return{v:false}}};if(!isBranchReachable(callSiteBranch)||!canBranchesOverlap(defBranch,callSiteBranch))return false;var callConditions=getConditions(callSiteBranch);for(var i=0,n=defBranch.length;i<n;i++){var _ret=_loop(i);if(_type_of(_ret)===\"object\")return _ret.v}return true}function canDeclarationsCoexist(earlier,later){return getDeclarationCoexistence(earlier,later)!==\"exclusive\"}function getDeclarationCoexistence(earlier,later){if(!canBranchesOverlap(earlier,later))return\"exclusive\";for(var i=0,n=earlier.length;i<n;i++){var left=earlier[i];if(left.defined||!left.selfGuarding)continue;for(var j=0,m=later.length;j<m;j++){var right=later[j];if(!right.defined&&right.name===left.name&&left.conditionalGroup!==undefined&&right.conditionalGroup!==undefined&&right.conditionalGroup>left.conditionalGroup){if(!hasCompatibleGuardUndef(earlier,left,later,right))return\"exclusive\"}}}if(hasUnresolvedCondition(earlier)||hasUnresolvedCondition(later))return\"unknown\";var conditions=getConditions(earlier);appendConditions(later,conditions);var satisfiability=getConditionConjunctionSatisfiability(conditions);return satisfiability===\"satisfiable\"?\"coexist\":satisfiability===\"unsatisfiable\"?\"exclusive\":\"unknown\"}function hasUnresolvedCondition(branch){return branch.some(function(constraint){var _constraint_precedingConditions;var _constraint_precedingConditions_length;return!constraint.condition&&((_constraint_precedingConditions_length=(_constraint_precedingConditions=constraint.precedingConditions)==null?void 0:_constraint_precedingConditions.length)!=null?_constraint_precedingConditions_length:0)===0})}function isBranchReachable(branch){return getBranchReachability(branch)!==\"unreachable\"}function getBranchReachability(branch){for(var i=0,n=branch.length;i<n;i++){var left=branch[i];if(left.conditionalGroup===undefined)continue;for(var j=i+1;j<n;j++){var right=branch[j];if(right.conditionalGroup===left.conditionalGroup&&right.conditionalArm!==left.conditionalArm){return\"unreachable\"}}}if(hasUnresolvedCondition(branch))return\"unknown\";var satisfiability=getConditionConjunctionSatisfiability(getConditions(branch));return satisfiability===\"satisfiable\"?\"reachable\":satisfiability===\"unsatisfiable\"?\"unreachable\":\"unknown\"}function areConditionsReachable(conditions){for(var i=0,n=conditions.length;i<n;i++){var condition=conditions[i];if(condition.kind===\"constant\"&&!condition.value)return false;for(var j=i+1;j<n;j++){if(areConditionsMutuallyExclusive(conditions[i],conditions[j]))return false}}return getConditionConjunctionSatisfiability(conditions)!==\"unsatisfiable\"}function getConditionConjunctionSatisfiability(conditions,budget){if(budget===void 0)budget={remaining:MAX_BRANCH_PROOF_STATES};if(--budget.remaining<0)return\"unknown\";var expressionIndex=conditions.findIndex(function(condition){return condition.kind===\"expression\"});if(expressionIndex<0){return conditions.every(hasExactIntegerValue)?isAtomicConjunctionSatisfiable(conditions)?\"satisfiable\":\"unsatisfiable\":\"unknown\"}var expression=conditions[expressionIndex];if(expression.opaque)return\"unknown\";var remaining=conditions.slice();remaining.splice(expressionIndex,1);var operands=expression.negated?expression.operands.map(negateCondition):expression.operands;var operator=expression.negated?expression.operator===\"&&\"?\"||\":\"&&\":expression.operator;if(operator===\"&&\")return getConditionConjunctionSatisfiability([].concat(remaining,operands),budget);var sawUnknown=false;for(var i=0,n=operands.length;i<n;i++){var result=getConditionConjunctionSatisfiability([].concat(remaining,[operands[i]]),budget);if(result===\"satisfiable\")return result;if(result===\"unknown\")sawUnknown=true}return sawUnknown?\"unknown\":\"unsatisfiable\"}function canBranchesOverlap(left,right){for(var i=0,n=left.length;i<n;i++){var leftConstraint=left[i];for(var j=0,m=right.length;j<m;j++){var rightConstraint=right[j];if(leftConstraint.conditionalGroup!==undefined&&leftConstraint.conditionalGroup===rightConstraint.conditionalGroup&&leftConstraint.conditionalArm!==rightConstraint.conditionalArm){return false}}}var conditions=getConditions(left);appendConditions(right,conditions);return areConditionsReachable(conditions)}function canBranchesCoverCallsite(candidates,callSiteBranch){return getBranchCoverage(candidates,callSiteBranch)===\"covered\"}function getBranchCoverage(candidates,callSiteBranch){var _loop=function(i,n){var candidate=normalizedCandidates[i];if(!uniqueCandidates.some(function(existing){return sameBranch(existing,candidate)}))uniqueCandidates.push(candidate)};var normalizedCandidates=candidates.map(removeSelfGuardingConstraints);var normalizedCallsite=removeSelfGuardingConstraints(callSiteBranch);if(canCandidateSetCoverCallsite(normalizedCandidates,normalizedCallsite))return\"covered\";var uniqueCandidates=[];for(var i=0,n=normalizedCandidates.length;i<n;i++)_loop(i);uniqueCandidates.sort(compareBranchSourceOrder);return hasAtomicCoverageCounterexample(uniqueCandidates,normalizedCallsite)?\"uncovered\":\"unknown\"}function compareBranchSourceOrder(left,right){var length=Math.min(left.length,right.length);for(var i=0;i<length;i++){var _left_i_conditionalGroup;var leftGroup=(_left_i_conditionalGroup=left[i].conditionalGroup)!=null?_left_i_conditionalGroup:Number.MAX_SAFE_INTEGER;var _right_i_conditionalGroup;var rightGroup=(_right_i_conditionalGroup=right[i].conditionalGroup)!=null?_right_i_conditionalGroup:Number.MAX_SAFE_INTEGER;if(leftGroup!==rightGroup)return leftGroup-rightGroup;var _left_i_conditionalArm;var leftArm=(_left_i_conditionalArm=left[i].conditionalArm)!=null?_left_i_conditionalArm:Number.MAX_SAFE_INTEGER;var _right_i_conditionalArm;var rightArm=(_right_i_conditionalArm=right[i].conditionalArm)!=null?_right_i_conditionalArm:Number.MAX_SAFE_INTEGER;if(leftArm!==rightArm)return leftArm-rightArm}return left.length-right.length}function hasAtomicCoverageCounterexample(candidates,callSiteBranch){if(candidates.length===0)return false;if(candidates.every(function(candidate){return!canBranchesOverlap(candidate,callSiteBranch)}))return true;if(!hasOnlyAtomicConditions(callSiteBranch)||candidates.some(function(candidate){return!hasOnlyAtomicConditions(candidate)})){return false}var counterexampleFacts=getConditions(callSiteBranch);if(!isAtomicConjunctionSatisfiable(counterexampleFacts))return false;for(var i=0,n=candidates.length;i<n;i++){var candidateConditions=getConditions(candidates[i]);if(!isAtomicConjunctionSatisfiable([].concat(counterexampleFacts,candidateConditions)))continue;var excluded=false;for(var j=0,m=candidateConditions.length;j<m;j++){var negated=negateCondition(candidateConditions[j]);if(isAtomicConjunctionSatisfiable([].concat(counterexampleFacts,[negated]))){counterexampleFacts.push(negated);excluded=true;break}}if(!excluded)return false}return true}function hasOnlyAtomicConditions(branch){for(var i=0,n=branch.length;i<n;i++){var _constraint_condition;var constraint=branch[i];var preceding=constraint.precedingConditions;if(!constraint.condition&&!(preceding==null?void 0:preceding.length))return false;if(((_constraint_condition=constraint.condition)==null?void 0:_constraint_condition.kind)===\"expression\")return false;if(constraint.condition&&!hasExactIntegerValue(constraint.condition))return false;if(preceding==null?void 0:preceding.some(function(condition){return condition.kind===\"expression\"}))return false;if(preceding==null?void 0:preceding.some(function(condition){return!hasExactIntegerValue(condition)}))return false}return true}function hasExactIntegerValue(condition){return condition.kind!==\"comparison\"||Number.isInteger(condition.value)&&condition.value>=SIGNED_INT32_MIN&&condition.value<=SIGNED_INT32_MAX}function isAtomicConjunctionSatisfiable(conditions){var _loop=function(){var state=_step.value;if(state.defined===false){if(state.comparisons.some(function(comparison){return!matchesComparison(0,comparison)}))return{v:false};return\"continue\"}var exact=void 0;var minimum=SIGNED_INT32_MIN;var maximum=SIGNED_INT32_MAX;var excluded=new Set;for(var i=0,n=state.comparisons.length;i<n;i++){var comparison=state.comparisons[i];if(comparison.operator===\"==\"){if(exact!==undefined&&exact!==comparison.value)return{v:false};exact=comparison.value}else if(comparison.operator===\"!=\"){excluded.add(comparison.value)}else{var candidateLower=lowerBound(comparison);if(candidateLower){minimum=Math.max(minimum,candidateLower.value+(candidateLower.inclusive?0:1))}var candidateUpper=upperBound(comparison);if(candidateUpper){maximum=Math.min(maximum,candidateUpper.value-(candidateUpper.inclusive?0:1))}}}if(exact!==undefined){if(excluded.has(exact))return{v:false};if(state.comparisons.some(function(comparison){return!matchesComparison(exact,comparison)}))return{v:false};return\"continue\"}if(minimum>maximum)return{v:false};if(Number.isFinite(minimum)&&Number.isFinite(maximum)){var excludedInRange=0;for(var _iterator=_create_for_of_iterator_helper_loose(excluded),_step1;!(_step1=_iterator()).done;){var value=_step1.value;if(value>=minimum&&value<=maximum)excludedInRange++}if(maximum-minimum+1<=excludedInRange)return{v:false}}};var states=new Map;for(var i=0,n=conditions.length;i<n;i++){var condition=conditions[i];if(condition.kind===\"constant\"){if(!condition.value)return false;continue}if(condition.kind===\"expression\")return false;var key=condition.name+\":\"+condition.version;var _states_get;var state=(_states_get=states.get(key))!=null?_states_get:{comparisons:[]};states.set(key,state);if(condition.kind===\"defined\"){if(state.defined!==undefined&&state.defined!==condition.defined)return false;state.defined=condition.defined}else{state.comparisons.push(condition)}}for(var _iterator=_create_for_of_iterator_helper_loose(states.values()),_step;!(_step=_iterator()).done;){var _ret=_loop();if(_type_of(_ret)===\"object\")return _ret.v}return true}function removeSelfGuardingConstraints(branch){return branch.some(function(constraint){return constraint.selfGuarding})?branch.filter(function(constraint){return!constraint.selfGuarding}):branch}function canCandidateSetCoverCallsite(candidates,callSiteBranch,memo){var _loop=function(){var _loop=function(arm){var _representative_conditionalReachableArms;var _representative_conditionalReachableArms_arm;var armReachable=(_representative_conditionalReachableArms_arm=representative==null?void 0:(_representative_conditionalReachableArms=representative.conditionalReachableArms)==null?void 0:_representative_conditionalReachableArms[arm])!=null?_representative_conditionalReachableArms_arm:true;if(!armReachable)return\"continue\";var armCandidates=compatible.filter(function(candidate){var _candidate_find;return((_candidate_find=candidate.find(function(constraint){return constraint.conditionalGroup===group}))==null?void 0:_candidate_find.conditionalArm)===arm}).map(function(candidate){return removeConditionalGroup(candidate,group)});if(!armCandidates.length){everyArmHasCandidates=false;return\"break\"}candidatesByArm.push(armCandidates)};var group=_step.value;var callSiteConstraint=callSiteBranch.find(function(constraint){return constraint.conditionalGroup===group});if((callSiteConstraint==null?void 0:callSiteConstraint.conditionalArm)!==undefined){var inCurrentArm=compatible.filter(function(candidate){var _candidate_find;return((_candidate_find=candidate.find(function(constraint){return constraint.conditionalGroup===group}))==null?void 0:_candidate_find.conditionalArm)===callSiteConstraint.conditionalArm}).map(function(candidate){return removeConditionalGroup(candidate,group)});if(inCurrentArm.length&&canCandidateSetCoverCallsite(inCurrentArm,removeConditionalGroup(callSiteBranch,group),memo)){memo.results.set(key,true);return{v:true}}return\"continue\"}var representative=compatible.map(function(candidate){return candidate.find(function(constraint){return constraint.conditionalGroup===group})}).find(function(constraint){return(constraint==null?void 0:constraint.conditionalArmCount)!==undefined});var armCount=representative==null?void 0:representative.conditionalArmCount;if(armCount===undefined)return\"continue\";var candidatesByArm=[];var everyArmHasCandidates=true;for(var arm=0;arm<armCount;arm++){var _ret=_loop(arm);if(_ret===\"break\")break}if(everyArmHasCandidates&&candidatesByArm.every(function(armCandidates){return canCandidateSetCoverCallsite(armCandidates,callSiteBranch,memo)})){memo.results.set(key,true);return{v:true}}};if(!isBranchReachable(callSiteBranch))return true;var compatible=candidates.filter(function(candidate){return canBranchesOverlap(candidate,callSiteBranch)});for(var i=0,n=compatible.length;i<n;i++){if(isBranchVisibleFrom(compatible[i],callSiteBranch))return true}var groups=new Set;for(var i1=0,n1=compatible.length;i1<n1;i1++){var candidate=compatible[i1];for(var j=0,m=candidate.length;j<m;j++){var constraint=candidate[j];if(constraint.conditionalComplete&&constraint.conditionalGroup!==undefined&&constraint.conditionalArmCount!==undefined){groups.add(constraint.conditionalGroup)}}}if(!groups.size)return canComplementarySimpleCandidatesCoverCallsite(compatible,callSiteBranch);memo!=null?memo:memo={constraints:new Map,results:new Map};var key=coverageStateKey(compatible,callSiteBranch,memo.constraints);var cached=memo.results.get(key);if(cached!==undefined)return cached;var commonGroup=findIndependentCommonGroup(compatible,callSiteBranch);for(var _iterator=_create_for_of_iterator_helper_loose(commonGroup===undefined?groups:[commonGroup]),_step;!(_step=_iterator()).done;){var _ret=_loop();if(_type_of(_ret)===\"object\")return _ret.v}var covered=canComplementarySimpleCandidatesCoverCallsite(compatible,callSiteBranch);memo.results.set(key,covered);return covered}function coverageStateKey(candidates,callSiteBranch,constraints){return[].concat([callSiteBranch],candidates).map(function(branch){return branch.map(function(constraint){var id=constraints.get(constraint);if(id===undefined)constraints.set(constraint,id=constraints.size);return id}).join(\",\")}).join(\";\")}function findIndependentCommonGroup(candidates,callSiteBranch){var _candidates__find,_candidates_;if(callSiteBranch.length)return;var groups=new Map;var macros=new Map;for(var _iterator=_create_for_of_iterator_helper_loose(candidates),_step;!(_step=_iterator()).done;){var candidate=_step.value;for(var _iterator1=_create_for_of_iterator_helper_loose(candidate),_step1;!(_step1=_iterator1()).done;){var constraint=_step1.value;var _constraint_conditionalReachableArms;var group=constraint.conditionalGroup;var conditions=getConstraintConditions(constraint);var condition=conditions[0];if(group===undefined||!constraint.conditionalComplete||constraint.conditionalArmCount!==2||constraint.conditionalArm!==0&&constraint.conditionalArm!==1||((_constraint_conditionalReachableArms=constraint.conditionalReachableArms)==null?void 0:_constraint_conditionalReachableArms.some(function(reachable){return!reachable}))||conditions.length!==1||condition.kind!==\"defined\"&&condition.kind!==\"comparison\"||!hasExactIntegerValue(condition)){return}var macro=condition.name+\":\"+condition.version;var arm0Condition=constraint.conditionalArm===0?condition:negateCondition(condition);var existing=groups.get(group);if(existing&&(existing.macro!==macro||!sameCondition(existing.condition,arm0Condition))||macros.has(macro)&¯os.get(macro)!==group){return}groups.set(group,{macro:macro,condition:arm0Condition});macros.set(macro,group)}}return(_candidates_=candidates[0])==null?void 0:(_candidates__find=_candidates_.find(function(constraint){return candidates.every(function(candidate){return candidate.some(function(arm){return arm.conditionalGroup===constraint.conditionalGroup})})}))==null?void 0:_candidates__find.conditionalGroup}function canComplementarySimpleCandidatesCoverCallsite(candidates,callSiteBranch){var seen=new Set;for(var i=0,n=candidates.length;i<n;i++){var candidate=candidates[i];for(var j=0,m=candidate.length;j<m;j++){var _constraint_precedingConditions;var constraint=candidate[j];var condition=constraint.condition;if(!condition||((_constraint_precedingConditions=constraint.precedingConditions)==null?void 0:_constraint_precedingConditions.length))continue;var remaining=[].concat(candidate.slice(0,j),candidate.slice(j+1));if(!isBranchVisibleFrom(remaining,callSiteBranch))continue;var remainderKey=branchKey(remaining);var conditionKey=simpleConditionKey(condition);var complementKey=complementaryConditionKey(condition);if(complementKey&&seen.has(remainderKey+\"|\"+complementKey))return true;seen.add(remainderKey+\"|\"+conditionKey)}}return false}function removeConditionalGroup(branch,group){return branch.filter(function(constraint){return constraint.conditionalGroup!==group})}function branchKey(branch){return branch.map(function(constraint){var _constraint_precedingConditions;return[constraint.name,constraint.defined,simpleConditionKey(constraint.condition),(_constraint_precedingConditions=constraint.precedingConditions)==null?void 0:_constraint_precedingConditions.map(simpleConditionKey).join(\",\")]}).join(\"|\")}function simpleConditionKey(condition){if(!condition)return\"\";if(condition.kind===\"constant\")return\"constant:\"+condition.value;if(condition.kind===\"defined\")return\"defined:\"+condition.name+\":\"+condition.version+\":\"+condition.defined;if(condition.kind===\"expression\"){return\"expression:\"+condition.expression+\":\"+condition.names.map(function(name,i){return name+\":\"+condition.versions[i]}).join(\",\")+\":\"+condition.negated}var normalized=normalizeIntegerComparison(condition);return\"comparison:\"+normalized.name+\":\"+normalized.version+\":\"+normalized.operator+\":\"+normalized.value}function complementaryConditionKey(condition){if(condition.kind===\"constant\")return\"constant:\"+!condition.value;if(condition.kind===\"defined\")return\"defined:\"+condition.name+\":\"+condition.version+\":\"+!condition.defined;if(condition.kind===\"expression\"){return\"expression:\"+condition.expression+\":\"+condition.names.map(function(name,i){return name+\":\"+condition.versions[i]}).join(\",\")+\":\"+!condition.negated}if(!hasExactIntegerValue(condition)){var operator=condition.operator===\"==\"?\"!=\":condition.operator===\"!=\"?\"==\":condition.operator===\">\"?\"<=\":condition.operator===\">=\"?\"<\":condition.operator===\"<\"?\">=\":\">\";return\"comparison:\"+condition.name+\":\"+condition.version+\":\"+operator+\":\"+condition.value}var normalized=normalizeIntegerComparison(condition);var operator1=normalized.operator===\"==\"?\"!=\":normalized.operator===\"!=\"?\"==\":normalized.operator===\">=\"?\"<=\":\">=\";var value=normalized.operator===\">=\"?normalized.value-1:normalized.operator===\"<=\"?normalized.value+1:normalized.value;return\"comparison:\"+normalized.name+\":\"+normalized.version+\":\"+operator1+\":\"+value}function normalizeIntegerComparison(condition){if(!hasExactIntegerValue(condition))return condition;if(condition.operator===\">\")return _extends({},condition,{operator:\">=\",value:condition.value+1});if(condition.operator===\"<\")return _extends({},condition,{operator:\"<=\",value:condition.value-1});return condition}function hasCompatibleGuardUndef(earlier,earlierGuard,later,laterGuard){var events=laterGuard.guardUndefBranches;if(!events)return false;var _earlierGuard_guardUndefStart;var start=(_earlierGuard_guardUndefStart=earlierGuard.guardUndefStart)!=null?_earlierGuard_guardUndefStart:0;var _laterGuard_guardUndefStart;var end=(_laterGuard_guardUndefStart=laterGuard.guardUndefStart)!=null?_laterGuard_guardUndefStart:0;for(var i=start;i<end;i++){var event=events[i];if(canBranchesOverlap(earlier,event)&&canBranchesOverlap(event,later))return true}return false}function getConditions(branch){var conditions=[];appendConditions(branch,conditions);return conditions}function appendConditions(branch,conditions){for(var i=0,n=branch.length;i<n;i++){var constraint=branch[i];var preceding=constraint.precedingConditions;if(preceding){for(var j=0,m=preceding.length;j<m;j++)conditions.push(preceding[j])}if(constraint.condition)conditions.push(constraint.condition)}}function getConstraintConditions(constraint){var conditions=constraint.precedingConditions?[].concat(constraint.precedingConditions):[];if(constraint.condition)conditions.push(constraint.condition);return conditions}function isConditionImplied(required,facts){if(required.kind===\"constant\")return required.value;if(facts.some(function(fact){return sameCondition(fact,required)}))return true;if(required.kind===\"expression\"){if(required.opaque)return false;if(!required.negated&&required.operator===\"&&\"){if(required.operands.every(function(operand){return isConditionImplied(operand,facts)}))return true}if(!required.negated&&required.operator===\"||\"){if(required.operands.some(function(operand){return isConditionImplied(operand,facts)}))return true}if(required.negated&&required.operator===\"||\"){if(required.operands.every(function(operand){return isConditionImplied(negateCondition(operand),facts)}))return true}if(required.negated&&required.operator===\"&&\"){if(required.operands.some(function(operand){return isConditionImplied(negateCondition(operand),facts)}))return true}return facts.length>1&&doDefinedBooleanFactsImply(required,facts)}for(var i=0,n=facts.length;i<n;i++){var fact=facts[i];if(fact.kind===\"constant\")continue;if(fact.kind===\"expression\"){if(expressionImpliesCondition(fact,required))return true;continue}if(fact.name!==required.name||fact.version!==required.version)continue;if(conditionImplies(fact,required))return true}return facts.length>1&&doDefinedBooleanFactsImply(required,facts)}function doDefinedBooleanFactsImply(required,facts){var known=[];var changed=true;while(changed){changed=false;for(var i=0,n=facts.length;i<n;i++){var simplified=simplifyDefinedBooleanCondition(facts[i],known);if(simplified.kind===\"constant\"&&!simplified.value)return true;changed=collectGuaranteedDefinedFacts(simplified,known)||changed}}var simplifiedRequired=simplifyDefinedBooleanCondition(required,known);return simplifiedRequired.kind===\"constant\"&&simplifiedRequired.value}function collectGuaranteedDefinedFacts(condition,known){if(condition.kind===\"constant\"||condition.kind===\"comparison\")return false;if(condition.kind===\"defined\"){if(known.some(function(candidate){return sameCondition(candidate,condition)}))return false;known.push(condition);return true}if(condition.opaque)return false;if(!condition.negated&&condition.operator===\"&&\"){return condition.operands.reduce(function(changed,operand){return collectGuaranteedDefinedFacts(operand,known)||changed},false)}if(condition.negated&&condition.operator===\"||\"){return condition.operands.reduce(function(changed,operand){return collectGuaranteedDefinedFacts(negateCondition(operand),known)||changed},false)}return false}function simplifyDefinedBooleanCondition(condition,known){if(condition.kind===\"constant\"||condition.kind===\"comparison\")return condition;if(condition.kind===\"defined\"){if(known.some(function(candidate){return sameCondition(candidate,condition)}))return{kind:\"constant\",value:true};if(known.some(function(candidate){return areConditionsComplementary(candidate,condition)})){return{kind:\"constant\",value:false}}return condition}if(condition.opaque)return condition;var operands=condition.operands.map(function(operand){return simplifyDefinedBooleanCondition(operand,known)});var hasTrue=operands.some(function(operand){return operand.kind===\"constant\"&&operand.value});var hasFalse=operands.some(function(operand){return operand.kind===\"constant\"&&!operand.value});var remaining=operands.filter(function(operand){return operand.kind!==\"constant\"});var innerValue=condition.operator===\"&&\"?hasFalse?false:remaining.length===0?true:undefined:hasTrue?true:remaining.length===0?false:undefined;if(innerValue!==undefined)return{kind:\"constant\",value:condition.negated?!innerValue:innerValue};if(!condition.negated&&remaining.length===1)return remaining[0];return _extends({},condition,{operands:remaining})}function expressionImpliesCondition(fact,required){if(fact.opaque)return false;if(!fact.negated&&fact.operator===\"&&\"){return fact.operands.some(function(operand){return isConditionImplied(required,[operand])})}if(!fact.negated&&fact.operator===\"||\"){return fact.operands.every(function(operand){return isConditionImplied(required,[operand])})}if(fact.negated&&fact.operator===\"||\"){return fact.operands.some(function(operand){return isConditionImplied(required,[negateCondition(operand)])})}if(fact.negated&&fact.operator===\"&&\"){return fact.operands.every(function(operand){return isConditionImplied(required,[negateCondition(operand)])})}return false}function negateCondition(condition){if(condition.kind===\"constant\")return{kind:\"constant\",value:!condition.value};if(condition.kind===\"defined\")return _extends({},condition,{defined:!condition.defined});if(condition.kind===\"expression\")return _extends({},condition,{negated:!condition.negated});switch(condition.operator){case\"==\":return _extends({},condition,{operator:\"!=\"});case\"!=\":return _extends({},condition,{operator:\"==\"});case\">\":return _extends({},condition,{operator:\"<=\"});case\">=\":return _extends({},condition,{operator:\"<\"});case\"<\":return _extends({},condition,{operator:\">=\"});case\"<=\":return _extends({},condition,{operator:\">\"})}}function conditionImplies(fact,required){if(fact.kind===\"expression\"||required.kind===\"expression\")return sameCondition(fact,required);if(fact.kind===\"defined\"){if(required.kind===\"defined\")return fact.defined===required.defined;return!fact.defined&&matchesComparison(0,required)}if(required.kind===\"defined\"){return required.defined&&!matchesComparison(0,fact)}if(fact.operator===\"==\")return matchesComparison(fact.value,required);if(required.operator===\"!=\")return!matchesComparison(required.value,fact);var factLower=lowerBound(fact);var factUpper=upperBound(fact);var requiredLower=lowerBound(required);var requiredUpper=upperBound(required);if(requiredLower&&(!factLower||!isLowerBoundAtLeast(factLower,requiredLower)))return false;if(requiredUpper&&(!factUpper||!isUpperBoundAtMost(factUpper,requiredUpper)))return false;return!!(requiredLower||requiredUpper)}function areConditionsMutuallyExclusive(left,right){if(!left||!right)return false;if(left.kind===\"constant\"||right.kind===\"constant\"){return left.kind===\"constant\"&&!left.value||right.kind===\"constant\"&&!right.value}if(left.kind===\"expression\"||right.kind===\"expression\"){return left.kind===\"expression\"&&right.kind===\"expression\"&&sameExpression(left,right)&&left.negated!==right.negated}if(left.name!==right.name||left.version!==right.version)return false;if(left.kind===\"defined\"){if(right.kind===\"defined\")return left.defined!==right.defined;return!left.defined&&!matchesComparison(0,right)}if(right.kind===\"defined\")return!right.defined&&!matchesComparison(0,left);if(left.operator===\"==\")return!matchesComparison(left.value,right);if(right.operator===\"==\")return!matchesComparison(right.value,left);var leftLower=lowerBound(left);var rightLower=lowerBound(right);var leftUpper=upperBound(left);var rightUpper=upperBound(right);return leftLower!==undefined&&rightUpper!==undefined&&isEmptyInterval(leftLower,rightUpper)||rightLower!==undefined&&leftUpper!==undefined&&isEmptyInterval(rightLower,leftUpper)}function isLowerBoundAtLeast(actual,required){return actual.value>required.value||actual.value===required.value&&(required.inclusive||!actual.inclusive)}function isUpperBoundAtMost(actual,required){return actual.value<required.value||actual.value===required.value&&(required.inclusive||!actual.inclusive)}function matchesComparison(value,comparison){switch(comparison.operator){case\"==\":return value===comparison.value;case\"!=\":return value!==comparison.value;case\">\":return value>comparison.value;case\">=\":return value>=comparison.value;case\"<\":return value<comparison.value;case\"<=\":return value<=comparison.value}}function lowerBound(comparison){switch(comparison.operator){case\">\":return{value:comparison.value,inclusive:false};case\">=\":return{value:comparison.value,inclusive:true};default:return undefined}}function upperBound(comparison){switch(comparison.operator){case\"<\":return{value:comparison.value,inclusive:false};case\"<=\":return{value:comparison.value,inclusive:true};default:return undefined}}function isEmptyInterval(lower,upper){return lower.value>upper.value||lower.value===upper.value&&(!lower.inclusive||!upper.inclusive)}var branchAnalysis={canBranchesOverlap:canBranchesOverlap,canDeclarationsCoexist:canDeclarationsCoexist,getBranchCoverage:getBranchCoverage,getDeclarationCoexistence:getDeclarationCoexistence,isBranchReachable:isBranchReachable,isBranchVisibleFrom:isBranchVisibleFrom};var ParserSemanticValidation=function(){function ParserSemanticValidation(){}ParserSemanticValidation.collect=function collect(root){var issues=[];var pending=[root];while(pending.length){var node=pending.pop();if(!isBranchReachable(node._branch)||_instanceof(node,ASTNode.MacroDefine))continue;if(_instanceof(node,ASTNode.AssignmentExpression)){var targetIssue=this.assignmentTargetIssue(node);var typeIssue=this.assignmentTypeIssue(node);if(targetIssue)issues.push(targetIssue);if(typeIssue)issues.push(typeIssue)}else if(_instanceof(node,ASTNode.UnaryExpression)||_instanceof(node,ASTNode.PostfixExpression)){var issue=this.incrementTargetIssue(node);if(issue)issues.push(issue)}else if(_instanceof(node,ASTNode.SelectionStatement)){var issue1=this.selectionConditionIssue(node);if(issue1)issues.push(issue1)}else if(_instanceof(node,ASTNode.IterationStatement)){var issue2=this.iterationConditionIssue(node);if(issue2)issues.push(issue2)}else if(_instanceof(node,ASTNode.ConditionalExpression)){var issue3=this.ternaryConditionIssue(node);if(issue3)issues.push(issue3)}else if(_instanceof(node,ASTNode.FunctionCallGeneric)){var _issues;var issue4=this.constructorIssue(node);if(issue4)issues.push(issue4);(_issues=issues).push.apply(_issues,[].concat(this.outputArgumentIssues(node)))}else if(_instanceof(node,ASTNode.FunctionDeclarator)){var issue5=this.functionReturnTypeIssue(node);if(issue5)issues.push(issue5)}for(var index=node.children.length-1;index>=0;index--){var child=node.children[index];if(_instanceof(child,TreeNode))pending.push(child)}}return issues};ParserSemanticValidation.nonAssignableReason=function nonAssignableReason(node){if(_instanceof(node,ASTNode.ConditionalExpression)&&node.children.length>1){return\"a ternary expression result\"}if((_instanceof(node,ASTNode.LogicalOrExpression)||_instanceof(node,ASTNode.LogicalXorExpression)||_instanceof(node,ASTNode.LogicalAndExpression)||_instanceof(node,ASTNode.InclusiveOrExpression)||_instanceof(node,ASTNode.ExclusiveOrExpression)||_instanceof(node,ASTNode.AndExpression)||_instanceof(node,ASTNode.EqualityExpression)||_instanceof(node,ASTNode.RelationalExpression)||_instanceof(node,ASTNode.ShiftExpression)||_instanceof(node,ASTNode.AdditiveExpression)||_instanceof(node,ASTNode.MultiplicativeExpression))&&node.children.length>1){return\"a compound expression\"}if(_instanceof(node,ASTNode.UnaryExpression)&&node.children.length>1){return\"a unary-operator result\"}if(_instanceof(node,ASTNode.FunctionCallGeneric)){return\"a function call result\"}if(_instanceof(node,ASTNode.PostfixExpression)){var base=node.children[0];var field=node.children[2];if(node.children.length===3&&_instanceof(base,ASTNode.ExpressionAstNode)&&_instanceof(field,BaseToken)){var size=this._vectorComponentCount(base);if(size){if(ParserUtils.swizzleError(base.type,field.lexeme,size))return\"an invalid swizzle '.\"+field.lexeme+\"'\";if(new Set(field.lexeme).size!==field.lexeme.length){return\"a swizzle with repeated components '.\"+field.lexeme+\"'\"}}}return _instanceof(base,TreeNode)?ParserSemanticValidation.nonAssignableReason(base):\"an unassignable postfix expression\"}if(_instanceof(node,ASTNode.PrimaryExpression)){if(node.children.length===1){var child=node.children[0];if(_instanceof(child,ASTNode.VariableIdentifier))return ParserSemanticValidation.nonAssignableReason(child);if(_instanceof(child,BaseToken)){if(child.type===ETokenType.INT_CONSTANT||child.type===ETokenType.FLOAT_CONSTANT){return\"a numeric literal\"}if(child.type===Keyword.True||child.type===Keyword.False)return\"a boolean literal\"}return}var inner=node.children[1];return _instanceof(inner,TreeNode)?ParserSemanticValidation.nonAssignableReason(inner):undefined}if(_instanceof(node,ASTNode.VariableIdentifier)){var child1=node.children[0];if(_instanceof(child1,ASTNode.MacroCallSymbol)||_instanceof(child1,ASTNode.MacroCallFunction))return;var symbols=node.resolvedValueSymbols();if(!symbols.length)return;var sharedReason;for(var _iterator=_create_for_of_iterator_helper_loose(symbols),_step;!(_step=_iterator()).done;){var symbol=_step.value;var _symbol_dataType;if(!_instanceof(symbol,VarSymbol))return;var reason=symbol.isConst?\"a const-qualified variable\":TypeSystem.isSamplerType((_symbol_dataType=symbol.dataType)==null?void 0:_symbol_dataType.type)?\"a sampler\":symbol.isUniform?\"a uniform variable\":undefined;if(!reason)return;if(sharedReason&&sharedReason!==reason)return\"a non-modifiable variable\";sharedReason=reason}return sharedReason}if(node.children.length===1){var child2=node.children[0];if(_instanceof(child2,TreeNode))return ParserSemanticValidation.nonAssignableReason(child2)}return};ParserSemanticValidation._vectorComponentCount=function _vectorComponentCount(node){var size=TypeSystem.vectorComponentCount(node.type);if(size)return size;if(_instanceof(node,ASTNode.PostfixExpression)&&node.children.length===3){var base=node.children[0];var field=node.children[2];if(_instanceof(base,ASTNode.ExpressionAstNode)&&_instanceof(field,BaseToken)){var baseSize=this._vectorComponentCount(base);if(baseSize&&!ParserUtils.swizzleError(base.type,field.lexeme,baseSize)){return field.lexeme.length>1?field.lexeme.length:0}}}var child=node.children[_instanceof(node,ASTNode.PrimaryExpression)&&node.children.length===3?1:0];if((node.children.length===1||_instanceof(node,ASTNode.PrimaryExpression))&&_instanceof(child,ASTNode.ExpressionAstNode)){return this._vectorComponentCount(child)}return 0};ParserSemanticValidation.outputArgumentIssues=function outputArgumentIssues(node){var argumentsNode=node.children[2];if(!_instanceof(argumentsNode,ASTNode.FunctionCallParameterList))return[];var _node_fnSymbols;var candidates=(_node_fnSymbols=node.fnSymbols)!=null?_node_fnSymbols:_instanceof(node.fnSymbol,FnSymbol)?[node.fnSymbol]:[];if(!candidates.length)return[];var issues=[];for(var _iterator=_create_for_of_iterator_helper_loose(candidates),_step;!(_step=_iterator()).done;){var candidate=_step.value;var branch=node._branch.concat(candidate.branchSignature);if(getBranchReachability(branch)!==\"reachable\")continue;for(var index=0;index<argumentsNode.paramNodes.length;index++){var _candidate_astNode_protoType_parameterList_index,_candidate_astNode_protoType_parameterList;var argument=argumentsNode.paramNodes[index];if(!_instanceof(argument,TreeNode))continue;var parameter=(_candidate_astNode_protoType_parameterList=candidate.astNode.protoType.parameterList)==null?void 0:(_candidate_astNode_protoType_parameterList_index=_candidate_astNode_protoType_parameterList[index])==null?void 0:_candidate_astNode_protoType_parameterList_index.astNode;if(!_instanceof(parameter,ASTNode.ParameterDeclaration)||!(ParserUtils.hasQualifier(parameter,Keyword.OUT)||ParserUtils.hasQualifier(parameter,Keyword.INOUT)))continue;var reason=this.nonAssignableReason(argument);if(reason){issues.push({code:\"InvalidAssignmentTarget\",message:\"Cannot pass \"+reason+\" to an out or inout parameter — the argument must be a modifiable l-value.\",location:argument.location,branch:branch})}}}return issues};ParserSemanticValidation.assignmentTargetIssue=function assignmentTargetIssue(node){if(node.children.length!==3)return;var lhs=node.children[0];if(!_instanceof(lhs,ASTNode.ExpressionAstNode))return;var reason=this.nonAssignableReason(lhs);return reason?{code:\"InvalidAssignmentTarget\",message:\"Cannot assign to \"+reason+\" — the left operand of '=' must be a modifiable l-value.\",location:lhs.location}:undefined};ParserSemanticValidation.incrementTargetIssue=function incrementTargetIssue(node){if(node.children.length!==2)return;var prefix=_instanceof(node,ASTNode.UnaryExpression);var operator=node.children[prefix?0:1];var operand=node.children[prefix?1:0];if(!_instanceof(operator,BaseToken)||operator.type!==ETokenType.INC_OP&&operator.type!==ETokenType.DEC_OP||!_instanceof(operand,TreeNode)){return}var reason=this.nonAssignableReason(operand);return reason?{code:\"InvalidAssignmentTarget\",message:\"Cannot apply '\"+operator.lexeme+\"' to \"+reason+\" — the operand of '\"+operator.lexeme+\"' must be a modifiable l-value.\",location:operand.location}:undefined};ParserSemanticValidation.assignmentTypeIssue=function assignmentTypeIssue(node){var _operator_children_;if(node.children.length!==3)return;var lhs=node.children[0];var operator=node.children[1];var rhs=node.children[2];if(!_instanceof(lhs,ASTNode.ExpressionAstNode)||!_instanceof(operator,ASTNode.AssignmentOperator)||!_instanceof(rhs,ASTNode.AssignmentExpression)){return}var operatorType=(_operator_children_=operator.children[0])==null?void 0:_operator_children_.type;var compoundOperator=operatorType===ETokenType.MUL_ASSIGN?\"*\":operatorType===ETokenType.DIV_ASSIGN?\"/\":operatorType===ETokenType.MOD_ASSIGN?\"%\":operatorType===ETokenType.ADD_ASSIGN?\"+\":operatorType===ETokenType.SUB_ASSIGN?\"-\":undefined;var arithmetic=compoundOperator?TypeSystem.arithmeticOperation(lhs.type,rhs.type,compoundOperator):undefined;if((arithmetic==null?void 0:arithmetic.valid)===false){return{code:\"InvalidBinaryOperands\",message:\"Operator '\"+compoundOperator+\"=' cannot combine '\"+TypeSystem.typeName(lhs.type)+\"' and '\"+TypeSystem.typeName(rhs.type)+\"'.\",location:node.location}}var _arithmetic_resultType;var assignedType=(_arithmetic_resultType=arithmetic==null?void 0:arithmetic.resultType)!=null?_arithmetic_resultType:rhs.type;if(!TypeSystem.isAssignable(lhs.type,assignedType)){return{code:\"AssignTypeMismatch\",message:\"Cannot assign a value of type '\"+TypeSystem.typeName(rhs.type)+\"' to '\"+TypeSystem.typeName(lhs.type)+\"'.\",location:node.location}}return};ParserSemanticValidation.nonBoolConditionIssue=function nonBoolConditionIssue(condition,label){var type=condition.type;if(type===TypeAny||type===Keyword.BOOL)return;return{code:\"NonBoolCondition\",message:\"\"+label[0].toUpperCase()+label.slice(1)+\" must be a bool, got '\"+TypeSystem.typeName(type)+\"'.\",location:condition.location}};ParserSemanticValidation.selectionConditionIssue=function selectionConditionIssue(node){var condition=node.children.find(function(child){return _instanceof(child,ASTNode.ExpressionAstNode)});return _instanceof(condition,ASTNode.ExpressionAstNode)?this.nonBoolConditionIssue(condition,\"'if' condition\"):undefined};ParserSemanticValidation.iterationConditionIssue=function iterationConditionIssue(node){var keyword=node.children[0];if(!_instanceof(keyword,BaseToken))return;var condition;var label;if(keyword.type===Keyword.WHILE){var candidate=node.children[2];if(_instanceof(candidate,ASTNode.Condition))condition=candidate;label=\"'while' condition\"}else if(keyword.type===Keyword.FOR){var rest=node.children[3];var optionalCondition=_instanceof(rest,ASTNode.ForRestStatement)?rest.children[0]:undefined;var candidate1=_instanceof(optionalCondition,ASTNode.ConditionOpt)&&optionalCondition.children.length===1?optionalCondition.children[0]:undefined;if(_instanceof(candidate1,ASTNode.Condition))condition=candidate1;label=\"'for' condition\"}else{return}if(!condition)return;var children=condition.children;var expression=children.length===1&&_instanceof(children[0],ASTNode.ExpressionAstNode)?children[0]:children.length===4&&_instanceof(children[3],ASTNode.ExpressionAstNode)?children[3]:undefined;return _instanceof(expression,ASTNode.ExpressionAstNode)?this.nonBoolConditionIssue(expression,label):undefined};ParserSemanticValidation.ternaryConditionIssue=function ternaryConditionIssue(node){var condition=node.children.length===5?node.children[0]:undefined;return _instanceof(condition,ASTNode.ExpressionAstNode)?this.nonBoolConditionIssue(condition,\"ternary condition\"):undefined};ParserSemanticValidation.constructorIssue=function constructorIssue(node){var functionIdentifier=node.children[0];if(!functionIdentifier.isBuiltin)return;var list=node.children.length===4?node.children[2]:undefined;if(!_instanceof(list,ASTNode.FunctionCallParameterList))return;var badIndex=list.paramSig.findIndex(function(type){return TypeSystem.isSamplerType(type)||typeof type===\"string\"});if(badIndex>=0){var argument=list.paramNodes[badIndex];return{code:\"ConstructorArgType\",message:\"Cannot construct '\"+TypeSystem.typeName(functionIdentifier.ident)+\"' from a '\"+TypeSystem.typeName(list.paramSig[badIndex])+\"' argument.\",location:_instanceof(argument,TreeNode)?argument.location:list.location}}var matrixComponents=TypeSystem.matrixComponentCount(functionIdentifier.ident);var requiredComponents=TypeSystem.vectorComponentCount(functionIdentifier.ident)||matrixComponents;if(requiredComponents<=0)return;if(matrixComponents>0&&list.paramSig.length===1&&TypeSystem.matrixComponentCount(list.paramSig[0])>0){return}if(matrixComponents===0&&list.paramSig.length===1&&TypeSystem.vectorComponentCount(list.paramSig[0])>=requiredComponents){return}var providedComponents=0;var countable=list.paramSig.length>0;for(var _iterator=_create_for_of_iterator_helper_loose(list.paramSig),_step;!(_step=_iterator()).done;){var type=_step.value;var components=TypeSystem.isScalarType(type)?1:TypeSystem.vectorComponentCount(type)||TypeSystem.matrixComponentCount(type);if(components===0){countable=false;break}providedComponents+=components}var singleScalar=list.paramSig.length===1&&TypeSystem.isScalarType(list.paramSig[0]);return countable&&!singleScalar&&providedComponents!==requiredComponents?{code:\"ConstructorArgCount\",message:\"Constructor '\"+TypeSystem.typeName(functionIdentifier.ident)+\"' needs \"+requiredComponents+\" components but the arguments provide \"+providedComponents+\".\",location:list.location}:undefined};ParserSemanticValidation.functionReturnTypeIssue=function functionReturnTypeIssue(node){var _this=this;var returnType=node.returnType;var type=returnType.type;if(TypeSystem.isSamplerType(type)){return{code:\"NonConstructibleReturnType\",message:\"Function return type '\"+TypeSystem.typeName(type)+\"' is not constructible; samplers cannot be returned.\",location:returnType.location}}if(typeof type===\"string\"&&returnType.typeSpecifier.structDeclarations.some(function(declaration){return _this._structContainsSampler(declaration,new Set)})){return{code:\"NonConstructibleReturnType\",message:\"Function return type '\"+type+\"' is not constructible; structs containing samplers cannot be returned.\",location:returnType.location}}return};ParserSemanticValidation._structContainsSampler=function _structContainsSampler(declaration,visited){if(visited.has(declaration))return false;visited.add(declaration);for(var _iterator=_create_for_of_iterator_helper_loose(declaration.propList),_step;!(_step=_iterator()).done;){var property=_step.value;if(TypeSystem.isSamplerType(property.typeInfo.type))return true;for(var _iterator1=_create_for_of_iterator_helper_loose(property.typeInfo.structDeclarations),_step1;!(_step1=_iterator1()).done;){var nestedDeclaration=_step1.value;if(this._structContainsSampler(nestedDeclaration,visited))return true}}return false};return ParserSemanticValidation}();var EMPTY_ERRORS$1=Object.freeze([]);var EMPTY_PREPROCESSOR_EXPRESSIONS$1=new Map;function mapExpandedShaderRange(startOffset,endOffset,segments){var startSegment=findSourceMapSegment(startOffset,segments,false);if(!startSegment)return undefined;var endSegment=findSourceMapSegment(endOffset,segments,true);var mappedStartOffset=startSegment.sourceStart+startOffset-startSegment.generatedStart;var mappedEndOffset=(endSegment==null?void 0:endSegment.source)===startSegment.source&&endSegment.sourceFile===startSegment.sourceFile?endSegment.sourceStart+endOffset-endSegment.generatedStart:mappedStartOffset;return{source:startSegment.source,sourceFile:startSegment.sourceFile,start:shaderPositionAt(startSegment.source,mappedStartOffset),end:shaderPositionAt(startSegment.source,mappedEndOffset)}}function mapExpandedShaderError(error,expandedSource,segments){if(!_instanceof(error,GSError)||error.source!==expandedSource)return error;var location=error.location;var range=\"start\"in location?location:{start:location,end:location};var mapped=mapExpandedShaderRange(range.start.index,range.end.index,segments);if(!mapped)return error;var mappedLocation=new ShaderRange;mappedLocation.set(mapped.start,mapped.end);var _mapped_sourceFile;return new GSError(error.name,error.message,mappedLocation,mapped.source,(_mapped_sourceFile=mapped.sourceFile)!=null?_mapped_sourceFile:error.file,error.code)}function findSourceMapSegment(offset,segments,isEnd){for(var _iterator=_create_for_of_iterator_helper_loose(segments),_step;!(_step=_iterator()).done;){var segment=_step.value;if(offset>=segment.generatedStart&&(isEnd?offset<=segment.generatedEnd&&offset>segment.generatedStart:offset<segment.generatedEnd)){return segment}}var last=segments[segments.length-1];return last&&offset===last.generatedEnd?last:undefined}function shaderPositionAt(source,offset){var line=0;var column=0;for(var index=0;index<offset;index++){if(source.charCodeAt(index)===10){line++;column=0}else{column++}}var position=new ShaderPosition;position.set(offset,line,column);return position}function parseShaderPassWith(source,includeMap,cache,basePathForIncludeKey,createLexer,createParser,sourceFile,objectPool,trackSourceMap,sourceScopeStarts){if(trackSourceMap===void 0)trackSourceMap=true;objectPool==null?void 0:objectPool.reset();var macroDefineList={};var _Preprocessor_parseWithErrors=Preprocessor.parseWithErrors(source,basePathForIncludeKey,includeMap,cache,sourceFile,trackSourceMap,sourceScopeStarts),expandedSource=_Preprocessor_parseWithErrors.content,preprocessErrors=_Preprocessor_parseWithErrors.errors,sourceMap=_Preprocessor_parseWithErrors.sourceMap,conditionalArms=_Preprocessor_parseWithErrors.conditionalArms;for(var _iterator=_create_for_of_iterator_helper_loose(sourceMap),_step;!(_step=_iterator()).done;){var segment=_step.value;Object.freeze(segment)}var frozenSourceMap=Object.freeze(sourceMap);if(preprocessErrors.length){var errors=Object.freeze([].concat(preprocessErrors));return Object.freeze({ir:null,expandedSource:expandedSource,sourceMap:frozenSourceMap,preprocessorExpressions:EMPTY_PREPROCESSOR_EXPRESSIONS$1,errors:errors,blockingErrors:errors})}var lexer=createLexer(expandedSource,macroDefineList,objectPool,conditionalArms);var tokens=lexer.tokenize();var parser=createParser(expandedSource,objectPool);parser.setSourceScopes(frozenSourceMap);var program=parser.parse(tokens,macroDefineList);var mappedParserErrors=parser.errors.map(function(error){return mapExpandedShaderError(error,expandedSource,frozenSourceMap)});var errors1=mappedParserErrors.length?Object.freeze(mappedParserErrors):EMPTY_ERRORS$1;var parserBlockingErrors=parser.semanticErrorsBlockCodegen?parser.errors:parser.blockingErrors;var blockingErrors=parser.errors.length===parserBlockingErrors.length?errors1:Object.freeze(parserBlockingErrors.map(function(error){return mapExpandedShaderError(error,expandedSource,frozenSourceMap)}));var ir=program?Object.freeze(new ShaderClueIR(program,expandedSource,frozenSourceMap)):null;if(ir){var semanticIssues=ParserSemanticValidation.collect(ir.program);if(semanticIssues.length){var semanticErrors=semanticIssues.map(function(issue){return mapExpandedShaderError(ShaderCompilerUtils.createGSError(issue.message,GSErrorName.CompilationError,expandedSource,issue.location,issue.code),expandedSource,frozenSourceMap)});return Object.freeze({ir:ir,expandedSource:expandedSource,sourceMap:frozenSourceMap,preprocessorExpressions:lexer.preprocessorExpressions,errors:Object.freeze([].concat(errors1,semanticErrors)),blockingErrors:Object.freeze([].concat(blockingErrors,semanticErrors))})}}return Object.freeze({ir:ir,expandedSource:expandedSource,sourceMap:frozenSourceMap,preprocessorExpressions:lexer.preprocessorExpressions,errors:errors1,blockingErrors:blockingErrors})}var EMPTY_ERRORS=Object.freeze([]);var EMPTY_SOURCE_MAP=Object.freeze([]);var EMPTY_PREPROCESSOR_EXPRESSIONS=new Map;function createRuntimeShaderTargetParser(objectPool){return ShaderTargetParser.create(undefined,undefined,undefined,objectPool)}function parseRuntimeShaderPass(source,includeMap,cache,sourceFile,objectPool,runtimeParser,sourceScopeStarts){objectPool==null?void 0:objectPool.reset();if(!(sourceScopeStarts==null?void 0:sourceScopeStarts.some(function(offset){return offset>0})))sourceScopeStarts=undefined;var normalizedSourceFile=normalizeShaderSourceFile(sourceFile);var preprocessResult=Preprocessor.parseWithErrors(source,shaderSourceBaseURL(normalizedSourceFile),includeMap,cache,normalizedSourceFile,false,sourceScopeStarts);var expandedSource=preprocessResult.content;if(preprocessResult.errors.length){var errors=freezeErrors(preprocessResult.errors);return Object.freeze({ir:null,expandedSource:expandedSource,sourceMap:EMPTY_SOURCE_MAP,preprocessorExpressions:EMPTY_PREPROCESSOR_EXPRESSIONS,errors:errors,blockingErrors:errors})}var macroDefineList={};var lexer=new Lexer(expandedSource,macroDefineList,objectPool,preprocessResult.conditionalArms);var parser=runtimeParser!=null?runtimeParser:createRuntimeShaderTargetParser(objectPool);parser.setSource(expandedSource);parser.setSourceScopes(preprocessResult.sourceScopes);var program=parser.parse(lexer.tokenize(),macroDefineList);var errors1=freezeErrors(parser.errors);var blockingErrors=freezeErrors(parser.blockingErrors);return Object.freeze({ir:program?Object.freeze(new ShaderClueIR(program,expandedSource,EMPTY_SOURCE_MAP)):null,expandedSource:expandedSource,sourceMap:EMPTY_SOURCE_MAP,preprocessorExpressions:lexer.preprocessorExpressions,errors:errors1,blockingErrors:blockingErrors})}function freezeErrors(){for(var _len=arguments.length,groups=new Array(_len),_key=0;_key<_len;_key++){groups[_key]=arguments[_key]}var _errors;var count=0;for(var _iterator=_create_for_of_iterator_helper_loose(groups),_step;!(_step=_iterator()).done;){var group=_step.value;count+=group.length}if(count===0)return EMPTY_ERRORS;var errors=[];for(var _iterator1=_create_for_of_iterator_helper_loose(groups),_step1;!(_step1=_iterator1()).done;){var group1=_step1.value;(_errors=errors).push.apply(_errors,[].concat(group1))}return Object.freeze(errors)}var ShaderSourceFactory=function(){function ShaderSourceFactory(){}ShaderSourceFactory.createRenderStates=function createRenderStates(){return{constantMap:{},variableMap:{}}};ShaderSourceFactory.createShaderSource=function createShaderSource(name){return{name:name,subShaders:[],pendingContents:[],renderStates:this.createRenderStates()}};ShaderSourceFactory.createSubShaderSource=function createSubShaderSource(name){return{name:name,passes:[],pendingContents:[],tags:{},renderStates:this.createRenderStates()}};ShaderSourceFactory.createShaderPassSource=function createShaderPassSource(name){return{name:name,pendingContents:[],contentScopeStarts:[],isUsePass:false,tags:{},renderStates:this.createRenderStates(),contents:\"\",vertexEntry:\"\",fragmentEntry:\"\"}};ShaderSourceFactory.createUsePass=function createUsePass(name){return{name:name,pendingContents:[],contentScopeStarts:[],isUsePass:true,tags:{},renderStates:this.createRenderStates(),contents:\"\",vertexEntry:\"\",fragmentEntry:\"\"}};return ShaderSourceFactory}();var ShaderSourceSymbol=function(){function ShaderSourceSymbol(ident,type,value){this.ident=ident;this.type=type;this.value=value;this.isInMacroBranch=false;this.branchSignature=EMPTY_BRANCH}var _proto=ShaderSourceSymbol.prototype;_proto.set=function set(ident,type,value){this.ident=ident;this.type=type;this.value=value};_proto.equal=function equal(other){return this.type===other.type};return ShaderSourceSymbol}();var SourceLexer=function(BaseLexer1){_inherits(SourceLexer,BaseLexer1);function SourceLexer(){var _this;_this=BaseLexer1.apply(this,arguments)||this,_this.hasPendingContent=false;return _this}var _proto=SourceLexer.prototype;_proto.setSource=function setSource(source){BaseLexer1.prototype.setSource.call(this,source);this.hasPendingContent=false};_proto.scanNumber=function scanNumber(){this.skipCommentsAndSpace();var start=this._currentIndex;var source=this._source;var index=this._currentIndex;index=SourceLexer._scanDigits(source,index);if(source[index]===\".\"){index=SourceLexer._scanDigits(source,index+1)}this.advance(index-this._currentIndex);return Number(source.substring(start,index))};_proto.scanColor=function scanColor(){this.scanLexeme(\"(\");var r=this.scanNumber();var g=0;var b=0;var a=1;this.skipCommentsAndSpace();if(this.peek(1)!==\")\"){this.scanLexeme(\",\");g=this.scanNumber();this.skipCommentsAndSpace();if(this.peek(1)!==\")\"){this.scanLexeme(\",\");b=this.scanNumber();this.skipCommentsAndSpace();if(this.peek(1)!==\")\"){this.scanLexeme(\",\");a=this.scanNumber();this.skipCommentsAndSpace()}}}this.scanLexeme(\")\");return new Color(r,g,b,a)};_proto.scanToken=function scanToken(){while(true){this.skipCommentsAndSpace();if(this.isEnd()){return this._createEOFToken()}var start=this.getShaderPosition(0);if(BaseLexer.isAlpha(this.getCurCharCode())){var wordToken=this._scanWord(start);if(wordToken!==null){return wordToken}this.hasPendingContent=true;continue}var currentChar=this.getCurChar();var symbolKeyword=SourceLexer._symbolLexemeTable[currentChar];if(symbolKeyword!==undefined){this.advance(1);var token=this._createToken();token.set(symbolKeyword,currentChar,start);return token}this.advance(1)}};_proto.scanToCharacter=function scanToCharacter(char){while(this.getCurChar()!==char&&this.getCurChar()!==\"}\"&&!this.isEnd()){this.advance(1)}if(this.getCurChar()!==char)return false;this.advance(1);return true};_proto.createCompileError=function createCompileError(message,location,code){return ShaderCompilerUtils.createGSError(message,GSErrorName.CompilationError,this.source,location!=null?location:this.getShaderPosition(0),code)};_proto._scanWord=function _scanWord(start){while(BaseLexer.isAlnum(this.getCurCharCode())&&!this.isEnd()){this.advance(1)}var end=this.getShaderPosition(0);if(!this._validateWordBoundaries(start.index,end.index)){return null}var lexeme=this._source.substring(start.index,end.index);var _SourceLexer__keywordLexemeTable_lexeme;var tokenType=(_SourceLexer__keywordLexemeTable_lexeme=SourceLexer._keywordLexemeTable[lexeme])!=null?_SourceLexer__keywordLexemeTable_lexeme:ETokenType.ID;var range=this._createRange(start,end);var token=this._createToken();token.set(tokenType,lexeme,range);return token};_proto._validateWordBoundaries=function _validateWordBoundaries(startIndex,endIndex){var source=this._source;if(startIndex>0){var prevCharCode=source.charCodeAt(startIndex-1);if(!this._isValidWordBoundary(prevCharCode)){return false}}if(endIndex<source.length){var nextCharCode=source.charCodeAt(endIndex);if(!this._isValidWordBoundary(nextCharCode)){return false}}return true};_proto._isValidWordBoundary=function _isValidWordBoundary(charCode){return BaseLexer.isWhiteSpaceChar(charCode,true)||SourceLexer._isWordSeparatorChar(charCode)};SourceLexer._isWordSeparatorChar=function _isWordSeparatorChar(charCode){return charCode===123||charCode===125||charCode===61||charCode===59||charCode===46||charCode===91||charCode===40||charCode===124};SourceLexer._scanDigits=function _scanDigits(source,startIndex){var currentIndex=startIndex;while(currentIndex<source.length){var charCode=source.charCodeAt(currentIndex);if(BaseLexer.isDigit(charCode)){currentIndex++}else{break}}return currentIndex};return SourceLexer}(BaseLexer);SourceLexer._keywordLexemeTable={RenderQueueType:Keyword.GSRenderQueueType,BlendState:Keyword.GSBlendState,DepthState:Keyword.GSDepthState,StencilState:Keyword.GSStencilState,RasterState:Keyword.GSRasterState,EditorProperties:Keyword.GSEditorProperties,EditorMacros:Keyword.GSEditorMacros,Editor:Keyword.GSEditor,Tags:Keyword.GSTags,VertexShader:Keyword.GSVertexShader,FragmentShader:Keyword.GSFragmentShader,SubShader:Keyword.GSSubShader,Pass:Keyword.GSPass,BlendFactor:Keyword.GSBlendFactor,BlendOperation:Keyword.GSBlendOperation,Bool:Keyword.GSBool,Number:Keyword.GSNumber,Color:Keyword.GSColor,CompareFunction:Keyword.GSCompareFunction,StencilOperation:Keyword.GSStencilOperation,CullMode:Keyword.GSCullMode,ColorWriteMask:Keyword.GSColorWriteMask,UsePass:Keyword.GSUsePass,true:Keyword.True,false:Keyword.False};SourceLexer._symbolLexemeTable={\"{\":Keyword.LeftBrace,\"}\":Keyword.RightBrace,\"=\":Keyword.Equal,\"|\":Keyword.BitwiseOr};var renderStateConstMap={RenderQueueType:RenderQueueType,CompareFunction:CompareFunction,StencilOperation:StencilOperation,BlendOperation:BlendOperation,BlendFactor:BlendFactor,CullMode:CullMode,ColorWriteMask:ColorWriteMask};var ShaderSourceParser=function(){function ShaderSourceParser(){}ShaderSourceParser.parse=function parse(sourceCode){return new ShaderSourceParserSession().parse(sourceCode).shaderSource};ShaderSourceParser.parseStrict=function parseStrict(sourceCode,objectPool){return new ShaderSourceParserSession(objectPool).parse(sourceCode)};ShaderSourceParser.parseWithErrors=function parseWithErrors(sourceCode){return new ShaderSourceParserSession().parseWithErrors(sourceCode)};return ShaderSourceParser}();var ShaderSourceParserSession=function(){function ShaderSourceParserSession(_objectPool){this._objectPool=_objectPool;this._errors=[];this._symbolTableStack=new SymbolTableStack;this._lookupSymbol=new ShaderSourceSymbol(\"\",null);this._shaderSource=ShaderSourceFactory.createShaderSource(\"\");this._reportedUnexpectedEnd=false;this._lexer=new SourceLexer(undefined,this._objectPool)}var _proto=ShaderSourceParserSession.prototype;_proto.parseWithErrors=function parseWithErrors(sourceCode){try{return this.parse(sourceCode)}catch(error){if(!_instanceof(error,GSError))throw error;this._errors.push(error);return{shaderSource:this._shaderSource,errors:Object.freeze(this._errors.slice())}}};_proto.parse=function parse(sourceCode){var _this__objectPool;(_this__objectPool=this._objectPool)==null?void 0:_this__objectPool.reset();this._pushScope();var lexer=this._lexer;lexer.setSource(sourceCode);var shaderSource=this._parseShader(lexer);var shaderPendingContents=shaderSource.pendingContents;var shaderRenderStates=shaderSource.renderStates;for(var i=0,n=shaderSource.subShaders.length;i<n;i++){var subShader=shaderSource.subShaders[i];var globalSubShaderStates={constantMap:_extends({},shaderRenderStates.constantMap),variableMap:_extends({},shaderRenderStates.variableMap)};this._mergeRenderStates(globalSubShaderStates,subShader.renderStates);for(var j=0,m=subShader.passes.length;j<m;j++){var pass=subShader.passes[j];var globalPassRenderStates={constantMap:_extends({},globalSubShaderStates.constantMap),variableMap:_extends({},globalSubShaderStates.variableMap)};this._mergeRenderStates(globalPassRenderStates,pass.renderStates);pass.renderStates=globalPassRenderStates;if(pass.isUsePass)continue;var composed=this._composePassContents([shaderPendingContents,subShader.pendingContents,pass.pendingContents]);pass.contents=composed.contents;pass.contentScopeStarts=composed.scopeStarts}}return{shaderSource:shaderSource,errors:Object.freeze(this._errors.slice())}};_proto._composePassContents=function _composePassContents(groups){var parts=[];var scopeStarts=[];var length=0;for(var _iterator=_create_for_of_iterator_helper_loose(groups),_step;!(_step=_iterator()).done;){var group=_step.value;scopeStarts.push(length);for(var _iterator1=_create_for_of_iterator_helper_loose(group),_step1;!(_step1=_iterator1()).done;){var statement=_step1.value;if(parts.length)length++;parts.push(statement.content);length+=statement.content.length}}return{contents:parts.join(\"\\n\"),scopeStarts:Object.freeze(scopeStarts)}};_proto._parseShader=function _parseShader(lexer){lexer.scanLexeme(\"Shader\");var name=lexer.scanPairedChar('\"','\"',false,false);var shaderSource=ShaderSourceFactory.createShaderSource(name);this._shaderSource=shaderSource;lexer.scanLexeme(\"{\");var braceLevel=1;lexer.skipCommentsAndSpace();var start=lexer.getShaderPosition(0);var pendingContents=shaderSource.pendingContents;while(true){var token=lexer.scanToken();switch(token.type){case ETokenType.EOF:this._addPendingContents(start,0,pendingContents);this._reportUnexpectedEnd(token,\"Shader\");this._popScope();return shaderSource;case Keyword.GSSubShader:{this._addPendingContents(start,token.lexeme.length,pendingContents);var subShader=this._parseSubShader();shaderSource.subShaders.push(subShader);start=lexer.getShaderPosition(0);break}case Keyword.GSEditorProperties:case Keyword.GSEditorMacros:case Keyword.GSEditor:this._addPendingContents(start,token.lexeme.length,pendingContents);lexer.scanPairedChar(\"{\",\"}\",true,false);start=lexer.getShaderPosition(0);break;case Keyword.LeftBrace:++braceLevel;break;case Keyword.RightBrace:if(--braceLevel===0){this._addPendingContents(start,token.lexeme.length,pendingContents);this._popScope();return shaderSource}break;default:start=this._parseRenderState(token,start,pendingContents,shaderSource.renderStates)}}};_proto._parseRenderStateDeclarationOrAssignment=function _parseRenderStateDeclarationOrAssignment(outRenderStates,stateToken){var lexer=this._lexer;var token=lexer.scanToken();if(token.type===ETokenType.ID){lexer.scanLexeme(\"{\");var renderState=this._parseRenderStateProperties(stateToken.lexeme);var symbol=new ShaderSourceSymbol(token.lexeme,stateToken.type,renderState);this._symbolTableStack.insert(symbol)}else if(token.lexeme===\"=\"){var nextToken=lexer.scanToken();if(nextToken.type===ETokenType.EOF)return;var renderState1;if(nextToken.lexeme===\"{\"){renderState1=this._parseRenderStateProperties(stateToken.lexeme)}else{lexer.scanLexeme(\";\");var lookupSymbol=this._lookupSymbol;lookupSymbol.set(nextToken.lexeme,stateToken.type);var sm=this._symbolTableStack.lookup(lookupSymbol);if(!(sm==null?void 0:sm.value)){this._createCompileError('Invalid \"'+stateToken.lexeme+'\" variable: '+nextToken.lexeme+\" — property will not be applied.\",nextToken.location,\"InvalidRenderStateVariable\");return}renderState1=sm.value}this._mergeRenderStates(outRenderStates,renderState1)}};_proto._mergeRenderStates=function _mergeRenderStates(outTarget,source){var targetConstantMap=outTarget.constantMap,targetVariableMap=outTarget.variableMap;var sourceConstantMap=source.constantMap,sourceVariableMap=source.variableMap;for(var key in sourceConstantMap){delete targetVariableMap[key];targetConstantMap[key]=sourceConstantMap[key]}for(var key1 in sourceVariableMap){delete targetConstantMap[key1];targetVariableMap[key1]=sourceVariableMap[key1]}};_proto._parseVariableDeclaration=function _parseVariableDeclaration(){var lexer=this._lexer;var token=lexer.scanToken();lexer.scanLexeme(\";\");var symbol=new ShaderSourceSymbol(token.lexeme,token.type);this._symbolTableStack.insert(symbol)};_proto._pushScope=function _pushScope(){var symbolTable=new SymbolTable;this._symbolTableStack.pushScope(symbolTable)};_proto._popScope=function _popScope(){this._symbolTableStack.popScope()};_proto._parseRenderStateProperties=function _parseRenderStateProperties(state){var lexer=this._lexer;var renderStates=ShaderSourceFactory.createRenderStates();while(lexer.getCurChar()!==\"}\"&&!lexer.isEnd()){this._parseRenderStateProperty(state,renderStates);lexer.skipCommentsAndSpace()}if(lexer.getCurChar()===\"}\")lexer.advance(1);return renderStates};_proto._createCompileError=function _createCompileError(message,location,code){var error=this._lexer.createCompileError(message,location,code);this._errors.push(error)};_proto._scanEnumConstValue=function _scanEnumConstValue(enumName){var _renderStateConstMap_enumName;var lexer=this._lexer;lexer.advance(1);var constValueToken=lexer.scanToken();var value=(_renderStateConstMap_enumName=renderStateConstMap[enumName])==null?void 0:_renderStateConstMap_enumName[constValueToken.lexeme];if(value==undefined){this._createCompileError(\"Invalid engine constant: \"+enumName+\".\"+constValueToken.lexeme+\" — property will not be applied.\",constValueToken.location,\"InvalidEnumValue\");lexer.scanToCharacter(\";\")}return value};_proto._parseRenderStateProperty=function _parseRenderStateProperty(stateLexeme,out){var lexer=this._lexer;var propertyToken=lexer.scanToken();var propertyLexeme=propertyToken.lexeme;var stateElementKey=propertyLexeme;if(stateLexeme===\"BlendState\"&&propertyLexeme!==\"BlendColor\"&&propertyLexeme!==\"AlphaToCoverage\"){var keyIndex=0;var scannedLexeme=lexer.scanTwoExpectedLexemes(\"[\",\"=\");if(scannedLexeme===\"[\"){keyIndex=lexer.scanNumber();lexer.scanLexeme(\"]\");lexer.scanLexeme(\"=\")}else if(scannedLexeme!==\"=\"){this._createCompileError(\"Invalid syntax, expect '[' or '=', but got unexpected token\",undefined,\"SyntaxError\");lexer.scanToCharacter(\";\");return}stateElementKey+=keyIndex}else{lexer.scanLexeme(\"=\")}var renderStateElementKey=RenderStateElementKey[stateLexeme+stateElementKey];if(renderStateElementKey===undefined){this._createCompileError(\"Invalid render state property \"+propertyLexeme+\" — property will not be applied.\",propertyToken.location,\"InvalidRenderStateProperty\");lexer.scanToCharacter(\";\");return}lexer.skipCommentsAndSpace();var propertyValue;var curCharCode=lexer.getCurCharCode();if(BaseLexer.isDigit(curCharCode)||curCharCode===46){propertyValue=lexer.scanNumber()}else{var valueToken=lexer.scanToken();var valueTokenType=valueToken.type;if(valueTokenType===ETokenType.EOF)return;if(valueTokenType===Keyword.True){propertyValue=true}else if(valueTokenType===Keyword.False){propertyValue=false}else if(valueTokenType===Keyword.GSColor){propertyValue=lexer.scanColor()}else if(lexer.getCurChar()===\".\"){propertyValue=this._scanEnumConstValue(valueToken.lexeme);if(propertyValue==undefined)return;lexer.skipCommentsAndSpace();if(lexer.getCurChar()===\"|\"){if(valueToken.lexeme!==\"ColorWriteMask\"){this._createCompileError(\"Bitwise OR '|' is not supported for '\"+valueToken.lexeme+\"', only bitmask enums like 'ColorWriteMask' support this — property will not be applied.\",valueToken.location,\"BitwiseOrOnNonBitmask\");lexer.scanToCharacter(\";\");return}while(lexer.getCurChar()===\"|\"){lexer.advance(1);var nextEnumToken=lexer.scanToken();if(nextEnumToken==undefined||lexer.getCurChar()!==\".\"){this._createCompileError(\"Invalid syntax after '|', expect 'EnumType.Value'\",nextEnumToken==null?void 0:nextEnumToken.location,\"SyntaxError\");lexer.scanToCharacter(\";\");return}if(nextEnumToken.lexeme!==valueToken.lexeme){this._createCompileError(\"Cannot mix enum types in bitwise OR: expected '\"+valueToken.lexeme+\"' but got '\"+nextEnumToken.lexeme+\"' — property will not be applied.\",nextEnumToken.location,\"MixedEnumTypes\");lexer.scanToCharacter(\";\");return}var nextValue=this._scanEnumConstValue(nextEnumToken.lexeme);if(nextValue==undefined)return;propertyValue=propertyValue|nextValue;lexer.skipCommentsAndSpace()}}}else{propertyValue=valueToken.lexeme;var lookupSymbol=this._lookupSymbol;lookupSymbol.set(valueToken.lexeme,ETokenType.ID);if(!this._symbolTableStack.lookup(lookupSymbol)){this._createCompileError(\"Invalid \"+stateLexeme+\" variable: \"+valueToken.lexeme+\" — property will not be applied.\",valueToken.location,\"InvalidRenderStateVariable\");lexer.scanToCharacter(\";\");return}}}lexer.scanLexeme(\";\");if(typeof propertyValue===\"string\"){out.variableMap[renderStateElementKey]=propertyValue}else{out.constantMap[renderStateElementKey]=propertyValue}};_proto._parseRenderQueueDeclarationOrAssignment=function _parseRenderQueueDeclarationOrAssignment(renderStates){var lexer=this._lexer;var token=lexer.scanToken();if(token.type===ETokenType.ID){lexer.scanLexeme(\";\");var symbol=new ShaderSourceSymbol(token.lexeme,Keyword.GSRenderQueueType);this._symbolTableStack.insert(symbol);return}if(token.lexeme!==\"=\"){this._createCompileError(\"Invalid syntax, expect character '=', but got \"+token.lexeme,token.location,\"SyntaxError\");return}var word=lexer.scanToken();lexer.scanLexeme(\";\");var value=renderStateConstMap.RenderQueueType[word.lexeme];var key=RenderStateElementKey.RenderQueueType;if(value==undefined){var lookupSymbol=this._lookupSymbol;lookupSymbol.set(word.lexeme,Keyword.GSRenderQueueType);var sm=this._symbolTableStack.lookup(lookupSymbol);if(!sm){this._createCompileError(\"Invalid RenderQueueType variable: \"+word.lexeme+\" — property will not be applied at runtime.\",word.location,\"InvalidRenderQueueVariable\");return}renderStates.variableMap[key]=word.lexeme}else{renderStates.constantMap[key]=value}};_proto._addPendingContents=function _addPendingContents(start,backOffset,outPendingContents){var lexer=this._lexer;if(lexer.hasPendingContent){var endIndex=lexer.currentIndex-backOffset;outPendingContents.push({range:{start:start,end:_extends({},lexer.getShaderPosition(0),{index:endIndex-1})},content:lexer.source.substring(start.index,endIndex-1)});lexer.hasPendingContent=false}};_proto._parseSubShader=function _parseSubShader(){var lexer=this._lexer;this._pushScope();var braceLevel=1;var name=lexer.scanPairedChar('\"','\"',false,false);var subShaderSource=ShaderSourceFactory.createSubShaderSource(name);lexer.scanLexeme(\"{\");lexer.skipCommentsAndSpace();var start=lexer.getShaderPosition(0);while(true){var token=lexer.scanToken();switch(token.type){case ETokenType.EOF:this._addPendingContents(start,0,subShaderSource.pendingContents);this._reportUnexpectedEnd(token,\"SubShader\");this._popScope();return subShaderSource;case Keyword.GSPass:{this._addPendingContents(start,token.lexeme.length,subShaderSource.pendingContents);var pass=this._parsePass(this._retainRange(token.location));subShaderSource.passes.push(pass);start=lexer.getShaderPosition(0);break}case Keyword.GSUsePass:{this._addPendingContents(start,token.lexeme.length,subShaderSource.pendingContents);var name1=lexer.scanPairedChar('\"','\"',false,false);subShaderSource.passes.push(ShaderSourceFactory.createUsePass(name1));start=lexer.getShaderPosition(0);break}case Keyword.LeftBrace:++braceLevel;break;case Keyword.RightBrace:if(--braceLevel===0){this._addPendingContents(start,token.lexeme.length,subShaderSource.pendingContents);this._popScope();return subShaderSource}break;default:start=this._parseRenderStateAndTags(token,start,subShaderSource.pendingContents,subShaderSource.renderStates,subShaderSource.tags)}}};_proto._parseTags=function _parseTags(tags){var lexer=this._lexer;lexer.scanLexeme(\"{\");while(true){var ident=lexer.scanToken();lexer.scanLexeme(\"=\");var value=lexer.scanPairedChar('\"','\"',false,false);lexer.skipCommentsAndSpace();tags[ident.lexeme]=value;if(lexer.peek(1)===\"}\"){lexer.advance(1);return}lexer.scanLexeme(\",\")}};_proto._parsePass=function _parsePass(passLocation){this._pushScope();var lexer=this._lexer;var name=lexer.scanPairedChar('\"','\"',false,false);var passSource=ShaderSourceFactory.createShaderPassSource(name);lexer.scanLexeme(\"{\");var braceLevel=1;lexer.skipCommentsAndSpace();var start=lexer.getShaderPosition(0);while(true){var token=lexer.scanToken();switch(token.type){case ETokenType.EOF:this._addPendingContents(start,0,passSource.pendingContents);this._reportUnexpectedEnd(token,\"Pass\");this._popScope();return passSource;case Keyword.GSVertexShader:case Keyword.GSFragmentShader:{this._addPendingContents(start,token.lexeme.length,passSource.pendingContents);lexer.scanLexeme(\"=\");var entry=lexer.scanToken();var isVertex=token.type===Keyword.GSVertexShader;var key=isVertex?\"vertexEntry\":\"fragmentEntry\";if(passSource[key]){this._createCompileError(\"Reassignment of \"+(isVertex?\"VertexShader\":\"FragmentShader\")+\" entry — the first binding is kept.\",entry.location,\"DuplicateEntryAssignment\");lexer.scanLexeme(\";\");start=lexer.getShaderPosition(0);break}passSource[key]=entry.lexeme;passSource[isVertex?\"vertexEntryLocation\":\"fragmentEntryLocation\"]=this._retainRange(entry.location);lexer.scanLexeme(\";\");start=lexer.getShaderPosition(0);break}case Keyword.LeftBrace:++braceLevel;break;case Keyword.RightBrace:if(--braceLevel===0){this._addPendingContents(start,token.lexeme.length,passSource.pendingContents);if(!passSource.vertexEntry||!passSource.fragmentEntry){this._createCompileError(\"Pass must bind both VertexShader and FragmentShader entries.\",passLocation,\"MissingEntry\")}this._popScope();return passSource}break;default:start=this._parseRenderStateAndTags(token,start,passSource.pendingContents,passSource.renderStates,passSource.tags)}}};_proto._reportUnexpectedEnd=function _reportUnexpectedEnd(token,construct){if(this._reportedUnexpectedEnd)return;this._reportedUnexpectedEnd=true;this._createCompileError(\"Unexpected end of source while parsing \"+construct+\".\",token.location,\"SyntaxError\")};_proto._retainRange=function _retainRange(range){if(!this._objectPool)return range;var start=new ShaderPosition;start.set(range.start.index,range.start.line,range.start.column);var end=new ShaderPosition;end.set(range.end.index,range.end.line,range.end.column);var retained=new ShaderRange;retained.set(start,end);return retained};_proto._parseRenderStateAndTags=function _parseRenderStateAndTags(token,start,outGlobalContents,outRenderStates,outTags){switch(token.type){case Keyword.GSTags:this._addPendingContents(start,token.lexeme.length,outGlobalContents);this._parseTags(outTags);start=this._lexer.getShaderPosition(0);break;default:start=this._parseRenderState(token,start,outGlobalContents,outRenderStates)}return start};_proto._parseRenderState=function _parseRenderState(token,start,outGlobalContents,outRenderStates){switch(token.type){case Keyword.GSBlendState:case Keyword.GSDepthState:case Keyword.GSRasterState:case Keyword.GSStencilState:this._addPendingContents(start,token.lexeme.length,outGlobalContents);this._parseRenderStateDeclarationOrAssignment(outRenderStates,token);start=this._lexer.getShaderPosition(0);break;case Keyword.GSBlendFactor:case Keyword.GSBlendOperation:case Keyword.GSBool:case Keyword.GSNumber:case Keyword.GSColor:case Keyword.GSCompareFunction:case Keyword.GSStencilOperation:case Keyword.GSCullMode:case Keyword.GSColorWriteMask:this._addPendingContents(start,token.lexeme.length,outGlobalContents);this._parseVariableDeclaration();start=this._lexer.getShaderPosition(0);break;case Keyword.GSRenderQueueType:this._addPendingContents(start,token.lexeme.length,outGlobalContents);this._parseRenderQueueDeclarationOrAssignment(outRenderStates);start=this._lexer.getShaderPosition(0);break;default:this._lexer.hasPendingContent=true}return start};return ShaderSourceParserSession}();var nextNodePoolId=0;var ParserObjectPool=function(){function ParserObjectPool(){this._tokens={values:[],used:0};this._positions={values:[],used:0};this._ranges={values:[],used:0};this._nodes=[]}var _proto=ParserObjectPool.prototype;_proto.reset=function reset(){this._tokens.used=0;this._positions.used=0;this._ranges.used=0;for(var _iterator=_create_for_of_iterator_helper_loose(this._nodes),_step;!(_step=_iterator()).done;){var list=_step.value;if(list)list.used=0}};_proto.createToken=function createToken(){var list=this._tokens;var index=list.used++;var _list_values_index;return(_list_values_index=list.values[index])!=null?_list_values_index:list.values[index]=new BaseToken(this)};_proto.createPosition=function createPosition(index,line,column){var list=this._positions;var itemIndex=list.used++;var _list_values_itemIndex;var position=(_list_values_itemIndex=list.values[itemIndex])!=null?_list_values_itemIndex:list.values[itemIndex]=new ShaderPosition;position.set(index,line,column);return position};_proto.createRange=function createRange(start,end){var list=this._ranges;var index=list.used++;var _list_values_index;var range=(_list_values_index=list.values[index])!=null?_list_values_index:list.values[index]=new ShaderRange;range.set(start,end);return range};_proto.createNode=function createNode(type){var pooledType=type;var _pooledType___parserObjectPoolId;var poolId=(_pooledType___parserObjectPoolId=pooledType.__parserObjectPoolId)!=null?_pooledType___parserObjectPoolId:pooledType.__parserObjectPoolId=nextNodePoolId++;var list=this._nodes[poolId];if(!list){list={values:[],used:0};this._nodes[poolId]=list}var index=list.used++;var _list_values_index;return(_list_values_index=list.values[index])!=null?_list_values_index:list.values[index]=new type};return ParserObjectPool}();var GLESShaderInfo=function GLESShaderInfo(ir,coreInfo){var io=coreInfo.io,vertexEntry=coreInfo.vertexEntry,fragmentEntry=coreInfo.fragmentEntry,getDeclarationCoexistence=coreInfo.getDeclarationCoexistence,getBranchCoverage=coreInfo.getBranchCoverage;this.mrtOutputIssues=collectMrtOutputIssues(io.mrtList,getDeclarationCoexistence);this.invalidMrtReturnLocations=collectInvalidEntryReturns(fragmentEntry.functions,io.mrtStructs,false);this.invalidVaryingReturnLocations=collectInvalidEntryReturns(vertexEntry.functions,io.varyingStructs,true);this.structMemberOwnerIssues=collectStructMemberOwnerIssues([].concat(vertexEntry.functions,fragmentEntry.functions),ir.shaderData.directMemberOwnerReferences,ir.shaderData.referenceResolutionSnapshots,io.structVariableRoles,getBranchCoverage)};function collectStructMemberOwnerIssues(entries,directMemberReferences,snapshots,variableRoles,getBranchCoverage){var _loop=function(){var reference=_step1.value;var _snapshotsByReference_get;if(!isReferenceReachable(reference,reachableFunctions))return\"continue\";var child=reference.children[0];var referenceSnapshots=(_snapshotsByReference_get=snapshotsByReference.get(reference))==null?void 0:_snapshotsByReference_get.filter(function(snapshot){return snapshot.replacementMemberOwner===undefined&&(_instanceof(child,BaseToken)||snapshot.isValueIdentity)});var resolutions=void 0;if(_instanceof(child,BaseToken)){var symbols=reference.resolvedValueSymbols();resolutions=(referenceSnapshots==null?void 0:referenceSnapshots.length)?referenceSnapshots:[{symbols:symbols,fallbackStart:symbols.length,callSiteBranch:reference._branch}]}else if(_instanceof(child,ASTNode.MacroCallSymbol)||_instanceof(child,ASTNode.MacroCallFunction)){resolutions=referenceSnapshots}if(resolutions==null?void 0:resolutions.length){var hasUnresolvedMacroOwner=!_instanceof(child,BaseToken)&&resolutions.some(function(resolution){return resolution.symbols.length===0});if(hasUnresolvedMacroOwner){recordOwnerIssue(issues,reference,\"unresolved-owner\",\"unknown\")}var member=_instanceof(child,BaseToken)||hasUnresolvedMacroOwner?undefined:findDirectMember(reference);if(member){recordOwnerIssue(issues,reference,\"incompatible-io-member\",classifyIOMemberAvailability(member,resolutions,variableRoles,getBranchCoverage))}recordOwnerIssue(issues,reference,\"mixed-owner-roles\",classifyOwnerResolutions(reference,resolutions,variableRoles,getBranchCoverage))}};var visitedFunctions=new Set;var reachableFunctions=new Set;var pending=entries.slice();while(pending.length){var _pending;var fn=pending.pop();if(visitedFunctions.has(fn))continue;visitedFunctions.add(fn);reachableFunctions.add(fn.astNode);(_pending=pending).push.apply(_pending,[].concat(fn.calledFunctions))}var snapshotsByReference=new Map;for(var _iterator=_create_for_of_iterator_helper_loose(snapshots),_step;!(_step=_iterator()).done;){var snapshot=_step.value;var referenceSnapshots=snapshotsByReference.get(snapshot.reference);if(!referenceSnapshots)snapshotsByReference.set(snapshot.reference,referenceSnapshots=[]);referenceSnapshots.push(snapshot)}var issues=new Map;for(var _iterator1=_create_for_of_iterator_helper_loose(directMemberReferences),_step1;!(_step1=_iterator1()).done;)_loop();var replacementOwnerGroups=new Map;for(var _iterator2=_create_for_of_iterator_helper_loose(snapshots),_step2;!(_step2=_iterator2()).done;){var snapshot1=_step2.value;var owner=snapshot1.replacementMemberOwner;if(owner===undefined||!isReferenceReachable(snapshot1.reference,reachableFunctions))continue;var ownerGroups=replacementOwnerGroups.get(snapshot1.reference);if(!ownerGroups)replacementOwnerGroups.set(snapshot1.reference,ownerGroups=new Map);var group=ownerGroups.get(owner);if(!group)ownerGroups.set(owner,group=[]);group.push(snapshot1)}for(var _iterator3=_create_for_of_iterator_helper_loose(replacementOwnerGroups),_step3;!(_step3=_iterator3()).done;){var _step_value=_step3.value,reference=_step_value[0],ownerGroups1=_step_value[1];for(var _iterator4=_create_for_of_iterator_helper_loose(ownerGroups1.values()),_step4;!(_step4=_iterator4()).done;){var resolutions=_step4.value;if(resolutions.some(function(resolution){return resolution.symbols.length===0})){recordOwnerIssue(issues,reference,\"unresolved-owner\",\"unknown\")}if(resolutions.some(function(resolution){return resolution.requiresRuntimeOwnerExpansion})){recordOwnerIssue(issues,reference,\"runtime-expanded-io-owner\",classifyRuntimeExpandedOwner(resolutions,variableRoles,getBranchCoverage))}recordOwnerIssue(issues,reference,\"mixed-owner-roles\",classifyOwnerResolutions(reference,resolutions,variableRoles,getBranchCoverage))}}return Array.from(issues,function(param){var reference=param[0],issue=param[1];return _extends({location:reference.location},issue)})}function isReferenceReachable(reference,reachableFunctions){var current=reference.parent;while(current){if(_instanceof(current,ASTNode.FunctionDefinition))return reachableFunctions.has(current);current=current.parent}return false}function findDirectMember(reference){var current=reference.parent;while(current){if(_instanceof(current,ASTNode.PostfixExpression)&¤t.children.length===3){var base=current.children[0];var member=current.children[2];if(_instanceof(base,TreeNode)&&_instanceof(member,BaseToken)&&ParserUtils.unwrapBareIdentifier(base,{allowParens:true})===reference){return member}}current=current.parent}return undefined}function classifyIOMemberAvailability(member,resolutions,variableRoles,getBranchCoverage){var certainty;for(var _iterator=_create_for_of_iterator_helper_loose(resolutions),_step;!(_step=_iterator()).done;){var resolution=_step.value;var primarySymbols=resolution.symbols.slice(0,resolution.fallbackStart);var primaryCoverage=getBranchCoverage(primarySymbols.map(function(symbol){var _symbol_branchSignature;return(_symbol_branchSignature=symbol.branchSignature)!=null?_symbol_branchSignature:EMPTY_BRANCH}),resolution.callSiteBranch);var retainedSymbols=primaryCoverage===\"covered\"?primarySymbols:resolution.symbols;for(var _iterator1=_create_for_of_iterator_helper_loose(retainedSymbols),_step1;!(_step1=_iterator1()).done;){var symbol=_step1.value;var _symbol_dataType;if(!_instanceof(symbol,VarSymbol)||!variableRoles.has(symbol))continue;var _symbol_branchSignature;var ownerBranch=mergeBranchSignatures(resolution.callSiteBranch,(_symbol_branchSignature=symbol.branchSignature)!=null?_symbol_branchSignature:EMPTY_BRANCH);var memberBranches=[];var _symbol_dataType_structDeclarations;for(var _iterator2=_create_for_of_iterator_helper_loose((_symbol_dataType_structDeclarations=(_symbol_dataType=symbol.dataType)==null?void 0:_symbol_dataType.structDeclarations)!=null?_symbol_dataType_structDeclarations:[]),_step2;!(_step2=_iterator2()).done;){var struct=_step2.value;for(var _iterator3=_create_for_of_iterator_helper_loose(struct.propList),_step3;!(_step3=_iterator3()).done;){var prop=_step3.value;if(prop.ident.lexeme!==member.lexeme)continue;memberBranches.push(mergeBranchSignatures(ownerBranch,struct._branch,prop.ident.branch))}}var memberCoverage=getBranchCoverage(memberBranches,ownerBranch);if(!memberBranches.length||memberCoverage===\"uncovered\")return\"definite\";if(memberCoverage===\"unknown\")certainty=\"unknown\"}}return certainty}function mergeBranchSignatures(){for(var _len=arguments.length,branches=new Array(_len),_key=0;_key<_len;_key++){branches[_key]=arguments[_key]}var merged=[];for(var _iterator=_create_for_of_iterator_helper_loose(branches),_step;!(_step=_iterator()).done;){var branch=_step.value;for(var _iterator1=_create_for_of_iterator_helper_loose(branch),_step1;!(_step1=_iterator1()).done;){var constraint=_step1.value;if(merged.indexOf(constraint)===-1)merged.push(constraint)}}return merged}function classifyOwnerResolutions(reference,resolutions,variableRoles,getBranchCoverage){var resolutionKinds=[];var hasUnknownConflict=false;for(var _iterator=_create_for_of_iterator_helper_loose(resolutions),_step;!(_step=_iterator()).done;){var resolution=_step.value;var primaryBranches=[];for(var i=0;i<resolution.fallbackStart;i++){var _resolution_symbols_i_branchSignature;primaryBranches.push((_resolution_symbols_i_branchSignature=resolution.symbols[i].branchSignature)!=null?_resolution_symbols_i_branchSignature:EMPTY_BRANCH)}var primaryCoverage=getBranchCoverage(primaryBranches,resolution.callSiteBranch);var primaryKinds=collectOwnerKinds(resolution.symbols,variableRoles,resolution.fallbackStart);var retainedKinds=primaryCoverage===\"covered\"?primaryKinds:collectOwnerKinds(resolution.symbols,variableRoles);if(retainedKinds.size>1){if(primaryKinds.size>1&&primaryCoverage===\"covered\"||primaryKinds.size<=1&&primaryCoverage===\"uncovered\"){return\"definite\"}hasUnknownConflict=true}for(var _iterator1=_create_for_of_iterator_helper_loose(retainedKinds),_step1;!(_step1=_iterator1()).done;){var kind=_step1.value;if(resolutionKinds.indexOf(kind)===-1)resolutionKinds.push(kind)}}if(hasUnknownConflict)return\"unknown\";if(resolutionKinds.length<=1)return undefined;var replacementCoverage=getBranchCoverage(resolutions.map(function(resolution){return resolution.callSiteBranch}),reference._branch);return replacementCoverage===\"covered\"?\"definite\":\"unknown\"}function classifyRuntimeExpandedOwner(resolutions,variableRoles,getBranchCoverage){var hasUnknownIOOwner=false;for(var _iterator=_create_for_of_iterator_helper_loose(resolutions),_step;!(_step=_iterator()).done;){var resolution=_step.value;var primarySymbols=resolution.symbols.slice(0,resolution.fallbackStart);var primaryCoverage=getBranchCoverage(primarySymbols.map(function(symbol){var _symbol_branchSignature;return(_symbol_branchSignature=symbol.branchSignature)!=null?_symbol_branchSignature:EMPTY_BRANCH}),resolution.callSiteBranch);var retainedSymbols=primaryCoverage===\"covered\"?primarySymbols:resolution.symbols;if(!containsStructIORole(retainedSymbols,variableRoles))continue;var retainedCoverage=primaryCoverage===\"covered\"?primaryCoverage:getBranchCoverage(retainedSymbols.map(function(symbol){var _symbol_branchSignature;return(_symbol_branchSignature=symbol.branchSignature)!=null?_symbol_branchSignature:EMPTY_BRANCH}),resolution.callSiteBranch);if(retainedCoverage===\"covered\")return\"definite\";hasUnknownIOOwner=true}return hasUnknownIOOwner?\"unknown\":undefined}function containsStructIORole(symbols,variableRoles){return symbols.some(function(symbol){return _instanceof(symbol,VarSymbol)&&variableRoles.has(symbol)})}function collectOwnerKinds(symbols,variableRoles,end){if(end===void 0)end=symbols.length;var kinds=new Set;for(var i=0;i<end;i++){var symbol=symbols[i];var _variableRoles_get;if(_instanceof(symbol,VarSymbol))kinds.add((_variableRoles_get=variableRoles.get(symbol))!=null?_variableRoles_get:\"ordinary\")}return kinds}function recordOwnerIssue(issues,reference,kind,certainty){if(!certainty)return;var existing=issues.get(reference);if(!existing||existing.certainty===\"unknown\"&&certainty===\"definite\"){issues.set(reference,{kind:kind,certainty:certainty})}}function collectInvalidEntryReturns(functions,ioStructs,allowFunctionResult){var locations=[];for(var _iterator=_create_for_of_iterator_helper_loose(functions),_step;!(_step=_iterator()).done;){var fn=_step.value;var returnStructs=fn.astNode.protoType.returnType.typeSpecifier.structDeclarations;if(!returnStructs.some(function(struct){return ioStructs.includes(struct)}))continue;collectInvalidReturnsInNode(fn.astNode.statements,returnStructs,allowFunctionResult,locations)}return locations}function collectInvalidReturnsInNode(node,returnStructs,allowFunctionResult,out){if(_instanceof(node,ASTNode.JumpStatement)&&node.children.length===3){var expression=node.children[1];if(!_instanceof(expression,TreeNode)||!isEntryReturnExpression(expression,returnStructs,allowFunctionResult)){out.push(node.location)}return}for(var _iterator=_create_for_of_iterator_helper_loose(node.children),_step;!(_step=_iterator()).done;){var child=_step.value;if(_instanceof(child,TreeNode))collectInvalidReturnsInNode(child,returnStructs,allowFunctionResult,out)}}function isEntryReturnExpression(expression,returnStructs,allowFunctionResult){var _generic_fnSymbol_dataType;var variable=ParserUtils.unwrapBareIdentifier(expression,{allowParens:true});var _variable_resolvedValueSymbols;var symbols=(_variable_resolvedValueSymbols=variable==null?void 0:variable.resolvedValueSymbols())!=null?_variable_resolvedValueSymbols:[];if(symbols.length>0&&symbols.every(function(symbol){var _symbol_dataType;return _instanceof(symbol,VarSymbol)&&((_symbol_dataType=symbol.dataType)==null?void 0:_symbol_dataType.structDeclarations.some(function(struct){return returnStructs.includes(struct)}))}))return true;if(!allowFunctionResult)return false;var call=ParserUtils.unwrapNodeByType(expression,NoneTerminal.function_call);var generic=call==null?void 0:call.children[0];return _instanceof(generic==null?void 0:generic.fnSymbol,FnSymbol)&&((_generic_fnSymbol_dataType=generic.fnSymbol.dataType)==null?void 0:_generic_fnSymbol_dataType.structDeclarations.some(function(struct){return returnStructs.includes(struct)}))===true}function collectMrtOutputIssues(props,getDeclarationCoexistence){var _loop=function(){var prop=_step.value;var _occupiedLocations_get;if(prop.typeInfo.type!==Keyword.VEC4){issues.push({prop:prop,kind:\"invalid-type\"})}var location=prop.mrtIndex;if(location===undefined){issues.push({prop:prop,kind:\"missing-location\"})}else if(!Number.isInteger(location)||location<0){issues.push({prop:prop,kind:\"invalid-location\"})}else if((_occupiedLocations_get=occupiedLocations.get(location))==null?void 0:_occupiedLocations_get.some(function(existing){return getDeclarationCoexistence(existing.ident.branch,prop.ident.branch)===\"coexist\"})){issues.push({prop:prop,kind:\"duplicate-location\"})}else{var _occupiedLocations_get1;var occupants=(_occupiedLocations_get1=occupiedLocations.get(location))!=null?_occupiedLocations_get1:[];occupants.push(prop);occupiedLocations.set(location,occupants)}};var issues=[];var occupiedLocations=new Map;for(var _iterator=_create_for_of_iterator_helper_loose(props),_step;!(_step=_iterator()).done;)_loop();return issues}export{GSError as $,ASTNode as A,BaseToken as B,ShaderData as C,StructSymbol as D,EMPTY_BRANCH as E,FnSymbol as F,Grammar as G,SymbolDataType as H,ESymbolType as I,SymbolInfo as J,Keyword as K,Lexer as L,ShaderClueIR as M,NoneTerminal as N,ShaderStructRole as O,ShaderCoreInfo as P,ShaderBuiltinSemantic as Q,createShaderDeclarationOwnership as R,ShaderTargetParser as S,TypeAny as T,isDeferredDeclarationPair as U,VarSymbol as V,ShaderSourceParser as W,ShaderSourceFactory as X,Preprocessor as Y,ParserObjectPool as Z,ParserUtils as _,EOF as a,GSErrorName as a0,ShaderCompilerUtils as a1,GLESShaderInfo as a2,_instanceof as a3,canBranchesOverlap as a4,getBranchCoverage as a5,_create_for_of_iterator_helper_loose as a6,BuiltinVariable as a7,BuiltinFunction as a8,_inherits as a9,__generator as aa,_extends as ab,isConditionalChainExhaustive as ac,isBranchReachable as ad,TypeSystem as ae,branchAnalysis as af,normalizeShaderSourceFile as ag,parseShaderPassWith as ah,shaderSourceBaseURL as ai,areConditionsComplementary as aj,isBranchVisibleFrom as ak,canDeclarationsCoexist as al,getDeclarationCoexistence as am,getBranchReachability as an,canBranchesCoverCallsite as ao,mapExpandedShaderRange as ap,createParsedShaderPass as aq,GenericType as ar,BuiltinVariableTable as as,ParserSemanticValidation as at,formatDiagnosticSource as au,getParsedShaderPassPayload as b,canInheritanceBranchesCover as c,ShaderRange as d,ShaderPosition as e,ETokenType as f,getLexicalDeclarationCoexistence as g,BaseLexer as h,parsePreprocessorCondition as i,toPreprocessorCondition as j,SymbolTable as k,SymbolTableStack as l,mapExpandedShaderError as m,normalizeShaderIncludeMap as n,EShaderStage as o,proveInheritanceBranchesCover as p,LALR1 as q,addTranslationRule as r,sameBranch as s,tryParsePreprocessorCondition as t,createGrammar as u,createRuntimeShaderTargetParser as v,parseRuntimeShaderPass as w,TreeNode as x,SymbolType as y,StructProp as z};\n//# sourceMappingURL=GLESShaderInfo.module.js.map\n","function _type_of(obj) {\n \"@swc/helpers - typeof\";\n\n return obj && typeof Symbol !== \"undefined\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n}\nexport { _type_of 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 _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","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","import { BaseToken } from \"@galacean/engine-shader-parser/internal\";\nimport { EShaderStage } from \"@galacean/engine-shader-parser/internal\";\nimport { SymbolTable } from \"@galacean/engine-shader-parser/internal\";\nimport { ASTNode, TreeNode } from \"@galacean/engine-shader-parser/internal\";\nimport { ESymbolType, SymbolInfo, VarSymbol } from \"@galacean/engine-shader-parser/internal\";\nimport { ShaderStructRole, StructProp } from \"@galacean/engine-shader-parser/internal\";\n\n/** @internal */\nexport class VisitorContext {\n private readonly _lookupSymbol = new SymbolInfo(\"\", null);\n private readonly _structRoles = new Map<ASTNode.StructSpecifier, ShaderStructRole>();\n private readonly _vertexUnresolvedVariableRoles = new Map<string, ShaderStructRole>();\n private readonly _fragmentUnresolvedVariableRoles = new Map<string, ShaderStructRole>();\n private readonly _vertexAmbiguousVariableNames = new Set<string>();\n private readonly _fragmentAmbiguousVariableNames = new Set<string>();\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 readonly _referencedGlobalSymbols = new Set<SymbolInfo>();\n private _globalSymbolQueries: Record<string, Partial<Record<ESymbolType, SymbolInfo[]>>>;\n _referencedGlobalMacroASTs: TreeNode[] = [];\n private readonly _structVariableRoles = new Map<VarSymbol, ShaderStructRole>();\n\n _passSymbolTable?: SymbolTable<SymbolInfo>;\n /** Receives every global use, including uses of declarations already discovered. */\n onReferenceGlobal?: (symbols: readonly SymbolInfo[]) => void;\n /** Receives interface uses so generated fields retain their declaration dependencies. */\n onReferenceStructProps?: (props: readonly StructProp[]) => void;\n readonly codeCache = new Map<TreeNode, string>();\n private readonly fragmentReturnModes = new Map<ASTNode.JumpStatement, FragmentReturnMode>();\n private readonly terminalInterfaceReturns = new Set<ASTNode.JumpStatement>();\n\n constructor() {\n this.reset();\n }\n\n reset(resetAll = true) {\n this.codeCache.clear();\n this.fragmentReturnModes.clear();\n this.terminalInterfaceReturns.clear();\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 this._structRoles.clear();\n this._vertexUnresolvedVariableRoles.clear();\n this._fragmentUnresolvedVariableRoles.clear();\n this._vertexAmbiguousVariableNames.clear();\n this._fragmentAmbiguousVariableNames.clear();\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._referencedGlobalSymbols.clear();\n this._globalSymbolQueries = Object.create(null);\n this._referencedGlobalMacroASTs.length = 0;\n if (resetAll) {\n this._structVariableRoles.clear();\n this._passSymbolTable = undefined;\n }\n }\n\n /**\n * Finds the shared interface role of custom-struct declaration candidates.\n * @param declarations - Exact parser struct identities resolved at one type occurrence.\n * @returns Interface role, or `undefined` when the type is not an unambiguous interface struct.\n */\n getStructRole(declarations: readonly ASTNode.StructSpecifier[]): ShaderStructRole | undefined {\n let resolvedRole: ShaderStructRole | undefined;\n for (const declaration of declarations) {\n const role = this._structRoles.get(declaration);\n if (!role || (resolvedRole && resolvedRole !== role)) return;\n resolvedRole = role;\n }\n return resolvedRole;\n }\n\n /**\n * Tests the exact interface role of one struct declaration.\n * @param declaration - Parser struct identity.\n * @param role - Expected interface role.\n * @returns Whether the declaration owns that role.\n */\n hasStructRole(declaration: ASTNode.StructSpecifier, role: ShaderStructRole): boolean {\n return this._structRoles.get(declaration) === role;\n }\n\n /**\n * Registers stage-interface struct types for constant-time role lookup.\n * @param role - Interface role shared by the supplied structs.\n * @param structs - Struct declarations derived from parser IR.\n * @internal\n */\n registerStructTypes(role: ShaderStructRole, structs: readonly ASTNode.StructSpecifier[]): void {\n for (const struct of structs) {\n this._structRoles.set(struct, role);\n }\n }\n\n /**\n * Registers a resolved variable that holds an interface struct.\n * @param variable - Parser symbol identity for the declaration.\n * @param role - Struct interface role.\n * @param stage - Optional stage from whose entry the variable is reachable. Omit when only exact\n * symbol lookup is required.\n */\n registerStructVar(variable: VarSymbol, role: ShaderStructRole, stage?: EShaderStage): void {\n this._structVariableRoles.set(variable, role);\n if (stage === undefined) return;\n const roles =\n stage === EShaderStage.VERTEX ? this._vertexUnresolvedVariableRoles : this._fragmentUnresolvedVariableRoles;\n const ambiguous =\n stage === EShaderStage.VERTEX ? this._vertexAmbiguousVariableNames : this._fragmentAmbiguousVariableNames;\n const name = variable.ident;\n if (ambiguous.has(name)) return;\n const existing = roles.get(name);\n if (existing && existing !== role) {\n roles.delete(name);\n ambiguous.add(name);\n } else {\n roles.set(name, role);\n }\n }\n\n /**\n * Finds an interface role for a global macro value that has no lexical symbol identity.\n * @param variableName - Bare variable name in the macro replacement AST.\n * @returns A role only when every stage-reachable declaration with that name agrees.\n */\n getUnresolvedStructVarRole(variableName: string): ShaderStructRole | undefined {\n const roles =\n this.stage === EShaderStage.VERTEX ? this._vertexUnresolvedVariableRoles : this._fragmentUnresolvedVariableRoles;\n const ambiguous =\n this.stage === EShaderStage.VERTEX ? this._vertexAmbiguousVariableNames : this._fragmentAmbiguousVariableNames;\n return ambiguous.has(variableName) ? undefined : roles.get(variableName);\n }\n\n /**\n * Finds the shared interface role of branch-visible variable candidates.\n * @param symbols - Exact parser symbols resolved at one reference.\n * @returns Interface role, or `undefined` when the reference is not an unambiguous interface value.\n */\n getStructVarRole(symbols: readonly SymbolInfo[]): ShaderStructRole | undefined {\n let resolvedRole: ShaderStructRole | undefined;\n for (const symbol of symbols) {\n if (!(symbol instanceof VarSymbol)) return;\n const role = this._structVariableRoles.get(symbol);\n if (!role || (resolvedRole && resolvedRole !== role)) return;\n resolvedRole = role;\n }\n return resolvedRole;\n }\n\n /**\n * Marks a value-return belonging to a fragment entry for backend lowering.\n * @param statement - Exact return statement identity.\n * @param mode - Fragment output contract of the containing entry declaration.\n */\n registerFragmentReturn(statement: ASTNode.JumpStatement, mode: FragmentReturnMode): void {\n this.fragmentReturnModes.set(statement, mode);\n }\n\n /**\n * Finds the output contract for a fragment-entry return statement.\n * @param statement - Return statement identity.\n * @returns Output mode, or `undefined` for ordinary helper/vertex returns.\n */\n getFragmentReturnMode(statement: ASTNode.JumpStatement): FragmentReturnMode | undefined {\n return this.fragmentReturnModes.get(statement);\n }\n\n /** Marks a syntactically final interface return whose control-flow exit can be omitted. */\n registerTerminalInterfaceReturn(statement: ASTNode.JumpStatement): void {\n this.terminalInterfaceReturns.add(statement);\n }\n\n /**\n * Tests whether an interface return is the final syntactic statement in its function.\n * @param statement - Return statement identity.\n * @returns Whether backend lowering may omit a trailing `return;`.\n */\n isTerminalInterfaceReturn(statement: ASTNode.JumpStatement): boolean {\n return this.terminalInterfaceReturns.has(statement);\n }\n\n referenceAttribute(ident: BaseToken): void {\n this._referenceProp(ident.lexeme, this.attributeList, this._referencedAttributeList);\n }\n\n referenceVarying(ident: BaseToken): void {\n this._referenceProp(ident.lexeme, this.varyingList, this._referencedVaryingList);\n }\n\n referenceMRTProp(ident: BaseToken): void {\n this._referenceProp(ident.lexeme, this.mrtList, this._referencedMRTList);\n }\n\n referenceGlobal(ident: string, type: ESymbolType): void {\n const queries = (this._globalSymbolQueries[ident] ??= Object.create(null));\n let symbols = queries[type];\n if (!symbols) {\n this._lookupSymbol.set(ident, type);\n symbols = queries[type] = this._passSymbolTable!.getSymbols(this._lookupSymbol, true, []);\n const namedSymbols = (this._referencedGlobals[ident] ??= []);\n for (const symbol of symbols) {\n if (!this._referencedGlobalSymbols.has(symbol)) {\n this._referencedGlobalSymbols.add(symbol);\n namedSymbols.push(symbol);\n }\n }\n }\n // Repeated uses still establish edges from each declaration's owner.\n this.onReferenceGlobal?.(symbols);\n }\n\n // Track which IO props are actually referenced (drives in/out emission). A missing member is no\n // longer flagged here — that's the parser's struct-field check (UndeclaredStructMember).\n private _referenceProp(name: string, list: StructProp[], refList: Record<string, StructProp[]>): void {\n if (!refList[name]) refList[name] = list.filter((item) => item.ident.lexeme === name);\n this.onReferenceStructProps?.(refList[name]);\n }\n}\n\n/** @internal */\nexport type FragmentReturnMode = \"color\" | \"mrt\";\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 { BaseToken } from \"@galacean/engine-shader-parser/internal\";\nimport { ASTNode, TreeNode } from \"@galacean/engine-shader-parser/internal\";\nimport { NoneTerminal } from \"@galacean/engine-shader-parser/internal\";\nimport { ESymbolType, FnSymbol } from \"@galacean/engine-shader-parser/internal\";\nimport { NodeChild, StructProp } from \"@galacean/engine-shader-parser/internal\";\nimport { ParserUtils } from \"@galacean/engine-shader-parser/internal\";\nimport { ShaderStructRole } from \"@galacean/engine-shader-parser/internal\";\nimport type { BranchSignature, ICodeGenVisitor } from \"@galacean/engine-shader-parser/internal\";\nimport { VisitorContext } from \"./VisitorContext\";\nimport { ReturnableObjectPool } from \"@galacean/engine-core\";\nimport { Keyword } from \"@galacean/engine-shader-parser/internal\";\nimport { TempArray } from \"../TempArray\";\nimport { ICodeSegment } from \"./types\";\n\n/**\n * @internal\n * The code generator\n */\nexport abstract class CodeGenVisitor implements ICodeGenVisitor {\n abstract getAttributeProp(prop: StructProp): string;\n abstract getVaryingProp(prop: StructProp): string;\n abstract getMRTProp(prop: StructProp): string | null;\n\n protected static _tmpArrayPool = new ReturnableObjectPool(TempArray<string>, 10);\n protected readonly context = new VisitorContext();\n\n cache(node: TreeNode, code: string): string {\n this.context.codeCache.set(node, code);\n return code;\n }\n\n getCachedCode(node: TreeNode): string | undefined {\n return this.context.codeCache.get(node);\n }\n\n defaultCodeGen(children: NodeChild[]) {\n const pool = CodeGenVisitor._tmpArrayPool;\n const 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 use the AST path\n ret.array.push(child.lexeme);\n } else {\n ret.array.push(child.codeGen(this));\n }\n }\n const result = ret.array.join(\" \");\n ret.dispose();\n pool.return(ret);\n return result;\n }\n\n visitPostfixExpression(node: ASTNode.PostfixExpression): string {\n const children = node.children;\n const derivationLength = children.length;\n const context = this.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 // Direct variables use parser symbol identity so lexical shadowing cannot inherit an IO role\n // from a same-named declaration. Macro-expanded identifiers can lack a resolved symbol, so\n // only that zero-symbol path consults the current stage's unambiguous name-to-role map.\n let role: ShaderStructRole | undefined;\n const directRoot = ParserUtils.unwrapBareIdentifier(postExpr, { allowParens: true });\n if (directRoot) {\n const symbols = directRoot.resolvedValueSymbols();\n const unresolvedName = ParserUtils.extractDirectIdentLexeme(postExpr);\n role = symbols.length\n ? context.getStructVarRole(symbols)\n : unresolvedName\n ? context.getUnresolvedStructVarRole(unresolvedName)\n : undefined;\n }\n\n if (role) {\n if (role === ShaderStructRole.Attribute) context.referenceAttribute(prop);\n else if (role === ShaderStructRole.Varying) context.referenceVarying(prop);\n else context.referenceMRTProp(prop);\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 return `${identNode.codeGen(this)}[${indexNode.codeGen(this)}]`;\n }\n\n return this.defaultCodeGen(node.children);\n }\n\n visitVariableIdentifier(node: ASTNode.VariableIdentifier): string {\n for (const name of node.referenceGlobalSymbolNames) {\n this.context.referenceGlobal(name, ESymbolType.Any);\n }\n for (const symbol of node.resolvedSymbols()) {\n if (symbol instanceof FnSymbol) this.referenceFunction(symbol, node.location.start.index, node._branch);\n }\n\n return node.getLexeme(this);\n }\n\n protected referenceFunction(symbol: FnSymbol, referenceIndex: number, branch: BranchSignature): void {\n void referenceIndex;\n void branch;\n this.context.referenceGlobal(symbol.ident, ESymbolType.FN);\n }\n\n visitFunctionCall(node: ASTNode.FunctionCall): string {\n const call = node.children[0] as ASTNode.FunctionCallGeneric;\n if (call.fnSymbol instanceof FnSymbol) {\n for (const symbol of call.fnSymbols?.length ? call.fnSymbols : [call.fnSymbol]) {\n this.referenceFunction(symbol, node.location.start.index, node._branch);\n }\n\n const paramList = call.children[2];\n if (paramList instanceof ASTNode.FunctionCallParameterList) {\n const astNodes = paramList.paramNodes;\n const finalSymbol = this.context._referencedGlobals[call.fnSymbol.ident].find(\n (candidate) => candidate instanceof FnSymbol && candidate.equal(call.fnSymbol!)\n ) as FnSymbol | undefined;\n const paramInfoList = (finalSymbol ?? call.fnSymbol).astNode.protoType.parameterList;\n\n const context = this.context;\n const params = astNodes.filter((_, i) => {\n const parameter = paramInfoList?.[i]?.astNode;\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 (\n !(parameter instanceof ASTNode.ParameterDeclaration) ||\n !parameter.symbol ||\n !context.getStructVarRole([parameter.symbol])\n );\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 = this.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 (variableParam && context.getStructVarRole(variableParam.resolvedValueSymbols())) {\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 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 = this.context;\n // Global interface variables are flattened and therefore are not emitted as uniforms.\n if (context.getStructVarRole([node.declarator.symbol])) {\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 = this.context;\n const children = node.children;\n const child = children[0];\n\n if (child instanceof ASTNode.InitDeclaratorList) {\n const first = child.children[0];\n const declarator =\n child.declarator ?? (first instanceof ASTNode.SingleDeclaration ? first.declarator : undefined);\n const role = declarator && context.getStructVarRole([declarator.symbol]);\n if (role === ShaderStructRole.Varying || role === ShaderStructRole.Mrt) return \"\";\n }\n return this.defaultCodeGen(children);\n }\n\n visitFunctionParameterList(node: ASTNode.FunctionParameterList): string {\n const context = this.context;\n const params = node.parameterInfoList.filter((item) => {\n const parameter = item.astNode;\n return (\n !(parameter instanceof ASTNode.ParameterDeclaration) ||\n !parameter.symbol ||\n !context.getStructVarRole([parameter.symbol])\n );\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;\n if (this.context.getStructRole(returnType.structDeclarations) === ShaderStructRole.Varying) {\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 (returnVar && this.context.getStructVarRole(returnVar.resolvedValueSymbols()) === ShaderStructRole.Varying) {\n return this.context.isTerminalInterfaceReturn(node) ? \"\" : \"return;\";\n }\n const returnFnCall = ParserUtils.unwrapNodeByType<ASTNode.FunctionCall>(expr, NoneTerminal.function_call);\n const calledFunction = returnFnCall?.children[0] as ASTNode.FunctionCallGeneric | undefined;\n const returnDeclarations =\n calledFunction?.fnSymbol instanceof FnSymbol\n ? calledFunction.fnSymbol.astNode.protoType.returnType.typeSpecifier.structDeclarations\n : [];\n if (this.context.getStructRole(returnDeclarations) === ShaderStructRole.Varying) {\n const call = `${expr.codeGen(this)};`;\n return this.context.isTerminalInterfaceReturn(node) ? call : `{ ${call} return; }`;\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 visitTypeSpecifier(node: ASTNode.TypeSpecifier): string {\n return this.defaultCodeGen(node.children);\n }\n\n visitStructSpecifier(node: ASTNode.StructSpecifier): string {\n const context = this.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 || isMRTStruct) {\n const 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 = this.context;\n const terminal = ParserUtils.lastStatement(fnNode.statements);\n if (terminal instanceof ASTNode.JumpStatement) context.registerTerminalInterfaceReturn(terminal);\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","import type { Condition, PreprocessorExpressionParseResult, ShaderInstruction } from \"@galacean/engine-design\";\nimport { ShaderPreprocessorDirective } from \"@galacean/engine-core\";\nimport { parsePreprocessorExpression, toPreprocessorCondition } from \"@galacean/engine-shader-parser/internal\";\nimport type { DeferredDeclarationOwnership } from \"@galacean/engine-shader-parser/internal\";\n\nexport type { ShaderInstruction } from \"@galacean/engine-design\";\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 /**\n * Marks compiler-owned text without placing parser objects in the instruction stream.\n * @param text - Declaration or derived declaration text.\n * @param owner - Neutral declaration identity, if runtime selection is required.\n * @param activate - Whether this is the declaration's original source position.\n * @returns Intermediate source consumed by the instruction encoder.\n * @internal\n */\n static declaration(text: string, owner?: DeferredDeclarationOwnership, activate = true): string {\n if (!owner) return text;\n const activation = activate ? `\\0D${owner.id},${owner.group},${owner.sourceScope}\\0\\n` : \"\";\n return text ? `${activation}\\0T${owner.id}\\0\\n${text}\\n\\0E\\0\\n` : activation;\n }\n\n /**\n * Marks derived text shared by any selected, reachable declaration without activating an owner.\n * @param text - Shared derived declaration text.\n * @param owners - Declarations that require the text; an empty list never retains it.\n * @returns Intermediate source consumed by the instruction encoder.\n * @internal\n */\n static sharedDeclaration(text: string, owners: readonly DeferredDeclarationOwnership[]): string {\n return text ? `\\0T${owners.map((owner) => owner.id).join(\",\")}\\0\\n${text}\\n\\0E\\0\\n` : \"\";\n }\n\n /**\n * Records a declaration dependency for variant-time reachability after ownership selection.\n * @param from - Referencing declaration identity, or zero for a stage root.\n * @param to - Referenced declaration identity.\n * @returns Intermediate source consumed by the instruction encoder.\n * @internal\n */\n static reference(from: number, to: number): string {\n return `\\0R${from},${to}\\0\\n`;\n }\n\n /**\n * Removes private emission markers from the public source view after instruction encoding.\n * @param source - Encoded intermediate stage source.\n * @returns GLSL source without compiler metadata.\n * @internal\n */\n static source(source: string): string {\n return source.indexOf(\"\\0\") < 0 ? source : source.replace(/\\0[^\\0]*\\0\\n?/g, \"\");\n }\n\n /**\n * Encodes generated GLSL directives into runtime-selectable instructions.\n * @param glsl - Generated stage source.\n * @param preprocessorExpressions - Parser-owned expression trees keyed by logical directive text.\n * @returns Runtime shader instruction stream.\n * @throws Error when a conditional directive is malformed or has a deterministic evaluation failure.\n * @internal\n */\n static parse(\n glsl: string,\n preprocessorExpressions?: ReadonlyMap<string, PreprocessorExpressionParseResult>\n ): ShaderInstruction[] {\n const instructions: ShaderInstruction[] = [];\n const length = glsl.length;\n let pos = 0;\n let owners: number[] | undefined;\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, owners);\n break;\n }\n\n if (directiveStart > pos) {\n ShaderInstructionEncoder._pushText(instructions, glsl, pos, directiveStart, owners);\n }\n\n const lineEnd = ShaderInstructionEncoder._findLogicalLineEnd(glsl, directiveStart, length);\n const line = glsl.substring(directiveStart, lineEnd).replace(/\\\\(?:\\r\\n|\\n|\\r)/g, \"\");\n pos = lineEnd < length ? lineEnd + 1 : length;\n\n if (line.charCodeAt(0) === 0) {\n const kind = line.charAt(1);\n if (kind === \"D\") {\n const fields = line.slice(2, -1).split(\",\").map(Number);\n instructions.push([ShaderPreprocessorDirective.Declaration, fields[0], fields[1], fields[2]]);\n } else if (kind === \"R\") {\n const fields = line.slice(2, -1).split(\",\").map(Number);\n instructions.push([ShaderPreprocessorDirective.Reference, fields[0], fields[1]]);\n } else {\n const ids = line.slice(2, -1);\n owners = kind === \"T\" ? (ids ? ids.split(\",\").map(Number) : []) : undefined;\n }\n continue;\n }\n\n const match = ShaderInstructionEncoder._DIRECTIVE_RE.exec(line);\n if (!match) {\n const text = lineEnd < length ? line + \"\\n\" : line;\n ShaderInstructionEncoder._pushText(instructions, text, 0, text.length, owners);\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, preprocessorExpressions);\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, preprocessorExpressions);\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 separator = ShaderInstructionEncoder._findInlineWhitespace(rest);\n if (separator === rest.length) {\n instructions.push([ShaderPreprocessorDirective.Define, rest]);\n } else {\n instructions.push([\n ShaderPreprocessorDirective.DefineVal,\n rest.substring(0, separator),\n ShaderInstructionEncoder._stripLineComment(rest.substring(separator + 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 _parseCondition(\n expression: string,\n preprocessorExpressions?: ReadonlyMap<string, PreprocessorExpressionParseResult>\n ): Condition {\n const result = preprocessorExpressions?.get(expression) ?? parsePreprocessorExpression(expression);\n if (\"error\" in result) {\n if (!result.error.certain && result.hasExpandableIdentifier) return { t: \"deferred\", e: expression };\n throw new Error(result.error.message);\n }\n if (result.evaluationError) throw new Error(result.evaluationError);\n const compact = toPreprocessorCondition(result.condition);\n if (compact && !result.hasExpandableIdentifier) return compact;\n return result.hasExpandableIdentifier ? { t: \"deferred\", e: expression } : result.condition;\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 /* '#' */ || source.charCodeAt(j) === 0)) 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 _findLogicalLineEnd(source: string, start: number, length: number): number {\n let lineEnd = source.indexOf(\"\\n\", start);\n while (lineEnd !== -1) {\n const beforeBreak = source.charCodeAt(lineEnd - 1) === 13 ? lineEnd - 2 : lineEnd - 1;\n if (beforeBreak < start || source.charCodeAt(beforeBreak) !== 92) return lineEnd;\n lineEnd = source.indexOf(\"\\n\", lineEnd + 1);\n }\n return length;\n }\n\n private static _findInlineWhitespace(source: string): number {\n let index = 0;\n while (index < source.length) {\n const charCode = source.charCodeAt(index);\n if (charCode === 32 /* space */ || charCode === 9 /* tab */) break;\n index++;\n }\n return index;\n }\n\n private static _pushText(\n instructions: ShaderInstruction[],\n source: string,\n from: number,\n to: number,\n owners?: readonly number[]\n ): void {\n if (from >= to) return;\n const last = instructions.length > 0 ? instructions[instructions.length - 1] : null;\n const directive = owners === undefined ? ShaderPreprocessorDirective.Text : ShaderPreprocessorDirective.OwnedText;\n if (\n last &&\n last[0] === directive &&\n (owners === undefined ||\n (last.length === owners.length + 2 && owners.every((owner, index) => last[index + 2] === owner)))\n ) {\n (last as [number, string])[1] += source.substring(from, to);\n } else {\n instructions.push(\n owners === undefined\n ? [directive, source.substring(from, to)]\n : [directive, source.substring(from, to), ...owners]\n );\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","import type { IShaderInfo } from \"@galacean/engine-design\";\nimport type { IPoolElement } from \"@galacean/engine-core\";\nimport { BaseToken } from \"@galacean/engine-shader-parser/internal\";\nimport { EShaderStage } from \"@galacean/engine-shader-parser/internal\";\nimport { Keyword } from \"@galacean/engine-shader-parser/internal\";\nimport { ASTNode, TreeNode } from \"@galacean/engine-shader-parser/internal\";\nimport { NodeChild } from \"@galacean/engine-shader-parser/internal\";\nimport { ShaderData } from \"@galacean/engine-shader-parser/internal\";\nimport { ESymbolType } from \"@galacean/engine-shader-parser/internal\";\nimport {\n FnSymbol,\n VarSymbol,\n canInheritanceBranchesCover,\n getLexicalDeclarationCoexistence\n} from \"@galacean/engine-shader-parser/internal\";\nimport { GSError, GSErrorName, mapExpandedShaderError } from \"@galacean/engine-shader-parser/internal\";\nimport { ShaderStructRole } from \"@galacean/engine-shader-parser/internal\";\nimport { ParserUtils } from \"@galacean/engine-shader-parser/internal\";\nimport type {\n BranchSignature,\n ShaderClueIR,\n ShaderCoreInfo,\n ShaderEntryPointInfo,\n DeferredDeclarationOwnership\n} from \"@galacean/engine-shader-parser/internal\";\nimport { CodeGenVisitor } from \"./CodeGenVisitor\";\nimport { ICodeSegment } from \"./types\";\nimport type { ShaderBackend } from \"../ShaderBackend\";\nimport { ShaderInstructionEncoder } from \"../ShaderInstructionEncoder\";\n\n/**\n * @internal\n */\nexport abstract class GLESVisitor extends CodeGenVisitor implements ShaderBackend, IPoolElement {\n private _globalCodeArray: ICodeSegment[] = [];\n private readonly _forwardFunctionDeclarations = new Map<ASTNode.FunctionDefinition, string>();\n private readonly _forwardStructIndices = new Map<ASTNode.StructSpecifier, number>();\n private readonly _structCodeSegments = new Map<ASTNode.StructSpecifier, ICodeSegment>();\n private readonly _forwardVariableIndices = new Map<ASTNode.VariableDeclaration, number>();\n private readonly _variableCodeSegments = new Map<ASTNode.VariableDeclaration, ICodeSegment>();\n private readonly _declarationOwners = new Map<TreeNode, DeferredDeclarationOwnership>();\n private readonly _deferredPrototypes = new Map<ASTNode.FunctionDefinition, ICodeSegment>();\n private readonly _declarationReferences = new Map<number, Set<number>>();\n private _currentDeclaration?: TreeNode;\n private _sourceIR?: ShaderClueIR;\n private _outerMacroDeclarations: readonly ASTNode.GlobalDeclaration[] = [];\n\n /**\n * Clears pass-local output retained by the pooled visitor.\n */\n reset(): void {\n const { _globalCodeArray: globalCodeArray } = this;\n globalCodeArray.length = 0;\n this._forwardFunctionDeclarations.clear();\n this._forwardStructIndices.clear();\n this._structCodeSegments.clear();\n this._forwardVariableIndices.clear();\n this._variableCodeSegments.clear();\n this._deferredPrototypes.clear();\n this._declarationReferences.clear();\n this._currentDeclaration = undefined;\n }\n\n /**\n * Releases references retained by an idle visitor when its pool is collected.\n * @internal\n */\n dispose(): void {\n this.context.reset();\n this.reset();\n }\n\n /**\n * Emits target-specific declarations that precede generated global code.\n * @param data - Parser-owned shader facts.\n * @param out - Destination code segments.\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 /**\n * Generates vertex and fragment source from neutral parser facts.\n * @param ir - Request-owned neutral shader IR.\n * @param coreInfo - Entry and stage-interface facts derived from the same IR.\n * @returns Generated vertex and fragment source.\n */\n generate(ir: ShaderClueIR, coreInfo: ShaderCoreInfo): IShaderInfo {\n this.context.reset();\n this.reset();\n\n const node = ir.program;\n const shaderData = node.shaderData;\n const context = this.context;\n context._passSymbolTable = shaderData.symbolTable;\n\n const outerGlobalMacroDeclarations = coreInfo.outerGlobalMacroDeclarations;\n const { io } = coreInfo;\n context.attributeStructs.push(...io.attributeStructs);\n context.attributeList.push(...io.attributeList);\n context.varyingStructs.push(...io.varyingStructs);\n context.varyingList.push(...io.varyingList);\n context.mrtStructs.push(...io.mrtStructs);\n context.mrtList.push(...io.mrtList);\n context.registerStructTypes(ShaderStructRole.Attribute, io.attributeStructs);\n context.registerStructTypes(ShaderStructRole.Varying, io.varyingStructs);\n context.registerStructTypes(ShaderStructRole.Mrt, io.mrtStructs);\n io.structVariableRoles.forEach((role, variable) => context.registerStructVar(variable, role));\n io.vertexStructVariableRoles.forEach((role, variable) => {\n context.registerStructVar(variable, role, EShaderStage.VERTEX);\n });\n io.fragmentStructVariableRoles.forEach((role, variable) => {\n context.registerStructVar(variable, role, EShaderStage.FRAGMENT);\n });\n\n this._sourceIR = ir;\n this._outerMacroDeclarations = outerGlobalMacroDeclarations;\n try {\n coreInfo.deferredDeclarationOwnership.forEach((owner, symbol) =>\n this._declarationOwners.set(symbol.astNode!, owner)\n );\n if (this._declarationOwners.size) {\n let nextId = 0;\n let nextGroup = 0;\n this._declarationOwners.forEach((owner) => {\n nextId = Math.max(nextId, owner.id);\n nextGroup = Math.max(nextGroup, owner.group);\n });\n // Reachability follows the selected declaration, including dependencies without an override.\n shaderData.symbolTable.forEach((symbol) => {\n if (symbol.astNode && !this._declarationOwners.has(symbol.astNode)) {\n this._declarationOwners.set(symbol.astNode, {\n id: ++nextId,\n group: ++nextGroup,\n sourceScope: symbol.sourceScope\n });\n }\n });\n context.onReferenceGlobal = (symbols) => {\n const from = this.currentDeclarationOwner?.id ?? 0;\n for (const symbol of symbols) this._referenceDeclaration(from, symbol.astNode!);\n };\n const propDeclarations = new Map();\n for (const struct of [...io.attributeStructs, ...io.varyingStructs, ...io.mrtStructs]) {\n for (const prop of struct.propList) propDeclarations.set(prop, struct);\n }\n context.onReferenceStructProps = (props) => {\n const from = this.currentDeclarationOwner?.id ?? 0;\n for (const prop of props) this._referenceDeclaration(from, propDeclarations.get(prop));\n };\n }\n if (coreInfo.unsupportedDeferredDeclarations.length) {\n throw mapExpandedShaderError(\n new GSError(\n GSErrorName.CompilationError,\n \"Deferred inheritance requires exact signatures and cannot resolve a known partial-coverage conflict.\",\n coreInfo.unsupportedDeferredDeclarations[0].astNode!.location,\n ir.source,\n undefined,\n \"UnsupportedDeferredDeclaration\"\n ),\n ir.source,\n ir.sourceMap\n );\n }\n return {\n vertex: this._vertexMain(coreInfo.vertexEntry, shaderData, outerGlobalMacroDeclarations),\n fragment: this._fragmentMain(coreInfo.fragmentEntry, shaderData, outerGlobalMacroDeclarations)\n };\n } finally {\n this._sourceIR = undefined;\n this._outerMacroDeclarations = [];\n this._declarationOwners.clear();\n context.onReferenceGlobal = undefined;\n context.onReferenceStructProps = undefined;\n }\n }\n\n private _vertexMain(\n entryInfo: ShaderEntryPointInfo,\n data: ShaderData,\n outerGlobalMacroDeclarations: readonly ASTNode.GlobalDeclaration[]\n ): string {\n const context = this.context;\n context.stage = EShaderStage.VERTEX;\n context.stageEntry = entryInfo.name;\n\n // Attribute/varying structs were collected in ShaderCoreInfo\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 context.referenceGlobal(entryInfo.name, 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 this._emitDeclarationReferences(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(false);\n this.reset();\n\n return globalCode;\n }\n\n private _fragmentMain(\n entryInfo: ShaderEntryPointInfo,\n data: ShaderData,\n outerGlobalMacroStatements: readonly ASTNode.GlobalDeclaration[]\n ): string {\n const context = this.context;\n context.stage = EShaderStage.FRAGMENT;\n context.stageEntry = entryInfo.name;\n this.prepareFragment(entryInfo, outerGlobalMacroStatements);\n\n // Every value-return must preserve early-exit control flow after entry return values are\n // lowered into fragment outputs.\n entryInfo.functions.forEach((fnSymbol) => {\n const returnType = fnSymbol.astNode.protoType.returnType;\n const mode =\n returnType.type === Keyword.VEC4\n ? \"color\"\n : returnType.typeSpecifier.structDeclarations.some((struct) =>\n context.hasStructRole(struct, ShaderStructRole.Mrt)\n )\n ? \"mrt\"\n : undefined;\n if (mode) {\n const statements = fnSymbol.astNode.statements;\n this._registerFragmentReturns(statements, mode, ParserUtils.lastStatement(statements));\n }\n });\n\n // Struct-variable identities are already populated from ShaderCoreInfo; just pre-walk macro\n // refs so struct codegen sees the references.\n this._preRegisterGlobalMacroRefs(outerGlobalMacroStatements);\n\n const globalCodeArray = this._globalCodeArray;\n context.referenceGlobal(entryInfo.name, 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 this._emitDeclarationReferences(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 protected prepareFragment(\n entryInfo: ShaderEntryPointInfo,\n outerGlobalMacroStatements: readonly ASTNode.GlobalDeclaration[]\n ): void {\n void entryInfo;\n void outerGlobalMacroStatements;\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: readonly 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 const previous = this._currentDeclaration;\n if (child instanceof ASTNode.FunctionDefinition) this._currentDeclaration = child;\n this._walkMacroDefineTokens(child.children);\n this._currentDeclaration = previous;\n }\n }\n }\n\n private _registerFragmentReturns(node: TreeNode, mode: \"color\" | \"mrt\", terminal?: TreeNode): void {\n if (node instanceof ASTNode.JumpStatement && node.children.length === 3) {\n this.context.registerFragmentReturn(node, mode);\n if (node === terminal) this.context.registerTerminalInterfaceReturn(node);\n return;\n }\n for (const child of node.children) {\n if (child instanceof TreeNode) this._registerFragmentReturns(child, mode, terminal);\n }\n }\n\n private _getGlobalSymbol(out: ICodeSegment[]): void {\n const context = this.context;\n // Set iteration includes dependencies discovered while generating earlier declarations.\n for (const sm of context._referencedGlobalSymbols) {\n this._currentDeclaration = sm.astNode;\n const codeGenResult = sm.astNode!.codeGen(this);\n this._currentDeclaration = undefined;\n if (!codeGenResult) continue;\n const text = codeGenResult + (sm.type === ESymbolType.VAR ? \";\" : \"\");\n if (!sm.isInMacroBranch) {\n const segment = {\n text: this._declaration(text, sm.astNode!),\n index: sm.astNode!.location.start.index\n };\n out.push(segment);\n if (sm.astNode instanceof ASTNode.StructSpecifier) this._structCodeSegments.set(sm.astNode, segment);\n if (sm.astNode instanceof ASTNode.VariableDeclaration) this._variableCodeSegments.set(sm.astNode, segment);\n }\n }\n this._getForwardDeclarations(out);\n for (const segment of this._deferredPrototypes.values()) out.push(segment);\n for (const [definition, text] of this._forwardFunctionDeclarations) {\n if (!definition.isInMacroBranch) out.push({ text, index: definition.location.start.index });\n }\n }\n\n protected override referenceFunction(symbol: FnSymbol, referenceIndex: number, branch: BranchSignature): void {\n super.referenceFunction(symbol, referenceIndex, branch);\n const definition = symbol.astNode;\n const declarations = this._forwardFunctionDeclarations;\n if (symbol.ident === this.context.stageEntry) return;\n const candidates = this.context._referencedGlobals[symbol.ident].filter(\n (candidate): candidate is FnSymbol => candidate instanceof FnSymbol && candidate.equal(symbol)\n );\n const owner = this._declarationOwners.get(definition);\n if (owner) {\n for (const candidate of candidates) {\n const replacement = candidate.astNode;\n const nextOwner = this._declarationOwners.get(replacement);\n if (\n !nextOwner ||\n nextOwner.group !== owner.group ||\n nextOwner.sourceScope <= owner.sourceScope ||\n replacement.location.start.index <= referenceIndex\n )\n continue;\n const prototype = replacement.protoType;\n const anchor = definition.location.start.index;\n const previous = this._deferredPrototypes.get(replacement);\n if (previous && previous.index <= anchor) continue;\n if (\n !this._isContextIndependent(prototype) ||\n this._hasDeclarationContextBarrier(anchor, prototype.location.start.index, false)\n ) {\n this._unsupportedForwardDeclaration(prototype);\n }\n const outer = this._outerMacroDeclarations.find(\n (macro) => macro.location.start.index <= anchor && macro.location.end.index >= definition.location.end.index\n );\n const typeAnchor = outer?.location.start.index ?? anchor;\n this._prepareForwardTypes(prototype.returnType.typeSpecifier.structDeclarations, anchor, typeAnchor);\n for (const parameter of prototype.parameterList ?? []) {\n this._prepareForwardTypes(parameter.typeInfo?.structDeclarations ?? [], anchor, typeAnchor);\n }\n // Selection is determined at the later definition, so the prototype must not replay its guard here.\n this._deferredPrototypes.set(replacement, {\n text: this._declaration(`${prototype.codeGen(this)};`, replacement, false),\n index: typeAnchor\n });\n }\n return;\n }\n if (candidates.some((candidate) => candidate.astNode === definition)) return;\n const compatible = candidates.filter((candidate) => this._canBranchesOverlap(candidate.branchSignature, branch));\n const preceding = compatible.filter((candidate) => candidate.astNode.location.start.index < referenceIndex);\n if (\n canInheritanceBranchesCover(\n preceding.map((candidate) => candidate.branchSignature),\n branch\n )\n )\n return;\n const replacement = compatible.find((candidate) => candidate.astNode.location.start.index > referenceIndex);\n if (replacement) {\n // An inherited helper can call a declaration whose overriding body occurs later. Keep the\n // original declaration's macro/type context and emit only the final backend signature there.\n const prototype = replacement.astNode.protoType;\n const anchor = definition.location.start.index;\n const text = `${prototype.codeGen(this)};`;\n const signature = this._getForwardSignature(prototype);\n for (const candidate of candidates) {\n if (\n this._canBranchesOverlap(candidate.branchSignature, symbol.branchSignature) &&\n this._getForwardSignature(candidate.astNode.protoType) !== signature\n ) {\n this._unsupportedForwardDeclaration(candidate.astNode.protoType);\n }\n }\n if (declarations.has(definition)) return;\n if (\n !this._isContextIndependent(prototype) ||\n this._hasDeclarationContextBarrier(anchor, prototype.location.start.index, false)\n ) {\n this._unsupportedForwardDeclaration(prototype);\n }\n const outerMacro = this._outerMacroDeclarations.find(\n (macro) => macro.location.start.index <= anchor && macro.location.end.index >= definition.location.end.index\n );\n const typeAnchor = outerMacro?.location.start.index ?? anchor;\n this._prepareForwardTypes(prototype.returnType.typeSpecifier.structDeclarations, anchor, typeAnchor);\n for (const parameter of prototype.parameterList ?? []) {\n if (\n parameter.astNode instanceof ASTNode.ParameterDeclaration &&\n parameter.astNode.symbol &&\n this.context.getStructVarRole([parameter.astNode.symbol])\n ) {\n continue;\n }\n this._prepareForwardTypes(parameter.typeInfo?.structDeclarations ?? [], anchor, typeAnchor);\n }\n declarations.set(definition, text);\n }\n }\n\n private _getForwardSignature(prototype: ASTNode.FunctionProtoType): string {\n const parameters: string[] = [];\n for (const parameter of prototype.parameterList ?? []) {\n const declaration = parameter.astNode!;\n if (\n declaration instanceof ASTNode.ParameterDeclaration &&\n declaration.symbol &&\n this.context.getStructVarRole([declaration.symbol])\n )\n continue;\n const tokens: string[] = [];\n const visit = (node: NodeChild) => {\n if (node instanceof BaseToken) {\n if (node !== parameter.ident && node.type !== Keyword.IN) tokens.push(node.lexeme);\n } else {\n node.children.forEach(visit);\n }\n };\n visit(declaration);\n const text = tokens.join(\" \");\n if (text !== \"void\") parameters.push(text);\n }\n return `${prototype.returnType.codeGen(this)}(${parameters.join(\",\")})`;\n }\n\n private _canBranchesOverlap(left: BranchSignature, right: BranchSignature): boolean {\n return (\n getLexicalDeclarationCoexistence(left, right) !== \"exclusive\" &&\n !canInheritanceBranchesCover([], [...left, ...right])\n );\n }\n\n override visitVariableIdentifier(node: ASTNode.VariableIdentifier): string {\n const code = super.visitVariableIdentifier(node);\n for (const symbol of node.resolvedSymbols()) {\n if (!(symbol instanceof VarSymbol) || !symbol.isUniform) continue;\n const candidates = this.context._referencedGlobals[symbol.ident]?.filter(\n (candidate): candidate is VarSymbol => candidate instanceof VarSymbol\n );\n const owner = this._declarationOwners.get(symbol.astNode);\n if (!candidates || (!owner && candidates.includes(symbol))) continue;\n const preceding = candidates.filter(\n (candidate) => candidate.astNode!.location.start.index < node.location.start.index\n );\n if (\n !owner &&\n canInheritanceBranchesCover(\n preceding.map((candidate) => candidate.branchSignature),\n node._branch\n )\n )\n continue;\n const oldMacro = this._outerMacroDeclarations.find(\n (macro) =>\n macro.location.start.index <= symbol.astNode.location.start.index &&\n macro.location.end.index >= symbol.astNode.location.end.index\n );\n const anchor = oldMacro?.location.start.index ?? symbol.astNode.location.start.index;\n for (const candidate of candidates) {\n if (candidate.astNode!.location.start.index <= node.location.start.index) continue;\n if (owner) {\n const nextOwner = this._declarationOwners.get(candidate.astNode!);\n if (!nextOwner || nextOwner.group !== owner.group || nextOwner.sourceScope <= owner.sourceScope) continue;\n }\n const declaration = candidate.astNode!;\n if (\n !(candidate instanceof VarSymbol) ||\n !candidate.isUniform ||\n !(declaration instanceof ASTNode.VariableDeclaration)\n ) {\n this._unsupportedForwardDeclaration(declaration);\n }\n const macro = this._outerMacroDeclarations.find(\n (item) =>\n item.location.start.index <= declaration.location.start.index &&\n item.location.end.index >= declaration.location.end.index\n );\n if (\n !this._isContextIndependent(declaration) ||\n this._hasDeclarationContextBarrier(anchor, macro?.location.end.index ?? declaration.location.end.index, true)\n ) {\n this._unsupportedForwardDeclaration(declaration);\n }\n this._prepareForwardTypes(candidate.dataType!.structDeclarations, anchor);\n this._forwardVariableIndices.set(\n declaration,\n Math.min(this._forwardVariableIndices.get(declaration) ?? Infinity, anchor)\n );\n }\n }\n return code;\n }\n\n private _getForwardDeclarations(out: ICodeSegment[]): void {\n type Declaration = ASTNode.StructSpecifier | ASTNode.VariableDeclaration;\n const guarded = new Map<ASTNode.GlobalDeclaration, { index: number; declarations: Declaration[] }>();\n const declarations: [Declaration, number][] = Array.from(this._forwardStructIndices);\n for (const entry of this._forwardVariableIndices) declarations.push(entry);\n const code = (declaration: Declaration) =>\n this._declaration(\n declaration.codeGen(this) + (declaration instanceof ASTNode.VariableDeclaration ? \";\" : \"\"),\n declaration,\n false\n );\n for (const [declaration, index] of declarations) {\n const owner = this._declarationOwners.get(declaration);\n const macro = this._outerMacroDeclarations.find(\n (item) =>\n item.location.start.index <= declaration.location.start.index &&\n item.location.end.index >= declaration.location.end.index\n );\n if (!macro) {\n const previous =\n declaration instanceof ASTNode.StructSpecifier\n ? this._structCodeSegments.get(declaration)\n : this._variableCodeSegments.get(declaration);\n if (previous) {\n if (owner) previous.text = this._declaration(\"\", declaration);\n else out.splice(out.indexOf(previous), 1);\n }\n out.push({ text: code(declaration), index });\n } else if (owner) {\n out.push({ text: code(declaration), index });\n } else {\n let group = guarded.get(macro);\n if (!group) guarded.set(macro, (group = { index, declarations: [] }));\n group.index = Math.min(group.index, index);\n group.declarations.push(declaration);\n }\n }\n for (const [macro, group] of guarded) {\n const segments: ICodeSegment[] = macro.macroExpressions.map((item) => ({\n text: item instanceof BaseToken ? item.lexeme : item.codeGen(this),\n index: item.location.start.index\n }));\n for (const declaration of group.declarations) {\n segments.push({ text: code(declaration), index: declaration.location.start.index });\n }\n out.push({\n text: segments\n .sort((a, b) => a.index - b.index)\n .map((item) => item.text)\n .join(\"\\n\"),\n index: group.index\n });\n }\n }\n\n override visitTypeSpecifier(node: ASTNode.TypeSpecifier): string {\n const call = node.parent instanceof ASTNode.FunctionIdentifier ? node.parent.parent : undefined;\n if (call instanceof ASTNode.FunctionCallGeneric && call.fnSymbol instanceof FnSymbol) {\n return super.visitTypeSpecifier(node);\n }\n for (const type of node.structDependencies) {\n if (!type.ident || this.context.getStructRole([type])) continue;\n // A function-local struct can shadow a global name without participating in inheritance.\n let parent = type.parent;\n while (\n parent &&\n !(parent instanceof ASTNode.GlobalDeclaration) &&\n !(parent instanceof ASTNode.FunctionDefinition)\n ) {\n parent = parent.parent;\n }\n if (parent instanceof ASTNode.FunctionDefinition) continue;\n this.context.referenceGlobal(type.ident.lexeme, ESymbolType.STRUCT);\n const final = this.context._referencedGlobals[type.ident.lexeme];\n const owner = this._declarationOwners.get(type);\n if (!owner && final.some((symbol) => symbol.astNode === type)) continue;\n const oldMacro = this._outerMacroDeclarations.find(\n (item) =>\n item.location.start.index <= type.location.start.index && item.location.end.index >= type.location.end.index\n );\n this._prepareForwardTypes(\n final\n .filter((symbol) => {\n if (!owner) return true;\n const nextOwner = this._declarationOwners.get(symbol.astNode!);\n return nextOwner?.group === owner.group && nextOwner.sourceScope > owner.sourceScope;\n })\n .map((symbol) => symbol.astNode)\n .filter((item): item is ASTNode.StructSpecifier => item instanceof ASTNode.StructSpecifier),\n oldMacro?.location.start.index ?? type.location.start.index\n );\n }\n return super.visitTypeSpecifier(node);\n }\n\n private _prepareForwardTypes(types: readonly ASTNode.StructSpecifier[], anchor: number, hoistAnchor = anchor): void {\n if (this.context.getStructRole(types)) return;\n for (const type of types) {\n if ((this._forwardStructIndices.get(type) ?? Infinity) <= anchor) continue;\n if (type.ident) {\n this.context.referenceGlobal(type.ident.lexeme, ESymbolType.STRUCT);\n const final = this.context._referencedGlobals[type.ident.lexeme];\n if (!final.some((symbol) => symbol.astNode === type)) {\n this._prepareForwardTypes(\n final\n .map((symbol) => symbol.astNode)\n .filter((item): item is ASTNode.StructSpecifier => item instanceof ASTNode.StructSpecifier),\n anchor,\n hoistAnchor\n );\n continue;\n }\n }\n const needsHoist = type.location.start.index > anchor;\n const macro = this._outerMacroDeclarations.find(\n (item) =>\n item.location.start.index <= type.location.start.index && item.location.end.index >= type.location.end.index\n );\n if (\n needsHoist &&\n (!this._isContextIndependent(type) ||\n this._hasDeclarationContextBarrier(hoistAnchor, macro?.location.end.index ?? type.location.end.index, true))\n ) {\n this._unsupportedForwardDeclaration(type);\n }\n const dependencyAnchor = needsHoist ? hoistAnchor : type.location.start.index;\n for (const property of type.propList) {\n this._prepareForwardTypes(property.typeInfo.structDeclarations, dependencyAnchor);\n }\n if (needsHoist) this._forwardStructIndices.set(type, hoistAnchor);\n }\n }\n\n private _isContextIndependent(node: TreeNode): boolean {\n if (\n node instanceof ASTNode.VariableIdentifier ||\n node instanceof ASTNode.MacroCallSymbol ||\n node instanceof ASTNode.MacroCallFunction\n )\n return false;\n if (node instanceof ASTNode.TypeSpecifier && node.isCustom && !node.structDeclarations.length) return false;\n return node.children.every((child) =>\n child instanceof TreeNode\n ? this._isContextIndependent(child)\n : child.type < Keyword.MACRO_IF || child.type > Keyword.MACRO_DEFINE_PARAMS\n );\n }\n\n private _hasDeclarationContextBarrier(start: number, end: number, includeMacros: boolean): boolean {\n const visit = (node: TreeNode, inFunction = false): boolean => {\n if (node.location.end.index <= start || node.location.start.index >= end) return false;\n if (node instanceof ASTNode.PrecisionSpecifier && !inFunction) return true;\n if (includeMacros && node instanceof ASTNode.MacroDefine) return true;\n inFunction ||= node instanceof ASTNode.FunctionDefinition;\n return node.children.some((child) =>\n child instanceof TreeNode\n ? visit(child, inFunction)\n : includeMacros &&\n child.location.start.index > start &&\n child.location.start.index < end &&\n (child.type === Keyword.MACRO_UNDEF || child.type === Keyword.MACRO_DEFINE_EXPRESSION)\n );\n };\n return visit(this._sourceIR!.program);\n }\n\n private _unsupportedForwardDeclaration(node: TreeNode): never {\n const ir = this._sourceIR!;\n throw mapExpandedShaderError(\n new GSError(\n GSErrorName.CompilationError,\n \"Inherited declarations require incompatible forward signatures or depend on a later macro or precision context.\",\n node.location,\n ir.source,\n undefined,\n \"UnsupportedForwardDeclaration\"\n ),\n ir.source,\n ir.sourceMap\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: this._declaration(text, node), index: node.location.start.index });\n }\n }\n }\n\n private _getGlobalMacroDeclarations(macros: readonly ASTNode.GlobalDeclaration[], out: ICodeSegment[]): void {\n const context = this.context;\n const referencedGlobalMacroASTs = context._referencedGlobalMacroASTs;\n referencedGlobalMacroASTs.length = 0;\n\n for (const symbol of context._referencedGlobalSymbols) {\n if (symbol.isInMacroBranch) referencedGlobalMacroASTs.push(symbol.astNode!);\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 const 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 const text =\n this.context._referencedGlobalMacroASTs.indexOf(child) !== -1\n ? this.getCachedCode(child)\n : this._forwardFunctionDeclarations.get(child);\n if (text !== undefined) {\n out.push({\n text: this._declaration(text, child),\n index: child.location.start.index\n });\n }\n } else if (child instanceof ASTNode.StructSpecifier) {\n if (this._forwardStructIndices.has(child)) {\n const text = this._declaration(\"\", child);\n if (text) out.push({ text, index: child.location.start.index });\n continue;\n }\n const context = this.context;\n const stage = context.stage;\n if (\n context._referencedGlobalMacroASTs.indexOf(child) !== -1 ||\n (stage === EShaderStage.VERTEX\n ? context.hasStructRole(child, ShaderStructRole.Attribute) ||\n context.hasStructRole(child, ShaderStructRole.Varying)\n : context.hasStructRole(child, ShaderStructRole.Varying) ||\n context.hasStructRole(child, ShaderStructRole.Mrt))\n ) {\n out.push({\n text: this._declaration(this.getCachedCode(child) ?? \"\", child),\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 (this.context._referencedGlobalMacroASTs.indexOf(variableDeclaration) !== -1) {\n out.push({\n text: this._declaration(\n this._forwardVariableIndices.has(variableDeclaration)\n ? \"\"\n : `${this.getCachedCode(variableDeclaration) ?? \"\"};`,\n variableDeclaration\n ),\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 /** Ownership of the declaration currently generating dependencies. @internal */\n protected get currentDeclarationOwner(): DeferredDeclarationOwnership | undefined {\n return this._currentDeclaration && this._declarationOwners.get(this._currentDeclaration);\n }\n\n private _referenceDeclaration(from: number, node: TreeNode): void {\n const owner = this._declarationOwners.get(node);\n if (!owner) return;\n let targets = this._declarationReferences.get(from);\n if (!targets) this._declarationReferences.set(from, (targets = new Set()));\n targets.add(owner.id);\n }\n\n private _emitDeclarationReferences(out: ICodeSegment[]): void {\n for (const [from, targets] of this._declarationReferences) {\n for (const to of targets) out.push({ text: ShaderInstructionEncoder.reference(from, to), index: -1 });\n }\n }\n\n private _declaration(text: string, node: TreeNode, activate = true): string {\n return ShaderInstructionEncoder.declaration(text, this._declarationOwners.get(node), activate);\n }\n}\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","import { BaseToken } from \"@galacean/engine-shader-parser/internal\";\nimport { ASTNode } from \"@galacean/engine-shader-parser/internal\";\nimport { ParserUtils, ShaderStructRole } from \"@galacean/engine-shader-parser/internal\";\nimport { StructProp } from \"@galacean/engine-shader-parser/internal\";\nimport { GLESVisitor } from \"./GLESVisitor\";\n\nexport class GLES100Visitor extends GLESVisitor {\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 \"\";\n }\n\n override visitPostfixExpression(node: ASTNode.PostfixExpression): string {\n const { children } = node;\n const postExpr = children[0];\n const context = this.context;\n const directRoot =\n postExpr instanceof ASTNode.PostfixExpression\n ? ParserUtils.unwrapBareIdentifier(postExpr, { allowParens: true })\n : undefined;\n const directSymbols = directRoot?.resolvedValueSymbols() ?? [];\n const unresolvedName =\n postExpr instanceof ASTNode.PostfixExpression ? ParserUtils.extractDirectIdentLexeme(postExpr) : null;\n const directRole = directRoot\n ? directSymbols.length\n ? context.getStructVarRole(directSymbols)\n : unresolvedName\n ? context.getUnresolvedStructVarRole(unresolvedName)\n : undefined\n : undefined;\n if (directRole === ShaderStructRole.Mrt) {\n const propReferenced = children[2] as BaseToken;\n const prop = context.mrtList.find((item) => item.ident.lexeme === propReferenced.lexeme);\n // The parser already validated struct fields (UndeclaredStructMember); a miss here is an\n // already-errored shader, so emit nothing rather than re-report.\n if (!prop) return \"\";\n return `gl_FragData[${prop.mrtIndex!}]`;\n }\n return super.visitPostfixExpression(node);\n }\n\n override visitJumpStatement(node: ASTNode.JumpStatement): string {\n const mode = this.context.getFragmentReturnMode(node);\n const terminal = this.context.isTerminalInterfaceReturn(node);\n if (mode === \"mrt\") return terminal ? \"\" : \"return;\";\n if (mode === \"color\") {\n const expression = node.children[1] as ASTNode.Expression;\n const assignment = `gl_FragColor = ${expression.codeGen(this)};`;\n return terminal ? assignment : `{ ${assignment} return; }`;\n }\n return super.visitJumpStatement(node);\n }\n}\n","import { EShaderStage } from \"@galacean/engine-shader-parser/internal\";\nimport { ASTNode } from \"@galacean/engine-shader-parser/internal\";\nimport { ShaderData } from \"@galacean/engine-shader-parser/internal\";\nimport { ShaderBuiltinSemantic } from \"@galacean/engine-shader-parser/internal\";\nimport { ParserUtils } from \"@galacean/engine-shader-parser/internal\";\nimport { ShaderEntryPointInfo } from \"@galacean/engine-shader-parser/internal\";\nimport { TreeNode } from \"@galacean/engine-shader-parser/internal\";\nimport { StructProp } from \"@galacean/engine-shader-parser/internal\";\nimport { GLESVisitor } from \"./GLESVisitor\";\nimport { ICodeSegment } from \"./types\";\nimport type { DeferredDeclarationOwnership } from \"@galacean/engine-shader-parser/internal\";\nimport { ShaderInstructionEncoder } from \"../ShaderInstructionEncoder\";\n\nconst V3_GL_FragColor = \"GS_glFragColor\";\nconst V3_GL_FragData = \"GS_glFragData\";\n\nexport class GLES300Visitor extends GLESVisitor {\n private readonly _outputDeclarations = new Map<\n string,\n { text: string; owners: Map<number, DeferredDeclarationOwnership>; unconditional: boolean }\n >();\n private _fragDataArrayRequired = false;\n private readonly _fragDataIndices = new Map<ASTNode.PostfixExpression, number>();\n private readonly _scannedFragmentFunctions = new Set<ShaderEntryPointInfo[\"functions\"][number]>();\n\n override reset(): void {\n super.reset();\n\n this._outputDeclarations.clear();\n this._fragDataArrayRequired = false;\n this._fragDataIndices.clear();\n this._scannedFragmentFunctions.clear();\n }\n\n override getOtherGlobal(data: ShaderData, out: ICodeSegment[]): void {\n super.getOtherGlobal(data, out);\n\n for (const output of this._outputDeclarations.values()) {\n out.push({\n text: output.unconditional\n ? output.text\n : ShaderInstructionEncoder.sharedDeclaration(output.text, Array.from(output.owners.values())),\n // A source macro block can start at zero and contain the first output use.\n index: -1\n });\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 = this.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 || typeSpecifier.structDependencies.length) {\n // Struct constructors still need the shared type-dependency visitor.\n return super.visitFunctionIdentifier(node);\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 }\n return ident;\n }\n\n override visitVariableIdentifier(node: ASTNode.VariableIdentifier): string {\n const context = this.context;\n if (context.stage === EShaderStage.FRAGMENT && node.builtinSemantic === ShaderBuiltinSemantic.FragmentOutput0) {\n this._registerFragColorVariable();\n return V3_GL_FragColor;\n }\n if (context.stage === EShaderStage.FRAGMENT && node.builtinSemantic === ShaderBuiltinSemantic.FragmentDepth) {\n return \"gl_FragDepth\";\n }\n if (context.stage === EShaderStage.FRAGMENT && node.builtinSemantic === ShaderBuiltinSemantic.FragmentOutputArray) {\n this._registerFragDataArray();\n return V3_GL_FragData;\n }\n return super.visitVariableIdentifier(node);\n }\n\n override visitPostfixExpression(node: ASTNode.PostfixExpression): string {\n if (!this._fragDataArrayRequired) {\n const index = this._fragDataIndices.get(node);\n if (index !== undefined) return this._registerFragDataVariable(index);\n }\n return super.visitPostfixExpression(node);\n }\n\n override visitJumpStatement(node: ASTNode.JumpStatement): string {\n const mode = this.context.getFragmentReturnMode(node);\n const terminal = this.context.isTerminalInterfaceReturn(node);\n if (mode === \"mrt\") return terminal ? \"\" : \"return;\";\n if (mode === \"color\") {\n this._registerFragColorVariable();\n\n const expression = node.children[1] as ASTNode.Expression;\n const assignment = `${V3_GL_FragColor} = ${expression.codeGen(this)};`;\n return terminal ? assignment : `{ ${assignment} return; }`;\n }\n return super.visitJumpStatement(node);\n }\n\n private _registerFragColorVariable(): void {\n this._registerOutput(V3_GL_FragColor, `out vec4 ${V3_GL_FragColor};`);\n }\n\n private _registerOutput(name: string, text: string): void {\n let output = this._outputDeclarations.get(name);\n if (!output) this._outputDeclarations.set(name, (output = { text, owners: new Map(), unconditional: false }));\n const owner = this.currentDeclarationOwner;\n if (owner) output.owners.set(owner.id, owner);\n else output.unconditional = true;\n }\n\n protected override prepareFragment(\n entryInfo: ShaderEntryPointInfo,\n outerGlobalMacroStatements: readonly ASTNode.GlobalDeclaration[]\n ): void {\n const pending = entryInfo.functions.slice();\n while (pending.length) {\n const fn = pending.pop()!;\n if (this._scannedFragmentFunctions.has(fn)) continue;\n this._scannedFragmentFunctions.add(fn);\n this._scanFragmentOutputs(fn.astNode);\n pending.push(...fn.calledFunctions);\n }\n for (const macro of outerGlobalMacroStatements) this._scanFragmentOutputs(macro);\n }\n\n private _scanFragmentOutputs(node: TreeNode): void {\n if (node instanceof ASTNode.PostfixExpression && node.children.length === 4) {\n const base = node.children[0];\n const index = node.children[2];\n if (\n base instanceof TreeNode &&\n index instanceof TreeNode &&\n ParserUtils.unwrapBareIdentifier(base, { allowParens: true })?.builtinSemantic ===\n ShaderBuiltinSemantic.FragmentOutputArray\n ) {\n const value = ParserUtils.constIntegerValue(index);\n if (value === undefined || value < 0) this._fragDataArrayRequired = true;\n else this._fragDataIndices.set(node, value);\n this._scanFragmentOutputs(index);\n return;\n }\n }\n if (\n node instanceof ASTNode.VariableIdentifier &&\n node.builtinSemantic === ShaderBuiltinSemantic.FragmentOutputArray\n ) {\n this._fragDataArrayRequired = true;\n return;\n }\n for (const child of node.children) {\n if (child instanceof TreeNode) this._scanFragmentOutputs(child);\n }\n }\n\n private _registerFragDataArray(): void {\n this._registerOutput(V3_GL_FragData, `layout(location = 0) out vec4 ${V3_GL_FragData}[gl_MaxDrawBuffers];`);\n }\n\n private _registerFragDataVariable(index: number): string {\n const name = `${V3_GL_FragData}${index}`;\n this._registerOutput(name, `layout(location = ${index}) out vec4 ${name};`);\n return name;\n }\n}\n","import type { IShaderInfo } from \"@galacean/engine-design\";\nimport { Logger, ReturnableObjectPool, ShaderLanguage } from \"@galacean/engine-core\";\nimport {\n GSError,\n GLESShaderInfo,\n type ShaderClueIR,\n type ShaderCoreInfo\n} from \"@galacean/engine-shader-parser/internal\";\nimport { GLES100Visitor, GLES300Visitor } from \"./codeGen\";\nimport type { GLESVisitor } from \"./codeGen/GLESVisitor\";\n\n/**\n * Static internal facade for GLES source generation.\n * @internal\n */\nexport class GLESBackend {\n private static readonly _gles100VisitorPool = new ReturnableObjectPool(GLES100Visitor);\n private static readonly _gles300VisitorPool = new ReturnableObjectPool(GLES300Visitor);\n\n private constructor() {}\n\n /**\n * Generates one GLES program with request-owned visitor state.\n * @param ir - Request-owned neutral parser IR consumed read-only.\n * @param coreInfo - Entry and stage-interface facts derived from the same IR.\n * @param target - GLES language version to emit.\n * @returns Generated vertex and fragment source.\n * @internal\n */\n static generate(ir: ShaderClueIR, coreInfo: ShaderCoreInfo, target: ShaderLanguage): IShaderInfo | undefined {\n const glesInfo = new GLESShaderInfo(ir, coreInfo);\n if (glesInfo.mrtOutputIssues.length || glesInfo.invalidMrtReturnLocations.length) {\n Logger.error(\n \"MRT outputs require unique non-negative locations, vec4 members, and returns through an assigned struct variable.\"\n );\n return undefined;\n }\n if (glesInfo.invalidVaryingReturnLocations.length) {\n Logger.error(\"Varying vertex entries must return a struct variable or same-type function result.\");\n return undefined;\n }\n if (glesInfo.structMemberOwnerIssues.length) {\n Logger.error(\"A struct member reference cannot be lowered safely across runtime macro expansion.\");\n return undefined;\n }\n\n return target === ShaderLanguage.GLSLES100\n ? GLESBackend._generateWithPool(GLESBackend._gles100VisitorPool, ir, coreInfo)\n : GLESBackend._generateWithPool(GLESBackend._gles300VisitorPool, ir, coreInfo);\n }\n\n private static _generateWithPool<T extends GLESVisitor>(\n pool: ReturnableObjectPool<T>,\n ir: ShaderClueIR,\n coreInfo: ShaderCoreInfo\n ): IShaderInfo | undefined {\n const visitor = pool.get();\n try {\n return visitor.generate(ir, coreInfo);\n } catch (error) {\n visitor.dispose();\n if (!(error instanceof GSError)) throw error;\n Logger.error(`${error.file ? `${error.file}: ` : \"\"}${error.code ? `${error.code}: ` : \"\"}${error.toString()}`);\n return undefined;\n } finally {\n pool.return(visitor);\n }\n }\n}\n","import { Logger, ShaderLanguage } from \"@galacean/engine-core\";\nimport type { IRenderStates, IShaderSource } from \"@galacean/engine-design\";\nimport type { IShaderProgramSource } from \"@galacean/engine-design/types/shader-compiler/IShaderProgramSource\";\nimport { Color } from \"@galacean/engine-math\";\nimport {\n GSError,\n ShaderCoreInfo,\n type ParsedShaderPassData,\n type ShaderClueIR,\n type ShaderSourceParseResult\n} from \"@galacean/engine-shader-parser/internal\";\nimport { GLESBackend } from \"./GLESBackend\";\nimport { ShaderInstructionEncoder } from \"./ShaderInstructionEncoder\";\n\nclass ShaderSourceParseError extends Error {\n constructor(readonly errors: readonly Error[]) {\n super(errors.map((error) => error.toString()).join(\"\\n\"));\n this.name = \"ShaderSourceParseError\";\n }\n}\n\n/**\n * Rejects a partial ShaderLab structure when source parsing produced errors.\n * @param result - ShaderLab source-parser result.\n * @returns Complete parsed ShaderLab structure.\n * @throws ShaderSourceParseError when structural source diagnostics exist.\n * @internal\n */\nexport function requireValidShaderSource(result: ShaderSourceParseResult): IShaderSource {\n if (result.errors.length) throw new ShaderSourceParseError(result.errors);\n return result.shaderSource;\n}\n\n/**\n * Generates one backend program from a parser-owned pass without reparsing it.\n * @param parsed - Neutral parser output.\n * @param vertexEntry - Vertex entry name.\n * @param fragmentEntry - Fragment entry name.\n * @param backend - Target GLES language.\n * @param coreInfo - Optional stage facts already derived from this exact parser result.\n * @returns Generated program, or `undefined` when parser or entry admission fails.\n * @internal\n */\nexport function generateParsedShaderPassData(\n parsed: ParsedShaderPassData,\n vertexEntry: string,\n fragmentEntry: string,\n backend: ShaderLanguage,\n coreInfo?: ShaderCoreInfo\n): IShaderProgramSource | undefined {\n if (parsed.blockingErrors.length) {\n for (const error of parsed.blockingErrors) Logger.error(error.toString());\n return undefined;\n }\n if (!parsed.ir) return undefined;\n const resolvedCoreInfo = coreInfo ?? ShaderCoreInfo.create(parsed.ir, vertexEntry, fragmentEntry);\n return generateShaderProgram(parsed.ir, resolvedCoreInfo, backend, parsed.preprocessorExpressions);\n}\n\nfunction generateShaderProgram(\n ir: ShaderClueIR,\n coreInfo: ShaderCoreInfo,\n backend: ShaderLanguage,\n preprocessorExpressions: ParsedShaderPassData[\"preprocessorExpressions\"]\n): IShaderProgramSource | undefined {\n if (!coreInfo.vertexEntry.functions.length) {\n Logger.error(`Vertex entry function '${coreInfo.vertexEntry.name}' not found.`);\n return undefined;\n }\n if (!coreInfo.fragmentEntry.functions.length) {\n Logger.error(`Fragment entry function '${coreInfo.fragmentEntry.name}' not found.`);\n return undefined;\n }\n if (coreInfo.vertexEntry.hasDefiniteAmbiguity) {\n Logger.error(`Vertex entry function '${coreInfo.vertexEntry.name}' resolves to multiple declarations.`);\n return undefined;\n }\n if (coreInfo.fragmentEntry.hasDefiniteAmbiguity) {\n Logger.error(`Fragment entry function '${coreInfo.fragmentEntry.name}' resolves to multiple declarations.`);\n return undefined;\n }\n if (coreInfo.roleConflicts.length) {\n Logger.error(\"A shader IO struct cannot serve multiple stage-interface roles.\");\n return undefined;\n }\n const result = GLESBackend.generate(ir, coreInfo, backend);\n if (result) {\n result.vertexShaderInstructions = ShaderInstructionEncoder.parse(result.vertex, preprocessorExpressions);\n result.fragmentShaderInstructions = ShaderInstructionEncoder.parse(result.fragment, preprocessorExpressions);\n result.vertex = ShaderInstructionEncoder.source(result.vertex);\n result.fragment = ShaderInstructionEncoder.source(result.fragment);\n }\n return result;\n}\n\n/**\n * Converts parser-owned render states into JSON-safe precompile data.\n * @param renderStates - Parsed render-state maps.\n * @returns Serializable constant and variable maps.\n * @internal\n */\nexport function 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 { constantMap, variableMap: renderStates.variableMap };\n}\n\n/**\n * Formats a parser failure with include-source attribution.\n * @param error - Parser failure.\n * @returns User-facing error text.\n * @internal\n */\nexport function formatShaderError(error: Error): string {\n const text = error.toString();\n return error instanceof GSError && error.file ? `${error.file}: ${text}` : text;\n}\n","import { ShaderLanguage } from \"@galacean/engine-core\";\nimport type { IShaderSource } from \"@galacean/engine-design\";\nimport type { IShaderProgramSource } from \"@galacean/engine-design/types/shader-compiler/IShaderProgramSource\";\nimport {\n getParsedShaderPassPayload,\n normalizeShaderIncludeMap,\n ParserObjectPool,\n createRuntimeShaderTargetParser,\n parseRuntimeShaderPass,\n type IncludeMap,\n type ChunkOutputCache,\n ShaderSourceParser\n} from \"@galacean/engine-shader-parser/internal\";\nimport type { ParsedShaderPass } from \"@galacean/engine-shader-parser/shared\";\nimport { generateParsedShaderPassData, requireValidShaderSource } from \"./ShaderCompilation\";\n\n/**\n * Compiles ShaderLab sources into runtime GLES programs.\n *\n * Source parsing and backend generation remain independent of authoring diagnostics; structural\n * source errors reject compilation before partial runtime programs can be created. Offline `.shaderc`\n * validation lives in the bundler-only precompiler entry and is excluded from this runtime package surface.\n */\nexport class ShaderCompiler {\n private _includeMap: IncludeMap = {};\n private readonly _chunkOutputCache: ChunkOutputCache = new Map();\n private readonly _sourceParserObjectPool = new ParserObjectPool();\n private readonly _parserObjectPool = new ParserObjectPool();\n private readonly _runtimeParser = createRuntimeShaderTargetParser(this._parserObjectPool);\n\n /**\n * Replaces the `#include` lookup table and clears the derived chunk cache.\n * @param includeMap - Canonical include paths mapped to shader chunks.\n * @internal\n */\n _setIncludeMap(includeMap: IncludeMap): void {\n this._includeMap = normalizeShaderIncludeMap(includeMap);\n this._chunkOutputCache.clear();\n }\n\n /**\n * Parses one ShaderLab document into its source structure.\n * @param sourceCode - Complete ShaderLab source.\n * @returns Parsed subshaders, passes, entries, and render states.\n * @throws ShaderSourceParseError when source-structure diagnostics were produced.\n * @internal\n */\n _parseShaderSource(sourceCode: string): IShaderSource {\n this._chunkOutputCache.clear();\n return requireValidShaderSource(ShaderSourceParser.parseStrict(sourceCode, this._sourceParserObjectPool));\n }\n\n /**\n * Parses and generates one runtime ShaderLab pass.\n * @param source - GLSL source contained by the pass.\n * @param vertexEntry - Vertex entry function name.\n * @param fragmentEntry - Fragment entry function name.\n * @param backend - Target GLES language version.\n * @param sourceFile - Optional logical source location used for relative includes and attribution.\n * @param sourceScopeStarts - Inherited ShaderLab content boundaries from source parsing.\n * @returns Generated stage program, or `undefined` after a blocking parser or backend error.\n * @internal\n */\n _parseShaderPass(\n source: string,\n vertexEntry: string,\n fragmentEntry: string,\n backend: ShaderLanguage,\n sourceFile?: string,\n sourceScopeStarts?: readonly number[]\n ): IShaderProgramSource | undefined {\n const parsed = parseRuntimeShaderPass(\n source,\n this._includeMap,\n this._chunkOutputCache,\n sourceFile,\n this._parserObjectPool,\n this._runtimeParser,\n sourceScopeStarts\n );\n return generateParsedShaderPassData(parsed, vertexEntry, fragmentEntry, backend);\n }\n\n /**\n * Generates backend source from a pass returned by `ShaderAnalyzer.analyze()` without parsing it again.\n * @param pass - Opaque parsed-pass handle from the analyzer result.\n * @param backend - Target GLES language version.\n * @returns Variant-selectable instructions and unselected text for inspection, or `undefined` on validation failure.\n * @throws TypeError when `pass` was not created by the compatible shader-parser package instance.\n */\n generate(pass: ParsedShaderPass, backend: ShaderLanguage): IShaderProgramSource | undefined {\n const { data, vertexEntry, fragmentEntry, coreInfo } = getParsedShaderPassPayload(pass);\n return generateParsedShaderPassData(data, vertexEntry, fragmentEntry, backend, coreInfo);\n }\n}\n","import { Logger } from \"@galacean/engine-core\";\n\nexport { ShaderCompiler } from \"./ShaderCompiler\";\n\nexport { GSError, GSErrorName } from \"@galacean/engine-shader-parser/internal\";\n\n/**\n * Version of the shader compiler package, replaced with the package version during builds.\n */\nexport const version = `__buildVersion`;\n\nLogger.info(`Galacean Engine Shader Compiler Version: ${version}`);\n"],"names":["_instanceof","left","right","Symbol","hasInstance","_extends","Object","assign","target","i","arguments","length","source","key","prototype","hasOwnProperty","call","apply","ShaderRange","set","start","end","obj","constructor","_set_prototype_of","o","p","setPrototypeOf","__proto__","_inherits","subClass","superClass","TypeError","create","value","writable","configurable","_is_native_reflect_construct","result","Boolean","valueOf","Reflect","construct","_","_construct","Parent","args","Class","a","push","instance","Function","bind","_get_prototype_of","getPrototypeOf","_wrap_native_super","_cache","Map","undefined","toString","indexOf","has","get","Wrapper","enumerable","_array_like_to_array","arr","len","arr2","Array","_create_for_of_iterator_helper_loose","allowArrayLike","it","iterator","next","isArray","_unsupported_iterable_to_array","minLen","n","slice","name","from","test","done","VisitorContext","_lookupSymbol","SymbolInfo","_structRoles","_vertexUnresolvedVariableRoles","_fragmentUnresolvedVariableRoles","_vertexAmbiguousVariableNames","Set","_fragmentAmbiguousVariableNames","attributeStructs","attributeList","varyingStructs","varyingList","mrtStructs","mrtList","_referencedGlobalSymbols","_referencedGlobalMacroASTs","_structVariableRoles","codeCache","fragmentReturnModes","terminalInterfaceReturns","reset","resetAll","clear","_referencedAttributeList","_referencedVaryingList","_referencedMRTList","_referencedGlobals","_globalSymbolQueries","_passSymbolTable","getStructRole","declarations","resolvedRole","_step","_iterator","declaration","role","hasStructRole","registerStructTypes","structs","struct","registerStructVar","variable","stage","roles","EShaderStage","VERTEX","ambiguous","ident","existing","delete","add","getUnresolvedStructVarRole","variableName","getStructVarRole","symbols","symbol","VarSymbol","registerFragmentReturn","statement","mode","getFragmentReturnMode","registerTerminalInterfaceReturn","isTerminalInterfaceReturn","referenceAttribute","_referenceProp","lexeme","referenceVarying","referenceMRTProp","referenceGlobal","type","queries","_this__globalSymbolQueries","getSymbols","_this__referencedGlobals","namedSymbols","_1","onReferenceGlobal","_proto","list","refList","filter","item","onReferenceStructProps","TempArray","array","dispose","CodeGenVisitor","context","cache","node","code","getCachedCode","defaultCodeGen","children","pool","_tmpArrayPool","ret","child","BaseToken","codeGen","join","return","visitPostfixExpression","derivationLength","postExpr","prop","directRoot","ParserUtils","unwrapBareIdentifier","allowParens","resolvedValueSymbols","unresolvedName","extractDirectIdentLexeme","ShaderStructRole","Attribute","Varying","identNode","indexNode","visitVariableIdentifier","referenceGlobalSymbolNames","ESymbolType","Any","_step1","resolvedSymbols","_iterator1","FnSymbol","referenceFunction","location","index","_branch","getLexeme","referenceIndex","branch","FN","visitFunctionCall","fnSymbol","fnSymbols","paramList","ASTNode","FunctionCallParameterList","astNodes","paramNodes","finalSymbol","find","candidate","equal","paramInfoList","astNode","protoType","parameterList","params","parameter","ParameterDeclaration","paramsCode","MacroCallArgBlock","visitMacroCallFunction","isFunctionLikeMacro","aliasesNonBuiltinIdent","arg","AssignmentExpression","variableParam","argNode","macroName","visitStatementList","visitMacroDefine","paramsLexeme","isFunction","paramsToken","valueCode","valueExpression","visitSingleDeclaration","visitGlobalVariableDeclaration","fullType","FullySpecifiedType","typeSpecifier","isCustom","declarator","STRUCT","visitDeclaration","InitDeclaratorList","first","SingleDeclaration","Mrt","visitFunctionParameterList","parameterInfoList","out","MacroParamBlock","visitFunctionHeader","returnType","structDeclarations","visitJumpStatement","cmd","Keyword","RETURN","expr","Expression","returnVar","unwrapNodeByType","NoneTerminal","variable_identifier","returnFnCall","function_call","calledFunction","returnDeclarations","visitFunctionIdentifier","visitTypeSpecifier","visitStructSpecifier","isVaryingStruct","isAttributeStruct","isMRTStruct","macroExpressions","map","text","_this","propList","getVaryingProp","getAttributeProp","getMRTProp","sort","b","visitFunctionDefinition","fnNode","fnName","terminal","lastStatement","statements","JumpStatement","stageEntry","ReturnableObjectPool","ShaderInstructionEncoder","owner","activate","activation","id","group","sourceScope","sharedDeclaration","owners","reference","to","replace","parse","glsl","preprocessorExpressions","instructions","pos","backfillStack","directiveStart","_findDirectiveStart","_pushText","lineEnd","_findLogicalLineEnd","line","substring","charCodeAt","kind","charAt","fields","split","Number","ShaderPreprocessorDirective","Declaration","Reference","ids","match","_DIRECTIVE_RE","exec","keyword","rest","trim","idx","IfDef","IfNdef","cond","_parseCondition","_pushConditionInstruction","stack","prevIdx","elseIdx","Else","_backfillJump","endifIdx","Endif","pop","afterEndif","j","inst","funcMatch","_FUNC_MACRO_RE","DefineFunc","_stripLineComment","separator","_findInlineWhitespace","Define","DefineVal","Undef","t","m","IfCmp","op","v","IfExpr","expression","parsePreprocessorExpression","error","certain","hasExpandableIdentifier","e","Error","message","evaluationError","compact","toPreprocessorCondition","condition","c","nl","beforeBreak","charCode","last","directive","Text","OwnedText","every","concat","onlyPlaceholder","s","trimEnd","GLESVisitor","_globalCodeArray","_forwardFunctionDeclarations","_forwardStructIndices","_structCodeSegments","_forwardVariableIndices","_variableCodeSegments","_declarationOwners","_deferredPrototypes","_declarationReferences","_outerMacroDeclarations","protoProps","globalCodeArray","_currentDeclaration","getOtherGlobal","data","globalPrecisions","precision","generate","ir","coreInfo","shaderData","program","symbolTable","outerGlobalMacroDeclarations","io","structVariableRoles","forEach","vertexStructVariableRoles","fragmentStructVariableRoles","FRAGMENT","_sourceIR","deferredDeclarationOwnership","size","nextId","nextGroup","Math","max","_this_currentDeclarationOwner","_this_currentDeclarationOwner_id","currentDeclarationOwner","_referenceDeclaration","propDeclarations","props","unsupportedDeferredDeclarations","mapExpandedShaderError","GSError","GSErrorName","CompilationError","sourceMap","vertex","_vertexMain","vertexEntry","fragment","_fragmentMain","fragmentEntry","entryInfo","_preRegisterGlobalMacroRefs","_getGlobalSymbol","_getCustomStruct","_getGlobalMacroDeclarations","_emitDeclarationReferences","globalCode","outerGlobalMacroStatements","prepareFragment","functions","VEC4","some","_registerFragmentReturns","macros","macro","_walkMacroDefineTokens","MacroDefine","TreeNode","previous","FunctionDefinition","sm","codeGenResult","VAR","isInMacroBranch","segment","_declaration","StructSpecifier","VariableDeclaration","_getForwardDeclarations","values","_step2","_iterator2","definition","candidates","replacement","nextOwner","_this1","anchor","_isContextIndependent","_hasDeclarationContextBarrier","_unsupportedForwardDeclaration","outer","typeAnchor","_prepareForwardTypes","typeInfo","compatible","_canBranchesOverlap","branchSignature","canInheritanceBranchesCover","preceding","signature","_getForwardSignature","outerMacro","parameters","_loop","tokens","visit","IN","getLexicalDeclarationCoexistence","isUniform","_this_context__referencedGlobals_symbol_ident","includes","oldMacro","_this__forwardVariableIndices_get","dataType","min","Infinity","guarded","entry","splice","_step3","segments","_iterator3","parent","FunctionIdentifier","FunctionCallGeneric","structDependencies","GlobalDeclaration","final","types","hoistAnchor","_this__forwardStructIndices_get","needsHoist","dependencyAnchor","property","VariableIdentifier","MacroCallSymbol","MacroCallFunction","TypeSpecifier","MACRO_IF","MACRO_DEFINE_PARAMS","includeMacros","inFunction","PrecisionSpecifier","MACRO_UNDEF","MACRO_DEFINE_EXPRESSION","structNodes","referencedGlobalMacroASTs","GlobalMacroIfStatement","_visitGlobalMacroIfStatement","_this_getCachedCode","VariableDeclarationList","variableDeclarations","_this_getCachedCode1","variableDeclaration","targets","_defineProperties","descriptor","defineProperty","Constructor","GLES100Visitor","typeLexeme","PostfixExpression","directSymbols","directRole","propReferenced","mrtIndex","assignment","V3_GL_FragColor","V3_GL_FragData","GLES300Visitor","_outputDeclarations","_fragDataArrayRequired","_fragDataIndices","_scannedFragmentFunctions","output","unconditional","qualifier","builtinSemantic","ShaderBuiltinSemantic","FragmentOutput0","_registerFragColorVariable","FragmentDepth","FragmentOutputArray","_registerFragDataArray","_registerFragDataVariable","_registerOutput","pending","fn","_scanFragmentOutputs","calledFunctions","base","constIntegerValue","GLESBackend","glesInfo","GLESShaderInfo","mrtOutputIssues","invalidMrtReturnLocations","Logger","invalidVaryingReturnLocations","structMemberOwnerIssues","ShaderLanguage","GLSLES100","_generateWithPool","_gles100VisitorPool","_gles300VisitorPool","visitor","file","ShaderSourceParseError","Error1","errors","generateParsedShaderPassData","parsed","backend","blockingErrors","resolvedCoreInfo","ShaderCoreInfo","generateShaderProgram","hasDefiniteAmbiguity","roleConflicts","vertexShaderInstructions","fragmentShaderInstructions","ShaderCompiler","_includeMap","_chunkOutputCache","_sourceParserObjectPool","ParserObjectPool","_parserObjectPool","_runtimeParser","createRuntimeShaderTargetParser","_setIncludeMap","includeMap","normalizeShaderIncludeMap","_parseShaderSource","sourceCode","requireValidShaderSource","shaderSource","ShaderSourceParser","parseStrict","_parseShaderPass","sourceFile","sourceScopeStarts","parseRuntimeShaderPass","pass","getParsedShaderPassPayload","version","info"],"mappings":"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"}
|