summaryrefslogtreecommitdiff
path: root/test/spec/stack.wast
diff options
context:
space:
mode:
Diffstat (limited to 'test/spec/stack.wast')
-rw-r--r--test/spec/stack.wast104
1 files changed, 93 insertions, 11 deletions
diff --git a/test/spec/stack.wast b/test/spec/stack.wast
index b3933b394..d0c46955d 100644
--- a/test/spec/stack.wast
+++ b/test/spec/stack.wast
@@ -8,8 +8,8 @@
(loop $loop
(if
(i64.eq (local.get $i) (i64.const 0))
- (br $done)
- (block
+ (then (br $done))
+ (else
(local.set $res (i64.mul (local.get $i) (local.get $res)))
(local.set $i (i64.sub (local.get $i) (i64.const 1)))
)
@@ -63,9 +63,9 @@
local.get $i
i64.const 0
i64.eq
- if
+ if $body
br $done
- else
+ else $body
local.get $i
local.get $res
i64.mul
@@ -74,10 +74,10 @@
i64.const 1
i64.sub
local.set $i
- end
+ end $body
br $loop
- end
- end
+ end $loop
+ end $done
local.get $res
)
@@ -131,8 +131,90 @@
(assert_return (invoke "fac-stack" (i64.const 25)) (i64.const 7034535277573963776))
(assert_return (invoke "fac-mixed" (i64.const 25)) (i64.const 7034535277573963776))
-;; from br_table.wast
-(module (func $type-arg-num-vs-void
- (block (br_table 0 (i32.const 0) (i32.const 1)))
-))
+;; Syntax of flat call_indirect
+
+(module
+ (type $proc (func))
+ (table 1 funcref)
+
+ (func
+ (block i32.const 0 call_indirect)
+ (loop i32.const 0 call_indirect)
+ (if (i32.const 0) (then i32.const 0 call_indirect))
+ (if (i32.const 0)
+ (then i32.const 0 call_indirect)
+ (else i32.const 0 call_indirect)
+ )
+ (block i32.const 0 call_indirect (type $proc))
+ (loop i32.const 0 call_indirect (type $proc))
+ (if (i32.const 0) (then i32.const 0 call_indirect (type $proc)))
+ (if (i32.const 0)
+ (then i32.const 0 call_indirect (type $proc))
+ (else i32.const 0 call_indirect (type $proc))
+ )
+ (block i32.const 0 i32.const 0 call_indirect (param i32))
+ (loop i32.const 0 i32.const 0 call_indirect (param i32))
+ (if (i32.const 0) (then i32.const 0 i32.const 0 call_indirect (param i32)))
+ (if (i32.const 0)
+ (then i32.const 0 i32.const 0 call_indirect (param i32))
+ (else i32.const 0 i32.const 0 call_indirect (param i32))
+ )
+ (block (result i32) i32.const 0 call_indirect (result i32)) (drop)
+ (loop (result i32) i32.const 0 call_indirect (result i32)) (drop)
+ (if (result i32) (i32.const 0)
+ (then i32.const 0 call_indirect (result i32))
+ (else i32.const 0 call_indirect (result i32))
+ ) (drop)
+ (block i32.const 0 call_indirect (type $proc) (param) (result))
+ (loop i32.const 0 call_indirect (type $proc) (param) (result))
+ (if (i32.const 0)
+ (then i32.const 0 call_indirect (type $proc) (param) (result))
+ )
+ (if (i32.const 0)
+ (then i32.const 0 call_indirect (type $proc) (param) (param) (result))
+ (else i32.const 0 call_indirect (type $proc) (param) (result) (result))
+ )
+
+ block i32.const 0 call_indirect end
+ loop i32.const 0 call_indirect end
+ i32.const 0 if i32.const 0 call_indirect end
+ i32.const 0 if i32.const 0 call_indirect else i32.const 0 call_indirect end
+ block i32.const 0 call_indirect (type $proc) end
+ loop i32.const 0 call_indirect (type $proc) end
+ i32.const 0 if i32.const 0 call_indirect (type $proc) end
+ i32.const 0
+ if
+ i32.const 0 call_indirect (type $proc)
+ else
+ i32.const 0 call_indirect (type $proc)
+ end
+ block i32.const 0 i32.const 0 call_indirect (param i32) end
+ loop i32.const 0 i32.const 0 call_indirect (param i32) end
+ i32.const 0 if i32.const 0 i32.const 0 call_indirect (param i32) end
+ i32.const 0
+ if
+ i32.const 0 i32.const 0 call_indirect (param i32)
+ else
+ i32.const 0 i32.const 0 call_indirect (param i32)
+ end
+ block (result i32) i32.const 0 call_indirect (result i32) end drop
+ loop (result i32) i32.const 0 call_indirect (result i32) end drop
+ i32.const 0
+ if (result i32)
+ i32.const 0 call_indirect (result i32)
+ else
+ i32.const 0 call_indirect (result i32)
+ end drop
+ block i32.const 0 call_indirect (type $proc) (param) (result) end
+ loop i32.const 0 call_indirect (type $proc) (param) (result) end
+ i32.const 0 if i32.const 0 call_indirect (type $proc) (param) (result) end
+ i32.const 0
+ if
+ i32.const 0 call_indirect (type $proc) (param) (result)
+ else
+ i32.const 0 call_indirect (type $proc) (param) (param) (result) (result)
+ end
+ i32.const 0 call_indirect
+ )
+)