import ControlFlowEdge from "../../edge/ControlFlowEdge.js";
import FlowNode from "../FlowNode.js";
import BaseNode from "../../../graph/BaseNode.js";
import { NodeBuilder, NodeTypeGuard } from "../../../graph/Node.js";
import { Joinpoint } from "../../../../../../Joinpoints.js";
declare namespace InstructionNode {
    class Class<D extends Data = Data, S extends ScratchData = ScratchData> extends FlowNode.Class<D, S> {
        get nextEdge(): ControlFlowEdge.Class | undefined;
        get nextNode(): FlowNode.Class | undefined;
        set nextNode(node: FlowNode.Class | undefined);
    }
    abstract class Builder extends FlowNode.Builder implements NodeBuilder<Data, ScratchData> {
        #private;
        constructor(type: Type, $jp?: Joinpoint);
        buildData(data: BaseNode.Data): Data;
        buildScratchData(scratchData: BaseNode.ScratchData): ScratchData;
    }
    const TypeGuard: NodeTypeGuard<Data, ScratchData>;
    interface Data extends FlowNode.Data {
        flowNodeType: FlowNode.Type.INSTRUCTION;
        instructionFlowNodeType: Type;
        nextEdgeId: string | undefined;
    }
    interface ScratchData extends FlowNode.ScratchData {
    }
    enum Type {
        FUNCTION_ENTRY = "function_entry",
        FUNCTION_EXIT = "function_exit",
        STATEMENT = "statement",
        SWITCH = "switch",
        RETURN = "return",
        THROW = "throw",
        LABEL = "label",
        GOTO = "goto",
        UNKNOWN = "unknown"
    }
}
export default InstructionNode;
//# sourceMappingURL=InstructionNode.d.ts.map