import { NodeImplementation, GlobalDefinitions, VariableNamesIndex } from '../types'; import { AstClass, AstElement, AstSequence, Code, VariableName, AstVarBase, AstFunc } from '../../ast/types'; import { DspGraph } from '../../dsp-graph'; import { NodeImplementations, CompilationSettings } from '../types'; export interface Precompilation { graph: Readonly; nodeImplementations: Readonly; readonly settings: Readonly; readonly precompiledCode: PrecompiledCode; readonly precompiledCodeAssigner: PrecompiledCode; readonly variableNamesIndex: VariableNamesIndex; readonly variableNamesAssigner: VariableNamesIndex; readonly variableNamesReadOnly: VariableNamesIndex; } export interface PrecompilationInput { readonly graph: Readonly; readonly nodeImplementations: Readonly; readonly settings: Readonly; } export interface PrecompiledCode { readonly nodeImplementations: { [nodeType: DspGraph.NodeType]: { nodeImplementation: NodeImplementation; stateClass: AstClass | null; core: AstElement | null; }; }; readonly nodes: { [nodeId: DspGraph.NodeId]: PrecompiledNodeCode; }; readonly dependencies: { imports: ReturnType>; exports: ReturnType>; ast: AstSequence; }; readonly graph: { fullTraversal: DspGraph.GraphTraversal; hotDspGroup: DspGroup; coldDspGroups: { [groupId: string]: ColdDspGroup; }; }; readonly io: { messageReceivers: { [nodeId: DspGraph.NodeId]: { [inletId: DspGraph.PortletId]: { functionName: VariableName; getSinkFunctionName: () => VariableName; }; }; }; messageSenders: { [nodeId: DspGraph.NodeId]: { [inletId: DspGraph.PortletId]: { functionName: VariableName; }; }; }; }; } export interface PrecompiledNodeCode { readonly nodeType: DspGraph.NodeType; state: { readonly name: VariableName; readonly initialization: { [key: string]: NonNullable; }; } | null; initialization: AstElement | null; readonly messageReceivers: { [inletId: DspGraph.PortletId]: AstFunc; }; readonly messageSenders: { [outletId: DspGraph.PortletId]: { messageSenderName: VariableName; sinkFunctionNames: Array; }; }; readonly signalOuts: { [outletId: DspGraph.PortletId]: VariableName; }; readonly signalIns: { [portletId: DspGraph.PortletId]: Code; }; readonly dsp: { loop: AstElement; inlets: { [inletId: DspGraph.PortletId]: AstElement; }; }; } export interface ColdDspGroup { dspGroup: DspGroup; sinkConnections: Array; functionName: VariableName; } export interface DspGroup { traversal: DspGraph.GraphTraversal; outNodesIds: Array; }