Skip to content

Commit 91f2012

Browse files
authored
Use identifiers rather than string keys in wasmImports object. (#19808)
We should get a lot more code savings from this change once we switch from using the underscore name mangling on the JS side. Once we do that most of the imports will use the abbreviated the object syntax of just `foo,` rather then `foo = _foo,`
1 parent 6c6c7c3 commit 91f2012

13 files changed

+56
-52
lines changed

emscripten.py

+6-2
Original file line numberDiff line numberDiff line change
@@ -719,8 +719,12 @@ def create_sending(metadata, library_symbols):
719719
continue
720720
send_items_map[demangled] = f
721721

722-
sorted_keys = sorted(send_items_map.keys())
723-
return '{\n ' + ',\n '.join('"' + k + '": ' + send_items_map[k] for k in sorted_keys) + '\n}'
722+
sorted_items = sorted(send_items_map.items())
723+
prefix = ''
724+
if settings.USE_CLOSURE_COMPILER:
725+
# This prevents closure compiler from minifying the field names in this object.
726+
prefix = '/** @export */\n '
727+
return '{\n ' + ',\n '.join(f'{prefix}{k}: {v}' for k, v in sorted_items) + '\n}'
724728

725729

726730
def make_export_wrappers(exports, delay_assignment):

test/optimizer/applyDCEGraphRemovals-output.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
var name;
22

33
var wasmImports = {
4-
"save1": 1,
5-
"save2": 2
4+
save1: 1,
5+
save2: 2
66
};
77

88
var expD1 = Module["expD1"] = asm["expD1"];

test/optimizer/applyDCEGraphRemovals.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
var name;
2-
var wasmImports = { 'save1': 1, 'number': 33, 'name': name, 'func': function() {}, 'save2': 2 };
2+
var wasmImports = { save1: 1, number: 33, name: name, func: function() {}, save2: 2 };
33

44
// exports gotten directly
55
var expD1 = Module['expD1'] = asm['expD1'];

test/optimizer/applyImportAndExportNameChanges-output.js

+11-11
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
var name;
22

33
var wasmImports = {
4-
"a": 1,
5-
"A": 33,
6-
"b": ___syscall6,
7-
"__setErrNo": ___setErrNo,
8-
"memset": _memset,
9-
"sbrk": _sbrk,
10-
"memcpy": _memcpy,
11-
"emscripten_memcpy_big": _emscripten_memcpy_big,
12-
"c": ___syscall54,
13-
"d": ___syscall140,
14-
"q": ___syscall146
4+
a: 1,
5+
A: 33,
6+
b: ___syscall6,
7+
__setErrNo: ___setErrNo,
8+
memset: _memset,
9+
sbrk: _sbrk,
10+
memcpy: _memcpy,
11+
emscripten_memcpy_big: _emscripten_memcpy_big,
12+
c: ___syscall54,
13+
d: ___syscall140,
14+
q: ___syscall146
1515
};
1616

1717
var expD1 = Module["expD1"] = asm["c"];

test/optimizer/applyImportAndExportNameChanges.js

+11-11
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
var name;
22
var wasmImports = {
3-
'save1': 1,
4-
'number': 33,
5-
"__syscall6": ___syscall6,
6-
"__setErrNo": ___setErrNo,
7-
"memset": _memset,
8-
"sbrk": _sbrk,
9-
"memcpy": _memcpy,
10-
"emscripten_memcpy_big": _emscripten_memcpy_big,
11-
"__syscall54": ___syscall54,
12-
"__syscall140": ___syscall140,
13-
"__syscall146": ___syscall146
3+
save1: 1,
4+
number: 33,
5+
__syscall6: ___syscall6,
6+
__setErrNo: ___setErrNo,
7+
memset: _memset,
8+
sbrk: _sbrk,
9+
memcpy: _memcpy,
10+
emscripten_memcpy_big: _emscripten_memcpy_big,
11+
__syscall54: ___syscall54,
12+
__syscall140: ___syscall140,
13+
__syscall146: ___syscall146
1414
};
1515

1616
// exports

test/optimizer/applyImportAndExportNameChanges2-output.js

+8-8
Original file line numberDiff line numberDiff line change
@@ -213,14 +213,14 @@ if (ENVIRONMENT_IS_NODE) {
213213
}
214214

215215
var wasmImports = {
216-
"b": abort,
217-
"h": ___syscall140,
218-
"a": ___syscall146,
219-
"g": ___syscall54,
220-
"f": ___syscall6,
221-
"e": _emscripten_get_now,
222-
"d": _emscripten_memcpy_big,
223-
"c": _emscripten_random
216+
b: abort,
217+
h: ___syscall140,
218+
a: ___syscall146,
219+
g: ___syscall54,
220+
f: ___syscall6,
221+
e: _emscripten_get_now,
222+
d: _emscripten_memcpy_big,
223+
c: _emscripten_random
224224
};
225225

226226
function run() {

test/optimizer/applyImportAndExportNameChanges2.js

+8-8
Original file line numberDiff line numberDiff line change
@@ -204,14 +204,14 @@ if (ENVIRONMENT_IS_NODE) {
204204
_emscripten_get_now = Date.now
205205
}
206206
var wasmImports = {
207-
"abort": abort,
208-
"___syscall140": ___syscall140,
209-
"___syscall146": ___syscall146,
210-
"___syscall54": ___syscall54,
211-
"___syscall6": ___syscall6,
212-
"_emscripten_get_now": _emscripten_get_now,
213-
"_emscripten_memcpy_big": _emscripten_memcpy_big,
214-
"_emscripten_random": _emscripten_random
207+
abort: abort,
208+
___syscall140: ___syscall140,
209+
___syscall146: ___syscall146,
210+
___syscall54: ___syscall54,
211+
___syscall6: ___syscall6,
212+
_emscripten_get_now: _emscripten_get_now,
213+
_emscripten_memcpy_big: _emscripten_memcpy_big,
214+
_emscripten_random: _emscripten_random
215215
};
216216

217217
function run() {

test/optimizer/minimal-runtime-applyDCEGraphRemovals-output.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
var name;
22

33
var wasmImports = {
4-
"save1": 1,
5-
"save2": 2
4+
save1: 1,
5+
save2: 2
66
};
77

88
WebAssembly.instantiate(Module["wasm"], imports).then(output => {

test/optimizer/minimal-runtime-applyDCEGraphRemovals.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
var name;
2-
var wasmImports = { 'save1': 1, 'number': 33, 'name': name, 'func': function() {}, 'save2': 2 };
2+
var wasmImports = { save1: 1, number: 33, name: name, func: function() {}, save2: 2 };
33

44
// exports gotten directly in the minimal runtime style
55
WebAssembly.instantiate(Module["wasm"], imports).then((output) => {
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
59025
1+
59021
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
32448
1+
32444
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
57991
1+
57987

tools/acorn-optimizer.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -513,8 +513,8 @@ function applyImportAndExportNameChanges(ast) {
513513
if (isWasmImportsAssign(node)) {
514514
const assignedObject = getWasmImportsValue(node);
515515
assignedObject.properties.forEach((item) => {
516-
if (mapping[item.key.value]) {
517-
setLiteralValue(item.key, mapping[item.key.value]);
516+
if (mapping[item.key.name]) {
517+
item.key.name = mapping[item.key.name];
518518
}
519519
});
520520
} else if (node.type === 'AssignmentExpression') {
@@ -982,7 +982,7 @@ function applyDCEGraphRemovals(ast) {
982982
if (isWasmImportsAssign(node)) {
983983
const assignedObject = getWasmImportsValue(node);
984984
assignedObject.properties = assignedObject.properties.filter((item) => {
985-
const name = item.key.value;
985+
const name = item.key.name;
986986
const value = item.value;
987987
const full = 'emcc$import$' + name;
988988
return !(unused.has(full) && !hasSideEffects(value));

0 commit comments

Comments
 (0)