(func $main/test (type $t1) (param $p0 i32) (param $p1 i32)
...)
(func $main/test|trampoline (export "test") (type $t1) (param $p0 i32) (param $p1 i32)
block $B0
block $B1
block $B2
get_global $g25
i32.const 1
i32.sub
br_table $B1 $B0 $B2
end
unreachable
end
i32.const 0
set_local $p1
end
get_local $p0
get_local $p1
call $main/test)
(func $~setargc (export "_setargc") (type $t2) (param $p0 i32)
get_local $p0
set_global $g25)
オプションの引数を持つ関数が省略された引数で呼び出された場合、トランポリンが生成されます。 基本的に、オプションの引数の初期化子を適切なコンテキストでラップし、それらを使用して元の関数を呼び出します。 すべての引数が指定されたオプションの引数を使用して関数を常に呼び出す場合、トランポリンを生成する必要はありません。
これは、そこでいくつかの最適化を実行できることを思い出させます。 1 つは、省略された引数のデフォルト値がとにかくゼロである場合であり、もう 1 つは、デフォルト値が呼び出しにインライン化できる定数である場合です。
最近返信を受け取っていないため、現時点ではこの問題をクローズしているため、上記で実装された最適化で十分に対処できると思います。 必要に応じて再開してください。
最も参考になるコメント
これは、そこでいくつかの最適化を実行できることを思い出させます。 1 つは、省略された引数のデフォルト値がとにかくゼロである場合であり、もう 1 つは、デフォルト値が呼び出しにインライン化できる定数である場合です。