Unify trampolines in Compilation object

This commit is contained in:
Syrus
2020-06-16 20:11:47 -07:00
parent 1e590f1bea
commit 03494ac1a2
9 changed files with 128 additions and 150 deletions

View File

@ -114,31 +114,33 @@ impl Compiler for SinglepassCompiler {
.into_iter()
.collect::<PrimaryMap<LocalFunctionIndex, CompiledFunction>>();
Ok(Compilation::new(functions, import_trampolines, None))
}
fn compile_function_call_trampolines(
&self,
signatures: &[FunctionType],
) -> Result<Vec<FunctionBody>, CompileError> {
Ok(signatures
let function_call_trampolines = module
.signatures
.values()
.collect::<Vec<_>>()
.par_iter()
.cloned()
.map(gen_std_trampoline)
.collect())
}
.collect::<Vec<_>>()
.into_iter()
.collect::<PrimaryMap<_, _>>();
fn compile_dynamic_function_trampolines(
&self,
signatures: &[FunctionType],
) -> Result<PrimaryMap<FunctionIndex, FunctionBody>, CompileError> {
let vmoffsets = VMOffsets::new_for_trampolines(8);
Ok(signatures
let dynamic_function_trampolines = module
.imported_function_types()
.collect::<Vec<_>>()
.par_iter()
.map(|func_type| gen_std_dynamic_import_trampoline(&vmoffsets, &func_type))
.collect::<Vec<_>>()
.into_iter()
.collect::<PrimaryMap<FunctionIndex, FunctionBody>>())
.collect::<PrimaryMap<FunctionIndex, FunctionBody>>();
Ok(Compilation::new(
functions,
import_trampolines,
function_call_trampolines,
dynamic_function_trampolines,
None,
))
}
}