Expose function definitions and populate FaerieCompiledFunction with function lengths
This commit is contained in:
@@ -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(
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user