You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

208 lines
2.7 KiB

(assert_fuel 0 (module))
(assert_fuel 1
(module
(func $f)
(start $f)))
(assert_fuel 2
(module
(func $f
i32.const 0
drop
)
(start $f)))
(assert_fuel 1
(module
(func $f
block
end
)
(start $f)))
(assert_fuel 1
(module
(func $f
unreachable
)
(start $f)))
(assert_fuel 7
(module
(func $f
i32.const 0
i32.const 0
i32.const 0
i32.const 0
i32.const 0
i32.const 0
unreachable
)
(start $f)))
(assert_fuel 1
(module
(func $f
return
i32.const 0
i32.const 0
i32.const 0
i32.const 0
i32.const 0
i32.const 0
unreachable
)
(start $f)))
(assert_fuel 3
(module
(func $f
i32.const 0
if
call $f
end
)
(start $f)))
(assert_fuel 4
(module
(func $f
i32.const 1
if
i32.const 0
drop
end
)
(start $f)))
(assert_fuel 4
(module
(func $f
i32.const 1
if
i32.const 0
drop
else
call $f
end
)
(start $f)))
(assert_fuel 4
(module
(func $f
i32.const 0
if
call $f
else
i32.const 0
drop
end
)
(start $f)))
(assert_fuel 3
(module
(func $f
block
i32.const 1
br_if 0
i32.const 0
drop
end
)
(start $f)))
(assert_fuel 4
(module
(func $f
block
i32.const 0
br_if 0
i32.const 0
drop
end
)
(start $f)))
;; count code before unreachable
(assert_fuel 2
(module
(func $f
i32.const 0
unreachable
)
(start $f)))
;; count code before return
(assert_fuel 2
(module
(func $f
i32.const 0
return
)
(start $f)))
;; cross-function fuel works
(assert_fuel 3
(module
(func $f
call $other
)
(func $other)
(start $f)))
(assert_fuel 5
(module
(func $f
i32.const 0
call $other
i32.const 0
drop
)
(func $other (param i32))
(start $f)))
(assert_fuel 4
(module
(func $f
call $other
drop
)
(func $other (result i32)
i32.const 0
)
(start $f)))
(assert_fuel 4
(module
(func $f
i32.const 0
call_indirect
)
(func $other)
(table funcref (elem $other))
(start $f)))
;; loops!
(assert_fuel 1
(module
(func $f
loop
end
)
(start $f)))
(assert_fuel 53 ;; 5 loop instructions, 10 iterations, 2 header instrs, 1 func
(module
(func $f
(local i32)
i32.const 10
local.set 0
loop
local.get 0
i32.const 1
i32.sub
local.tee 0
br_if 0
end
)
(start $f)))