aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/analyzer.js5
-rw-r--r--src/library_browser.js12
-rw-r--r--src/parseTools.js15
-rw-r--r--src/postamble.js4
-rw-r--r--src/preamble.js4
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