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