@tsplc/compiler 0.2.1 → 0.2.2

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/dist/index.js.map CHANGED
@@ -14,12 +14,12 @@
14
14
  "import ts from \"typescript\";\nimport { dirname, join, relative, resolve } from \"node:path\";\nimport { error, type Diagnostic } from \"@tsplc/compiler/ir\";\nimport { runtimeSources } from \"../module-graph.ts\";\nimport { captureGraph } from \"./graph.ts\";\nimport { Model, type Root } from \"./model.ts\";\nimport { setterName, Specializer, SpecializeError } from \"./specialize.ts\";\n\n/** Directory of the modules elaboration generates, beside the entry module. */\nconst generatedDirectory = \".tsplc\";\n\n/**\n * A module the compiled program keeps as written: only types, enums, constants and the service\n * client. Everything else is plain TypeScript that elaboration compiles from its setup graph.\n */\nconst keptModule = (source: ts.SourceFile, sdk: string): boolean =>\n source.statements.every((statement) => {\n if (\n ts.isImportDeclaration(statement) ||\n ts.isExportDeclaration(statement) ||\n ts.isInterfaceDeclaration(statement) ||\n ts.isTypeAliasDeclaration(statement) ||\n ts.isEnumDeclaration(statement)\n )\n return true;\n if (!ts.isVariableStatement(statement)) return false;\n return statement.declarationList.declarations.every(\n (declaration) => declaration.initializer && constantInitializer(declaration.initializer, sdk),\n );\n });\n\nconst constantInitializer = (node: ts.Expression, sdk: string): boolean => {\n if (\n ts.isNumericLiteral(node) ||\n ts.isStringLiteral(node) ||\n ts.isNoSubstitutionTemplateLiteral(node) ||\n ts.isBigIntLiteral(node) ||\n node.kind === ts.SyntaxKind.TrueKeyword ||\n node.kind === ts.SyntaxKind.FalseKeyword\n )\n return true;\n if (ts.isPrefixUnaryExpression(node)) return constantInitializer(node.operand, sdk);\n if (\n ts.isAsExpression(node) ||\n ts.isSatisfiesExpression(node) ||\n ts.isParenthesizedExpression(node)\n )\n return constantInitializer(node.expression, sdk);\n if (ts.isPropertyAccessExpression(node)) return ts.isIdentifier(node.expression);\n if (ts.isIdentifier(node)) return true;\n if (ts.isObjectLiteralExpression(node))\n return node.properties.every(\n (property) =>\n (ts.isPropertyAssignment(property) && constantInitializer(property.initializer, sdk)) ||\n ts.isShorthandPropertyAssignment(property),\n );\n if (ts.isArrayLiteralExpression(node))\n return node.elements.every((element) => constantInitializer(element, sdk));\n if (ts.isCallExpression(node))\n return ts.isIdentifier(node.expression) && node.expression.text === \"createServiceClient\";\n return false;\n};\n\n/** Whether the program is plain TypeScript: classes with constructors, or setup code building state. */\nconst needsElaboration = (sources: readonly ts.SourceFile[], sdk: string): boolean =>\n sources.some(\n (source) =>\n !source.isDeclarationFile &&\n !source.fileName.startsWith(`${dirname(sdk)}/`) &&\n !keptModule(source, sdk) &&\n source.statements.some(\n (statement) =>\n ts.isClassDeclaration(statement) &&\n !statement.heritageClauses?.some((clause) =>\n clause.types.some((type) => type.expression.getText().startsWith(\"FunctionBlock\")),\n ),\n ),\n );\n\nconst importPath = (from: string, to: string): string => {\n const path = relative(dirname(from), to)\n .replace(/\\\\/g, \"/\")\n .replace(/\\.tsx?$/, \"\");\n return path.startsWith(\"./\") || path.startsWith(\"../\") ? path : `./${path}`;\n};\n\n/**\n * Compiles a plain TypeScript program: runs its setup, then specializes its scan code against\n * the objects setup built. The result is tsPLC dialect source the rest of the compiler reads.\n */\nexport const lowerElaboration = (\n program: ts.Program,\n sdk: string,\n entries: Readonly<Record<string, { module: string; export: string }>>,\n root: string,\n): { sources: Map<string, string>; diagnostics: Diagnostic[] } => {\n const sources = new Map<string, string>();\n const diagnostics: Diagnostic[] = [];\n const runtime = runtimeSources(program).filter(\n (source) => !source.isDeclarationFile && !source.fileName.startsWith(`${dirname(sdk)}/`),\n );\n if (!needsElaboration(runtime, sdk)) return { sources, diagnostics };\n const programEntries = Object.values(entries);\n if (programEntries.length !== 1)\n return {\n sources,\n diagnostics: [error(\"PLC1001\", \"A plain TypeScript program has one entry function.\")],\n };\n const [entry] = programEntries as [{ module: string; export: string }];\n const entryFile = resolve(root, entry.module).replace(/\\\\/g, \"/\");\n const entrySource = program.getSourceFile(entryFile);\n if (!entrySource)\n return {\n sources,\n diagnostics: [error(\"PLC1001\", `${entry.module} is not part of the program.`)],\n };\n const checker = program.getTypeChecker();\n const kept = new Set(\n runtime.filter((source) => keptModule(source, sdk)).map((source) => source.fileName),\n );\n const isKept = (file: string) => kept.has(file);\n const directory = join(dirname(entryFile), generatedDirectory).replace(/\\\\/g, \"/\");\n const rootModule = (item: Root) => `${directory}/${item.name}.ts`;\n\n try {\n const graph = captureGraph(entryFile, runtime);\n const model = new Model(graph, checker, program, entryFile);\n const specializer = new Specializer(model, checker, runtime, isKept, rootModule);\n const main = findEntry(entrySource, entry.export);\n const body = specializer.entry(main);\n\n // Exported data the hardware, HMI and server address is stored whether or not code reads it.\n for (const item of model.roots)\n if (item.exported && !isKept(item.file) && item.file === entryFile) specializer.use(item);\n\n const typesFile = `${directory}/types.ts`;\n const storage = new Map<string, string[]>();\n for (const item of specializer.roots) {\n const value = model.rootValues.get(item)!;\n const node = model.node(value)!;\n const lines: string[] = [];\n // Other modules can't assign an imported binding, so each global comes with a setter.\n const global = (name: string, layout: string, initial: string) =>\n lines.push(\n `export let ${name}: ${layout} = ${initial};`,\n `export function ${setterName(name)}(value: ${layout}): void { ${name} = value; }`,\n );\n if (specializer.flattened(item)) {\n const captured = node.captured;\n if (captured.kind === \"instance\") {\n for (const [name, layout] of specializer.instanceFields(node))\n global(name, layout, specializer.instanceFieldInitializer(node, name, layout));\n } else if (captured.kind === \"object\") {\n for (const [name, field] of Object.entries(captured.fields)) {\n const inner = model.node(field);\n const declared = node.type && model.fieldType(node.type, name, captured);\n if (!declared) continue;\n const stored = item.exported || specializer.stored(node, name);\n if (!stored && !inner) continue;\n const layout =\n inner && !item.exported\n ? specializer.storageType(inner)\n : specializer.layouts.declaredText(\n node.type?.getProperty(name)?.valueDeclaration,\n declared,\n field,\n name.charAt(0).toUpperCase() + name.slice(1),\n );\n if (!layout) continue;\n global(name, layout, specializer.valueText(field, declared, layout));\n }\n }\n } else {\n const declared = checker.getTypeAtLocation(item.declaration.name);\n const layout = specializer.layouts.declaredText(item.declaration, declared, value);\n global(item.name, layout, specializer.valueText(value, declared, layout));\n }\n storage.set(rootModule(item), lines);\n }\n\n const typeImports = (file: string) => [\n ...[...specializer.layouts.imports].map(\n ([module, names]) =>\n `import { ${[...names].join(\", \")} } from \"${importPath(file, module)}\";`,\n ),\n ...[...specializer.layouts.typeImports].map(\n ([module, names]) =>\n `import type { ${[...names].join(\", \")} } from \"${importPath(file, module)}\";`,\n ),\n ];\n const enums = specializer.layouts.enumNames;\n const interfaces = [...specializer.layouts.declarations.keys()].filter(\n (name) => !enums.includes(name),\n );\n const importTypes = (file: string) => [\n ...(enums.length\n ? [`import { ${enums.join(\", \")} } from \"${importPath(file, typesFile)}\";`]\n : []),\n ...(interfaces.length\n ? [`import type { ${interfaces.join(\", \")} } from \"${importPath(file, typesFile)}\";`]\n : []),\n ];\n sources.set(\n typesFile,\n [...typeImports(typesFile), ...specializer.layouts.declarations.values()].join(\"\\n\"),\n );\n for (const [file, lines] of storage)\n sources.set(file, [...typeImports(file), ...importTypes(file), ...lines].join(\"\\n\"));\n\n const header = [\n ...typeImports(entryFile),\n ...importTypes(entryFile),\n ...[...specializer.namespaces].map(\n ([name, file]) => `import * as ${name} from \"${importPath(entryFile, file)}\";`,\n ),\n ...[...specializer.imports].map(\n ([file, names]) =>\n `import { ${[...names].join(\", \")} } from \"${importPath(entryFile, file)}\";`,\n ),\n ...(specializer.sdkImports.size\n ? [`import { ${[...specializer.sdkImports].join(\", \")} } from \"@tsplc/compiler/clock\";`]\n : []),\n ...(specializer.typeImports.size\n ? [`import { ${[...specializer.typeImports].join(\", \")} } from \"@tsplc/compiler/types\";`]\n : []),\n ];\n sources.set(\n entryFile,\n [\n ...header,\n ...specializer.tableDeclarations,\n ...specializer.routines,\n `export function ${entry.export}(): void {`,\n ...body,\n \"}\",\n ].join(\"\\n\"),\n );\n // The plain modules now live in the generated code; keep only their types for type importers.\n for (const source of runtime)\n if (source.fileName !== entryFile && !isKept(source.fileName))\n sources.set(\n source.fileName,\n [\n ...source.statements\n .filter(\n (statement) =>\n ts.isInterfaceDeclaration(statement) ||\n ts.isTypeAliasDeclaration(statement) ||\n (ts.isImportDeclaration(statement) && statement.importClause?.isTypeOnly),\n )\n .map((statement) => statement.getText()),\n \"export {};\",\n ].join(\"\\n\"),\n );\n } catch (cause) {\n if (cause instanceof SpecializeError) {\n const start = cause.node.getStart();\n const source = cause.node.getSourceFile();\n const position = source.getLineAndCharacterOfPosition(start);\n diagnostics.push(\n error(\"PLC1010\", cause.message, {\n file: source.fileName,\n start,\n end: cause.node.getEnd(),\n line: position.line + 1,\n column: position.character + 1,\n }),\n );\n } else\n diagnostics.push(\n error(\n \"PLC1010\",\n cause instanceof Error\n ? process.env.TSPLC_DEBUG\n ? String(cause.stack)\n : cause.message\n : String(cause),\n ),\n );\n }\n return { sources, diagnostics };\n};\n\nconst findEntry = (\n source: ts.SourceFile,\n name: string,\n): ts.FunctionDeclaration | ts.ArrowFunction => {\n for (const statement of source.statements) {\n if (ts.isFunctionDeclaration(statement) && statement.name?.text === name && statement.body)\n return statement;\n if (ts.isVariableStatement(statement))\n for (const declaration of statement.declarationList.declarations)\n if (\n ts.isIdentifier(declaration.name) &&\n declaration.name.text === name &&\n declaration.initializer &&\n ts.isArrowFunction(declaration.initializer)\n )\n return declaration.initializer;\n }\n throw new Error(`${source.fileName} exports no function ${name}.`);\n};\n",
15
15
  "import ts from \"typescript\";\nimport { spawnSync } from \"node:child_process\";\nimport { existsSync, mkdtempSync, rmSync, writeFileSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\n/** What capture.ts needs: the program's runtime files and the bindings each declares. */\nexport interface CaptureRequest {\n entry: string;\n files: string[];\n bindings: Record<string, { values: string[]; classes: string[]; functions: string[] }>;\n}\n\nexport type CapturedValue =\n | { kind: \"undefined\" }\n | { kind: \"number\"; value: number }\n | { kind: \"boolean\"; value: boolean }\n | { kind: \"string\"; value: string }\n | { kind: \"bigint\"; value: string }\n | { kind: \"node\"; id: number };\n\nexport type CapturedNode =\n | { kind: \"object\"; fields: Record<string, CapturedValue> }\n | { kind: \"instance\"; file: string; name: string; fields: Record<string, CapturedValue> }\n | { kind: \"array\"; items: CapturedValue[] }\n | { kind: \"function\"; file: string; name: string }\n | { kind: \"service\"; path: string };\n\nexport interface CapturedGraph {\n nodes: CapturedNode[];\n /** Every module-level value binding, in module evaluation order. */\n bindings: { file: string; name: string; value: CapturedValue }[];\n}\n\nconst names = (source: ts.SourceFile) => {\n const found: CaptureRequest[\"bindings\"][string] = { values: [], classes: [], functions: [] };\n const bind = (name: ts.BindingName): void => {\n if (ts.isIdentifier(name)) found.values.push(name.text);\n else\n for (const element of name.elements) if (!ts.isOmittedExpression(element)) bind(element.name);\n };\n for (const statement of source.statements) {\n if (ts.isVariableStatement(statement))\n for (const declaration of statement.declarationList.declarations) bind(declaration.name);\n else if (ts.isClassDeclaration(statement) && statement.name)\n found.classes.push(statement.name.text);\n else if (ts.isFunctionDeclaration(statement) && statement.name && statement.body)\n found.functions.push(statement.name.text);\n }\n // Arrow functions bound to consts are functions too: a stored callback names its binding.\n for (const statement of source.statements)\n if (ts.isVariableStatement(statement))\n for (const declaration of statement.declarationList.declarations)\n if (\n ts.isIdentifier(declaration.name) &&\n declaration.initializer &&\n (ts.isArrowFunction(declaration.initializer) ||\n ts.isFunctionExpression(declaration.initializer))\n ) {\n found.values = found.values.filter((name) => name !== declaration.name.getText());\n found.functions.push(declaration.name.text);\n }\n return found;\n};\n\n/** Runs the program's setup in a Bun subprocess and returns the object graph it built. */\nexport const captureGraph = (entry: string, sources: readonly ts.SourceFile[]): CapturedGraph => {\n const files = sources.filter((source) => !source.isDeclarationFile);\n const request: CaptureRequest = {\n entry,\n files: files.map((source) => source.fileName),\n bindings: Object.fromEntries(files.map((source) => [source.fileName, names(source)])),\n };\n const directory = mkdtempSync(join(tmpdir(), \"tsplc-capture-\"));\n try {\n const file = join(directory, \"request.json\");\n writeFileSync(file, JSON.stringify(request));\n // The source tree runs capture.ts; a built package ships it beside the bundle.\n const script = [\"./capture.ts\", \"./elaborate-capture.js\"]\n .map((path) => fileURLToPath(new URL(path, import.meta.url)))\n .find((path) => existsSync(path));\n if (!script) throw new Error(\"The elaboration capture script is missing from this build.\");\n const result = spawnSync(process.execPath, [script, file], {\n encoding: \"utf8\",\n maxBuffer: 256 * 1024 * 1024,\n });\n if (result.status !== 0)\n throw new Error(`Running the program's setup failed:\\n${result.stderr.trim()}`);\n return JSON.parse(result.stdout) as CapturedGraph;\n } finally {\n rmSync(directory, { recursive: true, force: true });\n }\n};\n",
16
16
  "import ts from \"typescript\";\nimport type { CapturedGraph, CapturedNode, CapturedValue } from \"./graph.ts\";\n\n/** One step from an owner to the object it holds. */\nexport type Step = { kind: \"field\"; name: string } | { kind: \"index\"; index: number };\n\n/** Where a captured object is stored: a root binding and the steps to it. */\nexport interface Owner {\n root: Root;\n steps: readonly Step[];\n}\n\nexport interface Root {\n file: string;\n name: string;\n declaration: ts.VariableDeclaration;\n exported: boolean;\n}\n\nexport interface ModelNode {\n id: number;\n captured: CapturedNode;\n /** The declared type where the object is stored; undefined for functions and services. */\n type?: ts.Type;\n /** The first place setup reached it. Every other place holding it refers to this one. */\n owner?: Owner;\n}\n\n/** The captured setup graph with each object's owner and declared type. */\nexport class Model {\n readonly nodes: ModelNode[];\n readonly roots: Root[] = [];\n readonly rootValues = new Map<Root, CapturedValue>();\n\n constructor(\n readonly graph: CapturedGraph,\n readonly checker: ts.TypeChecker,\n readonly program: ts.Program,\n entry: string,\n ) {\n this.nodes = graph.nodes.map((captured, id) => ({ id, captured }));\n // Dependencies own what they build before the entry module's instances refer to it.\n const ordered = [\n ...graph.bindings.filter((binding) => binding.file !== entry),\n ...graph.bindings.filter((binding) => binding.file === entry),\n ];\n for (const binding of ordered) {\n const declaration = this.binding(binding.file, binding.name);\n const root: Root = {\n file: binding.file,\n name: binding.name,\n declaration,\n exported: Boolean(ts.getCombinedModifierFlags(declaration) & ts.ModifierFlags.Export),\n };\n this.roots.push(root);\n this.rootValues.set(root, binding.value);\n this.own(binding.value, { root, steps: [] }, checker.getTypeAtLocation(declaration.name));\n }\n }\n\n node(value: CapturedValue): ModelNode | undefined {\n return value.kind === \"node\" ? this.nodes[value.id] : undefined;\n }\n\n private binding(file: string, name: string): ts.VariableDeclaration {\n const source = this.program.getSourceFile(file);\n for (const statement of source?.statements ?? [])\n if (ts.isVariableStatement(statement))\n for (const declaration of statement.declarationList.declarations)\n if (ts.isIdentifier(declaration.name) && declaration.name.text === name)\n return declaration;\n throw new Error(`${file}: no module binding ${name}.`);\n }\n\n /** The class a captured instance belongs to. */\n classOf(node: ModelNode): ts.ClassDeclaration {\n const captured = node.captured;\n if (captured.kind !== \"instance\") throw new Error(\"Not a class instance.\");\n const source = this.program.getSourceFile(captured.file);\n const found = source?.statements.find(\n (statement): statement is ts.ClassDeclaration =>\n ts.isClassDeclaration(statement) && statement.name?.text === captured.name,\n );\n if (!found) throw new Error(`${captured.file}: no class ${captured.name}.`);\n return found;\n }\n\n /** A class field's declaration: a property, or a constructor parameter property. */\n member(\n declaration: ts.ClassDeclaration,\n name: string,\n ): ts.PropertyDeclaration | ts.ParameterDeclaration | undefined {\n for (const member of declaration.members) {\n if (ts.isPropertyDeclaration(member) && member.name.getText() === name) return member;\n if (ts.isConstructorDeclaration(member))\n for (const parameter of member.parameters)\n if (\n ts.isParameterPropertyDeclaration(parameter, member) &&\n parameter.name.getText() === name\n )\n return parameter;\n }\n return undefined;\n }\n\n /** The declared type of a field of `type` holding `value`, choosing the union member it matches. */\n fieldType(type: ts.Type, name: string, holder: CapturedNode): ts.Type | undefined {\n const variant = this.variant(type, holder);\n const property = variant.getProperty(name) ?? this.checker.getPropertyOfType(variant, name);\n return property && this.checker.getTypeOfSymbol(property);\n }\n\n /** The member of a union of object types that a captured object is, by its literal fields. */\n variant(type: ts.Type, value: CapturedNode): ts.Type {\n const candidates = (type.isUnion() ? type.types : [type]).filter(\n (member) => !(member.flags & ts.TypeFlags.Undefined),\n );\n if (candidates.length === 1 || value.kind !== \"object\") return candidates[0] ?? type;\n return (\n candidates.find((candidate) =>\n Object.entries(value.fields).every(([name, field]) => {\n const property = candidate.getProperty(name);\n if (!property) return false;\n const fieldType = this.checker.getTypeOfSymbol(property);\n return (\n !fieldType.isLiteral() || field.kind !== \"string\" || fieldType.value === field.value\n );\n }),\n ) ?? candidates[0]!\n );\n }\n\n elementType(type: ts.Type): ts.Type | undefined {\n const target = this.checker.getNonNullableType(type);\n return (\n this.checker.getIndexTypeOfType(target, ts.IndexKind.Number) ??\n (this.checker.isTupleType(target)\n ? this.checker.getTypeArguments(target as ts.TypeReference)[0]\n : undefined)\n );\n }\n\n private own(value: CapturedValue, owner: Owner, type: ts.Type | undefined): void {\n const node = this.node(value);\n if (!node || node.owner) return;\n node.owner = owner;\n node.type = type;\n const captured = node.captured;\n if (captured.kind === \"array\") {\n const element = type && this.elementType(type);\n captured.items.forEach((item, index) =>\n this.own(\n item,\n { root: owner.root, steps: [...owner.steps, { kind: \"index\", index }] },\n element,\n ),\n );\n } else if (captured.kind === \"object\") {\n for (const [name, field] of Object.entries(captured.fields))\n this.own(\n field,\n { root: owner.root, steps: [...owner.steps, { kind: \"field\", name }] },\n type && this.fieldType(type, name, captured),\n );\n } else if (captured.kind === \"instance\") {\n const declaration = this.classOf(node);\n for (const [name, field] of Object.entries(captured.fields)) {\n const member = this.member(declaration, name);\n this.own(\n field,\n { root: owner.root, steps: [...owner.steps, { kind: \"field\", name }] },\n member && this.checker.getTypeAtLocation(member.name),\n );\n }\n }\n }\n}\n",
