;; expected = R"---(;; This is a polyglot C++/WAT file. ;; Comment lines are ignored and not expected in the disassembler output. (module ;; Structs. (type $type0 (struct)) (type $type1 (struct (field $field0 i32))) (type $type2 (struct (field $field0 (mut i32)) (field $field1 (mut i64)))) (type $type3 (struct (field $field0 i8) (field $field1 (mut i16)))) ;; Arrays. (type $type4 (array (field i64))) (type $type5 (array (field (mut i64)))) (type $type6 (array (field i8))) ;; References to other types, mutual recursion. (type $type7 (struct (field $field0 (ref $type0)))) ;; TODO: rec-groups are supported in the binary format, but they are not ;; printed yet. Once that is implemented in the disassembler, uncomment: ;; (rec (type $type8 (struct (field $field0 (ref $type9)))) (type $type9 (struct (field $field0 (ref $type8)))) ;; ) ;; Subtyping constraints. ;; TODO: Change to `sub` keyword, once that is standardized. (type $type10 (struct_subtype (field $field0 i32) $type0)) ;; Globals using reference types. (global $env.imported_global (;0;) (import "env" "imported_global") (ref $type7)) (global $env.another_global (;1;) (import "env" "another_global") (ref $type8)) (global $global2 anyref (ref.null none)) (global $global3 (mut eqref) (ref.null none)) ;; Function with GC instructions and taking GC types as parameters. (func $func0 (param $var0 (ref $type1)) (param $var1 eqref) ;; Structs. struct.new_default $type1 struct.get $type1 $field0 drop struct.new_default $type2 i32.const 0 struct.set $type2 $field0 struct.new_default $type3 struct.get_s $type3 $field0 drop struct.new_default $type3 struct.get_u $type3 $field1 drop ;; Arrays. array.new_fixed $type4 0 drop i32.const 0 array.new_default $type4 array.len drop i64.const 0 i32.const 0 array.new $type4 i32.const 0 array.get $type4 drop i32.const 0 array.new_default $type5 i32.const 0 i64.const 0 array.set $type5 i32.const 0 array.new_default $type6 i32.const 0 array.get_s $type6 drop i32.const 0 array.new_default $type6 i32.const 0 array.get_u $type6 drop ;; References. local.get $var1 local.get $var1 ref.eq drop local.get $var1 ref.test $type0 drop local.get $var0 ref.cast $type0 drop local.get $var0 ref.test null $type0 drop local.get $var0 ref.cast null $type0 drop ;; Branches. block $label0 (result (ref $type1)) local.get $var0 br_on_non_null $label0 local.get $var0 br_on_cast $label0 (ref null $type0) (ref $type1) drop local.get $var0 br_on_cast_fail $label0 (ref $type0) (ref null $type1) drop local.get $var0 end $label0 drop ) ) ;;)---";