Binaryen seems to sometimes clear field names which makes code harder to read afterwards.
Take for example after.tar.gz
% tar xvzf after.tar.gz
after.O0.wasm
% wasm-opt --enable-gc --enable-reference-types --enable-multivalue --enable-exception-handling --enable-nontrapping-float-to-int --enable-sign-ext --enable-bulk-memory --enable-threads '--no-inline=*<noInline>*' --closed-world --traps-never-happen --type-unfinalizing -Os --type-ssa --gufa -Os --type-merging -Os --type-finalizing --minimize-rec-groups -g after.O0.wasm -o after.O2.wasm
% wami --full-wat after.O2.wasm -o after.O2.wat
% wami --full-wat after.O0.wasm -o after.O0.wat
We see e.g. that after.O0.wat (the unoptimized version) has
(type $#ClosureBase (;67;) (sub $_Closure (struct
(field $field0 i32)
(field $field1 (mut i32))
(field $context (ref struct))
(field $vtable (ref $#VtableBase))
(field $functionType (ref $_FunctionType)))))
(type $#Closure-0-0 (;73;) (sub $#ClosureBase (struct
(field $field0 i32)
(field $field1 (mut i32))
(field $context (ref struct))
(field $vtable (ref $#Vtable-0-0))
(field $functionType (ref $_FunctionType)))))
(type $#Closure-0-1 (;119;) (sub $#Closure-0-0 (struct
(field $field0 i32)
(field $field1 (mut i32))
(field $context (ref struct))
(field $vtable (ref $#Vtable-0-1))
(field $functionType (ref $_FunctionType)))))
(type $#Closure-0-2 (;125;) (sub final $#Closure-0-1 (struct
(field $field0 i32)
(field $field1 (mut i32))
(field $context (ref struct))
(field $vtable (ref $#Vtable-0-2))
(field $functionType (ref $_FunctionType)))))
(type $#Closure-1-0 (;330;) (sub $#ClosureBase (struct
(field $field0 i32)
(field $field1 (mut i32))
(field $context (ref struct))
(field $vtable (ref $#Vtable-1-0))
(field $functionType (ref $_FunctionType)))))
(type $#Closure-1-1 (;334;) (sub final $#Closure-1-0 (struct
(field $field0 i32)
(field $field1 (mut i32))
(field $context (ref struct))
(field $vtable (ref $#Vtable-1-1))
(field $functionType (ref $_FunctionType)))))
We see e.g. that after.O2.wat (the optimized version) has
(type $#ClosureBase (;24;) (sub $Object (struct
(field $field0 i32)
(field $field1 (mut i32))
(field $field2 (ref $_FunctionType)))))
(type $#Closure-0-1 (;25;) (sub final $#ClosureBase (struct
(field $field0 i32)
(field $field1 (mut i32))
(field $field2 (ref $_FunctionType))
(field $context (ref struct))
(field $field4 (ref $#Vtable-0-1)))))
(type $#Closure-1-1 (;31;) (sub final $#ClosureBase (struct
(field $field0 i32)
(field $field1 (mut i32))
(field $field2 (ref $_FunctionType))
(field $context (ref $<context file:///...>)))))
=> Instead of (field $field2 (ref $_FunctionType)) we should have (field $functionType (ref $_FunctionType)) (i.e. with field name functionType)
Binaryen seems to sometimes clear field names which makes code harder to read afterwards.
Take for example after.tar.gz
We see e.g. that
after.O0.wat(the unoptimized version) hasWe see e.g. that
after.O2.wat(the optimized version) has=> Instead of
(field $field2 (ref $_FunctionType))we should have(field $functionType (ref $_FunctionType))(i.e. with field namefunctionType)