1;;! gc = true 2;;! multi_memory = true 3 4;; Instantiation is generative 5 6(module definition $M 7 (global (export "glob") (mut i32) (i32.const 0)) 8 (table (export "tab") 10 funcref (ref.null func)) 9 (memory (export "mem") 1) 10) 11 12(module instance $I1 $M) 13(module instance $I2 $M) 14(register "I1" $I1) 15(register "I2" $I2) 16 17(module 18 (import "I1" "glob" (global $glob1 (mut i32))) 19 (import "I2" "glob" (global $glob2 (mut i32))) 20 (import "I1" "tab" (table $tab1 10 funcref)) 21 (import "I2" "tab" (table $tab2 10 funcref)) 22 (import "I1" "mem" (memory $mem1 1)) 23 (import "I2" "mem" (memory $mem2 1)) 24 25 (func $f) 26 (elem declare func $f) 27 28 (func (export "glob") (result i32) 29 (global.set $glob1 (i32.const 1)) 30 (global.get $glob2) 31 ) 32 (func (export "tab") (result funcref) 33 (table.set $tab1 (i32.const 0) (ref.func $f)) 34 (table.get $tab2 (i32.const 0)) 35 ) 36 (func (export "mem") (result i32) 37 (i32.store $mem1 (i32.const 0) (i32.const 1)) 38 (i32.load $mem2 (i32.const 0)) 39 ) 40) 41 42(assert_return (invoke "glob") (i32.const 0)) 43(assert_return (invoke "tab") (ref.null)) 44(assert_return (invoke "mem") (i32.const 0)) 45 46 47;; Import is not generative 48 49(module 50 (import "I1" "glob" (global $glob1 (mut i32))) 51 (import "I1" "glob" (global $glob2 (mut i32))) 52 (import "I1" "tab" (table $tab1 10 funcref)) 53 (import "I1" "tab" (table $tab2 10 funcref)) 54 (import "I1" "mem" (memory $mem1 1)) 55 (import "I1" "mem" (memory $mem2 1)) 56 57 (func $f) 58 (elem declare func $f) 59 60 (func (export "glob") (result i32) 61 (global.set $glob1 (i32.const 1)) 62 (global.get $glob2) 63 ) 64 (func (export "tab") (result funcref) 65 (table.set $tab1 (i32.const 0) (ref.func $f)) 66 (table.get $tab2 (i32.const 0)) 67 ) 68 (func (export "mem") (result i32) 69 (i32.store $mem1 (i32.const 0) (i32.const 1)) 70 (i32.load $mem2 (i32.const 0)) 71 ) 72) 73 74(assert_return (invoke "glob") (i32.const 1)) 75(assert_return (invoke "tab") (ref.func)) 76(assert_return (invoke "mem") (i32.const 1)) 77 78 79;; Export is not generative 80 81(module definition $N 82 (global $glob (mut i32) (i32.const 0)) 83 (table $tab 10 funcref (ref.null func)) 84 (memory $mem 1) 85 86 (export "glob1" (global $glob)) 87 (export "glob2" (global $glob)) 88 (export "tab1" (table $tab)) 89 (export "tab2" (table $tab)) 90 (export "mem1" (memory $mem)) 91 (export "mem2" (memory $mem)) 92) 93 94(module instance $I $N) 95(register "I" $I) 96 97(module 98 (import "I" "glob1" (global $glob1 (mut i32))) 99 (import "I" "glob2" (global $glob2 (mut i32))) 100 (import "I" "tab1" (table $tab1 10 funcref)) 101 (import "I" "tab2" (table $tab2 10 funcref)) 102 (import "I" "mem1" (memory $mem1 1)) 103 (import "I" "mem2" (memory $mem2 1)) 104 105 (func $f) 106 (elem declare func $f) 107 108 (func (export "glob") (result i32) 109 (global.set $glob1 (i32.const 1)) 110 (global.get $glob2) 111 ) 112 (func (export "tab") (result funcref) 113 (table.set $tab1 (i32.const 0) (ref.func $f)) 114 (table.get $tab2 (i32.const 0)) 115 ) 116 (func (export "mem") (result i32) 117 (i32.store $mem1 (i32.const 0) (i32.const 1)) 118 (i32.load $mem2 (i32.const 0)) 119 ) 120) 121 122(assert_return (invoke "glob") (i32.const 1)) 123(assert_return (invoke "tab") (ref.func)) 124(assert_return (invoke "mem") (i32.const 1)) 125