import { Trait, Type, TypeConstraint } from "./type"; import { BasicBlock } from "./expression"; import { Predicate } from "./logic"; declare type Metadata = number; export declare enum DeclarationTag { COMMAND = 1, TYPE = 2, SEAL = 3, TEST = 4, OPEN = 5, DEFINE = 6, PRELUDE = 7, RELATION = 8, ACTION = 9, WHEN = 10, CONTEXT = 11, FOREIGN_TYPE = 12, EFFECT = 13, TRAIT = 14, IMPLEMENT_TRAIT = 15, CAPABILITY = 16, PROTECT = 17 } export declare enum Visibility { LOCAL = 0, GLOBAL = 1 } export declare type Declaration = DCommand | DType | DSeal | DTest | DDefine | DOpen | DPrelude | DRelation | DAction | DContext | DWhen | DForeignType | DEffect | DTrait | DImplementTrait | DCapability | DProtect; declare abstract class BaseDeclaration { abstract tag: DeclarationTag; } export declare class DCommand extends BaseDeclaration { readonly meta: Metadata; readonly documentation: string; readonly name: string; readonly parameters: string[]; readonly types: TypeConstraint[]; readonly body: BasicBlock; readonly tag = DeclarationTag.COMMAND; constructor(meta: Metadata, documentation: string, name: string, parameters: string[], types: TypeConstraint[], body: BasicBlock); } export declare class DType extends BaseDeclaration { readonly meta: Metadata; readonly documentation: string; readonly visibility: Visibility; readonly name: string; readonly parent: TypeConstraint; readonly fields: string[]; readonly types: TypeConstraint[]; readonly tag = DeclarationTag.TYPE; constructor(meta: Metadata, documentation: string, visibility: Visibility, name: string, parent: TypeConstraint, fields: string[], types: TypeConstraint[]); } export declare class DSeal extends BaseDeclaration { readonly meta: Metadata; readonly name: string; readonly tag = DeclarationTag.SEAL; constructor(meta: Metadata, name: string); } export declare class DTest extends BaseDeclaration { readonly meta: Metadata; readonly name: string; readonly body: BasicBlock; readonly tag = DeclarationTag.TEST; constructor(meta: Metadata, name: string, body: BasicBlock); } export declare class DDefine extends BaseDeclaration { readonly meta: Metadata; readonly documentation: string; readonly visibility: Visibility; readonly name: string; readonly body: BasicBlock; readonly tag = DeclarationTag.DEFINE; constructor(meta: Metadata, documentation: string, visibility: Visibility, name: string, body: BasicBlock); } export declare class DOpen extends BaseDeclaration { readonly meta: Metadata; readonly namespace: string; readonly tag = DeclarationTag.OPEN; constructor(meta: Metadata, namespace: string); } export declare class DPrelude extends BaseDeclaration { readonly meta: Metadata; readonly body: BasicBlock; readonly tag = DeclarationTag.PRELUDE; constructor(meta: Metadata, body: BasicBlock); } export declare enum RelationMultiplicity { ONE = 1, MANY = 2 } export declare class RelationType { readonly meta: Metadata; readonly multiplicity: RelationMultiplicity; constructor(meta: Metadata, multiplicity: RelationMultiplicity); } export declare class DRelation extends BaseDeclaration { readonly meta: Metadata; readonly documentation: string; readonly name: string; readonly type: RelationType[]; readonly tag = DeclarationTag.RELATION; constructor(meta: Metadata, documentation: string, name: string, type: RelationType[]); } export declare class DAction extends BaseDeclaration { readonly meta: Metadata; readonly documentation: string; readonly context: string | null; readonly name: string; readonly actor: TypeConstraint; readonly parameter: string; readonly rank_function: BasicBlock; readonly predicate: Predicate; readonly body: BasicBlock; readonly tag = DeclarationTag.ACTION; constructor(meta: Metadata, documentation: string, context: string | null, name: string, actor: TypeConstraint, parameter: string, rank_function: BasicBlock, predicate: Predicate, body: BasicBlock); } export declare class DWhen extends BaseDeclaration { readonly meta: Metadata; readonly documentation: string; readonly context: string | null; readonly predicate: Predicate; readonly body: BasicBlock; readonly tag = DeclarationTag.WHEN; constructor(meta: Metadata, documentation: string, context: string | null, predicate: Predicate, body: BasicBlock); } export declare class DContext extends BaseDeclaration { readonly meta: Metadata; readonly documentation: string; readonly name: string; readonly tag = DeclarationTag.CONTEXT; constructor(meta: Metadata, documentation: string, name: string); } export declare class DForeignType extends BaseDeclaration { readonly meta: Metadata; readonly documentation: string; readonly visibility: Visibility; readonly name: string; readonly target: string; readonly tag = DeclarationTag.FOREIGN_TYPE; constructor(meta: Metadata, documentation: string, visibility: Visibility, name: string, target: string); } export declare class DEffect extends BaseDeclaration { readonly meta: Metadata; readonly documentation: string; readonly name: string; readonly cases: EffectCase[]; readonly tag = DeclarationTag.EFFECT; constructor(meta: Metadata, documentation: string, name: string, cases: EffectCase[]); } export declare class EffectCase { readonly meta: Metadata; readonly documentation: string; readonly name: string; readonly parameters: string[]; readonly types: TypeConstraint[]; constructor(meta: Metadata, documentation: string, name: string, parameters: string[], types: TypeConstraint[]); } export declare class DTrait extends BaseDeclaration { readonly meta: Metadata; readonly documentation: string; readonly name: string; readonly tag = DeclarationTag.TRAIT; constructor(meta: Metadata, documentation: string, name: string); } export declare class DImplementTrait extends BaseDeclaration { readonly meta: Metadata; readonly trait: Trait; readonly type: Type; readonly tag = DeclarationTag.IMPLEMENT_TRAIT; constructor(meta: Metadata, trait: Trait, type: Type); } export declare class DCapability extends BaseDeclaration { readonly meta: Metadata; readonly documentation: string; readonly name: string; readonly tag = DeclarationTag.CAPABILITY; constructor(meta: Metadata, documentation: string, name: string); } export declare class DProtect extends BaseDeclaration { readonly meta: Metadata; readonly capability: string; readonly type: ProtectEntityTag; readonly entity: string; readonly tag = DeclarationTag.PROTECT; constructor(meta: Metadata, capability: string, type: ProtectEntityTag, entity: string); } export declare enum ProtectEntityTag { TYPE = 0, TRAIT = 1, EFFECT = 2, DEFINE = 3 } export {};