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:
@@ -224,6 +224,9 @@ pub fn parse_global_section(
|
|||||||
GlobalInit::V128Const(V128Imm::from(value.bytes().to_vec().as_slice()))
|
GlobalInit::V128Const(V128Imm::from(value.bytes().to_vec().as_slice()))
|
||||||
}
|
}
|
||||||
Operator::RefNull => GlobalInit::RefNullConst,
|
Operator::RefNull => GlobalInit::RefNullConst,
|
||||||
|
Operator::RefFunc { function_index } => {
|
||||||
|
GlobalInit::RefFunc(FuncIndex::from_u32(function_index))
|
||||||
|
}
|
||||||
Operator::GlobalGet { global_index } => {
|
Operator::GlobalGet { global_index } => {
|
||||||
GlobalInit::GetGlobal(GlobalIndex::from_u32(global_index))
|
GlobalInit::GetGlobal(GlobalIndex::from_u32(global_index))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -81,10 +81,12 @@ pub enum GlobalInit {
|
|||||||
F64Const(u64),
|
F64Const(u64),
|
||||||
/// A `vconst`.
|
/// A `vconst`.
|
||||||
V128Const(V128Imm),
|
V128Const(V128Imm),
|
||||||
/// A `get_global` of another global.
|
/// A `global.get` of another global.
|
||||||
GetGlobal(GlobalIndex),
|
GetGlobal(GlobalIndex),
|
||||||
/// A `ref.null`.
|
/// A `ref.null`.
|
||||||
RefNullConst,
|
RefNullConst,
|
||||||
|
/// A `ref.func <index>`.
|
||||||
|
RefFunc(FuncIndex),
|
||||||
///< The global is imported from, and thus initialized by, a different module.
|
///< The global is imported from, and thus initialized by, a different module.
|
||||||
Import,
|
Import,
|
||||||
}
|
}
|
||||||
|
|||||||
12
cranelift/wasmtests/ref-func-0.wat
Normal file
12
cranelift/wasmtests/ref-func-0.wat
Normal 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)))
|
||||||
Reference in New Issue
Block a user