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