///
///
import { PeelReference, CompleteReturnType, CompleteObjectType, PotentialParameterType, VoidType } from "../../compilation/types";
import { ExpressionContext, ConstructDescription } from "../../compilation/contexts";
import { SuccessfullyCompiled, RuntimeConstruct } from "../CPPConstruct";
import { MAGIC_FUNCTION_NAMES } from "../../compilation/lexical";
import { ValueCategory, Expression, CompiledExpression, t_TypedExpression } from "./Expression";
import { RuntimeExpression } from "./RuntimeExpression";
import { ConstructOutlet } from "../../../view/constructs/ConstructOutlet";
import { CompiledTemporaryDeallocator } from "../TemporaryDeallocator";
import { FunctionCallExpressionASTNode } from "../../../ast/ast_expressions";
import { SimpleRuntimeExpression } from "./SimpleRuntimeExpression";
import { MagicFunctionCallExpressionOutlet } from "../../../view/constructs/ExpressionOutlets";
interface MagicFunctionImpl {
readonly returnType: CompleteObjectType | VoidType;
readonly valueCategory: ValueCategory;
readonly paramTypes: readonly PotentialParameterType[];
readonly operate: (rt: RuntimeMagicFunctionCallExpression) => void;
}
export declare class MagicFunctionCallExpression extends Expression {
readonly construct_type = "magic_function_call_expression";
readonly type: PeelReference;
readonly valueCategory: ValueCategory;
readonly functionName: string;
readonly functionImpl: MagicFunctionImpl;
readonly args: readonly Expression[];
constructor(context: ExpressionContext, ast: FunctionCallExpressionASTNode | undefined, functionName: MAGIC_FUNCTION_NAMES, args: readonly Expression[]);
createDefaultOutlet(this: CompiledMagicFunctionCallExpression, element: JQuery, parent?: ConstructOutlet): MagicFunctionCallExpressionOutlet;
describeEvalResult(depth: number): ConstructDescription;
}
export interface TypedMagicFunctionCallExpression = PeelReference, V extends ValueCategory = ValueCategory> extends MagicFunctionCallExpression, t_TypedExpression {
readonly type: T;
readonly valueCategory: V;
}
export interface CompiledMagicFunctionCallExpression = PeelReference, V extends ValueCategory = ValueCategory> extends TypedMagicFunctionCallExpression, SuccessfullyCompiled {
readonly temporaryDeallocator?: CompiledTemporaryDeallocator;
readonly args: readonly CompiledExpression[];
}
export declare class RuntimeMagicFunctionCallExpression = PeelReference, V extends ValueCategory = ValueCategory> extends SimpleRuntimeExpression> {
args: readonly RuntimeExpression[];
constructor(model: CompiledMagicFunctionCallExpression, parent: RuntimeConstruct);
protected operate(): void;
}
export {};