17
- "import ts from \"typescript\";\nimport { Layouts, type LiteralEnum } from \"./layouts.ts\";\nimport type { CapturedValue } from \"./graph.ts\";\nimport type { Model, ModelNode, Root, Step } from \"./model.ts\";\n\ntype FunctionLike =\n | ts.FunctionDeclaration\n | ts.MethodDeclaration\n | ts.ArrowFunction\n | ts.FunctionExpression\n | ts.GetAccessorDeclaration;\n\n/** What an expression is while specializing: known now, or code the PLC runs. */\nexport type Value =\n /** An object setup built: a class instance, record, array, function or service. */\n | { kind: \"static\"; node: ModelNode }\n /** A literal or folded primitive. `undefined` is a value too. */\n | { kind: \"const\"; value: number | boolean | string | undefined | bigint }\n /** An array or record built in scan code from known parts, used before it needs storage. */\n | { kind: \"virtual\"; items?: Value[]; fields?: Map<string, Value> }\n /** A function value: a module function, method of a known instance, or a local arrow. */\n | { kind: \"function\"; declaration: FunctionLike; self?: ModelNode; env?: Env }\n /** Code the PLC runs. `declared` is the storage's declared type, before narrowing. */\n | {\n kind: \"code\";\n text: string;\n declared?: ts.Type;\n place?: boolean;\n iec?: string;\n /** A module global another module stores into through its setter; an import is read-only. */\n setter?: string;\n };\n\ntype Env = Map<ts.Symbol, Value>;\n\nconst constant = (value: number | boolean | string | undefined | bigint): Value => ({\n kind: \"const\",\n value,\n});\n\nexport class SpecializeError extends Error {\n constructor(\n readonly node: ts.Node,\n message: string,\n ) {\n super(message);\n }\n}\n\n/** Indented lines of one generated routine, with the local names it has used. */\nclass Emitter {\n readonly lines: string[] = [];\n private depth = 1;\n private readonly used = new Set<string>();\n private temporaries = 0;\n\n line(text: string): void {\n this.lines.push(`${\" \".repeat(this.depth)}${text}`);\n }\n open(text: string): void {\n this.line(text);\n this.depth++;\n }\n close(text = \"}\"): void {\n this.depth--;\n this.line(text);\n }\n local(name: string): string {\n let candidate = name;\n for (let index = 2; this.used.has(candidate); index++) candidate = `${name}_${index}`;\n this.used.add(candidate);\n return candidate;\n }\n temporary(): string {\n return this.local(`tsplcTemp${++this.temporaries}`);\n }\n}\n\ninterface Frame {\n emitter: Emitter;\n env: Env;\n self?: ModelNode;\n /** The routine's declared return type, for literal and optional results. */\n returns?: ts.Type;\n async: boolean;\n}\n\n/**\n * Evaluates the program's scan code against the setup graph. Everything setup decided (which\n * instance `this` is, what a field refers to, array lengths, config never written in scan code)\n * resolves at compile time; what is left becomes tsPLC dialect code over the stored state.\n */\nexport class Specializer {\n readonly layouts: Layouts;\n readonly routines: string[] = [];\n /** Modules generated code reads through a namespace import, by import name. */\n readonly namespaces = new Map<string, string>();\n /** Value imports from kept modules, by file. */\n readonly imports = new Map<string, Set<string>>();\n private readonly specialized = new Map<string, string>();\n private readonly routineNames = new Set<string>();\n private readonly assigned = new Set<ts.Symbol>();\n private readonly storedRoots = new Set<Root>();\n\n constructor(\n readonly model: Model,\n readonly checker: ts.TypeChecker,\n readonly sources: readonly ts.SourceFile[],\n readonly kept: (file: string) => boolean,\n readonly rootModule: (root: Root) => string,\n ) {\n this.layouts = new Layouts(\n model,\n checker,\n kept,\n sources.filter((source) => kept(source.fileName)),\n );\n for (const source of sources) this.collectAssignments(source);\n }\n\n // ---- Which fields scan code writes ----\n\n /** Fields scan code writes are state; the rest keep what setup gave them. */\n private collectAssignments(node: ts.Node, inConstructor = false): void {\n if (ts.isConstructorDeclaration(node)) inConstructor = true;\n if (!inConstructor) {\n const write = (target: ts.Expression): void => {\n while (ts.isParenthesizedExpression(target) || ts.isNonNullExpression(target))\n target = target.expression;\n if (ts.isPropertyAccessExpression(target)) this.markAssigned(target.name);\n else if (ts.isElementAccessExpression(target)) {\n let base: ts.Expression = target.expression;\n while (ts.isElementAccessExpression(base)) base = base.expression;\n if (ts.isPropertyAccessExpression(base)) this.markAssigned(base.name);\n }\n };\n if (ts.isBinaryExpression(node) && isAssignment(node.operatorToken.kind)) write(node.left);\n if (\n (ts.isPrefixUnaryExpression(node) || ts.isPostfixUnaryExpression(node)) &&\n (node.operator === ts.SyntaxKind.PlusPlusToken ||\n node.operator === ts.SyntaxKind.MinusMinusToken)\n )\n write(node.operand);\n }\n ts.forEachChild(node, (child) => this.collectAssignments(child, inConstructor));\n }\n\n private markAssigned(name: ts.MemberName): void {\n const symbol = this.checker.getSymbolAtLocation(name);\n if (!symbol) return;\n this.assigned.add(symbol);\n // A property of a union is a synthetic symbol over each member's own property.\n for (const declaration of symbol.declarations ?? []) {\n const own = (declaration as { symbol?: ts.Symbol }).symbol;\n if (own) this.assigned.add(own);\n }\n }\n\n /** The declaration symbol of a captured field, to ask whether scan code writes it. */\n private fieldSymbol(holder: ModelNode, name: string): ts.Symbol | undefined {\n if (holder.captured.kind === \"instance\") {\n const member = this.model.member(this.model.classOf(holder), name);\n return member && this.checker.getSymbolAtLocation(member.name);\n }\n if (!holder.type) return undefined;\n const variant = this.model.variant(holder.type, holder.captured);\n return variant.getProperty(name) ?? this.checker.getPropertyOfType(variant, name);\n }\n\n /** Whether a field holds state the PLC stores, rather than a value fixed at setup. */\n stored(holder: ModelNode, name: string): boolean {\n if (holder.owner?.root.exported) return true;\n return this.written(holder, name);\n }\n\n /** Whether scan code assigns the field itself. */\n private written(holder: ModelNode, name: string): boolean {\n const symbol = this.fieldSymbol(holder, name);\n if (!symbol) return false;\n if (this.assigned.has(symbol)) return true;\n // A union's property is written through any member's declaration of it.\n return (symbol.declarations ?? []).some((declaration) => {\n const own = (declaration as { symbol?: ts.Symbol }).symbol;\n return own !== undefined && this.assigned.has(own);\n });\n }\n\n /** Array elements are stored when the field holding the array is, or its root is exported. */\n private storedArray(array: ModelNode): boolean {\n const owner = array.owner;\n if (!owner) return false;\n if (owner.root.exported) return true;\n const last = owner.steps.at(-1);\n if (!last) return false;\n const holder = this.at(owner.root, owner.steps.slice(0, -1));\n return last.kind === \"field\" && holder !== undefined && this.stored(holder, last.name);\n }\n\n /** The node at a path from a root, following captured values. */\n private at(root: Root, steps: readonly Step[]): ModelNode | undefined {\n let value: CapturedValue | undefined = this.model.rootValues.get(root);\n for (const step of steps) {\n const node = value && this.model.node(value);\n if (!node) return undefined;\n const captured = node.captured;\n value =\n step.kind === \"index\"\n ? captured.kind === \"array\"\n ? captured.items[step.index]\n : undefined\n : captured.kind === \"object\" || captured.kind === \"instance\"\n ? captured.fields[step.name]\n : undefined;\n }\n return value && this.model.node(value);\n }\n\n // ---- Storage ----\n\n /** Dialect text for a stored node's place. */\n pathText(node: ModelNode): string {\n const owner = node.owner;\n if (!owner) throw new Error(\"An object with no owner has no storage.\");\n this.storedRoots.add(owner.root);\n const namespace = this.namespace(owner.root);\n let text = this.flattened(owner.root) ? namespace : `${namespace}.${owner.root.name}`;\n owner.steps.forEach((step, index) => {\n const holder = this.at(owner.root, owner.steps.slice(0, index));\n if (step.kind === \"index\") text += `[${step.index}]`;\n else if (/^\\d+$/.test(step.name) && holder?.type)\n text += `[${this.keyText(holder.type, step.name)}]`;\n else text += `.${step.name}`;\n });\n return text;\n }\n\n /** The enum member naming a key of a `Record<Enum, T>`. */\n private keyText(type: ts.Type, key: string): string {\n const keyType = type.aliasSymbol?.name === \"Record\" ? type.aliasTypeArguments?.[0] : undefined;\n const member = keyType && this.enumMemberName(keyType, Number(key));\n return member ? `${this.layouts.text(keyType!)}.${member}` : key;\n }\n\n /** A record or instance root becomes its own global list, one global per field. */\n flattened(root: Root): boolean {\n const node = this.model.node(this.model.rootValues.get(root)!);\n return node?.captured.kind === \"object\" || node?.captured.kind === \"instance\";\n }\n\n private namespace(root: Root): string {\n const name = pascal(root.name);\n this.namespaces.set(name, this.rootModule(root));\n return name;\n }\n\n /** Stores a root whether or not scan code reads it, as exported data must be. */\n use(root: Root): void {\n this.storedRoots.add(root);\n this.namespace(root);\n }\n\n /** Roots generated code reached, which need storage declarations. */\n get roots(): ReadonlySet<Root> {\n return this.storedRoots;\n }\n\n /** Whether anything inside a node is state the PLC stores. */\n private hasState(node: ModelNode): boolean {\n const captured = node.captured;\n if (node.owner?.root.exported) return true;\n if (captured.kind === \"instance\") return this.instanceFields(node).length > 0;\n if (captured.kind === \"array\")\n return (\n this.storedArray(node) ||\n captured.items.some((item) => {\n const inner = this.model.node(item);\n return inner !== undefined && isChild(inner, node) && this.hasState(inner);\n })\n );\n if (captured.kind === \"object\")\n return Object.entries(captured.fields).some(([name, value]) => {\n if (this.stored(node, name)) return true;\n const inner = this.model.node(value);\n return inner !== undefined && isChild(inner, node, name) && this.hasState(inner);\n });\n return false;\n }\n\n /**\n * The stored layout of a node, or undefined when nothing in it is stored. Records and arrays\n * keep their declared type; an instance stores a record of the fields that hold its state.\n */\n storageType(node: ModelNode): string | undefined {\n const captured = node.captured;\n if (!this.hasState(node)) return undefined;\n if (captured.kind === \"instance\") {\n const fields = this.instanceFields(node);\n return this.layoutName(\n `${captured.name}State`,\n fields.map(([field, text]) => `${field}: ${text};`).join(\" \"),\n );\n }\n if (captured.kind === \"array\") {\n const first = captured.items[0] && this.model.node(captured.items[0]);\n if (first?.captured.kind === \"instance\") {\n const states = captured.items.map((item) => this.storageType(this.model.node(item)!));\n if (new Set(states).size !== 1)\n throw new Error(\"Instances in one array must hold the same kinds of state.\");\n return `FixedArray<${states[0]}, ${captured.items.length}>`;\n }\n }\n if (!node.type) throw new Error(\"Stored state needs a declared type.\");\n return this.layouts.text(node.type, { kind: \"node\", id: node.id });\n }\n\n /** Records stored as a whole: anything in them is state. */\n private storedWhole(node: ModelNode): boolean {\n return node.captured.kind !== \"instance\" && this.hasState(node);\n }\n\n /** An instance's stored fields: what scan code writes, and owned objects holding state. */\n instanceFields(node: ModelNode): [string, string][] {\n const captured = node.captured;\n if (captured.kind !== \"instance\") return [];\n const declaration = this.model.classOf(node);\n return this.fieldNames(declaration).flatMap((name): [string, string][] => {\n const value = captured.fields[name] ?? { kind: \"undefined\" };\n const inner = this.model.node(value);\n const member = this.model.member(declaration, name);\n const type = member && this.checker.getTypeAtLocation(member.name);\n if (inner) {\n if (inner.captured.kind === \"function\" || inner.captured.kind === \"service\") return [];\n if (!isChild(inner, node, name)) {\n if (!this.stored(node, name)) return [];\n // A stored field holds its own copy of the record setup gave it.\n return type ? [[name, this.layouts.text(type, value)]] : [];\n }\n if (inner.captured.kind !== \"instance\" && this.stored(node, name) && type)\n return [[name, this.layouts.text(type, value)]];\n const text = this.storageType(inner);\n return text ? [[name, text]] : [];\n }\n if (!this.stored(node, name)) return [];\n if (!type) throw new Error(`${captured.name}.${name} has no declared type.`);\n return [[name, this.layouts.declaredText(member, type, value)]];\n });\n }\n\n /** A class's fields in declaration order: properties and constructor parameter properties. */\n private fieldNames(declaration: ts.ClassDeclaration): string[] {\n const names: string[] = [];\n for (const member of declaration.members) {\n if (ts.isPropertyDeclaration(member)) names.push(member.name.getText());\n if (ts.isConstructorDeclaration(member))\n for (const parameter of member.parameters)\n if (ts.isParameterPropertyDeclaration(parameter, member))\n names.push(parameter.name.getText());\n }\n return names;\n }\n\n private readonly layoutNames = new Map<string, string>();\n private layoutName(base: string, body: string): string {\n const known = this.layoutNames.get(body);\n if (known) return known;\n let name = base;\n for (\n let index = 2;\n [...this.layoutNames.values()].includes(name) || this.layouts.declarations.has(name);\n index++\n )\n name = `${base}_${index}`;\n this.layoutNames.set(body, name);\n this.layouts.declarations.set(name, `export interface ${name} { ${body} }`);\n return name;\n }\n\n private fieldInitializer(\n holder: ModelNode,\n name: string,\n value: CapturedValue,\n type: string,\n ): string {\n const declaredType =\n holder.captured.kind === \"instance\"\n ? (() => {\n const member = this.model.member(this.model.classOf(holder), name);\n return member && this.checker.getTypeAtLocation(member.name);\n })()\n : holder.type && this.model.fieldType(holder.type, name, holder.captured);\n if (!declaredType) throw new Error(`${name} has no declared type.`);\n return this.valueText(value, declaredType, type);\n }\n\n /** A captured value as dialect text of its declared type. */\n valueText(value: CapturedValue, declared: ts.Type, layout?: string): string {\n const node = this.model.node(value);\n const literal = this.layouts.literalEnum(declared);\n if (literal)\n return this.layouts.member(literal, value.kind === \"string\" ? value.value : undefined);\n const optional = this.isOptionalRecord(declared);\n if (optional) {\n const inner = this.checker.getNonNullableType(declared);\n const name = layout ?? this.layouts.text(declared, value);\n return value.kind === \"undefined\"\n ? `defaultValue<${name}>()`\n : `{ has: true, value: ${this.valueText(value, inner)} }`;\n }\n if (this.layouts.enumDeclaration(declared) && value.kind === \"number\") {\n const enumName = this.layouts.text(declared);\n const member = this.enumMemberName(declared, value.value);\n return member ? `${enumName}.${member}` : String(value.value);\n }\n if (!node) return this.literal(value);\n if (node.captured.kind === \"array\") {\n const element = this.model.elementType(declared);\n const items = node.captured.items;\n if (!items.length) return `defaultValue<${layout ?? this.layouts.text(declared, value)}>()`;\n return `[${items.map((item) => (element ? this.valueText(item, element) : this.literal(item))).join(\", \")}]`;\n }\n if (node.captured.kind === \"object\") return this.recordInitializer(node, declared);\n if (node.captured.kind === \"instance\") {\n const text = this.storageType(node);\n return text ? this.instanceInitializer(node) : \"{}\";\n }\n throw new Error(\"A function has no stored value.\");\n }\n\n instanceInitializer(node: ModelNode): string {\n return `{ ${this.instanceFields(node)\n .map(([name, layout]) => `${name}: ${this.instanceFieldInitializer(node, name, layout)}`)\n .join(\", \")} }`;\n }\n\n /** The initial value of one of an instance's stored fields. */\n instanceFieldInitializer(node: ModelNode, name: string, layout: string): string {\n const captured = node.captured;\n if (captured.kind !== \"instance\") throw new Error(\"Not an instance.\");\n const value = captured.fields[name] ?? { kind: \"undefined\" as const };\n const inner = this.model.node(value);\n if (inner?.captured.kind === \"instance\") return this.instanceInitializer(inner);\n if (\n inner?.captured.kind === \"array\" &&\n inner.captured.items.some((item) => this.model.node(item)?.captured.kind === \"instance\")\n )\n return `[${inner.captured.items.map((item) => this.instanceInitializer(this.model.node(item)!)).join(\", \")}]`;\n return this.fieldInitializer(node, name, value, layout);\n }\n\n private recordInitializer(node: ModelNode, declared: ts.Type): string {\n const captured = node.captured;\n if (captured.kind !== \"object\") throw new Error(\"Not a record.\");\n const tagged = this.layouts.tagged(declared);\n const variant = this.model.variant(declared, captured);\n const enumRecord = declared.aliasSymbol?.name === \"Record\";\n const properties = tagged\n ? this.taggedFields(tagged)\n : this.checker\n .getPropertiesOfType(enumRecord ? declared : variant)\n .map((property) => property.name);\n const parts = properties.map((name) => {\n const field = captured.fields[name];\n const fieldType =\n tagged && name === tagged.tag\n ? undefined\n : this.model.fieldType(enumRecord ? declared : variant, name, captured);\n if (tagged && name === tagged.tag) {\n const tag = this.layouts.literalEnum(this.tagType(declared, tagged))!;\n return `${name}: ${this.layouts.member(tag, field?.kind === \"string\" ? field.value : undefined)}`;\n }\n const memberType = fieldType ?? this.taggedFieldType(declared, tagged!, name);\n if (!field) return `${name}: defaultValue<${this.layouts.text(memberType)}>()`;\n return `${enumRecord ? `[${name}]` : name}: ${this.valueText(field, memberType)}`;\n });\n if (enumRecord) {\n const [keyType, valueType] = declared.aliasTypeArguments as [ts.Type, ts.Type];\n const literal = this.layouts.literalEnum(keyType);\n const entries = properties.map((name, index) => {\n const key = literal\n ? this.layouts.member(literal, name)\n : `${this.layouts.text(keyType)}.${this.enumMemberName(keyType, Number(name))}`;\n return `[${key}]: ${parts[index]!.slice(parts[index]!.indexOf(\": \") + 2)}`;\n });\n // An enum that is also optional elsewhere has an Undefined member the table must cover.\n if (literal?.optional)\n entries.unshift(\n `[${this.layouts.member(literal, undefined)}]: ${this.defaultOf(valueType)}`,\n );\n return `{ ${entries.join(\", \")} }`;\n }\n return `{ ${parts.join(\", \")} }`;\n }\n\n private taggedFields(tagged: { tag: string; variants: ts.Type[] }): string[] {\n const names = [tagged.tag];\n for (const variant of tagged.variants)\n for (const property of variant.getProperties())\n if (!names.includes(property.name)) names.push(property.name);\n return names;\n }\n\n private taggedFieldType(\n declared: ts.Type,\n tagged: { tag: string; variants: ts.Type[] },\n name: string,\n ): ts.Type {\n for (const variant of tagged.variants) {\n const property = variant.getProperty(name);\n if (property) return this.checker.getTypeOfSymbol(property);\n }\n throw new Error(`${name} is in no variant of ${this.checker.typeToString(declared)}.`);\n }\n\n private tagType(declared: ts.Type, tagged: { tag: string; variants: ts.Type[] }): ts.Type {\n this.layouts.text(declared);\n const property = this.checker.getPropertyOfType(declared, tagged.tag);\n return property ? this.checker.getTypeOfSymbol(property) : declared;\n }\n\n private enumMemberName(type: ts.Type, value: number): string | undefined {\n return this.layouts\n .enumDeclaration(type)\n ?.members.find((member) => this.checker.getConstantValue(member) === value)\n ?.name.getText();\n }\n\n private literal(value: CapturedValue): string {\n switch (value.kind) {\n case \"number\":\n return String(value.value);\n case \"boolean\":\n return String(value.value);\n case \"string\":\n return JSON.stringify(value.value);\n case \"bigint\":\n return `${value.value}n`;\n default:\n throw new Error(`A captured ${value.kind} has no literal.`);\n }\n }\n\n private isOptionalRecord(type: ts.Type): boolean {\n if (!type.isUnion() || !type.types.some((part) => part.flags & ts.TypeFlags.Undefined))\n return false;\n return !this.layouts.literalEnum(type);\n }\n\n // ---- Routines ----\n\n /** Specializes the entry function, returning its body. */\n entry(declaration: ts.FunctionDeclaration | ts.ArrowFunction): string[] {\n const frame: Frame = {\n emitter: new Emitter(),\n env: new Map(),\n returns: undefined,\n async: false,\n };\n this.body(declaration.body!, frame);\n return frame.emitter.lines;\n }\n\n /** The name of `declaration` specialized for `self` and these known arguments. */\n routine(\n declaration: FunctionLike,\n self: ModelNode | undefined,\n args: Value[],\n closure?: Env,\n ): {\n name: string;\n args: string[];\n returns: ts.Type | undefined;\n } {\n const signature = this.checker.getSignatureFromDeclaration(declaration);\n const returnType = signature && this.checker.getReturnTypeOfSignature(signature);\n const isAsync = Boolean(\n ts.canHaveModifiers(declaration) &&\n ts\n .getModifiers(declaration)\n ?.some((modifier) => modifier.kind === ts.SyntaxKind.AsyncKeyword),\n );\n const frame: Frame = {\n emitter: new Emitter(),\n env: new Map(closure),\n self,\n returns: returnType && (isAsync ? this.checker.getAwaitedType(returnType) : returnType),\n async: isAsync,\n };\n const parameters: string[] = [];\n const runtimeArgs: string[] = [];\n const keys: string[] = [];\n const parameterList = ts.isGetAccessorDeclaration(declaration) ? [] : declaration.parameters;\n parameterList.forEach((parameter, index) => {\n const arg = args[index] ?? constant(undefined);\n const declared = this.checker.getTypeAtLocation(parameter);\n this.bindParameter(parameter.name, arg, declared, frame, parameters, runtimeArgs, keys);\n });\n // Captured runtime locals become parameters of the specialized routine.\n for (const [symbol, value] of closure ?? [])\n if (value.kind === \"code\") {\n const name = frame.emitter.local(symbol.name);\n const type = value.declared ? this.layouts.text(value.declared) : \"number\";\n parameters.push(`${name}: ${type}`);\n runtimeArgs.push(value.text);\n frame.env.set(symbol, { kind: \"code\", text: name, declared: value.declared, place: true });\n keys.push(`${symbol.name}=code`);\n }\n const key = `${declarationKey(declaration)}|${self?.id ?? \"\"}|${keys.join(\",\")}`;\n const known = this.specialized.get(key);\n if (known) return { name: known, args: runtimeArgs, returns: frame.returns };\n const name = this.routineName(declaration, self);\n this.specialized.set(key, name);\n if (ts.isArrowFunction(declaration) && !ts.isBlock(declaration.body)) {\n const result = this.expression(declaration.body, frame, frame.returns);\n frame.emitter.line(`return ${this.code(result, frame.returns, frame)};`);\n } else this.body(declaration.body!, frame);\n const resultText =\n frame.returns && !(frame.returns.flags & ts.TypeFlags.Void)\n ? this.layouts.text(frame.returns)\n : \"void\";\n const head = `${frame.async ? \"async \" : \"\"}function ${name}(${parameters.join(\", \")}): ${\n frame.async ? `Promise<${resultText}>` : resultText\n } {`;\n const where = self?.owner\n ? ` /* ${self.owner.root.name}${self.owner.steps.map(stepText).join(\"\")} */`\n : \"\";\n this.routines.push([`${head}${where}`, ...frame.emitter.lines, \"}\"].join(\"\\n\"));\n return { name, args: runtimeArgs, returns: frame.returns };\n }\n\n private routineName(declaration: FunctionLike, self: ModelNode | undefined): string {\n const own =\n declaration.name && ts.isIdentifier(declaration.name) ? declaration.name.text : undefined;\n const variable =\n !own &&\n declaration.parent &&\n ts.isVariableDeclaration(declaration.parent) &&\n ts.isIdentifier(declaration.parent.name)\n ? declaration.parent.name.text\n : undefined;\n const owner = self?.captured.kind === \"instance\" ? self.captured.name : undefined;\n const base = [owner, own ?? variable ?? \"callback\"].filter(Boolean).join(\"_\");\n let name = base;\n for (let index = 2; this.routineNames.has(name); index++) name = `${base}_${index}`;\n this.routineNames.add(name);\n return name;\n }\n\n private bindParameter(\n name: ts.BindingName,\n arg: Value,\n declared: ts.Type,\n frame: Frame,\n parameters: string[],\n runtimeArgs: string[],\n keys: string[],\n ): void {\n if (ts.isObjectBindingPattern(name)) {\n for (const element of name.elements) {\n const field = (element.propertyName ?? element.name).getText();\n const inner = this.member(arg, field, element, frame);\n this.bindParameter(\n element.name,\n inner,\n this.checker.getTypeAtLocation(element),\n frame,\n parameters,\n runtimeArgs,\n keys,\n );\n }\n return;\n }\n if (ts.isArrayBindingPattern(name))\n throw new SpecializeError(name, \"Array patterns are not supported in parameters.\");\n const symbol = this.checker.getSymbolAtLocation(name)!;\n if (arg.kind === \"code\" || (arg.kind === \"virtual\" && !this.isKnownShape(arg))) {\n const local = frame.emitter.local(name.text);\n const iec = this.layouts.iecName(name.parent);\n parameters.push(`${local}: ${iec ?? this.layouts.text(declared)}`);\n runtimeArgs.push(this.assignmentText(arg, declared, frame, iec));\n frame.env.set(symbol, { kind: \"code\", text: local, declared, place: true });\n keys.push(`${name.text}=code`);\n return;\n }\n if (\n arg.kind === \"const\" &&\n !(declared.flags & ts.TypeFlags.Undefined) &&\n typeof arg.value !== \"undefined\"\n ) {\n // Runtime primitives stay parameters, so one routine serves every value.\n const local = frame.emitter.local(name.text);\n parameters.push(`${local}: ${this.layouts.text(declared)}`);\n runtimeArgs.push(this.code(arg, declared, frame));\n frame.env.set(symbol, { kind: \"code\", text: local, declared, place: true });\n keys.push(`${name.text}=code`);\n return;\n }\n frame.env.set(symbol, arg);\n keys.push(`${name.text}=${valueKey(arg)}`);\n }\n\n private isKnownShape(value: Value): boolean {\n return (\n value.kind === \"virtual\" &&\n [...(value.fields?.values() ?? []), ...(value.items ?? [])].some(\n (inner) => inner.kind === \"static\" || inner.kind === \"function\",\n )\n );\n }\n\n // ---- Statements ----\n\n private body(node: ts.ConciseBody, frame: Frame): void {\n if (ts.isBlock(node)) for (const statement of node.statements) this.statement(statement, frame);\n else frame.emitter.line(`${this.code(this.expression(node, frame), undefined, frame)};`);\n }\n\n private statement(node: ts.Statement, frame: Frame): void {\n const { emitter } = frame;\n if (ts.isBlock(node)) {\n emitter.open(\"{\");\n for (const statement of node.statements) this.statement(statement, frame);\n emitter.close();\n return;\n }\n if (ts.isVariableStatement(node)) {\n const mutable = !(node.declarationList.flags & ts.NodeFlags.Const);\n for (const declaration of node.declarationList.declarations)\n this.declare(declaration, mutable, frame);\n return;\n }\n if (ts.isExpressionStatement(node)) {\n this.effect(node.expression, frame);\n return;\n }\n if (ts.isIfStatement(node)) {\n const condition = this.expression(node.expression, frame);\n if (\n condition.kind === \"const\" ||\n condition.kind === \"static\" ||\n condition.kind === \"function\"\n ) {\n const truthy = condition.kind === \"const\" ? Boolean(condition.value) : true;\n if (truthy) this.statement(node.thenStatement, frame);\n else if (node.elseStatement) this.statement(node.elseStatement, frame);\n return;\n }\n emitter.open(`if (${this.condition(condition, node.expression, frame)}) {`);\n this.inner(node.thenStatement, frame);\n if (node.elseStatement) {\n emitter.close(\"} else {\");\n emitter.open(\"\");\n emitter.lines.pop();\n this.inner(node.elseStatement, frame);\n }\n emitter.close();\n return;\n }\n if (ts.isReturnStatement(node)) {\n if (!node.expression) {\n emitter.line(\"return;\");\n return;\n }\n if (ts.isSatisfiesExpression(node.expression) && this.isNever(node.expression.type)) {\n emitter.line(`return ${this.defaultOf(frame.returns)};`);\n return;\n }\n const value = this.expression(node.expression, frame, frame.returns);\n emitter.line(`return ${this.code(value, frame.returns, frame)};`);\n return;\n }\n if (ts.isForOfStatement(node)) {\n this.forOf(node, frame);\n return;\n }\n if (ts.isSwitchStatement(node)) {\n this.switch(node, frame);\n return;\n }\n if (ts.isForStatement(node) || ts.isWhileStatement(node)) {\n throw new SpecializeError(\n node,\n \"Use for…of over an array; counted and while loops are not lowered yet.\",\n );\n }\n if (ts.isTryStatement(node)) {\n emitter.open(\"try {\");\n for (const statement of node.tryBlock.statements) this.statement(statement, frame);\n if (node.catchClause) {\n emitter.close(\n `} catch${node.catchClause.variableDeclaration ? ` (${node.catchClause.variableDeclaration.name.getText()})` : \"\"} {`,\n );\n emitter.open(\"\");\n emitter.lines.pop();\n for (const statement of node.catchClause.block.statements) this.statement(statement, frame);\n }\n emitter.close();\n return;\n }\n if (ts.isBreakStatement(node) || ts.isContinueStatement(node)) {\n emitter.line(node.getText());\n return;\n }\n if (ts.isEmptyStatement(node)) return;\n throw new SpecializeError(node, `${ts.SyntaxKind[node.kind]} is not supported in scan code.`);\n }\n\n /** A branch body: blocks keep their statements without another brace level. */\n private inner(node: ts.Statement, frame: Frame): void {\n if (ts.isBlock(node)) for (const statement of node.statements) this.statement(statement, frame);\n else this.statement(node, frame);\n }\n\n private isNever(type: ts.TypeNode): boolean {\n return type.kind === ts.SyntaxKind.NeverKeyword;\n }\n\n private defaultOf(type: ts.Type | undefined): string {\n if (!type || type.flags & ts.TypeFlags.Void) return \"\";\n if (type.flags & ts.TypeFlags.BooleanLike) return \"false\";\n if (type.flags & ts.TypeFlags.NumberLike) return \"0\";\n return `defaultValue<${this.layouts.text(type)}>()`;\n }\n\n private declare(declaration: ts.VariableDeclaration, mutable: boolean, frame: Frame): void {\n const initializer = declaration.initializer;\n if (!initializer)\n throw new SpecializeError(declaration, \"Initialize locals where they are declared.\");\n const value = this.expression(\n initializer,\n frame,\n declaration.type && this.checker.getTypeAtLocation(declaration.type),\n );\n this.bind(\n declaration.name,\n value,\n mutable,\n frame,\n this.checker.getTypeAtLocation(declaration.name),\n );\n }\n\n /** Binds a local, or each name of a destructuring pattern, to a value. */\n private bind(\n name: ts.BindingName,\n value: Value,\n mutable: boolean,\n frame: Frame,\n declared: ts.Type,\n ): void {\n if (!ts.isIdentifier(name) && value.kind === \"code\" && !value.place)\n value = this.temporaryOf(value, frame);\n if (ts.isObjectBindingPattern(name)) {\n for (const element of name.elements) {\n const field = (element.propertyName ?? element.name).getText();\n const inner = this.member(value, field, element, frame);\n this.bind(\n element.name,\n inner,\n mutable,\n frame,\n this.checker.getTypeAtLocation(element.name),\n );\n }\n return;\n }\n if (ts.isArrayBindingPattern(name)) {\n name.elements.forEach((element, index) => {\n if (ts.isOmittedExpression(element)) return;\n const inner = this.element(value, constant(index), element, frame);\n this.bind(\n element.name,\n inner,\n mutable,\n frame,\n this.checker.getTypeAtLocation(element.name),\n );\n });\n return;\n }\n const symbol = this.checker.getSymbolAtLocation(name)!;\n if (!mutable && value.kind !== \"code\") {\n frame.env.set(symbol, value);\n return;\n }\n if (!mutable && value.kind === \"code\" && value.place) {\n // A const naming a place is an alias, as an object binding is in TypeScript.\n if (this.isAggregate(declared)) {\n frame.env.set(symbol, value);\n return;\n }\n }\n const local = frame.emitter.local(name.text);\n const type = value.kind === \"code\" && value.iec ? value.iec : this.localType(declared);\n frame.emitter.line(\n `${mutable ? \"let\" : \"const\"} ${local}: ${type} = ${this.code(value, declared, frame)};`,\n );\n frame.env.set(symbol, {\n kind: \"code\",\n text: local,\n declared,\n place: true,\n iec: value.kind === \"code\" ? value.iec : undefined,\n });\n }\n\n /** A local's dialect type: a literal union keeps its enum; a lone literal widens to its base type. */\n private localType(declared: ts.Type): string {\n if (this.layouts.literalEnum(declared)) return this.layouts.text(declared);\n return this.layouts.text(this.checker.getBaseTypeOfLiteralType(declared));\n }\n\n private isAggregate(type: ts.Type): boolean {\n return Boolean(type.flags & ts.TypeFlags.Object) && !this.layouts.literalEnum(type);\n }\n\n private forOf(node: ts.ForOfStatement, frame: Frame): void {\n const iterable = this.expression(node.expression, frame);\n const items = this.items(iterable);\n const declaration = node.initializer;\n if (!ts.isVariableDeclarationList(declaration) || declaration.declarations.length !== 1)\n throw new SpecializeError(node.initializer, \"Declare one const in for…of.\");\n const name = declaration.declarations[0]!.name;\n const declared = this.checker.getTypeAtLocation(name);\n if (items) {\n for (const item of items) {\n frame.emitter.open(\"{\");\n this.bind(name, item, false, frame, declared);\n this.inner(node.statement, frame);\n frame.emitter.close();\n }\n return;\n }\n if (iterable.kind !== \"code\")\n throw new SpecializeError(node.expression, \"for…of needs an array.\");\n if (!ts.isIdentifier(name))\n throw new SpecializeError(name, \"Destructure a runtime element inside the loop.\");\n const local = frame.emitter.local(name.text);\n frame.emitter.open(`for (const ${local} of ${iterable.text}) {`);\n frame.env.set(this.checker.getSymbolAtLocation(name)!, {\n kind: \"code\",\n text: local,\n declared,\n place: true,\n });\n this.inner(node.statement, frame);\n frame.emitter.close();\n }\n\n /**\n * The elements of an array setup built or scan code assembled from known parts; undefined for\n * a runtime array. Known arrays unroll, so each element's identity stays known.\n */\n private items(value: Value): Value[] | undefined {\n if (value.kind === \"virtual\" && value.items) return value.items;\n if (value.kind !== \"static\") return undefined;\n const array = value.node;\n const captured = array.captured;\n if (captured.kind !== \"array\") return undefined;\n return captured.items.map((item, index) =>\n this.fromCaptured(item, array, { kind: \"index\", index }),\n );\n }\n\n private switch(node: ts.SwitchStatement, frame: Frame): void {\n const subject = this.expression(node.expression, frame);\n const declared = subject.kind === \"code\" ? subject.declared : undefined;\n if (subject.kind === \"const\") {\n let matched = false;\n for (const clause of node.caseBlock.clauses) {\n if (!matched) {\n if (ts.isDefaultClause(clause)) matched = true;\n else {\n const label = this.expression(clause.expression, frame);\n matched = label.kind === \"const\" && label.value === subject.value;\n }\n }\n if (!matched) continue;\n for (const statement of clause.statements) {\n if (ts.isBreakStatement(statement)) return;\n this.statement(statement, frame);\n }\n if (clause.statements.some((statement) => ts.isReturnStatement(statement))) return;\n }\n return;\n }\n frame.emitter.open(`switch (${this.code(subject, declared, frame)}) {`);\n for (const clause of node.caseBlock.clauses) {\n if (ts.isDefaultClause(clause)) {\n const unreachable = clause.statements.some(\n (statement) =>\n ts.isReturnStatement(statement) &&\n statement.expression &&\n ts.isSatisfiesExpression(statement.expression) &&\n this.isNever(statement.expression.type),\n );\n frame.emitter.open(\"default: {\");\n if (unreachable)\n frame.emitter.line(\n frame.returns && !(frame.returns.flags & ts.TypeFlags.Void)\n ? `return ${this.defaultOf(frame.returns)};`\n : \"break;\",\n );\n else for (const statement of clause.statements) this.statement(statement, frame);\n frame.emitter.close();\n continue;\n }\n const label = this.expression(clause.expression, frame, declared);\n frame.emitter.open(`case ${this.code(label, declared, frame)}: {`);\n for (const statement of clause.statements) this.statement(statement, frame);\n frame.emitter.close();\n }\n frame.emitter.close();\n }\n\n /** An expression evaluated for its effect. */\n private effect(node: ts.Expression, frame: Frame): void {\n if (ts.isVoidExpression(node)) {\n const value = this.expression(node.expression, frame);\n if (value.kind === \"code\") frame.emitter.line(`void ${value.text};`);\n return;\n }\n if (ts.isBinaryExpression(node) && isAssignment(node.operatorToken.kind)) {\n this.assign(node, frame);\n return;\n }\n if (\n (ts.isPrefixUnaryExpression(node) || ts.isPostfixUnaryExpression(node)) &&\n (node.operator === ts.SyntaxKind.PlusPlusToken ||\n node.operator === ts.SyntaxKind.MinusMinusToken)\n ) {\n const target = this.expression(node.operand, frame);\n const text = this.placeText(target, node.operand);\n frame.emitter.line(\n this.store(\n target,\n `${text} ${node.operator === ts.SyntaxKind.PlusPlusToken ? \"+\" : \"-\"} 1`,\n ),\n );\n return;\n }\n const value = this.expression(node, frame);\n if (value.kind === \"code\" && value.text.includes(\"(\")) frame.emitter.line(`${value.text};`);\n }\n\n private assign(node: ts.BinaryExpression, frame: Frame): void {\n const target = this.expression(node.left, frame);\n const text = this.placeText(target, node.left);\n const declared = target.kind === \"code\" ? target.declared : undefined;\n const operator = node.operatorToken.kind;\n if (operator === ts.SyntaxKind.QuestionQuestionEqualsToken) {\n const value = this.expression(\n node.right,\n frame,\n declared && this.checker.getNonNullableType(declared),\n );\n frame.emitter.open(`if (${this.isUndefinedText(text, declared)}) {`);\n frame.emitter.line(\n this.store(\n target,\n this.wrapDefined(\n this.code(value, declared && this.checker.getNonNullableType(declared), frame),\n declared,\n ),\n ),\n );\n frame.emitter.close();\n return;\n }\n const value = this.expression(node.right, frame, declared);\n if (operator === ts.SyntaxKind.EqualsToken) {\n frame.emitter.line(\n this.store(\n target,\n this.assignmentText(\n value,\n declared,\n frame,\n target.kind === \"code\" ? target.iec : undefined,\n ),\n ),\n );\n return;\n }\n const binary = compoundOperator(operator);\n if (!binary)\n throw new SpecializeError(node, `${node.operatorToken.getText()} is not supported.`);\n frame.emitter.line(\n this.store(target, `${text} ${binary} ${this.code(value, declared, frame)}`),\n );\n }\n\n /** A statement storing `text` into a place, through its module's setter when it has one. */\n private store(target: Value, text: string): string {\n if (target.kind !== \"code\") throw new Error(\"Not a place.\");\n return target.setter ? `${target.setter}(${text});` : `${target.text} = ${text};`;\n }\n\n /** The text stored into a place of `declared` type, wrapping an optional's value. */\n private assignmentText(\n value: Value,\n declared: ts.Type | undefined,\n frame: Frame,\n iec?: string,\n ): string {\n const target = iec ?? (declared && declared.flags & ts.TypeFlags.Number ? \"DINT\" : undefined);\n if (target && value.kind === \"code\" && needsConversion(value.iec ?? \"DINT\", target)) {\n // A TypeScript number holds any of these; in the PLC a value converts as an IEC assignment does.\n this.typeImports.add(\"wrap\");\n return `wrap<${target}>(${this.code(value, undefined, frame)})`;\n }\n if (declared && this.isOptionalRecord(declared)) {\n if (value.kind === \"const\" && value.value === undefined)\n return `defaultValue<${this.layouts.text(declared)}>()`;\n if (value.kind === \"code\" && value.declared && this.isOptionalRecord(value.declared))\n return value.text;\n return this.wrapDefined(\n this.code(value, this.checker.getNonNullableType(declared), frame),\n declared,\n );\n }\n return this.code(value, declared, frame);\n }\n\n private wrapDefined(text: string, declared: ts.Type | undefined): string {\n return declared && this.isOptionalRecord(declared) ? `{ has: true, value: ${text} }` : text;\n }\n\n private isUndefinedText(text: string, declared: ts.Type | undefined): string {\n if (declared && this.isOptionalRecord(declared)) return `!${text}.has`;\n const literal = declared && this.layouts.literalEnum(declared);\n if (literal) return `${text} === ${this.layouts.member(literal, undefined)}`;\n throw new Error(\"Only optional values can be undefined.\");\n }\n\n private placeText(value: Value, node: ts.Node): string {\n if (value.kind === \"code\" && value.place) return value.text;\n throw new SpecializeError(node, \"Assign to stored state: a field scan code owns, or a let.\");\n }\n\n // ---- Expressions ----\n\n expression(node: ts.Expression, frame: Frame, expected?: ts.Type): Value {\n if (\n ts.isParenthesizedExpression(node) ||\n ts.isNonNullExpression(node) ||\n ts.isAsExpression(node) ||\n ts.isSatisfiesExpression(node)\n )\n return this.expression(node.expression, frame, expected);\n if (ts.isNumericLiteral(node)) return constant(Number(node.text));\n if (ts.isStringLiteral(node) || ts.isNoSubstitutionTemplateLiteral(node))\n return constant(node.text);\n if (node.kind === ts.SyntaxKind.TrueKeyword) return constant(true);\n if (node.kind === ts.SyntaxKind.FalseKeyword) return constant(false);\n if (ts.isBigIntLiteral(node)) return constant(BigInt(node.text.slice(0, -1)));\n if (node.kind === ts.SyntaxKind.ThisKeyword) {\n if (!frame.self) throw new SpecializeError(node, \"`this` outside a method.\");\n return { kind: \"static\", node: frame.self };\n }\n if (ts.isIdentifier(node)) return this.identifier(node, frame);\n if (ts.isPropertyAccessExpression(node)) {\n const object = this.expression(node.expression, frame);\n if (node.questionDotToken && object.kind === \"const\" && object.value === undefined)\n return constant(undefined);\n return this.narrowed(this.member(object, node.name.text, node, frame), node);\n }\n if (ts.isElementAccessExpression(node)) {\n const object = this.expression(node.expression, frame);\n const index = this.expression(node.argumentExpression, frame);\n return this.element(object, index, node, frame);\n }\n if (ts.isCallExpression(node)) return this.call(node, frame, expected);\n if (ts.isAwaitExpression(node)) {\n const value = this.expression(node.expression, frame);\n return {\n kind: \"code\",\n text: `await ${this.code(value, undefined, frame)}`,\n declared: this.checker.getTypeAtLocation(node),\n };\n }\n if (ts.isPrefixUnaryExpression(node)) return this.unary(node, frame);\n if (ts.isBinaryExpression(node)) return this.binary(node, frame, expected);\n if (ts.isConditionalExpression(node)) {\n const condition = this.expression(node.condition, frame);\n if (condition.kind === \"const\")\n return this.expression(condition.value ? node.whenTrue : node.whenFalse, frame, expected);\n const declared = expected ?? this.checker.getTypeAtLocation(node);\n const whenTrue = this.expression(node.whenTrue, frame, declared);\n const whenFalse = this.expression(node.whenFalse, frame, declared);\n return {\n kind: \"code\",\n text: `(${this.condition(condition, node.condition, frame)} ? ${this.code(whenTrue, declared, frame)} : ${this.code(whenFalse, declared, frame)})`,\n declared,\n };\n }\n if (ts.isArrowFunction(node) || ts.isFunctionExpression(node))\n return { kind: \"function\", declaration: node, self: frame.self, env: frame.env };\n if (ts.isObjectLiteralExpression(node)) return this.objectLiteral(node, frame);\n if (ts.isArrayLiteralExpression(node)) {\n const items: Value[] = [];\n for (const element of node.elements) {\n if (ts.isSpreadElement(element)) {\n const spread = this.items(this.expression(element.expression, frame));\n if (!spread) throw new SpecializeError(element, \"Spread an array setup built.\");\n items.push(...spread);\n } else items.push(this.expression(element, frame));\n }\n return { kind: \"virtual\", items };\n }\n if (ts.isTemplateExpression(node))\n throw new SpecializeError(node, \"Template strings are not supported in scan code.\");\n throw new SpecializeError(node, `${ts.SyntaxKind[node.kind]} is not supported in scan code.`);\n }\n\n private identifier(node: ts.Identifier, frame: Frame): Value {\n if (node.text === \"undefined\") return constant(undefined);\n let symbol = this.checker.getSymbolAtLocation(node);\n if (!symbol) throw new SpecializeError(node, `${node.text} is not declared.`);\n const local = frame.env.get(symbol);\n if (local) return this.narrowed(local, node);\n while (symbol.flags & ts.SymbolFlags.Alias) symbol = this.checker.getAliasedSymbol(symbol);\n const own = frame.env.get(symbol);\n if (own) return own;\n const declaration = symbol.valueDeclaration ?? symbol.declarations?.[0];\n if (!declaration) throw new SpecializeError(node, `${node.text} has no declaration.`);\n if (ts.isFunctionDeclaration(declaration)) return { kind: \"function\", declaration };\n if (ts.isVariableDeclaration(declaration)) {\n const initializer = declaration.initializer;\n if (initializer && (ts.isArrowFunction(initializer) || ts.isFunctionExpression(initializer)))\n return { kind: \"function\", declaration: initializer };\n const root = this.model.roots.find((item) => item.declaration === declaration);\n if (root) return this.rootValue(root, node);\n if (\n ts.isVariableStatement(declaration.parent.parent) &&\n declaration.parent.parent.parent &&\n ts.isSourceFile(declaration.parent.parent.parent)\n ) {\n if (initializer) return this.expression(initializer, { ...frame, env: new Map() });\n }\n }\n if (ts.isEnumMember(declaration))\n return constant(this.checker.getConstantValue(declaration) as number);\n throw new SpecializeError(node, `${node.text} is not available in scan code.`);\n }\n\n private rootValue(root: Root, at: ts.Node): Value {\n const value = this.model.rootValues.get(root)!;\n const node = this.model.node(value);\n if (node) {\n if (this.kept(root.file) && node.captured.kind !== \"service\") return this.keptRoot(root);\n return { kind: \"static\", node };\n }\n if (this.kept(root.file) || root.declaration.parent.flags & ts.NodeFlags.Const)\n return this.capturedConstant(value, at);\n // A module `let` of a plain module is state in its own global list.\n const namespace = this.namespace(root);\n this.storedRoots.add(root);\n return {\n kind: \"code\",\n text: `${namespace}.${root.name}`,\n declared: this.checker.getTypeAtLocation(root.declaration.name),\n place: true,\n iec: this.layouts.iecName(root.declaration),\n setter: `${namespace}.${setterName(root.name)}`,\n };\n }\n\n /** A binding in a module the program keeps, read by its own name. */\n private keptRoot(root: Root): Value {\n const names = this.imports.get(root.file) ?? new Set<string>();\n names.add(root.name);\n this.imports.set(root.file, names);\n return {\n kind: \"code\",\n text: root.name,\n declared: this.checker.getTypeAtLocation(root.declaration.name),\n place: !(root.declaration.parent.flags & ts.NodeFlags.Const),\n };\n }\n\n private capturedConstant(value: CapturedValue, at: ts.Node): Value {\n if (value.kind === \"node\") throw new SpecializeError(at, \"Not a primitive.\");\n return constant(\n value.kind === \"undefined\"\n ? undefined\n : value.kind === \"bigint\"\n ? BigInt(value.value)\n : value.value,\n );\n }\n\n /** A known node or primitive read from a captured object at one step. */\n private fromCaptured(value: CapturedValue, holder: ModelNode, step: Step): Value {\n const node = this.model.node(value);\n if (node) {\n // A field scan code assigns as a whole is a place, holding its own copy of what setup gave it.\n if (\n (node.captured.kind === \"object\" || node.captured.kind === \"array\") &&\n step.kind === \"field\" &&\n this.written(holder, step.name)\n )\n return this.storedField(holder, step);\n return { kind: \"static\", node };\n }\n const stored =\n step.kind === \"field\" ? this.stored(holder, step.name) : this.storedArray(holder);\n if (stored) return this.storedField(holder, step);\n return this.capturedConstant(value, holder.type?.symbol?.valueDeclaration ?? this.sources[0]!);\n }\n\n /** The IEC width a captured field's declaration names. */\n private fieldIec(holder: ModelNode, name: string): string | undefined {\n if (holder.captured.kind === \"instance\")\n return this.layouts.iecName(this.model.member(this.model.classOf(holder), name));\n return this.layouts.iecName(this.fieldSymbol(holder, name)?.valueDeclaration);\n }\n\n /** The IEC width of an array's elements, from the declaration holding the array. */\n private elementIec(array: ModelNode): string | undefined {\n const owner = array.owner;\n const last = owner?.steps.at(-1);\n if (!owner || last?.kind !== \"field\") return undefined;\n const holder = this.at(owner.root, owner.steps.slice(0, -1));\n const declaration =\n holder &&\n (holder.captured.kind === \"instance\"\n ? this.model.member(this.model.classOf(holder), last.name)\n : this.fieldSymbol(holder, last.name)?.valueDeclaration);\n const node = declaration && (declaration as { type?: ts.TypeNode }).type;\n const element =\n node && ts.isArrayTypeNode(node)\n ? node.elementType\n : node && ts.isTypeReferenceNode(node)\n ? node.typeArguments?.[0]\n : undefined;\n return element ? this.layouts.iecName({ type: element } as unknown as ts.Node) : undefined;\n }\n\n private storedField(holder: ModelNode, step: Step): Value {\n const declared =\n step.kind === \"index\"\n ? holder.type && this.model.elementType(holder.type)\n : holder.captured.kind === \"instance\"\n ? (() => {\n const member = this.model.member(this.model.classOf(holder), step.name);\n return member && this.checker.getTypeAtLocation(member.name);\n })()\n : holder.type && this.model.fieldType(holder.type, step.name, holder.captured);\n const global =\n step.kind === \"field\" &&\n holder.owner?.steps.length === 0 &&\n this.flattened(holder.owner.root);\n return {\n kind: \"code\",\n text: `${this.pathText(holder)}${step.kind === \"index\" ? `[${step.index}]` : `.${step.name}`}`,\n declared,\n place: true,\n iec: step.kind === \"field\" ? this.fieldIec(holder, step.name) : this.elementIec(holder),\n ...(global && { setter: `${this.pathText(holder)}.${setterName(step.name)}` }),\n };\n }\n\n member(object: Value, name: string, at: ts.Node, frame: Frame): Value {\n if (object.kind === \"static\") {\n const node = object.node;\n const captured = node.captured;\n if (captured.kind === \"service\")\n return {\n kind: \"static\",\n node: this.serviceNode(captured.path ? `${captured.path}.${name}` : name),\n };\n if (captured.kind === \"instance\") {\n const declaration = this.model.classOf(node);\n const accessor = declaration.members.find(\n (member): member is ts.GetAccessorDeclaration =>\n ts.isGetAccessorDeclaration(member) && member.name.getText() === name,\n );\n if (accessor)\n return this.invoke(\n { kind: \"function\", declaration: accessor, self: node },\n [],\n at,\n frame,\n );\n const method = declaration.members.find(\n (member): member is ts.MethodDeclaration =>\n ts.isMethodDeclaration(member) && member.name.getText() === name,\n );\n if (method) return { kind: \"function\", declaration: method, self: node };\n }\n if (captured.kind === \"array\" && name === \"length\") return constant(captured.items.length);\n if (captured.kind === \"object\" || captured.kind === \"instance\") {\n const field = captured.fields[name];\n if (!field) {\n if (captured.kind === \"object\") return constant(undefined);\n throw new SpecializeError(at, `${name} is not set during setup.`);\n }\n return this.fromCaptured(field, node, { kind: \"field\", name });\n }\n throw new SpecializeError(at, `${name} cannot be read from this value.`);\n }\n if (object.kind === \"virtual\") {\n if (name === \"length\" && object.items) return constant(object.items.length);\n const field = object.fields?.get(name);\n if (field) return field;\n throw new SpecializeError(at, `${name} is not set.`);\n }\n if (object.kind === \"code\") {\n const declared = object.declared && this.fieldDeclared(object.declared, name, at);\n const property =\n object.declared &&\n this.checker.getPropertyOfType(this.checker.getNonNullableType(object.declared), name);\n return {\n kind: \"code\",\n text: `${object.text}.${name}`,\n declared,\n place: object.place,\n iec: this.layouts.iecName(property?.valueDeclaration),\n };\n }\n if (object.kind === \"const\" && object.value === undefined)\n throw new SpecializeError(at, `Reading ${name} of undefined.`);\n throw new SpecializeError(at, `${name} cannot be read from this value.`);\n }\n\n /** An optional's value where TypeScript has narrowed out undefined, as `x` reads after `x !== undefined`. */\n private narrowed(value: Value, at: ts.Node): Value {\n if (value.kind !== \"code\" || !value.declared || !this.isOptionalRecord(value.declared))\n return value;\n const type = this.checker.getTypeAtLocation(at);\n if (type.isUnion() && type.types.some((part) => part.flags & ts.TypeFlags.Undefined))\n return value;\n if (type.flags & ts.TypeFlags.Undefined) return value;\n return {\n kind: \"code\",\n text: `${value.text}.value`,\n declared: this.checker.getNonNullableType(value.declared),\n place: value.place,\n };\n }\n\n /** The declared type of a field of a runtime record, through optionals and tagged unions. */\n private fieldDeclared(type: ts.Type, name: string, at: ts.Node): ts.Type | undefined {\n const defined = this.checker.getNonNullableType(type);\n const tagged = this.layouts.tagged(defined);\n if (tagged)\n return name === tagged.tag\n ? this.tagType(defined, tagged)\n : this.taggedFieldType(defined, tagged, name);\n const property = this.checker.getPropertyOfType(defined, name);\n if (!property)\n throw new SpecializeError(\n at,\n `${name} is not a field of ${this.checker.typeToString(type)}.`,\n );\n return this.checker.getTypeOfSymbol(property);\n }\n\n private readonly services = new Map<string, ModelNode>();\n private serviceNode(path: string): ModelNode {\n const known = this.services.get(path);\n if (known) return known;\n const node: ModelNode = { id: -1 - this.services.size, captured: { kind: \"service\", path } };\n this.services.set(path, node);\n return node;\n }\n\n element(object: Value, index: Value, at: ts.Node, frame: Frame): Value {\n if (index.kind === \"const\" && typeof index.value === \"number\") {\n if (object.kind === \"virtual\" && object.items) {\n const item = object.items[index.value];\n if (!item) throw new SpecializeError(at, `Index ${index.value} is past the end.`);\n return item;\n }\n if (object.kind === \"static\" && object.node.captured.kind === \"array\") {\n const item = object.node.captured.items[index.value];\n if (!item) return constant(undefined);\n return this.fromCaptured(item, object.node, { kind: \"index\", index: index.value });\n }\n if (object.kind === \"static\" && object.node.captured.kind === \"object\") {\n const field = object.node.captured.fields[String(index.value)];\n if (!field) return constant(undefined);\n return this.fromCaptured(field, object.node, { kind: \"field\", name: String(index.value) });\n }\n }\n if (object.kind === \"static\") {\n const node = object.node;\n // A runtime index into stored data, or into a fixed table of plain values.\n const declared =\n node.type &&\n (node.captured.kind === \"array\"\n ? this.model.elementType(node.type)\n : this.recordElement(node.type));\n const text = this.storedNode(node) ? this.pathText(node) : this.table(node);\n return {\n kind: \"code\",\n text: `${text}[${this.code(index, undefined, frame)}]`,\n declared,\n place: true,\n };\n }\n if (object.kind === \"code\") {\n const declared =\n object.declared &&\n (this.model.elementType(object.declared) ?? this.recordElement(object.declared));\n return {\n kind: \"code\",\n text: `${object.text}[${this.code(index, undefined, frame)}]`,\n declared,\n place: object.place,\n };\n }\n if (object.kind === \"virtual\" && object.items) {\n const text = this.materialize(object, at, frame);\n return {\n kind: \"code\",\n text: `${text}[${this.code(index, undefined, frame)}]`,\n declared: this.checker.getTypeAtLocation(at),\n };\n }\n throw new SpecializeError(at, \"This value cannot be indexed.\");\n }\n\n private recordElement(type: ts.Type): ts.Type | undefined {\n return type.aliasSymbol?.name === \"Record\" ? type.aliasTypeArguments?.[1] : undefined;\n }\n\n private storedNode(node: ModelNode): boolean {\n return node.captured.kind === \"array\" ? this.storedArray(node) : this.storedWhole(node);\n }\n\n private readonly tables = new Map<number, string>();\n readonly tableDeclarations: string[] = [];\n /** A fixed table setup built, emitted once for scan code that indexes it at runtime. */\n private table(node: ModelNode): string {\n const known = this.tables.get(node.id);\n if (known) return known;\n if (!node.type) throw new Error(\"A table needs a declared type.\");\n const name = `tsplcTable${this.tables.size + 1}`;\n this.tables.set(node.id, name);\n const type = this.layouts.text(node.type, { kind: \"node\", id: node.id });\n this.tableDeclarations.push(\n `const ${name}: ${type} = ${this.valueText({ kind: \"node\", id: node.id }, node.type, type)};`,\n );\n return name;\n }\n\n /** Stores a scan-built array in a local, for indexing at runtime. */\n private materialize(value: Value, at: ts.Node, frame: Frame): string {\n const type = this.checker.getTypeAtLocation(at);\n const element = this.model.elementType(type);\n if (!element || value.kind !== \"virtual\" || !value.items)\n throw new SpecializeError(at, \"Not an array.\");\n const local = frame.emitter.temporary();\n frame.emitter.line(\n `const ${local}: FixedArray<${this.layouts.text(element)}, ${Math.max(value.items.length, 1)}> = [${value.items\n .map((item) => this.code(item, element, frame))\n .join(\", \")}];`,\n );\n return local;\n }\n\n private objectLiteral(node: ts.ObjectLiteralExpression, frame: Frame): Value {\n const fields = new Map<string, Value>();\n for (const property of node.properties) {\n if (ts.isPropertyAssignment(property))\n fields.set(\n property.name.getText(),\n this.expression(\n property.initializer,\n frame,\n this.checker.getContextualType(property.initializer),\n ),\n );\n else if (ts.isShorthandPropertyAssignment(property)) {\n const symbol = this.checker.getShorthandAssignmentValueSymbol(property);\n const local = symbol && frame.env.get(symbol);\n fields.set(property.name.text, local ?? this.expression(property.name, frame));\n } else throw new SpecializeError(property, \"Write each field of a record.\");\n }\n return { kind: \"virtual\", fields };\n }\n\n private unary(node: ts.PrefixUnaryExpression, frame: Frame): Value {\n const operand = this.expression(node.operand, frame);\n switch (node.operator) {\n case ts.SyntaxKind.ExclamationToken:\n if (operand.kind === \"const\") return constant(!operand.value);\n if (operand.kind === \"static\" || operand.kind === \"function\") return constant(false);\n return {\n kind: \"code\",\n text: `!${this.condition(operand, node.operand, frame)}`,\n declared: this.checker.getBooleanType(),\n };\n case ts.SyntaxKind.MinusToken:\n if (operand.kind === \"const\" && typeof operand.value === \"number\")\n return constant(-operand.value);\n return {\n kind: \"code\",\n text: `-${this.code(operand, undefined, frame)}`,\n declared: this.checker.getTypeAtLocation(node),\n };\n case ts.SyntaxKind.PlusToken:\n return operand;\n default:\n throw new SpecializeError(node, `${ts.tokenToString(node.operator)} is not supported.`);\n }\n }\n\n private binary(node: ts.BinaryExpression, frame: Frame, expected?: ts.Type): Value {\n const kind = node.operatorToken.kind;\n if (kind === ts.SyntaxKind.AmpersandAmpersandToken || kind === ts.SyntaxKind.BarBarToken) {\n const left = this.expression(node.left, frame);\n const and = kind === ts.SyntaxKind.AmpersandAmpersandToken;\n if (left.kind === \"const\") {\n if (Boolean(left.value) !== and) return left;\n return this.expression(node.right, frame, expected);\n }\n if (left.kind === \"static\" || left.kind === \"function\")\n return and ? this.expression(node.right, frame, expected) : left;\n const right = this.expression(node.right, frame, expected);\n if (right.kind === \"const\" && typeof right.value === \"boolean\") {\n if (right.value === and)\n return {\n kind: \"code\",\n text: this.condition(left, node.left, frame),\n declared: this.checker.getBooleanType(),\n };\n return constant(!and);\n }\n return {\n kind: \"code\",\n text: `(${this.condition(left, node.left, frame)} ${and ? \"&&\" : \"||\"} ${this.condition(right, node.right, frame)})`,\n declared: this.checker.getBooleanType(),\n };\n }\n if (kind === ts.SyntaxKind.QuestionQuestionToken) {\n const left = this.expression(node.left, frame);\n if (left.kind === \"const\")\n return left.value === undefined ? this.expression(node.right, frame, expected) : left;\n if (left.kind === \"static\") return left;\n const declared = left.kind === \"code\" ? left.declared : undefined;\n const right = this.expression(\n node.right,\n frame,\n declared && this.checker.getNonNullableType(declared),\n );\n return {\n kind: \"code\",\n text: `(${this.isUndefinedText(this.code(left, declared, frame), declared)} ? ${this.code(right, declared && this.checker.getNonNullableType(declared), frame)} : ${this.code(left, undefined, frame)}${declared && this.isOptionalRecord(declared) ? \".value\" : \"\"})`,\n declared: declared && this.checker.getNonNullableType(declared),\n };\n }\n if (isAssignment(kind)) throw new SpecializeError(node, \"Assign in a statement of its own.\");\n const equality = [\n ts.SyntaxKind.EqualsEqualsEqualsToken,\n ts.SyntaxKind.ExclamationEqualsEqualsToken,\n ts.SyntaxKind.EqualsEqualsToken,\n ts.SyntaxKind.ExclamationEqualsToken,\n ].includes(kind);\n const left = this.expression(node.left, frame);\n const right = this.expression(\n node.right,\n frame,\n left.kind === \"code\" ? left.declared : undefined,\n );\n const negate =\n kind === ts.SyntaxKind.ExclamationEqualsEqualsToken ||\n kind === ts.SyntaxKind.ExclamationEqualsToken;\n if (equality) {\n const folded = this.equal(left, right);\n if (folded !== undefined) return constant(negate ? !folded : folded);\n const [code, other] = left.kind === \"code\" ? [left, right] : [right as Value, left];\n if (code.kind === \"code\" && other.kind === \"const\" && other.value === undefined) {\n const test = this.isUndefinedText(code.text, code.declared);\n return {\n kind: \"code\",\n text: negate ? `!(${test})` : test,\n declared: this.checker.getBooleanType(),\n };\n }\n const declared = code.kind === \"code\" ? code.declared : undefined;\n const [leftText, rightText] = this.comparable(left, right, declared, frame);\n const text = `${leftText} ${negate ? \"!==\" : \"===\"} ${rightText}`;\n return { kind: \"code\", text: `(${text})`, declared: this.checker.getBooleanType() };\n }\n if (\n left.kind === \"const\" &&\n right.kind === \"const\" &&\n typeof left.value === \"number\" &&\n typeof right.value === \"number\"\n ) {\n const folded = foldNumber(kind, left.value, right.value);\n if (folded !== undefined) return constant(folded);\n }\n const operator = binaryToken(kind);\n if (!operator)\n throw new SpecializeError(node, `${node.operatorToken.getText()} is not supported.`);\n const declared = this.checker.getTypeAtLocation(node);\n const [leftText, rightText] = [\"<\", \"<=\", \">\", \">=\"].includes(operator)\n ? this.comparable(left, right, undefined, frame)\n : [this.code(left, undefined, frame), this.code(right, undefined, frame)];\n return { kind: \"code\", text: `(${leftText} ${operator} ${rightText})`, declared };\n }\n\n /**\n * Both sides of a comparison as text. Integers of different signedness, which TypeScript\n * compares as numbers, both widen to LINT so the PLC compares them exactly.\n */\n private comparable(\n left: Value,\n right: Value,\n declared: ts.Type | undefined,\n frame: Frame,\n ): [string, string] {\n const leftText = this.code(left, declared, frame),\n rightText = this.code(right, declared, frame);\n if (left.kind !== \"code\" || right.kind !== \"code\") return [leftText, rightText];\n const from = left.iec ?? \"DINT\",\n to = right.iec ?? \"DINT\";\n if (!needsConversion(from, to) || !needsConversion(to, from)) return [leftText, rightText];\n this.typeImports.add(\"wrap\");\n return [`wrap<LINT>(${leftText})`, `wrap<LINT>(${rightText})`];\n }\n\n /** Equality known now: two known objects, or a known object against undefined. */\n private equal(left: Value, right: Value): boolean | undefined {\n if (left.kind === \"const\" && right.kind === \"const\") return left.value === right.value;\n if (left.kind === \"static\" && right.kind === \"static\") return left.node === right.node;\n if (\n (left.kind === \"static\" && right.kind === \"const\") ||\n (left.kind === \"const\" && right.kind === \"static\")\n )\n return false;\n return undefined;\n }\n\n /** A boolean condition, including JavaScript truthiness of optionals and enums. */\n private condition(value: Value, at: ts.Node, frame: Frame): string {\n if (value.kind === \"code\" && value.declared) {\n const declared = value.declared;\n if (this.isOptionalRecord(declared) && !ts.isPrefixUnaryExpression(at)) {\n const type = this.checker.getTypeAtLocation(at);\n if (!(type.flags & ts.TypeFlags.BooleanLike)) return `${value.text}.has`;\n }\n const literal = this.layouts.literalEnum(declared);\n if (literal?.optional) return `${value.text} !== ${this.layouts.member(literal, undefined)}`;\n }\n return this.code(value, undefined, frame);\n }\n\n // ---- Calls ----\n\n private call(node: ts.CallExpression, frame: Frame, expected?: ts.Type): Value {\n const callee = node.expression;\n // Array methods and other calls the language provides.\n if (ts.isPropertyAccessExpression(callee) || ts.isPropertyAccessChain(callee)) {\n const name = callee.name.text;\n if (ts.isIdentifier(callee.expression) && callee.expression.text === \"Math\")\n return this.math(name, node, frame);\n if (\n ts.isIdentifier(callee.expression) &&\n callee.expression.text === \"Object\" &&\n name === \"values\"\n ) {\n const object = this.expression(node.arguments[0]!, frame);\n if (object.kind === \"static\" && object.node.captured.kind === \"object\")\n return {\n kind: \"virtual\",\n items: Object.entries(object.node.captured.fields).map(([field, value]) =>\n this.fromCaptured(value, object.node, { kind: \"field\", name: field }),\n ),\n };\n throw new SpecializeError(node, \"Object.values needs a record setup built.\");\n }\n const receiver = this.expression(callee.expression, frame);\n const items = this.items(receiver);\n if (items && isArrayMethod(name)) return this.arrayMethod(name, items, node, frame);\n if (receiver.kind === \"static\" && receiver.node.captured.kind === \"service\") {\n const path = receiver.node.captured.path ? `${receiver.node.captured.path}.${name}` : name;\n return this.serviceCall(path, node, frame);\n }\n const method = this.member(receiver, name, callee, frame);\n if (method.kind === \"static\" && method.node.captured.kind === \"service\")\n return this.serviceCall(method.node.captured.path, node, frame);\n return this.invoke(\n method,\n node.arguments.map((argument, index) => this.argument(argument, method, index, frame)),\n node,\n frame,\n expected,\n );\n }\n const target = this.expression(callee, frame);\n if (target.kind === \"static\" && target.node.captured.kind === \"service\")\n return this.serviceCall(target.node.captured.path, node, frame);\n if (target.kind === \"static\" && target.node.captured.kind === \"function\") {\n const fn = this.functionDeclaration(target.node.captured.file, target.node.captured.name);\n return this.invoke(\n { kind: \"function\", declaration: fn },\n node.arguments.map((argument, index) =>\n this.argument(argument, { kind: \"function\", declaration: fn }, index, frame),\n ),\n node,\n frame,\n expected,\n );\n }\n if (ts.isIdentifier(callee) && this.sdkCall(callee)) return this.sdk(callee.text, node, frame);\n return this.invoke(\n target,\n node.arguments.map((argument, index) => this.argument(argument, target, index, frame)),\n node,\n frame,\n expected,\n );\n }\n\n private argument(node: ts.Expression, callee: Value, index: number, frame: Frame): Value {\n let expected: ts.Type | undefined;\n if (callee.kind === \"function\" && !ts.isGetAccessorDeclaration(callee.declaration)) {\n const parameter = callee.declaration.parameters[index];\n expected = parameter && this.checker.getTypeAtLocation(parameter);\n }\n return this.expression(node, frame, expected);\n }\n\n private functionDeclaration(file: string, name: string): FunctionLike {\n const source = this.sources.find((item) => item.fileName === file);\n for (const statement of source?.statements ?? []) {\n if (ts.isFunctionDeclaration(statement) && statement.name?.text === name) return statement;\n if (ts.isVariableStatement(statement))\n for (const declaration of statement.declarationList.declarations)\n if (\n ts.isIdentifier(declaration.name) &&\n declaration.name.text === name &&\n declaration.initializer &&\n (ts.isArrowFunction(declaration.initializer) ||\n ts.isFunctionExpression(declaration.initializer))\n )\n return declaration.initializer;\n }\n throw new Error(`${file}: no function ${name}.`);\n }\n\n /** SDK functions scan code calls, such as the PLC clock. */\n private sdkCall(callee: ts.Identifier): boolean {\n let symbol = this.checker.getSymbolAtLocation(callee);\n while (symbol && symbol.flags & ts.SymbolFlags.Alias)\n symbol = this.checker.getAliasedSymbol(symbol);\n const file = symbol?.declarations?.[0]?.getSourceFile().fileName ?? \"\";\n return file.includes(\"/@tsplc/compiler/\") || file.includes(\"/packages/compiler/\");\n }\n\n private sdk(name: string, node: ts.CallExpression, frame: Frame): Value {\n const args = node.arguments.map((argument) =>\n this.code(this.expression(argument, frame), undefined, frame),\n );\n this.sdkImports.add(name);\n return {\n kind: \"code\",\n text: `${name}(${args.join(\", \")})`,\n declared: this.checker.getTypeAtLocation(node),\n };\n }\n\n readonly sdkImports = new Set<string>();\n /** Conversions generated code imports from `@tsplc/compiler/types`. */\n readonly typeImports = new Set<string>();\n\n private math(name: string, node: ts.CallExpression, frame: Frame): Value {\n const args = node.arguments.map((argument) => this.expression(argument, frame));\n if (args.every((arg) => arg.kind === \"const\" && typeof arg.value === \"number\")) {\n const values = args.map((arg) => (arg as { value: number }).value);\n const folded = (Math as unknown as Record<string, (...items: number[]) => number>)[name]?.(\n ...values,\n );\n if (typeof folded === \"number\") return constant(folded);\n }\n const texts = args.map((arg) => this.code(arg, undefined, frame));\n const declared = this.checker.getTypeAtLocation(node);\n switch (name) {\n case \"abs\": {\n const local = frame.emitter.temporary();\n frame.emitter.line(`const ${local}: number = ${texts[0]};`);\n return { kind: \"code\", text: `(${local} < 0 ? 0 - ${local} : ${local})`, declared };\n }\n case \"min\":\n case \"max\":\n if (texts.length !== 2) throw new SpecializeError(node, `Math.${name} takes two values.`);\n return {\n kind: \"code\",\n text: `(${texts[0]} ${name === \"min\" ? \"<\" : \">\"} ${texts[1]} ? ${texts[0]} : ${texts[1]})`,\n declared,\n };\n default:\n throw new SpecializeError(node, `Math.${name} is not supported.`);\n }\n }\n\n private serviceCall(path: string, node: ts.CallExpression, frame: Frame): Value {\n const client = this.model.roots.find((root) => {\n const value = this.model.node(this.model.rootValues.get(root)!);\n return value?.captured.kind === \"service\" && value.captured.path === \"\";\n });\n if (!client)\n throw new SpecializeError(node, \"Create the service client in a module of its own.\");\n const names = this.imports.get(client.file) ?? new Set<string>();\n names.add(client.name);\n this.imports.set(client.file, names);\n const args = node.arguments.map((argument) =>\n this.code(\n this.expression(argument, frame, this.checker.getContextualType(argument)),\n this.checker.getContextualType(argument),\n frame,\n ),\n );\n return {\n kind: \"code\",\n text: `${client.name}.${path}(${args.join(\", \")})`,\n declared: this.checker.getTypeAtLocation(node),\n };\n }\n\n /** Calls a function value: specializes it, or inlines a one-expression arrow. */\n private invoke(\n target: Value,\n args: Value[],\n at: ts.Node,\n frame: Frame,\n expected?: ts.Type,\n ): Value {\n if (target.kind !== \"function\") throw new SpecializeError(at, \"Only functions can be called.\");\n const declaration = target.declaration;\n if (\n (ts.isArrowFunction(declaration) || ts.isFunctionExpression(declaration)) &&\n target.env &&\n ts.isArrowFunction(declaration) &&\n !ts.isBlock(declaration.body)\n ) {\n // A callback with one expression inlines with its arguments bound.\n const inline: Frame = { ...frame, env: new Map(target.env), self: target.self ?? frame.self };\n declaration.parameters.forEach((parameter, index) => {\n const arg = args[index] ?? constant(undefined);\n const value = arg.kind === \"code\" && !arg.place ? this.temporaryOf(arg, frame) : arg;\n this.bind(parameter.name, value, false, inline, this.checker.getTypeAtLocation(parameter));\n });\n return this.expression(declaration.body, inline, expected);\n }\n const called = this.routine(declaration, target.self, args, target.env);\n const text = `${called.name}(${called.args.join(\", \")})`;\n const returns = called.returns;\n if (!returns || returns.flags & ts.TypeFlags.Void) {\n if (ts.isExpressionStatement(at.parent)) return { kind: \"code\", text, declared: returns };\n frame.emitter.line(`${text};`);\n return constant(undefined);\n }\n return { kind: \"code\", text, declared: returns };\n }\n\n /** A runtime value held in a const, so inlining doesn't evaluate it twice. */\n private temporaryOf(value: Value & { kind: \"code\" }, frame: Frame): Value {\n if (/^[\\w.[\\]]+$/.test(value.text)) return value;\n const local = frame.emitter.temporary();\n const type = value.declared ? this.localType(value.declared) : \"number\";\n frame.emitter.line(`const ${local}: ${type} = ${value.text};`);\n return { kind: \"code\", text: local, declared: value.declared, place: true };\n }\n\n private arrayMethod(name: string, items: Value[], node: ts.CallExpression, frame: Frame): Value {\n const callback = node.arguments[0] ? this.expression(node.arguments[0], frame) : undefined;\n const apply = (args: Value[]): Value => {\n if (!callback) throw new SpecializeError(node, `${name} needs a callback.`);\n return this.invoke(callback, args, node, frame);\n };\n switch (name) {\n case \"entries\":\n return {\n kind: \"virtual\",\n items: items.map((item, index) => ({ kind: \"virtual\", items: [constant(index), item] })),\n };\n case \"slice\": {\n const [start, end] = node.arguments.map((argument) => this.expression(argument, frame));\n if ((start && start.kind !== \"const\") || (end && end.kind !== \"const\"))\n throw new SpecializeError(node, \"slice needs constant bounds.\");\n return {\n kind: \"virtual\",\n items: items.slice(start?.value as number | undefined, end?.value as number | undefined),\n };\n }\n case \"map\":\n return {\n kind: \"virtual\",\n items: items.map((item, index) => this.settle(apply([item, constant(index)]), frame)),\n };\n case \"filter\": {\n const kept: Value[] = [];\n items.forEach((item, index) => {\n const test = apply([item, constant(index)]);\n if (test.kind !== \"const\")\n throw new SpecializeError(node, \"filter must decide from what setup built.\");\n if (test.value) kept.push(item);\n });\n return { kind: \"virtual\", items: kept };\n }\n case \"forEach\":\n items.forEach((item, index) => {\n const result = apply([item, constant(index)]);\n if (result.kind === \"code\") frame.emitter.line(`${result.text};`);\n });\n return constant(undefined);\n case \"some\":\n case \"every\": {\n const some = name === \"some\";\n const tests = items.map((item, index) => apply([item, constant(index)]));\n const runtime: string[] = [];\n for (const test of tests) {\n if (test.kind === \"const\") {\n if (Boolean(test.value) === some) return constant(some);\n continue;\n }\n runtime.push(this.condition(test, node.arguments[0] ?? node, frame));\n }\n if (!runtime.length) return constant(!some);\n return {\n kind: \"code\",\n text: `(${runtime.join(some ? \" || \" : \" && \")})`,\n declared: this.checker.getBooleanType(),\n };\n }\n case \"reduce\":\n case \"reduceRight\": {\n const order = name === \"reduce\" ? items : [...items].reverse();\n let accumulator = node.arguments[1]\n ? this.expression(node.arguments[1], frame)\n : order.shift()!;\n for (const item of order) accumulator = this.settle(apply([accumulator, item]), frame);\n return accumulator;\n }\n case \"find\": {\n for (const [index, item] of items.entries()) {\n const test = apply([item, constant(index)]);\n if (test.kind !== \"const\")\n throw new SpecializeError(node, \"find must decide from what setup built.\");\n if (test.value) return item;\n }\n return constant(undefined);\n }\n case \"includes\": {\n const target = this.expression(node.arguments[0]!, frame);\n const tests = items.map((item) => this.equal(item, target));\n if (tests.some((test) => test === true)) return constant(true);\n if (tests.every((test) => test === false)) return constant(false);\n throw new SpecializeError(node, \"includes must decide from what setup built.\");\n }\n default:\n throw new SpecializeError(node, `${name} is not supported.`);\n }\n }\n\n /** Keeps a runtime result in a local, so later code reads it rather than repeating it. */\n private settle(value: Value, frame: Frame): Value {\n if (value.kind !== \"code\" || /^[\\w.[\\]]+$/.test(value.text)) return value;\n const local = frame.emitter.temporary();\n frame.emitter.line(\n `const ${local}: ${value.declared ? this.localType(value.declared) : \"boolean\"} = ${value.text};`,\n );\n return { kind: \"code\", text: local, declared: value.declared, place: true };\n }\n\n // ---- Values as code ----\n\n /** Dialect text for a value, in a place of `expected` type when known. */\n code(value: Value, expected: ts.Type | undefined, frame: Frame): string {\n switch (value.kind) {\n case \"code\":\n if (\n expected &&\n value.declared &&\n this.isOptionalRecord(value.declared) &&\n !this.isOptionalRecord(expected)\n )\n return `${value.text}.value`;\n return value.text;\n case \"const\": {\n const literal = expected && this.layouts.literalEnum(expected);\n if (literal && (typeof value.value === \"string\" || value.value === undefined))\n return this.layouts.member(literal, value.value as string | undefined);\n if (expected && this.isOptionalRecord(expected) && value.value === undefined)\n return `defaultValue<${this.layouts.text(expected)}>()`;\n if (expected && this.layouts.enumDeclaration(expected) && typeof value.value === \"number\") {\n const member = this.enumMemberName(expected, value.value);\n if (member) return `${this.layouts.text(expected)}.${member}`;\n }\n if (value.value === undefined) throw new Error(\"undefined has no PLC value here.\");\n if (typeof value.value === \"string\") return JSON.stringify(value.value);\n if (typeof value.value === \"bigint\") return `${value.value}n`;\n return String(value.value);\n }\n case \"static\": {\n const node = value.node;\n if (this.storedNode(node)) return this.pathText(node);\n if (node.type) return this.valueText({ kind: \"node\", id: node.id }, expected ?? node.type);\n throw new Error(\"This object has no PLC value.\");\n }\n case \"virtual\": {\n if (value.fields) {\n const type = expected && this.checker.getNonNullableType(expected);\n if (!type) throw new Error(\"A record literal needs a declared type.\");\n return this.recordLiteral(value.fields, type, frame);\n }\n if (value.items) {\n const element = expected && this.model.elementType(expected);\n return `[${value.items.map((item) => this.code(item, element, frame)).join(\", \")}]`;\n }\n throw new Error(\"Empty value.\");\n }\n case \"function\":\n throw new Error(\"A function has no PLC value; call it.\");\n }\n }\n\n /** A record literal of `type`, every field written; a tagged union fills the other variants' fields. */\n private recordLiteral(fields: Map<string, Value>, type: ts.Type, frame: Frame): string {\n const tagged = this.layouts.tagged(type);\n const names = tagged\n ? this.taggedFields(tagged)\n : this.checker.getPropertiesOfType(type).map((property) => property.name);\n return `{ ${names\n .map((name) => {\n const fieldType = tagged\n ? name === tagged.tag\n ? this.tagType(type, tagged)\n : this.taggedFieldType(type, tagged, name)\n : this.checker.getTypeOfSymbol(this.checker.getPropertyOfType(type, name)!);\n const value = fields.get(name);\n if (!value) return `${name}: ${this.defaultOf(fieldType)}`;\n const property = this.checker.getPropertyOfType(type, name);\n return `${name}: ${this.assignmentText(value, fieldType, frame, this.layouts.iecName(property?.valueDeclaration))}`;\n })\n .join(\", \")} }`;\n }\n}\n\n/** IEC integer and bit-string widths: [bits, signed, bit string]. */\nconst integerWidths: Readonly<Record<string, readonly [number, boolean, boolean]>> = {\n SINT: [8, true, false],\n INT: [16, true, false],\n DINT: [32, true, false],\n LINT: [64, true, false],\n USINT: [8, false, false],\n UINT: [16, false, false],\n UDINT: [32, false, false],\n ULINT: [64, false, false],\n BYTE: [8, false, true],\n WORD: [16, false, true],\n DWORD: [32, false, true],\n LWORD: [64, false, true],\n};\n\n/** Whether IEC needs an explicit conversion from one integer type to another; widening is implicit. */\nconst needsConversion = (from: string, to: string): boolean => {\n const source = integerWidths[from],\n target = integerWidths[to];\n if (!source || !target || from === to) return false;\n if (source[2] || target[2]) return true;\n if (source[1] === target[1]) return source[0] > target[0];\n return source[1] || source[0] >= target[0];\n};\n\nconst isChild = (node: ModelNode, holder: ModelNode, field?: string): boolean => {\n const owner = node.owner;\n const parent = holder.owner;\n if (!owner || !parent || owner.root !== parent.root) return false;\n if (owner.steps.length !== parent.steps.length + 1) return false;\n if (!parent.steps.every((step, index) => stepText(step) === stepText(owner.steps[index]!)))\n return false;\n const last = owner.steps.at(-1)!;\n return field === undefined || (last.kind === \"field\" && last.name === field);\n};\n\n/** The function a storage module exports to set one of its globals. */\nexport const setterName = (name: string): string => `tsplcSet_${name}`;\n\nconst stepText = (step: Step): string =>\n step.kind === \"index\" ? `[${step.index}]` : `.${step.name}`;\n\nconst declarationKey = (declaration: ts.Node): string =>\n `${declaration.getSourceFile().fileName}:${declaration.pos}`;\n\nconst valueKey = (value: Value): string => {\n switch (value.kind) {\n case \"static\":\n return `#${value.node.id}`;\n case \"const\":\n return `=${String(value.value)}`;\n case \"function\":\n return `fn:${declarationKey(value.declaration)}:${value.self?.id ?? \"\"}`;\n case \"virtual\":\n return value.items\n ? `[${value.items.map(valueKey).join(\",\")}]`\n : `{${[...(value.fields ?? [])].map(([name, inner]) => `${name}:${valueKey(inner)}`).join(\",\")}}`;\n case \"code\":\n return \"code\";\n }\n};\n\nconst isAssignment = (kind: ts.SyntaxKind): boolean =>\n kind >= ts.SyntaxKind.FirstAssignment && kind <= ts.SyntaxKind.LastAssignment;\n\nconst compoundOperator = (kind: ts.SyntaxKind): string | undefined =>\n ({\n [ts.SyntaxKind.PlusEqualsToken]: \"+\",\n [ts.SyntaxKind.MinusEqualsToken]: \"-\",\n [ts.SyntaxKind.AsteriskEqualsToken]: \"*\",\n [ts.SyntaxKind.BarEqualsToken]: \"|\",\n [ts.SyntaxKind.AmpersandEqualsToken]: \"&\",\n })[kind as number];\n\nconst binaryToken = (kind: ts.SyntaxKind): string | undefined =>\n ({\n [ts.SyntaxKind.PlusToken]: \"+\",\n [ts.SyntaxKind.MinusToken]: \"-\",\n [ts.SyntaxKind.AsteriskToken]: \"*\",\n [ts.SyntaxKind.LessThanToken]: \"<\",\n [ts.SyntaxKind.LessThanEqualsToken]: \"<=\",\n [ts.SyntaxKind.GreaterThanToken]: \">\",\n [ts.SyntaxKind.GreaterThanEqualsToken]: \">=\",\n [ts.SyntaxKind.AmpersandToken]: \"&\",\n [ts.SyntaxKind.BarToken]: \"|\",\n [ts.SyntaxKind.CaretToken]: \"^\",\n [ts.SyntaxKind.LessThanLessThanToken]: \"<<\",\n [ts.SyntaxKind.GreaterThanGreaterThanToken]: \">>\",\n })[kind as number];\n\nconst foldNumber = (\n kind: ts.SyntaxKind,\n left: number,\n right: number,\n): number | boolean | undefined => {\n switch (kind) {\n case ts.SyntaxKind.PlusToken:\n return left + right;\n case ts.SyntaxKind.MinusToken:\n return left - right;\n case ts.SyntaxKind.AsteriskToken:\n return left * right;\n case ts.SyntaxKind.LessThanToken:\n return left < right;\n case ts.SyntaxKind.LessThanEqualsToken:\n return left <= right;\n case ts.SyntaxKind.GreaterThanToken:\n return left > right;\n case ts.SyntaxKind.GreaterThanEqualsToken:\n return left >= right;\n default:\n return undefined;\n }\n};\n\nconst isArrayMethod = (name: string): boolean =>\n [\n \"entries\",\n \"slice\",\n \"map\",\n \"filter\",\n \"forEach\",\n \"some\",\n \"every\",\n \"reduce\",\n \"reduceRight\",\n \"find\",\n \"includes\",\n ].includes(name);\n\nconst pascal = (text: string): string =>\n text.replace(/(^|[^A-Za-z0-9]+)([A-Za-z0-9])/g, (_, __, letter: string) => letter.toUpperCase());\n\nexport type { LiteralEnum };\n",
17
+ "import ts from \"typescript\";\nimport { Layouts, type LiteralEnum } from \"./layouts.ts\";\nimport type { CapturedValue } from \"./graph.ts\";\nimport type { Model, ModelNode, Root, Step } from \"./model.ts\";\n\ntype FunctionLike =\n | ts.FunctionDeclaration\n | ts.MethodDeclaration\n | ts.ArrowFunction\n | ts.FunctionExpression\n | ts.GetAccessorDeclaration;\n\n/** What an expression is while specializing: known now, or code the PLC runs. */\nexport type Value =\n /** An object setup built: a class instance, record, array, function or service. */\n | { kind: \"static\"; node: ModelNode }\n /** A literal or folded primitive. `undefined` is a value too. */\n | { kind: \"const\"; value: number | boolean | string | undefined | bigint }\n /** An array or record built in scan code from known parts, used before it needs storage. */\n | { kind: \"virtual\"; items?: Value[]; fields?: Map<string, Value> }\n /** A function value: a module function, method of a known instance, or a local arrow. */\n | { kind: \"function\"; declaration: FunctionLike; self?: ModelNode; env?: Env }\n /** Code the PLC runs. `declared` is the storage's declared type, before narrowing. */\n | {\n kind: \"code\";\n text: string;\n declared?: ts.Type;\n place?: boolean;\n iec?: string;\n /** For an array place, the IEC width its declaration gives its elements, as `Array<BYTE>` does. */\n elementIec?: string;\n /** A module global another module stores into through its setter; an import is read-only. */\n setter?: string;\n };\n\ntype Env = Map<ts.Symbol, Value>;\n\nconst constant = (value: number | boolean | string | undefined | bigint): Value => ({\n kind: \"const\",\n value,\n});\n\nexport class SpecializeError extends Error {\n constructor(\n readonly node: ts.Node,\n message: string,\n ) {\n super(message);\n }\n}\n\n/** Indented lines of one generated routine, with the local names it has used. */\nclass Emitter {\n readonly lines: string[] = [];\n private depth = 1;\n private readonly used = new Set<string>();\n private temporaries = 0;\n\n line(text: string): void {\n this.lines.push(`${\" \".repeat(this.depth)}${text}`);\n }\n open(text: string): void {\n this.line(text);\n this.depth++;\n }\n close(text = \"}\"): void {\n this.depth--;\n this.line(text);\n }\n local(name: string): string {\n let candidate = name;\n for (let index = 2; this.used.has(candidate); index++) candidate = `${name}_${index}`;\n this.used.add(candidate);\n return candidate;\n }\n temporary(): string {\n return this.local(`tsplcTemp${++this.temporaries}`);\n }\n}\n\ninterface Frame {\n emitter: Emitter;\n env: Env;\n self?: ModelNode;\n /** The routine's declared return type, for literal and optional results. */\n returns?: ts.Type;\n async: boolean;\n}\n\n/**\n * Evaluates the program's scan code against the setup graph. Everything setup decided (which\n * instance `this` is, what a field refers to, array lengths, config never written in scan code)\n * resolves at compile time; what is left becomes tsPLC dialect code over the stored state.\n */\nexport class Specializer {\n readonly layouts: Layouts;\n readonly routines: string[] = [];\n /** Modules generated code reads through a namespace import, by import name. */\n readonly namespaces = new Map<string, string>();\n /** Value imports from kept modules, by file. */\n readonly imports = new Map<string, Set<string>>();\n private readonly specialized = new Map<string, string>();\n private readonly routineNames = new Set<string>();\n private readonly assigned = new Set<ts.Symbol>();\n private readonly storedRoots = new Set<Root>();\n\n constructor(\n readonly model: Model,\n readonly checker: ts.TypeChecker,\n readonly sources: readonly ts.SourceFile[],\n readonly kept: (file: string) => boolean,\n readonly rootModule: (root: Root) => string,\n ) {\n this.layouts = new Layouts(\n model,\n checker,\n kept,\n sources.filter((source) => kept(source.fileName)),\n );\n for (const source of sources) this.collectAssignments(source);\n }\n\n // ---- Which fields scan code writes ----\n\n /** Fields scan code writes are state; the rest keep what setup gave them. */\n private collectAssignments(node: ts.Node, inConstructor = false): void {\n if (ts.isConstructorDeclaration(node)) inConstructor = true;\n if (!inConstructor) {\n const write = (target: ts.Expression): void => {\n while (ts.isParenthesizedExpression(target) || ts.isNonNullExpression(target))\n target = target.expression;\n if (ts.isPropertyAccessExpression(target)) this.markAssigned(target.name);\n else if (ts.isElementAccessExpression(target)) {\n let base: ts.Expression = target.expression;\n while (ts.isElementAccessExpression(base)) base = base.expression;\n if (ts.isPropertyAccessExpression(base)) this.markAssigned(base.name);\n }\n };\n if (ts.isBinaryExpression(node) && isAssignment(node.operatorToken.kind)) write(node.left);\n if (\n (ts.isPrefixUnaryExpression(node) || ts.isPostfixUnaryExpression(node)) &&\n (node.operator === ts.SyntaxKind.PlusPlusToken ||\n node.operator === ts.SyntaxKind.MinusMinusToken)\n )\n write(node.operand);\n }\n ts.forEachChild(node, (child) => this.collectAssignments(child, inConstructor));\n }\n\n private markAssigned(name: ts.MemberName): void {\n const symbol = this.checker.getSymbolAtLocation(name);\n if (!symbol) return;\n this.assigned.add(symbol);\n // A property of a union is a synthetic symbol over each member's own property.\n for (const declaration of symbol.declarations ?? []) {\n const own = (declaration as { symbol?: ts.Symbol }).symbol;\n if (own) this.assigned.add(own);\n }\n }\n\n /** The declaration symbol of a captured field, to ask whether scan code writes it. */\n private fieldSymbol(holder: ModelNode, name: string): ts.Symbol | undefined {\n if (holder.captured.kind === \"instance\") {\n const member = this.model.member(this.model.classOf(holder), name);\n return member && this.checker.getSymbolAtLocation(member.name);\n }\n if (!holder.type) return undefined;\n const variant = this.model.variant(holder.type, holder.captured);\n return variant.getProperty(name) ?? this.checker.getPropertyOfType(variant, name);\n }\n\n /** Whether a field holds state the PLC stores, rather than a value fixed at setup. */\n stored(holder: ModelNode, name: string): boolean {\n if (holder.owner?.root.exported) return true;\n return this.written(holder, name);\n }\n\n /** Whether scan code assigns the field itself. */\n private written(holder: ModelNode, name: string): boolean {\n const symbol = this.fieldSymbol(holder, name);\n if (!symbol) return false;\n if (this.assigned.has(symbol)) return true;\n // A union's property is written through any member's declaration of it.\n return (symbol.declarations ?? []).some((declaration) => {\n const own = (declaration as { symbol?: ts.Symbol }).symbol;\n return own !== undefined && this.assigned.has(own);\n });\n }\n\n /** Array elements are stored when the field holding the array is, or its root is exported. */\n private storedArray(array: ModelNode): boolean {\n const owner = array.owner;\n if (!owner) return false;\n if (owner.root.exported) return true;\n const last = owner.steps.at(-1);\n if (!last) return false;\n const holder = this.at(owner.root, owner.steps.slice(0, -1));\n return last.kind === \"field\" && holder !== undefined && this.stored(holder, last.name);\n }\n\n /** The node at a path from a root, following captured values. */\n private at(root: Root, steps: readonly Step[]): ModelNode | undefined {\n let value: CapturedValue | undefined = this.model.rootValues.get(root);\n for (const step of steps) {\n const node = value && this.model.node(value);\n if (!node) return undefined;\n const captured = node.captured;\n value =\n step.kind === \"index\"\n ? captured.kind === \"array\"\n ? captured.items[step.index]\n : undefined\n : captured.kind === \"object\" || captured.kind === \"instance\"\n ? captured.fields[step.name]\n : undefined;\n }\n return value && this.model.node(value);\n }\n\n // ---- Storage ----\n\n /** Dialect text for a stored node's place. */\n pathText(node: ModelNode): string {\n const owner = node.owner;\n if (!owner) throw new Error(\"An object with no owner has no storage.\");\n this.storedRoots.add(owner.root);\n const namespace = this.namespace(owner.root);\n let text = this.flattened(owner.root) ? namespace : `${namespace}.${owner.root.name}`;\n owner.steps.forEach((step, index) => {\n const holder = this.at(owner.root, owner.steps.slice(0, index));\n if (step.kind === \"index\") text += `[${step.index}]`;\n else if (/^\\d+$/.test(step.name) && holder?.type)\n text += `[${this.keyText(holder.type, step.name)}]`;\n else text += `.${step.name}`;\n });\n return text;\n }\n\n /** The enum member naming a key of a `Record<Enum, T>`. */\n private keyText(type: ts.Type, key: string): string {\n const keyType = type.aliasSymbol?.name === \"Record\" ? type.aliasTypeArguments?.[0] : undefined;\n const member = keyType && this.enumMemberName(keyType, Number(key));\n return member ? `${this.layouts.text(keyType!)}.${member}` : key;\n }\n\n /** A record or instance root becomes its own global list, one global per field. */\n flattened(root: Root): boolean {\n const node = this.model.node(this.model.rootValues.get(root)!);\n return node?.captured.kind === \"object\" || node?.captured.kind === \"instance\";\n }\n\n private namespace(root: Root): string {\n const name = pascal(root.name);\n this.namespaces.set(name, this.rootModule(root));\n return name;\n }\n\n /** Stores a root whether or not scan code reads it, as exported data must be. */\n use(root: Root): void {\n this.storedRoots.add(root);\n this.namespace(root);\n }\n\n /** Roots generated code reached, which need storage declarations. */\n get roots(): ReadonlySet<Root> {\n return this.storedRoots;\n }\n\n /** Whether anything inside a node is state the PLC stores. */\n private hasState(node: ModelNode): boolean {\n const captured = node.captured;\n if (node.owner?.root.exported) return true;\n if (captured.kind === \"instance\") return this.instanceFields(node).length > 0;\n if (captured.kind === \"array\")\n return (\n this.storedArray(node) ||\n captured.items.some((item) => {\n const inner = this.model.node(item);\n return inner !== undefined && isChild(inner, node) && this.hasState(inner);\n })\n );\n if (captured.kind === \"object\")\n return Object.entries(captured.fields).some(([name, value]) => {\n if (this.stored(node, name)) return true;\n const inner = this.model.node(value);\n return inner !== undefined && isChild(inner, node, name) && this.hasState(inner);\n });\n return false;\n }\n\n /**\n * The stored layout of a node, or undefined when nothing in it is stored. Records and arrays\n * keep their declared type; an instance stores a record of the fields that hold its state.\n */\n storageType(node: ModelNode): string | undefined {\n const captured = node.captured;\n if (!this.hasState(node)) return undefined;\n if (captured.kind === \"instance\") {\n const fields = this.instanceFields(node);\n return this.layoutName(\n `${captured.name}State`,\n fields.map(([field, text]) => `${field}: ${text};`).join(\" \"),\n );\n }\n if (captured.kind === \"array\") {\n const first = captured.items[0] && this.model.node(captured.items[0]);\n if (first?.captured.kind === \"instance\") {\n const states = captured.items.map((item) => this.storageType(this.model.node(item)!));\n if (new Set(states).size !== 1)\n throw new Error(\"Instances in one array must hold the same kinds of state.\");\n return `FixedArray<${states[0]}, ${captured.items.length}>`;\n }\n }\n if (!node.type) throw new Error(\"Stored state needs a declared type.\");\n return this.layouts.text(node.type, { kind: \"node\", id: node.id });\n }\n\n /** Records stored as a whole: anything in them is state. */\n private storedWhole(node: ModelNode): boolean {\n return node.captured.kind !== \"instance\" && this.hasState(node);\n }\n\n /** An instance's stored fields: what scan code writes, and owned objects holding state. */\n instanceFields(node: ModelNode): [string, string][] {\n const captured = node.captured;\n if (captured.kind !== \"instance\") return [];\n const declaration = this.model.classOf(node);\n return this.fieldNames(declaration).flatMap((name): [string, string][] => {\n const value = captured.fields[name] ?? { kind: \"undefined\" };\n const inner = this.model.node(value);\n const member = this.model.member(declaration, name);\n const type = member && this.checker.getTypeAtLocation(member.name);\n if (inner) {\n if (inner.captured.kind === \"function\" || inner.captured.kind === \"service\") return [];\n if (!isChild(inner, node, name)) {\n if (!this.stored(node, name)) return [];\n // A stored field holds its own copy of the record setup gave it.\n return type ? [[name, this.layouts.text(type, value)]] : [];\n }\n if (inner.captured.kind !== \"instance\" && this.stored(node, name) && type)\n return [[name, this.layouts.text(type, value)]];\n const text = this.storageType(inner);\n return text ? [[name, text]] : [];\n }\n if (!this.stored(node, name)) return [];\n if (!type) throw new Error(`${captured.name}.${name} has no declared type.`);\n return [[name, this.layouts.declaredText(member, type, value)]];\n });\n }\n\n /** A class's fields in declaration order: properties and constructor parameter properties. */\n private fieldNames(declaration: ts.ClassDeclaration): string[] {\n const names: string[] = [];\n for (const member of declaration.members) {\n if (ts.isPropertyDeclaration(member)) names.push(member.name.getText());\n if (ts.isConstructorDeclaration(member))\n for (const parameter of member.parameters)\n if (ts.isParameterPropertyDeclaration(parameter, member))\n names.push(parameter.name.getText());\n }\n return names;\n }\n\n private readonly layoutNames = new Map<string, string>();\n private layoutName(base: string, body: string): string {\n const known = this.layoutNames.get(body);\n if (known) return known;\n let name = base;\n for (\n let index = 2;\n [...this.layoutNames.values()].includes(name) || this.layouts.declarations.has(name);\n index++\n )\n name = `${base}_${index}`;\n this.layoutNames.set(body, name);\n this.layouts.declarations.set(name, `export interface ${name} { ${body} }`);\n return name;\n }\n\n private fieldInitializer(\n holder: ModelNode,\n name: string,\n value: CapturedValue,\n type: string,\n ): string {\n const declaredType =\n holder.captured.kind === \"instance\"\n ? (() => {\n const member = this.model.member(this.model.classOf(holder), name);\n return member && this.checker.getTypeAtLocation(member.name);\n })()\n : holder.type && this.model.fieldType(holder.type, name, holder.captured);\n if (!declaredType) throw new Error(`${name} has no declared type.`);\n return this.valueText(value, declaredType, type);\n }\n\n /** A captured value as dialect text of its declared type. */\n valueText(value: CapturedValue, declared: ts.Type, layout?: string): string {\n const node = this.model.node(value);\n const literal = this.layouts.literalEnum(declared);\n if (literal)\n return this.layouts.member(literal, value.kind === \"string\" ? value.value : undefined);\n const optional = this.isOptionalRecord(declared);\n if (optional) {\n const inner = this.checker.getNonNullableType(declared);\n const name = layout ?? this.layouts.text(declared, value);\n return value.kind === \"undefined\"\n ? `defaultValue<${name}>()`\n : `{ has: true, value: ${this.valueText(value, inner)} }`;\n }\n if (this.layouts.enumDeclaration(declared) && value.kind === \"number\") {\n const enumName = this.layouts.text(declared);\n const member = this.enumMemberName(declared, value.value);\n return member ? `${enumName}.${member}` : String(value.value);\n }\n if (!node) return this.literal(value);\n if (node.captured.kind === \"array\") {\n const element = this.model.elementType(declared);\n const items = node.captured.items;\n if (!items.length) return `defaultValue<${layout ?? this.layouts.text(declared, value)}>()`;\n return `[${items.map((item) => (element ? this.valueText(item, element) : this.literal(item))).join(\", \")}]`;\n }\n if (node.captured.kind === \"object\") return this.recordInitializer(node, declared);\n if (node.captured.kind === \"instance\") {\n const text = this.storageType(node);\n return text ? this.instanceInitializer(node) : \"{}\";\n }\n throw new Error(\"A function has no stored value.\");\n }\n\n instanceInitializer(node: ModelNode): string {\n return `{ ${this.instanceFields(node)\n .map(([name, layout]) => `${name}: ${this.instanceFieldInitializer(node, name, layout)}`)\n .join(\", \")} }`;\n }\n\n /** The initial value of one of an instance's stored fields. */\n instanceFieldInitializer(node: ModelNode, name: string, layout: string): string {\n const captured = node.captured;\n if (captured.kind !== \"instance\") throw new Error(\"Not an instance.\");\n const value = captured.fields[name] ?? { kind: \"undefined\" as const };\n const inner = this.model.node(value);\n if (inner?.captured.kind === \"instance\") return this.instanceInitializer(inner);\n if (\n inner?.captured.kind === \"array\" &&\n inner.captured.items.some((item) => this.model.node(item)?.captured.kind === \"instance\")\n )\n return `[${inner.captured.items.map((item) => this.instanceInitializer(this.model.node(item)!)).join(\", \")}]`;\n return this.fieldInitializer(node, name, value, layout);\n }\n\n private recordInitializer(node: ModelNode, declared: ts.Type): string {\n const captured = node.captured;\n if (captured.kind !== \"object\") throw new Error(\"Not a record.\");\n const tagged = this.layouts.tagged(declared);\n const variant = this.model.variant(declared, captured);\n const enumRecord = declared.aliasSymbol?.name === \"Record\";\n const properties = tagged\n ? this.taggedFields(tagged)\n : this.checker\n .getPropertiesOfType(enumRecord ? declared : variant)\n .map((property) => property.name);\n const parts = properties.map((name) => {\n const field = captured.fields[name];\n const fieldType =\n tagged && name === tagged.tag\n ? undefined\n : this.model.fieldType(enumRecord ? declared : variant, name, captured);\n if (tagged && name === tagged.tag) {\n const tag = this.layouts.literalEnum(this.tagType(declared, tagged))!;\n return `${name}: ${this.layouts.member(tag, field?.kind === \"string\" ? field.value : undefined)}`;\n }\n const memberType = fieldType ?? this.taggedFieldType(declared, tagged!, name);\n if (!field) return `${name}: defaultValue<${this.layouts.text(memberType)}>()`;\n return `${enumRecord ? `[${name}]` : name}: ${this.valueText(field, memberType)}`;\n });\n if (enumRecord) {\n const [keyType, valueType] = declared.aliasTypeArguments as [ts.Type, ts.Type];\n const literal = this.layouts.literalEnum(keyType);\n const entries = properties.map((name, index) => {\n const key = literal\n ? this.layouts.member(literal, name)\n : `${this.layouts.text(keyType)}.${this.enumMemberName(keyType, Number(name))}`;\n return `[${key}]: ${parts[index]!.slice(parts[index]!.indexOf(\": \") + 2)}`;\n });\n // An enum that is also optional elsewhere has an Undefined member the table must cover.\n if (literal?.optional)\n entries.unshift(\n `[${this.layouts.member(literal, undefined)}]: ${this.defaultOf(valueType)}`,\n );\n return `{ ${entries.join(\", \")} }`;\n }\n return `{ ${parts.join(\", \")} }`;\n }\n\n private taggedFields(tagged: { tag: string; variants: ts.Type[] }): string[] {\n const names = [tagged.tag];\n for (const variant of tagged.variants)\n for (const property of variant.getProperties())\n if (!names.includes(property.name)) names.push(property.name);\n return names;\n }\n\n private taggedFieldType(\n declared: ts.Type,\n tagged: { tag: string; variants: ts.Type[] },\n name: string,\n ): ts.Type {\n for (const variant of tagged.variants) {\n const property = variant.getProperty(name);\n if (property) return this.checker.getTypeOfSymbol(property);\n }\n throw new Error(`${name} is in no variant of ${this.checker.typeToString(declared)}.`);\n }\n\n private tagType(declared: ts.Type, tagged: { tag: string; variants: ts.Type[] }): ts.Type {\n this.layouts.text(declared);\n const property = this.checker.getPropertyOfType(declared, tagged.tag);\n return property ? this.checker.getTypeOfSymbol(property) : declared;\n }\n\n private enumMemberName(type: ts.Type, value: number): string | undefined {\n return this.layouts\n .enumDeclaration(type)\n ?.members.find((member) => this.checker.getConstantValue(member) === value)\n ?.name.getText();\n }\n\n private literal(value: CapturedValue): string {\n switch (value.kind) {\n case \"number\":\n return String(value.value);\n case \"boolean\":\n return String(value.value);\n case \"string\":\n return JSON.stringify(value.value);\n case \"bigint\":\n return `${value.value}n`;\n default:\n throw new Error(`A captured ${value.kind} has no literal.`);\n }\n }\n\n private isOptionalRecord(type: ts.Type): boolean {\n if (!type.isUnion() || !type.types.some((part) => part.flags & ts.TypeFlags.Undefined))\n return false;\n return !this.layouts.literalEnum(type);\n }\n\n // ---- Routines ----\n\n /** Specializes the entry function, returning its body. */\n entry(declaration: ts.FunctionDeclaration | ts.ArrowFunction): string[] {\n const frame: Frame = {\n emitter: new Emitter(),\n env: new Map(),\n returns: undefined,\n async: false,\n };\n this.body(declaration.body!, frame);\n return frame.emitter.lines;\n }\n\n /** The name of `declaration` specialized for `self` and these known arguments. */\n routine(\n declaration: FunctionLike,\n self: ModelNode | undefined,\n args: Value[],\n closure?: Env,\n ): {\n name: string;\n args: string[];\n returns: ts.Type | undefined;\n } {\n const signature = this.checker.getSignatureFromDeclaration(declaration);\n const returnType = signature && this.checker.getReturnTypeOfSignature(signature);\n const isAsync = Boolean(\n ts.canHaveModifiers(declaration) &&\n ts\n .getModifiers(declaration)\n ?.some((modifier) => modifier.kind === ts.SyntaxKind.AsyncKeyword),\n );\n const frame: Frame = {\n emitter: new Emitter(),\n env: new Map(closure),\n self,\n returns: returnType && (isAsync ? this.checker.getAwaitedType(returnType) : returnType),\n async: isAsync,\n };\n const parameters: string[] = [];\n const runtimeArgs: string[] = [];\n const keys: string[] = [];\n const parameterList = ts.isGetAccessorDeclaration(declaration) ? [] : declaration.parameters;\n parameterList.forEach((parameter, index) => {\n const arg = args[index] ?? constant(undefined);\n const declared = this.checker.getTypeAtLocation(parameter);\n this.bindParameter(parameter.name, arg, declared, frame, parameters, runtimeArgs, keys);\n });\n // Captured runtime locals become parameters of the specialized routine.\n for (const [symbol, value] of closure ?? [])\n if (value.kind === \"code\") {\n const name = frame.emitter.local(symbol.name);\n const type = value.declared ? this.layouts.text(value.declared) : \"number\";\n parameters.push(`${name}: ${type}`);\n runtimeArgs.push(value.text);\n frame.env.set(symbol, { kind: \"code\", text: name, declared: value.declared, place: true });\n keys.push(`${symbol.name}=code`);\n }\n const key = `${declarationKey(declaration)}|${self?.id ?? \"\"}|${keys.join(\",\")}`;\n const known = this.specialized.get(key);\n if (known) return { name: known, args: runtimeArgs, returns: frame.returns };\n const name = this.routineName(declaration, self);\n this.specialized.set(key, name);\n if (ts.isArrowFunction(declaration) && !ts.isBlock(declaration.body)) {\n const result = this.expression(declaration.body, frame, frame.returns);\n frame.emitter.line(`return ${this.code(result, frame.returns, frame)};`);\n } else this.body(declaration.body!, frame);\n const resultText =\n frame.returns && !(frame.returns.flags & ts.TypeFlags.Void)\n ? this.layouts.text(frame.returns)\n : \"void\";\n const head = `${frame.async ? \"async \" : \"\"}function ${name}(${parameters.join(\", \")}): ${\n frame.async ? `Promise<${resultText}>` : resultText\n } {`;\n const where = self?.owner\n ? ` /* ${self.owner.root.name}${self.owner.steps.map(stepText).join(\"\")} */`\n : \"\";\n this.routines.push([`${head}${where}`, ...frame.emitter.lines, \"}\"].join(\"\\n\"));\n return { name, args: runtimeArgs, returns: frame.returns };\n }\n\n private routineName(declaration: FunctionLike, self: ModelNode | undefined): string {\n const own =\n declaration.name && ts.isIdentifier(declaration.name) ? declaration.name.text : undefined;\n const variable =\n !own &&\n declaration.parent &&\n ts.isVariableDeclaration(declaration.parent) &&\n ts.isIdentifier(declaration.parent.name)\n ? declaration.parent.name.text\n : undefined;\n const owner = self?.captured.kind === \"instance\" ? self.captured.name : undefined;\n const base = [owner, own ?? variable ?? \"callback\"].filter(Boolean).join(\"_\");\n let name = base;\n for (let index = 2; this.routineNames.has(name); index++) name = `${base}_${index}`;\n this.routineNames.add(name);\n return name;\n }\n\n private bindParameter(\n name: ts.BindingName,\n arg: Value,\n declared: ts.Type,\n frame: Frame,\n parameters: string[],\n runtimeArgs: string[],\n keys: string[],\n ): void {\n if (ts.isObjectBindingPattern(name)) {\n for (const element of name.elements) {\n const field = (element.propertyName ?? element.name).getText();\n const inner = this.member(arg, field, element, frame);\n this.bindParameter(\n element.name,\n inner,\n this.checker.getTypeAtLocation(element),\n frame,\n parameters,\n runtimeArgs,\n keys,\n );\n }\n return;\n }\n if (ts.isArrayBindingPattern(name))\n throw new SpecializeError(name, \"Array patterns are not supported in parameters.\");\n const symbol = this.checker.getSymbolAtLocation(name)!;\n if (arg.kind === \"code\" || (arg.kind === \"virtual\" && !this.isKnownShape(arg))) {\n const local = frame.emitter.local(name.text);\n const iec = this.layouts.iecName(name.parent);\n parameters.push(`${local}: ${iec ?? this.layouts.text(declared)}`);\n runtimeArgs.push(this.assignmentText(arg, declared, frame, iec));\n frame.env.set(symbol, { kind: \"code\", text: local, declared, place: true });\n keys.push(`${name.text}=code`);\n return;\n }\n if (\n arg.kind === \"const\" &&\n !(declared.flags & ts.TypeFlags.Undefined) &&\n typeof arg.value !== \"undefined\"\n ) {\n // Runtime primitives stay parameters, so one routine serves every value.\n const local = frame.emitter.local(name.text);\n parameters.push(`${local}: ${this.layouts.text(declared)}`);\n runtimeArgs.push(this.code(arg, declared, frame));\n frame.env.set(symbol, { kind: \"code\", text: local, declared, place: true });\n keys.push(`${name.text}=code`);\n return;\n }\n frame.env.set(symbol, arg);\n keys.push(`${name.text}=${valueKey(arg)}`);\n }\n\n private isKnownShape(value: Value): boolean {\n return (\n value.kind === \"virtual\" &&\n [...(value.fields?.values() ?? []), ...(value.items ?? [])].some(\n (inner) => inner.kind === \"static\" || inner.kind === \"function\",\n )\n );\n }\n\n // ---- Statements ----\n\n private body(node: ts.ConciseBody, frame: Frame): void {\n if (ts.isBlock(node)) for (const statement of node.statements) this.statement(statement, frame);\n else frame.emitter.line(`${this.code(this.expression(node, frame), undefined, frame)};`);\n }\n\n private statement(node: ts.Statement, frame: Frame): void {\n const { emitter } = frame;\n if (ts.isBlock(node)) {\n emitter.open(\"{\");\n for (const statement of node.statements) this.statement(statement, frame);\n emitter.close();\n return;\n }\n if (ts.isVariableStatement(node)) {\n const mutable = !(node.declarationList.flags & ts.NodeFlags.Const);\n for (const declaration of node.declarationList.declarations)\n this.declare(declaration, mutable, frame);\n return;\n }\n if (ts.isExpressionStatement(node)) {\n this.effect(node.expression, frame);\n return;\n }\n if (ts.isIfStatement(node)) {\n const condition = this.expression(node.expression, frame);\n if (\n condition.kind === \"const\" ||\n condition.kind === \"static\" ||\n condition.kind === \"function\"\n ) {\n const truthy = condition.kind === \"const\" ? Boolean(condition.value) : true;\n if (truthy) this.statement(node.thenStatement, frame);\n else if (node.elseStatement) this.statement(node.elseStatement, frame);\n return;\n }\n emitter.open(`if (${this.condition(condition, node.expression, frame)}) {`);\n this.inner(node.thenStatement, frame);\n if (node.elseStatement) {\n emitter.close(\"} else {\");\n emitter.open(\"\");\n emitter.lines.pop();\n this.inner(node.elseStatement, frame);\n }\n emitter.close();\n return;\n }\n if (ts.isReturnStatement(node)) {\n if (!node.expression) {\n emitter.line(\"return;\");\n return;\n }\n if (ts.isSatisfiesExpression(node.expression) && this.isNever(node.expression.type)) {\n emitter.line(`return ${this.defaultOf(frame.returns)};`);\n return;\n }\n const value = this.expression(node.expression, frame, frame.returns);\n emitter.line(`return ${this.code(value, frame.returns, frame)};`);\n return;\n }\n if (ts.isForOfStatement(node)) {\n this.forOf(node, frame);\n return;\n }\n if (ts.isSwitchStatement(node)) {\n this.switch(node, frame);\n return;\n }\n if (ts.isForStatement(node) || ts.isWhileStatement(node)) {\n throw new SpecializeError(\n node,\n \"Use for…of over an array; counted and while loops are not lowered yet.\",\n );\n }\n if (ts.isTryStatement(node)) {\n emitter.open(\"try {\");\n for (const statement of node.tryBlock.statements) this.statement(statement, frame);\n if (node.catchClause) {\n emitter.close(\n `} catch${node.catchClause.variableDeclaration ? ` (${node.catchClause.variableDeclaration.name.getText()})` : \"\"} {`,\n );\n emitter.open(\"\");\n emitter.lines.pop();\n for (const statement of node.catchClause.block.statements) this.statement(statement, frame);\n }\n emitter.close();\n return;\n }\n if (ts.isBreakStatement(node) || ts.isContinueStatement(node)) {\n emitter.line(node.getText());\n return;\n }\n if (ts.isEmptyStatement(node)) return;\n throw new SpecializeError(node, `${ts.SyntaxKind[node.kind]} is not supported in scan code.`);\n }\n\n /** A branch body: blocks keep their statements without another brace level. */\n private inner(node: ts.Statement, frame: Frame): void {\n if (ts.isBlock(node)) for (const statement of node.statements) this.statement(statement, frame);\n else this.statement(node, frame);\n }\n\n private isNever(type: ts.TypeNode): boolean {\n return type.kind === ts.SyntaxKind.NeverKeyword;\n }\n\n private defaultOf(type: ts.Type | undefined): string {\n if (!type || type.flags & ts.TypeFlags.Void) return \"\";\n if (type.flags & ts.TypeFlags.BooleanLike) return \"false\";\n if (type.flags & ts.TypeFlags.NumberLike) return \"0\";\n return `defaultValue<${this.layouts.text(type)}>()`;\n }\n\n private declare(declaration: ts.VariableDeclaration, mutable: boolean, frame: Frame): void {\n const initializer = declaration.initializer;\n if (!initializer)\n throw new SpecializeError(declaration, \"Initialize locals where they are declared.\");\n const value = this.expression(\n initializer,\n frame,\n declaration.type && this.checker.getTypeAtLocation(declaration.type),\n );\n this.bind(\n declaration.name,\n value,\n mutable,\n frame,\n this.checker.getTypeAtLocation(declaration.name),\n );\n }\n\n /** Binds a local, or each name of a destructuring pattern, to a value. */\n private bind(\n name: ts.BindingName,\n value: Value,\n mutable: boolean,\n frame: Frame,\n declared: ts.Type,\n ): void {\n if (!ts.isIdentifier(name) && value.kind === \"code\" && !value.place)\n value = this.temporaryOf(value, frame);\n if (ts.isObjectBindingPattern(name)) {\n for (const element of name.elements) {\n const field = (element.propertyName ?? element.name).getText();\n const inner = this.member(value, field, element, frame);\n this.bind(\n element.name,\n inner,\n mutable,\n frame,\n this.checker.getTypeAtLocation(element.name),\n );\n }\n return;\n }\n if (ts.isArrayBindingPattern(name)) {\n name.elements.forEach((element, index) => {\n if (ts.isOmittedExpression(element)) return;\n const inner = this.element(value, constant(index), element, frame);\n this.bind(\n element.name,\n inner,\n mutable,\n frame,\n this.checker.getTypeAtLocation(element.name),\n );\n });\n return;\n }\n const symbol = this.checker.getSymbolAtLocation(name)!;\n if (!mutable && value.kind !== \"code\") {\n frame.env.set(symbol, value);\n return;\n }\n if (!mutable && value.kind === \"code\" && value.place) {\n // A const naming a place is an alias, as an object binding is in TypeScript.\n if (this.isAggregate(declared)) {\n frame.env.set(symbol, value);\n return;\n }\n }\n const local = frame.emitter.local(name.text);\n const type = value.kind === \"code\" && value.iec ? value.iec : this.localType(declared);\n frame.emitter.line(\n `${mutable ? \"let\" : \"const\"} ${local}: ${type} = ${this.code(value, declared, frame)};`,\n );\n frame.env.set(symbol, {\n kind: \"code\",\n text: local,\n declared,\n place: true,\n iec: value.kind === \"code\" ? value.iec : undefined,\n });\n }\n\n /** A local's dialect type: a literal union keeps its enum; a lone literal widens to its base type. */\n private localType(declared: ts.Type): string {\n if (this.layouts.literalEnum(declared)) return this.layouts.text(declared);\n return this.layouts.text(this.checker.getBaseTypeOfLiteralType(declared));\n }\n\n private isAggregate(type: ts.Type): boolean {\n return Boolean(type.flags & ts.TypeFlags.Object) && !this.layouts.literalEnum(type);\n }\n\n private forOf(node: ts.ForOfStatement, frame: Frame): void {\n const iterable = this.expression(node.expression, frame);\n const items = this.items(iterable);\n const declaration = node.initializer;\n if (!ts.isVariableDeclarationList(declaration) || declaration.declarations.length !== 1)\n throw new SpecializeError(node.initializer, \"Declare one const in for…of.\");\n const name = declaration.declarations[0]!.name;\n const declared = this.checker.getTypeAtLocation(name);\n if (items) {\n for (const item of items) {\n frame.emitter.open(\"{\");\n this.bind(name, item, false, frame, declared);\n this.inner(node.statement, frame);\n frame.emitter.close();\n }\n return;\n }\n if (iterable.kind !== \"code\")\n throw new SpecializeError(node.expression, \"for…of needs an array.\");\n if (!ts.isIdentifier(name))\n throw new SpecializeError(name, \"Destructure a runtime element inside the loop.\");\n const local = frame.emitter.local(name.text);\n frame.emitter.open(`for (const ${local} of ${iterable.text}) {`);\n frame.env.set(this.checker.getSymbolAtLocation(name)!, {\n kind: \"code\",\n text: local,\n declared,\n place: true,\n });\n this.inner(node.statement, frame);\n frame.emitter.close();\n }\n\n /**\n * The elements of an array setup built or scan code assembled from known parts; undefined for\n * a runtime array. Known arrays unroll, so each element's identity stays known.\n */\n private items(value: Value): Value[] | undefined {\n if (value.kind === \"virtual\" && value.items) return value.items;\n if (value.kind !== \"static\") return undefined;\n const array = value.node;\n const captured = array.captured;\n if (captured.kind !== \"array\") return undefined;\n return captured.items.map((item, index) =>\n this.fromCaptured(item, array, { kind: \"index\", index }),\n );\n }\n\n private switch(node: ts.SwitchStatement, frame: Frame): void {\n const subject = this.expression(node.expression, frame);\n const declared = subject.kind === \"code\" ? subject.declared : undefined;\n if (subject.kind === \"const\") {\n let matched = false;\n for (const clause of node.caseBlock.clauses) {\n if (!matched) {\n if (ts.isDefaultClause(clause)) matched = true;\n else {\n const label = this.expression(clause.expression, frame);\n matched = label.kind === \"const\" && label.value === subject.value;\n }\n }\n if (!matched) continue;\n for (const statement of clause.statements) {\n if (ts.isBreakStatement(statement)) return;\n this.statement(statement, frame);\n }\n if (clause.statements.some((statement) => ts.isReturnStatement(statement))) return;\n }\n return;\n }\n frame.emitter.open(`switch (${this.code(subject, declared, frame)}) {`);\n for (const clause of node.caseBlock.clauses) {\n if (ts.isDefaultClause(clause)) {\n const unreachable = clause.statements.some(\n (statement) =>\n ts.isReturnStatement(statement) &&\n statement.expression &&\n ts.isSatisfiesExpression(statement.expression) &&\n this.isNever(statement.expression.type),\n );\n frame.emitter.open(\"default: {\");\n if (unreachable)\n frame.emitter.line(\n frame.returns && !(frame.returns.flags & ts.TypeFlags.Void)\n ? `return ${this.defaultOf(frame.returns)};`\n : \"break;\",\n );\n else for (const statement of clause.statements) this.statement(statement, frame);\n frame.emitter.close();\n continue;\n }\n const label = this.expression(clause.expression, frame, declared);\n frame.emitter.open(`case ${this.code(label, declared, frame)}: {`);\n for (const statement of clause.statements) this.statement(statement, frame);\n frame.emitter.close();\n }\n frame.emitter.close();\n }\n\n /** An expression evaluated for its effect. */\n private effect(node: ts.Expression, frame: Frame): void {\n if (ts.isVoidExpression(node)) {\n const value = this.expression(node.expression, frame);\n if (value.kind === \"code\") frame.emitter.line(`void ${value.text};`);\n return;\n }\n if (ts.isBinaryExpression(node) && isAssignment(node.operatorToken.kind)) {\n this.assign(node, frame);\n return;\n }\n if (\n (ts.isPrefixUnaryExpression(node) || ts.isPostfixUnaryExpression(node)) &&\n (node.operator === ts.SyntaxKind.PlusPlusToken ||\n node.operator === ts.SyntaxKind.MinusMinusToken)\n ) {\n const target = this.expression(node.operand, frame);\n const text = this.placeText(target, node.operand);\n frame.emitter.line(\n this.store(\n target,\n `${text} ${node.operator === ts.SyntaxKind.PlusPlusToken ? \"+\" : \"-\"} 1`,\n ),\n );\n return;\n }\n const value = this.expression(node, frame);\n if (value.kind === \"code\" && value.text.includes(\"(\")) frame.emitter.line(`${value.text};`);\n }\n\n private assign(node: ts.BinaryExpression, frame: Frame): void {\n const target = this.expression(node.left, frame);\n const text = this.placeText(target, node.left);\n const declared = target.kind === \"code\" ? target.declared : undefined;\n const operator = node.operatorToken.kind;\n if (operator === ts.SyntaxKind.QuestionQuestionEqualsToken) {\n const value = this.expression(\n node.right,\n frame,\n declared && this.checker.getNonNullableType(declared),\n );\n frame.emitter.open(`if (${this.isUndefinedText(text, declared)}) {`);\n frame.emitter.line(\n this.store(\n target,\n this.wrapDefined(\n this.code(value, declared && this.checker.getNonNullableType(declared), frame),\n declared,\n ),\n ),\n );\n frame.emitter.close();\n return;\n }\n const value = this.expression(node.right, frame, declared);\n if (operator === ts.SyntaxKind.EqualsToken) {\n frame.emitter.line(\n this.store(\n target,\n this.assignmentText(\n value,\n declared,\n frame,\n target.kind === \"code\" ? target.iec : undefined,\n ),\n ),\n );\n return;\n }\n const binary = compoundOperator(operator);\n if (!binary)\n throw new SpecializeError(node, `${node.operatorToken.getText()} is not supported.`);\n frame.emitter.line(\n this.store(target, `${text} ${binary} ${this.code(value, declared, frame)}`),\n );\n }\n\n /** A statement storing `text` into a place, through its module's setter when it has one. */\n private store(target: Value, text: string): string {\n if (target.kind !== \"code\") throw new Error(\"Not a place.\");\n return target.setter ? `${target.setter}(${text});` : `${target.text} = ${text};`;\n }\n\n /** The text stored into a place of `declared` type, wrapping an optional's value. */\n private assignmentText(\n value: Value,\n declared: ts.Type | undefined,\n frame: Frame,\n iec?: string,\n ): string {\n const target = iec ?? (declared && declared.flags & ts.TypeFlags.Number ? \"DINT\" : undefined);\n if (target && value.kind === \"code\" && needsConversion(value.iec ?? \"DINT\", target)) {\n // A TypeScript number holds any of these; in the PLC a value converts as an IEC assignment does.\n this.typeImports.add(\"wrap\");\n return `wrap<${target}>(${this.code(value, undefined, frame)})`;\n }\n if (declared && this.isOptionalRecord(declared)) {\n if (value.kind === \"const\" && value.value === undefined)\n return `defaultValue<${this.layouts.text(declared)}>()`;\n if (value.kind === \"code\" && value.declared && this.isOptionalRecord(value.declared))\n return value.text;\n return this.wrapDefined(\n this.code(value, this.checker.getNonNullableType(declared), frame),\n declared,\n );\n }\n return this.code(value, declared, frame);\n }\n\n private wrapDefined(text: string, declared: ts.Type | undefined): string {\n return declared && this.isOptionalRecord(declared) ? `{ has: true, value: ${text} }` : text;\n }\n\n private isUndefinedText(text: string, declared: ts.Type | undefined): string {\n if (declared && this.isOptionalRecord(declared)) return `!${text}.has`;\n const literal = declared && this.layouts.literalEnum(declared);\n if (literal) return `${text} === ${this.layouts.member(literal, undefined)}`;\n throw new Error(\"Only optional values can be undefined.\");\n }\n\n private placeText(value: Value, node: ts.Node): string {\n if (value.kind === \"code\" && value.place) return value.text;\n throw new SpecializeError(node, \"Assign to stored state: a field scan code owns, or a let.\");\n }\n\n // ---- Expressions ----\n\n expression(node: ts.Expression, frame: Frame, expected?: ts.Type): Value {\n if (\n ts.isParenthesizedExpression(node) ||\n ts.isNonNullExpression(node) ||\n ts.isAsExpression(node) ||\n ts.isSatisfiesExpression(node)\n )\n return this.expression(node.expression, frame, expected);\n if (ts.isNumericLiteral(node)) return constant(Number(node.text));\n if (ts.isStringLiteral(node) || ts.isNoSubstitutionTemplateLiteral(node))\n return constant(node.text);\n if (node.kind === ts.SyntaxKind.TrueKeyword) return constant(true);\n if (node.kind === ts.SyntaxKind.FalseKeyword) return constant(false);\n if (ts.isBigIntLiteral(node)) return constant(BigInt(node.text.slice(0, -1)));\n if (node.kind === ts.SyntaxKind.ThisKeyword) {\n if (!frame.self) throw new SpecializeError(node, \"`this` outside a method.\");\n return { kind: \"static\", node: frame.self };\n }\n if (ts.isIdentifier(node)) return this.identifier(node, frame);\n if (ts.isPropertyAccessExpression(node)) {\n const object = this.expression(node.expression, frame);\n if (node.questionDotToken && object.kind === \"const\" && object.value === undefined)\n return constant(undefined);\n return this.narrowed(this.member(object, node.name.text, node, frame), node);\n }\n if (ts.isElementAccessExpression(node)) {\n const object = this.expression(node.expression, frame);\n const index = this.expression(node.argumentExpression, frame);\n return this.element(object, index, node, frame);\n }\n if (ts.isCallExpression(node)) return this.call(node, frame, expected);\n if (ts.isAwaitExpression(node)) {\n const value = this.expression(node.expression, frame);\n return {\n kind: \"code\",\n text: `await ${this.code(value, undefined, frame)}`,\n declared: this.checker.getTypeAtLocation(node),\n };\n }\n if (ts.isPrefixUnaryExpression(node)) return this.unary(node, frame);\n if (ts.isBinaryExpression(node)) return this.binary(node, frame, expected);\n if (ts.isConditionalExpression(node)) {\n const condition = this.expression(node.condition, frame);\n if (condition.kind === \"const\")\n return this.expression(condition.value ? node.whenTrue : node.whenFalse, frame, expected);\n const declared = expected ?? this.checker.getTypeAtLocation(node);\n const whenTrue = this.expression(node.whenTrue, frame, declared);\n const whenFalse = this.expression(node.whenFalse, frame, declared);\n return {\n kind: \"code\",\n text: `(${this.condition(condition, node.condition, frame)} ? ${this.code(whenTrue, declared, frame)} : ${this.code(whenFalse, declared, frame)})`,\n declared,\n };\n }\n if (ts.isArrowFunction(node) || ts.isFunctionExpression(node))\n return { kind: \"function\", declaration: node, self: frame.self, env: frame.env };\n if (ts.isObjectLiteralExpression(node)) return this.objectLiteral(node, frame);\n if (ts.isArrayLiteralExpression(node)) {\n const items: Value[] = [];\n for (const element of node.elements) {\n if (ts.isSpreadElement(element)) {\n const spread = this.items(this.expression(element.expression, frame));\n if (!spread) throw new SpecializeError(element, \"Spread an array setup built.\");\n items.push(...spread);\n } else items.push(this.expression(element, frame));\n }\n return { kind: \"virtual\", items };\n }\n if (ts.isTemplateExpression(node))\n throw new SpecializeError(node, \"Template strings are not supported in scan code.\");\n throw new SpecializeError(node, `${ts.SyntaxKind[node.kind]} is not supported in scan code.`);\n }\n\n private identifier(node: ts.Identifier, frame: Frame): Value {\n if (node.text === \"undefined\") return constant(undefined);\n let symbol = this.checker.getSymbolAtLocation(node);\n if (!symbol) throw new SpecializeError(node, `${node.text} is not declared.`);\n const local = frame.env.get(symbol);\n if (local) return this.narrowed(local, node);\n while (symbol.flags & ts.SymbolFlags.Alias) symbol = this.checker.getAliasedSymbol(symbol);\n const own = frame.env.get(symbol);\n if (own) return own;\n const declaration = symbol.valueDeclaration ?? symbol.declarations?.[0];\n if (!declaration) throw new SpecializeError(node, `${node.text} has no declaration.`);\n if (ts.isFunctionDeclaration(declaration)) return { kind: \"function\", declaration };\n if (ts.isVariableDeclaration(declaration)) {\n const initializer = declaration.initializer;\n if (initializer && (ts.isArrowFunction(initializer) || ts.isFunctionExpression(initializer)))\n return { kind: \"function\", declaration: initializer };\n const root = this.model.roots.find((item) => item.declaration === declaration);\n if (root) return this.rootValue(root, node);\n if (\n ts.isVariableStatement(declaration.parent.parent) &&\n declaration.parent.parent.parent &&\n ts.isSourceFile(declaration.parent.parent.parent)\n ) {\n if (initializer) return this.expression(initializer, { ...frame, env: new Map() });\n }\n }\n if (ts.isEnumMember(declaration))\n return constant(this.checker.getConstantValue(declaration) as number);\n throw new SpecializeError(node, `${node.text} is not available in scan code.`);\n }\n\n private rootValue(root: Root, at: ts.Node): Value {\n const value = this.model.rootValues.get(root)!;\n const node = this.model.node(value);\n if (node) {\n if (this.kept(root.file) && node.captured.kind !== \"service\") return this.keptRoot(root);\n return { kind: \"static\", node };\n }\n if (this.kept(root.file) || root.declaration.parent.flags & ts.NodeFlags.Const)\n return this.capturedConstant(value, at);\n // A module `let` of a plain module is state in its own global list.\n const namespace = this.namespace(root);\n this.storedRoots.add(root);\n return {\n kind: \"code\",\n text: `${namespace}.${root.name}`,\n declared: this.checker.getTypeAtLocation(root.declaration.name),\n place: true,\n iec: this.layouts.iecName(root.declaration),\n setter: `${namespace}.${setterName(root.name)}`,\n };\n }\n\n /** A binding in a module the program keeps, read by its own name. */\n private keptRoot(root: Root): Value {\n const names = this.imports.get(root.file) ?? new Set<string>();\n names.add(root.name);\n this.imports.set(root.file, names);\n return {\n kind: \"code\",\n text: root.name,\n declared: this.checker.getTypeAtLocation(root.declaration.name),\n place: !(root.declaration.parent.flags & ts.NodeFlags.Const),\n };\n }\n\n private capturedConstant(value: CapturedValue, at: ts.Node): Value {\n if (value.kind === \"node\") throw new SpecializeError(at, \"Not a primitive.\");\n return constant(\n value.kind === \"undefined\"\n ? undefined\n : value.kind === \"bigint\"\n ? BigInt(value.value)\n : value.value,\n );\n }\n\n /** A known node or primitive read from a captured object at one step. */\n private fromCaptured(value: CapturedValue, holder: ModelNode, step: Step): Value {\n const node = this.model.node(value);\n if (node) {\n // A field scan code assigns as a whole is a place, holding its own copy of what setup gave it.\n if (\n (node.captured.kind === \"object\" || node.captured.kind === \"array\") &&\n step.kind === \"field\" &&\n this.written(holder, step.name)\n )\n return this.storedField(holder, step);\n return { kind: \"static\", node };\n }\n const stored =\n step.kind === \"field\" ? this.stored(holder, step.name) : this.storedArray(holder);\n if (stored) return this.storedField(holder, step);\n return this.capturedConstant(value, holder.type?.symbol?.valueDeclaration ?? this.sources[0]!);\n }\n\n /** A captured field's declaration: a class member or a record's property. */\n private fieldDeclaration(holder: ModelNode, name: string): ts.Node | undefined {\n return holder.captured.kind === \"instance\"\n ? this.model.member(this.model.classOf(holder), name)\n : this.fieldSymbol(holder, name)?.valueDeclaration;\n }\n\n /** The IEC width a captured field's declaration names. */\n private fieldIec(holder: ModelNode, name: string): string | undefined {\n return this.layouts.iecName(this.fieldDeclaration(holder, name));\n }\n\n /** The IEC width an array declaration gives its elements, as `data: Array<BYTE>` does. */\n private elementIec(declaration: ts.Node | undefined): string | undefined {\n const node = declaration && (declaration as { type?: ts.TypeNode }).type;\n const element =\n node && ts.isArrayTypeNode(node)\n ? node.elementType\n : node && ts.isTypeReferenceNode(node)\n ? node.typeArguments?.[0]\n : undefined;\n return element ? this.layouts.iecName({ type: element } as unknown as ts.Node) : undefined;\n }\n\n /** The IEC width of an array's elements, from the declaration holding the array. */\n private arrayElementIec(array: ModelNode): string | undefined {\n const owner = array.owner;\n const last = owner?.steps.at(-1);\n if (!owner || last?.kind !== \"field\") return undefined;\n const holder = this.at(owner.root, owner.steps.slice(0, -1));\n return holder && this.elementIec(this.fieldDeclaration(holder, last.name));\n }\n\n private storedField(holder: ModelNode, step: Step): Value {\n const declared =\n step.kind === \"index\"\n ? holder.type && this.model.elementType(holder.type)\n : holder.captured.kind === \"instance\"\n ? (() => {\n const member = this.model.member(this.model.classOf(holder), step.name);\n return member && this.checker.getTypeAtLocation(member.name);\n })()\n : holder.type && this.model.fieldType(holder.type, step.name, holder.captured);\n const global =\n step.kind === \"field\" &&\n holder.owner?.steps.length === 0 &&\n this.flattened(holder.owner.root);\n return {\n kind: \"code\",\n text: `${this.pathText(holder)}${step.kind === \"index\" ? `[${step.index}]` : `.${step.name}`}`,\n declared,\n place: true,\n ...(step.kind === \"field\"\n ? {\n iec: this.fieldIec(holder, step.name),\n elementIec: this.elementIec(this.fieldDeclaration(holder, step.name)),\n }\n : { iec: this.arrayElementIec(holder) }),\n ...(global && { setter: `${this.pathText(holder)}.${setterName(step.name)}` }),\n };\n }\n\n member(object: Value, name: string, at: ts.Node, frame: Frame): Value {\n if (object.kind === \"static\") {\n const node = object.node;\n const captured = node.captured;\n if (captured.kind === \"service\")\n return {\n kind: \"static\",\n node: this.serviceNode(captured.path ? `${captured.path}.${name}` : name),\n };\n if (captured.kind === \"instance\") {\n const declaration = this.model.classOf(node);\n const accessor = declaration.members.find(\n (member): member is ts.GetAccessorDeclaration =>\n ts.isGetAccessorDeclaration(member) && member.name.getText() === name,\n );\n if (accessor)\n return this.invoke(\n { kind: \"function\", declaration: accessor, self: node },\n [],\n at,\n frame,\n );\n const method = declaration.members.find(\n (member): member is ts.MethodDeclaration =>\n ts.isMethodDeclaration(member) && member.name.getText() === name,\n );\n if (method) return { kind: \"function\", declaration: method, self: node };\n }\n if (captured.kind === \"array\" && name === \"length\") return constant(captured.items.length);\n if (captured.kind === \"object\" || captured.kind === \"instance\") {\n const field = captured.fields[name];\n if (!field) {\n if (captured.kind === \"object\") return constant(undefined);\n throw new SpecializeError(at, `${name} is not set during setup.`);\n }\n return this.fromCaptured(field, node, { kind: \"field\", name });\n }\n throw new SpecializeError(at, `${name} cannot be read from this value.`);\n }\n if (object.kind === \"virtual\") {\n if (name === \"length\" && object.items) return constant(object.items.length);\n const field = object.fields?.get(name);\n if (field) return field;\n throw new SpecializeError(at, `${name} is not set.`);\n }\n if (object.kind === \"code\") {\n const declared = object.declared && this.fieldDeclared(object.declared, name, at);\n const property =\n object.declared &&\n this.checker.getPropertyOfType(this.checker.getNonNullableType(object.declared), name);\n return {\n kind: \"code\",\n text: `${object.text}.${name}`,\n declared,\n place: object.place,\n iec: this.layouts.iecName(property?.valueDeclaration),\n };\n }\n if (object.kind === \"const\" && object.value === undefined)\n throw new SpecializeError(at, `Reading ${name} of undefined.`);\n throw new SpecializeError(at, `${name} cannot be read from this value.`);\n }\n\n /** An optional's value where TypeScript has narrowed out undefined, as `x` reads after `x !== undefined`. */\n private narrowed(value: Value, at: ts.Node): Value {\n if (value.kind !== \"code\" || !value.declared || !this.isOptionalRecord(value.declared))\n return value;\n const type = this.checker.getTypeAtLocation(at);\n if (type.isUnion() && type.types.some((part) => part.flags & ts.TypeFlags.Undefined))\n return value;\n if (type.flags & ts.TypeFlags.Undefined) return value;\n return {\n kind: \"code\",\n text: `${value.text}.value`,\n declared: this.checker.getNonNullableType(value.declared),\n place: value.place,\n };\n }\n\n /** The declared type of a field of a runtime record, through optionals and tagged unions. */\n private fieldDeclared(type: ts.Type, name: string, at: ts.Node): ts.Type | undefined {\n const defined = this.checker.getNonNullableType(type);\n const tagged = this.layouts.tagged(defined);\n if (tagged)\n return name === tagged.tag\n ? this.tagType(defined, tagged)\n : this.taggedFieldType(defined, tagged, name);\n const property = this.checker.getPropertyOfType(defined, name);\n if (!property)\n throw new SpecializeError(\n at,\n `${name} is not a field of ${this.checker.typeToString(type)}.`,\n );\n return this.checker.getTypeOfSymbol(property);\n }\n\n private readonly services = new Map<string, ModelNode>();\n private serviceNode(path: string): ModelNode {\n const known = this.services.get(path);\n if (known) return known;\n const node: ModelNode = { id: -1 - this.services.size, captured: { kind: \"service\", path } };\n this.services.set(path, node);\n return node;\n }\n\n element(object: Value, index: Value, at: ts.Node, frame: Frame): Value {\n if (index.kind === \"const\" && typeof index.value === \"number\") {\n if (object.kind === \"virtual\" && object.items) {\n const item = object.items[index.value];\n if (!item) throw new SpecializeError(at, `Index ${index.value} is past the end.`);\n return item;\n }\n if (object.kind === \"static\" && object.node.captured.kind === \"array\") {\n const item = object.node.captured.items[index.value];\n if (!item) return constant(undefined);\n return this.fromCaptured(item, object.node, { kind: \"index\", index: index.value });\n }\n if (object.kind === \"static\" && object.node.captured.kind === \"object\") {\n const field = object.node.captured.fields[String(index.value)];\n if (!field) return constant(undefined);\n return this.fromCaptured(field, object.node, { kind: \"field\", name: String(index.value) });\n }\n }\n if (object.kind === \"static\") {\n const node = object.node;\n // A runtime index into stored data, or into a fixed table of plain values.\n const declared =\n node.type &&\n (node.captured.kind === \"array\"\n ? this.model.elementType(node.type)\n : this.recordElement(node.type));\n const text = this.storedNode(node) ? this.pathText(node) : this.table(node);\n return {\n kind: \"code\",\n text: `${text}[${this.code(index, undefined, frame)}]`,\n declared,\n place: true,\n };\n }\n if (object.kind === \"code\") {\n const declared =\n object.declared &&\n (this.model.elementType(object.declared) ?? this.recordElement(object.declared));\n return {\n kind: \"code\",\n text: `${object.text}[${this.code(index, undefined, frame)}]`,\n declared,\n place: object.place,\n iec: object.elementIec,\n };\n }\n if (object.kind === \"virtual\" && object.items) {\n const text = this.materialize(object, at, frame);\n return {\n kind: \"code\",\n text: `${text}[${this.code(index, undefined, frame)}]`,\n declared: this.checker.getTypeAtLocation(at),\n };\n }\n throw new SpecializeError(at, \"This value cannot be indexed.\");\n }\n\n private recordElement(type: ts.Type): ts.Type | undefined {\n return type.aliasSymbol?.name === \"Record\" ? type.aliasTypeArguments?.[1] : undefined;\n }\n\n private storedNode(node: ModelNode): boolean {\n return node.captured.kind === \"array\" ? this.storedArray(node) : this.storedWhole(node);\n }\n\n private readonly tables = new Map<number, string>();\n readonly tableDeclarations: string[] = [];\n /** A fixed table setup built, emitted once for scan code that indexes it at runtime. */\n private table(node: ModelNode): string {\n const known = this.tables.get(node.id);\n if (known) return known;\n if (!node.type) throw new Error(\"A table needs a declared type.\");\n const name = `tsplcTable${this.tables.size + 1}`;\n this.tables.set(node.id, name);\n const type = this.layouts.text(node.type, { kind: \"node\", id: node.id });\n this.tableDeclarations.push(\n `const ${name}: ${type} = ${this.valueText({ kind: \"node\", id: node.id }, node.type, type)};`,\n );\n return name;\n }\n\n /** Stores a scan-built array in a local, for indexing at runtime. */\n private materialize(value: Value, at: ts.Node, frame: Frame): string {\n const type = this.checker.getTypeAtLocation(at);\n const element = this.model.elementType(type);\n if (!element || value.kind !== \"virtual\" || !value.items)\n throw new SpecializeError(at, \"Not an array.\");\n const local = frame.emitter.temporary();\n frame.emitter.line(\n `const ${local}: FixedArray<${this.layouts.text(element)}, ${Math.max(value.items.length, 1)}> = [${value.items\n .map((item) => this.code(item, element, frame))\n .join(\", \")}];`,\n );\n return local;\n }\n\n private objectLiteral(node: ts.ObjectLiteralExpression, frame: Frame): Value {\n const fields = new Map<string, Value>();\n for (const property of node.properties) {\n if (ts.isPropertyAssignment(property))\n fields.set(\n property.name.getText(),\n this.expression(\n property.initializer,\n frame,\n this.checker.getContextualType(property.initializer),\n ),\n );\n else if (ts.isShorthandPropertyAssignment(property)) {\n const symbol = this.checker.getShorthandAssignmentValueSymbol(property);\n const local = symbol && frame.env.get(symbol);\n fields.set(property.name.text, local ?? this.expression(property.name, frame));\n } else throw new SpecializeError(property, \"Write each field of a record.\");\n }\n return { kind: \"virtual\", fields };\n }\n\n private unary(node: ts.PrefixUnaryExpression, frame: Frame): Value {\n const operand = this.expression(node.operand, frame);\n switch (node.operator) {\n case ts.SyntaxKind.ExclamationToken:\n if (operand.kind === \"const\") return constant(!operand.value);\n if (operand.kind === \"static\" || operand.kind === \"function\") return constant(false);\n return {\n kind: \"code\",\n text: `!${this.condition(operand, node.operand, frame)}`,\n declared: this.checker.getBooleanType(),\n };\n case ts.SyntaxKind.MinusToken:\n if (operand.kind === \"const\" && typeof operand.value === \"number\")\n return constant(-operand.value);\n return {\n kind: \"code\",\n text: `-${this.code(operand, undefined, frame)}`,\n declared: this.checker.getTypeAtLocation(node),\n };\n case ts.SyntaxKind.PlusToken:\n return operand;\n default:\n throw new SpecializeError(node, `${ts.tokenToString(node.operator)} is not supported.`);\n }\n }\n\n private binary(node: ts.BinaryExpression, frame: Frame, expected?: ts.Type): Value {\n const kind = node.operatorToken.kind;\n if (kind === ts.SyntaxKind.AmpersandAmpersandToken || kind === ts.SyntaxKind.BarBarToken) {\n const left = this.expression(node.left, frame);\n const and = kind === ts.SyntaxKind.AmpersandAmpersandToken;\n if (left.kind === \"const\") {\n if (Boolean(left.value) !== and) return left;\n return this.expression(node.right, frame, expected);\n }\n if (left.kind === \"static\" || left.kind === \"function\")\n return and ? this.expression(node.right, frame, expected) : left;\n const right = this.expression(node.right, frame, expected);\n if (right.kind === \"const\" && typeof right.value === \"boolean\") {\n if (right.value === and)\n return {\n kind: \"code\",\n text: this.condition(left, node.left, frame),\n declared: this.checker.getBooleanType(),\n };\n return constant(!and);\n }\n return {\n kind: \"code\",\n text: `(${this.condition(left, node.left, frame)} ${and ? \"&&\" : \"||\"} ${this.condition(right, node.right, frame)})`,\n declared: this.checker.getBooleanType(),\n };\n }\n if (kind === ts.SyntaxKind.QuestionQuestionToken) {\n const left = this.expression(node.left, frame);\n if (left.kind === \"const\")\n return left.value === undefined ? this.expression(node.right, frame, expected) : left;\n if (left.kind === \"static\") return left;\n const declared = left.kind === \"code\" ? left.declared : undefined;\n const right = this.expression(\n node.right,\n frame,\n declared && this.checker.getNonNullableType(declared),\n );\n return {\n kind: \"code\",\n text: `(${this.isUndefinedText(this.code(left, declared, frame), declared)} ? ${this.code(right, declared && this.checker.getNonNullableType(declared), frame)} : ${this.code(left, undefined, frame)}${declared && this.isOptionalRecord(declared) ? \".value\" : \"\"})`,\n declared: declared && this.checker.getNonNullableType(declared),\n };\n }\n if (isAssignment(kind)) throw new SpecializeError(node, \"Assign in a statement of its own.\");\n const equality = [\n ts.SyntaxKind.EqualsEqualsEqualsToken,\n ts.SyntaxKind.ExclamationEqualsEqualsToken,\n ts.SyntaxKind.EqualsEqualsToken,\n ts.SyntaxKind.ExclamationEqualsToken,\n ].includes(kind);\n const left = this.expression(node.left, frame);\n const right = this.expression(\n node.right,\n frame,\n left.kind === \"code\" ? left.declared : undefined,\n );\n const negate =\n kind === ts.SyntaxKind.ExclamationEqualsEqualsToken ||\n kind === ts.SyntaxKind.ExclamationEqualsToken;\n if (equality) {\n const folded = this.equal(left, right);\n if (folded !== undefined) return constant(negate ? !folded : folded);\n const [code, other] = left.kind === \"code\" ? [left, right] : [right as Value, left];\n if (code.kind === \"code\" && other.kind === \"const\" && other.value === undefined) {\n const test = this.isUndefinedText(code.text, code.declared);\n return {\n kind: \"code\",\n text: negate ? `!(${test})` : test,\n declared: this.checker.getBooleanType(),\n };\n }\n const declared = code.kind === \"code\" ? code.declared : undefined;\n const [leftText, rightText] = this.comparable(left, right, declared, frame);\n const text = `${leftText} ${negate ? \"!==\" : \"===\"} ${rightText}`;\n return { kind: \"code\", text: `(${text})`, declared: this.checker.getBooleanType() };\n }\n if (\n left.kind === \"const\" &&\n right.kind === \"const\" &&\n typeof left.value === \"number\" &&\n typeof right.value === \"number\"\n ) {\n const folded = foldNumber(kind, left.value, right.value);\n if (folded !== undefined) return constant(folded);\n }\n const operator = binaryToken(kind);\n if (!operator)\n throw new SpecializeError(node, `${node.operatorToken.getText()} is not supported.`);\n const declared = this.checker.getTypeAtLocation(node);\n const [leftText, rightText] = [\"<\", \"<=\", \">\", \">=\"].includes(operator)\n ? this.comparable(left, right, undefined, frame)\n : [this.code(left, undefined, frame), this.code(right, undefined, frame)];\n return { kind: \"code\", text: `(${leftText} ${operator} ${rightText})`, declared };\n }\n\n /**\n * Both sides of a comparison as text. Integers of different signedness, which TypeScript\n * compares as numbers, both widen to LINT so the PLC compares them exactly.\n */\n private comparable(\n left: Value,\n right: Value,\n declared: ts.Type | undefined,\n frame: Frame,\n ): [string, string] {\n const leftText = this.code(left, declared, frame),\n rightText = this.code(right, declared, frame);\n if (left.kind !== \"code\" || right.kind !== \"code\") return [leftText, rightText];\n const from = left.iec ?? \"DINT\",\n to = right.iec ?? \"DINT\";\n if (!needsConversion(from, to) || !needsConversion(to, from)) return [leftText, rightText];\n this.typeImports.add(\"wrap\");\n return [`wrap<LINT>(${leftText})`, `wrap<LINT>(${rightText})`];\n }\n\n /** Equality known now: two known objects, or a known object against undefined. */\n private equal(left: Value, right: Value): boolean | undefined {\n if (left.kind === \"const\" && right.kind === \"const\") return left.value === right.value;\n if (left.kind === \"static\" && right.kind === \"static\") return left.node === right.node;\n if (\n (left.kind === \"static\" && right.kind === \"const\") ||\n (left.kind === \"const\" && right.kind === \"static\")\n )\n return false;\n return undefined;\n }\n\n /** A boolean condition, including JavaScript truthiness of optionals and enums. */\n private condition(value: Value, at: ts.Node, frame: Frame): string {\n if (value.kind === \"code\" && value.declared) {\n const declared = value.declared;\n if (this.isOptionalRecord(declared) && !ts.isPrefixUnaryExpression(at)) {\n const type = this.checker.getTypeAtLocation(at);\n if (!(type.flags & ts.TypeFlags.BooleanLike)) return `${value.text}.has`;\n }\n const literal = this.layouts.literalEnum(declared);\n if (literal?.optional) return `${value.text} !== ${this.layouts.member(literal, undefined)}`;\n }\n return this.code(value, undefined, frame);\n }\n\n // ---- Calls ----\n\n private call(node: ts.CallExpression, frame: Frame, expected?: ts.Type): Value {\n const callee = node.expression;\n // Array methods and other calls the language provides.\n if (ts.isPropertyAccessExpression(callee) || ts.isPropertyAccessChain(callee)) {\n const name = callee.name.text;\n if (ts.isIdentifier(callee.expression) && callee.expression.text === \"Math\")\n return this.math(name, node, frame);\n if (\n ts.isIdentifier(callee.expression) &&\n callee.expression.text === \"Object\" &&\n name === \"values\"\n ) {\n const object = this.expression(node.arguments[0]!, frame);\n if (object.kind === \"static\" && object.node.captured.kind === \"object\")\n return {\n kind: \"virtual\",\n items: Object.entries(object.node.captured.fields).map(([field, value]) =>\n this.fromCaptured(value, object.node, { kind: \"field\", name: field }),\n ),\n };\n throw new SpecializeError(node, \"Object.values needs a record setup built.\");\n }\n const receiver = this.expression(callee.expression, frame);\n const items = this.items(receiver);\n if (items && isArrayMethod(name)) return this.arrayMethod(name, items, node, frame);\n if (receiver.kind === \"static\" && receiver.node.captured.kind === \"service\") {\n const path = receiver.node.captured.path ? `${receiver.node.captured.path}.${name}` : name;\n return this.serviceCall(path, node, frame);\n }\n const method = this.member(receiver, name, callee, frame);\n if (method.kind === \"static\" && method.node.captured.kind === \"service\")\n return this.serviceCall(method.node.captured.path, node, frame);\n return this.invoke(\n method,\n node.arguments.map((argument, index) => this.argument(argument, method, index, frame)),\n node,\n frame,\n expected,\n );\n }\n const target = this.expression(callee, frame);\n if (target.kind === \"static\" && target.node.captured.kind === \"service\")\n return this.serviceCall(target.node.captured.path, node, frame);\n if (target.kind === \"static\" && target.node.captured.kind === \"function\") {\n const fn = this.functionDeclaration(target.node.captured.file, target.node.captured.name);\n return this.invoke(\n { kind: \"function\", declaration: fn },\n node.arguments.map((argument, index) =>\n this.argument(argument, { kind: \"function\", declaration: fn }, index, frame),\n ),\n node,\n frame,\n expected,\n );\n }\n if (ts.isIdentifier(callee) && this.sdkCall(callee)) return this.sdk(callee.text, node, frame);\n return this.invoke(\n target,\n node.arguments.map((argument, index) => this.argument(argument, target, index, frame)),\n node,\n frame,\n expected,\n );\n }\n\n private argument(node: ts.Expression, callee: Value, index: number, frame: Frame): Value {\n let expected: ts.Type | undefined;\n if (callee.kind === \"function\" && !ts.isGetAccessorDeclaration(callee.declaration)) {\n const parameter = callee.declaration.parameters[index];\n expected = parameter && this.checker.getTypeAtLocation(parameter);\n }\n return this.expression(node, frame, expected);\n }\n\n private functionDeclaration(file: string, name: string): FunctionLike {\n const source = this.sources.find((item) => item.fileName === file);\n for (const statement of source?.statements ?? []) {\n if (ts.isFunctionDeclaration(statement) && statement.name?.text === name) return statement;\n if (ts.isVariableStatement(statement))\n for (const declaration of statement.declarationList.declarations)\n if (\n ts.isIdentifier(declaration.name) &&\n declaration.name.text === name &&\n declaration.initializer &&\n (ts.isArrowFunction(declaration.initializer) ||\n ts.isFunctionExpression(declaration.initializer))\n )\n return declaration.initializer;\n }\n throw new Error(`${file}: no function ${name}.`);\n }\n\n /** SDK functions scan code calls, such as the PLC clock. */\n private sdkCall(callee: ts.Identifier): boolean {\n let symbol = this.checker.getSymbolAtLocation(callee);\n while (symbol && symbol.flags & ts.SymbolFlags.Alias)\n symbol = this.checker.getAliasedSymbol(symbol);\n const file = symbol?.declarations?.[0]?.getSourceFile().fileName ?? \"\";\n return file.includes(\"/@tsplc/compiler/\") || file.includes(\"/packages/compiler/\");\n }\n\n private sdk(name: string, node: ts.CallExpression, frame: Frame): Value {\n const args = node.arguments.map((argument) =>\n this.code(this.expression(argument, frame), undefined, frame),\n );\n this.sdkImports.add(name);\n return {\n kind: \"code\",\n text: `${name}(${args.join(\", \")})`,\n declared: this.checker.getTypeAtLocation(node),\n };\n }\n\n readonly sdkImports = new Set<string>();\n /** Conversions generated code imports from `@tsplc/compiler/types`. */\n readonly typeImports = new Set<string>();\n\n private math(name: string, node: ts.CallExpression, frame: Frame): Value {\n const args = node.arguments.map((argument) => this.expression(argument, frame));\n if (args.every((arg) => arg.kind === \"const\" && typeof arg.value === \"number\")) {\n const values = args.map((arg) => (arg as { value: number }).value);\n const folded = (Math as unknown as Record<string, (...items: number[]) => number>)[name]?.(\n ...values,\n );\n if (typeof folded === \"number\") return constant(folded);\n }\n const texts = args.map((arg) => this.code(arg, undefined, frame));\n const declared = this.checker.getTypeAtLocation(node);\n switch (name) {\n case \"abs\": {\n const local = frame.emitter.temporary();\n frame.emitter.line(`const ${local}: number = ${texts[0]};`);\n return { kind: \"code\", text: `(${local} < 0 ? 0 - ${local} : ${local})`, declared };\n }\n case \"min\":\n case \"max\":\n if (texts.length !== 2) throw new SpecializeError(node, `Math.${name} takes two values.`);\n return {\n kind: \"code\",\n text: `(${texts[0]} ${name === \"min\" ? \"<\" : \">\"} ${texts[1]} ? ${texts[0]} : ${texts[1]})`,\n declared,\n };\n default:\n throw new SpecializeError(node, `Math.${name} is not supported.`);\n }\n }\n\n private serviceCall(path: string, node: ts.CallExpression, frame: Frame): Value {\n const client = this.model.roots.find((root) => {\n const value = this.model.node(this.model.rootValues.get(root)!);\n return value?.captured.kind === \"service\" && value.captured.path === \"\";\n });\n if (!client)\n throw new SpecializeError(node, \"Create the service client in a module of its own.\");\n const names = this.imports.get(client.file) ?? new Set<string>();\n names.add(client.name);\n this.imports.set(client.file, names);\n const args = node.arguments.map((argument) =>\n this.code(\n this.expression(argument, frame, this.checker.getContextualType(argument)),\n this.checker.getContextualType(argument),\n frame,\n ),\n );\n return {\n kind: \"code\",\n text: `${client.name}.${path}(${args.join(\", \")})`,\n declared: this.checker.getTypeAtLocation(node),\n };\n }\n\n /** Calls a function value: specializes it, or inlines a one-expression arrow. */\n private invoke(\n target: Value,\n args: Value[],\n at: ts.Node,\n frame: Frame,\n expected?: ts.Type,\n ): Value {\n if (target.kind !== \"function\") throw new SpecializeError(at, \"Only functions can be called.\");\n const declaration = target.declaration;\n if (\n (ts.isArrowFunction(declaration) || ts.isFunctionExpression(declaration)) &&\n target.env &&\n ts.isArrowFunction(declaration) &&\n !ts.isBlock(declaration.body)\n ) {\n // A callback with one expression inlines with its arguments bound.\n const inline: Frame = { ...frame, env: new Map(target.env), self: target.self ?? frame.self };\n declaration.parameters.forEach((parameter, index) => {\n const arg = args[index] ?? constant(undefined);\n const value = arg.kind === \"code\" && !arg.place ? this.temporaryOf(arg, frame) : arg;\n this.bind(parameter.name, value, false, inline, this.checker.getTypeAtLocation(parameter));\n });\n return this.expression(declaration.body, inline, expected);\n }\n const called = this.routine(declaration, target.self, args, target.env);\n const text = `${called.name}(${called.args.join(\", \")})`;\n const returns = called.returns;\n if (!returns || returns.flags & ts.TypeFlags.Void) {\n if (ts.isExpressionStatement(at.parent)) return { kind: \"code\", text, declared: returns };\n frame.emitter.line(`${text};`);\n return constant(undefined);\n }\n return { kind: \"code\", text, declared: returns };\n }\n\n /** A runtime value held in a const, so inlining doesn't evaluate it twice. */\n private temporaryOf(value: Value & { kind: \"code\" }, frame: Frame): Value {\n if (/^[\\w.[\\]]+$/.test(value.text)) return value;\n const local = frame.emitter.temporary();\n const type = value.declared ? this.localType(value.declared) : \"number\";\n frame.emitter.line(`const ${local}: ${type} = ${value.text};`);\n return { kind: \"code\", text: local, declared: value.declared, place: true };\n }\n\n private arrayMethod(name: string, items: Value[], node: ts.CallExpression, frame: Frame): Value {\n const callback = node.arguments[0] ? this.expression(node.arguments[0], frame) : undefined;\n const apply = (args: Value[]): Value => {\n if (!callback) throw new SpecializeError(node, `${name} needs a callback.`);\n return this.invoke(callback, args, node, frame);\n };\n switch (name) {\n case \"entries\":\n return {\n kind: \"virtual\",\n items: items.map((item, index) => ({ kind: \"virtual\", items: [constant(index), item] })),\n };\n case \"slice\": {\n const [start, end] = node.arguments.map((argument) => this.expression(argument, frame));\n if ((start && start.kind !== \"const\") || (end && end.kind !== \"const\"))\n throw new SpecializeError(node, \"slice needs constant bounds.\");\n return {\n kind: \"virtual\",\n items: items.slice(start?.value as number | undefined, end?.value as number | undefined),\n };\n }\n case \"map\":\n return {\n kind: \"virtual\",\n items: items.map((item, index) => this.settle(apply([item, constant(index)]), frame)),\n };\n case \"filter\": {\n const kept: Value[] = [];\n items.forEach((item, index) => {\n const test = apply([item, constant(index)]);\n if (test.kind !== \"const\")\n throw new SpecializeError(node, \"filter must decide from what setup built.\");\n if (test.value) kept.push(item);\n });\n return { kind: \"virtual\", items: kept };\n }\n case \"forEach\":\n items.forEach((item, index) => {\n const result = apply([item, constant(index)]);\n if (result.kind === \"code\") frame.emitter.line(`${result.text};`);\n });\n return constant(undefined);\n case \"some\":\n case \"every\": {\n const some = name === \"some\";\n const tests = items.map((item, index) => apply([item, constant(index)]));\n const runtime: string[] = [];\n for (const test of tests) {\n if (test.kind === \"const\") {\n if (Boolean(test.value) === some) return constant(some);\n continue;\n }\n runtime.push(this.condition(test, node.arguments[0] ?? node, frame));\n }\n if (!runtime.length) return constant(!some);\n return {\n kind: \"code\",\n text: `(${runtime.join(some ? \" || \" : \" && \")})`,\n declared: this.checker.getBooleanType(),\n };\n }\n case \"reduce\":\n case \"reduceRight\": {\n const order = name === \"reduce\" ? items : [...items].reverse();\n let accumulator = node.arguments[1]\n ? this.expression(node.arguments[1], frame)\n : order.shift()!;\n for (const item of order) accumulator = this.settle(apply([accumulator, item]), frame);\n return accumulator;\n }\n case \"find\": {\n for (const [index, item] of items.entries()) {\n const test = apply([item, constant(index)]);\n if (test.kind !== \"const\")\n throw new SpecializeError(node, \"find must decide from what setup built.\");\n if (test.value) return item;\n }\n return constant(undefined);\n }\n case \"includes\": {\n const target = this.expression(node.arguments[0]!, frame);\n const tests = items.map((item) => this.equal(item, target));\n if (tests.some((test) => test === true)) return constant(true);\n if (tests.every((test) => test === false)) return constant(false);\n throw new SpecializeError(node, \"includes must decide from what setup built.\");\n }\n default:\n throw new SpecializeError(node, `${name} is not supported.`);\n }\n }\n\n /** Keeps a runtime result in a local, so later code reads it rather than repeating it. */\n private settle(value: Value, frame: Frame): Value {\n if (value.kind !== \"code\" || /^[\\w.[\\]]+$/.test(value.text)) return value;\n const local = frame.emitter.temporary();\n frame.emitter.line(\n `const ${local}: ${value.declared ? this.localType(value.declared) : \"boolean\"} = ${value.text};`,\n );\n return { kind: \"code\", text: local, declared: value.declared, place: true };\n }\n\n // ---- Values as code ----\n\n /** Dialect text for a value, in a place of `expected` type when known. */\n code(value: Value, expected: ts.Type | undefined, frame: Frame): string {\n switch (value.kind) {\n case \"code\":\n if (\n expected &&\n value.declared &&\n this.isOptionalRecord(value.declared) &&\n !this.isOptionalRecord(expected)\n )\n return `${value.text}.value`;\n return value.text;\n case \"const\": {\n const literal = expected && this.layouts.literalEnum(expected);\n if (literal && (typeof value.value === \"string\" || value.value === undefined))\n return this.layouts.member(literal, value.value as string | undefined);\n if (expected && this.isOptionalRecord(expected) && value.value === undefined)\n return `defaultValue<${this.layouts.text(expected)}>()`;\n if (expected && this.layouts.enumDeclaration(expected) && typeof value.value === \"number\") {\n const member = this.enumMemberName(expected, value.value);\n if (member) return `${this.layouts.text(expected)}.${member}`;\n }\n if (value.value === undefined) throw new Error(\"undefined has no PLC value here.\");\n if (typeof value.value === \"string\") return JSON.stringify(value.value);\n if (typeof value.value === \"bigint\") return `${value.value}n`;\n return String(value.value);\n }\n case \"static\": {\n const node = value.node;\n if (this.storedNode(node)) return this.pathText(node);\n if (node.type) return this.valueText({ kind: \"node\", id: node.id }, expected ?? node.type);\n throw new Error(\"This object has no PLC value.\");\n }\n case \"virtual\": {\n if (value.fields) {\n const type = expected && this.checker.getNonNullableType(expected);\n if (!type) throw new Error(\"A record literal needs a declared type.\");\n return this.recordLiteral(value.fields, type, frame);\n }\n if (value.items) {\n const element = expected && this.model.elementType(expected);\n return `[${value.items.map((item) => this.code(item, element, frame)).join(\", \")}]`;\n }\n throw new Error(\"Empty value.\");\n }\n case \"function\":\n throw new Error(\"A function has no PLC value; call it.\");\n }\n }\n\n /** A record literal of `type`, every field written; a tagged union fills the other variants' fields. */\n private recordLiteral(fields: Map<string, Value>, type: ts.Type, frame: Frame): string {\n const tagged = this.layouts.tagged(type);\n const names = tagged\n ? this.taggedFields(tagged)\n : this.checker.getPropertiesOfType(type).map((property) => property.name);\n return `{ ${names\n .map((name) => {\n const fieldType = tagged\n ? name === tagged.tag\n ? this.tagType(type, tagged)\n : this.taggedFieldType(type, tagged, name)\n : this.checker.getTypeOfSymbol(this.checker.getPropertyOfType(type, name)!);\n const value = fields.get(name);\n if (!value) return `${name}: ${this.defaultOf(fieldType)}`;\n const property = this.checker.getPropertyOfType(type, name);\n return `${name}: ${this.assignmentText(value, fieldType, frame, this.layouts.iecName(property?.valueDeclaration))}`;\n })\n .join(\", \")} }`;\n }\n}\n\n/** IEC integer and bit-string widths: [bits, signed, bit string]. */\nconst integerWidths: Readonly<Record<string, readonly [number, boolean, boolean]>> = {\n SINT: [8, true, false],\n INT: [16, true, false],\n DINT: [32, true, false],\n LINT: [64, true, false],\n USINT: [8, false, false],\n UINT: [16, false, false],\n UDINT: [32, false, false],\n ULINT: [64, false, false],\n BYTE: [8, false, true],\n WORD: [16, false, true],\n DWORD: [32, false, true],\n LWORD: [64, false, true],\n};\n\n/** Whether IEC needs an explicit conversion from one integer type to another; widening is implicit. */\nconst needsConversion = (from: string, to: string): boolean => {\n const source = integerWidths[from],\n target = integerWidths[to];\n if (!source || !target || from === to) return false;\n if (source[2] || target[2]) return true;\n if (source[1] === target[1]) return source[0] > target[0];\n return source[1] || source[0] >= target[0];\n};\n\nconst isChild = (node: ModelNode, holder: ModelNode, field?: string): boolean => {\n const owner = node.owner;\n const parent = holder.owner;\n if (!owner || !parent || owner.root !== parent.root) return false;\n if (owner.steps.length !== parent.steps.length + 1) return false;\n if (!parent.steps.every((step, index) => stepText(step) === stepText(owner.steps[index]!)))\n return false;\n const last = owner.steps.at(-1)!;\n return field === undefined || (last.kind === \"field\" && last.name === field);\n};\n\n/** The function a storage module exports to set one of its globals. */\nexport const setterName = (name: string): string => `tsplcSet_${name}`;\n\nconst stepText = (step: Step): string =>\n step.kind === \"index\" ? `[${step.index}]` : `.${step.name}`;\n\nconst declarationKey = (declaration: ts.Node): string =>\n `${declaration.getSourceFile().fileName}:${declaration.pos}`;\n\nconst valueKey = (value: Value): string => {\n switch (value.kind) {\n case \"static\":\n return `#${value.node.id}`;\n case \"const\":\n return `=${String(value.value)}`;\n case \"function\":\n return `fn:${declarationKey(value.declaration)}:${value.self?.id ?? \"\"}`;\n case \"virtual\":\n return value.items\n ? `[${value.items.map(valueKey).join(\",\")}]`\n : `{${[...(value.fields ?? [])].map(([name, inner]) => `${name}:${valueKey(inner)}`).join(\",\")}}`;\n case \"code\":\n return \"code\";\n }\n};\n\nconst isAssignment = (kind: ts.SyntaxKind): boolean =>\n kind >= ts.SyntaxKind.FirstAssignment && kind <= ts.SyntaxKind.LastAssignment;\n\nconst compoundOperator = (kind: ts.SyntaxKind): string | undefined =>\n ({\n [ts.SyntaxKind.PlusEqualsToken]: \"+\",\n [ts.SyntaxKind.MinusEqualsToken]: \"-\",\n [ts.SyntaxKind.AsteriskEqualsToken]: \"*\",\n [ts.SyntaxKind.BarEqualsToken]: \"|\",\n [ts.SyntaxKind.AmpersandEqualsToken]: \"&\",\n })[kind as number];\n\nconst binaryToken = (kind: ts.SyntaxKind): string | undefined =>\n ({\n [ts.SyntaxKind.PlusToken]: \"+\",\n [ts.SyntaxKind.MinusToken]: \"-\",\n [ts.SyntaxKind.AsteriskToken]: \"*\",\n [ts.SyntaxKind.LessThanToken]: \"<\",\n [ts.SyntaxKind.LessThanEqualsToken]: \"<=\",\n [ts.SyntaxKind.GreaterThanToken]: \">\",\n [ts.SyntaxKind.GreaterThanEqualsToken]: \">=\",\n [ts.SyntaxKind.AmpersandToken]: \"&\",\n [ts.SyntaxKind.BarToken]: \"|\",\n [ts.SyntaxKind.CaretToken]: \"^\",\n [ts.SyntaxKind.LessThanLessThanToken]: \"<<\",\n [ts.SyntaxKind.GreaterThanGreaterThanToken]: \">>\",\n })[kind as number];\n\nconst foldNumber = (\n kind: ts.SyntaxKind,\n left: number,\n right: number,\n): number | boolean | undefined => {\n switch (kind) {\n case ts.SyntaxKind.PlusToken:\n return left + right;\n case ts.SyntaxKind.MinusToken:\n return left - right;\n case ts.SyntaxKind.AsteriskToken:\n return left * right;\n case ts.SyntaxKind.LessThanToken:\n return left < right;\n case ts.SyntaxKind.LessThanEqualsToken:\n return left <= right;\n case ts.SyntaxKind.GreaterThanToken:\n return left > right;\n case ts.SyntaxKind.GreaterThanEqualsToken:\n return left >= right;\n default:\n return undefined;\n }\n};\n\nconst isArrayMethod = (name: string): boolean =>\n [\n \"entries\",\n \"slice\",\n \"map\",\n \"filter\",\n \"forEach\",\n \"some\",\n \"every\",\n \"reduce\",\n \"reduceRight\",\n \"find\",\n \"includes\",\n ].includes(name);\n\nconst pascal = (text: string): string =>\n text.replace(/(^|[^A-Za-z0-9]+)([A-Za-z0-9])/g, (_, __, letter: string) => letter.toUpperCase());\n\nexport type { LiteralEnum };\n",
18
18
  "import ts from \"typescript\";\nimport type { CapturedValue } from \"./graph.ts\";\nimport type { Model } from \"./model.ts\";\n\n/** IEC names a program can write as types; they keep their width rather than becoming DINT. */\nconst iecNames = new Set([\n \"BOOL\",\n \"SINT\",\n \"INT\",\n \"DINT\",\n \"LINT\",\n \"USINT\",\n \"UINT\",\n \"UDINT\",\n \"ULINT\",\n \"BYTE\",\n \"WORD\",\n \"DWORD\",\n \"LWORD\",\n \"REAL\",\n \"LREAL\",\n \"TIME\",\n \"DATE\",\n \"TIME_OF_DAY\",\n \"DATE_AND_TIME\",\n]);\n\n/** A union of string literals: a PLC enum. */\nexport interface LiteralEnum {\n name: string;\n members: string[];\n /** The union also allows undefined, stored as this extra member. */\n optional: boolean;\n}\n\n/**\n * Turns the program's TypeScript types into the PLC dialect's: string-literal unions become enums,\n * unions of objects become one record tagged by their literal field, `T | undefined` becomes an\n * optional record, and arrays take their captured length. Declarations it needs collect in `declarations`.\n */\nexport class Layouts {\n readonly declarations = new Map<string, string>();\n /** Enums the declarations need from kept modules, by module file. */\n readonly imports = new Map<string, Set<string>>();\n /** Types the declarations need from kept modules, by module file. */\n readonly typeImports = new Map<string, Set<string>>();\n private readonly enums = new Map<string, LiteralEnum>();\n private readonly records = new Map<string, string>();\n private readonly names = new Map<string, number>();\n\n /** Exported types of kept modules by the type they declare, for types that lost their alias name. */\n private readonly keptTypes = new Map<ts.Type, { file: string; name: string }>();\n\n constructor(\n private readonly model: Model,\n private readonly checker: ts.TypeChecker,\n /** Modules the compiled program keeps, whose named types and enums it imports rather than copies. */\n private readonly kept: (file: string) => boolean,\n keptSources: readonly ts.SourceFile[] = [],\n ) {\n for (const source of keptSources)\n for (const statement of source.statements)\n if (\n (ts.isTypeAliasDeclaration(statement) || ts.isInterfaceDeclaration(statement)) &&\n isExported(statement)\n ) {\n const symbol = checker.getSymbolAtLocation(statement.name);\n if (symbol)\n this.keptTypes.set(checker.getDeclaredTypeOfSymbol(symbol), {\n file: source.fileName,\n name: statement.name.text,\n });\n }\n }\n\n private unique(base: string): string {\n const count = this.names.get(base) ?? 0;\n this.names.set(base, count + 1);\n return count ? `${base}_${count + 1}` : base;\n }\n\n private import(file: string, name: string, kind: \"value\" | \"type\" = \"value\"): string {\n const imports = kind === \"value\" ? this.imports : this.typeImports;\n const names = imports.get(file) ?? new Set<string>();\n names.add(name);\n imports.set(file, names);\n return name;\n }\n\n /** Generated enums, which modules import as values. */\n get enumNames(): string[] {\n return [...this.declarations]\n .filter(([, text]) => text.startsWith(\"export enum\"))\n .map(([name]) => name);\n }\n\n /** The string literals of a union of them, without undefined. */\n literals(type: ts.Type): { members: string[]; optional: boolean } | undefined {\n const parts = type.isUnion() ? type.types : [type];\n const members: string[] = [];\n let optional = false;\n for (const part of parts) {\n if (part.flags & ts.TypeFlags.Undefined) optional = true;\n else if (part.isStringLiteral()) members.push(part.value);\n else return undefined;\n }\n return members.length ? { members, optional } : undefined;\n }\n\n /** The enum a string-literal union compiles to. */\n literalEnum(type: ts.Type): LiteralEnum | undefined {\n const literals = this.literals(type);\n if (!literals) return undefined;\n const key = [...literals.members].sort().join(\"|\");\n const existing = this.enums.get(key);\n if (existing) {\n existing.optional ||= literals.optional;\n this.writeEnum(existing);\n return existing;\n }\n const alias = (type.aliasSymbol ?? this.checker.getNonNullableType(type).aliasSymbol)?.name;\n const declared: LiteralEnum = {\n name: this.unique(alias ?? pascal(literals.members.join(\"_or_\"))),\n members: literals.members,\n optional: literals.optional,\n };\n this.enums.set(key, declared);\n this.writeEnum(declared);\n return declared;\n }\n\n private writeEnum(declared: LiteralEnum): void {\n const members = [\n ...(declared.optional ? [\"Undefined = 0\"] : []),\n ...declared.members.map((member, index) => `${enumMember(member)} = ${index + 1}`),\n ];\n this.declarations.set(declared.name, `export enum ${declared.name} { ${members.join(\", \")} }`);\n }\n\n /** `Enum.Member` text for a string literal of a literal union. */\n member(declared: LiteralEnum, value: string | undefined): string {\n return `${declared.name}.${value === undefined ? \"Undefined\" : enumMember(value)}`;\n }\n\n /** The object types of a union of them, without undefined, when it has a literal tag field. */\n tagged(type: ts.Type): { tag: string; variants: ts.Type[]; optional: boolean } | undefined {\n if (!type.isUnion()) return undefined;\n const variants = type.types.filter((part) => !(part.flags & ts.TypeFlags.Undefined));\n if (variants.length < 2 || variants.some((part) => !(part.flags & ts.TypeFlags.Object)))\n return undefined;\n const first = variants[0]!;\n for (const property of first.getProperties()) {\n const literal = (variant: ts.Type) => {\n const own = variant.getProperty(property.name);\n const value = own && this.checker.getTypeOfSymbol(own);\n return value?.isStringLiteral() ? value.value : undefined;\n };\n if (variants.every((variant) => literal(variant) !== undefined))\n return {\n tag: property.name,\n variants,\n optional: variants.length !== type.types.length,\n };\n }\n return undefined;\n }\n\n /** The dialect type text for `type`, holding `value` when it was captured. */\n text(type: ts.Type, value?: CapturedValue, hint?: string): string {\n const checker = this.checker;\n const alias = type.aliasSymbol?.name;\n if (alias && iecNames.has(alias)) return alias;\n if (type.flags & ts.TypeFlags.BooleanLike) return \"boolean\";\n const enumDeclaration = this.enumDeclaration(type);\n if (enumDeclaration) return this.enumName(enumDeclaration);\n if (type.flags & ts.TypeFlags.NumberLike) return \"number\";\n if (type.flags & ts.TypeFlags.BigIntLike) return \"LINT\";\n const literal = this.literalEnum(type);\n if (literal) return literal.name;\n const named = this.namedKept(type);\n if (named) return named;\n if (type.flags & ts.TypeFlags.StringLike) return \"string\";\n const tagged = this.tagged(type);\n if (tagged) return this.taggedRecord(type, tagged);\n if (type.isUnion()) {\n const defined = checker.getNonNullableType(type);\n if (defined !== type) return this.optional(defined, value);\n }\n const element = this.model.elementType(type);\n if (\n element &&\n (checker.isArrayType(type) || checker.isTupleType(type) || isReadonlyArray(type))\n ) {\n const node = value && this.model.node(value);\n if (!node || node.captured.kind !== \"array\")\n throw new Error(`${checker.typeToString(type)} needs a length: build it during setup.`);\n const items = node.captured.items;\n return `FixedArray<${this.text(element, items[0] ?? this.sample(element))}, ${Math.max(items.length, 1)}>`;\n }\n const enumKey = this.enumRecord(type);\n if (enumKey) return enumKey;\n if (type.flags & ts.TypeFlags.Object) return this.record(type, value, hint);\n throw new Error(`${checker.typeToString(type)} has no PLC layout.`);\n }\n\n /** The TypeScript enum a type is, or is a union of members of. */\n enumDeclaration(type: ts.Type): ts.EnumDeclaration | undefined {\n const parts = type.isUnion() ? type.types : [type];\n if (!parts.length || !parts.every((part) => part.flags & ts.TypeFlags.EnumLike))\n return undefined;\n const symbol = parts[0]!.symbol;\n const declaration =\n symbol?.declarations?.find(ts.isEnumDeclaration) ?? symbol?.valueDeclaration?.parent;\n return declaration && ts.isEnumDeclaration(declaration) ? declaration : undefined;\n }\n\n /**\n * The IEC type a declaration names, such as `WORD`: TypeScript keeps no alias name for an alias\n * of a primitive, so the width is read from the declaration's annotation.\n */\n iecName(declaration: ts.Node | undefined): string | undefined {\n const node = declaration && (declaration as { type?: ts.TypeNode }).type;\n return node && ts.isTypeReferenceNode(node) && iecNames.has(node.typeName.getText())\n ? node.typeName.getText()\n : undefined;\n }\n\n /** A declared field's layout, keeping the IEC widths its annotation names. */\n declaredText(\n declaration: ts.Node | undefined,\n type: ts.Type,\n value?: CapturedValue,\n hint?: string,\n ): string {\n const iec = this.iecName(declaration);\n if (iec) return iec;\n const node = declaration && (declaration as { type?: ts.TypeNode }).type;\n const element =\n node && ts.isArrayTypeNode(node)\n ? node.elementType\n : node &&\n ts.isTypeReferenceNode(node) &&\n [\"Array\", \"ReadonlyArray\"].includes(node.typeName.getText())\n ? node.typeArguments?.[0]\n : undefined;\n const elementName =\n element && ts.isTypeReferenceNode(element) ? element.typeName.getText() : undefined;\n if (elementName && iecNames.has(elementName)) {\n const captured = value && this.model.node(value);\n if (captured?.captured.kind !== \"array\")\n throw new Error(\n `${this.checker.typeToString(type)} needs a length: build it during setup.`,\n );\n return `FixedArray<${elementName}, ${Math.max(captured.captured.items.length, 1)}>`;\n }\n return this.text(type, value, hint);\n }\n\n /** A captured value of a field, from any captured record that has it. */\n private fieldSample(property: ts.Symbol): CapturedValue | undefined {\n for (const node of this.model.nodes) {\n const captured = node.captured;\n if (\n (captured.kind === \"object\" || captured.kind === \"instance\") &&\n node.type?.getProperty(property.name) === property\n )\n return captured.fields[property.name];\n }\n return undefined;\n }\n\n /** Some captured value of `type`, giving the lengths of an empty array's element. */\n private sample(type: ts.Type): CapturedValue | undefined {\n const node = this.model.nodes.find((candidate) => candidate.type === type);\n return node && { kind: \"node\", id: node.id };\n }\n\n /** A named type from a module the program keeps, such as a service's procedure record. */\n private namedKept(type: ts.Type): string | undefined {\n const declared = this.keptTypes.get(type);\n if (declared) return this.import(declared.file, declared.name, \"type\");\n const symbol = type.aliasSymbol ?? type.getSymbol();\n const declaration = symbol?.declarations?.[0];\n if (!symbol || !declaration) return undefined;\n if (!ts.isTypeAliasDeclaration(declaration) && !ts.isInterfaceDeclaration(declaration))\n return undefined;\n const file = declaration.getSourceFile().fileName;\n if (!this.kept(file) || !isExported(declaration)) return undefined;\n return this.import(file, symbol.name, \"type\");\n }\n\n private enumName(declaration: ts.EnumDeclaration): string {\n const file = declaration.getSourceFile().fileName;\n if (!this.kept(file))\n throw new Error(\n `${declaration.name.text}: declare PLC enums in a module of enums and constants, so the server and PLC share them.`,\n );\n return this.import(file, declaration.name.text);\n }\n\n /** `Record<Enum, T>`: an object type whose properties are exactly an enum's members. */\n private enumRecord(type: ts.Type): string | undefined {\n const alias = type.aliasSymbol;\n if (alias?.name !== \"Record\" || type.aliasTypeArguments?.length !== 2) return undefined;\n const [key, element] = type.aliasTypeArguments;\n if (!this.enumDeclaration(key!) && !this.literalEnum(key!)) return undefined;\n return `Record<${this.text(key!)}, ${this.text(element!, undefined)}>`;\n }\n\n /** `{ has, value }` for `T | undefined`. */\n private optional(defined: ts.Type, value: CapturedValue | undefined): string {\n const inner = this.text(defined, value?.kind === \"undefined\" ? undefined : value);\n const name = `Optional_${inner.replace(/\\W+/g, \"_\")}`;\n if (!this.declarations.has(name))\n this.declarations.set(name, `export interface ${name} { has: boolean; value: ${inner}; }`);\n return name;\n }\n\n /** One record for a tagged union: the tag as an enum, and every variant's fields. */\n private taggedRecord(\n type: ts.Type,\n tagged: { tag: string; variants: ts.Type[]; optional: boolean },\n ): string {\n const key = `tagged:${this.checker.typeToString(type)}`;\n const known = this.records.get(key);\n if (known) return known;\n const name = this.unique(type.aliasSymbol?.name ?? \"Variant\");\n this.records.set(key, name);\n const tags = tagged.variants.map((variant) => {\n const property = variant.getProperty(tagged.tag)!;\n return (this.checker.getTypeOfSymbol(property) as ts.StringLiteralType).value;\n });\n const tagEnum: LiteralEnum = { name: `${name}Kind`, members: tags, optional: tagged.optional };\n this.enums.set([...tags].sort().join(\"|\"), tagEnum);\n this.writeEnum(tagEnum);\n const fields = new Map<string, string>();\n for (const variant of tagged.variants)\n for (const property of variant.getProperties()) {\n if (property.name === tagged.tag || fields.has(property.name)) continue;\n fields.set(\n property.name,\n this.declaredText(property.valueDeclaration, this.checker.getTypeOfSymbol(property)),\n );\n }\n this.declarations.set(\n name,\n `export interface ${name} { ${tagged.tag}: ${tagEnum.name}; ${[...fields]\n .map(([field, text]) => `${field}: ${text};`)\n .join(\" \")} }`,\n );\n return name;\n }\n\n /** A record of an object type; captured arrays inside it can give it distinct variants. */\n private record(type: ts.Type, value: CapturedValue | undefined, hint?: string): string {\n const node = value && this.model.node(value);\n const fields = this.checker.getPropertiesOfType(type).map((property) => {\n const captured =\n node && (node.captured.kind === \"object\" || node.captured.kind === \"instance\")\n ? node.captured.fields[property.name]\n : undefined;\n return `${property.name}: ${this.declaredText(property.valueDeclaration, this.checker.getTypeOfSymbol(property), captured ?? this.fieldSample(property), pascal(property.name))};`;\n });\n const body = fields.join(\" \");\n const base = type.aliasSymbol?.name ?? type.getSymbol()?.name;\n const key = `${base}:${body}`;\n const known = this.records.get(key);\n if (known) return known;\n const name = this.unique(\n base && base !== \"__type\" && base !== \"__object\" ? base : (hint ?? \"Fields\"),\n );\n this.records.set(key, name);\n this.declarations.set(name, `export interface ${name} { ${body} }`);\n return name;\n }\n}\n\nconst isExported = (declaration: ts.Declaration): boolean =>\n Boolean(ts.getCombinedModifierFlags(declaration) & ts.ModifierFlags.Export);\n\nconst isReadonlyArray = (type: ts.Type): boolean => type.getSymbol()?.name === \"ReadonlyArray\";\n\nconst pascal = (text: string): string =>\n text.replace(/(^|[^A-Za-z0-9]+)([A-Za-z0-9])/g, (_, __, letter: string) => letter.toUpperCase());\n\n/** A string literal as an enum member name. */\nexport const enumMember = (value: string): string => {\n const name = pascal(value);\n return /^[A-Za-z_]/.test(name) ? name : `_${name}`;\n};\n",
