import { BuiltinArtifact, ComponentArtifact, DeploymentArtifact, IdentifierExpression, ServiceArtifact } from "../../language/generated/ast.js"; import { KumoriServices } from "../../language/kumori.js"; import { Cache } from "../../util/cache.js"; import { Maybe } from "../../util/maybe.js"; import { AstNode } from "langium"; import { Assignable } from "./assignment.js"; import { Complete } from "./complete.js"; import { InferResult } from "./infer.js"; import { AstNodeType, TypeSystemError } from "./type.js"; import { AstNodeValue, VCast, VFunctionCall, VRef, VStruct } from "./value.js"; export interface EvalContext { svcs: KumoriServices; cache: Cache; infer: (node: AstNode) => InferResult; complete: typeof Complete; assignable: (from: AstNodeType, to: AstNodeType) => ReturnType; } export interface EvalContextInternal { svcs: KumoriServices; cache: Cache; infer: (node: AstNode) => InferResult; complete: typeof Complete; assignable: (from: AstNodeType, to: AstNodeType) => ReturnType; current?: Artifact; resolver?: ReturnType; } type Artifact = DeploymentArtifact | ServiceArtifact | ComponentArtifact | BuiltinArtifact; export type AstNodeTypedValue = { Value: AstNodeValue; Type: AstNodeType; }; export type EvalResult = [AstNodeTypedValue, TypeSystemError[]]; export declare function Eval(ctx: EvalContext, node: AstNode): EvalResult; export declare function EvalInternal(ctx: EvalContextInternal, node: AstNode): EvalResult; type Resolver = (Ref: IdentifierExpression, Default: () => EvalResult) => EvalResult; declare function Resolver(ctx: EvalContextInternal, current: Artifact, target: AstNode): Resolver; export declare function _Eval(ctx: EvalContextInternal, node: AstNode): EvalResult; export declare const EvalFailed: (_: EvalContextInternal, node: AstNode) => AstNodeValue; export declare const SimplifyValue: (value: AstNodeValue) => Exclude; export declare function VAccessor(self: VStruct, segment: string, ...segments: string[]): Maybe; export {};