import ControlFlowEdge from "@specs-feup/flow/flow/ControlFlowEdge"; import FunctionNode from "@specs-feup/flow/flow/FunctionNode"; import BaseNode from "@specs-feup/flow/graph/BaseNode"; import { EdgeCollection } from "@specs-feup/flow/graph/EdgeCollection"; import Node from "@specs-feup/flow/graph/Node"; /** * Represents a node in the control-flow subgraph of a {@link FunctionNode}. * * Each ControlFlowNode must belong to exactly one {@link FunctionNode}. For languages * with global statements that are executed outside a function (such as python * or javascript), a {@link FunctionNode} representing the "global" * control-flow of each file should be created. */ declare namespace ControlFlowNode { const TAG = "__lara_flow__control_flow_node"; const VERSION = "1"; class Class extends BaseNode.Class { /** * @returns The {@link FunctionNode} that this node belongs to. */ get function(): FunctionNode.Class; /** * @returns The non-fake {@link ControlFlowEdge | ControlFlowEdges} * that go from this node to another node. These are the possible * control flow paths that can potentially be taken from this node * at runtime. */ get cfgOutgoers(): EdgeCollection; /** * Sets this node as the {@link FunctionNode.Data.cfgEntryNode | entry node} * of the function it belongs to. * * @returns itself, for method chaining. */ setAsEntryNode(): this; } class Builder implements Node.Builder { #private; /** * @param functionNode The function node that this node belongs to. */ constructor(functionNode: FunctionNode.Class); buildData(data: BaseNode.Data): Data; buildScratchData(scratchData: BaseNode.ScratchData): ScratchData; } const TypeGuard: Node.TypeGuard; interface Data extends BaseNode.Data { [TAG]: { version: typeof VERSION; /** * The id of the {@link FunctionNode} that this node belongs to. */ function: string; }; } interface ScratchData extends BaseNode.ScratchData { } } export default ControlFlowNode; //# sourceMappingURL=ControlFlowNode.d.ts.map