diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/analyzer.js | 5 | ||||
-rw-r--r-- | src/library_browser.js | 12 | ||||
-rw-r--r-- | src/parseTools.js | 15 | ||||
-rw-r--r-- | src/postamble.js | 4 | ||||
-rw-r--r-- | src/preamble.js | 4 |
5 files changed, 26 insertions, 14 deletions
diff --git a/src/analyzer.js b/src/analyzer.js index a131406c..2cc46ab6 100644 --- a/src/analyzer.js +++ b/src/analyzer.js @@ -411,8 +411,9 @@ function analyzer(data, sidePass) { // legalize parameters legalizeFunctionParameters(value.params); // legalize return value, if any - if (value.assignTo && isIllegalType(item.type)) { - bits = getBits(value.type); + var returnType = getReturnType(item.type); + if (value.assignTo && isIllegalType(returnType)) { + bits = getBits(returnType); var elements = getLegalVars(item.assignTo, bits); // legalize return value value.assignTo = elements[0].ident; diff --git a/src/library_browser.js b/src/library_browser.js index 97233c36..5f9c4d06 100644 --- a/src/library_browser.js +++ b/src/library_browser.js @@ -311,10 +311,10 @@ mergeInto(LibraryManager.library, { lockPointer: undefined, resizeCanvas: undefined, requestFullScreen: function(lockPointer, resizeCanvas) { - this.lockPointer = lockPointer; - this.resizeCanvas = resizeCanvas; - if (typeof this.lockPointer === 'undefined') this.lockPointer = true; - if (typeof this.resizeCanvas === 'undefined') this.resizeCanvas = false; + Browser.lockPointer = lockPointer; + Browser.resizeCanvas = resizeCanvas; + if (typeof Browser.lockPointer === 'undefined') Browser.lockPointer = true; + if (typeof Browser.resizeCanvas === 'undefined') Browser.resizeCanvas = false; var canvas = Module['canvas']; function fullScreenChange() { @@ -335,8 +335,8 @@ mergeInto(LibraryManager.library, { if (Module['onFullScreen']) Module['onFullScreen'](Browser.isFullScreen); } - if (!this.fullScreenHandlersInstalled) { - this.fullScreenHandlersInstalled = true; + if (!Browser.fullScreenHandlersInstalled) { + Browser.fullScreenHandlersInstalled = true; document.addEventListener('fullscreenchange', fullScreenChange, false); document.addEventListener('mozfullscreenchange', fullScreenChange, false); document.addEventListener('webkitfullscreenchange', fullScreenChange, false); diff --git a/src/parseTools.js b/src/parseTools.js index 1a58b4e7..f30883b5 100644 --- a/src/parseTools.js +++ b/src/parseTools.js @@ -286,11 +286,22 @@ function isVarArgsFunctionType(type) { return type.substr(-varArgsSuffix.length) == varArgsSuffix; } +function getNumVars(type) { // how many variables are needed to represent this type + if (type in Runtime.FLOAT_TYPES) return 1; + return Math.max(getNumIntChunks(type), 1); +} + function countNormalArgs(type, out) { out = out || {}; if (!isFunctionType(type, out)) return -1; - if (isVarArgsFunctionType(type)) out.numArgs--; - return out.numArgs; + var ret = 0; + if (out.segments) { + for (var i = 0; i < out.segments.length; i++) { + ret += getNumVars(out.segments[i][0].text); + } + } + if (isVarArgsFunctionType(type)) ret--; + return ret; } function addIdent(token) { diff --git a/src/postamble.js b/src/postamble.js index 12471a19..d0b737f8 100644 --- a/src/postamble.js +++ b/src/postamble.js @@ -1,7 +1,7 @@ // === Auto-generated postamble setup entry stuff === -Module.callMain = function callMain(args) { +Module['callMain'] = function callMain(args) { assert(runDependencies == 0, 'cannot call main when async dependencies remain! (listen on __ATMAIN__)'); assert(!Module['preRun'] || Module['preRun'].length == 0, 'cannot call main when preRun functions remain to be called'); @@ -84,7 +84,7 @@ function run(args) { var ret = 0; calledRun = true; if (Module['_main'] && shouldRunNow) { - ret = Module.callMain(args); + ret = Module['callMain'](args); if (!Module['noExitRuntime']) { exitRuntime(); } diff --git a/src/preamble.js b/src/preamble.js index d10771e3..dbe5e655 100644 --- a/src/preamble.js +++ b/src/preamble.js @@ -777,7 +777,7 @@ Module['writeArrayToMemory'] = writeArrayToMemory; {{{ reSign }}} #if PRECISE_I32_MUL -if (!Math.imul) Math.imul = function(a, b) { +if (!Math['imul']) Math['imul'] = function(a, b) { var ah = a >>> 16; var al = a & 0xffff; var bh = b >>> 16; @@ -785,7 +785,7 @@ if (!Math.imul) Math.imul = function(a, b) { return (al*bl + ((ah*bl + al*bh) << 16))|0; }; #else -Math.imul = function(a, b) { +Math['imul'] = function(a, b) { return (a*b)|0; // fast but imprecise }; #endif |