Skip to content

Commit 93479ec

Browse files
nazar-pckripken
authored andcommitted
Google Closure Compiler Java update (#5720)
* Some new externs added to please Closure Compiler, small tweaks to resolve some issues with newer version * Rewrite multiple `f.write()` calls into single call with more readable JavaScript code inside * Google Closure Compiler updated to latest v20171023.0.0 * Fix for multiple duplicated `var ptr` declarations. Fixes to externs (added File API externs). * Suppress a lot of warnings that naturally occur in asm.js code * Closure Compiler should run without errors now (warnings are present, but don't cause everything to fail) * Fix JS optimizer to properly work with added suppression comment (resulted in corrupted JS build). More externs fixes. * WebIDL fixes for modern Closure Compiler * Removed externs already included in latest Closure Compiler * Fix for multiple declarations of `ASSERTION` variable. Fix for `EmterpreterAsync` usage appearing in builds without `EmterpreterAsync` definition. Suppress `FUNCTION_TABLE` undefined variable. Fix for `getterReturnType` and `setterArgumentType` used while undefined (probably copy-paste typo, replaced with `rawFieldType`). * Suppress errors about undefined variables
1 parent 7802705 commit 93479ec

19 files changed

+960
-1118
lines changed

emcc.py

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2383,18 +2383,19 @@ def modularize(final):
23832383
src = open(final).read()
23842384
final = final + '.modular.js'
23852385
f = open(final, 'w')
2386-
f.write('var ' + shared.Settings.EXPORT_NAME + ' = function(' + shared.Settings.EXPORT_NAME + ') {\n')
2387-
f.write(' ' + shared.Settings.EXPORT_NAME + ' = ' + shared.Settings.EXPORT_NAME + ' || {};\n')
2388-
f.write(' var Module = ' + shared.Settings.EXPORT_NAME + ';\n') # included code may refer to Module (e.g. from file packager), so alias it
2389-
f.write('\n')
2390-
f.write(src)
2391-
f.write('\n')
2392-
f.write(' return ' + shared.Settings.EXPORT_NAME + ';\n')
2393-
f.write('};\n')
2394-
# Export the function if this is for Node (or similar UMD-style exporting), otherwise it is lost.
2395-
f.write('if (typeof module === "object" && module.exports) {\n')
2396-
f.write(" module['exports'] = " + shared.Settings.EXPORT_NAME + ';\n')
2397-
f.write('};\n')
2386+
f.write('''var %(EXPORT_NAME)s = function(%(EXPORT_NAME)s) {
2387+
%(EXPORT_NAME)s = %(EXPORT_NAME)s || {};
2388+
var Module = %(EXPORT_NAME)s; // included code may refer to Module (e.g. from file packager), so alias it
2389+
2390+
%(src)s
2391+
2392+
return %(EXPORT_NAME)s;
2393+
};
2394+
// Export the function if this is for Node (or similar UMD-style exporting), otherwise it is lost.
2395+
if (typeof module === "object" && module.exports) {
2396+
module['exports'] = %(EXPORT_NAME)s;
2397+
};
2398+
''' % {"EXPORT_NAME": shared.Settings.EXPORT_NAME, "src": src})
23982399
f.close()
23992400
if DEBUG: save_intermediate('modularized', 'js')
24002401
return final

emscripten.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1495,7 +1495,7 @@ def create_asm_start_pre(asm_setup, the_global, sending, metadata, settings):
14951495
module_library = module_get.format(access=access_quote('asmLibraryArg'), val=sending)
14961496

14971497
asm_function_top = ('// EMSCRIPTEN_START_ASM\n'
1498-
'var asm = (function(global, env, buffer) {')
1498+
'var asm = (/** @suppress {uselessCode} */ function(global, env, buffer) {')
14991499

15001500
use_asm = "'almost asm';"
15011501
if settings['ASM_JS'] == 1:

src/arrayUtils.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ function intArrayFromString(stringy, dontAddNull, length) {
1010
}
1111

1212
// Temporarily duplicating function pending Python preprocessor support
13-
var ASSERTIONS;
1413
var intArrayToString = ASSERTIONS ?
1514
function (array) {
1615
var ret = [];

src/closure-externs.js

Lines changed: 190 additions & 109 deletions
Original file line numberDiff line numberDiff line change
@@ -6,31 +6,6 @@
66
* The closure_compiler() method in tools/shared.py refers to this file when calling closure.
77
*/
88

9-
// Closure externs used by library_uuid.js
10-
11-
/**
12-
* @param {Array} typedArray
13-
*/
14-
crypto.getRandomValues = function(typedArray) {};
15-
16-
/**
17-
BEGIN_NODE_INCLUDE
18-
var crypto = require('crypto');
19-
END_NODE_INCLUDE
20-
*/
21-
22-
/**
23-
* @type {Object.<string,*>}
24-
*/
25-
var crypto = {};
26-
27-
/**
28-
* @param {number} size
29-
* @param {function(Error, buffer.Buffer)} callback
30-
*/
31-
crypto.randomBytes = function(size, callback) {};
32-
33-
349
// Closure externs used by library_sockfs.js
3510

3611
/**
@@ -107,93 +82,12 @@ var flags = {};
10782
*/
10883
flags.binary;
10984

110-
111-
/**
112-
* @fileoverview Definitions for W3C's Gamepad specification.
113-
* @see http://www.w3.org/TR/gamepad/
114-
* @externs
115-
*/
116-
117-
/**
118-
* @typedef {{id: string, index: number, timestamp: number, axes: Array.<number>, buttons: Array.<number>}}
119-
*/
120-
var Gamepad;
121-
122-
/**
123-
* @type {Array.<number>}
124-
*/
125-
Gamepad.buttons;
126-
127-
/**
128-
* @type {Array.<number>}
129-
*/
130-
Gamepad.axes;
131-
132-
/**
133-
* @type {number}
134-
*/
135-
Gamepad.index;
136-
137-
/**
138-
* @type {string}
139-
*/
140-
Gamepad.id;
141-
142-
/**
143-
* @type {number}
144-
*/
145-
Gamepad.timestamp;
146-
147-
/**
148-
* @return {Array.<Gamepad>}
149-
*/
150-
navigator.getGamepads = function() {};
151-
152-
/**
153-
* @return {Array.<Gamepad>}
154-
*/
155-
navigator.webkitGetGamepads = function() {};
156-
157-
/**
158-
* @return {Array.<Gamepad>}
159-
*/
160-
navigator.webkitGamepads = function() {};
161-
162-
/**
163-
* @return {Array.<Gamepad>}
164-
*/
165-
navigator.mozGamepads = function() {};
166-
167-
/**
168-
* @return {Array.<Gamepad>}
169-
*/
170-
navigator.gamepads = function() {};
171-
17285
/**
17386
* Backported from latest closure...
17487
* @see https://developer.mozilla.org/en-US/docs/Web/API/Document/currentScript
17588
*/
17689
Document.prototype.currentScript;
17790

178-
//Atomics library (not yet in latest closure):
179-
//See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Atomics
180-
var Atomics;
181-
Atomics.prototype.NOTEQUAL = -1;
182-
Atomics.prototype.OK = 0;
183-
Atomics.prototype.TIMEDOUT = -2;
184-
Atomics.prototype.add = function(typedArray, index, value) {};
185-
Atomics.prototype.and = function(typedArray, index, value) {};
186-
Atomics.prototype.compareExchange = function(typedArray, index, expectedValue, replacementValue) {};
187-
Atomics.prototype.exchange = function(typedArray, index, value) {};
188-
Atomics.prototype.load = function(typedArray, index) {};
189-
Atomics.prototype.or = function(typedArray, index, value) {};
190-
Atomics.prototype.store = function(typedArray, index, value) {};
191-
Atomics.prototype.sub = function(typedArray, index, value) {};
192-
Atomics.prototype.xor = function(typedArray, index, value) {};
193-
Atomics.prototype.wait = function(typedArray, index, valuei, timeout) {};
194-
Atomics.prototype.wake = function(typedArray, index, value) {};
195-
Atomics.prototype.isLockFree = function(size) {};
196-
19791
/**
19892
* SIMD.js support (not in upstream closure yet).
19993
*/
@@ -918,7 +812,7 @@ var WebAssembly = {};
918812
* @param {!BufferSource} bytes
919813
*/
920814
WebAssembly.Module = function(bytes) {};
921-
/**
815+
/**
922816
* @constructor
923817
* @param {!WebAssembly.Module} moduleObject
924818
* @param {Object=} importObject
@@ -978,7 +872,7 @@ WebAssembly.validate = function(bytes) {};
978872
* @return {!Array<{name:string, kind:string}>}
979873
*/
980874
WebAssembly.Module.exports = function(moduleObject) {};
981-
/**
875+
/**
982876
* @param {!WebAssembly.Module} moduleObject
983877
* @return {!Array<{module:string, name:string, kind:string}>}
984878
*/
@@ -991,7 +885,7 @@ WebAssembly.Module.imports = function(moduleObject) {};
991885
WebAssembly.Module.customSections = function(moduleObject, sectionName) {};
992886
/** @dict */
993887
WebAssembly.Instance.prototype.exports;
994-
/**
888+
/**
995889
* @param {number} delta
996890
* @return {number}
997891
*/
@@ -1019,3 +913,190 @@ WebAssembly.Table.prototype.get = function(index) {};
1019913
* @param {?function(...)} value
1020914
*/
1021915
WebAssembly.Table.prototype.set = function(index, value) {};
916+
917+
// Random SpiderMonkey/V8 externs
918+
919+
/**
920+
* @param {string} filename
921+
* @param {string} type
922+
* @return {string}
923+
*/
924+
var read = function(filename, type) {};
925+
/**
926+
* @param {string} expression
927+
*/
928+
var print = function(expression) {};
929+
/**
930+
* @param {string} expression
931+
*/
932+
var printErr = function(expression) {};
933+
/**
934+
* @param {string} filename
935+
* @return {ArrayBuffer}
936+
*/
937+
var readbuffer = function(filename) {};
938+
/**
939+
* @const
940+
*/
941+
var scriptArgs = [];
942+
/**
943+
* @const
944+
*/
945+
var quit = function() {};
946+
/**
947+
* @return {number}
948+
*/
949+
var dateNow = function() {};
950+
951+
// WebIDL
952+
953+
/**
954+
* @suppress {duplicate}
955+
*/
956+
var WrapperObject;
957+
/**
958+
* @suppress {duplicate}
959+
*/
960+
var getCache;
961+
/**
962+
* @suppress {duplicate}
963+
*/
964+
var wrapPointer;
965+
/**
966+
* @suppress {duplicate}
967+
*/
968+
var castObject;
969+
/**
970+
* @suppress {duplicate}
971+
*/
972+
var destroy;
973+
/**
974+
* @suppress {duplicate}
975+
*/
976+
var compare;
977+
/**
978+
* @suppress {duplicate}
979+
*/
980+
var getPointer;
981+
/**
982+
* @suppress {duplicate}
983+
*/
984+
var getClass;
985+
/**
986+
* @suppress {duplicate}
987+
*/
988+
var ensureCache;
989+
/**
990+
* @suppress {duplicate}
991+
*/
992+
var ensureString;
993+
/**
994+
* @suppress {duplicate}
995+
*/
996+
var ensureInt8;
997+
/**
998+
* @suppress {duplicate}
999+
*/
1000+
var ensureInt16;
1001+
/**
1002+
* @suppress {duplicate}
1003+
*/
1004+
var ensureInt32;
1005+
/**
1006+
* @suppress {duplicate}
1007+
*/
1008+
var ensureFloat32;
1009+
/**
1010+
* @suppress {duplicate}
1011+
*/
1012+
var ensureFloat64;
1013+
/**
1014+
* @suppress {duplicate}
1015+
*/
1016+
var VoidPtr;
1017+
1018+
1019+
// Various Emscripten-specific global variables
1020+
1021+
var tempRet0;
1022+
var tempI64;
1023+
var tempDouble;
1024+
/**
1025+
* @suppress {duplicate}
1026+
*/
1027+
var WasmJS;
1028+
/**
1029+
* @suppress {duplicate}
1030+
*/
1031+
var Module;
1032+
1033+
// Various variables that get into WasmJS of Binaryen, but are not present in final build and never actually used (should probably be fixed in future)
1034+
// These are only needed for `interpret-asm2wasm` and not for `asmjs` or `native-wasm`
1035+
1036+
/**
1037+
* @suppress {duplicate}
1038+
*/
1039+
var Browser;
1040+
/**
1041+
* @suppress {duplicate}
1042+
*/
1043+
var SOCKFS = {};
1044+
/**
1045+
* @suppress {duplicate}
1046+
*/
1047+
var __read_sockaddr = function(addrp, addrlen) {};
1048+
/**
1049+
* @suppress {duplicate}
1050+
*/
1051+
var DNS = {};
1052+
/**
1053+
* @suppress {duplicate}
1054+
*/
1055+
var FS;
1056+
/**
1057+
* @suppress {undefinedVars}
1058+
*/
1059+
var wakaUnknownAfter;
1060+
/**
1061+
* @suppress {undefinedVars}
1062+
*/
1063+
var wakaUnknownBefore;
1064+
/**
1065+
* @suppress {duplicate}
1066+
*/
1067+
var env;
1068+
/**
1069+
* @suppress {duplicate}
1070+
*/
1071+
var ___cxa_free_exception = function() {};
1072+
1073+
// On top of node externs to avoid some `declared more than once` errors
1074+
1075+
/**
1076+
* @suppress {duplicate}
1077+
*/
1078+
var assert;
1079+
/**
1080+
* @suppress {duplicate}
1081+
*/
1082+
var buffer;
1083+
/**
1084+
* @suppress {duplicate}
1085+
*/
1086+
var fs;
1087+
/**
1088+
* @suppress {undefinedVars}
1089+
*/
1090+
var FUNCTION_TABLE;
1091+
/**
1092+
* @suppress {undefinedVars}
1093+
*/
1094+
var MozBlobBuilder;
1095+
/**
1096+
* @suppress {undefinedVars}
1097+
*/
1098+
var GL;
1099+
/**
1100+
* @suppress {undefinedVars}
1101+
*/
1102+
var SDL;

0 commit comments

Comments
 (0)