WASMコンパイルエラーのメモです。
エラー内容
index.php:1 Uncaught (in promise) CompileError: WebAssembly.instantiateStreaming(): Compiling function #1:”funcname” failed: expected 0 elements on the stack for fallthru, found 1 @+224
funcname | 問題のあるWASM関数名 |
expected 0 | 期待されるresult数が0 |
found 1 | スタックに残った数が1 |
対処の例
WATファイルが編集できる状態にし、整合性が取れているか検証します。
local.get, const , addの結果, subの結果等によるstackへのpush数と、
local.set, addの引数, subの引数等で消費したstackからのpop数との差がresult数と一致しない場所が存在します。
;; (1) index-1の値がスタックに残っている
(i32.sub (local.get $index) (i32.const 1)) ;; push - pop = 1
;; (2) localにセットしたためスタックに残らない
(local.set $index (i32.sub (local.get $index) (i32.const 1))) ;; push - pop = 0
上記の例と検証
(1)インデックスー1の値が必要な為、1つのresultがスタックに残る
(2)一時的なローカル変数として使用している為、スタックに残ってはならない
コメント