14d129904SAlex Crichton;;! component_model_threading = true 24d129904SAlex Crichton 34d129904SAlex Crichton(component definition $Tester 44d129904SAlex Crichton (core module $Memory 54d129904SAlex Crichton (table (export "t") 1 funcref) 64d129904SAlex Crichton ) 74d129904SAlex Crichton (core instance $memory (instantiate $Memory)) 84d129904SAlex Crichton 94d129904SAlex Crichton (core type $ft (func (param i32))) 104d129904SAlex Crichton (core func $thread.new-indirect (canon thread.new-indirect $ft (table $memory "t"))) 11*d2fbd2deSAlex Crichton (core func $thread.suspend-to-suspended (canon thread.suspend-to-suspended)) 124d129904SAlex Crichton (core func $thread.suspend (canon thread.suspend)) 13*d2fbd2deSAlex Crichton (core func $thread.unsuspend (canon thread.unsuspend)) 14*d2fbd2deSAlex Crichton (core func $thread.yield-to-suspended (canon thread.yield-to-suspended)) 154d129904SAlex Crichton 164d129904SAlex Crichton (core module $DM 174d129904SAlex Crichton (import "" "thread.new-indirect" (func $thread.new-indirect (param i32 i32) (result i32))) 18*d2fbd2deSAlex Crichton (import "" "thread.suspend-to-suspended" (func $thread.suspend-to-suspended (param i32) (result i32))) 194d129904SAlex Crichton (import "" "thread.suspend" (func $thread.suspend (result i32))) 20*d2fbd2deSAlex Crichton (import "" "thread.unsuspend" (func $thread.unsuspend (param i32))) 21*d2fbd2deSAlex Crichton (import "" "thread.yield-to-suspended" (func $thread.yield-to-suspended (param i32) (result i32))) 224d129904SAlex Crichton 234d129904SAlex Crichton (func (export "noop")) 244d129904SAlex Crichton (func (export "trap-calling-thread-new-indirect") (call $thread.new-indirect (i32.const 0) (i32.const 0)) drop) 25*d2fbd2deSAlex Crichton (func (export "trap-calling-thread-suspend-to-suspended") (call $thread.suspend-to-suspended (i32.const 0)) drop) 264d129904SAlex Crichton (func (export "trap-calling-thread-suspend") (call $thread.suspend) drop) 27*d2fbd2deSAlex Crichton (func (export "trap-calling-thread-unsuspend") (call $thread.unsuspend (i32.const 0))) 28*d2fbd2deSAlex Crichton (func (export "trap-calling-thread-yield-to-suspended") (call $thread.yield-to-suspended (i32.const 0)) drop) 294d129904SAlex Crichton ) 304d129904SAlex Crichton (core instance $dm (instantiate $DM (with "" (instance 314d129904SAlex Crichton (export "thread.new-indirect" (func $thread.new-indirect)) 32*d2fbd2deSAlex Crichton (export "thread.suspend-to-suspended" (func $thread.suspend-to-suspended)) 334d129904SAlex Crichton (export "thread.suspend" (func $thread.suspend)) 34*d2fbd2deSAlex Crichton (export "thread.unsuspend" (func $thread.unsuspend)) 35*d2fbd2deSAlex Crichton (export "thread.yield-to-suspended" (func $thread.yield-to-suspended)) 364d129904SAlex Crichton )))) 374d129904SAlex Crichton (func (export "trap-calling-thread-new-indirect") 384d129904SAlex Crichton (canon lift (core func $dm "noop") 394d129904SAlex Crichton (post-return (func $dm "trap-calling-thread-new-indirect")))) 40*d2fbd2deSAlex Crichton (func (export "trap-calling-thread-suspend-to-suspended") 414d129904SAlex Crichton (canon lift (core func $dm "noop") 42*d2fbd2deSAlex Crichton (post-return (func $dm "trap-calling-thread-suspend-to-suspended")))) 434d129904SAlex Crichton (func (export "trap-calling-thread-suspend") 444d129904SAlex Crichton (canon lift (core func $dm "noop") 454d129904SAlex Crichton (post-return (func $dm "trap-calling-thread-suspend")))) 46*d2fbd2deSAlex Crichton (func (export "trap-calling-thread-unsuspend") 474d129904SAlex Crichton (canon lift (core func $dm "noop") 48*d2fbd2deSAlex Crichton (post-return (func $dm "trap-calling-thread-unsuspend")))) 49*d2fbd2deSAlex Crichton (func (export "trap-calling-thread-yield-to-suspended") 504d129904SAlex Crichton (canon lift (core func $dm "noop") 51*d2fbd2deSAlex Crichton (post-return (func $dm "trap-calling-thread-yield-to-suspended")))) 524d129904SAlex Crichton) 534d129904SAlex Crichton 544d129904SAlex Crichton(component instance $i0 $Tester) 554d129904SAlex Crichton(assert_trap (invoke "trap-calling-thread-new-indirect") "cannot leave component instance") 564d129904SAlex Crichton(component instance $i1 $Tester) 57*d2fbd2deSAlex Crichton(assert_trap (invoke "trap-calling-thread-suspend-to-suspended") "cannot leave component instance") 584d129904SAlex Crichton(component instance $i2 $Tester) 594d129904SAlex Crichton(assert_trap (invoke "trap-calling-thread-suspend") "cannot leave component instance") 604d129904SAlex Crichton(component instance $i3 $Tester) 61*d2fbd2deSAlex Crichton(assert_trap (invoke "trap-calling-thread-unsuspend") "cannot leave component instance") 624d129904SAlex Crichton(component instance $i4 $Tester) 63*d2fbd2deSAlex Crichton(assert_trap (invoke "trap-calling-thread-yield-to-suspended") "cannot leave component instance") 64