import type { NativeProcedure, CrochetProcedure, CrochetValue } from "../primitives"; import { State } from "./state"; declare type Procedure = NativeProcedure | CrochetProcedure; export declare class TraceRef { readonly name: string; constructor(name: string); } export declare class Tracer { private traces; start_tracing(name: string, trace: TraceConstraint): TraceRef; stop_tracing(ref: TraceRef): void; clear_traces(): void; procedure_call(state: State, proc: Procedure, args: CrochetValue[]): void; procedure_return(state: State, proc: Procedure, result: CrochetValue): void; show(tag: string, ...args: any[]): void; } export declare abstract class TraceConstraint { procedure_call(tracer: Tracer, tag: string, p: Procedure, state: State, args: CrochetValue[]): void; procedure_return(tracer: Tracer, tag: string, p: Procedure, state: State, result: CrochetValue): void; } export declare class TCInvoke extends TraceConstraint { readonly entity: EntityConstraint; constructor(entity: EntityConstraint); procedure_call(tracer: Tracer, tag: string, p: Procedure, state: State, args: CrochetValue[]): void; procedure_return(tracer: Tracer, tag: string, p: Procedure, state: State, result: CrochetValue): void; } export declare abstract class EntityConstraint { for_procedure(n: Procedure): boolean; } export declare class ECNamed extends EntityConstraint { readonly name: string; constructor(name: string); for_procedure(p: Procedure): boolean; } export declare class ECInPackage extends EntityConstraint { readonly pkg_name: string; constructor(pkg_name: string); for_procedure(p: Procedure): boolean; } export declare class ECAnd extends EntityConstraint { readonly left: EntityConstraint; readonly right: EntityConstraint; constructor(left: EntityConstraint, right: EntityConstraint); for_procedure(p: Procedure): boolean; } export declare class ECOr extends EntityConstraint { readonly left: EntityConstraint; readonly right: EntityConstraint; constructor(left: EntityConstraint, right: EntityConstraint); for_procedure(p: Procedure): boolean; } export declare class ECNot extends EntityConstraint { readonly entity: EntityConstraint; constructor(entity: EntityConstraint); for_procedure(p: Procedure): boolean; } export {};