(metadata, library_symbols)
| 852 | |
| 853 | |
| 854 | def create_sending(metadata, library_symbols): |
| 855 | # Map of wasm imports to mangled/external/JS names |
| 856 | send_items_map = {name: name for name in metadata.invoke_funcs} |
| 857 | |
| 858 | for name in metadata.imports: |
| 859 | if name in metadata.em_js_funcs: |
| 860 | # EM_JS functions are exported directly at the declaration site in |
| 861 | # WASM_ESM_INTEGRATION mode. |
| 862 | if not settings.WASM_ESM_INTEGRATION: |
| 863 | send_items_map[name] = name |
| 864 | else: |
| 865 | send_items_map[name] = asmjs_mangle(name) |
| 866 | |
| 867 | add_standard_wasm_imports(send_items_map) |
| 868 | |
| 869 | if settings.MAIN_MODULE: |
| 870 | # When including dynamic linking support, also add any JS library functions |
| 871 | # that are part of EXPORTED_FUNCTIONS (or in the case of MAIN_MODULE=1 add |
| 872 | # all JS library functions). This allows `dlsym(RTLD_DEFAULT)` to lookup JS |
| 873 | # library functions, since `wasmImports` acts as the global symbol table. |
| 874 | wasm_exports = set(metadata.function_exports) |
| 875 | library_symbols = set(library_symbols) |
| 876 | if settings.MAIN_MODULE == 1: |
| 877 | for f in library_symbols: |
| 878 | if shared.is_c_symbol(f): |
| 879 | demangled = shared.demangle_c_symbol_name(f) |
| 880 | if demangled in wasm_exports: |
| 881 | continue |
| 882 | send_items_map[demangled] = f |
| 883 | else: |
| 884 | for f in settings.EXPORTED_FUNCTIONS + settings.SIDE_MODULE_IMPORTS: |
| 885 | if f in library_symbols and shared.is_c_symbol(f): |
| 886 | demangled = shared.demangle_c_symbol_name(f) |
| 887 | if demangled in wasm_exports: |
| 888 | continue |
| 889 | send_items_map[demangled] = f |
| 890 | |
| 891 | sorted_items = sorted(send_items_map.items()) |
| 892 | |
| 893 | if settings.WASM_ESM_INTEGRATION: |
| 894 | elems = [] |
| 895 | for k, v in sorted_items: |
| 896 | elems.append(f'{v} as {k}') |
| 897 | elems = ',\n '.join(elems) |
| 898 | exports = '// Export JS functions to the wasm module with demangled names.\n' |
| 899 | exports += f"export {{\n {elems}\n}};" |
| 900 | return exports |
| 901 | |
| 902 | prefix = '' |
| 903 | if settings.MAYBE_CLOSURE_COMPILER: |
| 904 | # This prevents closure compiler from minifying the field names in this |
| 905 | # object. |
| 906 | prefix = '/** @export */\n ' |
| 907 | |
| 908 | elems = [] |
| 909 | for k, v in sorted_items: |
| 910 | if k == v: |
| 911 | elems.append(f'{prefix}{k}') |
no test coverage detected