feat(Project::export): use Export::from_function and transpose
Co-authored-by: Kasey White <kwhitemsg@gmail.com>
This commit is contained in:
parent
8ed930ac5a
commit
dac3308620
|
@ -42,6 +42,7 @@ use aiken_lang::{
|
||||||
tipo::{Type, TypeInfo},
|
tipo::{Type, TypeInfo},
|
||||||
IdGenerator,
|
IdGenerator,
|
||||||
};
|
};
|
||||||
|
use export::Export;
|
||||||
use indexmap::IndexMap;
|
use indexmap::IndexMap;
|
||||||
use miette::NamedSource;
|
use miette::NamedSource;
|
||||||
use options::{CodeGenMode, Options};
|
use options::{CodeGenMode, Options};
|
||||||
|
@ -465,22 +466,21 @@ where
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn export(&self, module: &str, name: &str) -> Result<String, Error> {
|
pub fn export(&self, module: &str, name: &str) -> Result<Export, Error> {
|
||||||
let mut generator = self.new_generator(Tracing::silent());
|
|
||||||
|
|
||||||
self.checked_modules
|
self.checked_modules
|
||||||
.get(module)
|
.get(module)
|
||||||
.and_then(|checked_module| {
|
.and_then(|checked_module| {
|
||||||
checked_module.ast.definitions().find_map(|def| match def {
|
checked_module.ast.definitions().find_map(|def| match def {
|
||||||
Definition::Fn(func) if func.name == name => Some(func),
|
Definition::Fn(func) if func.name == name => Some((checked_module, func)),
|
||||||
_ => None,
|
_ => None,
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
.map(|func| {
|
.map(|(checked_module, func)| {
|
||||||
let program = generator.generate_raw(&func.body, &func.arguments, module);
|
let mut generator = self.new_generator(Tracing::silent());
|
||||||
|
|
||||||
program.to_debruijn().unwrap().to_hex().unwrap()
|
Export::from_function(func, checked_module, &mut generator, &self.checked_modules)
|
||||||
})
|
})
|
||||||
|
.transpose()?
|
||||||
.ok_or_else(|| Error::ExportNotFound {
|
.ok_or_else(|| Error::ExportNotFound {
|
||||||
module: module.to_string(),
|
module: module.to_string(),
|
||||||
name: name.to_string(),
|
name: name.to_string(),
|
||||||
|
|
Loading…
Reference in New Issue