diff --git a/src/flattening/mod.rs b/src/flattening/mod.rs index 0eac949..202d761 100644 --- a/src/flattening/mod.rs +++ b/src/flattening/mod.rs @@ -3,7 +3,6 @@ mod initialization; mod lints; mod name_context; mod parser; -mod port_latency_inference; mod typechecking; mod walk; @@ -15,10 +14,10 @@ use crate::typing::type_inference::{DomainVariableIDMarker, TypeVariableIDMarker use std::cell::OnceCell; use std::ops::Deref; +use crate::latency::port_latency_inference::PortLatencyInferenceInfo; pub use flatten::flatten_all_globals; pub use initialization::gather_initial_file_data; pub use lints::perform_lints; -use port_latency_inference::PortLatencyInferenceInfo; pub use typechecking::typecheck_all_modules; use crate::linker::{Documentation, LinkInfo}; @@ -327,6 +326,8 @@ pub enum WireReferenceRoot { /// int local_var /// local_var = 3 /// ``` + /// + /// [FlatID] points to [Instruction::Declaration] LocalDecl(FlatID, Span), /// ```sus /// bool b = true // root is global constant `true` diff --git a/src/instantiation/mod.rs b/src/instantiation/mod.rs index 7797dd3..a602680 100644 --- a/src/instantiation/mod.rs +++ b/src/instantiation/mod.rs @@ -1,8 +1,5 @@ mod concrete_typecheck; mod execute; -mod latency_algorithm; -mod latency_count; -mod list_of_lists; mod unique_names; use unique_names::UniqueNames; @@ -24,8 +21,6 @@ use crate::{ use crate::typing::concrete_type::ConcreteType; -use self::latency_algorithm::SpecifiedLatency; - // Temporary value before proper latency is given pub const CALCULATE_LATENCY_LATER: i64 = i64::MIN; @@ -38,7 +33,7 @@ pub enum RealWirePathElem { } impl RealWirePathElem { - fn for_each_wire_in_path(path: &[RealWirePathElem], mut f: impl FnMut(WireID)) { + pub fn for_each_wire_in_path(path: &[RealWirePathElem], mut f: impl FnMut(WireID)) { for v in path { match v { RealWirePathElem::ArrayAccess { span: _, idx_wire } => { @@ -318,24 +313,24 @@ pub struct ConditionStackElem { } /// As with other contexts, this is the shared state we're lugging around while executing & typechecking a module. -struct InstantiationContext<'fl, 'l> { - name: String, - generation_state: GenerationState<'fl>, - wires: FlatAlloc, - submodules: FlatAlloc, +pub struct InstantiationContext<'fl, 'l> { + pub name: String, + pub wires: FlatAlloc, + pub submodules: FlatAlloc, - type_substitutor: TypeSubstitutor, + pub type_substitutor: TypeSubstitutor, - // Used for Execution + /// Used for Execution + generation_state: GenerationState<'fl>, unique_name_producer: UniqueNames, condition_stack: Vec, - interface_ports: FlatAlloc, PortIDMarker>, - errors: ErrorCollector<'l>, + pub interface_ports: FlatAlloc, PortIDMarker>, + pub errors: ErrorCollector<'l>, - template_args: &'fl TVec, - md: &'fl Module, - linker: &'l Linker, + pub template_args: &'fl TVec, + pub md: &'fl Module, + pub linker: &'l Linker, } /// Mangle the module name for use in code generation diff --git a/src/instantiation/latency_algorithm.rs b/src/latency/latency_algorithm.rs similarity index 100% rename from src/instantiation/latency_algorithm.rs rename to src/latency/latency_algorithm.rs diff --git a/src/instantiation/list_of_lists.rs b/src/latency/list_of_lists.rs similarity index 100% rename from src/instantiation/list_of_lists.rs rename to src/latency/list_of_lists.rs diff --git a/src/instantiation/latency_count.rs b/src/latency/mod.rs similarity index 98% rename from src/instantiation/latency_count.rs rename to src/latency/mod.rs index f13aa97..c77809e 100644 --- a/src/instantiation/latency_count.rs +++ b/src/latency/mod.rs @@ -1,17 +1,20 @@ +mod latency_algorithm; +mod list_of_lists; +pub mod port_latency_inference; + use std::{cmp::max, iter::zip}; use crate::prelude::*; -use crate::{ - flattening::{Instruction, WriteModifiers}, - instantiation::latency_algorithm::{ - convert_fanin_to_fanout, solve_latencies, FanInOut, LatencyCountingError, - }, +use crate::flattening::{Instruction, WriteModifiers}; + +use latency_algorithm::{ + convert_fanin_to_fanout, solve_latencies, FanInOut, LatencyCountingError, SpecifiedLatency, }; use self::list_of_lists::ListOfLists; -use super::*; +use crate::instantiation::*; struct PathMuxSource<'s> { to_wire: &'s RealWire, diff --git a/src/flattening/port_latency_inference.rs b/src/latency/port_latency_inference.rs similarity index 98% rename from src/flattening/port_latency_inference.rs rename to src/latency/port_latency_inference.rs index 697c051..9e26e90 100644 --- a/src/flattening/port_latency_inference.rs +++ b/src/latency/port_latency_inference.rs @@ -6,7 +6,9 @@ use crate::{ value::Value, }; -use super::{BinaryOperator, Instruction, Port, UnaryOperator, WireReference, WireReferenceRoot}; +use crate::flattening::{ + BinaryOperator, Instruction, Port, UnaryOperator, WireReference, WireReferenceRoot, +}; /*/// ports whose latency annotations require them to be at fixed predefined offsets /// diff --git a/src/main.rs b/src/main.rs index f9ac723..1d8daaa 100644 --- a/src/main.rs +++ b/src/main.rs @@ -9,6 +9,7 @@ mod errors; mod file_position; mod flattening; mod instantiation; +mod latency; mod prelude; mod to_string; mod typing; diff --git a/test.sus b/test.sus index 784267b..cb71f32 100644 --- a/test.sus +++ b/test.sus @@ -1118,3 +1118,9 @@ module IfTesting #(int WIDTH) { } else when WIDTH > BASE_CASE_SIZE { } } + +module test { + gen int[2] p + + int zsda = p[0] +}