diff --git a/crates/aiken-lang/src/ast.rs b/crates/aiken-lang/src/ast.rs index dae941c2..f9966940 100644 --- a/crates/aiken-lang/src/ast.rs +++ b/crates/aiken-lang/src/ast.rs @@ -69,16 +69,18 @@ impl Module { } impl UntypedModule { - pub fn dependencies(&self) -> Vec<(String, Span)> { + pub fn dependencies(&self, env_modules: &[String]) -> Vec { self.definitions() .flat_map(|def| { - if let Definition::Use(Use { - location, module, .. - }) = def - { - Some((module.join("/"), *location)) + if let Definition::Use(Use { module, .. }) = def { + let name = module.join("/"); + if name == ENV_MODULE { + env_modules.to_vec() + } else { + vec![name] + } } else { - None + Vec::new() } }) .collect() diff --git a/crates/aiken-project/src/module.rs b/crates/aiken-project/src/module.rs index 804d5c6b..35ba60b6 100644 --- a/crates/aiken-project/src/module.rs +++ b/crates/aiken-project/src/module.rs @@ -32,16 +32,9 @@ pub struct ParsedModule { } impl ParsedModule { - pub fn deps_for_graph(&self) -> (String, Vec) { + pub fn deps_for_graph(&self, env_modules: &[String]) -> (String, Vec) { let name = self.name.clone(); - - let deps: Vec<_> = self - .ast - .dependencies() - .into_iter() - .map(|(dep, _span)| dep) - .collect(); - + let deps: Vec<_> = self.ast.dependencies(env_modules); (name, deps) } @@ -124,10 +117,19 @@ impl ParsedModules { } pub fn sequence(&self, our_modules: &BTreeSet) -> Result, Error> { + let env_modules = self + .0 + .values() + .filter_map(|m| match m.kind { + ModuleKind::Env => Some(m.name.clone()), + ModuleKind::Lib | ModuleKind::Validator => None, + }) + .collect::>(); + let inputs = self .0 .values() - .map(|m| m.deps_for_graph()) + .map(|m| m.deps_for_graph(&env_modules)) .collect::)>>(); let capacity = inputs.len();