19
19
  "import ts from \"typescript\";\nimport {\n aggregate,\n defaultValue,\n instancedBlock,\n standardBlocks,\n type StandardBlock,\n type FunctionBlock,\n type Variable,\n type SourceSpan,\n type PlcType,\n} from \"@tsplc/compiler/ir\";\nimport { calleeName, numericLiteralType, type Fail, type TypeResolver } from \"./types.ts\";\n\nexport interface BlockSource {\n block: FunctionBlock;\n method: ts.MethodDeclaration;\n methods: readonly ts.MethodDeclaration[];\n inputSymbol: ts.Symbol;\n inputBindings: ReadonlyMap<string, Variable>;\n fieldBindings: ReadonlyMap<ts.Symbol, Variable>;\n initializers: ReadonlyMap<Variable, ts.Expression>;\n}\nexport function storageInitializer(\n node: ts.Expression,\n types: TypeResolver,\n fail: Fail,\n): { value: ts.Expression; retain: boolean } {\n if (!ts.isCallExpression(node)) return { value: node, retain: false };\n const callee = calleeName(node.expression);\n if (!callee || types.sdkName(callee) !== \"retain\") return { value: node, retain: false };\n if (node.arguments.length !== 1 || (node.typeArguments?.length ?? 0) > 1)\n fail(node, \"PLC3004\", \"retain requires one static storage initializer.\");\n return { value: node.arguments[0]!, retain: true };\n}\n\nexport class BlockResolver {\n readonly definitions = new Map<string, FunctionBlock>();\n readonly sources = new Map<ts.Symbol, BlockSource>();\n private readonly declarations = new Map<ts.Symbol, ts.ClassDeclaration>();\n private readonly active = new Set<ts.Symbol>();\n constructor(\n private readonly types: TypeResolver,\n private readonly origin: (node: ts.Node) => SourceSpan,\n private readonly fail: Fail,\n sdkSpan: SourceSpan,\n ) {\n for (const name of Object.keys(standardBlocks) as StandardBlock[]) {\n const schema = standardBlocks[name],\n id = `stdlib:${name}`,\n output = `${id}:out`;\n const variable = (label: string, type: string, storage: Variable[\"storage\"]): Variable => ({\n id: `${id}:${label}`,\n name: label,\n type,\n storage,\n mutable: false,\n retain: false,\n span: sdkSpan,\n ...(storage === \"blockOutput\" && { initial: defaultValue(type, types.types) }),\n });\n const block: FunctionBlock = {\n id,\n name,\n inputs: schema.inputs.map(([label, , type]) => variable(label, type, \"parameter\")),\n outputs: schema.outputs.map(([label, , type]) => variable(label, type, \"blockOutput\")),\n state: [],\n locals: [],\n body: [],\n result: output,\n standard: name,\n span: sdkSpan,\n };\n this.definitions.set(id, block);\n types.types.set(output, {\n id: output,\n kind: \"record\",\n fields: block.outputs.map((field) => ({\n name: field.name,\n type: field.type,\n readonly: true,\n })),\n });\n const type: PlcType = { id: `block:${id}`, kind: \"block\", block: id, output };\n types.types.set(type.id, type);\n types.standardTypes.set(name, type.id);\n }\n }\n\n index(nodes: readonly ts.ClassDeclaration[]): void {\n for (const node of nodes) {\n if (!node.name) this.fail(node, \"PLC1001\", \"Function block classes need names.\");\n this.declarations.set(this.types.symbol(node.name), node);\n }\n }\n\n instanceType(node: ts.NewExpression): string {\n const name = calleeName(node.expression);\n if (node.arguments?.length || node.typeArguments?.length || !name)\n this.fail(\n node,\n \"PLC1007\",\n \"Block instances use a concrete zero-argument constructor at static storage declarations.\",\n );\n const official = this.types.sdkName(name),\n standard = official && this.types.standardTypes.get(official);\n if (standard) return standard;\n const symbol = this.types.symbol(name),\n declaration = this.declarations.get(symbol);\n if (!declaration)\n this.fail(node, \"PLC1007\", \"Only recognized static function block allocation is supported.\");\n this.collect(declaration);\n // Successful collection registers this class identity before publishing its source.\n return this.types.blockTypes.get(symbol)!;\n }\n\n /**\n * `FixedArray<Block, N>` storage allocated with `defaultValue`; its elements are static\n * instances. The allocation names the type, so an annotation is optional but must agree.\n */\n instanceArrayType(annotation: ts.TypeNode | undefined, value: ts.Expression): string | undefined {\n const blockArray = (type: string) =>\n this.types.types.get(type)?.kind === \"array\" && instancedBlock(type, this.types.types)\n ? type\n : undefined;\n const declared = annotation && this.types.resolve(annotation).type;\n if (declared && !blockArray(declared)) return undefined;\n const callee = ts.isCallExpression(value) && calleeName(value.expression);\n const allocation =\n callee && this.types.sdkName(callee) === \"defaultValue\" && value.typeArguments?.length === 1\n ? this.types.resolve(value.typeArguments[0]!).type\n : undefined;\n if (!declared) return allocation && blockArray(allocation);\n if (allocation !== declared)\n this.fail(\n value,\n \"PLC1007\",\n \"Block arrays allocate with defaultValue<FixedArray<Block, N>>() of their declared type.\",\n );\n return declared;\n }\n\n collect(node: ts.ClassDeclaration): void {\n if (!node.name) this.fail(node, \"PLC1001\", \"Function block classes need names.\");\n const symbol = this.types.symbol(node.name);\n if (this.sources.has(symbol)) return;\n if (this.active.has(symbol) || this.active.size >= 64)\n this.fail(node, \"PLC1007\", \"Recursive or excessively nested block instance layout.\");\n if (\n node.typeParameters?.length ||\n node.modifiers?.some(\n (modifier) =>\n modifier.kind === ts.SyntaxKind.Decorator ||\n modifier.kind === ts.SyntaxKind.AbstractKeyword,\n )\n )\n this.fail(\n node,\n \"PLC1001\",\n \"Block classes are concrete; generic classes and decorators are unsupported.\",\n );\n const heritage = node.heritageClauses;\n if (\n heritage?.length !== 1 ||\n heritage[0]?.token !== ts.SyntaxKind.ExtendsKeyword ||\n heritage[0].types.length !== 1\n )\n this.fail(\n node,\n \"PLC1001\",\n \"Function block classes extend the canonical FunctionBlock marker only.\",\n );\n const base = heritage[0].types[0]!;\n if (\n this.types.sdkName(base.expression) !== \"FunctionBlock\" ||\n !base.typeArguments ||\n base.typeArguments.length < 1 ||\n base.typeArguments.length > 2\n )\n this.fail(base, \"PLC1001\", \"Extend FunctionBlock<Inputs, Outputs> with concrete schemas.\");\n // Register identity before nested fields; the active set rejects recursive allocation.\n this.active.add(symbol);\n const id = this.types.id(node, node.name.text),\n typeId = `block:${id}`;\n this.types.types.set(typeId, { id: typeId, kind: \"block\", block: id });\n this.types.blockTypes.set(symbol, typeId);\n try {\n const inputFields = this.types.inputFields(base.typeArguments[0]!);\n let result: string | undefined;\n const outputNode = base.typeArguments[1];\n if (outputNode && !(ts.isTypeLiteralNode(outputNode) && !outputNode.members.length)) {\n const resolved = this.types.resolve(outputNode),\n layout = this.types.types.get(resolved.type);\n if (\n resolved.io ||\n resolved.mode ||\n this.types.hasReferences(resolved.type) ||\n layout?.kind !== \"record\"\n )\n this.fail(outputNode, \"PLC2001\", \"Block outputs require a closed value record.\");\n result = resolved.type;\n }\n const fieldBindings = new Map<ts.Symbol, Variable>(),\n initializers = new Map<Variable, ts.Expression>(),\n state: Variable[] = [];\n let method: ts.MethodDeclaration | undefined;\n const methods: ts.MethodDeclaration[] = [];\n for (const member of node.members) {\n if (ts.isMethodDeclaration(member)) {\n if (ts.isIdentifier(member.name) && member.name.text !== \"execute\") {\n if (\n !member.body ||\n member.asteriskToken ||\n member.questionToken ||\n member.typeParameters?.length ||\n [\"update\", \"out\"].includes(member.name.text) ||\n member.modifiers?.some(\n (modifier) =>\n ![\n ts.SyntaxKind.PublicKeyword,\n ts.SyntaxKind.PrivateKeyword,\n ts.SyntaxKind.ProtectedKeyword,\n ].includes(modifier.kind),\n )\n )\n this.fail(\n member,\n \"PLC1001\",\n \"Block methods require concrete instance implementations without generics or overloads.\",\n );\n methods.push(member);\n continue;\n }\n if (\n method ||\n !ts.isIdentifier(member.name) ||\n member.name.text !== \"execute\" ||\n !member.body ||\n member.asteriskToken ||\n member.modifiers?.some(\n (modifier) =>\n ![ts.SyntaxKind.ProtectedKeyword, ts.SyntaxKind.OverrideKeyword].includes(\n modifier.kind,\n ),\n ) ||\n !member.modifiers?.some((modifier) => modifier.kind === ts.SyntaxKind.ProtectedKeyword)\n )\n this.fail(member, \"PLC1001\", \"A block implements one protected execute method.\");\n method = member;\n continue;\n }\n const field = this.collectStateField(member, id);\n state.push(field.variable);\n fieldBindings.set(field.symbol, field.variable);\n if (field.initializer) initializers.set(field.variable, field.initializer);\n }\n if (method?.parameters.length !== 1 || method.typeParameters?.length)\n this.fail(node, \"PLC1001\", \"Block execute requires one concrete input record parameter.\");\n const parameter = method.parameters[0]!;\n if (\n !ts.isIdentifier(parameter.name) ||\n !parameter.type ||\n parameter.initializer ||\n parameter.questionToken ||\n parameter.dotDotDotToken\n )\n this.fail(\n parameter,\n \"PLC2001\",\n \"Block execute requires one named, explicitly typed input parameter.\",\n );\n const methodFields = this.types.inputFields(parameter.type);\n if (JSON.stringify(methodFields) !== JSON.stringify(inputFields))\n this.fail(\n parameter,\n \"PLC2001\",\n \"execute input schema differs from its FunctionBlock marker.\",\n );\n if (\n !method.type ||\n (result\n ? this.types.resolve(method.type).type !== result\n : method.type.kind !== ts.SyntaxKind.VoidKeyword)\n )\n this.fail(\n method,\n \"PLC2001\",\n \"execute return annotation must match the complete output record, or void when there are no outputs.\",\n );\n const inputs = inputFields.map((field) => {\n // Records and arrays pass by reference, as objects do in TypeScript.\n const mode =\n field.mode ?? (aggregate(this.types.types.get(field.type)) ? \"inOut\" : undefined);\n return {\n id: `${id}:input:${field.name}`,\n name: field.name,\n type: field.type,\n storage: \"parameter\" as const,\n mutable: mode === \"inOut\",\n retain: false,\n span: this.origin(parameter),\n ...(mode && { mode }),\n };\n });\n const outputType = result && this.types.types.get(result),\n outputs: Variable[] =\n outputType && outputType.kind === \"record\"\n ? outputType.fields.map((field) => ({\n id: `${id}:output:${field.name}`,\n name: field.name,\n type: field.type,\n storage: \"blockOutput\",\n mutable: false,\n retain: false,\n initial: defaultValue(field.type, this.types.types),\n span: this.origin(method!),\n }))\n : [];\n const block: FunctionBlock = {\n id,\n name: node.name.text,\n inputs,\n outputs,\n state,\n locals: [],\n body: [],\n span: this.origin(node),\n ...(result && { result }),\n };\n this.definitions.set(id, block);\n this.types.types.set(typeId, {\n id: typeId,\n kind: \"block\",\n block: id,\n ...(result && { output: result }),\n });\n this.sources.set(symbol, {\n block,\n method,\n methods,\n inputSymbol: this.types.symbol(parameter.name),\n inputBindings: new Map(inputs.map((variable) => [variable.name, variable])),\n fieldBindings,\n initializers,\n });\n } finally {\n this.active.delete(symbol);\n }\n }\n // Private state fields own storage admission, constructor allocation and initializer capture.\n // The enclosing collection keeps schema/execute validation separate from this field policy.\n private collectStateField(\n member: ts.ClassElement,\n id: string,\n ): {\n variable: Variable;\n symbol: ts.Symbol;\n initializer?: ts.Expression;\n } {\n if (\n !ts.isPropertyDeclaration(member) ||\n !ts.isIdentifier(member.name) ||\n !member.initializer ||\n member.questionToken ||\n member.exclamationToken ||\n !member.modifiers?.some((modifier) => modifier.kind === ts.SyntaxKind.PrivateKeyword) ||\n member.modifiers.some(\n (modifier) =>\n ![ts.SyntaxKind.PrivateKeyword, ts.SyntaxKind.ReadonlyKeyword].includes(modifier.kind),\n )\n )\n this.fail(\n member,\n \"PLC1001\",\n \"Block state uses private initialized instance fields; constructors, static fields and decorators are unsupported.\",\n );\n const initial = storageInitializer(member.initializer, this.types, this.fail);\n const instanceArray = ts.isNewExpression(initial.value)\n ? undefined\n : this.instanceArrayType(member.type, initial.value);\n let type: string;\n if (ts.isNewExpression(initial.value)) type = this.instanceType(initial.value);\n else if (instanceArray) type = instanceArray;\n else if (member.type) {\n const annotation = this.types.resolve(member.type);\n if (annotation.io || annotation.mode || this.types.hasReferences(annotation.type))\n this.fail(member, \"PLC2001\", \"Borrow and I/O wrappers cannot be stored in block state.\");\n type = annotation.type;\n } else if (\n initial.value.kind === ts.SyntaxKind.TrueKeyword ||\n initial.value.kind === ts.SyntaxKind.FalseKeyword\n )\n type = \"BOOL\";\n else if (/^-?\\d/.test(initial.value.getText()))\n type = numericLiteralType(initial.value.getText());\n else this.fail(member, \"PLC2001\", \"Annotate private numeric and aggregate state explicitly.\");\n if (member.type && this.types.resolve(member.type).type !== type)\n this.fail(member, \"PLC2001\", \"Instance annotation differs from its constructor.\");\n const instance = Boolean(instancedBlock(type, this.types.types));\n if (this.types.types.get(type)?.kind === \"block\" && !ts.isNewExpression(initial.value))\n this.fail(member, \"PLC1007\", \"Block instances require static constructor initialization.\");\n const variable: Variable = {\n id: `${id}:field:${member.name.text}`,\n name: member.name.text,\n type,\n storage: instance ? \"instance\" : \"field\",\n mutable:\n !instance &&\n !member.modifiers.some((modifier) => modifier.kind === ts.SyntaxKind.ReadonlyKeyword),\n retain: initial.retain,\n span: this.origin(member),\n };\n return {\n variable,\n symbol: this.types.symbol(member.name),\n ...(!instance && { initializer: initial.value }),\n };\n }\n}\n",
