diff options
-rw-r--r-- | src/jsifier.js | 3 | ||||
-rw-r--r-- | tests/test_core.py | 40 |
2 files changed, 42 insertions, 1 deletions
diff --git a/src/jsifier.js b/src/jsifier.js index 726a5eda..f4819584 100644 --- a/src/jsifier.js +++ b/src/jsifier.js @@ -1844,7 +1844,7 @@ function JSify(data, functionsOnly) { // rest of the output that we started to print out earlier (see comment on the // "Final shape that will be created"). if (PRECISE_I64_MATH && Types.preciseI64MathUsed) { - if (!INCLUDE_FULL_LIBRARY) { + if (!INCLUDE_FULL_LIBRARY && !SIDE_MODULE) { // first row are utilities called from generated code, second are needed from fastLong ['i64Add', 'i64Subtract', 'bitshift64Shl', 'bitshift64Lshr', 'bitshift64Ashr', 'llvm_ctlz_i32', 'llvm_cttz_i32'].forEach(function(func) { @@ -1866,6 +1866,7 @@ function JSify(data, functionsOnly) { } }); } + // these may be duplicated in side modules and the main module without issue print(read('fastLong.js')); print('// EMSCRIPTEN_END_FUNCS\n'); print(read('long.js')); diff --git a/tests/test_core.py b/tests/test_core.py index 99c69459..97cba68f 100644 --- a/tests/test_core.py +++ b/tests/test_core.py @@ -2809,6 +2809,46 @@ def process(filename): self.do_run(src, 'Constructing main object.\nConstructing lib object.\n', post_build=self.dlfcn_post_build) + def test_dlfcn_i64(self): + if not self.can_dlfcn(): return + if not Settings.ASM_JS: return self.skip('TODO') + + self.prep_dlfcn_lib() + Settings.EXPORTED_FUNCTIONS = ['_foo'] + lib_src = ''' + int foo(int x) { + return (long long)x / (long long)1234; + } + ''' + dirname = self.get_dir() + filename = os.path.join(dirname, 'liblib.c') + self.build(lib_src, dirname, filename) + shutil.move(filename + '.o.js', os.path.join(dirname, 'liblib.so')) + + self.prep_dlfcn_main() + Settings.EXPORTED_FUNCTIONS = ['_main'] + src = r''' + #include <stdio.h> + #include <stdlib.h> + #include <dlfcn.h> + + typedef int (*intfunc)(int); + + void *p; + + int main() { + p = malloc(1024); + void *lib_handle = dlopen("liblib.so", 0); + printf("load %p\n", lib_handle); + intfunc x = (intfunc)dlsym(lib_handle, "foo"); + printf("foo func %p\n", x); + if (p == 0) return 1; + printf("|%d|\n", x(81234567)); + return 0; + } + ''' + self.do_run(src, '|65830|', post_build=self.dlfcn_post_build) + def test_dlfcn_qsort(self): if not self.can_dlfcn(): return |