Oh, seems that (*fp) is the same as fp in C, so the last example does not make any sense indeed.
regards, -Lu On Tue, Dec 17, 2013 at 1:47 PM, Lu Wang <[email protected]> wrote: > Hello, > > When building vim.js (http://coolwanglu.github.io/vim.js/web/vim.html), > I tried to analyze the output of emscripten, and do some dirty work for > async functions. > > The dirty work is quite simple, just to insert a new arg in the > beginning of the function argument list and call it, In C the function > pointer is forced casted into a pointer to a function with the same number > of (void*) parameters. > > For example: > > // in C > int (*fp) (int a, int b); > > async_call(*fp, 1, 2); > > // in JS > function _async_call (func) { > var new_args = argument.slice(0); > new_args[0] = FAKE_ARG > FUNCTION_TABLE[func].apply(null, new_args); > } > > > Right now I'm thinking about enable ASM_JS to improve the performance, > As stated in the wiki, when ASM_JS is enabled, functions are stored into > different tables for optimizations, so given only a fuction pointer (sent > from C), JS code can no longer find the correct function since it does not > know the type of the function. > > Is there an easy way to achieve this without defining functions for each > type of function? Hopefully some information can be passed into js, > something like this: > > // in C > async_call(EM_GET_FUNC_TABLE(fp), fp, 1,2) > > // in JS > > function _async_call(tbl, func) { > tbl[func].apply ... > } > > Maybe a more `natural` way is to deref it in C, such that js would get > the raw function, but it might not make as much as sense as I had thought > of: > > // in C > async_call(*fp, 1, 2); > // in JS > _async_call(func) { > func.apply... // no deref > } > > > Could any one please advise? > > Thanks! > > > > regards, > - Lu > -- 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]. For more options, visit https://groups.google.com/groups/opt_out.
