///
///
import { ExpressionASTNode } from "../../../ast/ast_expressions";
import { ConstructOutlet } from "../../../view/constructs/ConstructOutlet";
import { ConstructDescription, ExpressionContext } from "../../compilation/contexts";
import { FunctionEntity } from "../../compilation/entities";
import { CompleteClassType, CompleteReturnType, FunctionType, PeelReference } from "../../compilation/types";
import { RuntimeConstruct, SuccessfullyCompiled } from "../CPPConstruct";
import { CompiledFunctionCall, FunctionCall, RuntimeFunctionCall, TypedFunctionCall } from "../FunctionCall";
import { CompiledTemporaryDeallocator } from "../TemporaryDeallocator";
import { CompiledExpression, Expression, TypedExpression, ValueCategory } from "./Expression";
import { RuntimeExpression } from "./RuntimeExpression";
import { InvalidExpression } from "./InvalidExpression";
import { t_OverloadableOperators } from "./selectOperatorOverload";
import { NonMemberOperatorOverloadExpressionOutlet, MemberOperatorOverloadExpressionOutlet } from "../../../view/constructs/ExpressionOutlets";
export declare class NonMemberOperatorOverloadExpression extends Expression {
readonly construct_type = "non_member_operator_overload_expression";
readonly type?: PeelReference;
readonly valueCategory?: ValueCategory;
readonly operator: t_OverloadableOperators;
readonly originalArgs: readonly Expression[];
readonly call?: FunctionCall;
constructor(context: ExpressionContext, ast: ExpressionASTNode | undefined, operator: t_OverloadableOperators, args: readonly Expression[], selectedFunctionEntity: FunctionEntity);
createDefaultOutlet(this: CompiledNonMemberOperatorOverloadExpression, element: JQuery, parent?: ConstructOutlet): NonMemberOperatorOverloadExpressionOutlet;
describeEvalResult(depth: number): ConstructDescription;
}
export interface TypedNonMemberOperatorOverloadExpression = PeelReference, V extends ValueCategory = ValueCategory> extends NonMemberOperatorOverloadExpression {
readonly type: T;
readonly valueCategory: V;
readonly call: TypedFunctionCall>;
}
export interface CompiledNonMemberOperatorOverloadExpression = PeelReference, V extends ValueCategory = ValueCategory> extends TypedNonMemberOperatorOverloadExpression, SuccessfullyCompiled {
readonly temporaryDeallocator?: CompiledTemporaryDeallocator;
readonly originalArgs: readonly CompiledExpression[];
readonly call: CompiledFunctionCall>;
}
export declare class RuntimeNonMemberOperatorOverloadExpression = PeelReference, V extends ValueCategory = ValueCategory> extends RuntimeExpression> {
readonly call: RuntimeFunctionCall>;
constructor(model: CompiledNonMemberOperatorOverloadExpression, parent: RuntimeConstruct);
protected upNextImpl(): void;
protected stepForwardImpl(): void;
}
export declare class MemberOperatorOverloadExpression extends Expression {
readonly construct_type = "member_operator_overload_expression";
readonly type?: PeelReference;
readonly valueCategory?: ValueCategory;
readonly operator: t_OverloadableOperators;
readonly originalArgs: readonly Expression[];
readonly receiverExpression: TypedExpression;
readonly call?: FunctionCall;
constructor(context: ExpressionContext, ast: ExpressionASTNode | undefined, operator: t_OverloadableOperators, receiverExpression: TypedExpression, args: readonly Expression[], selectedFunctionEntity: FunctionEntity);
createDefaultOutlet(this: CompiledMemberOperatorOverloadExpression, element: JQuery, parent?: ConstructOutlet): MemberOperatorOverloadExpressionOutlet;
describeEvalResult(depth: number): ConstructDescription;
}
export interface TypedMemberOperatorOverloadExpression = PeelReference, V extends ValueCategory = ValueCategory> extends MemberOperatorOverloadExpression {
readonly type: T;
readonly valueCategory: V;
readonly call: TypedFunctionCall>;
}
export interface CompiledMemberOperatorOverloadExpression = PeelReference, V extends ValueCategory = ValueCategory> extends TypedMemberOperatorOverloadExpression, SuccessfullyCompiled {
readonly temporaryDeallocator?: CompiledTemporaryDeallocator;
readonly originalArgs: readonly CompiledExpression[];
readonly receiverExpression: CompiledExpression;
readonly call: CompiledFunctionCall>;
}
export declare class RuntimeMemberOperatorOverloadExpression = PeelReference, V extends ValueCategory = ValueCategory> extends RuntimeExpression> {
readonly receiverExpression: RuntimeExpression;
readonly call?: RuntimeFunctionCall>;
constructor(model: CompiledMemberOperatorOverloadExpression, parent: RuntimeConstruct);
protected upNextImpl(): void;
protected stepForwardImpl(): void;
}
export declare type OperatorOverloadExpression = NonMemberOperatorOverloadExpression | MemberOperatorOverloadExpression | InvalidOperatorOverloadExpression;
export declare class InvalidOperatorOverloadExpression extends InvalidExpression {
readonly construct_type = "invalid_operator_overload_expression";
readonly operator: t_OverloadableOperators;
readonly originalArgs: readonly Expression[];
constructor(context: ExpressionContext, ast: ExpressionASTNode, op: t_OverloadableOperators, originalArgs: readonly Expression[]);
createDefaultOutlet(this: never, element: JQuery, parent?: ConstructOutlet): never;
describeEvalResult(depth: number): ConstructDescription;
}