///
///
import { ArraySubobject, DynamicObject } from "../../runtime/objects";
import { AtomicType, PointerType, BoundedArrayType, Int, ArrayElemType, CompleteClassType, Type, PotentiallyCompleteArrayType } from "../../compilation/types";
import { ExpressionContext, ConstructDescription } from "../../compilation/contexts";
import { SuccessfullyCompiled, RuntimeConstruct } from "../CPPConstruct";
import { NewArrayEntity } from "../../compilation/entities";
import { Expression, CompiledExpression, t_TypedExpression } from "./Expression";
import { RuntimeExpression } from "./RuntimeExpression";
import { NewExpressionOutlet, NewArrayExpressionOutlet } from "../../../view/constructs/ExpressionOutlets";
import { ConstructOutlet } from "../../../view/constructs/ConstructOutlet";
import { CompiledTemporaryDeallocator } from "../TemporaryDeallocator";
import { CompiledInitializer, Initializer, RuntimeInitializer } from "../initializers/Initializer";
import { CompiledDirectInitializer, DirectInitializer, RuntimeDirectInitializer } from "../initializers/DirectInitializer";
import { CompiledDefaultInitializer, DefaultInitializer, RuntimeDefaultInitializer } from "../initializers/DefaultInitializer";
import { CompiledDeclarator, Declarator } from "../declarations/Declarator";
import { CompiledTypeSpecifier, TypeSpecifier } from "../declarations/TypeSpecifier";
import { NewExpressionASTNode } from "../../../ast/ast_expressions";
export declare function createNewExpressionFromAST(ast: NewExpressionASTNode, context: ExpressionContext): NewExpression | NewArrayExpression;
export declare type NewObjectType = AtomicType | CompleteClassType;
export declare class NewExpression extends Expression {
readonly construct_type = "new_expression";
readonly type?: PointerType;
readonly createdType?: NewObjectType;
readonly valueCategory = "prvalue";
readonly typeSpecifier: TypeSpecifier;
readonly declarator: Declarator;
readonly initializer?: Initializer;
constructor(context: ExpressionContext, ast: NewExpressionASTNode, typeSpecifier: TypeSpecifier, declarator: Declarator, createdType: Exclude | undefined);
createDefaultOutlet(this: CompiledNewExpression, element: JQuery, parent?: ConstructOutlet): NewExpressionOutlet;
describeEvalResult(depth: number): ConstructDescription;
}
export interface TypedNewExpression = PointerType> extends NewExpression, t_TypedExpression {
readonly type: T;
readonly createdType: T["ptrTo"];
}
export interface CompiledNewExpression = PointerType> extends TypedNewExpression, SuccessfullyCompiled {
readonly temporaryDeallocator?: CompiledTemporaryDeallocator;
readonly typeSpecifier: CompiledTypeSpecifier;
readonly declarator: CompiledDeclarator;
readonly initializer?: CompiledInitializer;
}
export declare class RuntimeNewExpression = PointerType> extends RuntimeExpression> {
private index;
readonly initializer?: RuntimeInitializer;
readonly allocatedObject?: DynamicObject;
constructor(model: CompiledNewExpression, parent: RuntimeConstruct);
protected upNextImpl(): void;
protected stepForwardImpl(): void;
}
export declare class NewArrayExpression extends Expression {
readonly construct_type = "new_array_expression";
readonly type?: PointerType;
readonly createdType?: PotentiallyCompleteArrayType;
readonly valueCategory = "prvalue";
readonly typeSpecifier: TypeSpecifier;
readonly declarator: Declarator;
readonly allocatedArray: NewArrayEntity;
readonly individualElementInitializers?: readonly DirectInitializer[];
readonly fallbackElementInitializer?: DefaultInitializer;
readonly dynamicLengthExpression?: Expression;
constructor(context: ExpressionContext, ast: NewExpressionASTNode, typeSpecifier: TypeSpecifier, declarator: Declarator, createdType: PotentiallyCompleteArrayType);
createDefaultOutlet(this: CompiledNewArrayExpression, element: JQuery, parent?: ConstructOutlet): NewArrayExpressionOutlet;
describeEvalResult(depth: number): ConstructDescription;
}
export interface TypedNewArrayExpression = PointerType> extends NewArrayExpression, t_TypedExpression {
readonly type: T;
readonly createdType: PotentiallyCompleteArrayType;
readonly allocatedArray: NewArrayEntity>;
}
export interface CompiledNewArrayExpression = PointerType> extends TypedNewArrayExpression, SuccessfullyCompiled {
readonly temporaryDeallocator?: CompiledTemporaryDeallocator;
readonly typeSpecifier: CompiledTypeSpecifier;
readonly declarator: CompiledDeclarator;
readonly individualElementInitializers: readonly CompiledDirectInitializer[];
readonly fallbackElementInitializer: CompiledDefaultInitializer;
readonly dynamicLengthExpression?: CompiledExpression;
}
export declare class RuntimeNewArrayExpression = PointerType> extends RuntimeExpression> {
private elemInitIndex;
readonly dynamicLengthExpression?: RuntimeExpression;
readonly elementInitializers?: readonly (RuntimeDefaultInitializer | RuntimeDirectInitializer)[];
readonly allocatedObject?: DynamicObject>;
readonly nextElemToInit?: ArraySubobject;
constructor(model: CompiledNewArrayExpression, parent: RuntimeConstruct);
protected upNextImpl(): void;
protected stepForwardImpl(): void;
}