MCPcopy Create free account
hub / github.com/emscripten-core/emscripten / create_sending

Function create_sending

tools/emscripten.py:854–915  ·  view source on GitHub ↗
(metadata, library_symbols)

Source from the content-addressed store, hash-verified

852
853
854def 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}')

Callers 1

create_moduleFunction · 0.85

Calls 5

asmjs_mangleFunction · 0.90
appendMethod · 0.80
setFunction · 0.50
joinMethod · 0.45

Tested by

no test coverage detected