Dear all,<br><div><div><br></div>>AFAICS the manipulation with 'foo' makes no sense in Javascript.<br>I would just remove the test (which seem to fail now) and the<br>'else' branch.<br><br>Thanks for your suggestion. I removed this and got stuck in another place:<br><br>d:\ecl-em\msvc\bclink>node a.out.js<br>Calling stub instead of signal()<br>Calling stub instead of signal()<br>Calling stub instead of signal()<br>Calling stub instead of signal()<br>Calling stub instead of signal()<br>Calling stub instead of signal()<br>Calling stub instead of signal()<br>Invalid function pointer called with signature 'iii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefine<br>d behavior which can cause this)<br>Build with ASSERTIONS=2 for more info.<br>26<br>26<br><br>d:\ecl-em\msvc\bclink\a.out.js:84<br>      throw ex;<br>            ^<br>abort() at Error<br>    at jsStackTrace (d:\ecl-em\msvc\bclink\a.out.js:987:13)<br>    at stackTrace (d:\ecl-em\msvc\bclink\a.out.js:1004:22)<br>    at abort (d:\ecl-em\msvc\bclink\a.out.js:227042:25)<br>    at nullFunc_iii (d:\ecl-em\msvc\bclink\a.out.js:7092:467)<br>    at Array.b26 (d:\ecl-em\msvc\bclink\a.out.js:223280:46)<br>    at Array._test_compare [as 1248] (d:\ecl-em\msvc\bclink\a.out.js:201030:39)<br>    at _do_assoc (d:\ecl-em\msvc\bclink\a.out.js:175171:41)<br>    at _cl_assoc (d:\ecl-em\msvc\bclink\a.out.js:64909:9)<br>    at _ecl_logical_hostname_p (d:\ecl-em\msvc\bclink\a.out.js:144716:9)<br>    at _ecl_parse_namestring (d:\ecl-em\msvc\bclink\a.out.js:144801:11)<br><span id="_editor_bookmark_start_48" style="display: none; line-height: 0px;">‍</span><br>I tried to build with ASSERSION=2 but the program (a.out.js) becomes 33MB and takes forever to run, so I added some printf calls and found that it is failling here in do_assoc():<br><br>            if (TEST(t, ECL_CONS_CAR(pair)))<br>                return pair;<br><br><span id="_editor_bookmark_start_65" style="display: none; line-height: 0px;">‍</span>where TEST is defined as:<br>#define TEST(t,k) ((t)->test_c_function)((t),(k))<br><span id="_editor_bookmark_start_67" style="display: none; line-height: 0px;">‍</span><br>here the variable t (which is a struct cl_test<span id="_editor_bookmark_start_68" style="display: none; line-height: 0px;">‍</span>*) was passed from ecl_logical_hostname_p (pathname.c, produced by dpp from pathname.d)<br><br>bool ecl_logical_hostname_p(cl_object host)<br>{<br>    if (!ecl_stringp(host))<br>        return FALSE;<br>    return !Null(cl_assoc(4, host, cl_core.pathname_translations, ECL_SYM(":TEST",1316), ECL_SYM("STRING-EQUAL",808)));<br>}<br><span id="_editor_bookmark_start_338" style="display: none; line-height: 0px;">‍</span><br>It looks like the c code of "STRING_EQUAL" was stored in a big table called cl_symbols, as ECL_SYM was defined this way(in external.h):<br>#define ECL_SYM(name,code) ((cl_object)(cl_symbols+(code)))<br><span id="_editor_bookmark_start_339" style="display: none; line-height: 0px;">‍</span><br>In emscrpten, casting function pointers can lead to issues (http://kripken.github.io/emscripten-site/docs/porting/guidelines/function_pointer_issues.html<span id="_editor_bookmark_start_352" style="display: none; line-height: 0px;">‍</span>), which is similar in this case.<br><br>So could anyone explains how cl_symbols work? I looked at symbol_list.h but it's not clear to me whether there can be issues described above (function pointer casting).<br><br>- Rujia<br><br></div>