mirror of
https://github.com/fluencelabs/wasmer
synced 2025-04-01 23:41:03 +00:00
Emit a Return opcode if the last one is not return.
This commit is contained in:
parent
8d8db4aa09
commit
1526d35872
@ -1,7 +1,7 @@
|
|||||||
use crate::codegen::{CodegenError, FunctionCodeGenerator, ModuleCodeGenerator};
|
use crate::codegen::{CodegenError, FunctionCodeGenerator, ModuleCodeGenerator};
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use wasmer_runtime_core::{
|
use wasmer_runtime_core::{
|
||||||
backend::Backend,
|
backend::{Backend, ProtectedCaller},
|
||||||
module::{
|
module::{
|
||||||
DataInitializer, ExportIndex, ImportName, ModuleInfo, StringTable, StringTableBuilder,
|
DataInitializer, ExportIndex, ImportName, ModuleInfo, StringTable, StringTableBuilder,
|
||||||
TableInitializer,
|
TableInitializer,
|
||||||
@ -38,7 +38,11 @@ impl From<CodegenError> for LoadError {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn read_module<MCG: ModuleCodeGenerator<FCG>, FCG: FunctionCodeGenerator>(
|
pub fn read_module<
|
||||||
|
MCG: ModuleCodeGenerator<FCG, PC>,
|
||||||
|
FCG: FunctionCodeGenerator,
|
||||||
|
PC: ProtectedCaller,
|
||||||
|
>(
|
||||||
wasm: &[u8],
|
wasm: &[u8],
|
||||||
backend: Backend,
|
backend: Backend,
|
||||||
mcg: &mut MCG,
|
mcg: &mut MCG,
|
||||||
@ -72,7 +76,6 @@ pub fn read_module<MCG: ModuleCodeGenerator<FCG>, FCG: FunctionCodeGenerator>(
|
|||||||
|
|
||||||
loop {
|
loop {
|
||||||
if reader.eof() {
|
if reader.eof() {
|
||||||
mcg.finalize()?;
|
|
||||||
return Ok(info);
|
return Ok(info);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -285,10 +288,18 @@ pub fn read_module<MCG: ModuleCodeGenerator<FCG>, FCG: FunctionCodeGenerator>(
|
|||||||
fcg.feed_local(ty, count as usize)?;
|
fcg.feed_local(ty, count as usize)?;
|
||||||
}
|
}
|
||||||
fcg.begin_body()?;
|
fcg.begin_body()?;
|
||||||
|
let mut last_is_return = false;
|
||||||
for op in item.get_operators_reader()? {
|
for op in item.get_operators_reader()? {
|
||||||
let op = op?;
|
let op = op?;
|
||||||
|
last_is_return = match op {
|
||||||
|
Operator::Return => true,
|
||||||
|
_ => false,
|
||||||
|
};
|
||||||
fcg.feed_opcode(op)?;
|
fcg.feed_opcode(op)?;
|
||||||
}
|
}
|
||||||
|
if !last_is_return {
|
||||||
|
fcg.feed_opcode(Operator::Return)?;
|
||||||
|
}
|
||||||
fcg.finalize()?;
|
fcg.finalize()?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user