(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)
El trampolín se genera si se llama a una función con argumentos opcionales con argumentos omitidos. Básicamente, envuelve los inicializadores de argumentos opcionales en un contexto adecuado y llama a la función original con ellos. Si siempre llama a funciones con argumentos opcionales con todos los argumentos proporcionados, no se deben generar trampolines.
Esto me recuerda que se podrían realizar algunas optimizaciones allí. Una es que si los valores predeterminados de los argumentos omitidos son cero de todos modos, otra es si los valores predeterminados son constantes que pueden insertarse en la llamada.
Cerrando este problema por ahora ya que no ha recibido ninguna respuesta recientemente, por lo que supongo que las optimizaciones implementadas anteriormente lo abordan lo suficiente. ¡No dudes en volver a abrir si es necesario!
Comentario más útil
Esto me recuerda que se podrían realizar algunas optimizaciones allí. Una es que si los valores predeterminados de los argumentos omitidos son cero de todos modos, otra es si los valores predeterminados son constantes que pueden insertarse en la llamada.