import { Dict, Maybe, Op, Option, RuntimeOp } from '@glimmer/interfaces';
import { LowLevelVM, VM } from './vm';
import { InternalVM } from './vm/append';
export interface OpcodeJSON {
    type: number | string;
    guid?: Option<number>;
    deopted?: boolean;
    args?: string[];
    details?: Dict<Option<string>>;
    children?: OpcodeJSON[];
}
export declare type Operand1 = number;
export declare type Operand2 = number;
export declare type Operand3 = number;
export declare type Syscall = (vm: InternalVM, opcode: RuntimeOp) => void;
export declare type MachineOpcode = (vm: LowLevelVM, opcode: RuntimeOp) => void;
export declare type Evaluate = {
    syscall: true;
    evaluate: Syscall;
} | {
    syscall: false;
    evaluate: MachineOpcode;
};
export declare type DebugState = {
    pc: number;
    sp: number;
    type: number;
    isMachine: 0 | 1;
    size: number;
    params?: Maybe<Dict>;
    name?: string;
    state: unknown;
};
export declare class AppendOpcodes {
    private evaluateOpcode;
    add<Name extends Op>(name: Name, evaluate: Syscall): void;
    add<Name extends Op>(name: Name, evaluate: MachineOpcode, kind: 'machine'): void;
    debugBefore(vm: VM, opcode: RuntimeOp): DebugState;
    debugAfter(vm: VM, pre: DebugState): void;
    evaluate(vm: VM, opcode: RuntimeOp, type: number): void;
}
export declare const APPEND_OPCODES: AppendOpcodes;
//# sourceMappingURL=opcodes.d.ts.map