/// /// import { ExpressionContext, ConstructDescription } from "../../compilation/contexts"; import { CPPConstruct, SuccessfullyCompiled, RuntimeConstruct } from "../CPPConstruct"; import { ExpressionType, VoidType } from "../../compilation/types"; import { Expression, ValueCategory, VCResultTypes, t_TypedExpression } from "./Expression"; import { RuntimeExpression } from "./RuntimeExpression"; import { OpaqueExpressionOutlet } from "../../../view/constructs/ExpressionOutlets"; import { ConstructOutlet } from "../../../view/constructs/ConstructOutlet"; import { CompiledTemporaryDeallocator } from "../TemporaryDeallocator"; import { OpaqueExpressionASTNode } from "../../../ast/ast_expressions"; export declare type OpaqueExpressionImpl = { type: T | ((context: ExpressionContext) => T); valueCategory: VC; upNext?: (rt: RuntimeOpaqueExpression) => void; operate: (rt: RuntimeOpaqueExpression) => T extends VoidType ? void : VCResultTypes; }; export declare function registerOpaqueExpression(id: string, impl: OpaqueExpressionImpl): void; export declare class OpaqueExpression extends Expression { readonly construct_type = "opaque_expression"; readonly type: T; readonly valueCategory: VC; readonly impl: OpaqueExpressionImpl; static createFromAST(ast: OpaqueExpressionASTNode, context: ExpressionContext): OpaqueExpression; constructor(context: ExpressionContext, impl: OpaqueExpressionImpl, ast?: OpaqueExpressionASTNode); createDefaultOutlet(this: CompiledOpaqueExpression, element: JQuery, parent?: ConstructOutlet): OpaqueExpressionOutlet; isTailChild(child: CPPConstruct): { isTail: boolean; }; describeEvalResult(depth: number): ConstructDescription; } export interface TypedOpaqueExpression extends OpaqueExpression, t_TypedExpression { } export interface CompiledOpaqueExpression extends TypedOpaqueExpression, SuccessfullyCompiled { readonly temporaryDeallocator?: CompiledTemporaryDeallocator; } export declare class RuntimeOpaqueExpression extends RuntimeExpression> { constructor(model: CompiledOpaqueExpression, parent: RuntimeConstruct); protected upNextImpl(): void; private isVoid; protected stepForwardImpl(): void; }