20
20
  "import ts from \"typescript\";\nimport { dirname, relative, resolve } from \"node:path\";\nimport {\n instancedBlock,\n primitiveTypes,\n parseInteger,\n type PlcType,\n type Field,\n type MathHelper,\n} from \"@tsplc/compiler/ir\";\n\nexport interface ResolvedType {\n type: string;\n io?: \"input\" | \"output\";\n mode?: \"inOut\";\n}\nexport type TypeArgument =\n { kind: \"type\"; value: ResolvedType } | { kind: \"integer\"; value: number };\nexport type TypeEnvironment = ReadonlyMap<ts.Symbol, TypeArgument>;\nexport type Fail = (node: ts.Node, code: string, message: string) => never;\n\n// The PLC type of an unannotated numeric literal: `number` means DINT unless it is fractional.\nexport const numericLiteralType = (text: string) =>\n text.endsWith(\"n\") ? \"LINT\" : /[.e]/i.test(text) && !/^[-]?0[xob]/i.test(text) ? \"LREAL\" : \"DINT\";\n\n// The statically named callee of `name(...)` or `namespace.name(...)`.\nexport function calleeName(node: ts.Expression): ts.MemberName | undefined {\n if (ts.isIdentifier(node)) return node;\n return ts.isPropertyAccessExpression(node) ? node.name : undefined;\n}\n\n// This is the sole owner of TypeScript annotation substitution and PLC layouts.\n// The checker resolves declarations; it never supplies erased numeric widths.\n// Service records are the exception: `iec.*` schemas carry their widths as literal types.\nexport class TypeResolver {\n readonly types = new Map<string, PlcType>(primitiveTypes.map((type) => [type.id, type]));\n readonly blockTypes = new Map<ts.Symbol, string>();\n readonly standardTypes = new Map<string, string>();\n readonly unions = new Set<string>();\n private readonly active = new Set<string>();\n constructor(\n private readonly checker: ts.TypeChecker,\n private readonly root: string,\n private readonly sdk: string,\n private readonly fail: Fail,\n /** The service client's struct for a type naming a called procedure's record. */\n private readonly serviceRecord?: (type: ts.Type) => ts.Symbol | undefined,\n ) {}\n symbol(node: ts.Node): ts.Symbol {\n // An object shorthand has a property symbol and a separate value binding.\n // PLC loads and intrinsic provenance must follow the value, including imports.\n let symbol =\n ts.isShorthandPropertyAssignment(node.parent) && node.parent.name === node\n ? this.checker.getShorthandAssignmentValueSymbol(node.parent)\n : this.checker.getSymbolAtLocation(node);\n if (!symbol) this.fail(node, \"PLC1002\", \"This name has no PLC declaration.\");\n while (symbol.flags & ts.SymbolFlags.Alias) symbol = this.checker.getAliasedSymbol(symbol);\n return symbol;\n }\n\n /** Declared by TypeScript's default library, such as `Record` or `Object`. */\n standardLibrary(symbol: ts.Symbol): boolean {\n return Boolean(\n symbol.declarations?.every(\n (declaration) =>\n dirname(declaration.getSourceFile().fileName) === dirname(ts.getDefaultLibFilePath({})),\n ),\n );\n }\n\n sdkName(node: ts.Node): string | undefined {\n const symbol = this.symbol(node);\n return symbol.declarations?.some((declaration) =>\n declaration.getSourceFile().fileName.startsWith(`${dirname(this.sdk)}/`),\n )\n ? symbol.getName()\n : undefined;\n }\n\n /** `min`, `max` or `clamp` from the SDK's `@tsplc/compiler/math`. */\n mathHelper(node: ts.Node, name: string): MathHelper | undefined {\n return resolve(node.getSourceFile().fileName) ===\n resolve(dirname(this.sdk), \"../stdlib/math.ts\") &&\n (name === \"min\" || name === \"max\" || name === \"clamp\")\n ? name\n : undefined;\n }\n\n id(node: ts.Node, name: string): string {\n return `${relative(this.root, node.getSourceFile().fileName).replaceAll(\"\\\\\", \"/\")}:${node.getStart()}:${name}`;\n }\n\n argument(node: ts.TypeNode, environment: TypeEnvironment): TypeArgument {\n if (ts.isTypeReferenceNode(node)) {\n const bound = environment.get(this.symbol(node.typeName));\n if (bound && !node.typeArguments?.length) return bound;\n }\n // `(typeof table)[\"length\"]` or `typeof table.length` has the literal type of an `as const` table.\n const queried =\n ts.isIndexedAccessTypeNode(node) || ts.isTypeQueryNode(node)\n ? this.checker.getTypeFromTypeNode(node)\n : undefined;\n const text = queried?.isNumberLiteral()\n ? String(queried.value)\n : ts.isLiteralTypeNode(node) &&\n (ts.isNumericLiteral(node.literal) || ts.isPrefixUnaryExpression(node.literal))\n ? node.literal.getText()\n : undefined;\n if (text !== undefined) {\n let value: bigint;\n try {\n value = parseInteger(text);\n } catch {\n this.fail(node, \"PLC2001\", \"Layout arguments must be exact integer literals.\");\n }\n if (value < -2147483648n || value > 2147483647n)\n this.fail(node, \"PLC2001\", \"Layout argument is outside signed DINT range.\");\n return { kind: \"integer\", value: Number(value) };\n }\n return { kind: \"type\", value: this.resolve(node, environment) };\n }\n\n bindings(\n parameters: readonly ts.TypeParameterDeclaration[] | undefined,\n arguments_: readonly ts.TypeNode[] | undefined,\n outer: TypeEnvironment,\n node: ts.Node,\n ): Map<ts.Symbol, TypeArgument> {\n const result = new Map(outer),\n params = parameters ?? [],\n args = arguments_ ?? [];\n if (args.length > params.length)\n this.fail(node, \"PLC2001\", \"Too many concrete type arguments.\");\n params.forEach((parameter, index) => {\n const argument = args[index] ?? parameter.default;\n if (!argument)\n this.fail(\n node,\n \"PLC2001\",\n \"Generic PLC declarations require explicit concrete type arguments.\",\n );\n result.set(this.symbol(parameter.name), this.argument(argument, result));\n });\n return result;\n }\n\n resolve(node: ts.TypeNode, environment: TypeEnvironment = new Map()): ResolvedType {\n if (node.kind === ts.SyntaxKind.BooleanKeyword) return { type: \"BOOL\" };\n if (node.kind === ts.SyntaxKind.NumberKeyword) return { type: \"DINT\" };\n if (node.kind === ts.SyntaxKind.StringKeyword) {\n const id = \"STRING<80>\";\n this.types.set(id, { id, kind: \"string\", capacity: 80, encoding: \"utf8\" });\n return { type: id };\n }\n if (ts.isParenthesizedTypeNode(node)) return this.resolve(node.type, environment);\n if (ts.isTypeLiteralNode(node)) {\n // Environment keys are admitted, declared type parameters with concrete bindings.\n const arguments_ = [...environment]\n .map(\n ([symbol, value]) =>\n `${this.id(symbol.declarations![0]!, symbol.name)}=${this.key(value)}`,\n )\n .sort()\n .join(\",\");\n return this.record(\n node,\n `${this.id(node, \"record\")}${arguments_ ? `<${arguments_}>` : \"\"}`,\n node.members,\n environment,\n );\n }\n if (ts.isUnionTypeNode(node)) return this.union(node, this.id(node, \"Union\"), environment);\n if (ts.isIndexedAccessTypeNode(node)) {\n const record = this.serviceRecord?.(this.checker.getTypeFromTypeNode(node));\n if (record) return this.declaration(record, undefined, environment, node);\n }\n if (!ts.isTypeReferenceNode(node))\n this.fail(\n node,\n \"PLC2001\",\n \"Use an explicit supported PLC type; optional and dynamic layouts are unsupported.\",\n );\n const symbol = this.symbol(node.typeName),\n bound = environment.get(symbol);\n if (bound) {\n if (bound.kind !== \"type\" || node.typeArguments?.length)\n this.fail(node, \"PLC2001\", \"An integer layout argument is not a storage type.\");\n return bound.value;\n }\n const official = this.sdkName(node.typeName);\n const block =\n this.blockTypes.get(symbol) ?? (official ? this.standardTypes.get(official) : undefined);\n if (block) {\n if (node.typeArguments?.length)\n this.fail(\n node,\n \"PLC2001\",\n \"Function block classes are concrete and take no type arguments.\",\n );\n return { type: block };\n }\n if (official === \"InOut\") {\n if (node.typeArguments?.length !== 1)\n this.fail(node, \"PLC2001\", \"InOut requires one concrete value type.\");\n const inner = this.resolve(node.typeArguments[0]!, environment);\n if (inner.io || !this.isValue(inner))\n this.fail(node, \"PLC2001\", \"InOut cannot nest or borrow a block instance.\");\n return { type: inner.type, mode: \"inOut\" };\n }\n if (official && this.types.has(official)) {\n if (node.typeArguments?.length)\n this.fail(node, \"PLC2001\", \"Scalar types take no type arguments.\");\n return { type: official };\n }\n if (official === \"Input\" || official === \"Output\") {\n if (node.typeArguments?.length !== 1)\n this.fail(node, \"PLC2001\", \"I/O types need exactly one PLC type argument.\");\n const inner = this.resolve(node.typeArguments[0]!, environment);\n if (inner.io || inner.mode || this.hasReferences(inner.type))\n this.fail(node, \"PLC2001\", \"I/O type wrappers cannot be nested.\");\n return { type: inner.type, io: official === \"Input\" ? \"input\" : \"output\" };\n }\n if (official === \"FixedArray\") {\n const args = node.typeArguments;\n if (!args || args.length < 2 || args.length > 3)\n this.fail(node, \"PLC2001\", \"FixedArray needs element, length and optional lower bound.\");\n return this.fixedArray(\n node,\n this.resolve(args[0]!, environment),\n this.argument(args[1]!, environment),\n args[2] ? this.argument(args[2], environment) : { kind: \"integer\", value: 0 },\n );\n }\n // TypeScript's own `Record`; its keys are a contiguous enum.\n if (symbol.name === \"Record\" && this.standardLibrary(symbol)) {\n const [key, value] = node.typeArguments ?? [];\n const index =\n key && ts.isTypeReferenceNode(key)\n ? this.types.get(this.resolve(key, environment).type)\n : undefined;\n if (index?.kind !== \"enum\")\n this.fail(\n node,\n \"PLC2001\",\n \"Record keys must be a numeric PLC enum; dynamic index signatures are unsupported.\",\n );\n const values = index.members.map((member) => Number(member.value));\n const lower = Math.min(...values);\n if (Math.max(...values) - lower + 1 !== values.length)\n this.fail(node, \"PLC2001\", \"Record<Enum, T> needs enum member values without gaps.\");\n const element = this.resolve(value!, environment);\n if (element.io || !this.isValue(element))\n this.fail(node, \"PLC2001\", \"Enum-keyed records need a plain value element.\");\n const id = `array<${element.type},${values.length},${lower},${index.id}>`;\n this.types.set(id, {\n id,\n kind: \"array\",\n element: element.type,\n length: values.length,\n lowerBound: lower,\n index: index.id,\n });\n this.checkSize(id, node);\n return { type: id };\n }\n if (official === \"STRING\" || official === \"WSTRING\") {\n if (node.typeArguments?.length !== 1)\n this.fail(node, \"PLC2001\", \"Bounded strings require one capacity argument.\");\n const capacity = this.argument(node.typeArguments[0]!, environment);\n if (capacity.kind !== \"integer\" || capacity.value < 1 || capacity.value > 65535)\n this.fail(node, \"PLC2001\", \"String capacity must be 1..65535.\");\n const id = `${official}<${capacity.value}>`;\n this.types.set(id, {\n id,\n kind: \"string\",\n capacity: capacity.value,\n encoding: official === \"STRING\" ? \"utf8\" : \"utf16\",\n });\n return { type: id };\n }\n return this.declaration(symbol, node.typeArguments, environment, node);\n }\n\n fixedArray(\n node: ts.Node,\n element: ResolvedType,\n length: TypeArgument,\n lower: TypeArgument,\n ): ResolvedType {\n if (\n element.io ||\n !(this.isValue(element) || this.types.get(element.type)?.kind === \"block\") ||\n length.kind !== \"integer\" ||\n lower.kind !== \"integer\" ||\n length.value < 1 ||\n length.value > 1_000_000 ||\n lower.value + length.value - 1 > 2147483647\n )\n this.fail(\n node,\n \"PLC2001\",\n \"Fixed arrays need a supported element, positive bounded length and signed DINT bounds.\",\n );\n const id = `array<${element.type},${length.value},${lower.value}>`;\n this.types.set(id, {\n id,\n kind: \"array\",\n element: element.type,\n length: length.value,\n lowerBound: lower.value,\n });\n this.checkSize(id, node);\n return { type: id };\n }\n\n private declaration(\n symbol: ts.Symbol,\n arguments_: readonly ts.TypeNode[] | undefined,\n environment: TypeEnvironment,\n node: ts.Node,\n ): ResolvedType {\n const declarations = symbol.declarations ?? [];\n if (declarations.filter(ts.isInterfaceDeclaration).length > 1)\n this.fail(\n node,\n \"PLC2001\",\n \"Interface declaration merging is unsupported; use one closed layout declaration.\",\n );\n const declaration = declarations.find(\n (item) =>\n ts.isTypeAliasDeclaration(item) ||\n ts.isInterfaceDeclaration(item) ||\n ts.isEnumDeclaration(item),\n );\n if (!declaration)\n this.fail(node, \"PLC2001\", \"This type is not implemented by the PLC frontend.\");\n if (ts.isEnumDeclaration(declaration)) {\n if (arguments_?.length) this.fail(node, \"PLC2001\", \"Enums take no type arguments.\");\n return this.enumeration(declaration);\n }\n const bindings = this.bindings(declaration.typeParameters, arguments_, environment, node);\n const suffix = (declaration.typeParameters ?? [])\n .map((parameter) => this.key(bindings.get(this.symbol(parameter.name))!))\n .join(\",\");\n const id = `${this.id(declaration, declaration.name.text)}${suffix ? `<${suffix}>` : \"\"}`;\n if (this.active.has(id))\n this.fail(node, \"PLC2001\", \"Recursive by-value PLC layouts are unsupported.\");\n if (this.types.has(id)) return { type: id };\n if (this.active.size >= 64)\n this.fail(\n node,\n \"PLC2001\",\n \"Type substitution exceeds 64 levels; recursive expansion is unsupported.\",\n );\n this.active.add(id);\n try {\n if (ts.isTypeAliasDeclaration(declaration)) {\n if (ts.isTypeLiteralNode(declaration.type))\n return this.record(declaration, id, declaration.type.members, bindings);\n if (ts.isUnionTypeNode(declaration.type)) return this.union(declaration.type, id, bindings);\n return this.resolve(declaration.type, bindings);\n }\n const inherited: Field[] = [];\n for (const heritage of declaration.heritageClauses ?? []) {\n for (const base of heritage.types) {\n const baseSymbol = this.symbol(base.expression);\n const baseType = this.declaration(baseSymbol, base.typeArguments, bindings, base);\n const layout = this.types.get(baseType.type);\n if (layout?.kind !== \"record\")\n this.fail(base, \"PLC2001\", \"Inherited layout must be a record.\");\n inherited.push(...layout.fields);\n }\n }\n return this.record(declaration, id, declaration.members, bindings, inherited);\n } finally {\n this.active.delete(id);\n }\n }\n // Specialization identity includes I/O and InOut modes: equal value widths alone\n // must not merge a readonly value parameter with a mutable borrowed input.\n key(argument: TypeArgument): string {\n if (argument.kind === \"integer\") return String(argument.value);\n const { type, io, mode } = argument.value;\n return `${type}${io ? `:${io}` : \"\"}${mode ? `:${mode}` : \"\"}`;\n }\n\n /**\n * A discriminated union is one fixed layout: a `kind` enum plus the fields of every variant.\n * TypeScript's narrowing guards which fields a branch can read; a literal's unset fields are zero.\n */\n private union(node: ts.UnionTypeNode, id: string, environment: TypeEnvironment): ResolvedType {\n const fields = new Map<string, Field>();\n const kinds: string[] = [];\n for (const variant of node.types) {\n const members = ts.isTypeLiteralNode(variant) ? variant.members : undefined;\n const tag = members?.find(\n (member) => ts.isPropertySignature(member) && member.name.getText() === \"kind\",\n );\n const literal =\n tag && ts.isPropertySignature(tag) && tag.type && ts.isLiteralTypeNode(tag.type)\n ? tag.type.literal\n : undefined;\n if (\n !members ||\n !literal ||\n !ts.isStringLiteral(literal) ||\n !/^[A-Za-z]\\w*$/.test(literal.text)\n )\n this.fail(\n variant,\n \"PLC2001\",\n 'Union variants are object types with an identifier string literal `kind`, such as { kind: \"idle\" }.',\n );\n if (kinds.includes(literal.text)) this.fail(variant, \"PLC2001\", \"Duplicate union kind.\");\n kinds.push(literal.text);\n for (const field of this.fields(\n members.filter((member) => member !== tag),\n environment,\n )) {\n const existing = fields.get(field.name);\n if (existing && existing.type !== field.type)\n this.fail(\n variant,\n \"PLC2001\",\n \"Union variants may share a field only with the same type.\",\n );\n fields.set(field.name, field);\n }\n }\n const kindId = `${id}Kind`;\n this.types.set(kindId, {\n id: kindId,\n kind: \"enum\",\n base: \"DINT\",\n members: kinds.map((name, value) => ({ name, value: String(value) })),\n });\n this.types.set(id, {\n id,\n kind: \"record\",\n fields: [{ name: \"kind\", type: kindId, readonly: false }, ...fields.values()],\n });\n this.unions.add(id);\n this.checkSize(id, node);\n return { type: id };\n }\n\n private record(\n node: ts.Node,\n id: string,\n members: readonly ts.TypeElement[],\n environment: TypeEnvironment,\n inherited: readonly Field[] = [],\n ): ResolvedType {\n const fields = this.fields(members, environment, inherited);\n if (!fields.length) this.fail(node, \"PLC2001\", \"PLC records require at least one field.\");\n this.types.set(id, { id, kind: \"record\", fields });\n this.checkSize(id, node);\n return { type: id };\n }\n\n private fields(\n members: readonly ts.TypeElement[],\n environment: TypeEnvironment,\n inherited: readonly Field[] = [],\n ): Field[] {\n const fields = [...inherited],\n names = new Set(fields.map((field) => field.name));\n for (const member of members) {\n if (\n !ts.isPropertySignature(member) ||\n !member.type ||\n member.questionToken ||\n !member.name ||\n !ts.isIdentifier(member.name)\n )\n this.fail(\n member,\n \"PLC2001\",\n \"PLC records have named, required, explicitly typed fields; methods and index signatures are unsupported.\",\n );\n if (names.has(member.name.text)) this.fail(member, \"PLC2001\", \"Duplicate record field.\");\n const type = this.resolve(member.type, environment);\n if (instancedBlock(type.type, this.types))\n this.fail(\n member,\n \"PLC2001\",\n \"Block instances belong in module or private block fields, not value records.\",\n );\n if (type.io)\n this.fail(\n member,\n \"PLC2001\",\n \"Logical I/O wrappers belong on ambient bindings, not fields.\",\n );\n fields.push({\n name: member.name.text,\n type: type.type,\n ...(type.mode && { mode: type.mode }),\n readonly: Boolean(\n member.modifiers?.some((modifier) => modifier.kind === ts.SyntaxKind.ReadonlyKeyword),\n ),\n });\n names.add(member.name.text);\n }\n return fields;\n }\n\n inputFields(node: ts.TypeNode): readonly Field[] {\n if (ts.isTypeLiteralNode(node) && !node.members.length) return [];\n const resolved = this.resolve(node),\n type = this.types.get(resolved.type);\n if (resolved.io || resolved.mode || type?.kind !== \"record\")\n this.fail(node, \"PLC2001\", \"Block inputs require one closed record schema.\");\n if (type.fields.some((field) => this.hasReferences(field.type)))\n this.fail(node, \"PLC2001\", \"InOut belongs directly on input fields, not nested records.\");\n return type.fields;\n }\n\n // A plain value layout: no InOut borrow, nested borrow schema or block instance.\n isValue(resolved: ResolvedType): boolean {\n return (\n !resolved.mode &&\n !this.hasReferences(resolved.type) &&\n !instancedBlock(resolved.type, this.types)\n );\n }\n\n hasReferences(id: string, seen = new Set<string>()): boolean {\n if (seen.has(id)) return false;\n seen.add(id);\n const type = this.types.get(id);\n return type?.kind === \"record\"\n ? type.fields.some((field) => field.mode || this.hasReferences(field.type, seen))\n : type?.kind === \"array\"\n ? this.hasReferences(type.element, seen)\n : false;\n }\n\n enumeration(node: ts.EnumDeclaration): ResolvedType {\n const id = this.id(node, node.name.text);\n if (this.types.has(id)) return { type: id };\n if (!node.members.length) this.fail(node, \"PLC2001\", \"PLC enums cannot be empty.\");\n const members = node.members.map((member) => {\n if (!ts.isIdentifier(member.name))\n this.fail(member, \"PLC2001\", \"Enum members require identifier names.\");\n const value = this.checker.getConstantValue(member);\n if (\n typeof value !== \"number\" ||\n !Number.isInteger(value) ||\n value < -2147483648 ||\n value > 2147483647\n )\n this.fail(member, \"PLC2001\", \"PLC enum values must be compile-time DINT integers.\");\n return { name: member.name.text, value: String(value) };\n });\n if (new Set(members.map((member) => member.value)).size !== members.length)\n this.fail(node, \"PLC2001\", \"PLC enum members require distinct values.\");\n this.types.set(id, { id, kind: \"enum\", base: \"DINT\", members });\n return { type: id };\n }\n\n private checkSize(id: string, node: ts.Node): void {\n const count = (typeId: string, depth: number): number => {\n if (depth > 64) this.fail(node, \"PLC2001\", \"PLC layout nesting exceeds 64 levels.\");\n const type = this.types.get(typeId)!;\n const size =\n type.kind === \"array\"\n ? type.length * count(type.element, depth + 1)\n : type.kind === \"record\"\n ? type.fields.reduce((total, field) => total + count(field.type, depth + 1), 0)\n : 1;\n if (size > 1_000_000)\n this.fail(node, \"PLC2001\", \"PLC layout exceeds one million scalar elements.\");\n return size;\n };\n count(id, 0);\n }\n}\n"
21
21
  ],
22
- "mappings": "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",
23
- "debugId": "73256814D883503164756E2164756E21",
22
+ "mappings": "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",
23
+ "debugId": "43B8CCF724F116A364756E2164756E21",
24
24
  "names": []
25
25
  }