blob: f0702cdd3ad3ed7af2ebe77d3418c710bcc9fd1a [file] [log] [blame] [edit]
(module
(type $none_=>_anyref (func (result anyref)))
(type $sig_anyref (func (param anyref)))
(type $sig_funcref (func (param funcref)))
(type $none_=>_funcref (func (result funcref)))
(type $sig_eqref (func (param eqref)))
(type $none_=>_none (func))
(type $none_=>_eqref (func (result eqref)))
(type $i32_=>_none (func (param i32)))
(type $eqref_=>_funcref (func (param eqref) (result funcref)))
(import "env" "import_global" (global $import_global eqref))
(import "env" "import_func" (func $import_func (param eqref) (result funcref)))
(global $global_eqref (mut eqref) (ref.null none))
(global $global_funcref (mut funcref) (ref.null nofunc))
(global $global_funcref_func (mut funcref) (ref.func $foo))
(global $global_anyref (mut anyref) (ref.null none))
(global $global_anyref2 (mut anyref) (ref.null none))
(table $0 3 3 funcref)
(elem $0 (i32.const 0) $take_eqref $take_funcref $take_anyref)
(elem declare func $foo $ref-taken-but-not-in-table)
(tag $e-i32 (param i32))
(export "export_func" (func $import_func))
(export "export_global" (global $import_global))
(func $take_eqref (type $sig_eqref) (param $0 eqref)
(nop)
)
(func $take_funcref (type $sig_funcref) (param $0 funcref)
(nop)
)
(func $take_anyref (type $sig_anyref) (param $0 anyref)
(nop)
)
(func $foo (type $none_=>_none)
(nop)
)
(func $test (type $none_=>_none)
(local $local_eqref eqref)
(local $local_funcref funcref)
(local $local_anyref anyref)
(local.set $local_eqref
(local.get $local_eqref)
)
(local.set $local_eqref
(global.get $global_eqref)
)
(local.set $local_eqref
(ref.null none)
)
(local.set $local_funcref
(local.get $local_funcref)
)
(local.set $local_funcref
(global.get $global_funcref)
)
(local.set $local_funcref
(ref.null nofunc)
)
(local.set $local_funcref
(ref.func $foo)
)
(local.set $local_anyref
(local.get $local_anyref)
)
(local.set $local_anyref
(global.get $global_anyref)
)
(local.set $local_anyref
(ref.null none)
)
(local.set $local_anyref
(local.get $local_eqref)
)
(local.set $local_anyref
(global.get $global_eqref)
)
(local.set $local_anyref
(ref.null none)
)
(global.set $global_eqref
(global.get $global_eqref)
)
(global.set $global_eqref
(local.get $local_eqref)
)
(global.set $global_eqref
(ref.null none)
)
(global.set $global_funcref
(global.get $global_funcref)
)
(global.set $global_funcref
(local.get $local_funcref)
)
(global.set $global_funcref
(ref.null nofunc)
)
(global.set $global_funcref
(ref.func $foo)
)
(global.set $global_anyref
(global.get $global_anyref)
)
(global.set $global_anyref
(local.get $local_anyref)
)
(global.set $global_anyref
(ref.null none)
)
(global.set $global_anyref
(global.get $global_eqref)
)
(global.set $global_anyref
(local.get $local_eqref)
)
(global.set $global_anyref
(ref.null none)
)
(call $take_eqref
(local.get $local_eqref)
)
(call $take_eqref
(global.get $global_eqref)
)
(call $take_eqref
(ref.null none)
)
(call $take_funcref
(local.get $local_funcref)
)
(call $take_funcref
(global.get $global_funcref)
)
(call $take_funcref
(ref.null nofunc)
)
(call $take_funcref
(ref.func $foo)
)
(call $take_anyref
(local.get $local_anyref)
)
(call $take_anyref
(global.get $global_anyref)
)
(call $take_anyref
(ref.null none)
)
(call $take_anyref
(local.get $local_eqref)
)
(call $take_anyref
(global.get $global_eqref)
)
(call $take_anyref
(ref.null none)
)
(call_indirect $0 (type $sig_eqref)
(local.get $local_eqref)
(i32.const 0)
)
(call_indirect $0 (type $sig_eqref)
(global.get $global_eqref)
(i32.const 0)
)
(call_indirect $0 (type $sig_eqref)
(ref.null none)
(i32.const 0)
)
(call_indirect $0 (type $sig_funcref)
(local.get $local_funcref)
(i32.const 1)
)
(call_indirect $0 (type $sig_funcref)
(global.get $global_funcref)
(i32.const 1)
)
(call_indirect $0 (type $sig_funcref)
(ref.null nofunc)
(i32.const 1)
)
(call_indirect $0 (type $sig_funcref)
(ref.func $foo)
(i32.const 1)
)
(call_indirect $0 (type $sig_anyref)
(local.get $local_anyref)
(i32.const 3)
)
(call_indirect $0 (type $sig_anyref)
(global.get $global_anyref)
(i32.const 3)
)
(call_indirect $0 (type $sig_anyref)
(ref.null none)
(i32.const 3)
)
(call_indirect $0 (type $sig_anyref)
(local.get $local_eqref)
(i32.const 3)
)
(call_indirect $0 (type $sig_anyref)
(global.get $global_eqref)
(i32.const 3)
)
(call_indirect $0 (type $sig_anyref)
(ref.null none)
(i32.const 3)
)
(drop
(block $block (result eqref)
(br_if $block
(local.get $local_eqref)
(i32.const 1)
)
)
)
(drop
(block $block0 (result eqref)
(br_if $block0
(global.get $global_eqref)
(i32.const 1)
)
)
)
(drop
(block $block1 (result eqref)
(br_if $block1
(ref.null none)
(i32.const 1)
)
)
)
(drop
(block $block2 (result funcref)
(br_if $block2
(local.get $local_funcref)
(i32.const 1)
)
)
)
(drop
(block $block3 (result funcref)
(br_if $block3
(global.get $global_funcref)
(i32.const 1)
)
)
)
(drop
(block $block4 (result funcref)
(br_if $block4
(ref.null nofunc)
(i32.const 1)
)
)
)
(drop
(block $block5 (result funcref)
(br_if $block5
(ref.func $foo)
(i32.const 1)
)
)
)
(drop
(block $block6 (result anyref)
(br_if $block6
(local.get $local_anyref)
(i32.const 1)
)
)
)
(drop
(block $block7 (result anyref)
(br_if $block7
(global.get $global_anyref)
(i32.const 1)
)
)
)
(drop
(block $block8 (result anyref)
(br_if $block8
(ref.null none)
(i32.const 1)
)
)
)
(drop
(block $block9 (result anyref)
(br_if $block9
(local.get $local_eqref)
(i32.const 1)
)
)
)
(drop
(block $block10 (result anyref)
(br_if $block10
(ref.null none)
(i32.const 1)
)
)
)
(drop
(loop $loop-in (result eqref)
(local.get $local_eqref)
)
)
(drop
(loop $loop-in11 (result eqref)
(global.get $global_eqref)
)
)
(drop
(loop $loop-in12 (result eqref)
(ref.null none)
)
)
(drop
(loop $loop-in13 (result funcref)
(local.get $local_funcref)
)
)
(drop
(loop $loop-in14 (result funcref)
(global.get $global_funcref)
)
)
(drop
(loop $loop-in15 (result funcref)
(ref.null nofunc)
)
)
(drop
(loop $loop-in16 (result funcref)
(ref.func $foo)
)
)
(drop
(loop $loop-in17 (result anyref)
(local.get $local_anyref)
)
)
(drop
(loop $loop-in18 (result anyref)
(global.get $global_anyref)
)
)
(drop
(loop $loop-in19 (result anyref)
(ref.null none)
)
)
(drop
(loop $loop-in20 (result anyref)
(local.get $local_eqref)
)
)
(drop
(loop $loop-in21 (result anyref)
(global.get $global_eqref)
)
)
(drop
(loop $loop-in22 (result anyref)
(ref.null none)
)
)
(drop
(if (result eqref)
(i32.const 1)
(local.get $local_eqref)
(ref.null none)
)
)
(drop
(if (result funcref)
(i32.const 1)
(local.get $local_funcref)
(ref.null nofunc)
)
)
(drop
(if (result anyref)
(i32.const 1)
(local.get $local_anyref)
(ref.null none)
)
)
(drop
(if (result anyref)
(i32.const 1)
(local.get $local_eqref)
(local.get $local_eqref)
)
)
(drop
(if (result anyref)
(i32.const 1)
(ref.null none)
(ref.null none)
)
)
(drop
(if (result anyref)
(i32.const 1)
(i31.new
(i32.const 0)
)
(ref.null none)
)
)
(drop
(try $try (result eqref)
(do
(local.get $local_eqref)
)
(catch $e-i32
(drop
(pop i32)
)
(ref.null none)
)
)
)
(drop
(try $try28 (result funcref)
(do
(ref.func $foo)
)
(catch $e-i32
(drop
(pop i32)
)
(ref.null nofunc)
)
)
)
(drop
(try $try29 (result anyref)
(do
(local.get $local_eqref)
)
(catch $e-i32
(drop
(pop i32)
)
(ref.null none)
)
)
)
(drop
(try $try30 (result anyref)
(do
(ref.null none)
)
(catch $e-i32
(drop
(pop i32)
)
(local.get $local_eqref)
)
)
)
(drop
(select (result eqref)
(local.get $local_eqref)
(ref.null none)
(i32.const 1)
)
)
(drop
(select (result funcref)
(local.get $local_funcref)
(ref.null nofunc)
(i32.const 1)
)
)
(drop
(select
(i32.const 0)
(i32.const 2)
(i32.const 1)
)
)
(drop
(select (result anyref)
(local.get $local_eqref)
(i31.new
(i32.const 0)
)
(i32.const 1)
)
)
(drop
(ref.is_null
(local.get $local_eqref)
)
)
(drop
(ref.is_null
(global.get $global_eqref)
)
)
(drop
(ref.is_null
(ref.null none)
)
)
(drop
(ref.is_null
(local.get $local_funcref)
)
)
(drop
(ref.is_null
(global.get $global_funcref)
)
)
(drop
(ref.is_null
(ref.null nofunc)
)
)
(drop
(ref.is_null
(ref.func $foo)
)
)
(drop
(ref.is_null
(local.get $local_anyref)
)
)
(drop
(ref.is_null
(global.get $global_anyref)
)
)
(drop
(ref.is_null
(ref.null none)
)
)
)
(func $return_eqref_local (type $none_=>_eqref) (result eqref)
(local $local_eqref eqref)
(local.get $local_eqref)
)
(func $return_eqref_global (type $none_=>_eqref) (result eqref)
(global.get $global_eqref)
)
(func $return_eqref_null (type $none_=>_eqref) (result eqref)
(ref.null none)
)
(func $return_funcref_local (type $none_=>_funcref) (result funcref)
(local $local_funcref funcref)
(local.get $local_funcref)
)
(func $return_funcref_global (type $none_=>_funcref) (result funcref)
(global.get $global_funcref)
)
(func $return_funcref_null (type $none_=>_funcref) (result funcref)
(ref.null nofunc)
)
(func $return_funcref_func (type $none_=>_funcref) (result funcref)
(ref.func $foo)
)
(func $return_anyref_local (type $none_=>_anyref) (result anyref)
(local $local_anyref anyref)
(local.get $local_anyref)
)
(func $return_anyref_global (type $none_=>_anyref) (result anyref)
(global.get $global_anyref)
)
(func $return_anyref_null (type $none_=>_anyref) (result anyref)
(ref.null none)
)
(func $return_anyref2 (type $none_=>_anyref) (result anyref)
(local $local_eqref eqref)
(local.get $local_eqref)
)
(func $return_anyref3 (type $none_=>_anyref) (result anyref)
(global.get $global_eqref)
)
(func $return_anyref4 (type $none_=>_anyref) (result anyref)
(ref.null none)
)
(func $returns_eqref (type $none_=>_eqref) (result eqref)
(local $local_eqref eqref)
(return
(local.get $local_eqref)
)
(return
(global.get $global_eqref)
)
(return
(ref.null none)
)
)
(func $returns_funcref (type $none_=>_funcref) (result funcref)
(local $local_funcref funcref)
(return
(local.get $local_funcref)
)
(return
(global.get $global_funcref)
)
(return
(ref.func $foo)
)
(return
(ref.null nofunc)
)
)
(func $returns_anyref (type $none_=>_anyref) (result anyref)
(local $local_anyref anyref)
(return
(local.get $local_anyref)
)
(return
(global.get $global_anyref)
)
(return
(ref.null none)
)
)
(func $returns_anyref2 (type $none_=>_anyref) (result anyref)
(local $local_eqref eqref)
(local $local_funcref funcref)
(return
(local.get $local_eqref)
)
(return
(global.get $global_eqref)
)
(return
(ref.null none)
)
)
(func $ref-user (type $none_=>_none)
(drop
(ref.func $ref-taken-but-not-in-table)
)
)
(func $ref-taken-but-not-in-table (type $none_=>_none)
(nop)
)
)