import { Context } from "../simulation"; import { Predicate, PredicateProcedure, TreeType } from "../logic"; import { Contract } from "../primitives/procedure"; import { CrochetModule, State } from "../vm"; import { Expression } from "./expression"; import { SBlock, Statement } from "./statement"; import { Type } from "./type"; import { CrochetPackage } from "../pkg"; import { Metadata } from "./meta"; export declare type ContextualDeclaration = DAction | DWhen; interface DeclarationContext { module: CrochetModule; package: CrochetPackage; } export declare abstract class Declaration { abstract apply(context: DeclarationContext, state: State): Promise | void; abstract position: Metadata; } export interface IContextualDeclaration { apply_to_context(declaration_context: DeclarationContext, state: State, context: Context): Promise | void; } export declare class DRelation extends Declaration { readonly position: Metadata; readonly name: string; readonly type: TreeType; constructor(position: Metadata, name: string, type: TreeType); apply(context: DeclarationContext, state: State): Promise; } export declare class DPredicate extends Declaration { readonly position: Metadata; readonly name: string; readonly procedure: PredicateProcedure; constructor(position: Metadata, name: string, procedure: PredicateProcedure); apply(context: DeclarationContext, state: State): Promise; } export declare class DDo extends Declaration { readonly position: Metadata; readonly body: Statement[]; constructor(position: Metadata, body: Statement[]); apply(context: DeclarationContext, state: State): Promise; } export declare class DForeignCommand extends Declaration { readonly position: Metadata; readonly name: string; readonly types: Type[]; readonly foreign_name: string; readonly parameters: string[]; readonly args: string[]; readonly contract: Contract; readonly override: boolean; constructor(position: Metadata, name: string, types: Type[], foreign_name: string, parameters: string[], args: string[], contract: Contract, override: boolean); apply(context: DeclarationContext, state: State): Promise; } export declare class DCrochetCommand extends Declaration { readonly position: Metadata; readonly name: string; readonly parameters: string[]; readonly types: Type[]; readonly body: Statement[]; readonly contract: Contract; readonly override: boolean; constructor(position: Metadata, name: string, parameters: string[], types: Type[], body: Statement[], contract: Contract, override: boolean); apply(context: DeclarationContext, state: State): Promise; } export declare class DType extends Declaration { readonly position: Metadata; readonly local: boolean; readonly parent: Type | null; readonly name: string; readonly fields: { parameter: string; type: Type; }[]; constructor(position: Metadata, local: boolean, parent: Type | null, name: string, fields: { parameter: string; type: Type; }[]); apply(context: DeclarationContext, state: State): Promise; } export declare class DDefine extends Declaration { readonly position: Metadata; readonly local: boolean; readonly name: string; readonly value: Expression; constructor(position: Metadata, local: boolean, name: string, value: Expression); apply(context: DeclarationContext, state: State): Promise; } export declare class DScene extends Declaration { readonly position: Metadata; readonly name: string; readonly body: Statement[]; constructor(position: Metadata, name: string, body: Statement[]); apply(context: DeclarationContext, state: State): Promise; } export declare class DAction extends Declaration implements IContextualDeclaration { readonly position: Metadata; readonly type_resctiction: Type; readonly title: Expression; readonly tags: string[]; readonly predicate: Predicate; readonly rank: Expression; readonly body: Statement[]; constructor(position: Metadata, type_resctiction: Type, title: Expression, tags: string[], predicate: Predicate, rank: Expression, body: Statement[]); apply_to_context(declaration_context: DeclarationContext, state: State, context: Context): Promise; apply(context: DeclarationContext, state: State): Promise; } export declare class DWhen extends Declaration implements IContextualDeclaration { readonly position: Metadata; readonly predicate: Predicate; readonly body: Statement[]; constructor(position: Metadata, predicate: Predicate, body: Statement[]); apply_to_context(declaration_context: DeclarationContext, state: State, context: Context): Promise; apply(context: DeclarationContext, state: State): Promise; } export declare class DForeignType extends Declaration { readonly position: Metadata; readonly local: boolean; readonly name: string; readonly foreign_name: string; constructor(position: Metadata, local: boolean, name: string, foreign_name: string); apply(context: DeclarationContext, state: State): Promise; } export declare class DSealType extends Declaration { readonly position: Metadata; readonly name: string; constructor(position: Metadata, name: string); apply(context: DeclarationContext, state: State): Promise; } export declare class DContext extends Declaration { readonly position: Metadata; readonly name: string; readonly declarations: IContextualDeclaration[]; constructor(position: Metadata, name: string, declarations: IContextualDeclaration[]); apply(declaration_context: DeclarationContext, state: State): Promise; } export declare class DOpen extends Declaration { readonly position: Metadata; readonly ns: string; constructor(position: Metadata, ns: string); apply(declaration_context: DeclarationContext, state: State): Promise; } export declare class DTest extends Declaration { readonly position: Metadata; readonly title: string; readonly body: SBlock; constructor(position: Metadata, title: string, body: SBlock); apply(declaration_context: DeclarationContext, state: State): Promise; } export {};