LingDong-/wax

WAT globals interpreted as locals

stagas opened this issue · 3 comments

In the example raycast.wax using WebAssembly output, the variable INFINITY is imported from math:

(global $INFINITY f32 (f32.const 340282346638528859811704183484516925440))

but later is called as local:

(call $set__ray__tmax (local.get $r) (local.get $INFINITY))

which results in a parse error using wabt afterwards to convert to binary.

Hi, thanks for reporting this!

I did some testing and it appears that, when using the waxc binary compiled locally, global.get is correctly produced. When using the online waxc.netlify.app that uses a JavaScript file generated by emscripten from the C source, the incorrect local.get is produced. Might be something funny going on in the emscripten process... Will look into ways of fixing this!

Hi @stagas , I got around to fix this bug in 4874ca0

Turns out somewhere I forgot to set the parent of the root node to NULL, causing the WAT generator to think that it's not yet at the topmost level, hence producing local.get instead of global.get. I got lucky with the gcc compiled binary, which happens to start with 0s in the field, but not so much with the emscripten output :-P

The site is fixed and producing correct global.get now. Thanks a lot for reporting the bug!

Works like a charm! 🎉 Nice find, thanks :)