On Wed, Nov 26, 2025 at 3:23 AM John Dallman <[email protected]> wrote:

> I have a lot of code that stores pointers to functions as void* and then
> casts them back to the "correct" type. This is part of a LISP interpreter
> that is embedded in my product's test harness, and used to write test
> scripts.
>
> This works in conventional C, but I'm having trouble with it in
> WebAssembly. I've found that functions with and without argument lists
> don't match, which is quite reasonable, but I'm having trouble getting a
> fix to work.
>
> Just how identical do the function signatures have to be?
>
>    - Character-for-character identical?
>    - Identical types with different names are OK?
>    - Static and non-static functions with otherwise identical signatures
>    are OK?
>    - Something else?
>
>
Function signatures need to be an exact match at the Wasm level.   At the
wasm level signatures are made of only the core i32, i64, f32, f64 types,
so its likely the many different C signatures have the same Wasm signature.

As long as you are casting the void* pointer back to the correct function
type before calling them you should have no issues.

If you are trying to call a function with too many, or too few arguments
that does not work.

We do have a setting that can help if you really need to do
this: EMULATE_FUNCTION_POINTER_CASTS.  See
https://emscripten.org/docs/tools_reference/settings_reference.html#emulate-function-pointer-casts
for more info on this.  This setting is used by some projects (notably
Python and Glib) which depend on being able to call via mismatched
signatures.   You should be aware that this setting does come with a
runtime cost though.

cheer,
sam

-- 
You received this message because you are subscribed to the Google Groups 
"emscripten-discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion visit 
https://groups.google.com/d/msgid/emscripten-discuss/CAL_va28ocNLCKKvbomaW2Ci5Asf70uyqis0vKADYBW1XDe0x1A%40mail.gmail.com.

Reply via email to