///
///
import { AtomicDirectInitializerOutlet, ClassDirectInitializerOutlet, ReferenceDirectInitializerOutlet } from "../../../view/constructs/InitializerOutlet";
import { ConstructOutlet } from "../../../view/constructs/ConstructOutlet";
import { TranslationUnitContext } from "../../compilation/contexts";
import { FunctionEntity, ObjectEntity, ObjectEntityType, UnboundReferenceEntity } from "../../compilation/entities";
import { Simulation } from "../../runtime/Simulation";
import { CompiledTemporaryDeallocator } from "../TemporaryDeallocator";
import { AtomicType, BoundedArrayType, Char, CompleteClassType, CompleteObjectType, FunctionType, ReferenceType, ReferredType, VoidType } from "../../compilation/types";
import { RuntimeConstruct, SuccessfullyCompiled } from "../CPPConstruct";
import { CompiledExpression, Expression } from "../expressions/Expression";
import { RuntimeExpression } from "../expressions/RuntimeExpression";
import { CompiledStringLiteralExpression, RuntimeStringLiteralExpression, StringLiteralExpression } from "../expressions/StringLiteralExpression";
import { CompiledFunctionCall, FunctionCall, RuntimeFunctionCall } from "../FunctionCall";
import { Initializer, RuntimeInitializer } from "./Initializer";
export declare type DirectInitializerKind = "direct" | "copy";
export declare abstract class DirectInitializer extends Initializer {
static create(context: TranslationUnitContext, target: UnboundReferenceEntity, args: readonly Expression[], kind: DirectInitializerKind): ReferenceDirectInitializer;
static create(context: TranslationUnitContext, target: ObjectEntity, args: readonly Expression[], kind: DirectInitializerKind): AtomicDirectInitializer;
static create(context: TranslationUnitContext, target: ObjectEntity, args: readonly Expression[], kind: DirectInitializerKind): ArrayDirectInitializer;
static create(context: TranslationUnitContext, target: ObjectEntity, args: readonly Expression[], kind: DirectInitializerKind): ClassDirectInitializer;
static create(context: TranslationUnitContext, target: ObjectEntity, args: readonly Expression[], kind: DirectInitializerKind): AtomicDirectInitializer | ArrayDirectInitializer | ClassDirectInitializer;
static create(context: TranslationUnitContext, target: ObjectEntity | UnboundReferenceEntity, args: readonly Expression[], kind: DirectInitializerKind): ReferenceDirectInitializer | AtomicDirectInitializer | ArrayDirectInitializer | ClassDirectInitializer;
abstract readonly target: ObjectEntity | UnboundReferenceEntity;
abstract readonly args: readonly Expression[];
readonly kind: DirectInitializerKind;
constructor(context: TranslationUnitContext, kind: DirectInitializerKind);
abstract createRuntimeInitializer(this: CompiledDirectInitializer, parent: RuntimeConstruct): RuntimeDirectInitializer;
}
export interface CompiledDirectInitializer extends DirectInitializer, SuccessfullyCompiled {
readonly temporaryDeallocator?: CompiledTemporaryDeallocator;
readonly target: ObjectEntity> | UnboundReferenceEntity>;
readonly args: readonly CompiledExpression[];
}
export declare abstract class RuntimeDirectInitializer = CompiledDirectInitializer> extends RuntimeInitializer {
protected constructor(model: C, parent: RuntimeConstruct);
}
export declare class ReferenceDirectInitializer extends DirectInitializer {
readonly construct_type = "ReferenceDirectInitializer";
readonly target: UnboundReferenceEntity;
readonly args: readonly Expression[];
readonly arg?: Expression;
constructor(context: TranslationUnitContext, target: UnboundReferenceEntity, args: readonly Expression[], kind: DirectInitializerKind);
createRuntimeInitializer>(this: CompiledReferenceDirectInitializer, parent: RuntimeConstruct): RuntimeReferenceDirectInitializer;
createRuntimeInitializer>(this: CompiledDirectInitializer, parent: RuntimeConstruct): never;
createDefaultOutlet(this: CompiledReferenceDirectInitializer, element: JQuery, parent?: ConstructOutlet): ReferenceDirectInitializerOutlet;
explain(sim: Simulation, rtConstruct: RuntimeConstruct): {
message: string;
};
}
export interface CompiledReferenceDirectInitializer extends ReferenceDirectInitializer, SuccessfullyCompiled {
readonly temporaryDeallocator?: CompiledTemporaryDeallocator;
readonly target: UnboundReferenceEntity>;
readonly args: readonly CompiledExpression[];
readonly arg: CompiledExpression, "lvalue">;
}
export declare class RuntimeReferenceDirectInitializer = ReferenceType> extends RuntimeDirectInitializer> {
readonly args: readonly RuntimeExpression, "lvalue">[];
readonly arg: RuntimeExpression, "lvalue">;
private alreadyPushed;
constructor(model: CompiledReferenceDirectInitializer, parent: RuntimeConstruct);
protected upNextImpl(): void;
stepForwardImpl(): void;
}
export declare class AtomicDirectInitializer extends DirectInitializer {
readonly construct_type = "AtomicDirectInitializer";
readonly target: ObjectEntity;
readonly args: readonly Expression[];
readonly arg: Expression;
constructor(context: TranslationUnitContext, target: ObjectEntity, args: readonly Expression[], kind: DirectInitializerKind);
createRuntimeInitializer(this: CompiledAtomicDirectInitializer, parent: RuntimeConstruct): RuntimeAtomicDirectInitializer;
createRuntimeInitializer(this: CompiledDirectInitializer, parent: RuntimeConstruct): never;
createDefaultOutlet(this: CompiledAtomicDirectInitializer, element: JQuery, parent?: ConstructOutlet): AtomicDirectInitializerOutlet;
explain(sim: Simulation, rtConstruct: RuntimeConstruct): {
message: string;
};
}
export interface CompiledAtomicDirectInitializer extends AtomicDirectInitializer, SuccessfullyCompiled {
readonly temporaryDeallocator?: CompiledTemporaryDeallocator;
readonly target: ObjectEntity>;
readonly args: readonly CompiledExpression[];
readonly arg: CompiledExpression;
}
export declare class RuntimeAtomicDirectInitializer extends RuntimeDirectInitializer> {
readonly args: readonly RuntimeExpression[];
readonly arg: RuntimeExpression;
private alreadyPushed;
constructor(model: CompiledAtomicDirectInitializer, parent: RuntimeConstruct);
protected upNextImpl(): void;
stepForwardImpl(): void;
}
/**
* Note: Only allowed use is to initialize a char array from a string literal, but this can readily be
* created in the course of compiling a program if the code attempts to directly initialize an array. That's
* desirable, because this class will give the appropriate error messages if it's anything other than a
* char array initialized from a string literal.
*/
export declare class ArrayDirectInitializer extends DirectInitializer {
readonly construct_type = "ArrayDirectInitializer";
readonly target: ObjectEntity;
readonly args: readonly Expression[];
readonly arg?: StringLiteralExpression;
constructor(context: TranslationUnitContext, target: ObjectEntity, args: readonly Expression[], kind: "direct" | "copy");
createRuntimeInitializer(this: CompiledArrayDirectInitializer, parent: RuntimeConstruct): RuntimeArrayDirectInitializer;
createRuntimeInitializer(this: CompiledDirectInitializer, parent: RuntimeConstruct): never;
createDefaultOutlet(this: CompiledAtomicDirectInitializer, element: JQuery, parent?: ConstructOutlet): AtomicDirectInitializerOutlet;
explain(sim: Simulation, rtConstruct: RuntimeConstruct): {
message: string;
};
}
export interface CompiledArrayDirectInitializer extends ArrayDirectInitializer, SuccessfullyCompiled {
readonly temporaryDeallocator?: CompiledTemporaryDeallocator;
readonly target: ObjectEntity>;
readonly args: readonly CompiledStringLiteralExpression[];
readonly arg: CompiledStringLiteralExpression;
}
export declare class RuntimeArrayDirectInitializer extends RuntimeDirectInitializer, CompiledArrayDirectInitializer> {
readonly arg: RuntimeStringLiteralExpression;
readonly args: readonly RuntimeStringLiteralExpression[];
private alreadyPushed;
constructor(model: CompiledArrayDirectInitializer, parent: RuntimeConstruct);
protected upNextImpl(): void;
stepForwardImpl(): void;
}
export declare class ClassDirectInitializer extends DirectInitializer {
readonly construct_type = "ClassDirectInitializer";
readonly target: ObjectEntity;
readonly args: readonly Expression[];
readonly ctor?: FunctionEntity>;
readonly ctorCall?: FunctionCall;
constructor(context: TranslationUnitContext, target: ObjectEntity, args: readonly Expression[], kind: DirectInitializerKind);
createRuntimeInitializer(this: CompiledClassDirectInitializer, parent: RuntimeConstruct): RuntimeClassDirectInitializer;
createRuntimeInitializer(this: CompiledDirectInitializer, parent: RuntimeConstruct): never;
createDefaultOutlet(this: CompiledClassDirectInitializer, element: JQuery, parent?: ConstructOutlet): ClassDirectInitializerOutlet;
explain(sim: Simulation, rtConstruct: RuntimeConstruct): {
message: string;
};
}
export interface CompiledClassDirectInitializer extends ClassDirectInitializer, SuccessfullyCompiled {
readonly temporaryDeallocator?: CompiledTemporaryDeallocator;
readonly target: ObjectEntity>;
readonly args: readonly CompiledExpression[];
readonly ctor: FunctionEntity>;
readonly ctorCall: CompiledFunctionCall>;
}
export declare class RuntimeClassDirectInitializer extends RuntimeDirectInitializer> {
readonly ctorCall?: RuntimeFunctionCall>;
private index;
constructor(model: CompiledClassDirectInitializer, parent: RuntimeConstruct);
protected upNextImpl(): void;
stepForwardImpl(): void;
}