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