@tsplc/compiler 0.2.10 → 0.2.11
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/backends/codesys/emit.ts +24 -41
- package/backends/codesys/global-names.ts +49 -0
- package/backends/codesys/plan.ts +4 -89
- package/backends/codesys/task-access.ts +125 -0
- package/dist/cli.js +14 -3
- package/dist/cli.js.map +3 -3
- package/dist/codesys.js +360 -307
- package/dist/codesys.js.map +9 -8
- package/dist/index.js +23 -7
- package/dist/index.js.map +4 -4
- package/dist/ir.js +52 -2
- package/dist/ir.js.map +4 -4
- package/ir/declarations.ts +12 -5
- package/ir/model.ts +40 -1
- package/package.json +6 -6
- package/project/plant.ts +15 -2
- package/src/frontend/async.ts +9 -4
- package/src/frontend/typescript.ts +21 -7
- package/types/globals.d.ts +6 -0
- package/types/index.d.ts +37 -1
package/dist/index.js.map
CHANGED
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
"sources": ["../src/frontend/module-graph.ts", "../src/frontend/typescript.ts", "../src/frontend/exposure.ts", "../src/frontend/services.ts", "../src/frontend/promises.ts", "../src/frontend/async.ts", "../src/frontend/cooperative.ts", "../src/frontend/configuration.ts", "../src/frontend/const-functions.ts", "../src/frontend/elaborate/index.ts", "../src/frontend/elaborate/graph.ts", "../src/frontend/elaborate/model.ts", "../src/frontend/elaborate/specialize.ts", "../src/frontend/elaborate/layouts.ts", "../src/frontend/blocks.ts", "../src/frontend/types.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import ts from \"typescript\";\n\n/** Runtime imports define execution; type-only imports provide layouts without allocating state. */\nexport const runtimeSources = (program: ts.Program): readonly ts.SourceFile[] => {\n const checker = program.getTypeChecker();\n const visited = new Set<ts.SourceFile>();\n // A block array allocates through its type, so its block's module runs even when type-imported.\n const visitBlockArrays = (node: ts.Node): void => {\n if (\n ts.isTypeReferenceNode(node) &&\n node.typeName.getText() === \"FixedArray\" &&\n node.typeArguments?.[0] &&\n ts.isTypeReferenceNode(node.typeArguments[0])\n ) {\n let symbol = checker.getSymbolAtLocation(node.typeArguments[0].typeName);\n while (symbol && symbol.flags & ts.SymbolFlags.Alias)\n symbol = checker.getAliasedSymbol(symbol);\n const block = symbol?.declarations?.find(ts.isClassDeclaration);\n if (block) visit(block.getSourceFile());\n }\n ts.forEachChild(node, visitBlockArrays);\n };\n const visit = (source: ts.SourceFile): void => {\n if (visited.has(source)) return;\n visited.add(source);\n if (source.isDeclarationFile) return;\n visitBlockArrays(source);\n for (const statement of source.statements) {\n if (ts.isImportDeclaration(statement)) {\n if (statement.importClause?.isTypeOnly) continue;\n const bindings = statement.importClause?.namedBindings;\n if (\n !statement.importClause?.name &&\n bindings &&\n ts.isNamedImports(bindings) &&\n bindings.elements.every((value) => value.isTypeOnly)\n )\n continue;\n const target = checker\n .getSymbolAtLocation(statement.moduleSpecifier)\n ?.declarations?.find(ts.isSourceFile);\n if (target) visit(target);\n }\n if (ts.isExportDeclaration(statement) && statement.moduleSpecifier && !statement.isTypeOnly) {\n if (\n statement.exportClause &&\n ts.isNamedExports(statement.exportClause) &&\n statement.exportClause.elements.every((value) => value.isTypeOnly)\n )\n continue;\n const target = checker\n .getSymbolAtLocation(statement.moduleSpecifier)\n ?.declarations?.find(ts.isSourceFile);\n if (target) visit(target);\n }\n }\n };\n for (const file of program.getRootFileNames()) {\n const source = program.getSourceFile(file);\n if (source) visit(source);\n }\n return program.getSourceFiles().filter((source) => visited.has(source));\n};\n",
|
|
6
|
-
"import { runtimeSources } from \"./module-graph.ts\";\nimport ts from \"typescript\";\nimport { createRequire } from \"node:module\";\nimport { mkdirSync, writeFileSync } from \"node:fs\";\nimport { dirname, join, relative, resolve } from \"node:path\";\nimport {\n instancedBlock,\n error,\n hasErrors,\n parseInteger,\n fold,\n canAssign,\n aggregate,\n expressionIssue,\n defaultValue,\n placeType,\n durationLiteral,\n calendarLiteral,\n loopIterations,\n loopBounds,\n narrowRanges,\n interval,\n valueRange,\n integerRange,\n comparisonOperators,\n type BinaryOperator,\n type IntegerInterval,\n type Constant,\n type Diagnostic,\n type Expression,\n type PlcFunction,\n type MethodOwner,\n type PlcModule,\n type PlcProgram,\n type SourceSpan,\n type Statement,\n type Variable,\n type Place,\n} from \"@tsplc/compiler/ir\";\n\nimport { lowerExposure } from \"./exposure.ts\";\nimport { lowerServices, serviceRecords, type ServiceOptions } from \"./services.ts\";\nimport { lowerPromises } from \"./promises.ts\";\nimport { lowerAsync } from \"./async.ts\";\nimport { lowerConstFunctions } from \"./const-functions.ts\";\nimport { lowerElaboration } from \"./elaborate/index.ts\";\nimport { lowerEnvironment } from \"./configuration.ts\";\nimport { BlockResolver, storageInitializer, type BlockSource } from \"./blocks.ts\";\nimport { numericLiteralType } from \"./types.ts\";\nimport {\n TypeResolver,\n calleeName,\n type Fail,\n type TypeEnvironment,\n type ResolvedType,\n} from \"./types.ts\";\n\nexport interface FrontendOptions {\n sourceScope?: \"project\" | \"entry\";\n services?: ServiceOptions;\n tsconfig: string;\n programs: Readonly<Record<string, { module: string; export: string }>>;\n}\n\nexport interface FrontendResult {\n module?: PlcModule;\n diagnostics: readonly Diagnostic[];\n}\n\n// TIME constructor scales in nanoseconds, and calendar constructor result types.\nconst durationScales: Readonly<Record<string, bigint>> = {\n ms: 1_000_000n,\n seconds: 1_000_000_000n,\n minutes: 60_000_000_000n,\n};\nconst calendarTypes: Readonly<Record<string, string>> = {\n date: \"DATE\",\n timeOfDay: \"TIME_OF_DAY\",\n dateAndTime: \"DATE_AND_TIME\",\n};\nconst conversions: Readonly<Record<string, \"exact\" | \"wrap\" | \"saturate\">> = {\n exact: \"exact\",\n wrap: \"wrap\",\n saturate: \"saturate\",\n};\nconst arithmetic: Readonly<\n Record<\n string,\n { operator: \"add\" | \"subtract\" | \"multiply\" | \"divide\"; policy?: \"wrap\" | \"saturate\" }\n >\n> = {\n div: { operator: \"divide\" },\n wrapAdd: { operator: \"add\", policy: \"wrap\" },\n wrapSubtract: { operator: \"subtract\", policy: \"wrap\" },\n wrapMultiply: { operator: \"multiply\", policy: \"wrap\" },\n saturatingAdd: { operator: \"add\", policy: \"saturate\" },\n saturatingSubtract: { operator: \"subtract\", policy: \"saturate\" },\n saturatingMultiply: { operator: \"multiply\", policy: \"saturate\" },\n};\nconst operators = new Map<ts.SyntaxKind, BinaryOperator>([\n [ts.SyntaxKind.AmpersandAmpersandToken, \"and\"],\n [ts.SyntaxKind.BarBarToken, \"or\"],\n [ts.SyntaxKind.EqualsEqualsEqualsToken, \"equal\"],\n [ts.SyntaxKind.ExclamationEqualsEqualsToken, \"notEqual\"],\n [ts.SyntaxKind.LessThanToken, \"less\"],\n [ts.SyntaxKind.LessThanEqualsToken, \"lessEqual\"],\n [ts.SyntaxKind.GreaterThanToken, \"greater\"],\n [ts.SyntaxKind.GreaterThanEqualsToken, \"greaterEqual\"],\n [ts.SyntaxKind.PlusToken, \"add\"],\n [ts.SyntaxKind.MinusToken, \"subtract\"],\n [ts.SyntaxKind.AsteriskToken, \"multiply\"],\n [ts.SyntaxKind.SlashToken, \"divide\"],\n [ts.SyntaxKind.PercentToken, \"remainder\"],\n [ts.SyntaxKind.AmpersandToken, \"bitAnd\"],\n [ts.SyntaxKind.BarToken, \"bitOr\"],\n [ts.SyntaxKind.CaretToken, \"bitXor\"],\n [ts.SyntaxKind.LessThanLessThanToken, \"shiftLeft\"],\n [ts.SyntaxKind.GreaterThanGreaterThanToken, \"shiftRight\"],\n]);\n\nclass SemanticError extends Error {\n constructor(readonly diagnostic: Diagnostic) {\n super(diagnostic.message);\n }\n}\n\nfunction sourceSpan(source: ts.SourceFile, start: number, end: number): SourceSpan {\n const position = source.getLineAndCharacterOfPosition(start);\n return {\n file: source.fileName,\n start,\n end,\n line: position.line + 1,\n column: position.character + 1,\n };\n}\n\nfunction span(node: ts.Node): SourceSpan {\n const source = node.getSourceFile();\n return sourceSpan(source, node.getStart(source), node.getEnd());\n}\n\nfunction tsDiagnostic(diagnostic: ts.Diagnostic): Diagnostic {\n const result: Diagnostic = {\n origin: \"typescript\",\n code: `TS${diagnostic.code}`,\n severity: diagnostic.category === ts.DiagnosticCategory.Error ? \"error\" : \"warning\",\n message: ts.flattenDiagnosticMessageText(diagnostic.messageText, \"\\n\"),\n };\n if (diagnostic.file && diagnostic.start !== undefined)\n result.span = sourceSpan(\n diagnostic.file,\n diagnostic.start,\n diagnostic.start + (diagnostic.length ?? 1),\n );\n return result;\n}\n\nconst suppressionDiagnostics = (source: ts.SourceFile): Diagnostic[] => {\n const diagnostics: Diagnostic[] = [];\n const scanner = ts.createScanner(\n ts.ScriptTarget.Latest,\n false,\n ts.LanguageVariant.Standard,\n source.text,\n );\n for (let token = scanner.scan(); token !== ts.SyntaxKind.EndOfFileToken; token = scanner.scan()) {\n if (\n token !== ts.SyntaxKind.SingleLineCommentTrivia &&\n token !== ts.SyntaxKind.MultiLineCommentTrivia\n )\n continue;\n const comment = scanner.getTokenText();\n const match = /(?:^|\\n)\\s*(?:\\/\\/+|\\/\\*+|\\*)\\s*(@ts-(?:nocheck|ignore|expect-error))\\b/.exec(\n comment,\n );\n if (!match) continue;\n const start = scanner.getTokenPos() + comment.indexOf(match[1] ?? \"@ts-\");\n diagnostics.push(\n error(\n \"PLC1009\",\n \"TypeScript diagnostic suppression is not allowed in PLC source.\",\n sourceSpan(source, start, start + (match[1]?.length ?? 4)),\n ),\n );\n }\n return diagnostics;\n};\n\n/**\n * Type checks a subset of a tsconfig's files without emitting. A project-reference\n * tsconfig's composite and declaration settings would demand every file be listed\n * (TS6307) or conflict with noEmit, so these replace them.\n */\nexport const typeCheckOnly: ts.CompilerOptions = {\n composite: false,\n declaration: false,\n declarationMap: false,\n emitDeclarationOnly: false,\n incremental: false,\n noEmit: true,\n tsBuildInfoFile: undefined,\n};\n\nexport function analyze(options: FrontendOptions): FrontendResult {\n const filename = resolve(options.tsconfig);\n const config = ts.readConfigFile(filename, ts.sys.readFile);\n if (config.error) return { diagnostics: [tsDiagnostic(config.error)] };\n const parsed = ts.parseJsonConfigFileContent(\n config.config,\n ts.sys,\n dirname(filename),\n undefined,\n filename,\n );\n if (parsed.errors.length) return { diagnostics: parsed.errors.map(tsDiagnostic) };\n // TypeScript stores SourceFile paths with forward slashes on every host.\n // Normalize require.resolve once so canonical SDK identity also works on Windows.\n const sdk = createRequire(import.meta.url)\n .resolve(\"@tsplc/compiler/globals\")\n .replaceAll(\"\\\\\", \"/\");\n const programFiles = Object.values(options.programs).map((entry) =>\n resolve(dirname(filename), entry.module),\n );\n // Full-stack builds follow entry imports; standalone projects retain explicit tsconfig globals.\n const scope = options.sourceScope ?? (options.services ? \"entry\" : \"project\");\n // The project's own ambient declarations; a shared base tsconfig's typings are for the host runtime.\n const ambient = parsed.fileNames.filter(\n (file) => /\\.d\\.[cm]?ts$/.test(file) && file.startsWith(`${dirname(filename)}/`),\n );\n const projectFiles = scope === \"project\" ? parsed.fileNames : ambient;\n const rootNames = [...new Set([...projectFiles, ...programFiles, sdk])];\n const compilerOptions: ts.CompilerOptions = {\n ...parsed.options,\n ...typeCheckOnly,\n // Lowered sources import their runtime helpers by .ts path and drop the imports they replace.\n allowImportingTsExtensions: true,\n noUnusedLocals: false,\n noUnusedParameters: false,\n strict: true,\n noImplicitAny: true,\n strictNullChecks: true,\n noCheck: false,\n allowJs: false,\n skipLibCheck: false,\n types: [],\n lib: [\"lib.es2022.d.ts\"],\n module: ts.ModuleKind.ESNext,\n moduleResolution: ts.ModuleResolutionKind.Bundler,\n };\n // Nothing is emitted, and a service client's router type imports modules outside these (TS6059).\n delete compilerOptions.rootDir;\n delete compilerOptions.outDir;\n let program = ts.createProgram(rootNames, compilerOptions);\n const plcFiles = (program: ts.Program) => {\n const files = new Set(runtimeSources(program));\n for (const source of program.getSourceFiles())\n if (source.fileName.startsWith(dirname(sdk) + \"/\")) files.add(source);\n return files;\n };\n // Only PLC files: a type-only import of the server router brings the server's sources along.\n const sourceDiagnostics = (program: ts.Program) =>\n [\n ...program.getConfigFileParsingDiagnostics(),\n ...program.getOptionsDiagnostics(),\n ...program.getGlobalDiagnostics(),\n ...[...plcFiles(program)].flatMap((file) => [\n ...program.getSyntacticDiagnostics(file),\n ...program.getSemanticDiagnostics(file),\n ]),\n ].map(tsDiagnostic);\n const diagnostics = sourceDiagnostics(program);\n if (\n program.getSyntacticDiagnostics().some((item) => !item.file || plcFiles(program).has(item.file))\n )\n return { diagnostics };\n const virtualSources = new Map<string, string>();\n // Lowering also adds modules, such as the service client, that exist only here.\n let host: ts.CompilerHost = ts.createCompilerHost(compilerOptions);\n const apply = (lowering: {\n sources: Map<string, string>;\n diagnostics: Diagnostic[];\n }): boolean => {\n diagnostics.push(...lowering.diagnostics);\n for (const source of runtimeSources(program))\n if (lowering.sources.has(source.fileName))\n diagnostics.push(...suppressionDiagnostics(source));\n if (lowering.diagnostics.length || (lowering.sources.size && hasErrors(diagnostics)))\n return false;\n if (lowering.sources.size) {\n for (const [path, text] of lowering.sources) virtualSources.set(path, text);\n // TSPLC_LOWERED=<directory> writes every generated or rewritten module, as the next step reads it.\n const dump = process.env.TSPLC_LOWERED;\n if (dump)\n for (const [path, text] of lowering.sources) {\n const target = join(dump, relative(dirname(filename), path));\n mkdirSync(dirname(target), { recursive: true });\n writeFileSync(target, text);\n }\n host = ts.createCompilerHost(compilerOptions);\n const read = host.readFile,\n exists = host.fileExists;\n const directoryExists = host.directoryExists?.bind(host);\n host.readFile = (path) => virtualSources.get(path) ?? read(path);\n host.fileExists = (path) => virtualSources.has(path) || exists(path);\n // Generated modules can live in a directory that only exists in memory.\n host.directoryExists = (path) =>\n [...virtualSources.keys()].some((file) => file.startsWith(`${path.replace(/\\/$/, \"\")}/`)) ||\n (directoryExists?.(path) ?? true);\n program = ts.createProgram(rootNames, compilerOptions, host);\n diagnostics.push(...sourceDiagnostics(program));\n }\n return true;\n };\n if (!apply(lowerElaboration(program, sdk, options.programs, dirname(filename))))\n return { diagnostics };\n const services = lowerServices(program, sdk, options.services);\n if (!apply(services)) return { diagnostics };\n const exposure = lowerExposure(program, sdk);\n if (!apply(exposure)) return { diagnostics };\n if (!apply(lowerEnvironment(program, sdk))) return { diagnostics };\n if (!apply(lowerConstFunctions(program))) return { diagnostics };\n const promises = lowerPromises(program, sdk);\n if (!apply(promises)) return { diagnostics };\n const lowering = lowerAsync(program, sdk);\n for (const [key, value] of promises.runtimeBlocks) lowering.blocks.set(key, value);\n if (!apply(lowering)) return { diagnostics };\n const analyzer = new Analyzer(\n program,\n host,\n dirname(filename),\n sdk,\n diagnostics,\n serviceRecords(program, services),\n );\n const module = analyzer.run({ ...options.programs, ...lowering.programs });\n for (const variable of module.variables) {\n const item = exposure.variables.get(`${variable.span.file}:${variable.name}`);\n if (item) variable.exposure = item;\n }\n for (const block of module.blocks) {\n const runtime = lowering.blocks.get(`${block.span.file}:${block.name}`);\n if (runtime) block.runtime = runtime;\n }\n for (const entry of module.programs) {\n const background = lowering.schedules.get(entry.name);\n if (background) entry.background = background;\n const continuation = lowering.continuations.get(entry.name);\n if (continuation) entry.continuation = continuation;\n }\n return hasErrors(diagnostics) ? { diagnostics } : { module, diagnostics };\n}\n\nexport function checkHostConfig(file: string): readonly Diagnostic[] {\n const bunTypes = createRequire(import.meta.url).resolve(\"@types/bun/index.d.ts\");\n const program = ts.createProgram([file], {\n strict: true,\n noEmit: true,\n target: ts.ScriptTarget.ES2022,\n module: ts.ModuleKind.ESNext,\n moduleResolution: ts.ModuleResolutionKind.Bundler,\n allowImportingTsExtensions: true,\n skipLibCheck: true,\n types: [bunTypes],\n });\n return ts.getPreEmitDiagnostics(program).map(tsDiagnostic);\n}\n\nclass Analyzer {\n private readonly checker: ts.TypeChecker;\n private readonly variables = new Map<ts.Symbol, Variable>();\n private readonly functions = new Map<ts.Symbol, PlcFunction>();\n private readonly methods = new Map<ts.Symbol, PlcFunction>();\n private readonly functionDeclarations = new Map<ts.Symbol, ts.FunctionDeclaration>();\n private readonly instances = new Map<string, PlcFunction>();\n private readonly pending: {\n node: ts.FunctionDeclaration | ts.MethodDeclaration;\n fn: PlcFunction;\n environment: TypeEnvironment;\n }[] = [];\n private readonly resolver: TypeResolver;\n private readonly blocks: BlockResolver;\n private readonly globalVariables: Variable[] = [];\n private readonly sources: readonly ts.SourceFile[];\n\n // This scope is saved and restored for each block or generic function body.\n private environment: TypeEnvironment = new Map();\n private activeBlock: BlockSource | undefined;\n private readonly ranges = new Map<string, IntegerInterval>();\n private readonly loopCounters = new Set<string>();\n private readonly aliases = new Map<ts.Symbol, Place>();\n private copySources: Place[] = [];\n private readonly breakTargets: (\"loop\" | \"switch\")[] = [];\n private activeFunction: PlcFunction | undefined;\n\n constructor(\n private readonly program: ts.Program,\n private readonly host: ts.ModuleResolutionHost,\n private readonly root: string,\n private readonly sdk: string,\n private readonly diagnostics: Diagnostic[],\n serviceRecord?: (type: ts.Type) => ts.Symbol | undefined,\n ) {\n this.checker = program.getTypeChecker();\n this.resolver = new TypeResolver(this.checker, root, sdk, this.fail, serviceRecord);\n this.blocks = new BlockResolver(\n this.resolver,\n span,\n this.fail,\n span(program.getSourceFile(sdk)!),\n );\n const roots = new Set(program.getRootFileNames());\n this.sources = runtimeSources(program).filter(\n (source) =>\n source.fileName !== sdk &&\n !source.fileName.startsWith(`${dirname(sdk)}/`) &&\n !program.isSourceFileDefaultLibrary(source) &&\n (!source.isDeclarationFile || roots.has(source.fileName)),\n );\n }\n\n private readonly fail: Fail = (node, code, message) => {\n throw new SemanticError(error(code, message, span(node)));\n };\n\n private type(node: ts.TypeNode): ResolvedType {\n return this.resolver.resolve(node, this.environment);\n }\n\n private storageId(node: ts.Node, name: string): string {\n return `${this.resolver.id(node, name)}${this.activeFunction ? `@${this.activeFunction.id}` : \"\"}`;\n }\n\n private guard(action: () => void): void {\n try {\n action();\n } catch (cause) {\n if (!(cause instanceof SemanticError)) throw cause;\n this.diagnostics.push(cause.diagnostic);\n }\n }\n\n run(entries: FrontendOptions[\"programs\"]): PlcModule {\n // Collect every declaration before resolving initializers and routine bodies.\n // Generic calls can enqueue more helpers, so resolve entry points last.\n this.collectDeclarations();\n this.initializeStorage();\n this.analyzeBlockBodies();\n this.analyzePendingFunctions();\n const programs = this.resolvePrograms(entries);\n\n return {\n types: [...this.resolver.types.values()],\n variables: this.globalVariables,\n functions: [...this.instances.values()],\n blocks: [...this.blocks.definitions.values()],\n programs,\n };\n }\n\n private collectDeclarations(): void {\n const classes = this.sources.flatMap((source) =>\n source.statements.filter(ts.isClassDeclaration),\n );\n this.blocks.index(classes);\n for (const node of classes) this.guard(() => this.blocks.collect(node));\n for (const source of this.blocks.sources.values()) {\n for (const method of source.methods)\n this.guard(() => {\n const fn = this.instantiate(method, [], method);\n fn.owner = {\n block: source.block.id,\n access: this.methodAccess(method),\n };\n this.methods.set(this.resolver.symbol(method.name), fn);\n });\n }\n for (const source of this.sources) {\n this.diagnostics.push(...suppressionDiagnostics(source));\n for (const statement of source.statements) {\n this.guard(() => this.declaration(statement));\n }\n }\n }\n\n private methodAccess(method: ts.MethodDeclaration): MethodOwner[\"access\"] {\n if (method.modifiers?.some((modifier) => modifier.kind === ts.SyntaxKind.PrivateKeyword))\n return \"private\";\n if (method.modifiers?.some((modifier) => modifier.kind === ts.SyntaxKind.ProtectedKeyword))\n return \"protected\";\n return \"public\";\n }\n\n private initializeStorage(): void {\n for (const source of this.sources) {\n for (const statement of source.statements) {\n if (ts.isVariableStatement(statement) && !source.isDeclarationFile) {\n this.guard(() => {\n for (const declaration of statement.declarationList.declarations) {\n if (!declaration.initializer)\n this.fail(\n declaration,\n \"PLC3001\",\n \"Persistent PLC state requires a constant initializer.\",\n );\n const variable = this.variables.get(this.resolver.symbol(declaration.name));\n if (!variable || variable.storage === \"instance\") continue;\n const initializer = storageInitializer(\n declaration.initializer,\n this.resolver,\n this.fail,\n ).value;\n const inferred = variable.type === \"inferred\";\n const expression = this.expression(initializer, inferred ? undefined : variable.type);\n variable.type = expression.type;\n if (\n inferred &&\n variable.storage === \"constant\" &&\n aggregate(this.resolver.types.get(variable.type))\n )\n variable.storage = \"module\";\n if (variable.retain && variable.storage === \"constant\")\n this.fail(\n declaration,\n \"PLC3004\",\n \"retain requires mutable persistent storage or a static block instance.\",\n );\n const value = this.constant(this.implicitCopy(expression));\n if (!value)\n this.fail(\n declaration.initializer,\n \"PLC3001\",\n \"Persistent initializers must be compile-time constants.\",\n );\n variable.initial = value;\n }\n });\n }\n }\n }\n }\n\n private analyzeBlockBodies(): void {\n for (const source of this.blocks.sources.values())\n this.guard(() => {\n for (const [variable, node] of source.initializers) {\n const value = this.constant(this.expression(node, variable.type));\n if (!value)\n this.fail(node, \"PLC3001\", \"Block state requires a compile-time constant initializer.\");\n variable.initial = value;\n }\n const { block } = source;\n this.activeBlock = source;\n try {\n const routine = this.routineBody(\n {\n id: block.id,\n name: block.name,\n parameters: block.inputs,\n locals: [],\n body: [],\n span: block.span,\n ...(block.result && { result: block.result }),\n },\n source.fieldBindings,\n source.method.body!,\n );\n block.locals = routine.locals;\n block.body = routine.body;\n } finally {\n this.activeBlock = undefined;\n }\n });\n }\n\n private analyzePendingFunctions(): void {\n // A worklist allows explicit generic instances to share source without sharing locals.\n for (let index = 0; index < this.pending.length; index++) {\n const instance = this.pending[index]!;\n this.guard(() => {\n this.environment = instance.environment;\n this.activeBlock = instance.fn.owner\n ? [...this.blocks.sources.values()].find(\n (source) => source.block.id === instance.fn.owner?.block,\n )\n : undefined;\n try {\n // Declaration admission proved the parameter list and body before worklist analysis.\n const fn = this.routineBody(\n instance.fn,\n [\n ...(this.activeBlock?.fieldBindings ?? []),\n ...instance.node.parameters.map(\n (parameter, index) =>\n [this.resolver.symbol(parameter.name), instance.fn.parameters[index]!] as const,\n ),\n ],\n instance.node.body!,\n );\n this.instances.set(fn.id, fn);\n if (ts.isFunctionDeclaration(instance.node) && !instance.node.typeParameters?.length)\n this.functions.set(this.resolver.symbol(instance.node.name!), fn);\n } finally {\n this.environment = new Map();\n this.activeBlock = undefined;\n }\n });\n }\n }\n\n // Lowers one routine body with its bindings layered over module storage.\n private routineBody(\n fn: PlcFunction,\n bindings: Iterable<readonly [ts.Symbol, Variable]>,\n body: ts.Block,\n ): PlcFunction {\n const saved = new Map(this.variables),\n locals: Variable[] = [];\n this.activeFunction = fn;\n this.copySources = [];\n for (const [symbol, variable] of bindings) this.variables.set(symbol, variable);\n try {\n return { ...fn, locals, body: this.statements(body.statements, locals) };\n } finally {\n this.variables.clear();\n for (const [symbol, variable] of saved) this.variables.set(symbol, variable);\n this.activeFunction = undefined;\n }\n }\n\n private resolvePrograms(entries: FrontendOptions[\"programs\"]): PlcProgram[] {\n const programs: PlcProgram[] = [];\n for (const [name, entry] of Object.entries(entries)) {\n const source = this.program.getSourceFile(resolve(this.root, entry.module));\n if (!source) {\n this.diagnostics.push(error(\"PLC4001\", `Program source not found: ${entry.module}.`));\n continue;\n }\n this.guard(() => {\n const moduleSymbol = this.checker.getSymbolAtLocation(source);\n const exported =\n moduleSymbol &&\n this.checker\n .getExportsOfModule(moduleSymbol)\n .find((symbol) => symbol.name === entry.export);\n if (!exported)\n this.fail(source, \"PLC4001\", `Program export ${entry.export} was not found.`);\n const symbol =\n exported.flags & ts.SymbolFlags.Alias\n ? this.checker.getAliasedSymbol(exported)\n : exported;\n const fn = this.functions.get(symbol);\n if (!fn || fn.parameters.length || fn.result)\n this.fail(\n source,\n \"PLC4001\",\n \"Program entry must be an implemented parameterless void function.\",\n );\n programs.push({ id: `program:${name}`, name, entry: fn.id });\n });\n }\n return programs;\n }\n\n private dependency(node: ts.ImportDeclaration | ts.ExportDeclaration): void {\n if (!node.moduleSpecifier) return;\n if (!ts.isStringLiteral(node.moduleSpecifier))\n this.fail(node, \"PLC1001\", \"Only static module imports are supported.\");\n const resolved = ts.resolveModuleName(\n node.moduleSpecifier.text,\n node.getSourceFile().fileName,\n this.program.getCompilerOptions(),\n this.host,\n ).resolvedModule;\n if (!resolved)\n this.fail(\n node.moduleSpecifier,\n \"PLC1008\",\n \"This dependency could not be resolved to PLC source.\",\n );\n const source = this.program.getSourceFile(resolved.resolvedFileName);\n const typeOnly = ts.isImportDeclaration(node) ? node.importClause?.isTypeOnly : node.isTypeOnly;\n if (typeOnly) return;\n const bindings = ts.isImportDeclaration(node)\n ? node.importClause?.namedBindings\n : node.exportClause;\n const defaultName = ts.isImportDeclaration(node) ? node.importClause?.name : undefined;\n const namedOnly =\n bindings &&\n (ts.isNamedImports(bindings) || ts.isNamedExports(bindings)) &&\n bindings.elements.length > 0 &&\n bindings.elements.every(\n (binding) =>\n binding.isTypeOnly || !(this.resolver.symbol(binding.name).flags & ts.SymbolFlags.Value),\n );\n if (namedOnly && !defaultName) return;\n if (source && !source.isDeclarationFile) return;\n if (resolved.resolvedFileName.replaceAll(\"\\\\\", \"/\").startsWith(`${dirname(this.sdk)}/`)) return;\n const authoredIo =\n source &&\n this.sources.includes(source) &&\n source.statements.some(ts.isVariableStatement) &&\n source.statements.every(\n (statement) =>\n ts.isTypeAliasDeclaration(statement) ||\n ts.isEmptyStatement(statement) ||\n (ts.isVariableStatement(statement) &&\n statement.declarationList.declarations.every(\n (declaration) => declaration.type && this.type(declaration.type).io,\n )),\n );\n if (authoredIo) return;\n this.fail(\n node.moduleSpecifier,\n \"PLC1008\",\n \"Runtime dependencies need PLC TypeScript implementation source; JavaScript and declaration-only value imports are unsupported.\",\n );\n }\n\n private declaration(statement: ts.Statement): void {\n if (ts.isImportDeclaration(statement) || ts.isExportDeclaration(statement)) {\n this.dependency(statement);\n return;\n }\n if (\n ts.isClassDeclaration(statement) ||\n ts.isTypeAliasDeclaration(statement) ||\n ts.isInterfaceDeclaration(statement) ||\n ts.isEmptyStatement(statement)\n )\n return;\n if (ts.isEnumDeclaration(statement)) {\n this.resolver.enumeration(statement);\n return;\n }\n if (ts.isVariableStatement(statement)) {\n this.moduleVariables(statement);\n return;\n }\n if (ts.isFunctionDeclaration(statement)) {\n if (!statement.name || !statement.body)\n this.fail(statement, \"PLC1001\", \"PLC functions need a name and an implementation.\");\n if (statement.modifiers?.some((modifier) => modifier.kind === ts.SyntaxKind.AsyncKeyword)) {\n this.fail(statement, \"PLC1007\", \"Async execution is not supported in PLC scan code.\");\n }\n if (statement.asteriskToken)\n this.fail(statement, \"PLC1007\", \"Generators are not supported in PLC scan code.\");\n const symbol = this.resolver.symbol(statement.name);\n this.functionDeclarations.set(symbol, statement);\n if (!statement.typeParameters?.length)\n this.functions.set(symbol, this.instantiate(statement, [], statement));\n return;\n }\n this.fail(\n statement,\n \"PLC1001\",\n `${ts.SyntaxKind[statement.kind]} is not supported in PLC source.`,\n );\n }\n\n private moduleVariables(statement: ts.VariableStatement): void {\n if (!(statement.declarationList.flags & (ts.NodeFlags.Let | ts.NodeFlags.Const)))\n this.fail(statement, \"PLC1001\", \"Use let or const instead of var.\");\n const immutable = Boolean(statement.declarationList.flags & ts.NodeFlags.Const);\n for (const declaration of statement.declarationList.declarations) {\n if (!ts.isIdentifier(declaration.name))\n this.fail(declaration.name, \"PLC1001\", \"Destructuring declarations are not supported.\");\n const initializer =\n declaration.initializer &&\n storageInitializer(declaration.initializer, this.resolver, this.fail);\n const table = initializer && this.tableType(declaration, initializer.value);\n const instance =\n initializer && ts.isNewExpression(initializer.value)\n ? this.blocks.instanceType(initializer.value)\n : initializer && !table\n ? this.blocks.instanceArrayType(declaration.type, initializer.value)\n : undefined;\n const literal = initializer && this.numericLiteral(initializer.value);\n if (table && !immutable)\n this.fail(declaration, \"PLC2001\", \"A readonly table is a const declaration.\");\n const type = instance\n ? { type: instance }\n : (table ??\n (declaration.type\n ? this.type(declaration.type)\n : { type: immutable ? \"inferred\" : literal ? numericLiteralType(literal) : \"BOOL\" }));\n if (\n !instance &&\n !declaration.type &&\n !immutable &&\n !literal &&\n declaration.initializer &&\n initializer?.value.kind !== ts.SyntaxKind.TrueKeyword &&\n initializer?.value.kind !== ts.SyntaxKind.FalseKeyword\n )\n this.fail(declaration, \"PLC2001\", \"Annotate PLC storage explicitly.\");\n const ambient = declaration.getSourceFile().isDeclarationFile;\n if (type.mode || this.resolver.hasReferences(type.type))\n this.fail(declaration, \"PLC2001\", \"Borrow schemas cannot be stored as values.\");\n if (this.resolver.types.get(type.type)?.kind === \"block\" && !instance)\n this.fail(\n declaration,\n \"PLC1007\",\n \"Block instances require a static constructor initializer.\",\n );\n if (\n instance &&\n (!immutable || (declaration.type && this.type(declaration.type).type !== instance))\n )\n this.fail(\n declaration,\n \"PLC2001\",\n \"Static block instances require const bindings and matching annotations.\",\n );\n if (\n initializer?.retain &&\n (ambient ||\n (immutable &&\n type.type !== \"inferred\" &&\n !instance &&\n !aggregate(this.resolver.types.get(type.type))))\n )\n this.fail(\n declaration,\n \"PLC3004\",\n \"retain requires mutable persistent storage or a static block instance.\",\n );\n if (ambient && !type.io)\n this.fail(declaration, \"PLC4002\", \"Ambient PLC variables must declare Input or Output.\");\n if (!ambient && type.io)\n this.fail(declaration, \"PLC4002\", \"Logical I/O belongs in an ambient declaration file.\");\n if (type.io === \"input\" && !immutable)\n this.fail(declaration, \"PLC4002\", \"Inputs must use declare const.\");\n if (type.io === \"output\" && immutable)\n this.fail(declaration, \"PLC4002\", \"Outputs must use declare let.\");\n const variable: Variable = {\n id: this.storageId(declaration, declaration.name.text),\n name: declaration.name.text,\n type: type.type,\n storage: instance\n ? \"instance\"\n : (type.io ??\n (immutable && (table || !aggregate(this.resolver.types.get(type.type)))\n ? \"constant\"\n : \"module\")),\n mutable: !immutable,\n retain: initializer?.retain ?? false,\n ...(statement.modifiers?.some((modifier) => modifier.kind === ts.SyntaxKind.ExportKeyword)\n ? { exported: true as const }\n : {}),\n span: span(declaration),\n };\n this.variables.set(this.resolver.symbol(declaration.name), variable);\n this.globalVariables.push(variable);\n }\n }\n\n /**\n * `const table: readonly T[] = [...]` or `const table = [...] as const satisfies readonly T[]`,\n * also spelled `ReadonlyArray<T>`, is a constant `FixedArray<T, N>` whose length is the\n * literal's element count.\n */\n private tableType(\n declaration: ts.VariableDeclaration,\n initializer: ts.Expression,\n ): ResolvedType | undefined {\n const satisfied = ts.isSatisfiesExpression(initializer) ? initializer : undefined;\n const annotation = declaration.type ?? satisfied?.type;\n if (!annotation) return undefined;\n let element: ts.TypeNode | undefined;\n if (\n ts.isTypeOperatorNode(annotation) &&\n annotation.operator === ts.SyntaxKind.ReadonlyKeyword &&\n ts.isArrayTypeNode(annotation.type)\n )\n element = annotation.type.elementType;\n else if (\n ts.isTypeReferenceNode(annotation) &&\n annotation.typeName.getText() === \"ReadonlyArray\" &&\n annotation.typeArguments?.length === 1 &&\n this.resolver.standardLibrary(this.resolver.symbol(annotation.typeName))\n )\n element = annotation.typeArguments[0];\n if (!element) return undefined;\n let literal = satisfied?.expression ?? initializer;\n while (\n ts.isParenthesizedExpression(literal) ||\n (ts.isAsExpression(literal) && ts.isConstTypeReference(literal.type))\n )\n literal = literal.expression;\n if (!ts.isArrayLiteralExpression(literal))\n this.fail(declaration, \"PLC2001\", \"A readonly table is initialized by an array literal.\");\n return this.resolver.fixedArray(\n annotation,\n this.type(element),\n { kind: \"integer\", value: literal.elements.length },\n { kind: \"integer\", value: 0 },\n );\n }\n\n private instantiate(\n node: ts.FunctionDeclaration | ts.MethodDeclaration,\n arguments_: readonly ts.TypeNode[],\n call: ts.Node,\n ): PlcFunction {\n if (!node.name || !ts.isIdentifier(node.name))\n this.fail(node, \"PLC1001\", \"PLC routines need identifier names.\");\n const routineName = node.name.text;\n const environment = this.resolver.bindings(\n node.typeParameters,\n arguments_,\n this.environment,\n call,\n );\n const suffix = (node.typeParameters ?? [])\n .map((parameter) => this.resolver.key(environment.get(this.resolver.symbol(parameter.name))!))\n .join(\",\");\n const id = `${this.resolver.id(node, routineName)}${suffix ? `<${suffix}>` : \"\"}`;\n const existing = this.instances.get(id);\n if (existing) return existing;\n // Bounds generic expansion; plain helpers each instantiate once.\n if (suffix && [...this.instances.keys()].filter((key) => key.endsWith(\">\")).length >= 256)\n this.fail(\n call,\n \"PLC2001\",\n \"Generic specialization exceeds 256 concrete helpers; recursive specialization is unsupported.\",\n );\n const saved = this.environment;\n this.environment = environment;\n try {\n const parameters = node.parameters.map((parameter) => {\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 \"PLC parameters need names and explicit types; optional/rest/default parameters are unsupported.\",\n );\n const type = this.type(parameter.type);\n const block = this.resolver.types.get(type.type)?.kind === \"block\";\n if (type.mode !== \"inOut\" && !block && !this.resolver.isValue(type))\n this.fail(parameter, \"PLC2001\", \"Parameters require value types or InOut borrows.\");\n if (type.io) this.fail(parameter, \"PLC2001\", \"Parameters cannot use logical I/O wrappers.\");\n // Records, arrays and blocks pass by reference, as objects do in TypeScript.\n const mode =\n type.mode ??\n (block || aggregate(this.resolver.types.get(type.type)) ? \"inOut\" : undefined);\n return {\n id: `${this.resolver.id(parameter, parameter.name.text)}@${id}`,\n name: parameter.name.text,\n type: type.type,\n storage: \"parameter\" as const,\n mutable: mode === \"inOut\",\n ...(mode && { mode }),\n retain: false,\n span: span(parameter),\n };\n });\n let result: string | undefined;\n if (node.type && node.type.kind !== ts.SyntaxKind.VoidKeyword) {\n const type = this.type(node.type);\n if (!this.resolver.isValue(type))\n this.fail(node.type, \"PLC2001\", \"Helper results require value types.\");\n if (type.io) this.fail(node.type, \"PLC4002\", \"Helper results cannot use I/O wrappers.\");\n result = type.type;\n } else if (!node.type) {\n const signature = this.checker.getSignatureFromDeclaration(node);\n if (\n !signature ||\n !(this.checker.getReturnTypeOfSignature(signature).flags & ts.TypeFlags.Void)\n )\n this.fail(node, \"PLC2001\", \"Annotate helper results explicitly.\");\n }\n const bounds = this.resolver.mathHelper(node, routineName);\n const fn: PlcFunction = {\n id,\n name: `${routineName}${suffix ? `_${suffix}` : \"\"}`,\n parameters,\n locals: [],\n body: [],\n span: span(node),\n ...(result && { result }),\n ...(bounds && { bounds }),\n };\n this.instances.set(id, fn);\n this.pending.push({ node, fn, environment });\n return fn;\n } finally {\n this.environment = saved;\n }\n }\n\n private byId(): Map<string, Variable> {\n return new Map(\n [\n ...this.variables.values(),\n ...(this.activeBlock\n ? [...this.activeBlock.block.inputs, ...this.activeBlock.block.outputs]\n : []),\n ].map((variable) => [variable.id, variable]),\n );\n }\n\n private checked(value: Expression): Expression {\n const message = expressionIssue(value, this.resolver.types, this.byId(), this.ranges);\n if (message) throw new SemanticError(error(\"PLC2002\", message, value.span));\n return value;\n }\n\n private coerce(value: Expression, destination: string): Expression {\n if (value.type === destination) return value;\n const source = this.resolver.types.get(value.type),\n target = this.resolver.types.get(destination);\n if (!source || !target)\n throw new SemanticError(error(\"PLC2001\", \"This PLC type has not been resolved.\", value.span));\n const constant = fold(value, this.byId(), this.resolver.types);\n if (\n source.kind === \"string\" &&\n target.kind === \"string\" &&\n source.encoding === target.encoding &&\n source.capacity <= target.capacity\n )\n return constant\n ? { kind: \"constant\", type: destination, value: constant, span: value.span }\n : { kind: \"convert\", type: destination, operand: value, policy: \"exact\", span: value.span };\n if (!canAssign(source, target, constant))\n throw new SemanticError(\n error(\n \"PLC2002\",\n \"Use an explicit conversion between these PLC domains or widths.\",\n value.span,\n ),\n );\n if (constant) return { kind: \"constant\", type: destination, value: constant, span: value.span };\n return this.checked({\n kind: \"convert\",\n type: destination,\n operand: value,\n policy: \"exact\",\n span: value.span,\n });\n }\n\n private constant(expression: Expression): Constant | undefined {\n return fold(expression, this.byId(), this.resolver.types);\n }\n\n private numericLiteral(node: ts.Expression): string | undefined {\n while (ts.isParenthesizedExpression(node)) node = node.expression;\n if (ts.isNumericLiteral(node) || ts.isBigIntLiteral(node)) return node.getText();\n if (ts.isPrefixUnaryExpression(node) && node.operator === ts.SyntaxKind.MinusToken) {\n const operand = this.numericLiteral(node.operand);\n if (operand !== undefined) return operand.startsWith(\"-\") ? operand.slice(1) : `-${operand}`;\n }\n return undefined;\n }\n\n private contextualLiteral(node: ts.Expression): boolean {\n while (ts.isParenthesizedExpression(node)) node = node.expression;\n return (\n this.numericLiteral(node) !== undefined ||\n ts.isStringLiteral(node) ||\n ts.isNoSubstitutionTemplateLiteral(node)\n );\n }\n\n private literal(node: ts.Expression, expected?: string): Expression | undefined {\n const text = this.numericLiteral(node);\n if (text === undefined) return undefined;\n const type = expected ?? numericLiteralType(text);\n const target = this.resolver.types.get(type);\n if (!target || ![\"integer\", \"bits\", \"float\"].includes(target.kind))\n this.fail(\n node,\n \"PLC2001\",\n \"Numeric literals require an arithmetic or bit-string PLC type; use named enum members.\",\n );\n let value: Constant;\n if (target.kind === \"float\") {\n const clean = text.replaceAll(\"_\", \"\");\n const number = /^-?0[xob]/i.test(clean) ? Number(parseInteger(clean)) : Number(clean);\n value = { kind: \"float\", value: target.bits === 32 ? Math.fround(number) : number };\n } else {\n try {\n value = { kind: \"integer\", value: String(parseInteger(text)) };\n } catch (cause) {\n this.fail(\n node,\n \"PLC2002\",\n cause instanceof Error ? cause.message : \"Invalid integer literal.\",\n );\n }\n }\n return this.checked({ kind: \"constant\", type, value, span: span(node) });\n }\n\n private expression(node: ts.Expression, expected?: string): Expression {\n if (\n ts.isParenthesizedExpression(node) ||\n ts.isSatisfiesExpression(node) ||\n (ts.isAsExpression(node) && ts.isConstTypeReference(node.type))\n )\n return this.expression(node.expression, expected);\n const literal = this.literal(node, expected);\n if (literal) return literal;\n const value = this.rawExpression(node, expected);\n return expected ? this.coerce(value, expected) : value;\n }\n\n private rawExpression(node: ts.Expression, expected?: string): Expression {\n const origin = { span: span(node) };\n if (node.kind === ts.SyntaxKind.TrueKeyword || node.kind === ts.SyntaxKind.FalseKeyword) {\n return {\n ...origin,\n type: \"BOOL\",\n kind: \"constant\",\n value: { kind: \"bool\", value: node.kind === ts.SyntaxKind.TrueKeyword },\n };\n }\n if (ts.isStringLiteral(node) || ts.isNoSubstitutionTemplateLiteral(node)) {\n const type = expected ? this.resolver.types.get(expected) : undefined;\n if (type?.kind === \"enum\") {\n const member = type.members.find((member) => member.name === node.text);\n if (member)\n return {\n ...origin,\n type: type.id,\n kind: \"constant\",\n value: { kind: \"integer\", value: member.value },\n };\n }\n if (type?.kind !== \"string\")\n this.fail(node, \"PLC2001\", \"String literals require a bounded STRING or WSTRING context.\");\n return this.checked({\n ...origin,\n type: type.id,\n kind: \"constant\",\n value: { kind: \"string\", value: node.text },\n });\n }\n if (ts.isObjectLiteralExpression(node)) {\n const type = expected ? this.resolver.types.get(expected) : undefined;\n if (type?.kind === \"array\" && type.index) {\n // Like an array literal, every element in order, so items evaluate in source order.\n const order = \"Enum-keyed record literals list every enum member once, in value order.\";\n const items: Expression[] = [];\n for (const property of node.properties) {\n if (!ts.isPropertyAssignment(property) || !ts.isComputedPropertyName(property.name))\n this.fail(\n property,\n \"PLC1001\",\n \"Enum-keyed record literals use computed member keys such as [Station.A].\",\n );\n const key = this.expression(property.name.expression, type.index);\n if (key.kind !== \"constant\" || key.type !== type.index || key.value.kind !== \"integer\")\n this.fail(property.name, \"PLC2001\", \"Keys must be members of the record's enum.\");\n if (Number(key.value.value) !== type.lowerBound + items.length)\n this.fail(property, \"PLC2001\", order);\n items.push(this.implicitCopy(this.expression(property.initializer, type.element)));\n }\n if (items.length !== type.length) this.fail(node, \"PLC2001\", order);\n return this.checked({ ...origin, type: type.id, kind: \"array\", items });\n }\n if (type?.kind !== \"record\")\n this.fail(node, \"PLC2001\", \"Record literals require an explicit closed PLC record type.\");\n const fields: Record<string, Expression> = Object.create(null);\n const written = new Set<string>();\n for (const [position, property] of node.properties.entries()) {\n if (ts.isSpreadAssignment(property) && !position) {\n for (const [name, value] of Object.entries(\n this.spreadFields(property.expression, type.fields),\n )) {\n // TypeScript's spread shares a nested record or array, so a later write to it diverges.\n this.recordCopySource(value);\n fields[name] = this.implicitCopy(value);\n }\n continue;\n }\n if (\n !(ts.isPropertyAssignment(property) || ts.isShorthandPropertyAssignment(property)) ||\n !ts.isIdentifier(property.name)\n )\n this.fail(\n property,\n \"PLC1001\",\n \"Record literals take named fields after at most one leading spread; methods are unsupported.\",\n );\n const fieldName = property.name.text;\n const field = type.fields.find((field) => field.name === fieldName);\n if (!field || written.has(field.name))\n this.fail(property, \"PLC2001\", \"Unknown or duplicate record field.\");\n written.add(field.name);\n // An explicit field overrides the spread and keeps its source evaluation order.\n delete fields[field.name];\n fields[field.name] = this.implicitCopy(\n this.expression(\n ts.isPropertyAssignment(property) ? property.initializer : property.name,\n field.type,\n ),\n );\n }\n if (this.resolver.unions.has(type.id))\n for (const field of type.fields)\n if (!Object.hasOwn(fields, field.name))\n fields[field.name] = {\n ...origin,\n type: field.type,\n kind: \"constant\",\n value: defaultValue(field.type, this.resolver.types),\n };\n return this.checked({ ...origin, type: type.id, kind: \"record\", fields });\n }\n if (ts.isArrayLiteralExpression(node)) {\n const type = expected ? this.resolver.types.get(expected) : undefined;\n if (type?.kind !== \"array\")\n this.fail(node, \"PLC2001\", \"Array literals require an explicit FixedArray type.\");\n const items = node.elements.map((element) => {\n if (ts.isOmittedExpression(element) || ts.isSpreadElement(element))\n this.fail(element, \"PLC1001\", \"Fixed arrays cannot have holes or spreading.\");\n return this.implicitCopy(this.expression(element, type.element));\n });\n return this.checked({ ...origin, type: type.id, kind: \"array\", items });\n }\n if (ts.isPropertyAccessExpression(node)) {\n const declaration = this.resolver.symbol(node.name).declarations?.find(ts.isEnumMember);\n if (declaration) {\n const type = this.resolver.enumeration(declaration.parent).type;\n const layout = this.resolver.types.get(type)!;\n if (layout.kind !== \"enum\") this.fail(node, \"PLC2001\", \"Invalid enum layout.\");\n return {\n ...origin,\n type,\n kind: \"constant\",\n value: {\n kind: \"integer\",\n value: layout.members.find((member) => member.name === declaration.name.getText())!\n .value,\n },\n };\n }\n if (node.name.text === \"length\") {\n const base = this.expression(node.expression),\n type = this.resolver.types.get(base.type);\n if (type?.kind === \"array\")\n return { ...origin, type: \"DINT\", kind: \"length\", operand: base };\n }\n }\n if (ts.isPropertyAccessExpression(node) || ts.isElementAccessExpression(node)) {\n const place = this.place(node),\n type = placeType(place, this.resolver.types, this.byId(), this.ranges);\n if (type.issue || !type.type) this.fail(node, \"PLC2001\", type.issue ?? \"Invalid PLC place.\");\n return { ...origin, type: type.type, kind: \"load\", place };\n }\n if (ts.isIdentifier(node) && this.aliases.has(this.resolver.symbol(node))) {\n const place = this.place(node),\n type = placeType(place, this.resolver.types, this.byId(), this.ranges);\n if (type.issue || !type.type) this.fail(node, \"PLC2001\", type.issue ?? \"Invalid PLC place.\");\n return { ...origin, type: type.type, kind: \"load\", place };\n }\n if (ts.isIdentifier(node)) {\n const variable = this.variables.get(this.resolver.symbol(node));\n if (!variable) this.fail(node, \"PLC1002\", \"This value has no supported PLC storage.\");\n if (variable.type === \"inferred\")\n this.fail(\n node,\n \"PLC3001\",\n \"Resolve constant initializer dependencies in declaration order.\",\n );\n return {\n ...origin,\n type: variable.type,\n kind: \"load\",\n place: { root: variable.id, path: [] },\n };\n }\n if (ts.isPrefixUnaryExpression(node)) {\n const operator =\n node.operator === ts.SyntaxKind.ExclamationToken\n ? \"not\"\n : node.operator === ts.SyntaxKind.MinusToken\n ? \"negate\"\n : node.operator === ts.SyntaxKind.TildeToken\n ? \"bitNot\"\n : undefined;\n if (!operator) this.fail(node, \"PLC2001\", \"Unsupported unary operation.\");\n const operand = this.expression(node.operand, operator === \"not\" ? \"BOOL\" : expected);\n return this.checked({\n ...origin,\n type: operator === \"not\" ? \"BOOL\" : operand.type,\n kind: \"unary\",\n operator,\n operand,\n });\n }\n if (ts.isCallExpression(node)) {\n const sdk = this.sdkExpression(node, expected);\n if (sdk) return sdk;\n const call = this.call(node);\n if (!call.fn.result)\n this.fail(node, \"PLC2001\", \"A void helper cannot produce an expression value.\");\n return {\n ...origin,\n type: call.fn.result,\n kind: \"call\",\n function: call.fn.id,\n arguments: call.arguments,\n ...(call.instance && { instance: call.instance }),\n ...(call.index && { index: call.index }),\n };\n }\n if (ts.isConditionalExpression(node)) {\n const then = this.expression(node.whenTrue, expected);\n return {\n ...origin,\n type: then.type,\n kind: \"conditional\",\n condition: this.expression(node.condition, \"BOOL\"),\n then,\n else: this.expression(node.whenFalse, then.type),\n };\n }\n if (ts.isBinaryExpression(node)) return this.binaryExpression(node, expected);\n this.fail(node, \"PLC1001\", `${ts.SyntaxKind[node.kind]} is not supported in PLC expressions.`);\n }\n\n private binaryExpression(node: ts.BinaryExpression, expected?: string): Expression {\n const origin = { span: span(node) };\n const operator = operators.get(node.operatorToken.kind);\n if (!operator)\n this.fail(\n node.operatorToken,\n \"PLC2001\",\n \"Unsupported binary operation; implicit coercion is prohibited.\",\n );\n const logical = operator === \"and\" || operator === \"or\";\n const comparison = comparisonOperators.has(operator);\n const leftIsLiteral = this.contextualLiteral(node.left);\n const context = logical\n ? \"BOOL\"\n : comparison\n ? leftIsLiteral\n ? this.expression(node.right).type\n : undefined\n : expected;\n let left = this.expression(node.left, context);\n if (comparison && !leftIsLiteral && !this.contextualLiteral(node.right)) {\n // Compare at the wider type; widening cannot change the value.\n const wider = this.expression(node.right).type,\n from = this.resolver.types.get(left.type),\n to = this.resolver.types.get(wider);\n if (from && to && !canAssign(to, from) && canAssign(from, to))\n left = this.coerce(left, wider);\n }\n const right = this.expression(\n node.right,\n operator === \"shiftLeft\" || operator === \"shiftRight\" ? \"DINT\" : left.type,\n );\n if (operator === \"divide\" && this.resolver.types.get(left.type)?.kind !== \"float\")\n this.fail(node, \"PLC2002\", \"Use div<T>() for truncating integer division.\");\n return this.checked({\n ...origin,\n type: logical || comparison ? \"BOOL\" : left.type,\n kind: \"binary\",\n operator,\n left,\n right,\n });\n }\n\n private sdkExpression(node: ts.CallExpression, expected?: string): Expression | undefined {\n const origin = { span: span(node) };\n const official = this.sdkCall(node);\n if (official === \"errorCode\") {\n if (node.arguments.length !== 1)\n this.fail(node, \"PLC1012\", \"errorCode requires one rejection reason.\");\n return this.expression(node.arguments[0]!, \"UDINT\");\n }\n if (\n official &&\n (Object.hasOwn(durationScales, official) || Object.hasOwn(calendarTypes, official))\n ) {\n if (node.arguments.length !== 1 || node.typeArguments?.length)\n this.fail(node, \"PLC2001\", \"Time constructors require one compile-time literal argument.\");\n const argument = node.arguments[0]!;\n const scale = durationScales[official];\n let value: Constant | undefined, type: string;\n if (scale) {\n type = \"TIME\";\n let text = this.numericLiteral(argument);\n if (text === undefined) {\n const folded = this.constant(this.expression(argument));\n if (folded?.kind === \"integer\") text = folded.value;\n }\n if (text !== undefined && /^-?0[xob]/i.test(text)) text = String(parseInteger(text));\n value = text === undefined ? undefined : durationLiteral(text.replace(/n$/, \"\"), scale);\n } else {\n type = calendarTypes[official]!;\n const layout = this.resolver.types.get(type)!;\n value =\n layout.kind === \"calendar\" &&\n (ts.isStringLiteral(argument) || ts.isNoSubstitutionTemplateLiteral(argument))\n ? calendarLiteral(layout.domain, argument.text)\n : undefined;\n }\n if (!value)\n this.fail(\n argument,\n \"PLC2002\",\n \"Invalid time literal: require an exact supported domain value and millisecond TIME precision.\",\n );\n return this.checked({ ...origin, type, kind: \"constant\", value });\n }\n if (official === \"now\") {\n if (node.arguments.length || node.typeArguments?.length)\n this.fail(node, \"PLC2001\", \"now() takes no arguments.\");\n return this.checked({\n ...origin,\n type: \"DINT\",\n kind: \"unary\",\n operator: \"clock\",\n operand: {\n ...origin,\n type: \"DINT\",\n kind: \"constant\",\n value: { kind: \"integer\", value: \"0\" },\n },\n });\n }\n if (official === \"timeToMilliseconds\") {\n if (node.arguments.length !== 1 || node.typeArguments?.length)\n this.fail(\n node,\n \"PLC2001\",\n \"timeToMilliseconds requires one TIME argument and no type arguments.\",\n );\n return this.checked({\n ...origin,\n type: \"UDINT\",\n kind: \"unary\",\n operator: \"timeToMilliseconds\",\n operand: this.expression(node.arguments[0]!),\n });\n }\n if (official === \"defaultValue\") {\n if (node.arguments.length || node.typeArguments?.length !== 1)\n this.fail(\n node,\n \"PLC2001\",\n \"defaultValue requires exactly one concrete type and no value arguments.\",\n );\n const type = this.type(node.typeArguments[0]!);\n if (!this.resolver.isValue(type))\n this.fail(\n node,\n \"PLC2001\",\n \"defaultValue requires a fixed value layout, not an instance or borrow schema.\",\n );\n if (type.io) this.fail(node, \"PLC4002\", \"Default values cannot create logical I/O.\");\n return this.checked({\n ...origin,\n type: type.type,\n kind: \"constant\",\n value: defaultValue(type.type, this.resolver.types),\n });\n }\n if (official === \"copy\") {\n if (node.arguments.length !== 1 || (node.typeArguments && node.typeArguments.length !== 1))\n this.fail(node, \"PLC2001\", \"copy requires one fixed aggregate value.\");\n const operand = this.expression(\n node.arguments[0]!,\n node.typeArguments?.[0] ? this.type(node.typeArguments[0]).type : expected,\n );\n return this.checked({ ...origin, type: operand.type, kind: \"copy\", operand });\n }\n if (official && (Object.hasOwn(conversions, official) || Object.hasOwn(arithmetic, official))) {\n const argument = node.typeArguments?.[0];\n if (!argument || node.typeArguments?.length !== 1)\n this.fail(\n node,\n \"PLC2001\",\n \"Numeric SDK operations require one explicit PLC type argument.\",\n );\n const target = this.type(argument);\n if (target.io)\n this.fail(argument, \"PLC2001\", \"I/O wrappers cannot select an operation type.\");\n const conversion = conversions[official];\n if (conversion) {\n if (node.arguments.length !== 1)\n this.fail(node, \"PLC2001\", \"Conversion needs exactly one operand.\");\n return this.checked({\n ...origin,\n type: target.type,\n kind: \"convert\",\n policy: conversion,\n operand: this.expression(node.arguments[0]!),\n });\n }\n const operation = arithmetic[official]!;\n if (node.arguments.length !== 2)\n this.fail(node, \"PLC2001\", \"Arithmetic SDK operation needs two operands.\");\n return this.checked({\n ...origin,\n type: target.type,\n kind: \"binary\",\n ...operation,\n left: this.expression(node.arguments[0]!, target.type),\n right: this.expression(node.arguments[1]!, target.type),\n });\n }\n return undefined;\n }\n\n private sdkCall(node: ts.CallExpression): string | undefined {\n const name = calleeName(node.expression);\n return name && this.resolver.sdkName(name);\n }\n\n private update(node: ts.CallExpression): Statement | undefined {\n if (!ts.isPropertyAccessExpression(node.expression) || node.expression.name.text !== \"update\")\n return undefined;\n const place = this.place(node.expression.expression),\n variable = this.byId().get(place.root),\n type = variable && instancedBlock(variable.type, this.resolver.types),\n [selector, ...rest] = place.path,\n index = selector?.kind === \"index\" ? selector.value : undefined;\n if (\n !type ||\n rest.length ||\n (this.resolver.types.get(variable.type)?.kind === \"array\" ? !index : selector)\n )\n this.fail(node, \"PLC1007\", \"Update requires a static block instance binding.\");\n const definition = this.blocks.definitions.get(type.block)!;\n if (\n node.typeArguments?.length ||\n node.arguments.length !== 1 ||\n !ts.isObjectLiteralExpression(node.arguments[0]!)\n )\n this.fail(node, \"PLC2001\", \"Block update requires one complete named input record.\");\n const inputs: Record<string, Expression> = Object.create(null);\n const written = new Set<string>();\n for (const [position, property] of node.arguments[0].properties.entries()) {\n if (ts.isSpreadAssignment(property) && !position) {\n for (const [name, value] of Object.entries(\n this.spreadFields(property.expression, definition.inputs),\n )) {\n const parameter = definition.inputs.find((input) => input.name === name)!;\n inputs[name] = parameter.mode === \"inOut\" ? this.reference(value, parameter) : value;\n }\n continue;\n }\n if (\n !(ts.isPropertyAssignment(property) || ts.isShorthandPropertyAssignment(property)) ||\n !ts.isIdentifier(property.name)\n )\n this.fail(\n property,\n \"PLC2001\",\n \"Block inputs are named fields after at most one leading spread.\",\n );\n const name = property.name.text;\n const parameter = definition.inputs.find((input) => input.name === name);\n if (!parameter || written.has(parameter.name))\n this.fail(property, \"PLC2001\", \"Unknown or duplicate block input.\");\n written.add(parameter.name);\n const value = ts.isPropertyAssignment(property) ? property.initializer : property.name;\n delete inputs[parameter.name];\n inputs[parameter.name] = this.inputArgument(value, parameter);\n }\n if (definition.inputs.some((input) => !Object.hasOwn(inputs, input.name)))\n this.fail(node, \"PLC2001\", \"Block update must bind every input on each call.\");\n return {\n kind: \"blockUpdate\",\n instance: place.root,\n ...(index && { index }),\n inputs,\n span: span(node),\n };\n }\n\n private call(node: ts.CallExpression): {\n fn: PlcFunction;\n arguments: Expression[];\n instance?: string;\n index?: Expression;\n } {\n const name = calleeName(node.expression);\n if (!name) this.fail(node, \"PLC1001\", \"Call a statically resolved PLC helper or block method.\");\n const symbol = this.resolver.symbol(name);\n // Structural return types can give a receiver a transient property symbol.\n // Resolve its declaration back to the canonical instance method identity.\n const method =\n this.methods.get(symbol) ??\n symbol.declarations\n ?.filter(ts.isMethodDeclaration)\n .map((node) => this.methods.get(this.resolver.symbol(node.name)))\n .find((fn) => fn !== undefined);\n if (method) {\n if (!ts.isPropertyAccessExpression(node.expression) || node.typeArguments?.length)\n this.fail(node, \"PLC1007\", \"Methods require a static instance receiver.\");\n const receiver = node.expression.expression;\n let instance: string | undefined;\n let index: Expression | undefined;\n if (receiver.kind === ts.SyntaxKind.ThisKeyword) {\n if (method.owner?.block !== this.activeBlock?.block.id)\n this.fail(node, \"PLC1007\", \"Method receiver differs from the enclosing block.\");\n } else {\n const place = this.place(receiver);\n const variable = this.byId().get(place.root);\n const type = variable && instancedBlock(variable.type, this.resolver.types);\n const [selector, ...rest] = place.path;\n index = selector?.kind === \"index\" ? selector.value : undefined;\n if (\n (variable?.storage !== \"instance\" && variable?.mode !== \"inOut\") ||\n rest.length ||\n (this.resolver.types.get(variable.type)?.kind === \"array\" ? !index : selector) ||\n type?.block !== method.owner?.block\n )\n this.fail(node, \"PLC1007\", \"Methods require a matching static block instance.\");\n if (method.owner?.access !== \"public\" && method.owner?.block !== this.activeBlock?.block.id)\n this.fail(\n node,\n \"PLC1007\",\n \"Private and protected methods are only accessible within their block.\",\n );\n instance = place.root;\n }\n return {\n fn: method,\n arguments: this.callArguments(node, method),\n ...(instance && { instance }),\n ...(index && { index }),\n };\n }\n const declaration = this.functionDeclarations.get(symbol);\n if (!declaration)\n this.fail(node, \"PLC1001\", \"Calls require PLC TypeScript implementation source.\");\n const fn = declaration.typeParameters?.length\n ? this.instantiate(declaration, node.typeArguments ?? [], node)\n : this.functions.get(symbol);\n if (!fn || (!declaration.typeParameters?.length && node.typeArguments?.length))\n this.fail(node, \"PLC2001\", \"Type arguments require a generic helper.\");\n return { fn, arguments: this.callArguments(node, fn) };\n }\n\n private callArguments(node: ts.CallExpression, fn: PlcFunction): Expression[] {\n if (node.arguments.length !== fn.parameters.length)\n this.fail(node, \"PLC2001\", \"PLC argument count differs from its signature.\");\n return fn.parameters.map((parameter, index) =>\n this.inputArgument(node.arguments[index]!, parameter),\n );\n }\n\n private inputArgument(value: ts.Expression, parameter: Variable): Expression {\n if (parameter.mode !== \"inOut\") return this.expression(value, parameter.type);\n if (ts.isCallExpression(value) && this.sdkCall(value) === \"ref\") {\n if (value.arguments.length !== 1 || value.typeArguments?.length)\n this.fail(value, \"PLC3003\", \"ref takes one place.\");\n const target = this.target(value.arguments[0]!);\n if (target.type !== parameter.type)\n this.fail(value, \"PLC2001\", \"Borrowed place type must exactly match its InOut parameter.\");\n return { kind: \"borrow\", place: target.place, type: target.type, span: span(value) };\n }\n if (this.resolver.types.get(parameter.type)?.kind === \"block\") {\n const place = this.place(value);\n if (placeType(place, this.resolver.types, this.byId(), this.ranges).type !== parameter.type)\n this.fail(value, \"PLC2001\", \"Pass a block instance of the parameter's type.\");\n return { kind: \"borrow\", place, type: parameter.type, span: span(value) };\n }\n return this.reference(this.expression(value, parameter.type), parameter);\n }\n\n /**\n * An aggregate InOut argument borrows its place; a value with no writable address reaches\n * the callee through a compiler temporary.\n */\n private reference(argument: Expression, parameter: Variable): Expression {\n if (!aggregate(this.resolver.types.get(parameter.type)))\n throw new SemanticError(\n error(\n \"PLC3003\",\n \"Scalar InOut arguments require a direct ref(place) borrow.\",\n argument.span,\n ),\n );\n return argument.kind === \"load\" &&\n !this.loopCounters.has(argument.place.root) &&\n !placeType(argument.place, this.resolver.types, this.byId(), this.ranges, true).issue\n ? { kind: \"borrow\", place: argument.place, type: argument.type, span: argument.span }\n : this.implicitCopy(argument);\n }\n\n /**\n * The fields `{ ...base }` supplies: base is a record whose fields are all target fields of the\n * same type. A stored base is read field by field; `defaultValue<T>()` gives constants.\n */\n private spreadFields(\n node: ts.Expression,\n targets: readonly { name: string; type: string }[],\n ): Record<string, Expression> {\n let base = this.expression(node);\n const layout = this.resolver.types.get(base.type);\n if (\n layout?.kind !== \"record\" ||\n layout.fields.some(\n (field) => targets.find((target) => target.name === field.name)?.type !== field.type,\n )\n )\n this.fail(\n node,\n \"PLC2001\",\n \"A spread is a record whose fields are all fields of the target, with the same types.\",\n );\n // Static initializers run before any scan, so a stored base contributes its initial value.\n const initial =\n !this.activeFunction && base.kind === \"load\" && !base.place.path.length\n ? this.byId().get(base.place.root)?.initial\n : undefined;\n if (initial) base = { ...base, kind: \"constant\", value: initial };\n if (base.kind === \"load\") {\n const { place } = base;\n return Object.fromEntries(\n layout.fields.map((field) => [\n field.name,\n {\n kind: \"load\",\n type: field.type,\n place: { root: place.root, path: [...place.path, { kind: \"field\", name: field.name }] },\n span: base.span,\n },\n ]),\n );\n }\n if (base.kind !== \"constant\" || base.value.kind !== \"record\")\n this.fail(\n node,\n \"PLC1001\",\n \"Spread a record in storage or defaultValue<T>(); bind other values to a const first.\",\n );\n const { value } = base;\n return Object.fromEntries(\n layout.fields.map((field) => [\n field.name,\n { kind: \"constant\", type: field.type, value: value.fields[field.name]!, span: base.span },\n ]),\n );\n }\n\n private statements(nodes: readonly ts.Statement[], locals: Variable[]): Statement[] {\n return nodes.flatMap((node) => this.statement(node, locals));\n }\n\n private body(node: ts.Statement, locals: Variable[]): Statement[] {\n return ts.isBlock(node)\n ? this.statements(node.statements, locals)\n : this.statement(node, locals);\n }\n\n /** A record or array assigned into storage copies: fixed storage cannot repoint at its source. */\n private implicitCopy(value: Expression): Expression {\n if (instancedBlock(value.type, this.resolver.types))\n throw new SemanticError(\n error(\"PLC3003\", \"Block instances cannot be copied, aliased or returned.\", value.span),\n );\n return aggregate(this.resolver.types.get(value.type)) && value.kind === \"load\"\n ? { kind: \"copy\", type: value.type, operand: value, span: value.span }\n : value;\n }\n\n /** Remember a copied source, so a later write to it in this routine cannot silently diverge. */\n private recordCopySource(value: Expression): void {\n if (value.kind === \"load\" && aggregate(this.resolver.types.get(value.type)))\n this.copySources.push(value.place);\n }\n\n /** An alias re-reads its path at each use, so its indexes must keep their value for its scope. */\n private unchanging(value: Expression): boolean {\n if (value.kind === \"constant\") return true;\n if (value.kind === \"convert\") return this.unchanging(value.operand);\n if (value.kind === \"binary\") return this.unchanging(value.left) && this.unchanging(value.right);\n if (value.kind !== \"load\" || value.place.path.length) return false;\n const root = this.byId().get(value.place.root);\n return (\n this.loopCounters.has(value.place.root) ||\n Boolean(root && !root.mutable && [\"parameter\", \"local\", \"constant\"].includes(root.storage))\n );\n }\n\n private place(node: ts.Expression): Place {\n if (ts.isParenthesizedExpression(node)) return this.place(node.expression);\n if (this.activeBlock && ts.isPropertyAccessExpression(node)) {\n if (\n ts.isIdentifier(node.expression) &&\n this.resolver.symbol(node.expression) === this.activeBlock.inputSymbol\n ) {\n const variable = this.activeBlock.inputBindings.get(node.name.text);\n if (!variable) this.fail(node, \"PLC2001\", \"Unknown block input field.\");\n return { root: variable.id, path: [] };\n }\n if (\n ts.isPropertyAccessExpression(node.expression) &&\n node.expression.expression.kind === ts.SyntaxKind.ThisKeyword &&\n node.expression.name.text === \"out\"\n ) {\n const variable = this.activeBlock.block.outputs.find(\n (output) => output.name === node.name.text,\n );\n if (!variable) this.fail(node, \"PLC2001\", \"Unknown block output field.\");\n return { root: variable.id, path: [] };\n }\n }\n if (\n ts.isPropertyAccessExpression(node) &&\n this.activeBlock?.fieldBindings.has(this.resolver.symbol(node.name)) &&\n node.expression.kind !== ts.SyntaxKind.ThisKeyword\n )\n this.fail(node, \"PLC1007\", \"Private block state is accessible through this.field only.\");\n if (ts.isIdentifier(node)) {\n const alias = this.aliases.get(this.resolver.symbol(node));\n if (alias) return alias;\n }\n if (ts.isIdentifier(node) || ts.isPropertyAccessExpression(node)) {\n const variable = this.variables.get(\n this.resolver.symbol(ts.isIdentifier(node) ? node : node.name),\n );\n if (variable) return { root: variable.id, path: [] };\n }\n if (ts.isPropertyAccessExpression(node)) {\n const base = this.place(node.expression);\n return { root: base.root, path: [...base.path, { kind: \"field\", name: node.name.text }] };\n }\n if (ts.isElementAccessExpression(node) && node.argumentExpression) {\n const base = this.place(node.expression),\n value = this.expression(node.argumentExpression),\n array = this.resolver.types.get(\n placeType(base, this.resolver.types, this.byId(), this.ranges).type ?? \"\",\n );\n if (array?.kind === \"array\" && array.index && value.type !== array.index)\n this.fail(node, \"PLC2001\", \"An enum-keyed record is indexed only by its own enum.\");\n return { root: base.root, path: [...base.path, { kind: \"index\", value }] };\n }\n this.fail(node, \"PLC1001\", \"Access requires statically allocated PLC storage.\");\n }\n\n private target(node: ts.Expression): { place: Place; type: string } {\n if (ts.isIdentifier(node)) {\n const binding = this.checker.getSymbolAtLocation(node);\n if (binding && binding.flags & ts.SymbolFlags.Alias)\n this.fail(node, \"PLC3002\", \"Imported scalar bindings are read-only.\");\n }\n const place = this.place(node),\n type = placeType(place, this.resolver.types, this.byId(), this.ranges, true);\n if (type.issue || !type.type || this.loopCounters.has(place.root))\n this.fail(node, \"PLC3002\", type.issue ?? \"This PLC storage is read-only.\");\n const overlaps = (source: Place) =>\n source.root === place.root &&\n source.path.every((segment, index) => {\n const other = place.path[index];\n return (\n !other ||\n segment.kind !== \"field\" ||\n other.kind !== \"field\" ||\n segment.name === other.name\n );\n });\n if (this.copySources.some(overlaps))\n this.fail(\n node,\n \"PLC3003\",\n \"This value was assigned into other storage, which holds a copy, so this write will not reach it. Assign it afterwards, or use copy(value) if separate values are intended.\",\n );\n return { place, type: type.type };\n }\n\n private statement(node: ts.Statement, locals: Variable[]): Statement[] {\n const origin = { span: span(node) };\n if (ts.isBlock(node)) return this.statements(node.statements, locals);\n if (ts.isEmptyStatement(node)) return [];\n if (ts.isIfStatement(node)) {\n const condition = this.expression(node.expression, \"BOOL\");\n const original = new Map(this.ranges);\n const branch = (body: ts.Statement | undefined, truth: boolean) => {\n this.ranges.clear();\n for (const [root, range] of narrowRanges(\n condition,\n truth,\n this.resolver.types,\n this.byId(),\n original,\n ))\n this.ranges.set(root, range);\n try {\n return body ? this.body(body, locals) : [];\n } finally {\n this.ranges.clear();\n for (const [root, range] of original) this.ranges.set(root, range);\n }\n };\n return [\n {\n ...origin,\n kind: \"if\",\n condition,\n then: branch(node.thenStatement, true),\n else: branch(node.elseStatement, false),\n },\n ];\n }\n if (ts.isReturnStatement(node)) {\n const result = this.activeFunction?.result;\n if (!result && node.expression)\n this.fail(node, \"PLC2001\", \"Void helpers and program entries cannot return a value.\");\n if (result && !node.expression)\n this.fail(node, \"PLC2001\", \"Typed helpers must return their declared PLC result.\");\n const value =\n node.expression && result\n ? this.implicitCopy(this.expression(node.expression, result))\n : undefined;\n return [{ ...origin, kind: \"return\", ...(value && { value }) }];\n }\n if (ts.isBreakStatement(node) || ts.isContinueStatement(node)) {\n if (ts.isBreakStatement(node) && this.breakTargets.at(-1) === \"switch\")\n this.fail(\n node,\n \"PLC1001\",\n \"Switch break must terminate its case; nested conditional switch breaks are unsupported.\",\n );\n if (node.label || !this.loopCounters.size)\n this.fail(\n node,\n \"PLC1001\",\n \"Loop control requires an enclosing bounded loop and cannot use a label.\",\n );\n return [{ ...origin, kind: ts.isBreakStatement(node) ? \"break\" : \"continue\" }];\n }\n if (ts.isVariableStatement(node)) return this.localDeclarations(node, locals);\n if (ts.isForStatement(node)) return this.loop(node, locals);\n if (ts.isForOfStatement(node)) return this.forOf(node, locals);\n if (ts.isSwitchStatement(node)) return this.switchStatement(node, locals);\n if (ts.isExpressionStatement(node)) {\n const expression = node.expression;\n if (ts.isCallExpression(expression)) {\n const update = this.update(expression);\n if (update) return [update];\n const call = this.call(expression);\n return [\n {\n ...origin,\n kind: \"invoke\",\n function: call.fn.id,\n arguments: call.arguments,\n ...(call.instance && { instance: call.instance }),\n ...(call.index && { index: call.index }),\n },\n ];\n }\n if (ts.isBinaryExpression(expression)) {\n const variable = this.target(expression.left);\n if (expression.operatorToken.kind !== ts.SyntaxKind.EqualsToken)\n this.fail(expression, \"PLC2001\", \"Use explicit assignment and arithmetic policies.\");\n const value = this.expression(expression.right, variable.type);\n this.recordCopySource(value);\n return [\n {\n ...origin,\n kind: \"assign\",\n destination: variable.place,\n value: this.implicitCopy(value),\n },\n ];\n }\n }\n this.fail(node, \"PLC1001\", `${ts.SyntaxKind[node.kind]} is not supported in PLC scan code.`);\n }\n\n private switchStatement(node: ts.SwitchStatement, locals: Variable[]): Statement[] {\n const origin = { span: span(node) };\n this.breakTargets.push(\"switch\");\n try {\n const value = this.expression(node.expression);\n const cases: { values: Constant[]; body: Statement[] }[] = [];\n let fallback: Statement[] = [];\n let pending: Constant[] = [],\n pendingDefault = false;\n for (const clause of node.caseBlock.clauses) {\n if (ts.isDefaultClause(clause)) pendingDefault = true;\n else {\n const constant = this.constant(this.expression(clause.expression, value.type));\n if (!constant)\n this.fail(clause, \"PLC2001\", \"Case values must be compile-time constants.\");\n pending.push(constant);\n }\n if (!clause.statements.length) continue;\n let statements = [...clause.statements];\n const last = statements.at(-1);\n if (last && ts.isBreakStatement(last) && !last.label) statements = statements.slice(0, -1);\n else if (statements.length && !(last && ts.isReturnStatement(last)))\n this.fail(\n clause,\n \"PLC1001\",\n \"Switch cases must end with break or return; fallthrough is prohibited.\",\n );\n const body = this.statements(statements, locals);\n if (pending.length) cases.push({ values: pending, body });\n if (pendingDefault) fallback = body;\n pending = [];\n pendingDefault = false;\n }\n if (pending.length) cases.push({ values: pending, body: [] });\n return [{ ...origin, kind: \"switch\", value, cases, fallback }];\n } finally {\n this.breakTargets.pop();\n }\n }\n\n private localDeclarations(node: ts.VariableStatement, locals: Variable[]): Statement[] {\n const origin = { span: span(node) };\n if (!(node.declarationList.flags & (ts.NodeFlags.Let | ts.NodeFlags.Const)))\n this.fail(node, \"PLC1001\", \"Use let or const for invocation locals.\");\n return node.declarationList.declarations.flatMap((declaration) => {\n if (!ts.isIdentifier(declaration.name))\n this.fail(declaration, \"PLC1001\", \"Destructuring is not supported.\");\n if (!declaration.initializer)\n this.fail(declaration, \"PLC3001\", \"Initialize invocation-local PLC variables explicitly.\");\n const annotation = declaration.type ? this.type(declaration.type) : undefined;\n if (annotation && !this.resolver.isValue(annotation))\n this.fail(\n declaration,\n \"PLC2001\",\n \"Invocation locals require value types, not instances or borrow schemas.\",\n );\n if (annotation?.io)\n this.fail(declaration, \"PLC4002\", \"Logical I/O cannot be invocation-local.\");\n if (\n !annotation &&\n !(node.declarationList.flags & ts.NodeFlags.Const) &&\n this.numericLiteral(declaration.initializer) === undefined &&\n ![ts.SyntaxKind.TrueKeyword, ts.SyntaxKind.FalseKeyword].includes(\n declaration.initializer.kind,\n )\n )\n this.fail(declaration, \"PLC2001\", \"Annotate mutable numeric storage explicitly.\");\n const initial = this.expression(declaration.initializer, annotation?.type);\n if (\n node.declarationList.flags & ts.NodeFlags.Const &&\n initial.kind === \"load\" &&\n aggregate(this.resolver.types.get(initial.type))\n ) {\n for (const segment of initial.place.path)\n if (segment.kind === \"index\" && !this.unchanging(segment.value))\n this.fail(\n declaration,\n \"PLC3003\",\n \"An alias index must keep its value while the alias is in scope; use copy(value) for a snapshot.\",\n );\n this.aliases.set(this.resolver.symbol(declaration.name), initial.place);\n return [];\n }\n this.recordCopySource(initial);\n const value = this.implicitCopy(initial);\n const variable: Variable = {\n id: this.storageId(declaration, declaration.name.text),\n name: declaration.name.text,\n type: value.type,\n storage: \"local\",\n mutable: !(node.declarationList.flags & ts.NodeFlags.Const),\n retain: false,\n span: span(declaration),\n };\n this.variables.set(this.resolver.symbol(declaration.name), variable);\n locals.push(variable);\n // A const is assigned once, so its initializer's range holds wherever it is read.\n const bound =\n !variable.mutable &&\n valueRange(value, this.resolver.types, this.byId(), this.ranges, this.instances);\n if (bound) this.ranges.set(variable.id, bound);\n return { ...origin, kind: \"assign\", destination: { root: variable.id, path: [] }, value };\n });\n }\n\n private loop(node: ts.ForStatement, locals: Variable[]): Statement[] {\n let counter: Variable;\n let initializer: ts.Expression;\n let existing = false;\n if (node.initializer && ts.isVariableDeclarationList(node.initializer)) {\n if (\n !(node.initializer.flags & ts.NodeFlags.Let) ||\n node.initializer.declarations.length !== 1\n )\n this.fail(\n node,\n \"PLC1001\",\n \"A bounded for loop requires one let counter or an existing counter assignment.\",\n );\n const declaration = node.initializer.declarations[0]!;\n if (!ts.isIdentifier(declaration.name) || !declaration.initializer)\n this.fail(node, \"PLC2001\", \"Initialize the integer loop counter.\");\n const annotation = declaration.type ? this.type(declaration.type) : { type: \"DINT\" };\n if (annotation.io)\n this.fail(declaration, \"PLC4002\", \"Loop counters cannot use I/O wrappers.\");\n counter = {\n id: this.storageId(declaration, declaration.name.text),\n name: declaration.name.text,\n type: annotation.type,\n storage: \"local\",\n mutable: true,\n retain: false,\n span: span(declaration),\n };\n this.variables.set(this.resolver.symbol(declaration.name), counter);\n locals.push(counter);\n initializer = declaration.initializer;\n } else if (\n node.initializer &&\n ts.isBinaryExpression(node.initializer) &&\n node.initializer.operatorToken.kind === ts.SyntaxKind.EqualsToken\n ) {\n const target = this.target(node.initializer.left);\n counter = this.byId().get(target.place.root)!;\n if (target.place.path.length || ![\"local\", \"module\", \"field\"].includes(counter.storage))\n this.fail(\n node.initializer,\n \"PLC1001\",\n \"An existing loop counter must be a local, module variable or private block field.\",\n );\n initializer = node.initializer.right;\n existing = true;\n } else\n this.fail(\n node,\n \"PLC1001\",\n \"Initialize one let counter or assign an existing counter in the for header.\",\n );\n const type = counter.type,\n plcType = this.resolver.types.get(type);\n if (plcType?.kind !== \"integer\")\n this.fail(node.initializer!, \"PLC2001\", \"Loop counters require integer types.\");\n const startExpression = this.expression(initializer, type);\n const start = this.constant(startExpression);\n const isCounter = (expression: ts.Expression): boolean => {\n const place = this.place(expression);\n return place.root === counter.id && place.path.length === 0;\n };\n const condition = node.condition;\n if (!condition || !ts.isBinaryExpression(condition) || !isCounter(condition.left))\n this.fail(node, \"PLC1001\", \"Loop condition must compare its counter to a bounded integer.\");\n const boundExpression = this.expression(condition.right, type);\n const bound = this.constant(boundExpression);\n let step: bigint;\n const increment = node.incrementor;\n if (\n increment &&\n (ts.isPostfixUnaryExpression(increment) || ts.isPrefixUnaryExpression(increment)) &&\n isCounter(increment.operand) &&\n [ts.SyntaxKind.PlusPlusToken, ts.SyntaxKind.MinusMinusToken].includes(increment.operator)\n )\n step = increment.operator === ts.SyntaxKind.PlusPlusToken ? 1n : -1n;\n else if (\n increment &&\n ts.isBinaryExpression(increment) &&\n isCounter(increment.left) &&\n [ts.SyntaxKind.PlusEqualsToken, ts.SyntaxKind.MinusEqualsToken].includes(\n increment.operatorToken.kind,\n )\n ) {\n const amount = this.constant(this.expression(increment.right, type));\n if (amount?.kind !== \"integer\" || BigInt(amount.value) <= 0n)\n this.fail(increment, \"PLC2001\", \"Loop step must be a positive constant integer.\");\n step =\n BigInt(amount.value) *\n (increment.operatorToken.kind === ts.SyntaxKind.PlusEqualsToken ? 1n : -1n);\n } else this.fail(node, \"PLC1001\", \"Use i++, i--, i += step or i -= step in the for header.\");\n const operator = condition.operatorToken.kind,\n ascending = step > 0n;\n if (\n !(\n ascending\n ? [ts.SyntaxKind.LessThanToken, ts.SyntaxKind.LessThanEqualsToken]\n : [ts.SyntaxKind.GreaterThanToken, ts.SyntaxKind.GreaterThanEqualsToken]\n ).includes(operator)\n )\n this.fail(condition, \"PLC2001\", \"Loop direction and comparison must agree.\");\n const exclusive =\n operator === ts.SyntaxKind.LessThanToken || operator === ts.SyntaxKind.GreaterThanToken;\n if (start?.kind !== \"integer\" || bound?.kind !== \"integer\") {\n const startRange = interval(startExpression, this.resolver.types, this.byId(), this.ranges);\n const limitRange = interval(boundExpression, this.resolver.types, this.byId(), this.ranges);\n if (!startRange || !limitRange)\n this.fail(node, \"PLC2001\", \"Loop bounds require finite integer ranges.\");\n const proof = loopBounds(startRange, limitRange, step, exclusive);\n if (proof.count > 1_000_000n)\n this.fail(node, \"PLC2001\", \"A scan loop cannot exceed 1,000,000 iterations.\");\n if (existing && proof.count > 0n) {\n const terminal = (step > 0n ? proof.range[1] : proof.range[0]) + step;\n const [minimum, maximum] = integerRange(plcType);\n if (terminal < minimum || terminal > maximum)\n this.fail(\n node,\n \"PLC2001\",\n \"The existing loop counter would overflow on its final increment.\",\n );\n }\n this.loopCounters.add(counter.id);\n this.ranges.set(counter.id, proof.range);\n this.breakTargets.push(\"loop\");\n try {\n return [\n {\n span: span(node),\n kind: \"for\",\n counter: counter.id,\n ...(existing && { counterScope: \"existing\" as const }),\n start: startExpression,\n limit: boundExpression,\n step: String(step),\n ...(exclusive && { exclusive: true as const }),\n maxIterations: Number(proof.count),\n body: this.body(node.statement, locals),\n },\n ];\n } finally {\n this.breakTargets.pop();\n this.loopCounters.delete(counter.id);\n this.ranges.delete(counter.id);\n }\n }\n const finish = BigInt(bound.value) + (exclusive ? (ascending ? -1n : 1n) : 0n),\n first = BigInt(start.value);\n const count = loopIterations(first, finish, step);\n if (count > 1_000_000n)\n this.fail(node, \"PLC2001\", \"A scan loop cannot exceed 1,000,000 iterations.\");\n if (existing) {\n const terminal = first + count * step,\n [minimum, maximum] = integerRange(plcType);\n if (terminal < minimum || terminal > maximum)\n this.fail(\n node,\n \"PLC2001\",\n \"The existing loop counter would overflow on its final increment.\",\n );\n }\n this.loopCounters.add(counter.id);\n this.ranges.set(counter.id, first <= finish ? [first, finish] : [finish, first]);\n let body: Statement[];\n this.breakTargets.push(\"loop\");\n try {\n body = this.body(node.statement, locals);\n } finally {\n this.breakTargets.pop();\n this.loopCounters.delete(counter.id);\n this.ranges.delete(counter.id);\n }\n if (!count)\n return existing\n ? [\n {\n kind: \"assign\",\n destination: { root: counter.id, path: [] },\n value: { kind: \"constant\", type, value: start, span: span(initializer) },\n span: span(node.initializer!),\n },\n ]\n : [];\n const limit: Expression = {\n kind: \"constant\",\n type,\n value: { kind: \"integer\", value: String(finish) },\n span: span(condition.right),\n };\n return [\n {\n span: span(node),\n kind: \"for\",\n counter: counter.id,\n ...(existing && { counterScope: \"existing\" as const }),\n start: { kind: \"constant\", type, value: start, span: span(initializer) },\n limit,\n step: String(step),\n maxIterations: Number(count),\n body,\n },\n ];\n }\n\n /**\n * `for (const element of array)` is a bounded FOR over the array's declared bounds whose\n * element binding aliases `array[counter]`. `array.entries()` also binds the counter. An\n * enum-keyed Record iterates with `Object.values(record)`, or SDK `entries(record)` for its key.\n */\n private forOf(node: ts.ForOfStatement, locals: Variable[]): Statement[] {\n const list = node.initializer;\n if (\n node.awaitModifier ||\n !ts.isVariableDeclarationList(list) ||\n !(list.flags & ts.NodeFlags.Const) ||\n list.declarations.length !== 1\n )\n this.fail(node, \"PLC1001\", \"for…of binds one const element of a PLC array.\");\n let iterated = node.expression,\n form: \"elements\" | \"entries\" | \"recordValues\" | \"recordEntries\" = \"elements\";\n if (ts.isCallExpression(iterated)) {\n const callee = iterated.expression;\n if (\n ts.isPropertyAccessExpression(callee) &&\n callee.name.text === \"entries\" &&\n !iterated.arguments.length\n ) {\n form = \"entries\";\n iterated = callee.expression;\n } else if (iterated.arguments.length === 1) {\n if (this.sdkCall(iterated) === \"entries\") form = \"recordEntries\";\n else if (\n ts.isPropertyAccessExpression(callee) &&\n callee.name.text === \"values\" &&\n ts.isIdentifier(callee.expression) &&\n this.resolver.standardLibrary(this.resolver.symbol(callee.expression))\n )\n form = \"recordValues\";\n if (form !== \"elements\") iterated = iterated.arguments[0]!;\n }\n }\n const binding = list.declarations[0]!.name,\n keyed = form === \"entries\" || form === \"recordEntries\";\n const names = ts.isArrayBindingPattern(binding)\n ? binding.elements.map((element) =>\n ts.isBindingElement(element) &&\n !element.dotDotDotToken &&\n !element.initializer &&\n ts.isIdentifier(element.name)\n ? element.name\n : undefined,\n )\n : [undefined, ts.isIdentifier(binding) ? binding : undefined];\n const [indexName, elementName] = names;\n if (names.length !== 2 || !elementName || Boolean(indexName) !== keyed)\n this.fail(\n binding,\n \"PLC1001\",\n \"Bind one element, or destructure [index, element] from array.entries() or entries(record).\",\n );\n const place = this.place(iterated),\n array = this.resolver.types.get(\n placeType(place, this.resolver.types, this.byId(), this.ranges).type ?? \"\",\n );\n if (array?.kind !== \"array\" || Boolean(array.index) !== form.startsWith(\"record\"))\n this.fail(\n node.expression,\n \"PLC2001\",\n \"for…of iterates a FixedArray, array.entries(), or an enum-keyed Record through Object.values(record) or entries(record).\",\n );\n for (const segment of place.path)\n if (segment.kind === \"index\" && !this.unchanging(segment.value))\n this.fail(node.expression, \"PLC3003\", \"An iterated array's index must keep its value.\");\n\n const origin = { span: span(node) };\n const local = (declaration: ts.Node, name: string, type: string): Variable => {\n const variable: Variable = {\n id: this.storageId(declaration, name),\n name,\n type,\n storage: \"local\",\n mutable: true,\n retain: false,\n span: span(declaration),\n };\n locals.push(variable);\n return variable;\n };\n const constant = (type: string, value: string): Expression => ({\n ...origin,\n kind: \"constant\",\n type,\n value: { kind: \"integer\", value },\n });\n const counter = local(node, form === \"entries\" && indexName ? indexName.text : \"index\", \"DINT\"),\n index: Expression = {\n ...origin,\n kind: \"load\",\n type: \"DINT\",\n place: { root: counter.id, path: [] },\n };\n const before: Statement[] = [],\n prefix: Statement[] = [];\n const readonly = [counter.id];\n const enumeration = array.index ? this.resolver.types.get(array.index) : undefined;\n if (indexName && enumeration?.kind === \"enum\") {\n // The enum key follows the counter: a CASE at the top of each iteration selects its member.\n const key = local(indexName, indexName.text, enumeration.id);\n const assign = (value: string): Statement => ({\n ...origin,\n kind: \"assign\",\n destination: { root: key.id, path: [] },\n value: constant(key.type, value),\n });\n before.push(assign(String(array.lowerBound)));\n prefix.push({\n ...origin,\n kind: \"switch\",\n value: index,\n cases: enumeration.members.map((member) => ({\n values: [{ kind: \"integer\", value: member.value }],\n body: [assign(member.value)],\n })),\n fallback: [],\n });\n readonly.push(key.id);\n this.variables.set(this.resolver.symbol(indexName), key);\n } else if (indexName) this.variables.set(this.resolver.symbol(indexName), counter);\n this.aliases.set(this.resolver.symbol(elementName), {\n root: place.root,\n path: [...place.path, { kind: \"index\", value: index }],\n });\n\n const upper = array.lowerBound + array.length - 1;\n for (const id of readonly) this.loopCounters.add(id);\n this.ranges.set(counter.id, [BigInt(array.lowerBound), BigInt(upper)]);\n this.breakTargets.push(\"loop\");\n try {\n return [\n ...before,\n {\n ...origin,\n kind: \"for\",\n counter: counter.id,\n start: constant(\"DINT\", String(array.lowerBound)),\n limit: constant(\"DINT\", String(upper)),\n step: \"1\",\n maxIterations: array.length,\n body: [...prefix, ...this.body(node.statement, locals)],\n },\n ];\n } finally {\n this.breakTargets.pop();\n for (const id of readonly) this.loopCounters.delete(id);\n this.ranges.delete(counter.id);\n }\n }\n}\n",
|
|
6
|
+
"import { runtimeSources } from \"./module-graph.ts\";\nimport ts from \"typescript\";\nimport { createRequire } from \"node:module\";\nimport { mkdirSync, realpathSync, writeFileSync } from \"node:fs\";\nimport { dirname, join, relative, resolve } from \"node:path\";\nimport {\n instancedBlock,\n error,\n hasErrors,\n parseInteger,\n fold,\n canAssign,\n aggregate,\n expressionIssue,\n defaultValue,\n placeType,\n durationLiteral,\n calendarLiteral,\n loopIterations,\n loopBounds,\n narrowRanges,\n interval,\n valueRange,\n integerRange,\n comparisonOperators,\n type BinaryOperator,\n type IntegerInterval,\n type Constant,\n type Diagnostic,\n type Expression,\n type PlcFunction,\n type MethodOwner,\n type PlcModule,\n type PlcProgram,\n type SourceSpan,\n type Statement,\n type Variable,\n type Place,\n} from \"@tsplc/compiler/ir\";\n\nimport { lowerExposure } from \"./exposure.ts\";\nimport { lowerServices, serviceRecords, type ServiceOptions } from \"./services.ts\";\nimport { lowerPromises } from \"./promises.ts\";\nimport { lowerAsync } from \"./async.ts\";\nimport { lowerConstFunctions } from \"./const-functions.ts\";\nimport { lowerElaboration } from \"./elaborate/index.ts\";\nimport { lowerEnvironment } from \"./configuration.ts\";\nimport { BlockResolver, storageInitializer, type BlockSource } from \"./blocks.ts\";\nimport { numericLiteralType } from \"./types.ts\";\nimport {\n TypeResolver,\n calleeName,\n type Fail,\n type TypeEnvironment,\n type ResolvedType,\n} from \"./types.ts\";\n\nexport interface FrontendOptions {\n sourceScope?: \"project\" | \"entry\";\n services?: ServiceOptions;\n tsconfig: string;\n programs: Readonly<Record<string, { module: string; export: string }>>;\n}\n\nexport interface FrontendResult {\n module?: PlcModule;\n diagnostics: readonly Diagnostic[];\n}\n\n// TIME constructor scales in nanoseconds, and calendar constructor result types.\nconst durationScales: Readonly<Record<string, bigint>> = {\n ms: 1_000_000n,\n seconds: 1_000_000_000n,\n minutes: 60_000_000_000n,\n};\nconst calendarTypes: Readonly<Record<string, string>> = {\n date: \"DATE\",\n timeOfDay: \"TIME_OF_DAY\",\n dateAndTime: \"DATE_AND_TIME\",\n};\nconst conversions: Readonly<Record<string, \"exact\" | \"wrap\" | \"saturate\">> = {\n exact: \"exact\",\n wrap: \"wrap\",\n saturate: \"saturate\",\n};\nconst arithmetic: Readonly<\n Record<\n string,\n { operator: \"add\" | \"subtract\" | \"multiply\" | \"divide\"; policy?: \"wrap\" | \"saturate\" }\n >\n> = {\n div: { operator: \"divide\" },\n wrapAdd: { operator: \"add\", policy: \"wrap\" },\n wrapSubtract: { operator: \"subtract\", policy: \"wrap\" },\n wrapMultiply: { operator: \"multiply\", policy: \"wrap\" },\n saturatingAdd: { operator: \"add\", policy: \"saturate\" },\n saturatingSubtract: { operator: \"subtract\", policy: \"saturate\" },\n saturatingMultiply: { operator: \"multiply\", policy: \"saturate\" },\n};\nconst operators = new Map<ts.SyntaxKind, BinaryOperator>([\n [ts.SyntaxKind.AmpersandAmpersandToken, \"and\"],\n [ts.SyntaxKind.BarBarToken, \"or\"],\n [ts.SyntaxKind.EqualsEqualsEqualsToken, \"equal\"],\n [ts.SyntaxKind.ExclamationEqualsEqualsToken, \"notEqual\"],\n [ts.SyntaxKind.LessThanToken, \"less\"],\n [ts.SyntaxKind.LessThanEqualsToken, \"lessEqual\"],\n [ts.SyntaxKind.GreaterThanToken, \"greater\"],\n [ts.SyntaxKind.GreaterThanEqualsToken, \"greaterEqual\"],\n [ts.SyntaxKind.PlusToken, \"add\"],\n [ts.SyntaxKind.MinusToken, \"subtract\"],\n [ts.SyntaxKind.AsteriskToken, \"multiply\"],\n [ts.SyntaxKind.SlashToken, \"divide\"],\n [ts.SyntaxKind.PercentToken, \"remainder\"],\n [ts.SyntaxKind.AmpersandToken, \"bitAnd\"],\n [ts.SyntaxKind.BarToken, \"bitOr\"],\n [ts.SyntaxKind.CaretToken, \"bitXor\"],\n [ts.SyntaxKind.LessThanLessThanToken, \"shiftLeft\"],\n [ts.SyntaxKind.GreaterThanGreaterThanToken, \"shiftRight\"],\n]);\n\nclass SemanticError extends Error {\n constructor(readonly diagnostic: Diagnostic) {\n super(diagnostic.message);\n }\n}\n\nfunction sourceSpan(source: ts.SourceFile, start: number, end: number): SourceSpan {\n const position = source.getLineAndCharacterOfPosition(start);\n return {\n file: source.fileName,\n start,\n end,\n line: position.line + 1,\n column: position.character + 1,\n };\n}\n\nfunction span(node: ts.Node): SourceSpan {\n const source = node.getSourceFile();\n return sourceSpan(source, node.getStart(source), node.getEnd());\n}\n\nfunction tsDiagnostic(diagnostic: ts.Diagnostic): Diagnostic {\n const result: Diagnostic = {\n origin: \"typescript\",\n code: `TS${diagnostic.code}`,\n severity: diagnostic.category === ts.DiagnosticCategory.Error ? \"error\" : \"warning\",\n message: ts.flattenDiagnosticMessageText(diagnostic.messageText, \"\\n\"),\n };\n if (diagnostic.file && diagnostic.start !== undefined)\n result.span = sourceSpan(\n diagnostic.file,\n diagnostic.start,\n diagnostic.start + (diagnostic.length ?? 1),\n );\n return result;\n}\n\nconst suppressionDiagnostics = (source: ts.SourceFile): Diagnostic[] => {\n const diagnostics: Diagnostic[] = [];\n const scanner = ts.createScanner(\n ts.ScriptTarget.Latest,\n false,\n ts.LanguageVariant.Standard,\n source.text,\n );\n for (let token = scanner.scan(); token !== ts.SyntaxKind.EndOfFileToken; token = scanner.scan()) {\n if (\n token !== ts.SyntaxKind.SingleLineCommentTrivia &&\n token !== ts.SyntaxKind.MultiLineCommentTrivia\n )\n continue;\n const comment = scanner.getTokenText();\n const match = /(?:^|\\n)\\s*(?:\\/\\/+|\\/\\*+|\\*)\\s*(@ts-(?:nocheck|ignore|expect-error))\\b/.exec(\n comment,\n );\n if (!match) continue;\n const start = scanner.getTokenPos() + comment.indexOf(match[1] ?? \"@ts-\");\n diagnostics.push(\n error(\n \"PLC1009\",\n \"TypeScript diagnostic suppression is not allowed in PLC source.\",\n sourceSpan(source, start, start + (match[1]?.length ?? 4)),\n ),\n );\n }\n return diagnostics;\n};\n\n/**\n * Type checks a subset of a tsconfig's files without emitting. A project-reference\n * tsconfig's composite and declaration settings would demand every file be listed\n * (TS6307) or conflict with noEmit, so these replace them.\n */\nexport const typeCheckOnly: ts.CompilerOptions = {\n composite: false,\n declaration: false,\n declarationMap: false,\n emitDeclarationOnly: false,\n incremental: false,\n noEmit: true,\n tsBuildInfoFile: undefined,\n};\n\nconst sdkFor = (project: string, options: ts.CompilerOptions): string => {\n const name = \"@tsplc/compiler/globals\";\n const resolveSdk = (from: string) => createRequire(from).resolve(name).replaceAll(\"\\\\\", \"/\");\n try {\n const installed = resolveSdk(project);\n const resolved = ts.resolveModuleName(name, project, options, ts.sys).resolvedModule;\n // TypeScript may preserve a workspace symlink. A path alias may only stand in\n // for the SDK if it resolves to the same installed declaration.\n if (resolved && realpathSync(resolved.resolvedFileName) === realpathSync(installed))\n return resolved.resolvedFileName;\n return installed;\n } catch (cause) {\n if (!(cause instanceof Error) || !(\"code\" in cause) || cause.code !== \"MODULE_NOT_FOUND\")\n throw cause;\n return resolveSdk(import.meta.url);\n }\n};\n\nexport function analyze(options: FrontendOptions): FrontendResult {\n const filename = resolve(options.tsconfig);\n const config = ts.readConfigFile(filename, ts.sys.readFile);\n if (config.error) return { diagnostics: [tsDiagnostic(config.error)] };\n const parsed = ts.parseJsonConfigFileContent(\n config.config,\n ts.sys,\n dirname(filename),\n undefined,\n filename,\n );\n if (parsed.errors.length) return { diagnostics: parsed.errors.map(tsDiagnostic) };\n const programFiles = Object.values(options.programs).map((entry) =>\n resolve(dirname(filename), entry.module),\n );\n // Full-stack builds follow entry imports; standalone projects retain explicit tsconfig globals.\n const scope = options.sourceScope ?? (options.services ? \"entry\" : \"project\");\n // The project's own ambient declarations; a shared base tsconfig's typings are for the host runtime.\n const ambient = parsed.fileNames.filter(\n (file) => /\\.d\\.[cm]?ts$/.test(file) && file.startsWith(`${dirname(filename)}/`),\n );\n const projectFiles = scope === \"project\" ? parsed.fileNames : ambient;\n const compilerOptions: ts.CompilerOptions = {\n ...parsed.options,\n ...typeCheckOnly,\n // Lowered sources import their runtime helpers by .ts path and drop the imports they replace.\n allowImportingTsExtensions: true,\n noUnusedLocals: false,\n noUnusedParameters: false,\n strict: true,\n noImplicitAny: true,\n strictNullChecks: true,\n noCheck: false,\n allowJs: false,\n skipLibCheck: false,\n types: [],\n lib: [\"lib.es2022.d.ts\"],\n module: ts.ModuleKind.ESNext,\n moduleResolution: ts.ModuleResolutionKind.Bundler,\n };\n // Nothing is emitted, and a service client's router type imports modules outside these (TS6059).\n delete compilerOptions.rootDir;\n delete compilerOptions.outDir;\n const sdk = sdkFor(filename, compilerOptions);\n const rootNames = [...new Set([...projectFiles, ...programFiles, sdk])];\n let program = ts.createProgram(rootNames, compilerOptions);\n const plcFiles = (program: ts.Program) => {\n const files = new Set(runtimeSources(program));\n for (const source of program.getSourceFiles())\n if (source.fileName.startsWith(dirname(sdk) + \"/\")) files.add(source);\n return files;\n };\n // Only PLC files: a type-only import of the server router brings the server's sources along.\n const sourceDiagnostics = (program: ts.Program) =>\n [\n ...program.getConfigFileParsingDiagnostics(),\n ...program.getOptionsDiagnostics(),\n ...program.getGlobalDiagnostics(),\n ...[...plcFiles(program)].flatMap((file) => [\n ...program.getSyntacticDiagnostics(file),\n ...program.getSemanticDiagnostics(file),\n ]),\n ].map(tsDiagnostic);\n const diagnostics = sourceDiagnostics(program);\n if (\n program.getSyntacticDiagnostics().some((item) => !item.file || plcFiles(program).has(item.file))\n )\n return { diagnostics };\n const virtualSources = new Map<string, string>();\n // Lowering also adds modules, such as the service client, that exist only here.\n let host: ts.CompilerHost = ts.createCompilerHost(compilerOptions);\n const apply = (lowering: {\n sources: Map<string, string>;\n diagnostics: Diagnostic[];\n }): boolean => {\n diagnostics.push(...lowering.diagnostics);\n for (const source of runtimeSources(program))\n if (lowering.sources.has(source.fileName))\n diagnostics.push(...suppressionDiagnostics(source));\n if (lowering.diagnostics.length || (lowering.sources.size && hasErrors(diagnostics)))\n return false;\n if (lowering.sources.size) {\n for (const [path, text] of lowering.sources) virtualSources.set(path, text);\n // TSPLC_LOWERED=<directory> writes every generated or rewritten module, as the next step reads it.\n const dump = process.env.TSPLC_LOWERED;\n if (dump)\n for (const [path, text] of lowering.sources) {\n const target = join(dump, relative(dirname(filename), path));\n mkdirSync(dirname(target), { recursive: true });\n writeFileSync(target, text);\n }\n host = ts.createCompilerHost(compilerOptions);\n const read = host.readFile,\n exists = host.fileExists;\n const directoryExists = host.directoryExists?.bind(host);\n host.readFile = (path) => virtualSources.get(path) ?? read(path);\n host.fileExists = (path) => virtualSources.has(path) || exists(path);\n // Generated modules can live in a directory that only exists in memory.\n host.directoryExists = (path) =>\n [...virtualSources.keys()].some((file) => file.startsWith(`${path.replace(/\\/$/, \"\")}/`)) ||\n (directoryExists?.(path) ?? true);\n program = ts.createProgram(rootNames, compilerOptions, host);\n diagnostics.push(...sourceDiagnostics(program));\n }\n return true;\n };\n if (!apply(lowerElaboration(program, sdk, options.programs, dirname(filename))))\n return { diagnostics };\n const services = lowerServices(program, sdk, options.services);\n if (!apply(services)) return { diagnostics };\n const exposure = lowerExposure(program, sdk);\n if (!apply(exposure)) return { diagnostics };\n if (!apply(lowerEnvironment(program, sdk))) return { diagnostics };\n if (!apply(lowerConstFunctions(program))) return { diagnostics };\n const promises = lowerPromises(program, sdk);\n if (!apply(promises)) return { diagnostics };\n const lowering = lowerAsync(program, sdk);\n for (const [key, value] of promises.runtimeBlocks) lowering.blocks.set(key, value);\n if (!apply(lowering)) return { diagnostics };\n const analyzer = new Analyzer(\n program,\n host,\n dirname(filename),\n sdk,\n diagnostics,\n serviceRecords(program, services),\n );\n const module = analyzer.run({ ...options.programs, ...lowering.programs });\n for (const variable of module.variables) {\n const item = exposure.variables.get(`${variable.span.file}:${variable.name}`);\n if (item) variable.exposure = item;\n }\n for (const block of module.blocks) {\n const runtime = lowering.blocks.get(`${block.span.file}:${block.name}`);\n if (runtime) block.runtime = runtime;\n }\n for (const entry of module.programs) {\n const background = lowering.schedules.get(entry.name);\n if (background) entry.background = background;\n const continuation = lowering.continuations.get(entry.name);\n if (continuation) entry.continuation = continuation;\n }\n return hasErrors(diagnostics) ? { diagnostics } : { module, diagnostics };\n}\n\nexport function checkHostConfig(file: string): readonly Diagnostic[] {\n const bunTypes = createRequire(import.meta.url).resolve(\"@types/bun/index.d.ts\");\n const program = ts.createProgram([file], {\n strict: true,\n noEmit: true,\n target: ts.ScriptTarget.ES2022,\n module: ts.ModuleKind.ESNext,\n moduleResolution: ts.ModuleResolutionKind.Bundler,\n allowImportingTsExtensions: true,\n skipLibCheck: true,\n types: [bunTypes],\n });\n return ts.getPreEmitDiagnostics(program).map(tsDiagnostic);\n}\n\nclass Analyzer {\n private readonly checker: ts.TypeChecker;\n private readonly variables = new Map<ts.Symbol, Variable>();\n private readonly functions = new Map<ts.Symbol, PlcFunction>();\n private readonly methods = new Map<ts.Symbol, PlcFunction>();\n private readonly functionDeclarations = new Map<ts.Symbol, ts.FunctionDeclaration>();\n private readonly instances = new Map<string, PlcFunction>();\n private readonly pending: {\n node: ts.FunctionDeclaration | ts.MethodDeclaration;\n fn: PlcFunction;\n environment: TypeEnvironment;\n }[] = [];\n private readonly resolver: TypeResolver;\n private readonly blocks: BlockResolver;\n private readonly globalVariables: Variable[] = [];\n private readonly sources: readonly ts.SourceFile[];\n\n // This scope is saved and restored for each block or generic function body.\n private environment: TypeEnvironment = new Map();\n private activeBlock: BlockSource | undefined;\n private readonly ranges = new Map<string, IntegerInterval>();\n private readonly loopCounters = new Set<string>();\n private readonly aliases = new Map<ts.Symbol, Place>();\n private copySources: Place[] = [];\n private readonly breakTargets: (\"loop\" | \"switch\")[] = [];\n private activeFunction: PlcFunction | undefined;\n\n constructor(\n private readonly program: ts.Program,\n private readonly host: ts.ModuleResolutionHost,\n private readonly root: string,\n private readonly sdk: string,\n private readonly diagnostics: Diagnostic[],\n serviceRecord?: (type: ts.Type) => ts.Symbol | undefined,\n ) {\n this.checker = program.getTypeChecker();\n this.resolver = new TypeResolver(this.checker, root, sdk, this.fail, serviceRecord);\n this.blocks = new BlockResolver(\n this.resolver,\n span,\n this.fail,\n span(program.getSourceFile(sdk)!),\n );\n const roots = new Set(program.getRootFileNames());\n this.sources = runtimeSources(program).filter(\n (source) =>\n source.fileName !== sdk &&\n !source.fileName.startsWith(`${dirname(sdk)}/`) &&\n !program.isSourceFileDefaultLibrary(source) &&\n (!source.isDeclarationFile || roots.has(source.fileName)),\n );\n }\n\n private readonly fail: Fail = (node, code, message) => {\n throw new SemanticError(error(code, message, span(node)));\n };\n\n private type(node: ts.TypeNode): ResolvedType {\n return this.resolver.resolve(node, this.environment);\n }\n\n private storageId(node: ts.Node, name: string): string {\n return `${this.resolver.id(node, name)}${this.activeFunction ? `@${this.activeFunction.id}` : \"\"}`;\n }\n\n private guard(action: () => void): void {\n try {\n action();\n } catch (cause) {\n if (!(cause instanceof SemanticError)) throw cause;\n this.diagnostics.push(cause.diagnostic);\n }\n }\n\n run(entries: FrontendOptions[\"programs\"]): PlcModule {\n // Collect every declaration before resolving initializers and routine bodies.\n // Generic calls can enqueue more helpers, so resolve entry points last.\n this.collectDeclarations();\n this.initializeStorage();\n this.analyzeBlockBodies();\n this.analyzePendingFunctions();\n const programs = this.resolvePrograms(entries);\n\n return {\n types: [...this.resolver.types.values()],\n variables: this.globalVariables,\n functions: [...this.instances.values()],\n blocks: [...this.blocks.definitions.values()],\n programs,\n };\n }\n\n private collectDeclarations(): void {\n const classes = this.sources.flatMap((source) =>\n source.statements.filter(ts.isClassDeclaration),\n );\n this.blocks.index(classes);\n for (const node of classes) this.guard(() => this.blocks.collect(node));\n for (const source of this.blocks.sources.values()) {\n for (const method of source.methods)\n this.guard(() => {\n const fn = this.instantiate(method, [], method);\n fn.owner = {\n block: source.block.id,\n access: this.methodAccess(method),\n };\n this.methods.set(this.resolver.symbol(method.name), fn);\n });\n }\n for (const source of this.sources) {\n this.diagnostics.push(...suppressionDiagnostics(source));\n for (const statement of source.statements) {\n this.guard(() => this.declaration(statement));\n }\n }\n }\n\n private methodAccess(method: ts.MethodDeclaration): MethodOwner[\"access\"] {\n if (method.modifiers?.some((modifier) => modifier.kind === ts.SyntaxKind.PrivateKeyword))\n return \"private\";\n if (method.modifiers?.some((modifier) => modifier.kind === ts.SyntaxKind.ProtectedKeyword))\n return \"protected\";\n return \"public\";\n }\n\n private initializeStorage(): void {\n for (const source of this.sources) {\n for (const statement of source.statements) {\n if (ts.isVariableStatement(statement) && !source.isDeclarationFile) {\n this.guard(() => {\n for (const declaration of statement.declarationList.declarations) {\n if (!declaration.initializer)\n this.fail(\n declaration,\n \"PLC3001\",\n \"Persistent PLC state requires a constant initializer.\",\n );\n const variable = this.variables.get(this.resolver.symbol(declaration.name));\n if (!variable || variable.storage === \"instance\") continue;\n const initializer = storageInitializer(\n declaration.initializer,\n this.resolver,\n this.fail,\n ).value;\n const inferred = variable.type === \"inferred\";\n const expression = this.expression(initializer, inferred ? undefined : variable.type);\n variable.type = expression.type;\n if (\n inferred &&\n variable.storage === \"constant\" &&\n aggregate(this.resolver.types.get(variable.type))\n )\n variable.storage = \"module\";\n if (variable.retain && variable.storage === \"constant\")\n this.fail(\n declaration,\n \"PLC3004\",\n \"retain requires mutable persistent storage or a static block instance.\",\n );\n const value = this.constant(this.implicitCopy(expression));\n if (!value)\n this.fail(\n declaration.initializer,\n \"PLC3001\",\n \"Persistent initializers must be compile-time constants.\",\n );\n variable.initial = value;\n }\n });\n }\n }\n }\n }\n\n private analyzeBlockBodies(): void {\n for (const source of this.blocks.sources.values())\n this.guard(() => {\n for (const [variable, node] of source.initializers) {\n const value = this.constant(this.expression(node, variable.type));\n if (!value)\n this.fail(node, \"PLC3001\", \"Block state requires a compile-time constant initializer.\");\n variable.initial = value;\n }\n const { block } = source;\n this.activeBlock = source;\n try {\n const routine = this.routineBody(\n {\n id: block.id,\n name: block.name,\n parameters: block.inputs,\n locals: [],\n body: [],\n span: block.span,\n ...(block.result && { result: block.result }),\n },\n source.fieldBindings,\n source.method.body!,\n );\n block.locals = routine.locals;\n block.body = routine.body;\n } finally {\n this.activeBlock = undefined;\n }\n });\n }\n\n private analyzePendingFunctions(): void {\n // A worklist allows explicit generic instances to share source without sharing locals.\n for (let index = 0; index < this.pending.length; index++) {\n const instance = this.pending[index]!;\n this.guard(() => {\n this.environment = instance.environment;\n this.activeBlock = instance.fn.owner\n ? [...this.blocks.sources.values()].find(\n (source) => source.block.id === instance.fn.owner?.block,\n )\n : undefined;\n try {\n // Declaration admission proved the parameter list and body before worklist analysis.\n const fn = this.routineBody(\n instance.fn,\n [\n ...(this.activeBlock?.fieldBindings ?? []),\n ...instance.node.parameters.map(\n (parameter, index) =>\n [this.resolver.symbol(parameter.name), instance.fn.parameters[index]!] as const,\n ),\n ],\n instance.node.body!,\n );\n this.instances.set(fn.id, fn);\n if (ts.isFunctionDeclaration(instance.node) && !instance.node.typeParameters?.length)\n this.functions.set(this.resolver.symbol(instance.node.name!), fn);\n } finally {\n this.environment = new Map();\n this.activeBlock = undefined;\n }\n });\n }\n }\n\n // Lowers one routine body with its bindings layered over module storage.\n private routineBody(\n fn: PlcFunction,\n bindings: Iterable<readonly [ts.Symbol, Variable]>,\n body: ts.Block,\n ): PlcFunction {\n const saved = new Map(this.variables),\n locals: Variable[] = [];\n this.activeFunction = fn;\n this.copySources = [];\n for (const [symbol, variable] of bindings) this.variables.set(symbol, variable);\n try {\n return { ...fn, locals, body: this.statements(body.statements, locals) };\n } finally {\n this.variables.clear();\n for (const [symbol, variable] of saved) this.variables.set(symbol, variable);\n this.activeFunction = undefined;\n }\n }\n\n private resolvePrograms(entries: FrontendOptions[\"programs\"]): PlcProgram[] {\n const programs: PlcProgram[] = [];\n for (const [name, entry] of Object.entries(entries)) {\n const source = this.program.getSourceFile(resolve(this.root, entry.module));\n if (!source) {\n this.diagnostics.push(error(\"PLC4001\", `Program source not found: ${entry.module}.`));\n continue;\n }\n this.guard(() => {\n const moduleSymbol = this.checker.getSymbolAtLocation(source);\n const exported =\n moduleSymbol &&\n this.checker\n .getExportsOfModule(moduleSymbol)\n .find((symbol) => symbol.name === entry.export);\n if (!exported)\n this.fail(source, \"PLC4001\", `Program export ${entry.export} was not found.`);\n const symbol =\n exported.flags & ts.SymbolFlags.Alias\n ? this.checker.getAliasedSymbol(exported)\n : exported;\n const fn = this.functions.get(symbol);\n if (!fn || fn.parameters.length || fn.result)\n this.fail(\n source,\n \"PLC4001\",\n \"Program entry must be an implemented parameterless void function.\",\n );\n programs.push({ id: `program:${name}`, name, entry: fn.id });\n });\n }\n return programs;\n }\n\n private dependency(node: ts.ImportDeclaration | ts.ExportDeclaration): void {\n if (!node.moduleSpecifier) return;\n if (!ts.isStringLiteral(node.moduleSpecifier))\n this.fail(node, \"PLC1001\", \"Only static module imports are supported.\");\n const resolved = ts.resolveModuleName(\n node.moduleSpecifier.text,\n node.getSourceFile().fileName,\n this.program.getCompilerOptions(),\n this.host,\n ).resolvedModule;\n if (!resolved)\n this.fail(\n node.moduleSpecifier,\n \"PLC1008\",\n \"This dependency could not be resolved to PLC source.\",\n );\n const source = this.program.getSourceFile(resolved.resolvedFileName);\n const typeOnly = ts.isImportDeclaration(node) ? node.importClause?.isTypeOnly : node.isTypeOnly;\n if (typeOnly) return;\n const bindings = ts.isImportDeclaration(node)\n ? node.importClause?.namedBindings\n : node.exportClause;\n const defaultName = ts.isImportDeclaration(node) ? node.importClause?.name : undefined;\n const namedOnly =\n bindings &&\n (ts.isNamedImports(bindings) || ts.isNamedExports(bindings)) &&\n bindings.elements.length > 0 &&\n bindings.elements.every(\n (binding) =>\n binding.isTypeOnly || !(this.resolver.symbol(binding.name).flags & ts.SymbolFlags.Value),\n );\n if (namedOnly && !defaultName) return;\n if (source && !source.isDeclarationFile) return;\n if (resolved.resolvedFileName.replaceAll(\"\\\\\", \"/\").startsWith(`${dirname(this.sdk)}/`)) return;\n const authoredIo =\n source &&\n this.sources.includes(source) &&\n source.statements.some(ts.isVariableStatement) &&\n source.statements.every(\n (statement) =>\n ts.isTypeAliasDeclaration(statement) ||\n ts.isEmptyStatement(statement) ||\n (ts.isVariableStatement(statement) &&\n statement.declarationList.declarations.every(\n (declaration) => declaration.type && this.type(declaration.type).io,\n )),\n );\n if (authoredIo) return;\n this.fail(\n node.moduleSpecifier,\n \"PLC1008\",\n \"Runtime dependencies need PLC TypeScript implementation source; JavaScript and declaration-only value imports are unsupported.\",\n );\n }\n\n private declaration(statement: ts.Statement): void {\n if (ts.isImportDeclaration(statement) || ts.isExportDeclaration(statement)) {\n this.dependency(statement);\n return;\n }\n if (\n ts.isClassDeclaration(statement) ||\n ts.isTypeAliasDeclaration(statement) ||\n ts.isInterfaceDeclaration(statement) ||\n ts.isEmptyStatement(statement)\n )\n return;\n if (ts.isEnumDeclaration(statement)) {\n this.resolver.enumeration(statement);\n return;\n }\n if (ts.isVariableStatement(statement)) {\n this.moduleVariables(statement);\n return;\n }\n if (ts.isFunctionDeclaration(statement)) {\n if (!statement.name || !statement.body)\n this.fail(statement, \"PLC1001\", \"PLC functions need a name and an implementation.\");\n if (statement.modifiers?.some((modifier) => modifier.kind === ts.SyntaxKind.AsyncKeyword)) {\n this.fail(statement, \"PLC1007\", \"Async execution is not supported in PLC scan code.\");\n }\n if (statement.asteriskToken)\n this.fail(statement, \"PLC1007\", \"Generators are not supported in PLC scan code.\");\n const symbol = this.resolver.symbol(statement.name);\n this.functionDeclarations.set(symbol, statement);\n if (!statement.typeParameters?.length)\n this.functions.set(symbol, this.instantiate(statement, [], statement));\n return;\n }\n this.fail(\n statement,\n \"PLC1001\",\n `${ts.SyntaxKind[statement.kind]} is not supported in PLC source.`,\n );\n }\n\n private moduleVariables(statement: ts.VariableStatement): void {\n if (!(statement.declarationList.flags & (ts.NodeFlags.Let | ts.NodeFlags.Const)))\n this.fail(statement, \"PLC1001\", \"Use let or const instead of var.\");\n const immutable = Boolean(statement.declarationList.flags & ts.NodeFlags.Const);\n for (const declaration of statement.declarationList.declarations) {\n if (!ts.isIdentifier(declaration.name))\n this.fail(declaration.name, \"PLC1001\", \"Destructuring declarations are not supported.\");\n const initializer =\n declaration.initializer &&\n storageInitializer(declaration.initializer, this.resolver, this.fail);\n const table = initializer && this.tableType(declaration, initializer.value);\n const instance =\n initializer && ts.isNewExpression(initializer.value)\n ? this.blocks.instanceType(initializer.value)\n : initializer && !table\n ? this.blocks.instanceArrayType(declaration.type, initializer.value)\n : undefined;\n const literal = initializer && this.numericLiteral(initializer.value);\n if (table && !immutable)\n this.fail(declaration, \"PLC2001\", \"A readonly table is a const declaration.\");\n const type = instance\n ? { type: instance }\n : (table ??\n (declaration.type\n ? this.type(declaration.type)\n : { type: immutable ? \"inferred\" : literal ? numericLiteralType(literal) : \"BOOL\" }));\n if (\n !instance &&\n !declaration.type &&\n !immutable &&\n !literal &&\n declaration.initializer &&\n initializer?.value.kind !== ts.SyntaxKind.TrueKeyword &&\n initializer?.value.kind !== ts.SyntaxKind.FalseKeyword\n )\n this.fail(declaration, \"PLC2001\", \"Annotate PLC storage explicitly.\");\n const ambient = declaration.getSourceFile().isDeclarationFile;\n if (type.mode || this.resolver.hasReferences(type.type))\n this.fail(declaration, \"PLC2001\", \"Borrow schemas cannot be stored as values.\");\n if (this.resolver.types.get(type.type)?.kind === \"block\" && !instance)\n this.fail(\n declaration,\n \"PLC1007\",\n \"Block instances require a static constructor initializer.\",\n );\n if (\n instance &&\n (!immutable || (declaration.type && this.type(declaration.type).type !== instance))\n )\n this.fail(\n declaration,\n \"PLC2001\",\n \"Static block instances require const bindings and matching annotations.\",\n );\n if (\n initializer?.retain &&\n (ambient ||\n (immutable &&\n type.type !== \"inferred\" &&\n !instance &&\n !aggregate(this.resolver.types.get(type.type))))\n )\n this.fail(\n declaration,\n \"PLC3004\",\n \"retain requires mutable persistent storage or a static block instance.\",\n );\n if (ambient && !type.io)\n this.fail(declaration, \"PLC4002\", \"Ambient PLC variables must declare Input or Output.\");\n if (!ambient && type.io)\n this.fail(declaration, \"PLC4002\", \"Logical I/O belongs in an ambient declaration file.\");\n if (type.io === \"input\" && !immutable)\n this.fail(declaration, \"PLC4002\", \"Inputs must use declare const.\");\n if (type.io === \"output\" && immutable)\n this.fail(declaration, \"PLC4002\", \"Outputs must use declare let.\");\n const variable: Variable = {\n id: this.storageId(declaration, declaration.name.text),\n name: declaration.name.text,\n type: type.type,\n storage: instance\n ? \"instance\"\n : (type.io ??\n (immutable && (table || !aggregate(this.resolver.types.get(type.type)))\n ? \"constant\"\n : \"module\")),\n mutable: !immutable,\n retain: initializer?.retain ?? false,\n ...(statement.modifiers?.some((modifier) => modifier.kind === ts.SyntaxKind.ExportKeyword)\n ? { exported: true as const }\n : {}),\n span: span(declaration),\n };\n this.variables.set(this.resolver.symbol(declaration.name), variable);\n this.globalVariables.push(variable);\n }\n }\n\n /**\n * `const table: readonly T[] = [...]` or `const table = [...] as const satisfies readonly T[]`,\n * also spelled `ReadonlyArray<T>`, is a constant `FixedArray<T, N>` whose length is the\n * literal's element count.\n */\n private tableType(\n declaration: ts.VariableDeclaration,\n initializer: ts.Expression,\n ): ResolvedType | undefined {\n const satisfied = ts.isSatisfiesExpression(initializer) ? initializer : undefined;\n const annotation = declaration.type ?? satisfied?.type;\n if (!annotation) return undefined;\n let element: ts.TypeNode | undefined;\n if (\n ts.isTypeOperatorNode(annotation) &&\n annotation.operator === ts.SyntaxKind.ReadonlyKeyword &&\n ts.isArrayTypeNode(annotation.type)\n )\n element = annotation.type.elementType;\n else if (\n ts.isTypeReferenceNode(annotation) &&\n annotation.typeName.getText() === \"ReadonlyArray\" &&\n annotation.typeArguments?.length === 1 &&\n this.resolver.standardLibrary(this.resolver.symbol(annotation.typeName))\n )\n element = annotation.typeArguments[0];\n if (!element) return undefined;\n let literal = satisfied?.expression ?? initializer;\n while (\n ts.isParenthesizedExpression(literal) ||\n (ts.isAsExpression(literal) && ts.isConstTypeReference(literal.type))\n )\n literal = literal.expression;\n if (!ts.isArrayLiteralExpression(literal))\n this.fail(declaration, \"PLC2001\", \"A readonly table is initialized by an array literal.\");\n return this.resolver.fixedArray(\n annotation,\n this.type(element),\n { kind: \"integer\", value: literal.elements.length },\n { kind: \"integer\", value: 0 },\n );\n }\n\n private instantiate(\n node: ts.FunctionDeclaration | ts.MethodDeclaration,\n arguments_: readonly ts.TypeNode[],\n call: ts.Node,\n ): PlcFunction {\n if (!node.name || !ts.isIdentifier(node.name))\n this.fail(node, \"PLC1001\", \"PLC routines need identifier names.\");\n const routineName = node.name.text;\n const environment = this.resolver.bindings(\n node.typeParameters,\n arguments_,\n this.environment,\n call,\n );\n const suffix = (node.typeParameters ?? [])\n .map((parameter) => this.resolver.key(environment.get(this.resolver.symbol(parameter.name))!))\n .join(\",\");\n const id = `${this.resolver.id(node, routineName)}${suffix ? `<${suffix}>` : \"\"}`;\n const existing = this.instances.get(id);\n if (existing) return existing;\n // Bounds generic expansion; plain helpers each instantiate once.\n if (suffix && [...this.instances.keys()].filter((key) => key.endsWith(\">\")).length >= 256)\n this.fail(\n call,\n \"PLC2001\",\n \"Generic specialization exceeds 256 concrete helpers; recursive specialization is unsupported.\",\n );\n const saved = this.environment;\n this.environment = environment;\n try {\n const parameters = node.parameters.map((parameter) => {\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 \"PLC parameters need names and explicit types; optional/rest/default parameters are unsupported.\",\n );\n const type = this.type(parameter.type);\n const block = this.resolver.types.get(type.type)?.kind === \"block\";\n if (type.mode !== \"inOut\" && !block && !this.resolver.isValue(type))\n this.fail(parameter, \"PLC2001\", \"Parameters require value types or InOut borrows.\");\n if (type.io) this.fail(parameter, \"PLC2001\", \"Parameters cannot use logical I/O wrappers.\");\n // Records, arrays and blocks pass by reference, as objects do in TypeScript.\n const mode =\n type.mode ??\n (block || aggregate(this.resolver.types.get(type.type)) ? \"inOut\" : undefined);\n return {\n id: `${this.resolver.id(parameter, parameter.name.text)}@${id}`,\n name: parameter.name.text,\n type: type.type,\n storage: \"parameter\" as const,\n mutable: mode === \"inOut\",\n ...(mode && { mode }),\n retain: false,\n span: span(parameter),\n };\n });\n let result: string | undefined;\n if (node.type && node.type.kind !== ts.SyntaxKind.VoidKeyword) {\n const type = this.type(node.type);\n if (!this.resolver.isValue(type))\n this.fail(node.type, \"PLC2001\", \"Helper results require value types.\");\n if (type.io) this.fail(node.type, \"PLC4002\", \"Helper results cannot use I/O wrappers.\");\n result = type.type;\n } else if (!node.type) {\n const signature = this.checker.getSignatureFromDeclaration(node);\n if (\n !signature ||\n !(this.checker.getReturnTypeOfSignature(signature).flags & ts.TypeFlags.Void)\n )\n this.fail(node, \"PLC2001\", \"Annotate helper results explicitly.\");\n }\n const bounds = this.resolver.mathHelper(node, routineName);\n const fn: PlcFunction = {\n id,\n name: `${routineName}${suffix ? `_${suffix}` : \"\"}`,\n parameters,\n locals: [],\n body: [],\n span: span(node),\n ...(result && { result }),\n ...(bounds && { bounds }),\n };\n this.instances.set(id, fn);\n this.pending.push({ node, fn, environment });\n return fn;\n } finally {\n this.environment = saved;\n }\n }\n\n private byId(): Map<string, Variable> {\n return new Map(\n [\n ...this.variables.values(),\n ...(this.activeBlock\n ? [...this.activeBlock.block.inputs, ...this.activeBlock.block.outputs]\n : []),\n ].map((variable) => [variable.id, variable]),\n );\n }\n\n private checked(value: Expression): Expression {\n const message = expressionIssue(value, this.resolver.types, this.byId(), this.ranges);\n if (message) throw new SemanticError(error(\"PLC2002\", message, value.span));\n return value;\n }\n\n private coerce(value: Expression, destination: string): Expression {\n if (value.type === destination) return value;\n const source = this.resolver.types.get(value.type),\n target = this.resolver.types.get(destination);\n if (!source || !target)\n throw new SemanticError(error(\"PLC2001\", \"This PLC type has not been resolved.\", value.span));\n const constant = fold(value, this.byId(), this.resolver.types);\n if (\n source.kind === \"string\" &&\n target.kind === \"string\" &&\n source.encoding === target.encoding &&\n source.capacity <= target.capacity\n )\n return constant\n ? { kind: \"constant\", type: destination, value: constant, span: value.span }\n : { kind: \"convert\", type: destination, operand: value, policy: \"exact\", span: value.span };\n if (!canAssign(source, target, constant))\n throw new SemanticError(\n error(\n \"PLC2002\",\n \"Use an explicit conversion between these PLC domains or widths.\",\n value.span,\n ),\n );\n if (constant) return { kind: \"constant\", type: destination, value: constant, span: value.span };\n return this.checked({\n kind: \"convert\",\n type: destination,\n operand: value,\n policy: \"exact\",\n span: value.span,\n });\n }\n\n private constant(expression: Expression): Constant | undefined {\n return fold(expression, this.byId(), this.resolver.types);\n }\n\n private numericLiteral(node: ts.Expression): string | undefined {\n while (ts.isParenthesizedExpression(node)) node = node.expression;\n if (ts.isNumericLiteral(node) || ts.isBigIntLiteral(node)) return node.getText();\n if (ts.isPrefixUnaryExpression(node) && node.operator === ts.SyntaxKind.MinusToken) {\n const operand = this.numericLiteral(node.operand);\n if (operand !== undefined) return operand.startsWith(\"-\") ? operand.slice(1) : `-${operand}`;\n }\n return undefined;\n }\n\n private contextualLiteral(node: ts.Expression): boolean {\n while (ts.isParenthesizedExpression(node)) node = node.expression;\n return (\n this.numericLiteral(node) !== undefined ||\n ts.isStringLiteral(node) ||\n ts.isNoSubstitutionTemplateLiteral(node)\n );\n }\n\n private literal(node: ts.Expression, expected?: string): Expression | undefined {\n const text = this.numericLiteral(node);\n if (text === undefined) return undefined;\n const type = expected ?? numericLiteralType(text);\n const target = this.resolver.types.get(type);\n if (!target || ![\"integer\", \"bits\", \"float\"].includes(target.kind))\n this.fail(\n node,\n \"PLC2001\",\n \"Numeric literals require an arithmetic or bit-string PLC type; use named enum members.\",\n );\n let value: Constant;\n if (target.kind === \"float\") {\n const clean = text.replaceAll(\"_\", \"\");\n const number = /^-?0[xob]/i.test(clean) ? Number(parseInteger(clean)) : Number(clean);\n value = { kind: \"float\", value: target.bits === 32 ? Math.fround(number) : number };\n } else {\n try {\n value = { kind: \"integer\", value: String(parseInteger(text)) };\n } catch (cause) {\n this.fail(\n node,\n \"PLC2002\",\n cause instanceof Error ? cause.message : \"Invalid integer literal.\",\n );\n }\n }\n return this.checked({ kind: \"constant\", type, value, span: span(node) });\n }\n\n private expression(node: ts.Expression, expected?: string): Expression {\n if (\n ts.isParenthesizedExpression(node) ||\n ts.isSatisfiesExpression(node) ||\n (ts.isAsExpression(node) && ts.isConstTypeReference(node.type))\n )\n return this.expression(node.expression, expected);\n const literal = this.literal(node, expected);\n if (literal) return literal;\n const value = this.rawExpression(node, expected);\n return expected ? this.coerce(value, expected) : value;\n }\n\n private rawExpression(node: ts.Expression, expected?: string): Expression {\n const origin = { span: span(node) };\n if (node.kind === ts.SyntaxKind.TrueKeyword || node.kind === ts.SyntaxKind.FalseKeyword) {\n return {\n ...origin,\n type: \"BOOL\",\n kind: \"constant\",\n value: { kind: \"bool\", value: node.kind === ts.SyntaxKind.TrueKeyword },\n };\n }\n if (ts.isStringLiteral(node) || ts.isNoSubstitutionTemplateLiteral(node)) {\n const type = expected ? this.resolver.types.get(expected) : undefined;\n if (type?.kind === \"enum\") {\n const member = type.members.find((member) => member.name === node.text);\n if (member)\n return {\n ...origin,\n type: type.id,\n kind: \"constant\",\n value: { kind: \"integer\", value: member.value },\n };\n }\n if (type?.kind !== \"string\")\n this.fail(node, \"PLC2001\", \"String literals require a bounded STRING or WSTRING context.\");\n return this.checked({\n ...origin,\n type: type.id,\n kind: \"constant\",\n value: { kind: \"string\", value: node.text },\n });\n }\n if (ts.isObjectLiteralExpression(node)) {\n const type = expected ? this.resolver.types.get(expected) : undefined;\n if (type?.kind === \"array\" && type.index) {\n // Like an array literal, every element in order, so items evaluate in source order.\n const order = \"Enum-keyed record literals list every enum member once, in value order.\";\n const items: Expression[] = [];\n for (const property of node.properties) {\n if (!ts.isPropertyAssignment(property) || !ts.isComputedPropertyName(property.name))\n this.fail(\n property,\n \"PLC1001\",\n \"Enum-keyed record literals use computed member keys such as [Station.A].\",\n );\n const key = this.expression(property.name.expression, type.index);\n if (key.kind !== \"constant\" || key.type !== type.index || key.value.kind !== \"integer\")\n this.fail(property.name, \"PLC2001\", \"Keys must be members of the record's enum.\");\n if (Number(key.value.value) !== type.lowerBound + items.length)\n this.fail(property, \"PLC2001\", order);\n items.push(this.implicitCopy(this.expression(property.initializer, type.element)));\n }\n if (items.length !== type.length) this.fail(node, \"PLC2001\", order);\n return this.checked({ ...origin, type: type.id, kind: \"array\", items });\n }\n if (type?.kind !== \"record\")\n this.fail(node, \"PLC2001\", \"Record literals require an explicit closed PLC record type.\");\n const fields: Record<string, Expression> = Object.create(null);\n const written = new Set<string>();\n for (const [position, property] of node.properties.entries()) {\n if (ts.isSpreadAssignment(property) && !position) {\n for (const [name, value] of Object.entries(\n this.spreadFields(property.expression, type.fields),\n )) {\n // TypeScript's spread shares a nested record or array, so a later write to it diverges.\n this.recordCopySource(value);\n fields[name] = this.implicitCopy(value);\n }\n continue;\n }\n if (\n !(ts.isPropertyAssignment(property) || ts.isShorthandPropertyAssignment(property)) ||\n !ts.isIdentifier(property.name)\n )\n this.fail(\n property,\n \"PLC1001\",\n \"Record literals take named fields after at most one leading spread; methods are unsupported.\",\n );\n const fieldName = property.name.text;\n const field = type.fields.find((field) => field.name === fieldName);\n if (!field || written.has(field.name))\n this.fail(property, \"PLC2001\", \"Unknown or duplicate record field.\");\n written.add(field.name);\n // An explicit field overrides the spread and keeps its source evaluation order.\n delete fields[field.name];\n fields[field.name] = this.implicitCopy(\n this.expression(\n ts.isPropertyAssignment(property) ? property.initializer : property.name,\n field.type,\n ),\n );\n }\n if (this.resolver.unions.has(type.id))\n for (const field of type.fields)\n if (!Object.hasOwn(fields, field.name))\n fields[field.name] = {\n ...origin,\n type: field.type,\n kind: \"constant\",\n value: defaultValue(field.type, this.resolver.types),\n };\n return this.checked({ ...origin, type: type.id, kind: \"record\", fields });\n }\n if (ts.isArrayLiteralExpression(node)) {\n const type = expected ? this.resolver.types.get(expected) : undefined;\n if (type?.kind !== \"array\")\n this.fail(node, \"PLC2001\", \"Array literals require an explicit FixedArray type.\");\n const items = node.elements.map((element) => {\n if (ts.isOmittedExpression(element) || ts.isSpreadElement(element))\n this.fail(element, \"PLC1001\", \"Fixed arrays cannot have holes or spreading.\");\n return this.implicitCopy(this.expression(element, type.element));\n });\n return this.checked({ ...origin, type: type.id, kind: \"array\", items });\n }\n if (ts.isPropertyAccessExpression(node)) {\n const declaration = this.resolver.symbol(node.name).declarations?.find(ts.isEnumMember);\n if (declaration) {\n const type = this.resolver.enumeration(declaration.parent).type;\n const layout = this.resolver.types.get(type)!;\n if (layout.kind !== \"enum\") this.fail(node, \"PLC2001\", \"Invalid enum layout.\");\n return {\n ...origin,\n type,\n kind: \"constant\",\n value: {\n kind: \"integer\",\n value: layout.members.find((member) => member.name === declaration.name.getText())!\n .value,\n },\n };\n }\n if (node.name.text === \"length\") {\n const base = this.expression(node.expression),\n type = this.resolver.types.get(base.type);\n if (type?.kind === \"array\")\n return { ...origin, type: \"DINT\", kind: \"length\", operand: base };\n }\n }\n if (ts.isPropertyAccessExpression(node) || ts.isElementAccessExpression(node)) {\n const place = this.place(node),\n type = placeType(place, this.resolver.types, this.byId(), this.ranges);\n if (type.issue || !type.type) this.fail(node, \"PLC2001\", type.issue ?? \"Invalid PLC place.\");\n return { ...origin, type: type.type, kind: \"load\", place };\n }\n if (ts.isIdentifier(node) && this.aliases.has(this.resolver.symbol(node))) {\n const place = this.place(node),\n type = placeType(place, this.resolver.types, this.byId(), this.ranges);\n if (type.issue || !type.type) this.fail(node, \"PLC2001\", type.issue ?? \"Invalid PLC place.\");\n return { ...origin, type: type.type, kind: \"load\", place };\n }\n if (ts.isIdentifier(node)) {\n const variable = this.variables.get(this.resolver.symbol(node));\n if (!variable) this.fail(node, \"PLC1002\", \"This value has no supported PLC storage.\");\n if (variable.type === \"inferred\")\n this.fail(\n node,\n \"PLC3001\",\n \"Resolve constant initializer dependencies in declaration order.\",\n );\n return {\n ...origin,\n type: variable.type,\n kind: \"load\",\n place: { root: variable.id, path: [] },\n };\n }\n if (ts.isPrefixUnaryExpression(node)) {\n const operator =\n node.operator === ts.SyntaxKind.ExclamationToken\n ? \"not\"\n : node.operator === ts.SyntaxKind.MinusToken\n ? \"negate\"\n : node.operator === ts.SyntaxKind.TildeToken\n ? \"bitNot\"\n : undefined;\n if (!operator) this.fail(node, \"PLC2001\", \"Unsupported unary operation.\");\n const operand = this.expression(node.operand, operator === \"not\" ? \"BOOL\" : expected);\n return this.checked({\n ...origin,\n type: operator === \"not\" ? \"BOOL\" : operand.type,\n kind: \"unary\",\n operator,\n operand,\n });\n }\n if (ts.isCallExpression(node)) {\n const sdk = this.sdkExpression(node, expected);\n if (sdk) return sdk;\n const call = this.call(node);\n if (!call.fn.result)\n this.fail(node, \"PLC2001\", \"A void helper cannot produce an expression value.\");\n return {\n ...origin,\n type: call.fn.result,\n kind: \"call\",\n function: call.fn.id,\n arguments: call.arguments,\n ...(call.instance && { instance: call.instance }),\n ...(call.index && { index: call.index }),\n };\n }\n if (ts.isConditionalExpression(node)) {\n const then = this.expression(node.whenTrue, expected);\n return {\n ...origin,\n type: then.type,\n kind: \"conditional\",\n condition: this.expression(node.condition, \"BOOL\"),\n then,\n else: this.expression(node.whenFalse, then.type),\n };\n }\n if (ts.isBinaryExpression(node)) return this.binaryExpression(node, expected);\n this.fail(node, \"PLC1001\", `${ts.SyntaxKind[node.kind]} is not supported in PLC expressions.`);\n }\n\n private binaryExpression(node: ts.BinaryExpression, expected?: string): Expression {\n const origin = { span: span(node) };\n const operator = operators.get(node.operatorToken.kind);\n if (!operator)\n this.fail(\n node.operatorToken,\n \"PLC2001\",\n \"Unsupported binary operation; implicit coercion is prohibited.\",\n );\n const logical = operator === \"and\" || operator === \"or\";\n const comparison = comparisonOperators.has(operator);\n const leftIsLiteral = this.contextualLiteral(node.left);\n const context = logical\n ? \"BOOL\"\n : comparison\n ? leftIsLiteral\n ? this.expression(node.right).type\n : undefined\n : expected;\n let left = this.expression(node.left, context);\n if (comparison && !leftIsLiteral && !this.contextualLiteral(node.right)) {\n // Compare at the wider type; widening cannot change the value.\n const wider = this.expression(node.right).type,\n from = this.resolver.types.get(left.type),\n to = this.resolver.types.get(wider);\n if (from && to && !canAssign(to, from) && canAssign(from, to))\n left = this.coerce(left, wider);\n }\n const right = this.expression(\n node.right,\n operator === \"shiftLeft\" || operator === \"shiftRight\" ? \"DINT\" : left.type,\n );\n if (operator === \"divide\" && this.resolver.types.get(left.type)?.kind !== \"float\")\n this.fail(node, \"PLC2002\", \"Use div<T>() for truncating integer division.\");\n return this.checked({\n ...origin,\n type: logical || comparison ? \"BOOL\" : left.type,\n kind: \"binary\",\n operator,\n left,\n right,\n });\n }\n\n private sdkExpression(node: ts.CallExpression, expected?: string): Expression | undefined {\n const origin = { span: span(node) };\n const official = this.sdkCall(node);\n if (official === \"errorCode\") {\n if (node.arguments.length !== 1)\n this.fail(node, \"PLC1012\", \"errorCode requires one rejection reason.\");\n return this.expression(node.arguments[0]!, \"UDINT\");\n }\n if (\n official &&\n (Object.hasOwn(durationScales, official) || Object.hasOwn(calendarTypes, official))\n ) {\n if (node.arguments.length !== 1 || node.typeArguments?.length)\n this.fail(node, \"PLC2001\", \"Time constructors require one compile-time literal argument.\");\n const argument = node.arguments[0]!;\n const scale = durationScales[official];\n let value: Constant | undefined, type: string;\n if (scale) {\n type = \"TIME\";\n let text = this.numericLiteral(argument);\n if (text === undefined) {\n const folded = this.constant(this.expression(argument));\n if (folded?.kind === \"integer\") text = folded.value;\n }\n if (text !== undefined && /^-?0[xob]/i.test(text)) text = String(parseInteger(text));\n value = text === undefined ? undefined : durationLiteral(text.replace(/n$/, \"\"), scale);\n } else {\n type = calendarTypes[official]!;\n const layout = this.resolver.types.get(type)!;\n value =\n layout.kind === \"calendar\" &&\n (ts.isStringLiteral(argument) || ts.isNoSubstitutionTemplateLiteral(argument))\n ? calendarLiteral(layout.domain, argument.text)\n : undefined;\n }\n if (!value)\n this.fail(\n argument,\n \"PLC2002\",\n \"Invalid time literal: require an exact supported domain value and millisecond TIME precision.\",\n );\n return this.checked({ ...origin, type, kind: \"constant\", value });\n }\n if (official === \"now\") {\n if (node.arguments.length || node.typeArguments?.length)\n this.fail(node, \"PLC2001\", \"now() takes no arguments.\");\n return this.checked({\n ...origin,\n type: \"DINT\",\n kind: \"unary\",\n operator: \"clock\",\n operand: {\n ...origin,\n type: \"DINT\",\n kind: \"constant\",\n value: { kind: \"integer\", value: \"0\" },\n },\n });\n }\n if (official === \"timeToMilliseconds\") {\n if (node.arguments.length !== 1 || node.typeArguments?.length)\n this.fail(\n node,\n \"PLC2001\",\n \"timeToMilliseconds requires one TIME argument and no type arguments.\",\n );\n return this.checked({\n ...origin,\n type: \"UDINT\",\n kind: \"unary\",\n operator: \"timeToMilliseconds\",\n operand: this.expression(node.arguments[0]!),\n });\n }\n if (official === \"defaultValue\") {\n if (node.arguments.length || node.typeArguments?.length !== 1)\n this.fail(\n node,\n \"PLC2001\",\n \"defaultValue requires exactly one concrete type and no value arguments.\",\n );\n const type = this.type(node.typeArguments[0]!);\n if (!this.resolver.isValue(type))\n this.fail(\n node,\n \"PLC2001\",\n \"defaultValue requires a fixed value layout, not an instance or borrow schema.\",\n );\n if (type.io) this.fail(node, \"PLC4002\", \"Default values cannot create logical I/O.\");\n return this.checked({\n ...origin,\n type: type.type,\n kind: \"constant\",\n value: defaultValue(type.type, this.resolver.types),\n });\n }\n if (official === \"copy\") {\n if (node.arguments.length !== 1 || (node.typeArguments && node.typeArguments.length !== 1))\n this.fail(node, \"PLC2001\", \"copy requires one fixed aggregate value.\");\n const operand = this.expression(\n node.arguments[0]!,\n node.typeArguments?.[0] ? this.type(node.typeArguments[0]).type : expected,\n );\n return this.checked({ ...origin, type: operand.type, kind: \"copy\", operand });\n }\n if (official && (Object.hasOwn(conversions, official) || Object.hasOwn(arithmetic, official))) {\n const argument = node.typeArguments?.[0];\n if (!argument || node.typeArguments?.length !== 1)\n this.fail(\n node,\n \"PLC2001\",\n \"Numeric SDK operations require one explicit PLC type argument.\",\n );\n const target = this.type(argument);\n if (target.io)\n this.fail(argument, \"PLC2001\", \"I/O wrappers cannot select an operation type.\");\n const conversion = conversions[official];\n if (conversion) {\n if (node.arguments.length !== 1)\n this.fail(node, \"PLC2001\", \"Conversion needs exactly one operand.\");\n return this.checked({\n ...origin,\n type: target.type,\n kind: \"convert\",\n policy: conversion,\n operand: this.expression(node.arguments[0]!),\n });\n }\n const operation = arithmetic[official]!;\n if (node.arguments.length !== 2)\n this.fail(node, \"PLC2001\", \"Arithmetic SDK operation needs two operands.\");\n return this.checked({\n ...origin,\n type: target.type,\n kind: \"binary\",\n ...operation,\n left: this.expression(node.arguments[0]!, target.type),\n right: this.expression(node.arguments[1]!, target.type),\n });\n }\n return undefined;\n }\n\n private sdkCall(node: ts.CallExpression): string | undefined {\n const name = calleeName(node.expression);\n return name && this.resolver.sdkName(name);\n }\n\n private update(node: ts.CallExpression): Statement | undefined {\n if (!ts.isPropertyAccessExpression(node.expression) || node.expression.name.text !== \"update\")\n return undefined;\n const place = this.place(node.expression.expression),\n variable = this.byId().get(place.root),\n type = variable && instancedBlock(variable.type, this.resolver.types),\n [selector, ...rest] = place.path,\n index = selector?.kind === \"index\" ? selector.value : undefined;\n if (\n !type ||\n rest.length ||\n (this.resolver.types.get(variable.type)?.kind === \"array\" ? !index : selector)\n )\n this.fail(node, \"PLC1007\", \"Update requires a static block instance binding.\");\n const definition = this.blocks.definitions.get(type.block)!;\n if (\n node.typeArguments?.length ||\n node.arguments.length !== 1 ||\n !ts.isObjectLiteralExpression(node.arguments[0]!)\n )\n this.fail(node, \"PLC2001\", \"Block update requires one complete named input record.\");\n const inputs: Record<string, Expression> = Object.create(null);\n const written = new Set<string>();\n for (const [position, property] of node.arguments[0].properties.entries()) {\n if (ts.isSpreadAssignment(property) && !position) {\n for (const [name, value] of Object.entries(\n this.spreadFields(property.expression, definition.inputs),\n )) {\n const parameter = definition.inputs.find((input) => input.name === name)!;\n inputs[name] = parameter.mode === \"inOut\" ? this.reference(value, parameter) : value;\n }\n continue;\n }\n if (\n !(ts.isPropertyAssignment(property) || ts.isShorthandPropertyAssignment(property)) ||\n !ts.isIdentifier(property.name)\n )\n this.fail(\n property,\n \"PLC2001\",\n \"Block inputs are named fields after at most one leading spread.\",\n );\n const name = property.name.text;\n const parameter = definition.inputs.find((input) => input.name === name);\n if (!parameter || written.has(parameter.name))\n this.fail(property, \"PLC2001\", \"Unknown or duplicate block input.\");\n written.add(parameter.name);\n const value = ts.isPropertyAssignment(property) ? property.initializer : property.name;\n delete inputs[parameter.name];\n inputs[parameter.name] = this.inputArgument(value, parameter);\n }\n if (definition.inputs.some((input) => !Object.hasOwn(inputs, input.name)))\n this.fail(node, \"PLC2001\", \"Block update must bind every input on each call.\");\n return {\n kind: \"blockUpdate\",\n instance: place.root,\n ...(index && { index }),\n inputs,\n span: span(node),\n };\n }\n\n private call(node: ts.CallExpression): {\n fn: PlcFunction;\n arguments: Expression[];\n instance?: string;\n index?: Expression;\n } {\n const name = calleeName(node.expression);\n if (!name) this.fail(node, \"PLC1001\", \"Call a statically resolved PLC helper or block method.\");\n const symbol = this.resolver.symbol(name);\n // Structural return types can give a receiver a transient property symbol.\n // Resolve its declaration back to the canonical instance method identity.\n const method =\n this.methods.get(symbol) ??\n symbol.declarations\n ?.filter(ts.isMethodDeclaration)\n .map((node) => this.methods.get(this.resolver.symbol(node.name)))\n .find((fn) => fn !== undefined);\n if (method) {\n if (!ts.isPropertyAccessExpression(node.expression) || node.typeArguments?.length)\n this.fail(node, \"PLC1007\", \"Methods require a static instance receiver.\");\n const receiver = node.expression.expression;\n let instance: string | undefined;\n let index: Expression | undefined;\n if (receiver.kind === ts.SyntaxKind.ThisKeyword) {\n if (method.owner?.block !== this.activeBlock?.block.id)\n this.fail(node, \"PLC1007\", \"Method receiver differs from the enclosing block.\");\n } else {\n const place = this.place(receiver);\n const variable = this.byId().get(place.root);\n const type = variable && instancedBlock(variable.type, this.resolver.types);\n const [selector, ...rest] = place.path;\n index = selector?.kind === \"index\" ? selector.value : undefined;\n if (\n (variable?.storage !== \"instance\" && variable?.mode !== \"inOut\") ||\n rest.length ||\n (this.resolver.types.get(variable.type)?.kind === \"array\" ? !index : selector) ||\n type?.block !== method.owner?.block\n )\n this.fail(node, \"PLC1007\", \"Methods require a matching static block instance.\");\n if (method.owner?.access !== \"public\" && method.owner?.block !== this.activeBlock?.block.id)\n this.fail(\n node,\n \"PLC1007\",\n \"Private and protected methods are only accessible within their block.\",\n );\n instance = place.root;\n }\n return {\n fn: method,\n arguments: this.callArguments(node, method),\n ...(instance && { instance }),\n ...(index && { index }),\n };\n }\n const declaration = this.functionDeclarations.get(symbol);\n if (!declaration)\n this.fail(node, \"PLC1001\", \"Calls require PLC TypeScript implementation source.\");\n const fn = declaration.typeParameters?.length\n ? this.instantiate(declaration, node.typeArguments ?? [], node)\n : this.functions.get(symbol);\n if (!fn || (!declaration.typeParameters?.length && node.typeArguments?.length))\n this.fail(node, \"PLC2001\", \"Type arguments require a generic helper.\");\n return { fn, arguments: this.callArguments(node, fn) };\n }\n\n private callArguments(node: ts.CallExpression, fn: PlcFunction): Expression[] {\n if (node.arguments.length !== fn.parameters.length)\n this.fail(node, \"PLC2001\", \"PLC argument count differs from its signature.\");\n return fn.parameters.map((parameter, index) =>\n this.inputArgument(node.arguments[index]!, parameter),\n );\n }\n\n private inputArgument(value: ts.Expression, parameter: Variable): Expression {\n if (parameter.mode !== \"inOut\") return this.expression(value, parameter.type);\n if (ts.isCallExpression(value) && this.sdkCall(value) === \"ref\") {\n if (value.arguments.length !== 1 || value.typeArguments?.length)\n this.fail(value, \"PLC3003\", \"ref takes one place.\");\n const target = this.target(value.arguments[0]!);\n if (target.type !== parameter.type)\n this.fail(value, \"PLC2001\", \"Borrowed place type must exactly match its InOut parameter.\");\n return { kind: \"borrow\", place: target.place, type: target.type, span: span(value) };\n }\n if (this.resolver.types.get(parameter.type)?.kind === \"block\") {\n const place = this.place(value);\n if (placeType(place, this.resolver.types, this.byId(), this.ranges).type !== parameter.type)\n this.fail(value, \"PLC2001\", \"Pass a block instance of the parameter's type.\");\n return { kind: \"borrow\", place, type: parameter.type, span: span(value) };\n }\n return this.reference(this.expression(value, parameter.type), parameter);\n }\n\n /**\n * An aggregate InOut argument borrows its place; a value with no writable address reaches\n * the callee through a compiler temporary.\n */\n private reference(argument: Expression, parameter: Variable): Expression {\n if (!aggregate(this.resolver.types.get(parameter.type)))\n throw new SemanticError(\n error(\n \"PLC3003\",\n \"Scalar InOut arguments require a direct ref(place) borrow.\",\n argument.span,\n ),\n );\n return argument.kind === \"load\" &&\n !this.loopCounters.has(argument.place.root) &&\n !placeType(argument.place, this.resolver.types, this.byId(), this.ranges, true).issue\n ? { kind: \"borrow\", place: argument.place, type: argument.type, span: argument.span }\n : this.implicitCopy(argument);\n }\n\n /**\n * The fields `{ ...base }` supplies: base is a record whose fields are all target fields of the\n * same type. A stored base is read field by field; `defaultValue<T>()` gives constants.\n */\n private spreadFields(\n node: ts.Expression,\n targets: readonly { name: string; type: string }[],\n ): Record<string, Expression> {\n let base = this.expression(node);\n const layout = this.resolver.types.get(base.type);\n if (\n layout?.kind !== \"record\" ||\n layout.fields.some(\n (field) => targets.find((target) => target.name === field.name)?.type !== field.type,\n )\n )\n this.fail(\n node,\n \"PLC2001\",\n \"A spread is a record whose fields are all fields of the target, with the same types.\",\n );\n // Static initializers run before any scan, so a stored base contributes its initial value.\n const initial =\n !this.activeFunction && base.kind === \"load\" && !base.place.path.length\n ? this.byId().get(base.place.root)?.initial\n : undefined;\n if (initial) base = { ...base, kind: \"constant\", value: initial };\n if (base.kind === \"load\") {\n const { place } = base;\n return Object.fromEntries(\n layout.fields.map((field) => [\n field.name,\n {\n kind: \"load\",\n type: field.type,\n place: { root: place.root, path: [...place.path, { kind: \"field\", name: field.name }] },\n span: base.span,\n },\n ]),\n );\n }\n if (base.kind !== \"constant\" || base.value.kind !== \"record\")\n this.fail(\n node,\n \"PLC1001\",\n \"Spread a record in storage or defaultValue<T>(); bind other values to a const first.\",\n );\n const { value } = base;\n return Object.fromEntries(\n layout.fields.map((field) => [\n field.name,\n { kind: \"constant\", type: field.type, value: value.fields[field.name]!, span: base.span },\n ]),\n );\n }\n\n private statements(nodes: readonly ts.Statement[], locals: Variable[]): Statement[] {\n return nodes.flatMap((node) => this.statement(node, locals));\n }\n\n private body(node: ts.Statement, locals: Variable[]): Statement[] {\n return ts.isBlock(node)\n ? this.statements(node.statements, locals)\n : this.statement(node, locals);\n }\n\n /** A record or array assigned into storage copies: fixed storage cannot repoint at its source. */\n private implicitCopy(value: Expression): Expression {\n if (instancedBlock(value.type, this.resolver.types))\n throw new SemanticError(\n error(\"PLC3003\", \"Block instances cannot be copied, aliased or returned.\", value.span),\n );\n return aggregate(this.resolver.types.get(value.type)) && value.kind === \"load\"\n ? { kind: \"copy\", type: value.type, operand: value, span: value.span }\n : value;\n }\n\n /** Remember a copied source, so a later write to it in this routine cannot silently diverge. */\n private recordCopySource(value: Expression): void {\n if (value.kind === \"load\" && aggregate(this.resolver.types.get(value.type)))\n this.copySources.push(value.place);\n }\n\n /** An alias re-reads its path at each use, so its indexes must keep their value for its scope. */\n private unchanging(value: Expression): boolean {\n if (value.kind === \"constant\") return true;\n if (value.kind === \"convert\") return this.unchanging(value.operand);\n if (value.kind === \"binary\") return this.unchanging(value.left) && this.unchanging(value.right);\n if (value.kind !== \"load\" || value.place.path.length) return false;\n const root = this.byId().get(value.place.root);\n return (\n this.loopCounters.has(value.place.root) ||\n Boolean(root && !root.mutable && [\"parameter\", \"local\", \"constant\"].includes(root.storage))\n );\n }\n\n private place(node: ts.Expression): Place {\n if (ts.isParenthesizedExpression(node)) return this.place(node.expression);\n if (this.activeBlock && ts.isPropertyAccessExpression(node)) {\n if (\n ts.isIdentifier(node.expression) &&\n this.resolver.symbol(node.expression) === this.activeBlock.inputSymbol\n ) {\n const variable = this.activeBlock.inputBindings.get(node.name.text);\n if (!variable) this.fail(node, \"PLC2001\", \"Unknown block input field.\");\n return { root: variable.id, path: [] };\n }\n if (\n ts.isPropertyAccessExpression(node.expression) &&\n node.expression.expression.kind === ts.SyntaxKind.ThisKeyword &&\n node.expression.name.text === \"out\"\n ) {\n const variable = this.activeBlock.block.outputs.find(\n (output) => output.name === node.name.text,\n );\n if (!variable) this.fail(node, \"PLC2001\", \"Unknown block output field.\");\n return { root: variable.id, path: [] };\n }\n }\n if (\n ts.isPropertyAccessExpression(node) &&\n this.activeBlock?.fieldBindings.has(this.resolver.symbol(node.name)) &&\n node.expression.kind !== ts.SyntaxKind.ThisKeyword\n )\n this.fail(node, \"PLC1007\", \"Private block state is accessible through this.field only.\");\n if (ts.isIdentifier(node)) {\n const alias = this.aliases.get(this.resolver.symbol(node));\n if (alias) return alias;\n }\n if (ts.isIdentifier(node) || ts.isPropertyAccessExpression(node)) {\n const variable = this.variables.get(\n this.resolver.symbol(ts.isIdentifier(node) ? node : node.name),\n );\n if (variable) return { root: variable.id, path: [] };\n }\n if (ts.isPropertyAccessExpression(node)) {\n const base = this.place(node.expression);\n return { root: base.root, path: [...base.path, { kind: \"field\", name: node.name.text }] };\n }\n if (ts.isElementAccessExpression(node) && node.argumentExpression) {\n const base = this.place(node.expression),\n value = this.expression(node.argumentExpression),\n array = this.resolver.types.get(\n placeType(base, this.resolver.types, this.byId(), this.ranges).type ?? \"\",\n );\n if (array?.kind === \"array\" && array.index && value.type !== array.index)\n this.fail(node, \"PLC2001\", \"An enum-keyed record is indexed only by its own enum.\");\n return { root: base.root, path: [...base.path, { kind: \"index\", value }] };\n }\n this.fail(node, \"PLC1001\", \"Access requires statically allocated PLC storage.\");\n }\n\n private target(node: ts.Expression): { place: Place; type: string } {\n if (ts.isIdentifier(node)) {\n const binding = this.checker.getSymbolAtLocation(node);\n if (binding && binding.flags & ts.SymbolFlags.Alias)\n this.fail(node, \"PLC3002\", \"Imported scalar bindings are read-only.\");\n }\n const place = this.place(node),\n type = placeType(place, this.resolver.types, this.byId(), this.ranges, true);\n if (type.issue || !type.type || this.loopCounters.has(place.root))\n this.fail(node, \"PLC3002\", type.issue ?? \"This PLC storage is read-only.\");\n const overlaps = (source: Place) =>\n source.root === place.root &&\n source.path.every((segment, index) => {\n const other = place.path[index];\n return (\n !other ||\n segment.kind !== \"field\" ||\n other.kind !== \"field\" ||\n segment.name === other.name\n );\n });\n if (this.copySources.some(overlaps))\n this.fail(\n node,\n \"PLC3003\",\n \"This value was assigned into other storage, which holds a copy, so this write will not reach it. Assign it afterwards, or use copy(value) if separate values are intended.\",\n );\n return { place, type: type.type };\n }\n\n private statement(node: ts.Statement, locals: Variable[]): Statement[] {\n const origin = { span: span(node) };\n if (ts.isBlock(node)) return this.statements(node.statements, locals);\n if (ts.isEmptyStatement(node)) return [];\n if (ts.isIfStatement(node)) {\n const condition = this.expression(node.expression, \"BOOL\");\n const original = new Map(this.ranges);\n const branch = (body: ts.Statement | undefined, truth: boolean) => {\n this.ranges.clear();\n for (const [root, range] of narrowRanges(\n condition,\n truth,\n this.resolver.types,\n this.byId(),\n original,\n ))\n this.ranges.set(root, range);\n try {\n return body ? this.body(body, locals) : [];\n } finally {\n this.ranges.clear();\n for (const [root, range] of original) this.ranges.set(root, range);\n }\n };\n return [\n {\n ...origin,\n kind: \"if\",\n condition,\n then: branch(node.thenStatement, true),\n else: branch(node.elseStatement, false),\n },\n ];\n }\n if (ts.isReturnStatement(node)) {\n const result = this.activeFunction?.result;\n if (!result && node.expression)\n this.fail(node, \"PLC2001\", \"Void helpers and program entries cannot return a value.\");\n if (result && !node.expression)\n this.fail(node, \"PLC2001\", \"Typed helpers must return their declared PLC result.\");\n const value =\n node.expression && result\n ? this.implicitCopy(this.expression(node.expression, result))\n : undefined;\n return [{ ...origin, kind: \"return\", ...(value && { value }) }];\n }\n if (ts.isBreakStatement(node) || ts.isContinueStatement(node)) {\n if (ts.isBreakStatement(node) && this.breakTargets.at(-1) === \"switch\")\n this.fail(\n node,\n \"PLC1001\",\n \"Switch break must terminate its case; nested conditional switch breaks are unsupported.\",\n );\n if (node.label || !this.loopCounters.size)\n this.fail(\n node,\n \"PLC1001\",\n \"Loop control requires an enclosing bounded loop and cannot use a label.\",\n );\n return [{ ...origin, kind: ts.isBreakStatement(node) ? \"break\" : \"continue\" }];\n }\n if (ts.isVariableStatement(node)) return this.localDeclarations(node, locals);\n if (ts.isForStatement(node)) return this.loop(node, locals);\n if (ts.isForOfStatement(node)) return this.forOf(node, locals);\n if (ts.isSwitchStatement(node)) return this.switchStatement(node, locals);\n if (ts.isExpressionStatement(node)) {\n const expression = node.expression;\n if (ts.isCallExpression(expression)) {\n const update = this.update(expression);\n if (update) return [update];\n const call = this.call(expression);\n return [\n {\n ...origin,\n kind: \"invoke\",\n function: call.fn.id,\n arguments: call.arguments,\n ...(call.instance && { instance: call.instance }),\n ...(call.index && { index: call.index }),\n },\n ];\n }\n if (ts.isBinaryExpression(expression)) {\n const variable = this.target(expression.left);\n if (expression.operatorToken.kind !== ts.SyntaxKind.EqualsToken)\n this.fail(expression, \"PLC2001\", \"Use explicit assignment and arithmetic policies.\");\n const value = this.expression(expression.right, variable.type);\n this.recordCopySource(value);\n return [\n {\n ...origin,\n kind: \"assign\",\n destination: variable.place,\n value: this.implicitCopy(value),\n },\n ];\n }\n }\n this.fail(node, \"PLC1001\", `${ts.SyntaxKind[node.kind]} is not supported in PLC scan code.`);\n }\n\n private switchStatement(node: ts.SwitchStatement, locals: Variable[]): Statement[] {\n const origin = { span: span(node) };\n this.breakTargets.push(\"switch\");\n try {\n const value = this.expression(node.expression);\n const cases: { values: Constant[]; body: Statement[] }[] = [];\n let fallback: Statement[] = [];\n let pending: Constant[] = [],\n pendingDefault = false;\n for (const clause of node.caseBlock.clauses) {\n if (ts.isDefaultClause(clause)) pendingDefault = true;\n else {\n const constant = this.constant(this.expression(clause.expression, value.type));\n if (!constant)\n this.fail(clause, \"PLC2001\", \"Case values must be compile-time constants.\");\n pending.push(constant);\n }\n if (!clause.statements.length) continue;\n let statements = [...clause.statements];\n const last = statements.at(-1);\n if (last && ts.isBreakStatement(last) && !last.label) statements = statements.slice(0, -1);\n else if (statements.length && !(last && ts.isReturnStatement(last)))\n this.fail(\n clause,\n \"PLC1001\",\n \"Switch cases must end with break or return; fallthrough is prohibited.\",\n );\n const body = this.statements(statements, locals);\n if (pending.length) cases.push({ values: pending, body });\n if (pendingDefault) fallback = body;\n pending = [];\n pendingDefault = false;\n }\n if (pending.length) cases.push({ values: pending, body: [] });\n return [{ ...origin, kind: \"switch\", value, cases, fallback }];\n } finally {\n this.breakTargets.pop();\n }\n }\n\n private localDeclarations(node: ts.VariableStatement, locals: Variable[]): Statement[] {\n const origin = { span: span(node) };\n if (!(node.declarationList.flags & (ts.NodeFlags.Let | ts.NodeFlags.Const)))\n this.fail(node, \"PLC1001\", \"Use let or const for invocation locals.\");\n return node.declarationList.declarations.flatMap((declaration) => {\n if (!ts.isIdentifier(declaration.name))\n this.fail(declaration, \"PLC1001\", \"Destructuring is not supported.\");\n if (!declaration.initializer)\n this.fail(declaration, \"PLC3001\", \"Initialize invocation-local PLC variables explicitly.\");\n const annotation = declaration.type ? this.type(declaration.type) : undefined;\n if (annotation && !this.resolver.isValue(annotation))\n this.fail(\n declaration,\n \"PLC2001\",\n \"Invocation locals require value types, not instances or borrow schemas.\",\n );\n if (annotation?.io)\n this.fail(declaration, \"PLC4002\", \"Logical I/O cannot be invocation-local.\");\n if (\n !annotation &&\n !(node.declarationList.flags & ts.NodeFlags.Const) &&\n this.numericLiteral(declaration.initializer) === undefined &&\n ![ts.SyntaxKind.TrueKeyword, ts.SyntaxKind.FalseKeyword].includes(\n declaration.initializer.kind,\n )\n )\n this.fail(declaration, \"PLC2001\", \"Annotate mutable numeric storage explicitly.\");\n const initial = this.expression(declaration.initializer, annotation?.type);\n if (\n node.declarationList.flags & ts.NodeFlags.Const &&\n initial.kind === \"load\" &&\n aggregate(this.resolver.types.get(initial.type))\n ) {\n for (const segment of initial.place.path)\n if (segment.kind === \"index\" && !this.unchanging(segment.value))\n this.fail(\n declaration,\n \"PLC3003\",\n \"An alias index must keep its value while the alias is in scope; use copy(value) for a snapshot.\",\n );\n this.aliases.set(this.resolver.symbol(declaration.name), initial.place);\n return [];\n }\n this.recordCopySource(initial);\n const value = this.implicitCopy(initial);\n const variable: Variable = {\n id: this.storageId(declaration, declaration.name.text),\n name: declaration.name.text,\n type: value.type,\n storage: \"local\",\n mutable: !(node.declarationList.flags & ts.NodeFlags.Const),\n retain: false,\n span: span(declaration),\n };\n this.variables.set(this.resolver.symbol(declaration.name), variable);\n locals.push(variable);\n // A const is assigned once, so its initializer's range holds wherever it is read.\n const bound =\n !variable.mutable &&\n valueRange(value, this.resolver.types, this.byId(), this.ranges, this.instances);\n if (bound) this.ranges.set(variable.id, bound);\n return { ...origin, kind: \"assign\", destination: { root: variable.id, path: [] }, value };\n });\n }\n\n private loop(node: ts.ForStatement, locals: Variable[]): Statement[] {\n let counter: Variable;\n let initializer: ts.Expression;\n let existing = false;\n if (node.initializer && ts.isVariableDeclarationList(node.initializer)) {\n if (\n !(node.initializer.flags & ts.NodeFlags.Let) ||\n node.initializer.declarations.length !== 1\n )\n this.fail(\n node,\n \"PLC1001\",\n \"A bounded for loop requires one let counter or an existing counter assignment.\",\n );\n const declaration = node.initializer.declarations[0]!;\n if (!ts.isIdentifier(declaration.name) || !declaration.initializer)\n this.fail(node, \"PLC2001\", \"Initialize the integer loop counter.\");\n const annotation = declaration.type ? this.type(declaration.type) : { type: \"DINT\" };\n if (annotation.io)\n this.fail(declaration, \"PLC4002\", \"Loop counters cannot use I/O wrappers.\");\n counter = {\n id: this.storageId(declaration, declaration.name.text),\n name: declaration.name.text,\n type: annotation.type,\n storage: \"local\",\n mutable: true,\n retain: false,\n span: span(declaration),\n };\n this.variables.set(this.resolver.symbol(declaration.name), counter);\n locals.push(counter);\n initializer = declaration.initializer;\n } else if (\n node.initializer &&\n ts.isBinaryExpression(node.initializer) &&\n node.initializer.operatorToken.kind === ts.SyntaxKind.EqualsToken\n ) {\n const target = this.target(node.initializer.left);\n counter = this.byId().get(target.place.root)!;\n if (target.place.path.length || ![\"local\", \"module\", \"field\"].includes(counter.storage))\n this.fail(\n node.initializer,\n \"PLC1001\",\n \"An existing loop counter must be a local, module variable or private block field.\",\n );\n initializer = node.initializer.right;\n existing = true;\n } else\n this.fail(\n node,\n \"PLC1001\",\n \"Initialize one let counter or assign an existing counter in the for header.\",\n );\n const type = counter.type,\n plcType = this.resolver.types.get(type);\n if (plcType?.kind !== \"integer\")\n this.fail(node.initializer!, \"PLC2001\", \"Loop counters require integer types.\");\n const startExpression = this.expression(initializer, type);\n const start = this.constant(startExpression);\n const isCounter = (expression: ts.Expression): boolean => {\n const place = this.place(expression);\n return place.root === counter.id && place.path.length === 0;\n };\n const condition = node.condition;\n if (!condition || !ts.isBinaryExpression(condition) || !isCounter(condition.left))\n this.fail(node, \"PLC1001\", \"Loop condition must compare its counter to a bounded integer.\");\n const boundExpression = this.expression(condition.right, type);\n const bound = this.constant(boundExpression);\n let step: bigint;\n const increment = node.incrementor;\n if (\n increment &&\n (ts.isPostfixUnaryExpression(increment) || ts.isPrefixUnaryExpression(increment)) &&\n isCounter(increment.operand) &&\n [ts.SyntaxKind.PlusPlusToken, ts.SyntaxKind.MinusMinusToken].includes(increment.operator)\n )\n step = increment.operator === ts.SyntaxKind.PlusPlusToken ? 1n : -1n;\n else if (\n increment &&\n ts.isBinaryExpression(increment) &&\n isCounter(increment.left) &&\n [ts.SyntaxKind.PlusEqualsToken, ts.SyntaxKind.MinusEqualsToken].includes(\n increment.operatorToken.kind,\n )\n ) {\n const amount = this.constant(this.expression(increment.right, type));\n if (amount?.kind !== \"integer\" || BigInt(amount.value) <= 0n)\n this.fail(increment, \"PLC2001\", \"Loop step must be a positive constant integer.\");\n step =\n BigInt(amount.value) *\n (increment.operatorToken.kind === ts.SyntaxKind.PlusEqualsToken ? 1n : -1n);\n } else this.fail(node, \"PLC1001\", \"Use i++, i--, i += step or i -= step in the for header.\");\n const operator = condition.operatorToken.kind,\n ascending = step > 0n;\n if (\n !(\n ascending\n ? [ts.SyntaxKind.LessThanToken, ts.SyntaxKind.LessThanEqualsToken]\n : [ts.SyntaxKind.GreaterThanToken, ts.SyntaxKind.GreaterThanEqualsToken]\n ).includes(operator)\n )\n this.fail(condition, \"PLC2001\", \"Loop direction and comparison must agree.\");\n const exclusive =\n operator === ts.SyntaxKind.LessThanToken || operator === ts.SyntaxKind.GreaterThanToken;\n if (start?.kind !== \"integer\" || bound?.kind !== \"integer\") {\n const startRange = interval(startExpression, this.resolver.types, this.byId(), this.ranges);\n const limitRange = interval(boundExpression, this.resolver.types, this.byId(), this.ranges);\n if (!startRange || !limitRange)\n this.fail(node, \"PLC2001\", \"Loop bounds require finite integer ranges.\");\n const proof = loopBounds(startRange, limitRange, step, exclusive);\n if (proof.count > 1_000_000n)\n this.fail(node, \"PLC2001\", \"A scan loop cannot exceed 1,000,000 iterations.\");\n if (existing && proof.count > 0n) {\n const terminal = (step > 0n ? proof.range[1] : proof.range[0]) + step;\n const [minimum, maximum] = integerRange(plcType);\n if (terminal < minimum || terminal > maximum)\n this.fail(\n node,\n \"PLC2001\",\n \"The existing loop counter would overflow on its final increment.\",\n );\n }\n this.loopCounters.add(counter.id);\n this.ranges.set(counter.id, proof.range);\n this.breakTargets.push(\"loop\");\n try {\n return [\n {\n span: span(node),\n kind: \"for\",\n counter: counter.id,\n ...(existing && { counterScope: \"existing\" as const }),\n start: startExpression,\n limit: boundExpression,\n step: String(step),\n ...(exclusive && { exclusive: true as const }),\n maxIterations: Number(proof.count),\n body: this.body(node.statement, locals),\n },\n ];\n } finally {\n this.breakTargets.pop();\n this.loopCounters.delete(counter.id);\n this.ranges.delete(counter.id);\n }\n }\n const finish = BigInt(bound.value) + (exclusive ? (ascending ? -1n : 1n) : 0n),\n first = BigInt(start.value);\n const count = loopIterations(first, finish, step);\n if (count > 1_000_000n)\n this.fail(node, \"PLC2001\", \"A scan loop cannot exceed 1,000,000 iterations.\");\n if (existing) {\n const terminal = first + count * step,\n [minimum, maximum] = integerRange(plcType);\n if (terminal < minimum || terminal > maximum)\n this.fail(\n node,\n \"PLC2001\",\n \"The existing loop counter would overflow on its final increment.\",\n );\n }\n this.loopCounters.add(counter.id);\n this.ranges.set(counter.id, first <= finish ? [first, finish] : [finish, first]);\n let body: Statement[];\n this.breakTargets.push(\"loop\");\n try {\n body = this.body(node.statement, locals);\n } finally {\n this.breakTargets.pop();\n this.loopCounters.delete(counter.id);\n this.ranges.delete(counter.id);\n }\n if (!count)\n return existing\n ? [\n {\n kind: \"assign\",\n destination: { root: counter.id, path: [] },\n value: { kind: \"constant\", type, value: start, span: span(initializer) },\n span: span(node.initializer!),\n },\n ]\n : [];\n const limit: Expression = {\n kind: \"constant\",\n type,\n value: { kind: \"integer\", value: String(finish) },\n span: span(condition.right),\n };\n return [\n {\n span: span(node),\n kind: \"for\",\n counter: counter.id,\n ...(existing && { counterScope: \"existing\" as const }),\n start: { kind: \"constant\", type, value: start, span: span(initializer) },\n limit,\n step: String(step),\n maxIterations: Number(count),\n body,\n },\n ];\n }\n\n /**\n * `for (const element of array)` is a bounded FOR over the array's declared bounds whose\n * element binding aliases `array[counter]`. `array.entries()` also binds the counter. An\n * enum-keyed Record iterates with `Object.values(record)`, or SDK `entries(record)` for its key.\n */\n private forOf(node: ts.ForOfStatement, locals: Variable[]): Statement[] {\n const list = node.initializer;\n if (\n node.awaitModifier ||\n !ts.isVariableDeclarationList(list) ||\n !(list.flags & ts.NodeFlags.Const) ||\n list.declarations.length !== 1\n )\n this.fail(node, \"PLC1001\", \"for…of binds one const element of a PLC array.\");\n let iterated = node.expression,\n form: \"elements\" | \"entries\" | \"recordValues\" | \"recordEntries\" = \"elements\";\n if (ts.isCallExpression(iterated)) {\n const callee = iterated.expression;\n if (\n ts.isPropertyAccessExpression(callee) &&\n callee.name.text === \"entries\" &&\n !iterated.arguments.length\n ) {\n form = \"entries\";\n iterated = callee.expression;\n } else if (iterated.arguments.length === 1) {\n if (this.sdkCall(iterated) === \"entries\") form = \"recordEntries\";\n else if (\n ts.isPropertyAccessExpression(callee) &&\n callee.name.text === \"values\" &&\n ts.isIdentifier(callee.expression) &&\n this.resolver.standardLibrary(this.resolver.symbol(callee.expression))\n )\n form = \"recordValues\";\n if (form !== \"elements\") iterated = iterated.arguments[0]!;\n }\n }\n const binding = list.declarations[0]!.name,\n keyed = form === \"entries\" || form === \"recordEntries\";\n const names = ts.isArrayBindingPattern(binding)\n ? binding.elements.map((element) =>\n ts.isBindingElement(element) &&\n !element.dotDotDotToken &&\n !element.initializer &&\n ts.isIdentifier(element.name)\n ? element.name\n : undefined,\n )\n : [undefined, ts.isIdentifier(binding) ? binding : undefined];\n const [indexName, elementName] = names;\n if (names.length !== 2 || !elementName || Boolean(indexName) !== keyed)\n this.fail(\n binding,\n \"PLC1001\",\n \"Bind one element, or destructure [index, element] from array.entries() or entries(record).\",\n );\n const place = this.place(iterated),\n array = this.resolver.types.get(\n placeType(place, this.resolver.types, this.byId(), this.ranges).type ?? \"\",\n );\n if (array?.kind !== \"array\" || Boolean(array.index) !== form.startsWith(\"record\"))\n this.fail(\n node.expression,\n \"PLC2001\",\n \"for…of iterates a FixedArray, array.entries(), or an enum-keyed Record through Object.values(record) or entries(record).\",\n );\n for (const segment of place.path)\n if (segment.kind === \"index\" && !this.unchanging(segment.value))\n this.fail(node.expression, \"PLC3003\", \"An iterated array's index must keep its value.\");\n\n const origin = { span: span(node) };\n const local = (declaration: ts.Node, name: string, type: string): Variable => {\n const variable: Variable = {\n id: this.storageId(declaration, name),\n name,\n type,\n storage: \"local\",\n mutable: true,\n retain: false,\n span: span(declaration),\n };\n locals.push(variable);\n return variable;\n };\n const constant = (type: string, value: string): Expression => ({\n ...origin,\n kind: \"constant\",\n type,\n value: { kind: \"integer\", value },\n });\n const counter = local(node, form === \"entries\" && indexName ? indexName.text : \"index\", \"DINT\"),\n index: Expression = {\n ...origin,\n kind: \"load\",\n type: \"DINT\",\n place: { root: counter.id, path: [] },\n };\n const before: Statement[] = [],\n prefix: Statement[] = [];\n const readonly = [counter.id];\n const enumeration = array.index ? this.resolver.types.get(array.index) : undefined;\n if (indexName && enumeration?.kind === \"enum\") {\n // The enum key follows the counter: a CASE at the top of each iteration selects its member.\n const key = local(indexName, indexName.text, enumeration.id);\n const assign = (value: string): Statement => ({\n ...origin,\n kind: \"assign\",\n destination: { root: key.id, path: [] },\n value: constant(key.type, value),\n });\n before.push(assign(String(array.lowerBound)));\n prefix.push({\n ...origin,\n kind: \"switch\",\n value: index,\n cases: enumeration.members.map((member) => ({\n values: [{ kind: \"integer\", value: member.value }],\n body: [assign(member.value)],\n })),\n fallback: [],\n });\n readonly.push(key.id);\n this.variables.set(this.resolver.symbol(indexName), key);\n } else if (indexName) this.variables.set(this.resolver.symbol(indexName), counter);\n this.aliases.set(this.resolver.symbol(elementName), {\n root: place.root,\n path: [...place.path, { kind: \"index\", value: index }],\n });\n\n const upper = array.lowerBound + array.length - 1;\n for (const id of readonly) this.loopCounters.add(id);\n this.ranges.set(counter.id, [BigInt(array.lowerBound), BigInt(upper)]);\n this.breakTargets.push(\"loop\");\n try {\n return [\n ...before,\n {\n ...origin,\n kind: \"for\",\n counter: counter.id,\n start: constant(\"DINT\", String(array.lowerBound)),\n limit: constant(\"DINT\", String(upper)),\n step: \"1\",\n maxIterations: array.length,\n body: [...prefix, ...this.body(node.statement, locals)],\n },\n ];\n } finally {\n this.breakTargets.pop();\n for (const id of readonly) this.loopCounters.delete(id);\n this.ranges.delete(counter.id);\n }\n }\n}\n",
|
|
7
7
|
"import { runtimeSources } from \"./module-graph.ts\";\nimport ts from \"typescript\";\nimport { createHash } from \"node:crypto\";\nimport { dirname } from \"node:path\";\nimport { error, type Diagnostic } from \"@tsplc/compiler/ir\";\n\n/** Telemetry is sampled by its authored task and published read-only by the backend. */\nexport const lowerExposure = (program: ts.Program, sdk: string) => {\n const checker = program.getTypeChecker();\n const sources = new Map<string, string>();\n const diagnostics: Diagnostic[] = [];\n const variables = new Map<string, { name: string; version: string }>();\n const names = new Set<string>();\n const symbol = (node: ts.Node) => {\n let value = checker.getSymbolAtLocation(node);\n while (value && value.flags & ts.SymbolFlags.Alias) value = checker.getAliasedSymbol(value);\n return value;\n };\n for (const source of runtimeSources(program)) {\n if (source.isDeclarationFile) continue;\n const edits: { start: number; end: number; text: string }[] = [];\n const extra: string[] = [];\n const visit = (node: ts.Node): void => {\n if (\n !ts.isCallExpression(node) ||\n symbol(node.expression)?.name !== \"expose\" ||\n !symbol(node.expression)?.declarations?.some((value) =>\n value.getSourceFile().fileName.startsWith(dirname(sdk) + \"/\"),\n )\n ) {\n ts.forEachChild(node, visit);\n return;\n }\n const fail = (message: string) => {\n const start = node.getStart(source),\n position = source.getLineAndCharacterOfPosition(start);\n diagnostics.push(\n error(\"PLC1014\", message, {\n file: source.fileName,\n start,\n end: node.end,\n line: position.line + 1,\n column: position.character + 1,\n }),\n );\n };\n const [label, values] = node.arguments;\n if (\n !label ||\n !ts.isStringLiteral(label) ||\n !/^[A-Za-z_][A-Za-z0-9_]*$/.test(label.text) ||\n label.text === \"__proto__\" ||\n !values ||\n !ts.isObjectLiteralExpression(values) ||\n !ts.isExpressionStatement(node.parent)\n ) {\n fail(\n \"expose requires a literal machine name and a flat telemetry object in a synchronous cyclic routine.\",\n );\n return;\n }\n let owner: ts.Node | undefined = node.parent;\n while (owner && !ts.isFunctionLike(owner)) owner = owner.parent;\n if (\n !owner ||\n (ts.canHaveModifiers(owner) &&\n ts.getModifiers(owner)?.some((value) => value.kind === ts.SyntaxKind.AsyncKeyword))\n ) {\n fail(\"Sample telemetry from a synchronous cyclic routine, outside async continuations.\");\n return;\n }\n if (names.has(label.text)) {\n fail(`Duplicate machine exposure ${label.text}.`);\n return;\n }\n names.add(label.text);\n const fields: { name: string; type: string; value: string }[] = [];\n for (const property of values.properties) {\n if (\n !ts.isPropertyAssignment(property) ||\n !ts.isIdentifier(property.name) ||\n [\"contractVersion\", \"__proto__\"].includes(property.name.text)\n ) {\n fail(\"Telemetry uses named scalar fields; contractVersion and __proto__ are reserved.\");\n return;\n }\n const value = property.initializer;\n const type = checker.getTypeAtLocation(value);\n let annotation: string | undefined;\n if (type.flags & ts.TypeFlags.BooleanLike) annotation = \"BOOL\";\n const declaration = symbol(\n ts.isPropertyAccessExpression(value) ? value.name : value,\n )?.valueDeclaration;\n if (\n declaration &&\n (ts.isPropertySignature(declaration) ||\n ts.isPropertyDeclaration(declaration) ||\n ts.isVariableDeclaration(declaration) ||\n ts.isParameter(declaration)) &&\n declaration.type\n ) {\n const text = declaration.type.getText(declaration.getSourceFile());\n if (/^(BOOL|SINT|USINT|BYTE|INT|UINT|WORD|DINT|UDINT|DWORD|STRING<\\d+>)$/.test(text))\n annotation = text;\n }\n if (!annotation) {\n fail(\n `Telemetry ${property.name.text} needs a concrete BOOL, integer up to 32 bits or bounded STRING annotation.`,\n );\n return;\n }\n fields.push({ name: property.name.text, type: annotation, value: value.getText(source) });\n }\n if (!fields.length) {\n fail(\"Expose at least one telemetry field.\");\n return;\n }\n const name = `tsplcExposed_${label.text}`;\n const record = `TsplcTelemetry_${label.text}`;\n const version = createHash(\"sha256\")\n .update(\n JSON.stringify({\n abi: 1,\n name: label.text,\n fields: fields.map(({ name, type }) => ({ name, type })),\n }),\n )\n .digest(\"hex\");\n extra.push(\n `export interface ${record}{contractVersion:STRING<64>;${fields.map((field) => `${field.name}:${field.type}`).join(\";\")}}\\nexport let ${name}:${record}=defaultValue<${record}>();`,\n );\n variables.set(`${source.fileName}:${name}`, { name: label.text, version });\n edits.push({\n start: node.getStart(source),\n end: node.end,\n text: `{${name}.contractVersion=${JSON.stringify(version)};${fields.map((field) => `${name}.${field.name}=${field.value};`).join(\"\")}}`,\n });\n };\n visit(source);\n if (!edits.length) continue;\n let text = source.text;\n for (const edit of edits.sort((a, b) => b.start - a.start))\n text = text.slice(0, edit.start) + edit.text + text.slice(edit.end);\n sources.set(source.fileName, text + \"\\n\" + extra.join(\"\\n\"));\n }\n return { sources, diagnostics, variables };\n};\n",
|
|
8
8
|
"import { runtimeSources } from \"./module-graph.ts\";\nimport ts from \"typescript\";\nimport { dirname, join, relative } from \"node:path\";\nimport { error, type Diagnostic } from \"@tsplc/compiler/ir\";\nimport {\n isIntegerType,\n serviceContract,\n servicePath,\n wireLayout,\n wireRecord,\n type ServiceContract,\n type WireField,\n type WireScalar,\n} from \"@tsplc/server\";\n\n/** The server section's transport; each client's type argument names its router. */\nexport interface ServiceOptions {\n transport: \"http\" | \"opcua\";\n baseUrlEnv?: string;\n}\n\n/** A procedure record read from its type, with the PLC enum each enum field names. */\ninterface RecordLayout {\n fields: Record<string, WireField>;\n enums: Record<string, ts.EnumDeclaration>;\n}\n\nconst property = (checker: ts.TypeChecker, type: ts.Type, name: string) => {\n const symbol = type.getProperty(name);\n return symbol && checker.getTypeOfSymbol(symbol);\n};\n\n/** An `iec.*` schema's layout, which its type carries as an optional phantom property. */\nconst layoutNumber = (checker: ts.TypeChecker, type: ts.Type, name: string, label: string) => {\n const brand = property(checker, type, wireLayout);\n const value = brand && property(checker, checker.getNonNullableType(brand), name);\n if (!value) return undefined;\n if (!value.isNumberLiteral()) throw new Error(`${label}: ${name} must be a literal number.`);\n return value.value;\n};\n\nconst scalarLayout = (\n checker: ts.TypeChecker,\n type: ts.Type,\n label: string,\n): { field: WireScalar; enumeration?: ts.EnumDeclaration } => {\n if (type.flags & ts.TypeFlags.Boolean) return { field: { kind: \"boolean\" } };\n // An enum type is the union of its member literals.\n const first = type.isUnion() ? type.types[0] : type;\n const member = first?.symbol?.valueDeclaration;\n if (first && first.flags & ts.TypeFlags.EnumLiteral && member && ts.isEnumMember(member)) {\n const members: Record<string, number> = {};\n for (const item of member.parent.members) {\n const value = checker.getConstantValue(item);\n if (typeof value !== \"number\")\n throw new Error(`${label}: PLC enums require numeric members.`);\n members[item.name.getText()] = value;\n }\n return { field: { kind: \"enum\", members }, enumeration: member.parent };\n }\n const capacity = layoutNumber(checker, type, \"capacity\", label);\n if (capacity !== undefined) return { field: { kind: \"string\", capacity } };\n const brand = property(checker, type, wireLayout);\n const iec = brand && property(checker, checker.getNonNullableType(brand), \"iec\");\n if (iec?.isStringLiteral() && isIntegerType(iec.value)) {\n const minimum = layoutNumber(checker, type, \"minimum\", label);\n const maximum = layoutNumber(checker, type, \"maximum\", label);\n if (minimum !== undefined && maximum !== undefined)\n return { field: { kind: \"integer\", iec: iec.value, minimum, maximum } };\n }\n throw new Error(\n `${label}: use z.boolean(), z.enum() of a numeric enum, iec.STRING(), or an integer such as iec.INT().`,\n );\n};\n\nconst recordLayout = (\n checker: ts.TypeChecker,\n type: ts.Type,\n label: string,\n output: boolean,\n): RecordLayout => {\n const fields: Record<string, WireField> = {};\n const enums: Record<string, ts.EnumDeclaration> = {};\n // A procedure without `.input()` takes `void`.\n if (!(type.flags & ts.TypeFlags.Void)) {\n if (\n !(type.flags & ts.TypeFlags.Object) ||\n type.getStringIndexType() ||\n type.getNumberIndexType() ||\n type.getCallSignatures().length\n )\n throw new Error(`${label}: PLC procedures exchange one closed z.strictObject() record.`);\n for (const field of type.getProperties()) {\n const key = `${label}.${field.name}`;\n if (field.flags & ts.SymbolFlags.Optional)\n throw new Error(`${key}: optional wire fields are unsupported.`);\n const value = checker.getTypeOfSymbol(field);\n const length = layoutNumber(checker, value, \"length\", key);\n const element = length === undefined ? undefined : value.getNumberIndexType();\n const scalar = scalarLayout(checker, element ?? value, key);\n fields[field.name] =\n length === undefined ? scalar.field : { kind: \"array\", length, element: scalar.field };\n if (scalar.enumeration) enums[field.name] = scalar.enumeration;\n }\n }\n return { fields: wireRecord(fields, label, output).fields, enums };\n};\n\n/** Identifies a record by layout, so every name for it lowers to one PLC struct. */\nconst recordKey = (layout: RecordLayout) =>\n JSON.stringify([\n layout.fields,\n Object.entries(layout.enums)\n .map(([field, value]) => [field, value.getSourceFile().fileName, value.name.text])\n .sort(),\n ]);\n\nconst procedureAt = (checker: ts.TypeChecker, router: ts.Type, path: readonly string[]) => {\n let type = property(checker, router, \"_def\");\n type = type && property(checker, type, \"record\");\n for (const part of path) type = type && property(checker, type, part);\n const definition = type && property(checker, type, \"_def\");\n if (!definition || !property(checker, definition, \"procedure\")) return undefined;\n const kind = property(checker, definition, \"type\");\n const types = property(checker, definition, \"$types\");\n const input = types && property(checker, types, \"input\");\n const output = types && property(checker, types, \"output\");\n if (!kind?.isStringLiteral() || !input || !output) return undefined;\n return { kind: kind.value, input, output };\n};\n\nconst pascal = (path: string) =>\n path\n .split(\".\")\n .map((part) => part[0]!.toUpperCase() + part.slice(1))\n .join(\"\");\n\n/**\n * Replaces each `createServiceClient<Router>()` call with an in-memory module of the called\n * procedures, read from the router's type: the server never runs and no file is written.\n */\nexport const lowerServices = (\n program: ts.Program,\n sdk: string,\n options: ServiceOptions | undefined,\n) => {\n const sources = new Map<string, string>();\n const diagnostics: Diagnostic[] = [];\n const records = new Map<string, { name: string; layout: RecordLayout }>();\n const calls = new Map<string, { contract: ServiceContract; input: string; output: string }>();\n const checker = program.getTypeChecker();\n const symbol = (node: ts.Node) => {\n let value = checker.getSymbolAtLocation(node);\n while (value && value.flags & ts.SymbolFlags.Alias) value = checker.getAliasedSymbol(value);\n return value;\n };\n const fail = (node: ts.Node, code: string, message: string) => {\n const source = node.getSourceFile(),\n start = node.getStart(source),\n position = source.getLineAndCharacterOfPosition(start);\n diagnostics.push(\n error(code, message, {\n file: source.fileName,\n start,\n end: node.end,\n line: position.line + 1,\n column: position.character + 1,\n }),\n );\n };\n const record = (layout: RecordLayout, name: string) => {\n const key = recordKey(layout);\n const existing = records.get(key);\n if (existing) return existing.name;\n records.set(key, { name, layout });\n return name;\n };\n\n const clients = new Map<ts.Symbol, ts.Type>();\n let file: string | undefined;\n const sourceFiles = runtimeSources(program).filter((source) => !source.isDeclarationFile);\n for (const source of sourceFiles)\n for (const statement of source.statements) {\n if (!ts.isVariableStatement(statement)) continue;\n for (const declaration of statement.declarationList.declarations) {\n const call = declaration.initializer;\n if (\n !call ||\n !ts.isCallExpression(call) ||\n symbol(call.expression)?.name !== \"createServiceClient\" ||\n !symbol(call.expression)?.declarations?.some((value) =>\n value.getSourceFile().fileName.startsWith(dirname(sdk) + \"/\"),\n )\n )\n continue;\n const router = call.typeArguments?.[0];\n const client = symbol(declaration.name);\n if (!router || !client || !(statement.declarationList.flags & ts.NodeFlags.Const))\n fail(\n declaration,\n \"PLC1013\",\n \"Create a service client as a module constant: const services = createServiceClient<AppRouter>().\",\n );\n else if (!options)\n fail(call, \"PLC1013\", \"Configure server in tsplc.config.ts to call the server.\");\n else if (options.transport === \"http\" && !options.baseUrlEnv)\n fail(call, \"PLC1013\", \"HTTP service transport requires server.baseUrlEnv.\");\n else {\n clients.set(client, checker.getTypeFromTypeNode(router));\n file ??= join(dirname(source.fileName), \".tsplc-services.ts\");\n }\n }\n }\n\n for (const source of sourceFiles) {\n const edits: { start: number; end: number; text: string }[] = [];\n const imports = new Map<string, string>();\n const visit = (node: ts.Node): void => {\n if (ts.isImportDeclaration(node) && ts.isStringLiteral(node.moduleSpecifier)) {\n const clause = node.importClause;\n const bindings = clause?.namedBindings;\n const typeOnly =\n clause?.isTypeOnly ||\n (!clause?.name &&\n bindings &&\n ts.isNamedImports(bindings) &&\n bindings.elements.every((element) => element.isTypeOnly));\n if (!typeOnly && clause && bindings && ts.isNamedImports(bindings)) {\n const elements = bindings.elements.filter((element) => {\n const imported = symbol(element.name);\n return !imported || !clients.has(imported);\n });\n if (elements.length !== bindings.elements.length)\n edits.push({\n start: node.getStart(source),\n end: node.end,\n text:\n elements.length || clause.name\n ? ts\n .createPrinter()\n .printNode(\n ts.EmitHint.Unspecified,\n ts.factory.updateImportDeclaration(\n node,\n node.modifiers,\n ts.factory.updateImportClause(\n clause,\n clause.isTypeOnly,\n clause.name,\n ts.factory.updateNamedImports(bindings, elements),\n ),\n node.moduleSpecifier,\n node.attributes,\n ),\n source,\n )\n : \"\",\n });\n }\n if (\n !typeOnly &&\n (node.moduleSpecifier.text.startsWith(\"node:\") ||\n [\"@tsplc/server\", \"@trpc/server\", \"zod\", \"fs\", \"http\", \"https\", \"net\", \"tls\"].includes(\n node.moduleSpecifier.text,\n ))\n )\n fail(\n node,\n \"PLC1013\",\n `Server runtime import ${node.moduleSpecifier.text} cannot execute in PLC code. Expose a PLC procedure on the server router and call it through createServiceClient instead.`,\n );\n }\n if (ts.isVariableStatement(node)) {\n const clientStatement = node.declarationList.declarations.some((declaration) => {\n const declared = symbol(declaration.name);\n return declared && clients.has(declared);\n });\n if (clientStatement) {\n edits.push({ start: node.getStart(source), end: node.end, text: \"\" });\n return;\n }\n }\n if (clients.size && ts.isPropertyAccessExpression(node)) {\n const parts: string[] = [];\n let root: ts.Expression = node;\n while (ts.isPropertyAccessExpression(root)) {\n parts.unshift(root.name.text);\n root = root.expression;\n }\n const client = symbol(root);\n const router = client && clients.get(client);\n const procedure = router && procedureAt(checker, router, parts);\n if (router) {\n const path = parts.join(\".\");\n if (!procedure) {\n fail(node, \"PLC1013\", `${path} is not a procedure of the client's router.`);\n return;\n }\n let call = calls.get(path);\n if (!call) {\n try {\n if (procedure.kind !== \"query\" && procedure.kind !== \"mutation\")\n throw new Error(\n `${path}: subscriptions use a different transport; expose a query or mutation to the PLC.`,\n );\n const input = recordLayout(checker, procedure.input, `${path}.input`, false);\n const output = recordLayout(checker, procedure.output, `${path}.output`, true);\n call = {\n contract: serviceContract(\n path,\n procedure.kind,\n { fields: input.fields },\n { fields: output.fields },\n ),\n input: record(input, `${pascal(path)}Input`),\n output: record(output, `${pascal(path)}Output`),\n };\n calls.set(path, call);\n } catch (cause) {\n fail(node, \"PLC2001\", cause instanceof Error ? cause.message : String(cause));\n return;\n }\n }\n const name = `tsplcService_${path.replaceAll(\".\", \"_\")}`;\n const local = imports.get(name) ?? `tsplcRemote${imports.size}`;\n imports.set(name, local);\n edits.push({ start: node.getStart(source), end: node.end, text: local });\n return;\n }\n }\n ts.forEachChild(node, visit);\n };\n visit(source);\n if (!edits.length) continue;\n let text = source.text;\n for (const edit of edits.sort((a, b) => b.start - a.start))\n text = text.slice(0, edit.start) + edit.text + text.slice(edit.end);\n if (imports.size && file) {\n const path = relative(dirname(source.fileName), file).replaceAll(\"\\\\\", \"/\");\n text += `\\nimport {${[...imports].map(([name, local]) => `${name} as ${local}`).join(\",\")}} from ${JSON.stringify(path.startsWith(\"../\") ? path : `./${path}`)};\\n`;\n }\n sources.set(source.fileName, text);\n }\n if (file && options) sources.set(file, serviceModule(records, calls, options));\n return {\n sources,\n diagnostics,\n file,\n records: new Map([...records].map(([key, { name }]) => [key, name])),\n };\n};\n\nconst serviceModule = (\n records: ReadonlyMap<string, { name: string; layout: RecordLayout }>,\n calls: ReadonlyMap<string, { contract: ServiceContract; input: string; output: string }>,\n options: ServiceOptions,\n) => {\n const enums = new Map<ts.EnumDeclaration, string>();\n const enumName = (declaration: ts.EnumDeclaration) => {\n const name = enums.get(declaration) ?? `tsplcEnum${enums.size}`;\n enums.set(declaration, name);\n return name;\n };\n const scalar = (field: WireScalar, enumeration: ts.EnumDeclaration | undefined) => {\n switch (field.kind) {\n case \"boolean\":\n return \"BOOL\";\n case \"integer\":\n return field.iec;\n case \"string\":\n return `STRING<${field.capacity}>`;\n case \"enum\":\n return enumName(enumeration!);\n }\n };\n const interfaces = [...records.values()].map(({ name, layout }) => {\n const fields = Object.entries(layout.fields).map(([key, field]) => {\n const enumeration = layout.enums[key];\n const type =\n field.kind === \"array\"\n ? `FixedArray<${scalar(field.element, enumeration)},${field.length}>`\n : scalar(field, enumeration);\n return `${key}:${type}`;\n });\n return `export interface ${name}{${fields.join(\";\")}}`;\n });\n const functions = [...calls.values()]\n .sort((left, right) => left.contract.path.localeCompare(right.contract.path))\n .map(({ contract, input, output }) => {\n const hasInput = Object.keys(contract.input.fields).length > 0;\n const request = hasInput ? \"input\" : `defaultValue<${input}>()`;\n const operation =\n options.transport === \"http\"\n ? `tsplcServiceFetch<${output}>(\\`\\${tsplcServiceBaseUrl}${servicePath(contract)}\\`,{method:\"POST\",json:${request}})`\n : `tsplcServiceCall<${output},${input}>(${JSON.stringify(servicePath(contract))},${request})`;\n return `export const tsplcService_${contract.path.replaceAll(\".\", \"_\")}=async(${hasInput ? `input:${input}` : \"\"}):Promise<${output}>=>{return await ${operation};};`;\n });\n const transport =\n options.transport === \"http\"\n ? `import {fetch as tsplcServiceFetch} from \"@tsplc/compiler/async\";\\nimport {env as tsplcServiceEnv} from \"@tsplc/compiler/config\";`\n : `import {opcuaCall as tsplcServiceCall} from \"@tsplc/compiler/async\";`;\n const enumImports = [...enums].map(\n ([declaration, name]) =>\n `import type {${declaration.name.text} as ${name}} from ${JSON.stringify(declaration.getSourceFile().fileName)};`,\n );\n const baseUrl =\n options.transport === \"http\"\n ? `const tsplcServiceBaseUrl:STRING<512>=tsplcServiceEnv<STRING<512>>(${JSON.stringify(options.baseUrlEnv)});`\n : \"\";\n return [transport, ...enumImports, baseUrl, ...interfaces, ...functions].join(\"\\n\") + \"\\n\";\n};\n\n/** Lowers a type that names a called procedure's record, such as `inferRouterOutputs<AppRouter>[\"a\"][\"b\"]`. */\nexport const serviceRecords = (\n program: ts.Program,\n lowering: { file: string | undefined; records: ReadonlyMap<string, string> },\n) => {\n const source = lowering.file && program.getSourceFile(lowering.file);\n if (!source) return undefined;\n const checker = program.getTypeChecker();\n const declarations = new Map(\n source.statements.filter(ts.isInterfaceDeclaration).map((value) => [value.name.text, value]),\n );\n return (type: ts.Type): ts.Symbol | undefined => {\n let key: string;\n try {\n key = recordKey(recordLayout(checker, type, \"record\", false));\n } catch {\n return undefined;\n }\n const name = lowering.records.get(key);\n const declaration = name === undefined ? undefined : declarations.get(name);\n return declaration && checker.getSymbolAtLocation(declaration.name);\n };\n};\n",
|
|
9
9
|
"import { runtimeSources } from \"./module-graph.ts\";\nimport ts from \"typescript\";\nimport { dirname, relative } from \"node:path\";\nimport { error, type Diagnostic } from \"@tsplc/compiler/ir\";\n\ntype Routine = ts.FunctionDeclaration | ts.MethodDeclaration;\ntype Handler = ts.ArrowFunction | ts.FunctionExpression | Routine;\ninterface Edit {\n start: number;\n end: number;\n text: string;\n}\ninterface Part {\n kind: \"then\" | \"catch\";\n handlers: readonly ts.Expression[];\n}\n\n/** Normalize promise syntax into named coroutines; scheduling stays in async lowering. */\nexport const lowerPromises = (program: ts.Program, sdk: string) => {\n const checker = program.getTypeChecker();\n const sources = new Map<string, string>(),\n diagnostics: Diagnostic[] = [];\n const runtimeBlocks = new Map<string, { kind: \"mailbox\" }>();\n const files = runtimeSources(program).filter((source) => !source.isDeclarationFile);\n const additions = new Map<ts.SourceFile, string[]>(),\n edits = new Map<ts.SourceFile, Edit[]>();\n const methods = new Map<ts.ClassDeclaration, string[]>();\n let sequence = 0;\n const symbol = (node: ts.Node): ts.Symbol | undefined => {\n let value = checker.getSymbolAtLocation(node);\n while (value && value.flags & ts.SymbolFlags.Alias) value = checker.getAliasedSymbol(value);\n return value;\n };\n const official = (node: ts.Node, name: string) => {\n const value = symbol(node);\n return (\n value?.name === name &&\n value.declarations?.some((declaration) =>\n declaration.getSourceFile().fileName.startsWith(dirname(sdk) + \"/\"),\n )\n );\n };\n const diagnosticFor = (node: ts.Node, message: string) => {\n const source = node.getSourceFile(),\n start = node.getStart(source),\n position = source.getLineAndCharacterOfPosition(start);\n return error(\"PLC1012\", message, {\n file: source.fileName,\n start,\n end: node.end,\n line: position.line + 1,\n column: position.character + 1,\n });\n };\n const fail: (node: ts.Node, message: string) => never = (node, message) => {\n throw { promiseDiagnostic: diagnosticFor(node, message) };\n };\n const append = (source: ts.SourceFile, text: string) =>\n additions.set(source, [...(additions.get(source) ?? []), text]);\n const edit = (node: ts.Node, text: string) => {\n const source = node.getSourceFile();\n edits.set(source, [\n ...(edits.get(source) ?? []),\n { start: node.getStart(source), end: node.end, text },\n ]);\n };\n const routines = new Map<ts.Symbol, Routine>();\n for (const source of files)\n for (const statement of source.statements) {\n const candidates = ts.isClassDeclaration(statement)\n ? statement.members.filter(ts.isMethodDeclaration)\n : [statement];\n for (const candidate of candidates)\n if (\n (ts.isFunctionDeclaration(candidate) || ts.isMethodDeclaration(candidate)) &&\n candidate.name\n )\n routines.set(symbol(candidate.name)!, candidate);\n }\n const asyncRoutine = (node: ts.Node) => {\n const fn = routines.get(symbol(node)!);\n return fn?.modifiers?.some((modifier) => modifier.kind === ts.SyntaxKind.AsyncKeyword)\n ? fn\n : undefined;\n };\n const job = (node: ts.Node) => {\n const declaration = symbol(node)?.declarations?.find(\n (value) => ts.isVariableDeclaration(value) || ts.isPropertyDeclaration(value),\n );\n if (\n !declaration ||\n (!ts.isVariableDeclaration(declaration) && !ts.isPropertyDeclaration(declaration))\n )\n return;\n const init = declaration.initializer;\n if (\n !init ||\n !ts.isCallExpression(init) ||\n !ts.isPropertyAccessExpression(init.expression) ||\n !official(init.expression.expression, \"backgroundTasks\") ||\n init.expression.name.text !== \"define\"\n )\n return;\n return asyncRoutine(init.arguments[0]!);\n };\n const operation = (call: ts.CallExpression) =>\n asyncRoutine(\n ts.isPropertyAccessExpression(call.expression) ? call.expression.name : call.expression,\n ) ??\n job(ts.isPropertyAccessExpression(call.expression) ? call.expression.name : call.expression);\n const isSdk = (call: ts.CallExpression, name: string) =>\n official(\n ts.isPropertyAccessExpression(call.expression) ? call.expression.name : call.expression,\n name,\n );\n const split = (\n expression: ts.Expression,\n ): { root: ts.CallExpression; parts: Part[] } | undefined => {\n if (!ts.isCallExpression(expression)) return;\n if (\n ts.isPropertyAccessExpression(expression.expression) &&\n [\"then\", \"catch\"].includes(expression.expression.name.text)\n ) {\n const prefix = split(expression.expression.expression);\n if (!prefix) return;\n return {\n root: prefix.root,\n parts: [\n ...prefix.parts,\n {\n kind: expression.expression.name.text === \"then\" ? \"then\" : \"catch\",\n handlers: expression.arguments,\n },\n ],\n };\n }\n if (operation(expression) || isSdk(expression, \"sleep\") || isSdk(expression, \"fetch\"))\n return { root: expression, parts: [] };\n };\n const aliases = new Map<ts.Node, string>();\n const typeImports = new Map<ts.SourceFile, Set<string>>();\n const typeText = (node: ts.TypeNode, source: ts.SourceFile): string => {\n if (node.kind === ts.SyntaxKind.VoidKeyword) return \"void\";\n if (node.getSourceFile() === source) return node.getText(source);\n let alias = aliases.get(node);\n if (!alias) {\n alias = `TsplcPromiseType${sequence++}`;\n aliases.set(node, alias);\n append(node.getSourceFile(), `export type ${alias}=${node.getText(node.getSourceFile())};`);\n }\n const path = relative(dirname(source.fileName), node.getSourceFile().fileName).replaceAll(\n \"\\\\\",\n \"/\",\n );\n const importedAliases = typeImports.get(source) ?? new Set<string>();\n if (importedAliases.has(alias)) return alias;\n importedAliases.add(alias);\n typeImports.set(source, importedAliases);\n append(\n source,\n `import type {${alias}} from ${JSON.stringify(path.startsWith(\".\") ? path : `./${path}`)};`,\n );\n return alias;\n };\n const expressionType = (node: ts.Expression, source: ts.SourceFile): string => {\n if (\n ts.isCallExpression(node) &&\n node.typeArguments?.[0] &&\n (official(node.expression, \"defaultValue\") ||\n official(node.expression, \"copy\") ||\n [\"exact\", \"wrap\", \"wrapAdd\", \"wrapMultiply\", \"saturate\"].some((name) =>\n official(node.expression, name),\n ))\n )\n return typeText(node.typeArguments[0], source);\n const name = ts.isPropertyAccessExpression(node) ? node.name : node;\n const declaration = symbol(name)?.declarations?.find(\n (value) =>\n (ts.isVariableDeclaration(value) ||\n ts.isParameter(value) ||\n ts.isPropertyDeclaration(value) ||\n ts.isPropertySignature(value)) &&\n value.type,\n );\n if (\n declaration &&\n (ts.isVariableDeclaration(declaration) ||\n ts.isParameter(declaration) ||\n ts.isPropertyDeclaration(declaration) ||\n ts.isPropertySignature(declaration)) &&\n declaration.type\n )\n return typeText(declaration.type, source);\n const type = checker.getTypeAtLocation(node);\n if (type.flags & ts.TypeFlags.BooleanLike) return \"BOOL\";\n if (type.flags & ts.TypeFlags.Void) return \"void\";\n if (type.symbol && type.symbol.name !== \"__type\" && type.flags & ts.TypeFlags.Object)\n return checker.typeToString(\n type,\n node,\n ts.TypeFormatFlags.NoTruncation | ts.TypeFormatFlags.UseAliasDefinedOutsideCurrentScope,\n );\n fail(\n node,\n \"Annotate this value with its concrete PLC type before using it in an async continuation.\",\n );\n };\n const isAggregate = (type: ts.Type | undefined) =>\n Boolean(type && type.flags & ts.TypeFlags.Object);\n const isPromise = (node: ts.Node) => {\n const type = checker.getTypeAtLocation(node);\n return checker.getAwaitedType(type) !== type;\n };\n const printer = ts.createPrinter();\n const replaceNames = (node: ts.Node, names: ReadonlyMap<ts.Symbol, string>): string => {\n const transformed = ts.transform(node, [\n (context) => (root) => {\n const visit = (value: ts.Node): ts.VisitResult<ts.Node> => {\n if (\n ts.isReturnStatement(value) &&\n value.expression &&\n !ts.isAwaitExpression(value.expression) &&\n isPromise(value.expression)\n ) {\n return ts.factory.updateReturnStatement(\n value,\n ts.factory.createAwaitExpression(\n ts.visitNode(value.expression, visit) as ts.Expression,\n ),\n );\n }\n if (ts.isShorthandPropertyAssignment(value)) {\n const key = checker.getShorthandAssignmentValueSymbol(value);\n const name = key && names.get(key);\n if (name)\n return ts.factory.createPropertyAssignment(\n value.name,\n ts.factory.createIdentifier(name),\n );\n }\n if (\n ts.isIdentifier(value) &&\n !(ts.isPropertyAccessExpression(value.parent) && value.parent.name === value) &&\n !(ts.isPropertyAssignment(value.parent) && value.parent.name === value)\n ) {\n const name = names.get(symbol(value)!);\n if (name) return ts.factory.createIdentifier(name);\n }\n return ts.visitEachChild(value, visit, context);\n };\n return ts.visitNode(root, visit) as typeof root;\n },\n ]);\n const value = printer.printNode(\n ts.EmitHint.Unspecified,\n transformed.transformed[0]!,\n node.getSourceFile(),\n );\n transformed.dispose();\n return value;\n };\n const hasBorrow = (node: ts.TypeNode, seen = new Set<ts.Symbol>()): boolean => {\n if (ts.isTypeReferenceNode(node)) {\n if (official(node.typeName, \"InOut\")) return true;\n const key = symbol(node.typeName);\n if (key && !seen.has(key)) {\n seen.add(key);\n for (const declaration of key.declarations ?? []) {\n if (\n ts.isInterfaceDeclaration(declaration) &&\n declaration.members.some(\n (member) =>\n ts.isPropertySignature(member) && member.type && hasBorrow(member.type, seen),\n )\n )\n return true;\n if (ts.isTypeAliasDeclaration(declaration) && hasBorrow(declaration.type, seen))\n return true;\n }\n }\n }\n return node.getChildren().some((child) => ts.isTypeNode(child) && hasBorrow(child, seen));\n };\n let diagnosticSource: ts.SourceFile | undefined;\n const diag = () => {\n if (!diagnosticSource) throw new Error(\"Missing async diagnostics owner\");\n return \"tsplcPromiseDiagnostics\";\n };\n const imported = new Set<ts.SourceFile>();\n const ensureImports = (source: ts.SourceFile) => {\n if (imported.has(source)) return;\n imported.add(source);\n append(\n source,\n `import {cooperativeTasks as tsplcCooperative,errorCode as tsplcErrorCode} from \"@tsplc/compiler/async\";import {wrapAdd as tsplcAsyncWrapAdd} from \"@tsplc/compiler/types\";`,\n );\n };\n const scopes = new Map<ts.SourceFile | ts.ClassDeclaration, string[]>();\n const make = (\n expression: ts.Expression,\n owner: ts.FunctionDeclaration | ts.MethodDeclaration,\n detached: boolean,\n ): string => {\n const parsed = split(expression);\n if (!parsed) fail(expression, \"Expected a statically resolved async call.\");\n const source = expression.getSourceFile();\n const classOwner =\n ts.isMethodDeclaration(owner) && ts.isClassDeclaration(owner.parent)\n ? owner.parent\n : undefined;\n ensureImports(source);\n diagnosticSource ??= source;\n const captures = new Map<ts.Symbol, { name: string; type: string; argument: string }>();\n const collectCaptures = (handler: Handler) => {\n const visit = (node: ts.Node): void => {\n if (\n ts.isIdentifier(node) &&\n !(ts.isPropertyAccessExpression(node.parent) && node.parent.name === node) &&\n !(ts.isPropertyAssignment(node.parent) && node.parent.name === node)\n ) {\n const key = ts.isShorthandPropertyAssignment(node.parent)\n ? checker.getShorthandAssignmentValueSymbol(node.parent)\n : symbol(node);\n const declaration = key?.valueDeclaration;\n if (\n declaration &&\n (ts.isVariableDeclaration(declaration) || ts.isParameter(declaration))\n ) {\n let scope: ts.Node | undefined = declaration.parent;\n while (scope && !ts.isFunctionLike(scope)) scope = scope.parent;\n if (scope === owner && !captures.has(key!)) {\n if (\n ts.isVariableDeclaration(declaration) &&\n (!ts.isVariableDeclarationList(declaration.parent) ||\n !(declaration.parent.flags & ts.NodeFlags.Const))\n )\n fail(\n node,\n \"Continuation captures must be const values; store mutable state on the controller instead.\",\n );\n if (!declaration.type)\n fail(node, \"Annotate a captured value with its concrete PLC type.\");\n if (hasBorrow(declaration.type))\n fail(\n node,\n \"A continuation cannot capture borrowed InOut storage; capture values or use controller state.\",\n );\n captures.set(key!, {\n name: `capture${captures.size}`,\n type: typeText(declaration.type, source),\n argument: node.text,\n });\n }\n }\n }\n ts.forEachChild(node, visit);\n };\n visit(handler.body!);\n };\n for (const part of parsed.parts)\n for (const value of part.handlers) {\n if (\n value.kind === ts.SyntaxKind.UndefinedKeyword ||\n value.kind === ts.SyntaxKind.NullKeyword\n )\n continue;\n if (ts.isArrowFunction(value) || ts.isFunctionExpression(value)) collectCaptures(value);\n }\n const captureNames = new Map([...captures].map(([key, value]) => [key, value.name]));\n const root = parsed.root,\n fn = operation(root);\n let resultAggregate = isAggregate(checker.getAwaitedType(checker.getTypeAtLocation(root)));\n const arguments_: { name: string; type: string; expression: string }[] = [];\n let invocation: string, resultType: string;\n if (fn) {\n const node = fn.type;\n if (!node || !ts.isTypeReferenceNode(node) || !node.typeArguments?.[0])\n fail(fn, \"Async calls need an explicit Promise<T> result.\");\n resultType = typeText(node.typeArguments[0], source);\n fn.parameters.forEach((parameter, index) => {\n if (!parameter.type || !root.arguments[index])\n fail(root, \"Async argument count differs from its concrete signature.\");\n arguments_.push({\n name: `argument${index}`,\n type: typeText(parameter.type, source),\n expression: root.arguments[index]!.getText(source),\n });\n });\n invocation = `${root.expression.getText(source)}(${arguments_.map((value) => value.name).join(\",\")})`;\n } else if (isSdk(root, \"sleep\")) {\n if (root.arguments.length !== 1) fail(root, \"sleep requires one TIME argument.\");\n arguments_.push({\n name: \"argument0\",\n type: \"TIME\",\n expression: root.arguments[0]!.getText(source),\n });\n invocation = `${root.expression.getText(source)}(argument0)`;\n resultType = \"void\";\n } else {\n const response = root.typeArguments?.[0];\n if (!response) fail(root, \"fetch requires a typed response.\");\n resultType = typeText(response, source);\n const options = root.arguments[1];\n if (options && !ts.isObjectLiteralExpression(options))\n fail(options, \"fetch options must be an inline object.\");\n let optionText = \"\";\n if (options && ts.isObjectLiteralExpression(options))\n optionText = options.properties\n .map((property) => {\n if (!ts.isPropertyAssignment(property)) fail(property, \"fetch requires named options.\");\n if (property.name.getText(source) !== \"json\") return property.getText(source);\n arguments_.push({\n name: \"argument0\",\n type: expressionType(property.initializer, source),\n expression: property.initializer.getText(source),\n });\n return \"json:argument0\";\n })\n .join(\",\");\n invocation = `${root.expression.getText(source)}<${root.typeArguments!.map((type) => type.getText(source)).join(\",\")}>(${root.arguments[0]!.getText(source)}${options ? `,{${optionText}}` : \"\"})`;\n }\n const params = [\n ...arguments_,\n ...[...captures.values()].map((value) => ({\n name: value.name,\n type: value.type,\n expression: value.argument,\n })),\n ];\n const signature = params.map((value) => `${value.name}:${value.type}`).join(\",\"),\n args = params.map((value) => value.name).join(\",\");\n const addHelper = (\n name: string,\n body: string,\n type: string,\n extra?: { type: string; argument: string },\n ) => {\n const text = `${classOwner ? \"private \" : \"export \"}async ${classOwner ? \"\" : \"function \"}${name}(${[signature, extra ? `promiseInput:${extra.type}` : \"\"].filter(Boolean).join(\",\")}):Promise<${type}>{${body}}`;\n if (classOwner) methods.set(classOwner, [...(methods.get(classOwner) ?? []), text]);\n else append(source, text);\n return `${classOwner ? \"this.\" : \"\"}${name}(${[args, extra?.argument ?? \"\"].filter(Boolean).join(\",\")})`;\n };\n const finish = (call: string, type: string, discard = false) =>\n type === \"void\" || discard ? `await ${call};return;` : `return await ${call};`;\n let prefix = addHelper(\n `tsplcPromiseOperation${sequence++}`,\n finish(invocation, resultType),\n resultType,\n );\n const handler = (\n expression: ts.Expression | undefined,\n inputType: string,\n input: string,\n ): { call: string; type: string; aggregate: boolean } | undefined => {\n if (\n !expression ||\n expression.kind === ts.SyntaxKind.NullKeyword ||\n (ts.isIdentifier(expression) && expression.text === \"undefined\")\n )\n return;\n let declaration: Handler;\n if (ts.isArrowFunction(expression) || ts.isFunctionExpression(expression))\n declaration = expression;\n else {\n const named = routines.get(symbol(expression)!);\n if (!named || !ts.isFunctionDeclaration(named))\n fail(\n expression,\n \"Use a named function or inline arrow; bind instance methods with an arrow.\",\n );\n declaration = named;\n }\n const callbackSignature = checker.getSignatureFromDeclaration(declaration);\n const aggregate = isAggregate(\n callbackSignature &&\n checker.getAwaitedType(checker.getReturnTypeOfSignature(callbackSignature)),\n );\n if (!declaration.body || declaration.parameters.length > 1)\n fail(declaration, \"Promise callbacks take at most one value.\");\n if (declaration.getSourceFile() !== source) {\n const result = declaration.type;\n if (!result) fail(declaration, \"Annotate callback results with their concrete PLC type.\");\n let output = result;\n if (\n ts.isTypeReferenceNode(result) &&\n result.typeName.getText(declaration.getSourceFile()) === \"Promise\"\n )\n output = result.typeArguments![0]!;\n // Named callbacks retain their original module and access to its private state.\n const callbackType = typeText(output, source);\n const name = expression.getText(source);\n if (declaration.modifiers?.some((modifier) => modifier.kind === ts.SyntaxKind.AsyncKeyword))\n return {\n call: `${name}(${declaration.parameters.length ? input : \"\"})`,\n type: callbackType,\n aggregate,\n };\n return {\n call: addHelper(\n `tsplcPromiseNamed${sequence++}`,\n callbackType === \"void\"\n ? `${name}(${declaration.parameters.length ? \"promiseInput\" : \"\"});return;`\n : `return ${name}(${declaration.parameters.length ? \"promiseInput\" : \"\"});`,\n callbackType,\n declaration.parameters.length ? { type: inputType, argument: input } : undefined,\n ),\n type: callbackType,\n aggregate,\n };\n }\n const names = new Map(captureNames);\n const parameter = declaration.parameters[0];\n if (parameter) {\n if (!ts.isIdentifier(parameter.name))\n fail(parameter, \"Promise callback parameters need names.\");\n names.set(symbol(parameter.name)!, \"promiseValue\");\n }\n let type: string;\n if (declaration.type) {\n const annotation = declaration.type;\n type =\n ts.isTypeReferenceNode(annotation) && annotation.typeName.getText(source) === \"Promise\"\n ? typeText(annotation.typeArguments![0]!, source)\n : typeText(annotation, source);\n } else {\n const resolved = checker.getSignatureFromDeclaration(declaration);\n const inferred =\n resolved && checker.getAwaitedType(checker.getReturnTypeOfSignature(resolved));\n if (inferred?.flags && inferred.flags & ts.TypeFlags.Void) type = \"void\";\n else if (\n !ts.isBlock(declaration.body) &&\n ts.isIdentifier(declaration.body) &&\n parameter &&\n symbol(declaration.body) === symbol(parameter.name)\n )\n type = inputType;\n else if (!ts.isBlock(declaration.body)) {\n const returned = ts.isCallExpression(declaration.body)\n ? operation(declaration.body)\n : undefined;\n type =\n returned?.type && ts.isTypeReferenceNode(returned.type)\n ? typeText(returned.type.typeArguments![0]!, source)\n : expressionType(declaration.body, source);\n } else\n fail(declaration, \"Annotate a callback that returns a value with its concrete PLC type.\");\n }\n const name = `tsplcPromiseHandler${sequence++}`;\n const body = replaceNames(declaration.body, names);\n const code = ts.isBlock(declaration.body)\n ? body.slice(1, -1)\n : type === \"void\"\n ? `${body};return;`\n : `return ${isPromise(declaration.body) ? \"await \" : \"\"}${body};`;\n const handlerParams = [\n ...(parameter && inputType !== \"void\" ? [`promiseValue:${inputType}`] : []),\n ...params.map((value) => `${value.name}:${value.type}`),\n ].join(\",\");\n const text = `${classOwner ? \"private \" : \"export \"}async ${classOwner ? \"\" : \"function \"}${name}(${handlerParams}):Promise<${type}>{${code}}`;\n if (classOwner) methods.set(classOwner, [...(methods.get(classOwner) ?? []), text]);\n else append(source, text);\n return {\n call: `${classOwner ? \"this.\" : \"\"}${name}(${[...(parameter && inputType !== \"void\" ? [input] : []), ...params.map((value) => value.name)].join(\",\")})`,\n type,\n aggregate,\n };\n };\n for (const [index, part] of parsed.parts.entries()) {\n const terminal = detached && index === parsed.parts.length - 1;\n const fulfilled =\n part.kind === \"then\" ? handler(part.handlers[0], resultType, \"promiseResult\") : undefined;\n const rejected = handler(\n part.handlers[part.kind === \"catch\" ? 0 : 1],\n \"UDINT\",\n \"tsplcErrorCode(promiseError)\",\n );\n if (!fulfilled && !rejected) continue;\n const output = terminal ? \"void\" : (fulfilled?.type ?? resultType);\n if (rejected && !terminal && rejected.type !== output)\n fail(\n expression,\n \"A recovery callback must return the same PLC type as the fulfilled branch.\",\n );\n const success = fulfilled\n ? finish(fulfilled.call, fulfilled.type, terminal)\n : resultType === \"void\" || terminal\n ? \"return;\"\n : \"return promiseResult;\";\n const load =\n resultType === \"void\"\n ? `await ${prefix};`\n : `const promiseResult:${resultType}=await ${prefix};`;\n let body: string;\n if (rejected && fulfilled) {\n const stored =\n resultType === \"void\"\n ? \"\"\n : `let promiseResult:${resultType}=defaultValue<${resultType}>();`;\n const attempt =\n resultType === \"void\"\n ? `await ${prefix};`\n : `const loaded:${resultType}=await ${prefix};promiseResult=${resultAggregate ? \"copy(loaded)\" : \"loaded\"};`;\n body = `${stored}let succeeded:BOOL=false;let rejection:UDINT=0;try{${attempt}succeeded=true;}catch(promiseError){rejection=tsplcErrorCode(promiseError);}if(!succeeded){${finish(rejected.call.replace(\"tsplcErrorCode(promiseError)\", \"rejection\"), rejected.type, terminal)}}${success}`;\n } else if (rejected)\n body = `try{${load}${success}}catch(promiseError){${finish(rejected.call, rejected.type, terminal)}}`;\n else body = `${load}${success}`;\n prefix = addHelper(`tsplcPromiseChain${sequence++}`, body, output);\n resultType = output;\n resultAggregate = terminal ? false : (fulfilled?.aggregate ?? resultAggregate);\n }\n if (!detached)\n return prefix.replace(`(${args})`, `(${params.map((value) => value.expression).join(\",\")})`);\n const site = `tsplcPromiseSite${sequence++}`;\n const callable = prefix.slice(0, prefix.indexOf(\"(\"));\n const declaration = `${classOwner ? \"private \" : \"const \"}${site}=tsplcCooperative.define(${callable});`;\n if (classOwner) methods.set(classOwner, [...(methods.get(classOwner) ?? []), declaration]);\n else append(source, declaration);\n const scope = classOwner ?? source;\n scopes.set(scope, [...(scopes.get(scope) ?? []), site]);\n return `${classOwner ? \"this.\" : \"\"}${site}.start(${params.map((value) => value.expression).join(\",\")});`;\n };\n const diagnosticsCalls: ts.CallExpression[] = [],\n cancelCalls: {\n node: ts.CallExpression;\n owner: ts.FunctionDeclaration | ts.MethodDeclaration;\n }[] = [];\n for (const source of files) {\n const visit = (node: ts.Node, owner?: ts.FunctionDeclaration | ts.MethodDeclaration): void => {\n if (ts.isFunctionDeclaration(node) || ts.isMethodDeclaration(node)) {\n if (node.body) ts.forEachChild(node.body, (child) => visit(child, node));\n return;\n }\n if (!owner) {\n ts.forEachChild(node, (child) => visit(child));\n return;\n }\n if (ts.isCallExpression(node) && official(node.expression, \"asyncDiagnostics\")) {\n diagnosticSource ??= source;\n diagnosticsCalls.push(node);\n return;\n }\n if (ts.isCallExpression(node) && official(node.expression, \"cancelAsync\")) {\n cancelCalls.push({ node, owner });\n return;\n }\n const asynchronous = owner.modifiers?.some(\n (modifier) => modifier.kind === ts.SyntaxKind.AsyncKeyword,\n );\n if (ts.isExpressionStatement(node)) {\n const expression = ts.isVoidExpression(node.expression)\n ? node.expression.expression\n : node.expression;\n if (split(expression)) {\n if (asynchronous) {\n diagnostics.push(\n diagnosticFor(\n node,\n \"Await async work inside an async routine; detached calls belong in synchronous controllers.\",\n ),\n );\n return;\n }\n try {\n edit(node, make(expression, owner, true));\n } catch (cause) {\n if (typeof cause === \"object\" && cause !== null && \"promiseDiagnostic\" in cause)\n diagnostics.push(cause.promiseDiagnostic as Diagnostic);\n else throw cause;\n }\n return;\n }\n }\n if (ts.isCallExpression(node)) {\n const chain = split(node);\n if (chain?.parts.length) {\n try {\n edit(node, make(node, owner, false));\n } catch (cause) {\n if (typeof cause === \"object\" && cause !== null && \"promiseDiagnostic\" in cause)\n diagnostics.push(cause.promiseDiagnostic as Diagnostic);\n else throw cause;\n }\n return;\n }\n }\n ts.forEachChild(node, (child) => visit(child, owner));\n };\n visit(source);\n }\n for (const { node, owner } of cancelCalls) {\n const scope =\n ts.isMethodDeclaration(owner) && ts.isClassDeclaration(owner.parent)\n ? owner.parent\n : owner.getSourceFile();\n if (\n node.arguments.length &&\n (node.arguments.length !== 1 || node.arguments[0]!.kind !== ts.SyntaxKind.ThisKeyword)\n )\n diagnostics.push(\n diagnosticFor(node, \"cancelAsync takes this in a controller, or no argument in a module.\"),\n );\n const name = `tsplcCancelScope${sequence++}`;\n const body = (scopes.get(scope) ?? [])\n .map((site) => `${ts.isClassDeclaration(scope) ? \"this.\" : \"\"}${site}.cancel();`)\n .join(\"\");\n if (ts.isClassDeclaration(scope))\n methods.set(scope, [...(methods.get(scope) ?? []), `private ${name}():void{${body}}`]);\n else append(scope, `function ${name}():void{${body}}`);\n edit(node, `${ts.isClassDeclaration(scope) ? \"this.\" : \"\"}${name}()`);\n }\n if (diagnosticSource) {\n const source = diagnosticSource;\n ensureImports(source);\n append(\n source,\n `export class TsplcPromiseDiagnostics extends FunctionBlock<{}>{private count:UDINT=0;private lastError:UDINT=0;public report(code:UDINT,count:UDINT):BOOL{this.count=tsplcAsyncWrapAdd<UDINT>(this.count,count);this.lastError=code;return true;}public snapshot():{valid:BOOL;count:UDINT;lastError:UDINT}{return {valid:true,count:this.count,lastError:this.lastError};}protected execute(input:{}):void{}}\nexport const tsplcPromiseDiagnostics=new TsplcPromiseDiagnostics();`,\n );\n runtimeBlocks.set(`${source.fileName}:TsplcPromiseDiagnostics`, { kind: \"mailbox\" });\n for (const file of new Set([\n ...additions.keys(),\n ...diagnosticsCalls.map((node) => node.getSourceFile()),\n ])) {\n if (file !== source) {\n const path = relative(dirname(file.fileName), source.fileName).replaceAll(\"\\\\\", \"/\");\n append(\n file,\n `import {${diag()}} from ${JSON.stringify(path.startsWith(\".\") ? path : `./${path}`)};`,\n );\n }\n }\n for (const call of diagnosticsCalls) edit(call, `${diag()}.snapshot()`);\n }\n for (const [owner, texts] of methods) {\n const source = owner.getSourceFile();\n edits.set(source, [\n ...(edits.get(source) ?? []),\n { start: owner.end - 1, end: owner.end - 1, text: \"\\n\" + texts.join(\"\\n\") },\n ]);\n }\n for (const source of files) {\n const changes = edits.get(source) ?? [],\n extra = additions.get(source) ?? [];\n if (!changes.length && !extra.length) continue;\n let text = source.text;\n for (const change of changes.sort((left, right) => right.start - left.start))\n text = text.slice(0, change.start) + change.text + text.slice(change.end);\n sources.set(source.fileName, text + \"\\n\" + extra.join(\"\\n\"));\n }\n return { sources, diagnostics, runtimeBlocks };\n};\n",
|
|
10
|
-
"import { runtimeSources } from \"./module-graph.ts\";\nimport ts from \"typescript\";\nimport { dirname, resolve, relative } from \"node:path\";\nimport { cooperativeSite, taskSite } from \"./cooperative.ts\";\nimport { staticString } from \"./configuration.ts\";\nimport { error, type Diagnostic, type FunctionBlock, type PlcProgram } from \"@tsplc/compiler/ir\";\n\nexport interface AsyncLowering {\n sources: Map<string, string>;\n blocks: Map<string, NonNullable<FunctionBlock[\"runtime\"]>>;\n programs: Record<string, { module: string; export: string }>;\n schedules: Map<string, NonNullable<PlcProgram[\"background\"]>>;\n diagnostics: Diagnostic[];\n continuations: Map<string, NonNullable<PlcProgram[\"continuation\"]>>;\n}\n\nconst copyValue = (value: string, aggregate: boolean) => (aggregate ? `copy(${value})` : value);\n\n/** Lower suspension into ordinary typed blocks before the PLC semantic pass. */\nexport const lowerAsync = (program: ts.Program, sdk: string): AsyncLowering => {\n const result: AsyncLowering = {\n sources: new Map(),\n blocks: new Map(),\n programs: {},\n schedules: new Map(),\n diagnostics: [],\n continuations: new Map(),\n };\n const checker = program.getTypeChecker();\n const symbol = (node: ts.Node): ts.Symbol | undefined => {\n let s = checker.getSymbolAtLocation(node);\n while (s && s.flags & ts.SymbolFlags.Alias) s = checker.getAliasedSymbol(s);\n return s;\n };\n const official = (node: ts.Node, name: string) => {\n const s = symbol(node);\n return (\n s?.name === name &&\n s.declarations?.some((d) => d.getSourceFile().fileName.startsWith(dirname(sdk) + \"/\"))\n );\n };\n const diagnosticFor = (node: ts.Node, message: string): Diagnostic => {\n const source = node.getSourceFile();\n const start = node.getStart(source);\n const position = source.getLineAndCharacterOfPosition(start);\n return error(\"PLC1010\", message, {\n file: source.fileName,\n start,\n end: node.end,\n line: position.line + 1,\n column: position.character + 1,\n });\n };\n const fail: (node: ts.Node, message: string) => never = (node, message) => {\n throw { asyncDiagnostic: diagnosticFor(node, message) };\n };\n type Routine = ts.FunctionDeclaration | ts.MethodDeclaration;\n const functions = new Map<ts.Symbol, Routine>();\n const methods = new Map<\n ts.Symbol,\n { start: string; reset: string; snapshot: string; advance: string }\n >();\n for (const source of runtimeSources(program)) {\n if (source.isDeclarationFile) continue;\n for (const statement of source.statements) {\n const routines = ts.isClassDeclaration(statement)\n ? statement.members.filter(ts.isMethodDeclaration)\n : [statement];\n for (const fn of routines) {\n if (\n (!ts.isFunctionDeclaration(fn) && !ts.isMethodDeclaration(fn)) ||\n !fn.name ||\n !fn.modifiers?.some((m) => m.kind === ts.SyntaxKind.AsyncKeyword)\n )\n continue;\n functions.set(symbol(fn.name)!, fn);\n if (ts.isMethodDeclaration(fn)) {\n const prefix = `tsplcAsync${fn.name.getText(source)}${fn.getStart(source)}`;\n methods.set(symbol(fn.name)!, {\n start: prefix + \"Start\",\n reset: prefix + \"Reset\",\n snapshot: prefix + \"Snapshot\",\n advance: prefix + \"Advance\",\n });\n }\n }\n }\n }\n if (!functions.size) return result;\n const aliasPrefix = (fn: Routine) =>\n `TsplcAsync${fn.name!.getText(fn.getSourceFile())}${fn.getStart(fn.getSourceFile())}`;\n const printer = ts.createPrinter({ removeComments: false });\n let sequence = 0;\n const ownedContinuations = new Map<ts.Symbol, string[]>();\n const ownedJobs = new Map<\n ts.Symbol,\n { method: string; schedule: NonNullable<PlcProgram[\"background\"]> }[]\n >();\n for (const source of runtimeSources(program)) {\n if (source.isDeclarationFile) continue;\n try {\n const replacements: { start: number; end: number; text: string }[] = [],\n extra: string[] = [];\n const text = (node: ts.Node) => node.getText(source);\n for (const fn of functions.values()) {\n if (fn.getSourceFile() !== source) continue;\n const method = methods.get(symbol(fn.name!)!);\n if (!fn.name || !functions.has(symbol(fn.name)!)) continue;\n if (\n !fn.body ||\n fn.typeParameters?.length ||\n !fn.type ||\n !ts.isTypeReferenceNode(fn.type) ||\n fn.type.typeName.getText(source) !== \"Promise\" ||\n fn.type.typeArguments?.length !== 1\n )\n fail(\n fn,\n \"Async functions require concrete parameters and an explicit Promise<T> result.\",\n );\n const returnsVoid = fn.type.typeArguments[0]!.kind === ts.SyntaxKind.VoidKeyword;\n const returnType = returnsVoid ? \"BOOL\" : text(fn.type.typeArguments[0]!);\n const resultAggregate = Boolean(\n checker.getTypeFromTypeNode(fn.type.typeArguments[0]!).flags & ts.TypeFlags.Object,\n );\n const fields = new Map<ts.Symbol, { name: string; type: string; aggregate: boolean }>();\n const parameters = fn.parameters.map((p, index) => {\n if (\n !ts.isIdentifier(p.name) ||\n !p.type ||\n p.initializer ||\n p.questionToken ||\n p.dotDotDotToken\n )\n fail(p, \"Async parameters require explicit concrete value types.\");\n if (/\\bInOut\\b/.test(text(p.type)))\n fail(p, \"InOut cannot cross an async suspension; pass a value snapshot.\");\n fields.set(symbol(p.name)!, {\n name: `argument${index}`,\n type: text(p.type),\n aggregate: Boolean(checker.getTypeFromTypeNode(p.type).flags & ts.TypeFlags.Object),\n });\n return {\n name: p.name.text,\n type: text(p.type),\n aggregate: Boolean(checker.getTypeFromTypeNode(p.type).flags & ts.TypeFlags.Object),\n field: `argument${index}`,\n };\n });\n const containsAwait = (node: ts.Node): boolean =>\n ts.isAwaitExpression(node) || node.getChildren(source).some(containsAwait);\n const collect = (node: ts.Node) => {\n if (ts.isForStatement(node)) {\n if (containsAwait(node))\n fail(node, \"Await inside loops is not supported yet; use bounded async calls.\");\n return;\n }\n if (ts.isFunctionLike(node) && node !== fn)\n fail(node, \"Closures and nested functions are not supported in async PLC routines.\");\n if (ts.isCatchClause(node)) {\n const declaration = node.variableDeclaration;\n if (declaration) {\n if (!ts.isIdentifier(declaration.name))\n fail(declaration, \"Catch requires a named error code or no binding.\");\n fields.set(symbol(declaration.name)!, {\n name: `caught${fields.size}`,\n type: \"UDINT\",\n aggregate: false,\n });\n }\n collect(node.block);\n return;\n }\n if (ts.isVariableDeclaration(node)) {\n if (!ts.isIdentifier(node.name) || !node.initializer)\n fail(node, \"Async locals need names and initializers.\");\n let type = node.type ? text(node.type) : undefined;\n if (!type) {\n if (\n node.initializer.kind === ts.SyntaxKind.TrueKeyword ||\n node.initializer.kind === ts.SyntaxKind.FalseKeyword\n )\n type = \"BOOL\";\n else if (\n ts.isAwaitExpression(node.initializer) &&\n ts.isCallExpression(node.initializer.expression)\n ) {\n const call = node.initializer.expression;\n const target = ts.isPropertyAccessExpression(call.expression)\n ? call.expression.name\n : call.expression;\n const called = functions.get(symbol(target)!);\n if (called?.type && ts.isTypeReferenceNode(called.type)) {\n type = called.type.typeArguments![0]!.getText(called.getSourceFile());\n if (called.getSourceFile() !== source) {\n type = `${aliasPrefix(called)}Result`;\n const path = relative(\n dirname(source.fileName),\n called.getSourceFile().fileName,\n ).replaceAll(\"\\\\\", \"/\");\n const statement = `import type {${type}} from ${JSON.stringify(path.startsWith(\".\") ? path : `./${path}`)};`;\n if (!extra.includes(statement)) extra.push(statement);\n }\n }\n }\n if (!type) fail(node, \"Annotate async locals with their concrete PLC type.\");\n }\n fields.set(symbol(node.name)!, {\n name: `local${fields.size}`,\n type,\n aggregate: Boolean(checker.getTypeAtLocation(node).flags & ts.TypeFlags.Object),\n });\n }\n ts.forEachChild(node, collect);\n };\n collect(fn.body);\n const rewrite = (node: ts.Node): string => {\n const transformed = ts.transform(node, [\n (context) => (root) => {\n const visit = (n: ts.Node): ts.VisitResult<ts.Node> => {\n if (\n method &&\n ts.isPropertyAccessExpression(n) &&\n n.expression.kind === ts.SyntaxKind.ThisKeyword\n ) {\n return ts.factory.createElementAccessExpression(\n ts.factory.createThis(),\n ts.factory.createStringLiteral(n.name.text),\n );\n }\n if (ts.isIdentifier(n)) {\n const field = fields.get(symbol(n)!);\n if (\n field &&\n !(ts.isPropertyAccessExpression(n.parent) && n.parent.name === n) &&\n !(ts.isPropertyAssignment(n.parent) && n.parent.name === n)\n )\n return ts.factory.createPropertyAccessExpression(\n ts.factory.createThis(),\n field.name,\n );\n }\n if (ts.isShorthandPropertyAssignment(n)) {\n const value = checker.getShorthandAssignmentValueSymbol(n),\n field = value && fields.get(value);\n if (field)\n return ts.factory.createPropertyAssignment(\n n.name,\n ts.factory.createPropertyAccessExpression(\n ts.factory.createThis(),\n field.name,\n ),\n );\n }\n return ts.visitEachChild(n, visit, context);\n };\n return ts.visitNode(root, visit) as typeof root;\n },\n ]);\n const value = printer.printNode(\n ts.EmitHint.Unspecified,\n transformed.transformed[0]!,\n source,\n );\n transformed.dispose();\n return value;\n };\n const nodes = new Map<number, string>();\n const yielding = new Set<number>();\n let nextId = 1;\n const state = (body: string, yields = false) => {\n const id = nextId++;\n nodes.set(id, body);\n if (yields) yielding.add(id);\n return id;\n };\n const children: string[] = [],\n resets: string[] = [],\n cancels: string[] = [];\n const finish = (value: string) =>\n `this.value = ${copyValue(value, resultAggregate)}; this.busy = false; this.done = true; this.step = 0;`;\n const failure = (error: string) =>\n `this.error = ${error}; if(this.error === 0)this.error=4; this.busy = false; this.done = true; this.step = 0;`;\n const awaitState = (\n awaited: ts.AwaitExpression | ts.CallExpression,\n target: string | undefined,\n next: number,\n reject: (error: string, cancellable?: boolean) => string,\n ): number => {\n const expression = ts.isAwaitExpression(awaited) ? awaited.expression : awaited;\n if (!ts.isCallExpression(expression))\n fail(awaited, \"Await requires a tsPLC operation or a statically named async function.\");\n const call = expression,\n name = ts.isPropertyAccessExpression(call.expression)\n ? call.expression.name\n : call.expression;\n const child = `child${children.length}`;\n if (official(name, \"sleep\")) {\n if (call.arguments.length !== 1 || call.typeArguments?.length || target)\n fail(call, \"sleep takes one TIME and returns void.\");\n children.push(`private ${child} = new OnDelayTimer();`);\n resets.push(`this.${child}.update({enabled:false,duration:ms(0)});`);\n const poll = state(\n `this.${child}.update({enabled:true,duration:${rewrite(call.arguments[0]!)}}); if(this.${child}.out.done) { this.step = ${next}; }`,\n );\n return state(\n `this.${child}.update({enabled:true,duration:${rewrite(call.arguments[0]!)}});this.step=${poll};`,\n true,\n );\n }\n if (official(name, \"fetch\") || official(name, \"opcuaCall\")) {\n const rpc = official(name, \"opcuaCall\");\n if (\n call.arguments.length < 1 ||\n call.arguments.length > 2 ||\n !call.typeArguments?.length ||\n call.typeArguments.length > 2\n )\n fail(\n call,\n \"fetch<Response, Request?> requires a URL and optional { method, json } options.\",\n );\n const url = staticString(checker, call.arguments[0]!);\n if (url === undefined)\n fail(\n call.arguments[0]!,\n \"fetch URL must be a literal or compile-time const string; configuration properties must be readonly.\",\n );\n const options = rpc ? undefined : call.arguments[1];\n if (options && !ts.isObjectLiteralExpression(options))\n fail(options, \"fetch options must be an inline { method, json } object.\");\n let method: \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\" = rpc ? \"POST\" : \"GET\";\n let json: ts.Expression | undefined = rpc ? call.arguments[1] : undefined;\n if (options && ts.isObjectLiteralExpression(options))\n for (const property of options.properties) {\n if (!ts.isPropertyAssignment(property) || !ts.isIdentifier(property.name))\n fail(property, \"fetch options require named properties.\");\n if (property.name.text === \"method\") {\n const value = staticString(checker, property.initializer);\n if (\n value !== \"GET\" &&\n value !== \"POST\" &&\n value !== \"PUT\" &&\n value !== \"PATCH\" &&\n value !== \"DELETE\"\n )\n fail(property, \"Unsupported fetch method.\");\n method = value;\n } else if (property.name.text === \"json\") json = property.initializer;\n else fail(property, \"Unsupported fetch option.\");\n }\n if (method === \"GET\" && json) fail(call, \"GET requests cannot contain json.\");\n const responseType = text(call.typeArguments[0]!),\n httpName = `Tsplc${rpc ? \"Rpc\" : \"Http\"}${sequence++}`;\n let requestType = `${httpName}Request`;\n if (!json) extra.push(`interface ${requestType} {reserved:BOOL}`);\n if (json) {\n if (call.typeArguments[1]) requestType = text(call.typeArguments[1]);\n else {\n const layout = checker.getTypeAtLocation(json);\n if (!layout.aliasSymbol && (!layout.symbol || layout.symbol.name === \"__type\"))\n fail(\n json,\n \"Annotate json with a named PLC record or supply the Request type argument.\",\n );\n requestType = checker.typeToString(\n layout,\n json,\n ts.TypeFormatFlags.NoTruncation |\n ts.TypeFormatFlags.UseAliasDefinedOutsideCurrentScope,\n );\n }\n }\n extra.push(`interface ${httpName}Input {start:BOOL;cancel:BOOL;request:${requestType}}\ninterface ${httpName}Output {busy:BOOL;done:BOOL;error:UDINT;result:${responseType}}\nclass ${httpName} extends FunctionBlock<${httpName}Input,${httpName}Output> { protected execute(input:${httpName}Input):${httpName}Output {return {busy:false,done:false,error:0,result:defaultValue<${responseType}>()};} }`);\n result.blocks.set(\n `${source.fileName}:${httpName}`,\n rpc\n ? { kind: \"rpc\", path: url }\n : {\n kind: \"http\",\n url,\n method,\n json: Boolean(json),\n },\n );\n children.push(`private ${child} = new ${httpName}();`);\n resets.push(\n `this.${child}.update({start:false,cancel:false,request:defaultValue<${requestType}>()});`,\n );\n cancels.push(\n `this.${child}.update({start:false,cancel:true,request:defaultValue<${requestType}>()});`,\n );\n return state(\n `this.${child}.update({start:true,cancel:false,request:${json ? rewrite(json) : `defaultValue<${requestType}>()`}}); if(this.${child}.out.done) { if(this.${child}.out.error !== 0) {${reject(`this.${child}.out.error`, true)}} else {${target ? `${target} = ${copyValue(`this.${child}.out.result`, Boolean(checker.getAwaitedType(checker.getTypeAtLocation(call))!.flags & ts.TypeFlags.Object))};` : \"\"}this.step = ${next};} }`,\n );\n }\n const jobDeclaration = symbol(name)?.declarations?.find(\n (node) => ts.isVariableDeclaration(node) || ts.isPropertyDeclaration(node),\n );\n const jobInitializer =\n jobDeclaration &&\n (ts.isVariableDeclaration(jobDeclaration) || ts.isPropertyDeclaration(jobDeclaration))\n ? jobDeclaration.initializer\n : undefined;\n if (\n jobInitializer &&\n ts.isCallExpression(jobInitializer) &&\n ts.isPropertyAccessExpression(jobInitializer.expression) &&\n official(jobInitializer.expression.expression, \"backgroundTasks\") &&\n jobInitializer.expression.name.text === \"define\"\n ) {\n const receiver = rewrite(call.expression),\n borrow = `borrow${children.length}`;\n children.push(`private ${borrow}:BOOL=false;`);\n resets.push(`this.${borrow}=false;`);\n cancels.push(\n `if(this.${borrow}){${receiver}.cancel();const borrowed=${receiver}.snapshot();if(!borrowed.valid||borrowed.busy)return;if(!${receiver}.reset())return;this.${borrow}=false;}`,\n );\n const poll = state(\n `const borrowed=${receiver}.snapshot();if(borrowed.valid&&borrowed.done){if(${receiver}.reset()){this.${borrow}=false;if(borrowed.error!==0){${reject(\"borrowed.error\", true)}}else{${target ? `${target}=${copyValue(\"borrowed.result\", Boolean(checker.getAwaitedType(checker.getTypeAtLocation(call))!.flags & ts.TypeFlags.Object))};` : \"\"}this.step=${next};}}}`,\n );\n return state(\n `const available=${receiver}.snapshot();if(!available.valid)return;if(available.busy||available.done){${reject(\"7\")}}else{const accepted:BOOL=${receiver}.start(${call.arguments.map(rewrite).join(\",\")});if(accepted){this.${borrow}=true;this.step=${poll};}}`,\n true,\n );\n }\n const called = functions.get(symbol(name)!);\n if (!called) fail(call, \"Await requires a known async helper or SDK operation.\");\n const calledMethod = methods.get(symbol(name)!);\n if (calledMethod) {\n if (!ts.isPropertyAccessExpression(call.expression))\n fail(call, \"Async methods require a static receiver.\");\n const receiver = rewrite(call.expression.expression);\n const borrow = `methodBorrow${children.length}`;\n children.push(`private ${borrow}:BOOL=false;`);\n resets.push(\n `if(this.${borrow}){${receiver}.${calledMethod.reset}();this.${borrow}=false;}`,\n );\n cancels.push(\n `if(this.${borrow}){${receiver}.${calledMethod.advance}({cancel:true});const cancellingChild=${receiver}.${calledMethod.snapshot}();if(cancellingChild.busy)return;${receiver}.${calledMethod.reset}();this.${borrow}=false;}`,\n );\n const poll = state(\n `${receiver}.${calledMethod.advance}({cancel:false});const childState=${receiver}.${calledMethod.snapshot}();if(childState.done){${receiver}.${calledMethod.reset}();this.${borrow}=false;if(childState.error!==0){${reject(\"childState.error\", true)}}else{${target ? `${target}=${copyValue(\"childState.result\", Boolean(checker.getAwaitedType(checker.getTypeAtLocation(call))!.flags & ts.TypeFlags.Object))};` : \"\"}this.step=${next};}}`,\n );\n return state(\n `const accepted:BOOL=${receiver}.${calledMethod.start}(${call.arguments.map(rewrite).join(\",\")});if(!accepted){${reject(\"7\")}}else{this.${borrow}=true;${receiver}.${calledMethod.advance}({cancel:false});this.step=${poll};}`,\n true,\n );\n }\n if (!ts.isIdentifier(call.expression))\n fail(call, \"Async helpers require a static function.\");\n children.push(`private ${child} = new ${text(call.expression)}();`);\n resets.push(`this.${child}.reset();`);\n cancels.push(\n `this.${child}.update({cancel:true});const cancellingChild=this.${child}.snapshot();if(cancellingChild.busy)return;`,\n );\n const poll = state(\n `this.${child}.update({cancel:false}); const childState = this.${child}.snapshot(); if(childState.done) {if(childState.error !== 0) {${reject(\"childState.error\", true)}} else {${target ? `${target} = ${copyValue(\"childState.result\", Boolean(checker.getAwaitedType(checker.getTypeAtLocation(call))!.flags & ts.TypeFlags.Object))};` : \"\"}this.step = ${next};} }`,\n );\n return state(\n `const accepted:BOOL = this.${child}.start(${call.arguments.map(rewrite).join(\",\")}); if(accepted){this.${child}.update({cancel:false});this.step = ${poll};}`,\n true,\n );\n };\n const block = (\n statements: readonly ts.Statement[],\n next: number,\n reject: (error: string, cancellable?: boolean) => string = failure,\n ): number => {\n let entry = next;\n for (const stmt of [...statements].reverse()) {\n if (ts.isBlock(stmt)) {\n entry = block(stmt.statements, entry, reject);\n continue;\n }\n if (ts.isIfStatement(stmt)) {\n const yes = block([stmt.thenStatement], entry, reject),\n no = stmt.elseStatement ? block([stmt.elseStatement], entry, reject) : entry;\n entry = state(\n `if(${rewrite(stmt.expression)}) this.step = ${yes}; else this.step = ${no};`,\n );\n continue;\n }\n if (ts.isTryStatement(stmt)) {\n if (!stmt.catchClause || stmt.finallyBlock)\n fail(stmt, \"Async try requires catch; finally is not supported yet.\");\n const caught = block(stmt.catchClause.block.statements, entry, reject);\n const declaration = stmt.catchClause.variableDeclaration;\n const field = declaration && fields.get(symbol(declaration.name)!);\n entry = block(stmt.tryBlock.statements, entry, (error, cancellable) => {\n const recover = `${field ? `this.${field.name} = ${error};` : \"\"}this.step = ${caught};`;\n return cancellable\n ? `if(${error} === 1) {${failure(error)}} else {${recover}}`\n : recover;\n });\n continue;\n }\n if (ts.isThrowStatement(stmt)) {\n if (\n !checker.isTypeAssignableTo(\n checker.getTypeAtLocation(stmt.expression),\n checker.getNumberType(),\n )\n )\n fail(stmt, \"Async throw requires a numeric error code.\");\n entry = state(reject(rewrite(stmt.expression)));\n continue;\n }\n if (ts.isReturnStatement(stmt)) {\n if (!stmt.expression) {\n if (!returnsVoid) fail(stmt, \"Async routines must return a value.\");\n entry = state(finish(\"true\"));\n continue;\n }\n const adopted =\n ts.isCallExpression(stmt.expression) &&\n checker.getAwaitedType(checker.getTypeAtLocation(stmt.expression)) !==\n checker.getTypeAtLocation(stmt.expression)\n ? stmt.expression\n : undefined;\n const suspension = ts.isAwaitExpression(stmt.expression) ? stmt.expression : adopted;\n entry = suspension\n ? awaitState(\n suspension,\n returnsVoid ? undefined : \"this.value\",\n state(finish(returnsVoid ? \"true\" : \"this.value\")),\n reject,\n )\n : state(finish(rewrite(stmt.expression)));\n continue;\n }\n if (ts.isVariableStatement(stmt)) {\n for (const dec of [...stmt.declarationList.declarations].reverse()) {\n const field = fields.get(symbol(dec.name)!);\n if (!field || !dec.initializer) fail(dec, \"Invalid async local.\");\n const target = `this.${field.name}`;\n entry = ts.isAwaitExpression(dec.initializer)\n ? awaitState(dec.initializer, target, entry, reject)\n : state(\n `${target} = ${copyValue(rewrite(dec.initializer), field.aggregate)}; this.step = ${entry};`,\n );\n }\n continue;\n }\n if (ts.isExpressionStatement(stmt) && ts.isAwaitExpression(stmt.expression)) {\n entry = awaitState(stmt.expression, undefined, entry, reject);\n continue;\n }\n if (containsAwait(stmt))\n fail(\n stmt,\n \"This suspension position is not supported; await into a named local or return.\",\n );\n if (ts.isWhileStatement(stmt) || ts.isDoStatement(stmt))\n fail(stmt, \"Unbounded loops are not supported in async routines.\");\n entry = state(`${rewrite(stmt)} this.step = ${entry};`);\n }\n return entry;\n };\n const entry = block(fn.body.statements, state(returnsVoid ? finish(\"true\") : failure(\"4\")));\n const exported = fn.modifiers?.some((m) => m.kind === ts.SyntaxKind.ExportKeyword)\n ? \"export \"\n : \"\";\n const aliases = `export type ${aliasPrefix(fn)}Result = ${returnType};\\n${parameters.map((p, i) => `export type ${aliasPrefix(fn)}Argument${i} = ${p.type};`).join(\"\\n\")}`;\n const generated = `${aliases}\\n${exported}class ${fn.name!.getText(source)} extends FunctionBlock<{cancel:BOOL}> {\nprivate step:UINT=0; private cancelling:BOOL=false; private busy:BOOL=false; private done:BOOL=false; private error:UDINT=0; private value:${returnType}=defaultValue<${returnType}>();\n${[...fields.values()].map((f) => `private ${f.name}:${f.type}=defaultValue<${f.type}>();`).join(\"\\n\")}\n${children.join(\"\\n\")}\nstart(${parameters.map((p) => `${p.name}:${p.type}`).join(\",\")}):BOOL {if(this.busy || this.done)return false; ${parameters.map((p) => `this.${p.field} = ${copyValue(p.name, p.aggregate)};`).join(\" \")} ${resets.join(\" \")} this.value = defaultValue<${returnType}>(); this.error=0;this.cancelling=false;this.busy=true;this.done=false;this.step=${entry};return true;}\nreset():void {${resets.join(\" \")} this.busy=false;this.cancelling=false;this.done=false;this.error=0;this.step=0;}\nsnapshot():{busy:BOOL;done:BOOL;error:UDINT;result:${returnType}} {return {busy:this.busy,done:this.done,error:this.error,result:${copyValue(\"this.value\", resultAggregate)}};}\nprotected execute(input:{cancel:BOOL}):void {if(!this.busy)return;if(input.cancel)this.cancelling=true;if(this.cancelling){${cancels.map((cancel) => `{${cancel}}`).join(\" \")}${failure(\"1\")}return;}for(let transition:DINT=0;transition<${nodes.size + 1};transition++){const previous:UINT=this.step;switch(this.step){${[...nodes].map(([id, body]) => `case ${id}: {${body}} break;`).join(\"\\n\")} }if(!this.busy||this.step===previous${[...yielding].map((id) => `||previous===${id}`).join(\"\")})return;}}\n\n}`;\n if (!method)\n replacements.push({ start: fn.getStart(source), end: fn.end, text: generated });\n else {\n const parsed = ts.createSourceFile(\n source.fileName,\n generated,\n ts.ScriptTarget.Latest,\n true,\n );\n const worker = parsed.statements.find(ts.isClassDeclaration)!;\n const names = new Map(\n worker.members.map((member) => [\n member.name!.getText(parsed),\n `tsplcAsync${fn.getStart(source)}_${member.name!.getText(parsed)}`,\n ]),\n );\n names.set(\"start\", method.start);\n names.set(\"reset\", method.reset);\n names.set(\"snapshot\", method.snapshot);\n names.set(\"execute\", method.advance);\n const transformed = ts.transform(worker, [\n (context) => (root) => {\n const visit = (node: ts.Node): ts.VisitResult<ts.Node> => {\n if (\n ts.isElementAccessExpression(node) &&\n node.expression.kind === ts.SyntaxKind.ThisKeyword &&\n ts.isStringLiteral(node.argumentExpression)\n )\n return ts.factory.createPropertyAccessExpression(\n ts.factory.createThis(),\n node.argumentExpression.text,\n );\n if (\n ts.isPropertyAccessExpression(node) &&\n node.expression.kind === ts.SyntaxKind.ThisKeyword &&\n names.has(node.name.text)\n )\n return ts.factory.createPropertyAccessExpression(\n ts.factory.createThis(),\n names.get(node.name.text)!,\n );\n if (\n (ts.isPropertyDeclaration(node) || ts.isMethodDeclaration(node)) &&\n ts.isIdentifier(node.name) &&\n names.has(node.name.text)\n ) {\n const updated = ts.visitEachChild(node, visit, context);\n const name = ts.factory.createIdentifier(names.get(node.name.text)!);\n if (ts.isPropertyDeclaration(updated))\n return ts.factory.updatePropertyDeclaration(\n updated,\n updated.modifiers,\n name,\n updated.questionToken ?? updated.exclamationToken,\n updated.type,\n updated.initializer,\n );\n if (ts.isMethodDeclaration(updated))\n return ts.factory.updateMethodDeclaration(\n updated,\n [ts.factory.createModifier(ts.SyntaxKind.PublicKeyword)],\n updated.asteriskToken,\n name,\n updated.questionToken,\n updated.typeParameters,\n updated.parameters,\n updated.type,\n updated.body,\n );\n }\n return ts.visitEachChild(node, visit, context);\n };\n return ts.visitNode(root, visit) as typeof root;\n },\n ]);\n const generatedClass = transformed.transformed[0]!;\n replacements.push({\n start: fn.getStart(source),\n end: fn.end,\n text: generatedClass.members\n .map((member) => printer.printNode(ts.EmitHint.Unspecified, member, parsed))\n .join(\"\\n\"),\n });\n transformed.dispose();\n }\n }\n const workTypes = (fn: Routine, dec: ts.VariableDeclaration | ts.PropertyDeclaration) => {\n const reference = fn.type as ts.TypeReferenceNode;\n const returnType =\n reference.typeArguments![0]!.kind === ts.SyntaxKind.VoidKeyword\n ? \"BOOL\"\n : reference.typeArguments![0]!.getText(fn.getSourceFile());\n // Types in the job module must be visible: use the original inferred Promise result annotation at the definition boundary.\n const signature = checker.getSignatureFromDeclaration(fn)!;\n const promised = checker.getAwaitedType(checker.getReturnTypeOfSignature(signature))!;\n const resultType =\n promised.flags & ts.TypeFlags.Void\n ? \"BOOL\"\n : checker.typeToString(\n promised,\n dec,\n ts.TypeFormatFlags.NoTruncation |\n ts.TypeFormatFlags.UseAliasDefinedOutsideCurrentScope,\n );\n const params = fn.parameters.map((p, i) => ({\n field: `argument${i}`,\n name: `argument${i}`,\n aggregate: Boolean(checker.getTypeAtLocation(p).flags & ts.TypeFlags.Object),\n type: checker.typeToString(\n checker.getTypeAtLocation(p),\n dec,\n ts.TypeFormatFlags.NoTruncation | ts.TypeFormatFlags.UseAliasDefinedOutsideCurrentScope,\n ),\n }));\n // Preserve PLC widths erased by the TS checker when declarations share the module.\n for (let i = 0; i < params.length; i++)\n if (fn.getSourceFile() === source)\n params[i]!.type = fn.parameters[i]!.type!.getText(source);\n let valueType = fn.getSourceFile() === source ? returnType : resultType;\n if (fn.getSourceFile() !== source) {\n const prefix = aliasPrefix(fn);\n valueType = `${prefix}Result`;\n for (let i = 0; i < params.length; i++) params[i]!.type = `${prefix}Argument${i}`;\n const path = relative(dirname(source.fileName), fn.getSourceFile().fileName).replaceAll(\n \"\\\\\",\n \"/\",\n );\n extra.push(\n `import type {${valueType},${params.map((p) => p.type).join(\",\")}} from ${JSON.stringify(path.startsWith(\".\") ? path : `./${path}`)};`,\n );\n }\n const valueAggregate = Boolean(promised.flags & ts.TypeFlags.Object);\n return { params, valueType, valueAggregate };\n };\n const definitions = source.statements.flatMap<\n ts.VariableDeclaration | ts.PropertyDeclaration\n >((stmt) => {\n if (ts.isVariableStatement(stmt)) return [...stmt.declarationList.declarations];\n if (ts.isClassDeclaration(stmt)) return stmt.members.filter(ts.isPropertyDeclaration);\n return [];\n });\n for (const dec of definitions) {\n const owner = ts.isPropertyDeclaration(dec) ? dec.parent : undefined;\n const init = dec.initializer;\n if (\n !init ||\n !ts.isCallExpression(init) ||\n !ts.isPropertyAccessExpression(init.expression) ||\n (!official(init.expression.expression, \"backgroundTasks\") &&\n !official(init.expression.expression, \"cooperativeTasks\") &&\n !official(init.expression.expression, \"tasks\")) ||\n init.expression.name.text !== \"define\"\n )\n continue;\n if (official(init.expression.expression, \"tasks\")) {\n const fn = functions.get(symbol(init.arguments[0] ?? init)!);\n if (!ts.isIdentifier(dec.name) || init.arguments.length !== 1 || !fn?.type)\n fail(init, \"tasks.define requires one named async function with a return type.\");\n const { params, valueType, valueAggregate } = workTypes(fn, dec);\n const worker = `tsplcTaskWorker${sequence++}`;\n const receiver = `this.${worker}`;\n const site = taskSite(\n dec.name.text,\n params,\n {\n start: `${receiver}.start`,\n advance: `${receiver}.update`,\n snapshot: `${receiver}.snapshot`,\n reset: `${receiver}.reset`,\n declaration: `private ${worker}=new ${init.arguments[0]!.getText(source)}();`,\n },\n Boolean(owner),\n { type: valueType, aggregate: valueAggregate },\n );\n if (owner) {\n if (!owner.name) fail(owner, \"Task owners require a named block.\");\n replacements.push({ start: dec.getStart(source), end: dec.end, text: site.body });\n ownedContinuations.set(symbol(owner.name)!, [\n ...(ownedContinuations.get(symbol(owner.name)!) ?? []),\n site.poll,\n ]);\n const visit = (node: ts.Node): void => {\n if (\n ts.isCallExpression(node) &&\n ts.isPropertyAccessExpression(node.expression) &&\n ts.isPropertyAccessExpression(node.expression.expression) &&\n node.expression.expression.expression.kind === ts.SyntaxKind.ThisKeyword &&\n symbol(node.expression.expression.name) === symbol(dec.name)\n ) {\n const renamed = site.renames.get(node.expression.name.text);\n if (renamed)\n replacements.push({\n start: node.expression.getStart(source),\n end: node.expression.end,\n text: `this.${renamed}`,\n });\n }\n ts.forEachChild(node, visit);\n };\n visit(owner);\n } else {\n const name = `TsplcTaskSite${sequence++}`,\n entry = `tsplcContinuation${sequence++}`;\n extra.push(`class ${name} extends FunctionBlock<{}>{${site.body}protected execute(input:{}):void{}}\nexport function ${entry}():void{${dec.name.text}.poll();}`);\n replacements.push({\n start: init.getStart(source),\n end: init.end,\n text: `new ${name}()`,\n });\n result.programs[entry] = { module: resolve(source.fileName), export: entry };\n result.continuations.set(entry, { instance: dec.name.text, file: source.fileName });\n }\n continue;\n }\n const cooperative = official(init.expression.expression, \"cooperativeTasks\");\n if (cooperative) {\n if (!ts.isIdentifier(dec.name) || init.arguments.length !== 1)\n fail(init, \"Invalid compiler-owned continuation slot.\");\n const workNode = init.arguments[0]!;\n const work = functions.get(\n symbol(ts.isPropertyAccessExpression(workNode) ? workNode.name : workNode)!,\n );\n if (!work) fail(workNode, \"A continuation requires a named async routine.\");\n const params = work.parameters.map((parameter, index) => ({\n name: `argument${index}`,\n type: parameter.type!.getText(work.getSourceFile()),\n aggregate: Boolean(checker.getTypeAtLocation(parameter).flags & ts.TypeFlags.Object),\n }));\n const workMethod = methods.get(symbol(work.name!)!);\n const worker = `tsplcCooperativeWorker${sequence++}`;\n const receiver = workMethod ? \"this\" : `this.${worker}`;\n const site = cooperativeSite(\n dec.name.text,\n params,\n {\n start: `${receiver}.${workMethod?.start ?? \"start\"}`,\n advance: `${receiver}.${workMethod?.advance ?? \"update\"}`,\n snapshot: `${receiver}.${workMethod?.snapshot ?? \"snapshot\"}`,\n reset: `${receiver}.${workMethod?.reset ?? \"reset\"}`,\n declaration: workMethod ? \"\" : `private ${worker}=new ${workNode.getText(source)}();`,\n },\n Boolean(owner),\n );\n if (owner) {\n if (!owner.name) fail(owner, \"Continuation owners require a named block.\");\n replacements.push({ start: dec.getStart(source), end: dec.end, text: site.body });\n ownedContinuations.set(symbol(owner.name)!, [\n ...(ownedContinuations.get(symbol(owner.name)!) ?? []),\n site.poll,\n ]);\n const visit = (node: ts.Node): void => {\n if (\n ts.isCallExpression(node) &&\n ts.isPropertyAccessExpression(node.expression) &&\n ts.isPropertyAccessExpression(node.expression.expression) &&\n node.expression.expression.expression.kind === ts.SyntaxKind.ThisKeyword &&\n symbol(node.expression.expression.name) === symbol(dec.name)\n ) {\n const renamed =\n node.expression.name.text === \"start\"\n ? site.start\n : node.expression.name.text === \"cancel\"\n ? site.cancel\n : undefined;\n if (renamed)\n replacements.push({\n start: node.expression.getStart(source),\n end: node.expression.end,\n text: `this.${renamed}`,\n });\n }\n ts.forEachChild(node, visit);\n };\n visit(owner);\n } else {\n const name = `TsplcCooperativeSite${sequence++}`,\n entry = `tsplcContinuation${sequence++}`;\n extra.push(`class ${name} extends FunctionBlock<{}>{${site.body}protected execute(input:{}):void{}}\nexport function ${entry}():void{${dec.name.text}.poll();}`);\n replacements.push({\n start: init.getStart(source),\n end: init.end,\n text: `new ${name}()`,\n });\n result.programs[entry] = { module: resolve(source.fileName), export: entry };\n result.continuations.set(entry, { instance: dec.name.text, file: source.fileName });\n }\n continue;\n }\n if (\n !ts.isIdentifier(dec.name) ||\n init.arguments.length !== 2 ||\n !ts.isObjectLiteralExpression(init.arguments[1]!)\n )\n fail(\n dec,\n \"Define background tasks at module scope or as function-block fields with a named async function and scheduling options.\",\n );\n const fn = functions.get(symbol(init.arguments[0]!)!);\n if (!fn?.type || !ts.isTypeReferenceNode(fn.type))\n fail(init, \"backgroundTasks.define requires a named async function.\");\n const { params, valueType, valueAggregate } = workTypes(fn, dec);\n const mailbox = `TsplcMailbox${sequence++}`,\n worker = `tsplcWorker${sequence++}`,\n entry = `tsplcBackground${sequence++}`;\n const requestType = `{ready:BOOL;${params.map((p) => `${p.field}:${p.type}`).join(\";\")}}`;\n const snapshotType = `{valid:BOOL;busy:BOOL;done:BOOL;cancelRequested:BOOL;error:UDINT;result:${valueType}}`;\n const emptySnapshot = `{valid:true,busy:this.pending || this.active,done:this.completed,cancelRequested:this.cancelRequested,error:this.failure,result:${copyValue(\"this.value\", valueAggregate)}}`;\n extra.push(`class ${mailbox} extends FunctionBlock<{}> {\nprivate pending:BOOL=false;private active:BOOL=false;private completed:BOOL=false;private cancelRequested:BOOL=false;private failure:UDINT=0;private value:${valueType}=defaultValue<${valueType}>();\n${params.map((p) => `private ${p.field}:${p.type}=defaultValue<${p.type}>();`).join(\"\\n\")}\nstart(${params.map((p) => `${p.name}:${p.type}`).join(\",\")}):BOOL {if(this.pending || this.active || this.completed)return false;${params.map((p) => `this.${p.field}=${copyValue(p.name, p.aggregate)};`).join(\"\")}this.pending=true;return true;}\ntake():${requestType} {const ready:BOOL=this.pending; if(ready){this.pending=false;this.active=true;}return {ready,${params.map((p) => `${p.field}:${copyValue(`this.${p.field}`, p.aggregate)}`).join(\",\")}};}\npublish(value:${valueType},error:UDINT):BOOL {if(!this.active)return false;if(this.cancelRequested){this.value=defaultValue<${valueType}>();this.failure=1;}else{this.value=${copyValue(\"value\", valueAggregate)};this.failure=error;}this.active=false;this.completed=true;this.cancelRequested=false;return true;}\nsnapshot():${snapshotType} {return ${emptySnapshot};}\ncancel():BOOL {if(this.pending){this.pending=false;this.completed=true;this.failure=1;return true;}if(this.active){this.cancelRequested=true;return true;}return false;}\nreset():BOOL {if(this.pending || this.active)return false;this.completed=false;this.failure=0;this.cancelRequested=false;this.value=defaultValue<${valueType}>();return true;}\nprotected execute(input:{}):void {}\n}\n`);\n const receiver = owner ? `this.${dec.name.text}` : dec.name.text;\n const workerReceiver = owner ? `this.${worker}` : worker;\n const run = `const request=${receiver}.take();if(request.ready){const accepted:BOOL=${workerReceiver}.start(${params.map((p) => `request.${p.field}`).join(\",\")});}const control=${receiver}.snapshot();if(!control.valid)return;${workerReceiver}.update({cancel:control.cancelRequested});const state=${workerReceiver}.snapshot();if(state.done){const published:BOOL=${receiver}.publish(state.result,state.error);if(published)${workerReceiver}.reset();}`;\n if (owner) {\n if (!owner.name) fail(owner, \"Background job owners need a named function block.\");\n replacements.push({\n start: owner.end - 1,\n end: owner.end - 1,\n text: `private ${worker}=new ${text(init.arguments[0]!)}();public ${entry}():void{${run}}`,\n });\n result.blocks.set(`${source.fileName}:${owner.name.text}`, { kind: \"backgroundHost\" });\n } else\n extra.push(\n `const ${worker}=new ${text(init.arguments[0]!)}();export function ${entry}():void{${run}}`,\n );\n result.blocks.set(`${source.fileName}:${mailbox}`, { kind: \"mailbox\" });\n const opts = new Map(\n init.arguments[1]!.properties.filter(ts.isPropertyAssignment).map((p) => [\n p.name.getText(source),\n p.initializer,\n ]),\n );\n const interval = opts.get(\"interval\"),\n priority = opts.get(\"priority\");\n if (\n !interval ||\n !ts.isCallExpression(interval) ||\n interval.arguments.length !== 1 ||\n !ts.isNumericLiteral(interval.arguments[0]!) ||\n !priority ||\n !ts.isNumericLiteral(priority) ||\n ![\"ms\", \"seconds\"].some((n) => official(interval.expression, n))\n )\n fail(init, \"Background schedules require a literal ms/seconds interval and priority.\");\n const milliseconds =\n Number(interval.arguments[0]!.text) *\n (official(interval.expression, \"seconds\") ? 1000 : 1);\n if (\n !Number.isSafeInteger(milliseconds) ||\n milliseconds <= 0 ||\n milliseconds > 4294967295 ||\n Number(priority.text) < 1 ||\n Number(priority.text) > 31\n )\n fail(init, \"Background interval must be positive and priority must be 1..31.\");\n const schedule = {\n intervalNanoseconds: String(BigInt(milliseconds) * 1000000n),\n priority: Number(priority.text),\n mailbox: dec.name.text,\n worker,\n };\n if (owner) {\n const key = symbol(owner.name!)!;\n ownedJobs.set(key, [...(ownedJobs.get(key) ?? []), { method: entry, schedule }]);\n } else {\n result.programs[entry] = { module: resolve(source.fileName), export: entry };\n result.schedules.set(entry, schedule);\n }\n replacements.push({\n start: init.getStart(source),\n end: init.end,\n text: `new ${mailbox}()`,\n });\n }\n if (replacements.length) {\n let changed = source.text;\n for (const edit of replacements.sort((a, b) => b.start - a.start))\n changed = changed.slice(0, edit.start) + edit.text + changed.slice(edit.end);\n const generated = ts.createSourceFile(\n source.fileName,\n extra.join(\"\\n\"),\n ts.ScriptTarget.Latest,\n true,\n );\n const before = generated.statements\n .filter(ts.isClassDeclaration)\n .map((n) => n.getText(generated))\n .join(\"\\n\");\n const after = generated.statements\n .filter((n) => !ts.isClassDeclaration(n))\n .map((n) => n.getText(generated))\n .join(\"\\n\");\n result.sources.set(source.fileName, before + \"\\n\" + changed + \"\\n\" + after);\n }\n } catch (cause) {\n if (typeof cause === \"object\" && cause !== null && \"asyncDiagnostic\" in cause)\n result.diagnostics.push(cause.asyncDiagnostic as Diagnostic);\n else throw cause;\n }\n }\n for (const source of runtimeSources(program)) {\n if (source.isDeclarationFile) continue;\n const entries: string[] = [];\n // `new Block()` allocates one instance; `defaultValue<FixedArray<Block, N, Lower>>()` one per element.\n const allocated = (node: ts.Node) => {\n if (ts.isNewExpression(node)) return { block: node.expression };\n const type = ts.isCallExpression(node) ? node.typeArguments?.[0] : undefined;\n const [element, length, lower] =\n type && ts.isTypeReferenceNode(type) && type.typeName.getText(source) === \"FixedArray\"\n ? (type.typeArguments ?? [])\n : [];\n if (!element || !ts.isTypeReferenceNode(element) || !length) return undefined;\n // A literal, or a table's `(typeof table)[\"length\"]`.\n const integer = (node: ts.TypeNode) => {\n const type = checker.getTypeFromTypeNode(node);\n return type.isNumberLiteral() ? type.value : NaN;\n };\n const first = lower ? integer(lower) : 0;\n return { block: element.typeName, first, last: first + integer(length) - 1 };\n };\n const visit = (node: ts.Node): void => {\n const instance = allocated(node);\n if (instance) {\n const jobs = ownedJobs.get(symbol(instance.block)!);\n const polls = ownedContinuations.get(symbol(instance.block)!);\n if (jobs || polls) {\n const declaration = node.parent;\n if (\n !ts.isVariableDeclaration(declaration) ||\n !ts.isIdentifier(declaration.name) ||\n !ts.isVariableDeclarationList(declaration.parent) ||\n !ts.isVariableStatement(declaration.parent.parent) ||\n !ts.isSourceFile(declaration.parent.parent.parent) ||\n (jobs && instance.first !== undefined)\n ) {\n result.diagnostics.push(\n diagnosticFor(\n node,\n \"Function blocks with background jobs require module-level named instances.\",\n ),\n );\n return;\n }\n const name = declaration.name.text;\n for (const poll of polls ?? []) {\n const entry = `tsplcContinuation${sequence++}`;\n entries.push(\n instance.first === undefined\n ? `export function ${entry}():void{${name}.${poll}();}`\n : `export function ${entry}():void{for(let element:DINT=${instance.first};element<=${instance.last};element++){${name}[element].${poll}();}}`,\n );\n result.programs[entry] = { module: resolve(source.fileName), export: entry };\n result.continuations.set(entry, { instance: name, file: source.fileName });\n }\n for (const job of jobs ?? []) {\n const entry = `tsplcBackground${sequence++}`;\n entries.push(`export function ${entry}():void{${name}.${job.method}();}`);\n result.programs[entry] = { module: resolve(source.fileName), export: entry };\n result.schedules.set(entry, { ...job.schedule, worker: name });\n }\n }\n }\n ts.forEachChild(node, visit);\n };\n visit(source);\n if (entries.length)\n result.sources.set(\n source.fileName,\n (result.sources.get(source.fileName) ?? source.text) + \"\\n\" + entries.join(\"\\n\"),\n );\n }\n return result;\n};\n",
|
|
10
|
+
"import { runtimeSources } from \"./module-graph.ts\";\nimport ts from \"typescript\";\nimport { dirname, resolve, relative } from \"node:path\";\nimport { cooperativeSite, taskSite } from \"./cooperative.ts\";\nimport { staticString } from \"./configuration.ts\";\nimport { error, type Diagnostic, type FunctionBlock, type PlcProgram } from \"@tsplc/compiler/ir\";\n\nexport interface AsyncLowering {\n sources: Map<string, string>;\n blocks: Map<string, NonNullable<FunctionBlock[\"runtime\"]>>;\n programs: Record<string, { module: string; export: string }>;\n schedules: Map<string, NonNullable<PlcProgram[\"background\"]>>;\n diagnostics: Diagnostic[];\n continuations: Map<string, NonNullable<PlcProgram[\"continuation\"]>>;\n}\n\nconst copyValue = (value: string, aggregate: boolean) => (aggregate ? `copy(${value})` : value);\n\n/** Lower suspension into ordinary typed blocks before the PLC semantic pass. */\nexport const lowerAsync = (program: ts.Program, sdk: string): AsyncLowering => {\n const result: AsyncLowering = {\n sources: new Map(),\n blocks: new Map(),\n programs: {},\n schedules: new Map(),\n diagnostics: [],\n continuations: new Map(),\n };\n const checker = program.getTypeChecker();\n const symbol = (node: ts.Node): ts.Symbol | undefined => {\n let s = checker.getSymbolAtLocation(node);\n while (s && s.flags & ts.SymbolFlags.Alias) s = checker.getAliasedSymbol(s);\n return s;\n };\n const official = (node: ts.Node, name: string) => {\n const s = symbol(node);\n return (\n s?.name === name &&\n s.declarations?.some((d) => d.getSourceFile().fileName.startsWith(dirname(sdk) + \"/\"))\n );\n };\n const diagnosticFor = (node: ts.Node, message: string): Diagnostic => {\n const source = node.getSourceFile();\n const start = node.getStart(source);\n const position = source.getLineAndCharacterOfPosition(start);\n return error(\"PLC1010\", message, {\n file: source.fileName,\n start,\n end: node.end,\n line: position.line + 1,\n column: position.character + 1,\n });\n };\n const fail: (node: ts.Node, message: string) => never = (node, message) => {\n throw { asyncDiagnostic: diagnosticFor(node, message) };\n };\n type Routine = ts.FunctionDeclaration | ts.MethodDeclaration;\n const functions = new Map<ts.Symbol, Routine>();\n const methods = new Map<\n ts.Symbol,\n { start: string; reset: string; snapshot: string; advance: string }\n >();\n for (const source of runtimeSources(program)) {\n if (source.isDeclarationFile) continue;\n for (const statement of source.statements) {\n const routines = ts.isClassDeclaration(statement)\n ? statement.members.filter(ts.isMethodDeclaration)\n : [statement];\n for (const fn of routines) {\n if (\n (!ts.isFunctionDeclaration(fn) && !ts.isMethodDeclaration(fn)) ||\n !fn.name ||\n !fn.modifiers?.some((m) => m.kind === ts.SyntaxKind.AsyncKeyword)\n )\n continue;\n functions.set(symbol(fn.name)!, fn);\n if (ts.isMethodDeclaration(fn)) {\n const prefix = `tsplcAsync${fn.name.getText(source)}${fn.getStart(source)}`;\n methods.set(symbol(fn.name)!, {\n start: prefix + \"Start\",\n reset: prefix + \"Reset\",\n snapshot: prefix + \"Snapshot\",\n advance: prefix + \"Advance\",\n });\n }\n }\n }\n }\n if (!functions.size) return result;\n const aliasPrefix = (fn: Routine) =>\n `TsplcAsync${fn.name!.getText(fn.getSourceFile())}${fn.getStart(fn.getSourceFile())}`;\n const printer = ts.createPrinter({ removeComments: false });\n let sequence = 0;\n const ownedContinuations = new Map<ts.Symbol, string[]>();\n const ownedJobs = new Map<\n ts.Symbol,\n { method: string; schedule: NonNullable<PlcProgram[\"background\"]> }[]\n >();\n for (const source of runtimeSources(program)) {\n if (source.isDeclarationFile) continue;\n try {\n const replacements: { start: number; end: number; text: string }[] = [],\n extra: string[] = [];\n const text = (node: ts.Node) => node.getText(source);\n for (const fn of functions.values()) {\n if (fn.getSourceFile() !== source) continue;\n const method = methods.get(symbol(fn.name!)!);\n if (!fn.name || !functions.has(symbol(fn.name)!)) continue;\n if (\n !fn.body ||\n fn.typeParameters?.length ||\n !fn.type ||\n !ts.isTypeReferenceNode(fn.type) ||\n fn.type.typeName.getText(source) !== \"Promise\" ||\n fn.type.typeArguments?.length !== 1\n )\n fail(\n fn,\n \"Async functions require concrete parameters and an explicit Promise<T> result.\",\n );\n const returnsVoid = fn.type.typeArguments[0]!.kind === ts.SyntaxKind.VoidKeyword;\n const returnType = returnsVoid ? \"BOOL\" : text(fn.type.typeArguments[0]!);\n const resultAggregate = Boolean(\n checker.getTypeFromTypeNode(fn.type.typeArguments[0]!).flags & ts.TypeFlags.Object,\n );\n const fields = new Map<ts.Symbol, { name: string; type: string; aggregate: boolean }>();\n const parameters = fn.parameters.map((p, index) => {\n if (\n !ts.isIdentifier(p.name) ||\n !p.type ||\n p.initializer ||\n p.questionToken ||\n p.dotDotDotToken\n )\n fail(p, \"Async parameters require explicit concrete value types.\");\n if (/\\bInOut\\b/.test(text(p.type)))\n fail(p, \"InOut cannot cross an async suspension; pass a value snapshot.\");\n fields.set(symbol(p.name)!, {\n name: `argument${index}`,\n type: text(p.type),\n aggregate: Boolean(checker.getTypeFromTypeNode(p.type).flags & ts.TypeFlags.Object),\n });\n return {\n name: p.name.text,\n type: text(p.type),\n aggregate: Boolean(checker.getTypeFromTypeNode(p.type).flags & ts.TypeFlags.Object),\n field: `argument${index}`,\n };\n });\n const containsAwait = (node: ts.Node): boolean =>\n ts.isAwaitExpression(node) || node.getChildren(source).some(containsAwait);\n const collect = (node: ts.Node) => {\n if (ts.isForStatement(node)) {\n if (containsAwait(node))\n fail(node, \"Await inside loops is not supported yet; use bounded async calls.\");\n return;\n }\n if (ts.isFunctionLike(node) && node !== fn)\n fail(node, \"Closures and nested functions are not supported in async PLC routines.\");\n if (ts.isCatchClause(node)) {\n const declaration = node.variableDeclaration;\n if (declaration) {\n if (!ts.isIdentifier(declaration.name))\n fail(declaration, \"Catch requires a named error code or no binding.\");\n fields.set(symbol(declaration.name)!, {\n name: `caught${fields.size}`,\n type: \"UDINT\",\n aggregate: false,\n });\n }\n collect(node.block);\n return;\n }\n if (ts.isVariableDeclaration(node)) {\n if (!ts.isIdentifier(node.name) || !node.initializer)\n fail(node, \"Async locals need names and initializers.\");\n let type = node.type ? text(node.type) : undefined;\n if (!type) {\n if (\n node.initializer.kind === ts.SyntaxKind.TrueKeyword ||\n node.initializer.kind === ts.SyntaxKind.FalseKeyword\n )\n type = \"BOOL\";\n else if (\n ts.isAwaitExpression(node.initializer) &&\n ts.isCallExpression(node.initializer.expression)\n ) {\n const call = node.initializer.expression;\n const target = ts.isPropertyAccessExpression(call.expression)\n ? call.expression.name\n : call.expression;\n const called = functions.get(symbol(target)!);\n if (called?.type && ts.isTypeReferenceNode(called.type)) {\n type = called.type.typeArguments![0]!.getText(called.getSourceFile());\n if (called.getSourceFile() !== source) {\n type = `${aliasPrefix(called)}Result`;\n const path = relative(\n dirname(source.fileName),\n called.getSourceFile().fileName,\n ).replaceAll(\"\\\\\", \"/\");\n const statement = `import type {${type}} from ${JSON.stringify(path.startsWith(\".\") ? path : `./${path}`)};`;\n if (!extra.includes(statement)) extra.push(statement);\n }\n }\n }\n if (!type) fail(node, \"Annotate async locals with their concrete PLC type.\");\n }\n fields.set(symbol(node.name)!, {\n name: `local${fields.size}`,\n type,\n aggregate: Boolean(checker.getTypeAtLocation(node).flags & ts.TypeFlags.Object),\n });\n }\n ts.forEachChild(node, collect);\n };\n collect(fn.body);\n const rewrite = (node: ts.Node): string => {\n const transformed = ts.transform(node, [\n (context) => (root) => {\n const visit = (n: ts.Node): ts.VisitResult<ts.Node> => {\n if (\n method &&\n ts.isPropertyAccessExpression(n) &&\n n.expression.kind === ts.SyntaxKind.ThisKeyword\n ) {\n return ts.factory.createElementAccessExpression(\n ts.factory.createThis(),\n ts.factory.createStringLiteral(n.name.text),\n );\n }\n if (ts.isIdentifier(n)) {\n const field = fields.get(symbol(n)!);\n if (\n field &&\n !(ts.isPropertyAccessExpression(n.parent) && n.parent.name === n) &&\n !(ts.isPropertyAssignment(n.parent) && n.parent.name === n)\n )\n return ts.factory.createPropertyAccessExpression(\n ts.factory.createThis(),\n field.name,\n );\n }\n if (ts.isShorthandPropertyAssignment(n)) {\n const value = checker.getShorthandAssignmentValueSymbol(n),\n field = value && fields.get(value);\n if (field)\n return ts.factory.createPropertyAssignment(\n n.name,\n ts.factory.createPropertyAccessExpression(\n ts.factory.createThis(),\n field.name,\n ),\n );\n }\n return ts.visitEachChild(n, visit, context);\n };\n return ts.visitNode(root, visit) as typeof root;\n },\n ]);\n const value = printer.printNode(\n ts.EmitHint.Unspecified,\n transformed.transformed[0]!,\n source,\n );\n transformed.dispose();\n return value;\n };\n const nodes = new Map<number, string>();\n const yielding = new Set<number>();\n let nextId = 1;\n const state = (body: string, yields = false) => {\n const id = nextId++;\n nodes.set(id, body);\n if (yields) yielding.add(id);\n return id;\n };\n const children: string[] = [],\n resets: string[] = [],\n cancels: string[] = [];\n const finish = (value: string) =>\n `this.value = ${copyValue(value, resultAggregate)}; this.busy = false; this.done = true; this.step = 0;`;\n const failure = (error: string) =>\n `this.error = ${error}; if(this.error === 0)this.error=4; this.busy = false; this.done = true; this.step = 0;`;\n const awaitState = (\n awaited: ts.AwaitExpression | ts.CallExpression,\n target: string | undefined,\n next: number,\n reject: (error: string, cancellable?: boolean) => string,\n ): number => {\n const expression = ts.isAwaitExpression(awaited) ? awaited.expression : awaited;\n if (!ts.isCallExpression(expression))\n fail(awaited, \"Await requires a tsPLC operation or a statically named async function.\");\n const call = expression,\n name = ts.isPropertyAccessExpression(call.expression)\n ? call.expression.name\n : call.expression;\n const child = `child${children.length}`;\n if (official(name, \"sleep\")) {\n if (call.arguments.length !== 1 || call.typeArguments?.length || target)\n fail(call, \"sleep takes one TIME and returns void.\");\n children.push(`private ${child} = new OnDelayTimer();`);\n resets.push(`this.${child}.update({enabled:false,duration:ms(0)});`);\n const poll = state(\n `this.${child}.update({enabled:true,duration:${rewrite(call.arguments[0]!)}}); if(this.${child}.out.done) { this.step = ${next}; }`,\n );\n return state(\n `this.${child}.update({enabled:true,duration:${rewrite(call.arguments[0]!)}});this.step=${poll};`,\n true,\n );\n }\n if (official(name, \"fetch\") || official(name, \"opcuaCall\")) {\n const rpc = official(name, \"opcuaCall\");\n if (\n call.arguments.length < 1 ||\n call.arguments.length > 2 ||\n !call.typeArguments?.length ||\n call.typeArguments.length > 2\n )\n fail(\n call,\n \"fetch<Response, Request?> requires a URL and optional { method, json } options.\",\n );\n const url = staticString(checker, call.arguments[0]!);\n if (url === undefined)\n fail(\n call.arguments[0]!,\n \"fetch URL must be a literal or compile-time const string; configuration properties must be readonly.\",\n );\n const options = rpc ? undefined : call.arguments[1];\n if (options && !ts.isObjectLiteralExpression(options))\n fail(options, \"fetch options must be an inline { method, json } object.\");\n let method: \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\" = rpc ? \"POST\" : \"GET\";\n let json: ts.Expression | undefined = rpc ? call.arguments[1] : undefined;\n if (options && ts.isObjectLiteralExpression(options))\n for (const property of options.properties) {\n if (!ts.isPropertyAssignment(property) || !ts.isIdentifier(property.name))\n fail(property, \"fetch options require named properties.\");\n if (property.name.text === \"method\") {\n const value = staticString(checker, property.initializer);\n if (\n value !== \"GET\" &&\n value !== \"POST\" &&\n value !== \"PUT\" &&\n value !== \"PATCH\" &&\n value !== \"DELETE\"\n )\n fail(property, \"Unsupported fetch method.\");\n method = value;\n } else if (property.name.text === \"json\") json = property.initializer;\n else fail(property, \"Unsupported fetch option.\");\n }\n if (method === \"GET\" && json) fail(call, \"GET requests cannot contain json.\");\n const responseType = text(call.typeArguments[0]!),\n httpName = `Tsplc${rpc ? \"Rpc\" : \"Http\"}${sequence++}`;\n let requestType = `${httpName}Request`;\n if (!json) extra.push(`interface ${requestType} {reserved:BOOL}`);\n if (json) {\n if (call.typeArguments[1]) requestType = text(call.typeArguments[1]);\n else {\n const layout = checker.getTypeAtLocation(json);\n if (!layout.aliasSymbol && (!layout.symbol || layout.symbol.name === \"__type\"))\n fail(\n json,\n \"Annotate json with a named PLC record or supply the Request type argument.\",\n );\n requestType = checker.typeToString(\n layout,\n json,\n ts.TypeFormatFlags.NoTruncation |\n ts.TypeFormatFlags.UseAliasDefinedOutsideCurrentScope,\n );\n }\n }\n extra.push(`interface ${httpName}Input {start:BOOL;cancel:BOOL;request:${requestType}}\ninterface ${httpName}Output {busy:BOOL;done:BOOL;error:UDINT;result:${responseType}}\nclass ${httpName} extends FunctionBlock<${httpName}Input,${httpName}Output> { protected execute(input:${httpName}Input):${httpName}Output {return {busy:false,done:false,error:0,result:defaultValue<${responseType}>()};} }`);\n result.blocks.set(\n `${source.fileName}:${httpName}`,\n rpc\n ? { kind: \"rpc\", path: url }\n : {\n kind: \"http\",\n url,\n method,\n json: Boolean(json),\n },\n );\n children.push(`private ${child} = new ${httpName}();`);\n resets.push(\n `this.${child}.update({start:false,cancel:false,request:defaultValue<${requestType}>()});`,\n );\n cancels.push(\n `this.${child}.update({start:false,cancel:true,request:defaultValue<${requestType}>()});`,\n );\n return state(\n `this.${child}.update({start:true,cancel:false,request:${json ? rewrite(json) : `defaultValue<${requestType}>()`}}); if(this.${child}.out.done) { if(this.${child}.out.error !== 0) {${reject(`this.${child}.out.error`, true)}} else {${target ? `${target} = ${copyValue(`this.${child}.out.result`, Boolean(checker.getAwaitedType(checker.getTypeAtLocation(call))!.flags & ts.TypeFlags.Object))};` : \"\"}this.step = ${next};} }`,\n );\n }\n const jobDeclaration = symbol(name)?.declarations?.find(\n (node) => ts.isVariableDeclaration(node) || ts.isPropertyDeclaration(node),\n );\n const jobInitializer =\n jobDeclaration &&\n (ts.isVariableDeclaration(jobDeclaration) || ts.isPropertyDeclaration(jobDeclaration))\n ? jobDeclaration.initializer\n : undefined;\n if (\n jobInitializer &&\n ts.isCallExpression(jobInitializer) &&\n ts.isPropertyAccessExpression(jobInitializer.expression) &&\n official(jobInitializer.expression.expression, \"backgroundTasks\") &&\n jobInitializer.expression.name.text === \"define\"\n ) {\n const receiver = rewrite(call.expression),\n borrow = `borrow${children.length}`;\n children.push(`private ${borrow}:BOOL=false;`);\n resets.push(`this.${borrow}=false;`);\n cancels.push(\n `if(this.${borrow}){${receiver}.cancel();const borrowed=${receiver}.snapshot();if(!borrowed.valid||borrowed.busy)return;if(!${receiver}.reset())return;this.${borrow}=false;}`,\n );\n const poll = state(\n `const borrowed=${receiver}.snapshot();if(borrowed.valid&&borrowed.done){if(${receiver}.reset()){this.${borrow}=false;if(borrowed.error!==0){${reject(\"borrowed.error\", true)}}else{${target ? `${target}=${copyValue(\"borrowed.result\", Boolean(checker.getAwaitedType(checker.getTypeAtLocation(call))!.flags & ts.TypeFlags.Object))};` : \"\"}this.step=${next};}}}`,\n );\n return state(\n `const available=${receiver}.snapshot();if(!available.valid)return;if(available.busy||available.done){${reject(\"7\")}}else{const accepted:BOOL=${receiver}.start(${call.arguments.map(rewrite).join(\",\")});if(accepted){this.${borrow}=true;this.step=${poll};}}`,\n true,\n );\n }\n const called = functions.get(symbol(name)!);\n if (!called) fail(call, \"Await requires a known async helper or SDK operation.\");\n const calledMethod = methods.get(symbol(name)!);\n if (calledMethod) {\n if (!ts.isPropertyAccessExpression(call.expression))\n fail(call, \"Async methods require a static receiver.\");\n const receiver = rewrite(call.expression.expression);\n const borrow = `methodBorrow${children.length}`;\n children.push(`private ${borrow}:BOOL=false;`);\n resets.push(\n `if(this.${borrow}){${receiver}.${calledMethod.reset}();this.${borrow}=false;}`,\n );\n cancels.push(\n `if(this.${borrow}){${receiver}.${calledMethod.advance}({cancel:true});const cancellingChild=${receiver}.${calledMethod.snapshot}();if(cancellingChild.busy)return;${receiver}.${calledMethod.reset}();this.${borrow}=false;}`,\n );\n const poll = state(\n `${receiver}.${calledMethod.advance}({cancel:false});const childState=${receiver}.${calledMethod.snapshot}();if(childState.done){${receiver}.${calledMethod.reset}();this.${borrow}=false;if(childState.error!==0){${reject(\"childState.error\", true)}}else{${target ? `${target}=${copyValue(\"childState.result\", Boolean(checker.getAwaitedType(checker.getTypeAtLocation(call))!.flags & ts.TypeFlags.Object))};` : \"\"}this.step=${next};}}`,\n );\n return state(\n `const accepted:BOOL=${receiver}.${calledMethod.start}(${call.arguments.map(rewrite).join(\",\")});if(!accepted){${reject(\"7\")}}else{this.${borrow}=true;${receiver}.${calledMethod.advance}({cancel:false});this.step=${poll};}`,\n true,\n );\n }\n if (!ts.isIdentifier(call.expression))\n fail(call, \"Async helpers require a static function.\");\n children.push(`private ${child} = new ${text(call.expression)}();`);\n resets.push(`this.${child}.reset();`);\n cancels.push(\n `this.${child}.update({cancel:true});const cancellingChild=this.${child}.snapshot();if(cancellingChild.busy)return;`,\n );\n const poll = state(\n `this.${child}.update({cancel:false}); const childState = this.${child}.snapshot(); if(childState.done) {if(childState.error !== 0) {${reject(\"childState.error\", true)}} else {${target ? `${target} = ${copyValue(\"childState.result\", Boolean(checker.getAwaitedType(checker.getTypeAtLocation(call))!.flags & ts.TypeFlags.Object))};` : \"\"}this.step = ${next};} }`,\n );\n return state(\n `const accepted:BOOL = this.${child}.start(${call.arguments.map(rewrite).join(\",\")}); if(accepted){this.${child}.update({cancel:false});this.step = ${poll};}`,\n true,\n );\n };\n const block = (\n statements: readonly ts.Statement[],\n next: number,\n reject: (error: string, cancellable?: boolean) => string = failure,\n ): number => {\n let entry = next;\n for (const stmt of [...statements].reverse()) {\n if (ts.isBlock(stmt)) {\n entry = block(stmt.statements, entry, reject);\n continue;\n }\n if (ts.isIfStatement(stmt)) {\n const yes = block([stmt.thenStatement], entry, reject),\n no = stmt.elseStatement ? block([stmt.elseStatement], entry, reject) : entry;\n entry = state(\n `if(${rewrite(stmt.expression)}) this.step = ${yes}; else this.step = ${no};`,\n );\n continue;\n }\n if (ts.isTryStatement(stmt)) {\n if (!stmt.catchClause || stmt.finallyBlock)\n fail(stmt, \"Async try requires catch; finally is not supported yet.\");\n const caught = block(stmt.catchClause.block.statements, entry, reject);\n const declaration = stmt.catchClause.variableDeclaration;\n const field = declaration && fields.get(symbol(declaration.name)!);\n entry = block(stmt.tryBlock.statements, entry, (error, cancellable) => {\n const recover = `${field ? `this.${field.name} = ${error};` : \"\"}this.step = ${caught};`;\n return cancellable\n ? `if(${error} === 1) {${failure(error)}} else {${recover}}`\n : recover;\n });\n continue;\n }\n if (ts.isThrowStatement(stmt)) {\n if (\n !checker.isTypeAssignableTo(\n checker.getTypeAtLocation(stmt.expression),\n checker.getNumberType(),\n )\n )\n fail(stmt, \"Async throw requires a numeric error code.\");\n entry = state(reject(rewrite(stmt.expression)));\n continue;\n }\n if (ts.isReturnStatement(stmt)) {\n if (!stmt.expression) {\n if (!returnsVoid) fail(stmt, \"Async routines must return a value.\");\n entry = state(finish(\"true\"));\n continue;\n }\n const adopted =\n ts.isCallExpression(stmt.expression) &&\n checker.getAwaitedType(checker.getTypeAtLocation(stmt.expression)) !==\n checker.getTypeAtLocation(stmt.expression)\n ? stmt.expression\n : undefined;\n const suspension = ts.isAwaitExpression(stmt.expression) ? stmt.expression : adopted;\n entry = suspension\n ? awaitState(\n suspension,\n returnsVoid ? undefined : \"this.value\",\n state(finish(returnsVoid ? \"true\" : \"this.value\")),\n reject,\n )\n : state(finish(rewrite(stmt.expression)));\n continue;\n }\n if (ts.isVariableStatement(stmt)) {\n for (const dec of [...stmt.declarationList.declarations].reverse()) {\n const field = fields.get(symbol(dec.name)!);\n if (!field || !dec.initializer) fail(dec, \"Invalid async local.\");\n const target = `this.${field.name}`;\n entry = ts.isAwaitExpression(dec.initializer)\n ? awaitState(dec.initializer, target, entry, reject)\n : state(\n `${target} = ${copyValue(rewrite(dec.initializer), field.aggregate)}; this.step = ${entry};`,\n );\n }\n continue;\n }\n if (ts.isExpressionStatement(stmt) && ts.isAwaitExpression(stmt.expression)) {\n entry = awaitState(stmt.expression, undefined, entry, reject);\n continue;\n }\n if (containsAwait(stmt))\n fail(\n stmt,\n \"This suspension position is not supported; await into a named local or return.\",\n );\n if (ts.isWhileStatement(stmt) || ts.isDoStatement(stmt))\n fail(stmt, \"Unbounded loops are not supported in async routines.\");\n entry = state(`${rewrite(stmt)} this.step = ${entry};`);\n }\n return entry;\n };\n const entry = block(fn.body.statements, state(returnsVoid ? finish(\"true\") : failure(\"4\")));\n const exported = fn.modifiers?.some((m) => m.kind === ts.SyntaxKind.ExportKeyword)\n ? \"export \"\n : \"\";\n const aliases = `export type ${aliasPrefix(fn)}Result = ${returnType};\\n${parameters.map((p, i) => `export type ${aliasPrefix(fn)}Argument${i} = ${p.type};`).join(\"\\n\")}`;\n const generated = `${aliases}\\n${exported}class ${fn.name!.getText(source)} extends FunctionBlock<{cancel:BOOL}> {\nprivate step:UINT=0; private cancelling:BOOL=false; private busy:BOOL=false; private done:BOOL=false; private error:UDINT=0; private value:${returnType}=defaultValue<${returnType}>();\n${[...fields.values()].map((f) => `private ${f.name}:${f.type}=defaultValue<${f.type}>();`).join(\"\\n\")}\n${children.join(\"\\n\")}\nstart(${parameters.map((p) => `${p.name}:${p.type}`).join(\",\")}):BOOL {if(this.busy || this.done)return false; ${parameters.map((p) => `this.${p.field} = ${copyValue(p.name, p.aggregate)};`).join(\" \")} ${resets.join(\" \")} this.value = defaultValue<${returnType}>(); this.error=0;this.cancelling=false;this.busy=true;this.done=false;this.step=${entry};return true;}\nreset():void {${resets.join(\" \")} this.busy=false;this.cancelling=false;this.done=false;this.error=0;this.step=0;}\nsnapshot():{busy:BOOL;done:BOOL;error:UDINT;result:${returnType}} {return {busy:this.busy,done:this.done,error:this.error,result:${copyValue(\"this.value\", resultAggregate)}};}\nprotected execute(input:{cancel:BOOL}):void {if(!this.busy)return;if(input.cancel)this.cancelling=true;if(this.cancelling){${cancels.map((cancel) => `{${cancel}}`).join(\" \")}${failure(\"1\")}return;}for(let transition:DINT=0;transition<${nodes.size + 1};transition++){const previous:UINT=this.step;switch(this.step){${[...nodes].map(([id, body]) => `case ${id}: {${body}} break;`).join(\"\\n\")} }if(!this.busy||this.step===previous${[...yielding].map((id) => `||previous===${id}`).join(\"\")})return;}}\n\n}`;\n if (!method)\n replacements.push({ start: fn.getStart(source), end: fn.end, text: generated });\n else {\n const parsed = ts.createSourceFile(\n source.fileName,\n generated,\n ts.ScriptTarget.Latest,\n true,\n );\n const worker = parsed.statements.find(ts.isClassDeclaration)!;\n const names = new Map(\n worker.members.map((member) => [\n member.name!.getText(parsed),\n `tsplcAsync${fn.getStart(source)}_${member.name!.getText(parsed)}`,\n ]),\n );\n names.set(\"start\", method.start);\n names.set(\"reset\", method.reset);\n names.set(\"snapshot\", method.snapshot);\n names.set(\"execute\", method.advance);\n const transformed = ts.transform(worker, [\n (context) => (root) => {\n const visit = (node: ts.Node): ts.VisitResult<ts.Node> => {\n if (\n ts.isElementAccessExpression(node) &&\n node.expression.kind === ts.SyntaxKind.ThisKeyword &&\n ts.isStringLiteral(node.argumentExpression)\n )\n return ts.factory.createPropertyAccessExpression(\n ts.factory.createThis(),\n node.argumentExpression.text,\n );\n if (\n ts.isPropertyAccessExpression(node) &&\n node.expression.kind === ts.SyntaxKind.ThisKeyword &&\n names.has(node.name.text)\n )\n return ts.factory.createPropertyAccessExpression(\n ts.factory.createThis(),\n names.get(node.name.text)!,\n );\n if (\n (ts.isPropertyDeclaration(node) || ts.isMethodDeclaration(node)) &&\n ts.isIdentifier(node.name) &&\n names.has(node.name.text)\n ) {\n const updated = ts.visitEachChild(node, visit, context);\n const name = ts.factory.createIdentifier(names.get(node.name.text)!);\n if (ts.isPropertyDeclaration(updated))\n return ts.factory.updatePropertyDeclaration(\n updated,\n updated.modifiers,\n name,\n updated.questionToken ?? updated.exclamationToken,\n updated.type,\n updated.initializer,\n );\n if (ts.isMethodDeclaration(updated))\n return ts.factory.updateMethodDeclaration(\n updated,\n [ts.factory.createModifier(ts.SyntaxKind.PublicKeyword)],\n updated.asteriskToken,\n name,\n updated.questionToken,\n updated.typeParameters,\n updated.parameters,\n updated.type,\n updated.body,\n );\n }\n return ts.visitEachChild(node, visit, context);\n };\n return ts.visitNode(root, visit) as typeof root;\n },\n ]);\n const generatedClass = transformed.transformed[0]!;\n replacements.push({\n start: fn.getStart(source),\n end: fn.end,\n text: generatedClass.members\n .map((member) => printer.printNode(ts.EmitHint.Unspecified, member, parsed))\n .join(\"\\n\"),\n });\n transformed.dispose();\n }\n }\n const workTypes = (fn: Routine, dec: ts.VariableDeclaration | ts.PropertyDeclaration) => {\n const reference = fn.type as ts.TypeReferenceNode;\n const returnType =\n reference.typeArguments![0]!.kind === ts.SyntaxKind.VoidKeyword\n ? \"BOOL\"\n : reference.typeArguments![0]!.getText(fn.getSourceFile());\n // Types in the job module must be visible: use the original inferred Promise result annotation at the definition boundary.\n const signature = checker.getSignatureFromDeclaration(fn)!;\n const promised = checker.getAwaitedType(checker.getReturnTypeOfSignature(signature))!;\n const resultType =\n promised.flags & ts.TypeFlags.Void\n ? \"BOOL\"\n : checker.typeToString(\n promised,\n dec,\n ts.TypeFormatFlags.NoTruncation |\n ts.TypeFormatFlags.UseAliasDefinedOutsideCurrentScope,\n );\n const params = fn.parameters.map((p, i) => ({\n field: `argument${i}`,\n name: `argument${i}`,\n aggregate: Boolean(checker.getTypeAtLocation(p).flags & ts.TypeFlags.Object),\n type: checker.typeToString(\n checker.getTypeAtLocation(p),\n dec,\n ts.TypeFormatFlags.NoTruncation | ts.TypeFormatFlags.UseAliasDefinedOutsideCurrentScope,\n ),\n }));\n // Preserve PLC widths erased by the TS checker when declarations share the module.\n for (let i = 0; i < params.length; i++)\n if (fn.getSourceFile() === source)\n params[i]!.type = fn.parameters[i]!.type!.getText(source);\n let valueType = fn.getSourceFile() === source ? returnType : resultType;\n if (fn.getSourceFile() !== source) {\n const prefix = aliasPrefix(fn);\n valueType = `${prefix}Result`;\n for (let i = 0; i < params.length; i++) params[i]!.type = `${prefix}Argument${i}`;\n const path = relative(dirname(source.fileName), fn.getSourceFile().fileName).replaceAll(\n \"\\\\\",\n \"/\",\n );\n extra.push(\n `import type {${valueType},${params.map((p) => p.type).join(\",\")}} from ${JSON.stringify(path.startsWith(\".\") ? path : `./${path}`)};`,\n );\n }\n const valueAggregate = Boolean(promised.flags & ts.TypeFlags.Object);\n return { params, valueType, valueAggregate };\n };\n const definitions = source.statements.flatMap<\n ts.VariableDeclaration | ts.PropertyDeclaration\n >((stmt) => {\n if (ts.isVariableStatement(stmt)) return [...stmt.declarationList.declarations];\n if (ts.isClassDeclaration(stmt)) return stmt.members.filter(ts.isPropertyDeclaration);\n return [];\n });\n for (const dec of definitions) {\n const owner = ts.isPropertyDeclaration(dec) ? dec.parent : undefined;\n const init = dec.initializer;\n if (\n !init ||\n !ts.isCallExpression(init) ||\n !ts.isPropertyAccessExpression(init.expression) ||\n (!official(init.expression.expression, \"backgroundTasks\") &&\n !official(init.expression.expression, \"cooperativeTasks\") &&\n !official(init.expression.expression, \"tasks\")) ||\n init.expression.name.text !== \"define\"\n )\n continue;\n if (official(init.expression.expression, \"tasks\")) {\n const fn = functions.get(symbol(init.arguments[0] ?? init)!);\n if (!ts.isIdentifier(dec.name) || init.arguments.length !== 1 || !fn?.type)\n fail(init, \"tasks.define requires one named async function with a return type.\");\n const { params, valueType, valueAggregate } = workTypes(fn, dec);\n const worker = `tsplcTaskWorker${sequence++}`;\n const receiver = `this.${worker}`;\n const site = taskSite(\n dec.name.text,\n params,\n {\n start: `${receiver}.start`,\n advance: `${receiver}.update`,\n snapshot: `${receiver}.snapshot`,\n reset: `${receiver}.reset`,\n declaration: `private ${worker}=new ${init.arguments[0]!.getText(source)}();`,\n },\n Boolean(owner),\n { type: valueType, aggregate: valueAggregate },\n );\n if (owner) {\n if (!owner.name) fail(owner, \"Task owners require a named block.\");\n replacements.push({ start: dec.getStart(source), end: dec.end, text: site.body });\n ownedContinuations.set(symbol(owner.name)!, [\n ...(ownedContinuations.get(symbol(owner.name)!) ?? []),\n site.poll,\n ]);\n const visit = (node: ts.Node): void => {\n if (\n ts.isCallExpression(node) &&\n ts.isPropertyAccessExpression(node.expression) &&\n ts.isPropertyAccessExpression(node.expression.expression) &&\n node.expression.expression.expression.kind === ts.SyntaxKind.ThisKeyword &&\n symbol(node.expression.expression.name) === symbol(dec.name)\n ) {\n const renamed = site.renames.get(node.expression.name.text);\n if (renamed)\n replacements.push({\n start: node.expression.getStart(source),\n end: node.expression.end,\n text: `this.${renamed}`,\n });\n }\n ts.forEachChild(node, visit);\n };\n visit(owner);\n } else {\n const name = `TsplcTaskSite${sequence++}`,\n entry = `tsplcContinuation${sequence++}`;\n extra.push(`class ${name} extends FunctionBlock<{}>{${site.body}protected execute(input:{}):void{}}\nexport function ${entry}():void{${dec.name.text}.poll();}`);\n replacements.push({\n start: init.getStart(source),\n end: init.end,\n text: `new ${name}()`,\n });\n result.programs[entry] = { module: resolve(source.fileName), export: entry };\n result.continuations.set(entry, { instance: dec.name.text, file: source.fileName });\n }\n continue;\n }\n const cooperative = official(init.expression.expression, \"cooperativeTasks\");\n if (cooperative) {\n if (!ts.isIdentifier(dec.name) || init.arguments.length !== 1)\n fail(init, \"Invalid compiler-owned continuation slot.\");\n const workNode = init.arguments[0]!;\n const work = functions.get(\n symbol(ts.isPropertyAccessExpression(workNode) ? workNode.name : workNode)!,\n );\n if (!work) fail(workNode, \"A continuation requires a named async routine.\");\n const params = work.parameters.map((parameter, index) => ({\n name: `argument${index}`,\n type: parameter.type!.getText(work.getSourceFile()),\n aggregate: Boolean(checker.getTypeAtLocation(parameter).flags & ts.TypeFlags.Object),\n }));\n const workMethod = methods.get(symbol(work.name!)!);\n const worker = `tsplcCooperativeWorker${sequence++}`;\n const receiver = workMethod ? \"this\" : `this.${worker}`;\n const site = cooperativeSite(\n dec.name.text,\n params,\n {\n start: `${receiver}.${workMethod?.start ?? \"start\"}`,\n advance: `${receiver}.${workMethod?.advance ?? \"update\"}`,\n snapshot: `${receiver}.${workMethod?.snapshot ?? \"snapshot\"}`,\n reset: `${receiver}.${workMethod?.reset ?? \"reset\"}`,\n declaration: workMethod ? \"\" : `private ${worker}=new ${workNode.getText(source)}();`,\n },\n Boolean(owner),\n );\n if (owner) {\n if (!owner.name) fail(owner, \"Continuation owners require a named block.\");\n replacements.push({ start: dec.getStart(source), end: dec.end, text: site.body });\n ownedContinuations.set(symbol(owner.name)!, [\n ...(ownedContinuations.get(symbol(owner.name)!) ?? []),\n site.poll,\n ]);\n const visit = (node: ts.Node): void => {\n if (\n ts.isCallExpression(node) &&\n ts.isPropertyAccessExpression(node.expression) &&\n ts.isPropertyAccessExpression(node.expression.expression) &&\n node.expression.expression.expression.kind === ts.SyntaxKind.ThisKeyword &&\n symbol(node.expression.expression.name) === symbol(dec.name)\n ) {\n const renamed =\n node.expression.name.text === \"start\"\n ? site.start\n : node.expression.name.text === \"cancel\"\n ? site.cancel\n : undefined;\n if (renamed)\n replacements.push({\n start: node.expression.getStart(source),\n end: node.expression.end,\n text: `this.${renamed}`,\n });\n }\n ts.forEachChild(node, visit);\n };\n visit(owner);\n } else {\n const name = `TsplcCooperativeSite${sequence++}`,\n entry = `tsplcContinuation${sequence++}`;\n extra.push(`class ${name} extends FunctionBlock<{}>{${site.body}protected execute(input:{}):void{}}\nexport function ${entry}():void{${dec.name.text}.poll();}`);\n replacements.push({\n start: init.getStart(source),\n end: init.end,\n text: `new ${name}()`,\n });\n result.programs[entry] = { module: resolve(source.fileName), export: entry };\n result.continuations.set(entry, { instance: dec.name.text, file: source.fileName });\n }\n continue;\n }\n if (\n !ts.isIdentifier(dec.name) ||\n init.arguments.length !== 2 ||\n !ts.isObjectLiteralExpression(init.arguments[1]!)\n )\n fail(\n dec,\n \"Define background tasks at module scope or as function-block fields with a named async function and scheduling options.\",\n );\n const fn = functions.get(symbol(init.arguments[0]!)!);\n if (!fn?.type || !ts.isTypeReferenceNode(fn.type))\n fail(init, \"backgroundTasks.define requires a named async function.\");\n const { params, valueType, valueAggregate } = workTypes(fn, dec);\n const mailbox = `TsplcMailbox${sequence++}`,\n worker = `tsplcWorker${sequence++}`,\n entry = `tsplcBackground${sequence++}`;\n const requestType = `{ready:BOOL;${params.map((p) => `${p.field}:${p.type}`).join(\";\")}}`;\n const snapshotType = `{valid:BOOL;busy:BOOL;done:BOOL;cancelRequested:BOOL;error:UDINT;result:${valueType}}`;\n const emptySnapshot = `{valid:true,busy:this.pending || this.active,done:this.completed,cancelRequested:this.cancelRequested,error:this.failure,result:${copyValue(\"this.value\", valueAggregate)}}`;\n extra.push(`class ${mailbox} extends FunctionBlock<{}> {\nprivate pending:BOOL=false;private active:BOOL=false;private completed:BOOL=false;private cancelRequested:BOOL=false;private failure:UDINT=0;private value:${valueType}=defaultValue<${valueType}>();\n${params.map((p) => `private ${p.field}:${p.type}=defaultValue<${p.type}>();`).join(\"\\n\")}\nstart(${params.map((p) => `${p.name}:${p.type}`).join(\",\")}):BOOL {if(this.pending || this.active || this.completed)return false;${params.map((p) => `this.${p.field}=${copyValue(p.name, p.aggregate)};`).join(\"\")}this.pending=true;return true;}\ntake():${requestType} {const ready:BOOL=this.pending; if(ready){this.pending=false;this.active=true;}return {ready,${params.map((p) => `${p.field}:${copyValue(`this.${p.field}`, p.aggregate)}`).join(\",\")}};}\npublish(value:${valueType},error:UDINT):BOOL {if(!this.active)return false;if(this.cancelRequested){this.value=defaultValue<${valueType}>();this.failure=1;}else{this.value=${copyValue(\"value\", valueAggregate)};this.failure=error;}this.active=false;this.completed=true;this.cancelRequested=false;return true;}\nsnapshot():${snapshotType} {return ${emptySnapshot};}\ncancel():BOOL {if(this.pending){this.pending=false;this.completed=true;this.failure=1;return true;}if(this.active){this.cancelRequested=true;return true;}return false;}\nreset():BOOL {if(this.pending || this.active)return false;this.completed=false;this.failure=0;this.cancelRequested=false;this.value=defaultValue<${valueType}>();return true;}\nprotected execute(input:{}):void {}\n}\n`);\n const receiver = owner ? `this.${dec.name.text}` : dec.name.text;\n const workerReceiver = owner ? `this.${worker}` : worker;\n const run = `const request=${receiver}.take();if(request.ready){const accepted:BOOL=${workerReceiver}.start(${params.map((p) => `request.${p.field}`).join(\",\")});}const control=${receiver}.snapshot();if(!control.valid)return;${workerReceiver}.update({cancel:control.cancelRequested});const state=${workerReceiver}.snapshot();if(state.done){const published:BOOL=${receiver}.publish(state.result,state.error);if(published)${workerReceiver}.reset();}`;\n if (owner) {\n if (!owner.name) fail(owner, \"Background job owners need a named function block.\");\n replacements.push({\n start: owner.end - 1,\n end: owner.end - 1,\n text: `private ${worker}=new ${text(init.arguments[0]!)}();public ${entry}():void{${run}}`,\n });\n result.blocks.set(`${source.fileName}:${owner.name.text}`, { kind: \"backgroundHost\" });\n } else\n extra.push(\n `const ${worker}=new ${text(init.arguments[0]!)}();export function ${entry}():void{${run}}`,\n );\n result.blocks.set(`${source.fileName}:${mailbox}`, { kind: \"mailbox\" });\n const opts = new Map(\n init.arguments[1]!.properties.filter(ts.isPropertyAssignment).map((p) => [\n p.name.getText(source),\n p.initializer,\n ]),\n );\n const interval = opts.get(\"interval\"),\n priority = opts.get(\"priority\");\n if (\n !interval ||\n !ts.isCallExpression(interval) ||\n interval.arguments.length !== 1 ||\n !ts.isNumericLiteral(interval.arguments[0]!) ||\n !priority ||\n !ts.isNumericLiteral(priority) ||\n ![\"ms\", \"seconds\"].some((n) => official(interval.expression, n))\n )\n fail(init, \"Background schedules require a literal ms/seconds interval and priority.\");\n const milliseconds =\n Number(interval.arguments[0]!.text) *\n (official(interval.expression, \"seconds\") ? 1000 : 1);\n const taskPriority = Number(priority.text);\n if (\n !Number.isSafeInteger(milliseconds) ||\n milliseconds <= 0 ||\n milliseconds > 4294967295 ||\n !Number.isInteger(taskPriority) ||\n taskPriority < 1 ||\n taskPriority > 31\n )\n fail(\n init,\n \"Background interval must be positive and priority must be an integer in 1..31.\",\n );\n const schedule = {\n intervalNanoseconds: String(BigInt(milliseconds) * 1000000n),\n priority: taskPriority,\n mailbox: dec.name.text,\n worker,\n };\n if (owner) {\n const key = symbol(owner.name!)!;\n ownedJobs.set(key, [...(ownedJobs.get(key) ?? []), { method: entry, schedule }]);\n } else {\n result.programs[entry] = { module: resolve(source.fileName), export: entry };\n result.schedules.set(entry, schedule);\n }\n replacements.push({\n start: init.getStart(source),\n end: init.end,\n text: `new ${mailbox}()`,\n });\n }\n if (replacements.length) {\n let changed = source.text;\n for (const edit of replacements.sort((a, b) => b.start - a.start))\n changed = changed.slice(0, edit.start) + edit.text + changed.slice(edit.end);\n const generated = ts.createSourceFile(\n source.fileName,\n extra.join(\"\\n\"),\n ts.ScriptTarget.Latest,\n true,\n );\n const before = generated.statements\n .filter(ts.isClassDeclaration)\n .map((n) => n.getText(generated))\n .join(\"\\n\");\n const after = generated.statements\n .filter((n) => !ts.isClassDeclaration(n))\n .map((n) => n.getText(generated))\n .join(\"\\n\");\n result.sources.set(source.fileName, before + \"\\n\" + changed + \"\\n\" + after);\n }\n } catch (cause) {\n if (typeof cause === \"object\" && cause !== null && \"asyncDiagnostic\" in cause)\n result.diagnostics.push(cause.asyncDiagnostic as Diagnostic);\n else throw cause;\n }\n }\n for (const source of runtimeSources(program)) {\n if (source.isDeclarationFile) continue;\n const entries: string[] = [];\n // `new Block()` allocates one instance; `defaultValue<FixedArray<Block, N, Lower>>()` one per element.\n const allocated = (node: ts.Node) => {\n if (ts.isNewExpression(node)) return { block: node.expression };\n const type = ts.isCallExpression(node) ? node.typeArguments?.[0] : undefined;\n const [element, length, lower] =\n type && ts.isTypeReferenceNode(type) && type.typeName.getText(source) === \"FixedArray\"\n ? (type.typeArguments ?? [])\n : [];\n if (!element || !ts.isTypeReferenceNode(element) || !length) return undefined;\n // A literal, or a table's `(typeof table)[\"length\"]`.\n const integer = (node: ts.TypeNode) => {\n const type = checker.getTypeFromTypeNode(node);\n return type.isNumberLiteral() ? type.value : NaN;\n };\n const first = lower ? integer(lower) : 0;\n return { block: element.typeName, first, last: first + integer(length) - 1 };\n };\n const visit = (node: ts.Node): void => {\n const instance = allocated(node);\n if (instance) {\n const jobs = ownedJobs.get(symbol(instance.block)!);\n const polls = ownedContinuations.get(symbol(instance.block)!);\n if (jobs || polls) {\n const declaration = node.parent;\n if (\n !ts.isVariableDeclaration(declaration) ||\n !ts.isIdentifier(declaration.name) ||\n !ts.isVariableDeclarationList(declaration.parent) ||\n !ts.isVariableStatement(declaration.parent.parent) ||\n !ts.isSourceFile(declaration.parent.parent.parent) ||\n (jobs && instance.first !== undefined)\n ) {\n result.diagnostics.push(\n diagnosticFor(\n node,\n \"Function blocks with background jobs require module-level named instances.\",\n ),\n );\n return;\n }\n const name = declaration.name.text;\n for (const poll of polls ?? []) {\n const entry = `tsplcContinuation${sequence++}`;\n entries.push(\n instance.first === undefined\n ? `export function ${entry}():void{${name}.${poll}();}`\n : `export function ${entry}():void{for(let element:DINT=${instance.first};element<=${instance.last};element++){${name}[element].${poll}();}}`,\n );\n result.programs[entry] = { module: resolve(source.fileName), export: entry };\n result.continuations.set(entry, { instance: name, file: source.fileName });\n }\n for (const job of jobs ?? []) {\n const entry = `tsplcBackground${sequence++}`;\n entries.push(`export function ${entry}():void{${name}.${job.method}();}`);\n result.programs[entry] = { module: resolve(source.fileName), export: entry };\n result.schedules.set(entry, { ...job.schedule, worker: name });\n }\n }\n }\n ts.forEachChild(node, visit);\n };\n visit(source);\n if (entries.length)\n result.sources.set(\n source.fileName,\n (result.sources.get(source.fileName) ?? source.text) + \"\\n\" + entries.join(\"\\n\"),\n );\n }\n return result;\n};\n",
|
|
11
11
|
"interface Parameter {\n name: string;\n type: string;\n aggregate: boolean;\n}\ninterface Worker {\n start: string;\n advance: string;\n snapshot: string;\n reset: string;\n declaration: string;\n}\n\n/** A fixed call-site frame; callbacks and ordinary state stay in the caller task. */\nexport const cooperativeSite = (\n name: string,\n parameters: readonly Parameter[],\n worker: Worker,\n inline: boolean,\n) => {\n const prefix = inline ? name : \"site\";\n const field = (label: string) => `${prefix}_${label}`;\n const member = (label: string) => `this.${field(label)}`;\n const method = (label: string) => (inline ? `${name}_${label}` : label);\n const invoke = (label: string, args = \"\") => `this.${method(label)}(${args})`;\n const copy = (value: string, aggregate: boolean) => (aggregate ? `copy(${value})` : value);\n const faults = `${member(\"faults\")}=tsplcAsyncWrapAdd<UDINT>(${member(\"faults\")},1);${member(\"lastError\")}=7;`;\n const signature = parameters.map((parameter) => `${parameter.name}:${parameter.type}`).join(\",\");\n const args = parameters.map((parameter) => parameter.name).join(\",\");\n const queued = parameters.map((parameter) => member(`queued_${parameter.name}`)).join(\",\");\n const fields = `private ${field(\"active\")}:BOOL=false;private ${field(\"fresh\")}:BOOL=false;private ${field(\"cancelled\")}:BOOL=false;private ${field(\"queued\")}:BOOL=false;private ${field(\"faults\")}:UDINT=0;private ${field(\"lastError\")}:UDINT=0;\n${parameters.map((parameter) => `private ${field(`queued_${parameter.name}`)}:${parameter.type}=defaultValue<${parameter.type}>();`).join(\"\\n\")}\n${worker.declaration}`;\n const body = `${fields}\npublic ${method(\"begin\")}(${signature}):void{const accepted:BOOL=${worker.start}(${args});if(!accepted){${faults}return;}${member(\"active\")}=true;${member(\"fresh\")}=true;${member(\"cancelled\")}=false;${worker.advance}({cancel:false});}\npublic ${method(\"start\")}(${signature}):void{if(${member(\"active\")}){if(${member(\"cancelled\")}&&!${member(\"queued\")}){${parameters.map((parameter) => `${member(`queued_${parameter.name}`)}=${copy(parameter.name, parameter.aggregate)};`).join(\"\")}${member(\"queued\")}=true;}else{${faults}}return;}${invoke(\"begin\", args)};}\npublic ${method(\"cancel\")}():void{${member(\"cancelled\")}=true;${member(\"queued\")}=false;}\npublic ${method(\"poll\")}():void{\nif(${member(\"faults\")}>0&&tsplcPromiseDiagnostics.report(${member(\"lastError\")},${member(\"faults\")}))${member(\"faults\")}=0;\nif(!${member(\"active\")})return;\nif(${member(\"fresh\")}&&!${member(\"cancelled\")}){${member(\"fresh\")}=false;return;}\n${worker.advance}({cancel:${member(\"cancelled\")}});const state=${worker.snapshot}();if(!state.done)return;\nif(!${member(\"cancelled\")}&&state.error!==0&&state.error!==1){${member(\"faults\")}=tsplcAsyncWrapAdd<UDINT>(${member(\"faults\")},1);${member(\"lastError\")}=state.error;}\n${worker.reset}();${member(\"active\")}=false;\nif(${member(\"queued\")}){${member(\"queued\")}=false;${invoke(\"begin\", queued)};}\n}`;\n return { body, start: method(\"start\"), cancel: method(\"cancel\"), poll: method(\"poll\") };\n};\n\n/** A named task: the owner reads its state and result instead of attaching a callback. */\nexport const taskSite = (\n name: string,\n parameters: readonly Parameter[],\n worker: Worker,\n inline: boolean,\n value: { type: string; aggregate: boolean },\n) => {\n const method = (label: string) => (inline ? `${name}_${label}` : label);\n const cancelled = `this.${inline ? `${name}_cancelled` : \"cancelled\"}`;\n const signature = parameters.map((parameter) => `${parameter.name}:${parameter.type}`).join(\",\");\n const args = parameters.map((parameter) => parameter.name).join(\",\");\n const result = value.aggregate ? \"copy(state.result)\" : \"state.result\";\n const body = `private ${cancelled.slice(5)}:BOOL=false;\n${worker.declaration}\npublic ${method(\"start\")}(${signature}):BOOL{const accepted:BOOL=${worker.start}(${args});if(accepted){${cancelled}=false;${worker.advance}({cancel:false});}return accepted;}\npublic ${method(\"cancel\")}():BOOL{const state=${worker.snapshot}();if(!state.busy&&!state.done)return false;${cancelled}=true;return true;}\npublic ${method(\"snapshot\")}():{valid:BOOL;busy:BOOL;done:BOOL;cancelRequested:BOOL;error:UDINT;result:${value.type}}{const state=${worker.snapshot}();if(${cancelled}&&state.done)return {valid:true,busy:false,done:true,cancelRequested:false,error:1,result:defaultValue<${value.type}>()};return {valid:true,busy:state.busy,done:state.done,cancelRequested:${cancelled},error:state.error,result:${result}};}\npublic ${method(\"reset\")}():BOOL{const state=${worker.snapshot}();if(state.busy)return false;${worker.reset}();${cancelled}=false;return true;}\npublic ${method(\"poll\")}():void{${worker.advance}({cancel:${cancelled}});}`;\n return {\n body,\n poll: method(\"poll\"),\n renames: new Map([\"start\", \"cancel\", \"snapshot\", \"reset\"].map((m) => [m, method(m)])),\n };\n};\n",
|
|
12
12
|
"import { runtimeSources } from \"./module-graph.ts\";\nimport ts from \"typescript\";\nimport { dirname } from \"node:path\";\nimport { error, type Diagnostic } from \"@tsplc/compiler/ir\";\n\nconst symbolAt = (checker: ts.TypeChecker, node: ts.Node) => {\n let symbol = checker.getSymbolAtLocation(node);\n while (symbol && symbol.flags & ts.SymbolFlags.Alias) symbol = checker.getAliasedSymbol(symbol);\n return symbol;\n};\n\nexport const lowerEnvironment = (program: ts.Program, sdk: string) => {\n const checker = program.getTypeChecker();\n const sources = new Map<string, string>();\n const diagnostics: Diagnostic[] = [];\n for (const source of runtimeSources(program)) {\n if (source.isDeclarationFile) continue;\n const edits: { start: number; end: number; text: string }[] = [];\n const visit = (node: ts.Node): void => {\n if (ts.isCallExpression(node)) {\n const symbol = symbolAt(checker, node.expression);\n if (\n symbol?.name === \"env\" &&\n symbol.declarations?.some((declaration) =>\n declaration.getSourceFile().fileName.startsWith(dirname(sdk) + \"/\"),\n )\n ) {\n const name = node.arguments[0];\n let owner: ts.Node | undefined = node.parent;\n while (owner && !ts.isVariableDeclaration(owner) && !ts.isFunctionLike(owner))\n owner = owner.parent;\n const moduleConst =\n owner &&\n ts.isVariableDeclaration(owner) &&\n ts.isVariableDeclarationList(owner.parent) &&\n Boolean(owner.parent.flags & ts.NodeFlags.Const) &&\n ts.isVariableStatement(owner.parent.parent) &&\n ts.isSourceFile(owner.parent.parent.parent);\n const value = name && ts.isStringLiteral(name) ? process.env[name.text] : undefined;\n let message: string | undefined;\n if (\n !moduleConst ||\n node.arguments.length !== 1 ||\n !name ||\n !ts.isStringLiteral(name) ||\n node.typeArguments?.length !== 1\n )\n message =\n \"env<STRING<N>> requires a literal environment name in module-level const configuration.\";\n else if (value === undefined || value.length === 0)\n message = `Required environment value ${name.text} is missing.`;\n else if (value.includes(\"\\0\"))\n message = `Environment value ${name.text} contains an unsupported NUL byte.`;\n if (message) {\n const start = node.getStart(source),\n position = source.getLineAndCharacterOfPosition(start);\n diagnostics.push(\n error(\"PLC1011\", message, {\n file: source.fileName,\n start,\n end: node.end,\n line: position.line + 1,\n column: position.character + 1,\n }),\n );\n } else if (value !== undefined)\n edits.push({\n start: node.getStart(source),\n end: node.end,\n text: JSON.stringify(value),\n });\n return;\n }\n }\n ts.forEachChild(node, visit);\n };\n visit(source);\n if (!edits.length) continue;\n let text = source.text;\n for (const edit of edits.sort((a, b) => b.start - a.start))\n text = text.slice(0, edit.start) + edit.text + text.slice(edit.end);\n sources.set(source.fileName, text);\n }\n return { sources, diagnostics };\n};\n\n/** URL expressions are compile-time values, never reads from mutable PLC state. */\nexport const staticString = (checker: ts.TypeChecker, root: ts.Expression): string | undefined => {\n const active = new Set<ts.Node>();\n const valueNode = (node: ts.Node): ts.Node | undefined => {\n if (ts.isParenthesizedExpression(node)) return node.expression;\n if (ts.isIdentifier(node)) {\n const declaration = symbolAt(checker, node)?.declarations?.find(ts.isVariableDeclaration);\n if (\n declaration &&\n ts.isVariableDeclarationList(declaration.parent) &&\n declaration.parent.flags & ts.NodeFlags.Const\n )\n return declaration.initializer;\n }\n if (ts.isPropertyAccessExpression(node)) {\n const field = symbolAt(checker, node.name);\n if (\n !field?.declarations?.some(\n (declaration) =>\n ts.canHaveModifiers(declaration) &&\n ts\n .getModifiers(declaration)\n ?.some((modifier) => modifier.kind === ts.SyntaxKind.ReadonlyKeyword),\n )\n )\n return;\n const object = resolve(node.expression);\n if (object && ts.isObjectLiteralExpression(object)) {\n for (const property of object.properties) {\n if (\n ts.isPropertyAssignment(property) &&\n (ts.isIdentifier(property.name) || ts.isStringLiteral(property.name)) &&\n property.name.text === node.name.text\n )\n return property.initializer;\n }\n }\n return;\n }\n return node;\n };\n const resolve = (node: ts.Node): ts.Node | undefined => {\n if (active.has(node)) return;\n active.add(node);\n try {\n const next = valueNode(node);\n return next && next !== node ? resolve(next) : next;\n } finally {\n active.delete(node);\n }\n };\n const read = (node: ts.Node): string | undefined => {\n const resolved = resolve(node);\n if (!resolved || active.has(resolved)) return;\n active.add(resolved);\n try {\n if (ts.isStringLiteral(resolved) || ts.isNoSubstitutionTemplateLiteral(resolved))\n return resolved.text;\n if (ts.isTemplateExpression(resolved)) {\n let value = resolved.head.text;\n for (const part of resolved.templateSpans) {\n const item = read(part.expression);\n if (item === undefined) return;\n value += item + part.literal.text;\n }\n return value;\n }\n if (\n ts.isBinaryExpression(resolved) &&\n resolved.operatorToken.kind === ts.SyntaxKind.PlusToken\n ) {\n const left = read(resolved.left),\n right = read(resolved.right);\n if (left !== undefined && right !== undefined) return left + right;\n }\n } finally {\n active.delete(resolved);\n }\n };\n return read(root);\n};\n",
|
|
13
13
|
"import { runtimeSources } from \"./module-graph.ts\";\nimport ts from \"typescript\";\nimport { error, type Diagnostic } from \"@tsplc/compiler/ir\";\n\n/** Normalize static arrow bindings so all routine forms use the same PLC analysis. */\nexport const lowerConstFunctions = (program: ts.Program) => {\n const checker = program.getTypeChecker();\n const printer = ts.createPrinter();\n const sources = new Map<string, string>();\n const diagnostics: Diagnostic[] = [];\n\n for (const source of runtimeSources(program)) {\n if (source.isDeclarationFile) continue;\n const edits: { start: number; end: number; text: string }[] = [];\n for (const statement of source.statements) {\n const routines = ts.isClassDeclaration(statement)\n ? statement.members.filter(ts.isMethodDeclaration)\n : [statement];\n for (const routine of routines) {\n if (\n (!ts.isFunctionDeclaration(routine) && !ts.isMethodDeclaration(routine)) ||\n routine.type ||\n !routine.body ||\n !routine.modifiers?.some((item) => item.kind === ts.SyntaxKind.AsyncKeyword)\n )\n continue;\n const signature = checker.getSignatureFromDeclaration(routine);\n const result =\n signature && checker.getAwaitedType(checker.getReturnTypeOfSignature(signature));\n if (result && result.flags & ts.TypeFlags.Void) {\n const position = routine.body.getStart(source);\n edits.push({ start: position, end: position, text: \":Promise<void> \" });\n }\n }\n }\n for (const statement of source.statements) {\n if (\n !ts.isVariableStatement(statement) ||\n !statement.declarationList.declarations.some(\n (declaration) => declaration.initializer && ts.isArrowFunction(declaration.initializer),\n )\n )\n continue;\n\n const declarations: ts.Statement[] = [];\n for (const declaration of statement.declarationList.declarations) {\n const arrow = declaration.initializer;\n if (!arrow || !ts.isArrowFunction(arrow)) {\n declarations.push(\n ts.factory.updateVariableStatement(\n statement,\n statement.modifiers,\n ts.factory.updateVariableDeclarationList(statement.declarationList, [declaration]),\n ),\n );\n continue;\n }\n if (\n !(statement.declarationList.flags & ts.NodeFlags.Const) ||\n !ts.isIdentifier(declaration.name)\n ) {\n const start = declaration.getStart(source);\n const position = source.getLineAndCharacterOfPosition(start);\n diagnostics.push(\n error(\n \"PLC1007\",\n \"PLC routines require named const bindings; mutable function values are unsupported.\",\n {\n file: source.fileName,\n start,\n end: declaration.end,\n line: position.line + 1,\n column: position.character + 1,\n },\n ),\n );\n continue;\n }\n\n const contextual =\n declaration.type && ts.isFunctionTypeNode(declaration.type)\n ? declaration.type\n : undefined;\n const signature = checker.getTypeAtLocation(declaration.name).getCallSignatures()[0];\n const returnsVoid =\n signature &&\n Boolean(checker.getReturnTypeOfSignature(signature).flags & ts.TypeFlags.Void);\n const inferredResult =\n signature && checker.getAwaitedType(checker.getReturnTypeOfSignature(signature));\n const asyncVoid =\n arrow.modifiers?.some((item) => item.kind === ts.SyntaxKind.AsyncKeyword) &&\n inferredResult &&\n inferredResult.flags & ts.TypeFlags.Void;\n const inferredType = asyncVoid\n ? ts.factory.createTypeReferenceNode(\"Promise\", [\n ts.factory.createKeywordTypeNode(ts.SyntaxKind.VoidKeyword),\n ])\n : undefined;\n const result =\n arrow.type ??\n contextual?.type ??\n (returnsVoid\n ? ts.factory.createKeywordTypeNode(ts.SyntaxKind.VoidKeyword)\n : inferredType);\n const parameters = arrow.parameters.map((parameter, index) =>\n ts.factory.updateParameterDeclaration(\n parameter,\n parameter.modifiers,\n parameter.dotDotDotToken,\n parameter.name,\n parameter.questionToken,\n parameter.type ?? contextual?.parameters[index]?.type,\n parameter.initializer,\n ),\n );\n const body = ts.isBlock(arrow.body)\n ? arrow.body\n : ts.factory.createBlock(\n [\n result?.kind === ts.SyntaxKind.VoidKeyword\n ? ts.factory.createExpressionStatement(arrow.body)\n : ts.factory.createReturnStatement(arrow.body),\n ],\n true,\n );\n declarations.push(\n ts.factory.createFunctionDeclaration(\n [...(statement.modifiers ?? []), ...(arrow.modifiers ?? [])],\n undefined,\n declaration.name,\n arrow.typeParameters ?? contextual?.typeParameters,\n parameters,\n result,\n body,\n ),\n );\n }\n edits.push({\n start: statement.getStart(source),\n end: statement.end,\n text: declarations\n .map((declaration) => printer.printNode(ts.EmitHint.Unspecified, declaration, source))\n .join(\"\\n\"),\n });\n }\n if (!edits.length) continue;\n let text = source.text;\n for (const edit of edits.reverse())\n text = text.slice(0, edit.start) + edit.text + text.slice(edit.end);\n sources.set(source.fileName, text);\n }\n return { sources, diagnostics };\n};\n",
|
|
@@ -19,7 +19,7 @@
|
|
|
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": "
|
|
22
|
+
"mappings": "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",
|
|
23
|
+
"debugId": "1915DD200BDBBFDB64756E2164756E21",
|
|
24
24
|
"names": []
|
|
25
25
|
}
|