///
///
import { AnalyticConstruct } from "../../../analysis/predicates";
import { FunctionCallExpressionASTNode } from "../../../ast/ast_expressions";
import { ConstructOutlet } from "../../../view/constructs/ConstructOutlet";
import { ConstructDescription, ExpressionContext, SemanticContext } from "../../compilation/contexts";
import { CompleteReturnType, FunctionType, PeelReference } from "../../compilation/types";
import { RuntimeConstruct, SuccessfullyCompiled } from "../CPPConstruct";
import { CompiledFunctionCall, FunctionCall, RuntimeFunctionCall, TypedFunctionCall } from "../FunctionCall";
import { CompiledTemporaryDeallocator } from "../TemporaryDeallocator";
import { CompiledFunctionArrowExpression, RuntimeFunctionArrowExpression } from "./ArrowExpression";
import { CompiledFunctionDotExpression, RuntimeFunctionDotExpression } from "./DotExpression";
import { CompiledExpression, Expression, ValueCategory } from "./Expression";
import { RuntimeExpression } from "./RuntimeExpression";
import { CompiledFunctionIdentifierExpression, RuntimeFunctionIdentifierExpression } from "./IdentifierExpression";
import { MagicFunctionCallExpression } from "./MagicFunctionCallExpression";
import { OperatorOverloadExpression } from "./OperatorOverloadExpression";
import { FunctionCallExpressionOutlet } from "../../../view/constructs/ExpressionOutlets";
export declare class FunctionCallExpression extends Expression {
readonly construct_type = "function_call_expression";
readonly type?: PeelReference;
readonly valueCategory?: ValueCategory;
readonly operand: Expression;
readonly originalArgs: readonly Expression[];
readonly call?: FunctionCall;
constructor(context: ExpressionContext, ast: FunctionCallExpressionASTNode | undefined, operand: Expression, args: readonly Expression[]);
static createFromAST(ast: FunctionCallExpressionASTNode, context: ExpressionContext): FunctionCallExpression | MagicFunctionCallExpression | OperatorOverloadExpression;
createDefaultOutlet(this: CompiledFunctionCallExpression, element: JQuery, parent?: ConstructOutlet): FunctionCallExpressionOutlet;
describeEvalResult(depth: number): ConstructDescription;
isSemanticallyEquivalent_impl(other: AnalyticConstruct, ec: SemanticContext): boolean;
}
export interface TypedFunctionCallExpression = PeelReference, V extends ValueCategory = ValueCategory> extends FunctionCallExpression {
readonly type: T;
readonly valueCategory: V;
readonly call: TypedFunctionCall>;
}
export interface CompiledFunctionCallExpression = PeelReference, V extends ValueCategory = ValueCategory> extends TypedFunctionCallExpression, SuccessfullyCompiled {
readonly temporaryDeallocator?: CompiledTemporaryDeallocator;
readonly operand: CompiledFunctionIdentifierExpression | CompiledFunctionDotExpression | CompiledFunctionArrowExpression;
readonly originalArgs: readonly CompiledExpression[];
readonly call: CompiledFunctionCall>;
}
export declare const INDEX_FUNCTION_CALL_EXPRESSION_OPERAND = 0;
export declare const INDEX_FUNCTION_CALL_EXPRESSION_CALL = 1;
export declare const INDEX_FUNCTION_CALL_EXPRESSION_RETURN = 2;
export declare class RuntimeFunctionCallExpression = PeelReference, V extends ValueCategory = ValueCategory> extends RuntimeExpression> {
readonly operand: RuntimeFunctionIdentifierExpression | RuntimeFunctionDotExpression | RuntimeFunctionArrowExpression;
readonly call?: RuntimeFunctionCall>;
readonly index: typeof INDEX_FUNCTION_CALL_EXPRESSION_OPERAND | typeof INDEX_FUNCTION_CALL_EXPRESSION_CALL | typeof INDEX_FUNCTION_CALL_EXPRESSION_RETURN;
constructor(model: CompiledFunctionCallExpression, parent: RuntimeConstruct);
protected upNextImpl(): void;
protected stepForwardImpl(): void;
}