import { Optional } from '@composita/ts-utility-types';
import { BuiltInTypeDescriptor } from './builtin';
import { ProtocolType } from './enums';
import { Instruction } from './instruction';
import { SystemCallOperation } from './syscall';
export declare type TypeDescriptor = ComponentDescriptor | BuiltInTypeDescriptor | InterfaceDescriptor;
export declare type DeclarationContainer = ComponentDescriptor | ProcedureDescriptor | ImplementationDescriptor;
export declare class DeclarationDescriptor {
    readonly init: CodeBlockDescriptor;
    readonly variables: VariableDescriptor[];
    readonly procedures: ProcedureDescriptor[];
    readonly components: ComponentDescriptor[];
}
export declare class ComponentDescriptor {
    readonly identifier: string;
    constructor(identifier: string);
    readonly offers: InterfaceDescriptor[];
    readonly requires: InterfaceDescriptor[];
    readonly declarations: DeclarationDescriptor;
    readonly implementations: ImplementationDescriptor[];
    readonly begin: CodeBlockDescriptor;
    readonly activity: CodeBlockDescriptor;
    readonly finally: CodeBlockDescriptor;
}
export declare class ProcedureDescriptor {
    readonly identifier: string;
    readonly returnType: Optional<TypeDescriptor>;
    constructor(identifier: string, returnType: Optional<TypeDescriptor>);
    readonly parameters: VariableDescriptor[];
    readonly declarations: DeclarationDescriptor;
    readonly begin: CodeBlockDescriptor;
}
export declare class ImplementationDescriptor {
    readonly reference: InterfaceDescriptor;
    constructor(reference: InterfaceDescriptor);
    readonly declarations: DeclarationDescriptor;
    readonly begin: CodeBlockDescriptor;
}
export declare class VariableDescriptor {
    readonly identifier: string;
    readonly type: TypeDescriptor;
    readonly mutable: boolean;
    constructor(identifier: string, type: TypeDescriptor, mutable: boolean);
    readonly indexTypes: TypeDescriptor[];
}
export declare class CodeBlockDescriptor {
    readonly instructions: Instruction[];
}
export declare class InterfaceDescriptor {
    readonly identifier: string;
    constructor(identifier: string);
    readonly protocols: ProtocolDescriptor[];
}
export declare class ProtocolDescriptor {
    readonly type: ProtocolType;
    constructor(type: ProtocolType);
    readonly messages: MessageDescriptor[];
}
export declare class MessageDescriptor {
    readonly identifier: string;
    constructor(identifier: string);
    readonly data: TypeDescriptor[];
}
export declare class JumpDescriptor {
    readonly offset: number;
    constructor(offset: number);
}
export declare class SystemCallDescriptor {
    readonly systemCall: SystemCallOperation;
    constructor(systemCall: SystemCallOperation, ...args: Array<TypeDescriptor>);
    readonly arguments: Array<TypeDescriptor>;
}
//# sourceMappingURL=descriptor.d.ts.map