Expose function definitions and populate FaerieCompiledFunction with function lengths

This commit is contained in:
iximeow
2019-04-18 16:51:26 -07:00
parent 274415d5ee
commit 45013a1d2b
3 changed files with 24 additions and 6 deletions

View File

@@ -96,7 +96,15 @@ pub struct FaerieBackend {
libcall_names: Box<Fn(ir::LibCall) -> String>, libcall_names: Box<Fn(ir::LibCall) -> String>,
} }
pub struct FaerieCompiledFunction {} pub struct FaerieCompiledFunction {
code_length: u32,
}
impl FaerieCompiledFunction {
pub fn code_length(&self) -> u32 {
self.code_length
}
}
pub struct FaerieCompiledData {} pub struct FaerieCompiledData {}
@@ -187,10 +195,14 @@ impl Backend for FaerieBackend {
} }
} }
// because `define` will take ownership of code, this is our last chance
let code_length = code.len() as u32;
self.artifact self.artifact
.define(name, code) .define(name, code)
.expect("inconsistent declaration"); .expect("inconsistent declaration");
Ok(FaerieCompiledFunction {})
Ok(FaerieCompiledFunction { code_length })
} }
fn define_data( fn define_data(

View File

@@ -40,7 +40,8 @@ mod module;
pub use crate::backend::Backend; pub use crate::backend::Backend;
pub use crate::data_context::{DataContext, DataDescription, Init}; pub use crate::data_context::{DataContext, DataDescription, Init};
pub use crate::module::{ pub use crate::module::{
DataId, FuncId, FuncOrDataId, Linkage, Module, ModuleError, ModuleNamespace, ModuleResult, DataId, FuncId, FuncOrDataId, Linkage, Module, ModuleError, ModuleFunction, ModuleNamespace,
ModuleResult,
}; };
/// Version number of this crate. /// Version number of this crate.

View File

@@ -153,14 +153,14 @@ pub enum ModuleError {
pub type ModuleResult<T> = Result<T, ModuleError>; pub type ModuleResult<T> = Result<T, ModuleError>;
/// A function belonging to a `Module`. /// A function belonging to a `Module`.
struct ModuleFunction<B> pub struct ModuleFunction<B>
where where
B: Backend, B: Backend,
{ {
/// The function declaration. /// The function declaration.
decl: FunctionDeclaration, pub decl: FunctionDeclaration,
/// The compiled artifact, once it's available. /// The compiled artifact, once it's available.
compiled: Option<B::CompiledFunction>, pub compiled: Option<B::CompiledFunction>,
} }
impl<B> ModuleFunction<B> impl<B> ModuleFunction<B>
@@ -427,6 +427,11 @@ where
} }
} }
/// An iterator over functions that have been declared in this module.
pub fn declared_functions(&self) -> core::slice::Iter<'_, ModuleFunction<B>> {
self.contents.functions.values()
}
/// Declare a data object in this module. /// Declare a data object in this module.
pub fn declare_data( pub fn declare_data(
&mut self, &mut self,