Skip to content

Commit 9907136

Browse files
committed
Intiial usage of arrow function (=>) in JS library code
Now that arrow functions and `let`/`const` are permitted in emscripten JS library code we can take advantage of this to reduce the size of the JS code that we output by default. Followup to #15764 See: #11984
1 parent 8b2b075 commit 9907136

18 files changed

+57
-64
lines changed

emcc.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3340,7 +3340,7 @@ def modularize():
33403340
return_value = '{}'
33413341

33423342
src = '''
3343-
function(%(EXPORT_NAME)s) {
3343+
(%(EXPORT_NAME)s) => {
33443344
%(EXPORT_NAME)s = %(EXPORT_NAME)s || {};
33453345
33463346
%(src)s
@@ -3370,7 +3370,7 @@ def modularize():
33703370
if shared.target_environment_may_be('node'):
33713371
script_url_node = "if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename;"
33723372
src = '''
3373-
var %(EXPORT_NAME)s = (function() {
3373+
var %(EXPORT_NAME)s = (() => {
33743374
var _scriptDir = %(script_url)s;
33753375
%(script_url_node)s
33763376
return (%(src)s);

src/library.js

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -325,14 +325,12 @@ LibraryManager.library = {
325325
var cp = require('child_process');
326326
var ret = cp.spawnSync(cmdstr, [], {shell:true, stdio:'inherit'});
327327

328-
var _W_EXITCODE = function(ret, sig) {
329-
return ((ret) << 8 | (sig));
330-
}
328+
var _W_EXITCODE = (ret, sig) => ((ret) << 8 | (sig));
331329

332330
// this really only can happen if process is killed by signal
333331
if (ret.status === null) {
334332
// sadly node doesn't expose such function
335-
var signalToNumber = function(sig) {
333+
var signalToNumber = (sig) => {
336334
// implement only the most common ones, and fallback to SIGINT
337335
switch (sig) {
338336
case 'SIGHUP': return 1;
@@ -1177,7 +1175,7 @@ LibraryManager.library = {
11771175
var date = initDate();
11781176
var value;
11791177

1180-
var getMatch = function(symbol) {
1178+
var getMatch = (symbol) => {
11811179
var pos = capture.indexOf(symbol);
11821180
// check if symbol appears in regexp
11831181
if (pos >= 0) {
@@ -2530,7 +2528,7 @@ LibraryManager.library = {
25302528
emscripten_get_now: ';' +
25312529
#if ENVIRONMENT_MAY_BE_NODE
25322530
"if (ENVIRONMENT_IS_NODE) {\n" +
2533-
" _emscripten_get_now = function() {\n" +
2531+
" _emscripten_get_now = () => {\n" +
25342532
" var t = process['hrtime']();\n" +
25352533
" return t[0] * 1e3 + t[1] / 1e6;\n" +
25362534
" };\n" +
@@ -2539,7 +2537,7 @@ LibraryManager.library = {
25392537
#if USE_PTHREADS
25402538
// Pthreads need their clocks synchronized to the execution of the main thread, so give them a special form of the function.
25412539
"if (ENVIRONMENT_IS_PTHREAD) {\n" +
2542-
" _emscripten_get_now = function() { return performance.now() - Module['__performance_now_clock_drift']; };\n" +
2540+
" _emscripten_get_now = () => performance.now() - Module['__performance_now_clock_drift'];\n" +
25432541
"} else " +
25442542
#endif
25452543
#if ENVIRONMENT_MAY_BE_SHELL
@@ -2549,14 +2547,14 @@ LibraryManager.library = {
25492547
#endif
25502548
#if MIN_IE_VERSION <= 9 || MIN_FIREFOX_VERSION <= 14 || MIN_CHROME_VERSION <= 23 || MIN_SAFARI_VERSION <= 80400 // https://caniuse.com/#feat=high-resolution-time
25512549
"if (typeof performance !== 'undefined' && performance.now) {\n" +
2552-
" _emscripten_get_now = function() { return performance.now(); }\n" +
2550+
" _emscripten_get_now = () => performance.now();\n" +
25532551
"} else {\n" +
25542552
" _emscripten_get_now = Date.now;\n" +
25552553
"}",
25562554
#else
25572555
// Modern environment where performance.now() is supported:
25582556
// N.B. a shorter form "_emscripten_get_now = return performance.now;" is unfortunately not allowed even in current browsers (e.g. FF Nightly 75).
2559-
"_emscripten_get_now = function() { return performance.now(); }\n",
2557+
"_emscripten_get_now = () => performance.now();\n",
25602558
#endif
25612559

25622560
emscripten_get_now_res: function() { // return resolution of get_now, in nanoseconds

src/library_browser.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ var LibraryBrowser = {
150150
assert(typeof url == 'string', 'createObjectURL must return a url as a string');
151151
#endif
152152
var img = new Image();
153-
img.onload = function img_onload() {
153+
img.onload = () => {
154154
assert(img.complete, 'Image ' + name + ' could not be decoded');
155155
var canvas = document.createElement('canvas');
156156
canvas.width = img.width;
@@ -161,7 +161,7 @@ var LibraryBrowser = {
161161
Browser.URLObject.revokeObjectURL(url);
162162
if (onload) onload(byteArray);
163163
};
164-
img.onerror = function img_onerror(event) {
164+
img.onerror = (event) => {
165165
out('Image ' + url + ' could not be decoded');
166166
if (onerror) onerror();
167167
};

src/library_webgl.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -675,7 +675,7 @@ var LibraryGL = {
675675
#endif
676676

677677
#if GL_DISABLE_HALF_FLOAT_EXTENSION_IF_BROKEN
678-
function disableHalfFloatExtensionIfBroken(ctx) {
678+
const disableHalfFloatExtensionIfBroken = (ctx) => {
679679
var t = ctx.createTexture();
680680
ctx.bindTexture(0xDE1/*GL_TEXTURE_2D*/, t);
681681
for (var i = 0; i < 8 && ctx.getError(); ++i) /*no-op*/;

src/preamble_minimal.js

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,8 @@ var tempI64;
2929
#endif
3030

3131
var tempRet0 = 0;
32-
var setTempRet0 = function(value) {
33-
tempRet0 = value;
34-
}
35-
var getTempRet0 = function() {
36-
return tempRet0;
37-
}
32+
var setTempRet0 = (value) => { tempRet0 = value };
33+
var getTempRet0 = () => tempRet0;
3834

3935
function alignUp(x, multiple) {
4036
if (x % multiple > 0) {

src/proxyClient.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ worker.onmessage = function worker_onmessage(event) {
205205
case 'Image': {
206206
assert(data.method === 'src');
207207
var img = new Image();
208-
img.onload = function() {
208+
img.onload = () => {
209209
assert(img.complete);
210210
var canvas = document.createElement('canvas');
211211
canvas.width = img.width;
@@ -215,7 +215,7 @@ worker.onmessage = function worker_onmessage(event) {
215215
var imageData = ctx.getImageData(0, 0, img.width, img.height);
216216
worker.postMessage({ target: 'Image', method: 'onload', id: data.id, width: img.width, height: img.height, data: imageData.data, preMain: true });
217217
};
218-
img.onerror = function() {
218+
img.onerror = () => {
219219
worker.postMessage({ target: 'Image', method: 'onerror', id: data.id, preMain: true });
220220
};
221221
img.src = data.src;

src/runtime_strings.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
// character.
1818
function TextDecoderWrapper(encoding) {
1919
var textDecoder = new TextDecoder(encoding);
20-
this.decode = function(data) {
20+
this.decode = (data) => {
2121
#if ASSERTIONS
2222
assert(data instanceof Uint8Array);
2323
#endif

src/shell.js

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,7 @@ var moduleOverrides = Object.assign({}, Module);
6868

6969
var arguments_ = [];
7070
var thisProgram = './this.program';
71-
var quit_ = function(status, toThrow) {
72-
throw toThrow;
73-
};
71+
var quit_ = (status, toThrow) => { throw toThrow; };
7472

7573
// Determine the runtime environment we are in. You can customize this by
7674
// setting the ENVIRONMENT setting at compile time (see settings.js).
@@ -157,7 +155,7 @@ var read_,
157155
// this may no longer be needed under node.
158156
function logExceptionOnExit(e) {
159157
if (e instanceof ExitStatus) return;
160-
var toLog = e;
158+
let toLog = e;
161159
#if ASSERTIONS
162160
if (e && typeof e === 'object' && e.stack) {
163161
toLog = [e, e.stack];
@@ -218,7 +216,7 @@ if (ENVIRONMENT_IS_NODE) {
218216
process['on']('unhandledRejection', function(reason) { throw reason; });
219217
#endif
220218

221-
quit_ = function(status, toThrow) {
219+
quit_ = (status, toThrow) => {
222220
if (keepRuntimeAlive()) {
223221
process['exitCode'] = status;
224222
throw toThrow;
@@ -230,7 +228,7 @@ if (ENVIRONMENT_IS_NODE) {
230228
Module['inspect'] = function () { return '[Emscripten Module object]'; };
231229

232230
#if USE_PTHREADS
233-
var nodeWorkerThreads;
231+
let nodeWorkerThreads;
234232
try {
235233
nodeWorkerThreads = require('worker_threads');
236234
} catch (e) {
@@ -262,7 +260,7 @@ if (ENVIRONMENT_IS_SHELL) {
262260
if (typeof read != 'undefined') {
263261
read_ = function shell_read(f) {
264262
#if SUPPORT_BASE64_EMBEDDING
265-
var data = tryParseAsDataURI(f);
263+
const data = tryParseAsDataURI(f);
266264
if (data) {
267265
return intArrayToString(data);
268266
}
@@ -272,7 +270,7 @@ if (ENVIRONMENT_IS_SHELL) {
272270
}
273271

274272
readBinary = function readBinary(f) {
275-
var data;
273+
let data;
276274
#if SUPPORT_BASE64_EMBEDDING
277275
data = tryParseAsDataURI(f);
278276
if (data) {
@@ -288,7 +286,7 @@ if (ENVIRONMENT_IS_SHELL) {
288286
};
289287

290288
readAsync = function readAsync(f, onload, onerror) {
291-
setTimeout(function() { onload(readBinary(f)); }, 0);
289+
setTimeout(() => onload(readBinary(f)), 0);
292290
};
293291

294292
if (typeof scriptArgs != 'undefined') {
@@ -298,7 +296,7 @@ if (ENVIRONMENT_IS_SHELL) {
298296
}
299297

300298
if (typeof quit === 'function') {
301-
quit_ = function(status, toThrow) {
299+
quit_ = (status, toThrow) => {
302300
logExceptionOnExit(toThrow);
303301
quit(status);
304302
};
@@ -371,7 +369,7 @@ if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {
371369

372370
}
373371

374-
setWindowTitle = function(title) { document.title = title };
372+
setWindowTitle = (title) => document.title = title;
375373
} else
376374
#endif // ENVIRONMENT_MAY_BE_WEB || ENVIRONMENT_MAY_BE_WORKER
377375
{
@@ -399,8 +397,8 @@ var defaultPrint = console.log.bind(console);
399397
var defaultPrintErr = console.warn.bind(console);
400398
if (ENVIRONMENT_IS_NODE) {
401399
requireNodeFS();
402-
defaultPrint = function(str) { fs.writeSync(1, str + '\n'); };
403-
defaultPrintErr = function(str) { fs.writeSync(2, str + '\n'); };
400+
defaultPrint = (str) => fs.writeSync(1, str + '\n');
401+
defaultPrintErr = (str) => fs.writeSync(2, str + '\n');
404402
}
405403
{{{ makeModuleReceiveWithVar('out', 'print', 'defaultPrint', true) }}}
406404
{{{ makeModuleReceiveWithVar('err', 'printErr', 'defaultPrintErr', true) }}}

src/shell_minimal.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ var Module = {{{ EXPORT_NAME }}};
1515
#if MODULARIZE && EXPORT_READY_PROMISE
1616
// Set up the promise that indicates the Module is initialized
1717
var readyPromiseResolve, readyPromiseReject;
18-
Module['ready'] = new Promise(function(resolve, reject) {
18+
Module['ready'] = new Promise((resolve, reject) => {
1919
readyPromiseResolve = resolve;
2020
readyPromiseReject = reject;
2121
});
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
{
22
"a.html": 569,
33
"a.html.gz": 379,
4-
"a.js": 5000,
5-
"a.js.gz": 2422,
4+
"a.js": 4968,
5+
"a.js.gz": 2418,
66
"a.wasm": 10442,
77
"a.wasm.gz": 6661,
8-
"total": 16011,
9-
"total_gz": 9462
8+
"total": 15979,
9+
"total_gz": 9458
1010
}

0 commit comments

Comments
 (0)