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
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)))
|
|
|