Enable ref.func global initializers (#1380)

* Fix comment referencing an outdated instruction name

* cranelift-wasm: Enable `ref.func` global initializers
This commit is contained in:
Nick Fitzgerald
2020-02-07 11:44:07 -08:00
committed by GitHub
parent 832666c45e
commit ce1ee2d2f5
3 changed files with 18 additions and 1 deletions

View File

@@ -224,6 +224,9 @@ pub fn parse_global_section(
GlobalInit::V128Const(V128Imm::from(value.bytes().to_vec().as_slice()))
}
Operator::RefNull => GlobalInit::RefNullConst,
Operator::RefFunc { function_index } => {
GlobalInit::RefFunc(FuncIndex::from_u32(function_index))
}
Operator::GlobalGet { global_index } => {
GlobalInit::GetGlobal(GlobalIndex::from_u32(global_index))
}

View File

@@ -81,10 +81,12 @@ pub enum GlobalInit {
F64Const(u64),
/// A `vconst`.
V128Const(V128Imm),
/// A `get_global` of another global.
/// A `global.get` of another global.
GetGlobal(GlobalIndex),
/// A `ref.null`.
RefNullConst,
/// A `ref.func <index>`.
RefFunc(FuncIndex),
///< The global is imported from, and thus initialized by, a different module.
Import,
}

View File

@@ -0,0 +1,12 @@
(module
(func $imported (import "env" "f") (param i32) (result i32))
(func $local (result anyref anyref funcref funcref)
global.get 0
global.get 1
global.get 2
global.get 3)
(global (export "anyref-imported") anyref (ref.func $imported))
(global (export "anyref-local") anyref (ref.func $local))
(global (export "funcref-imported") funcref (ref.func $imported))
(global (export "funcref-local") funcref (ref.func $local)))