aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/jsifier.js10
-rw-r--r--src/parseTools.js8
2 files changed, 17 insertions, 1 deletions
diff --git a/src/jsifier.js b/src/jsifier.js
index 0d962dc9..7d777575 100644
--- a/src/jsifier.js
+++ b/src/jsifier.js
@@ -546,6 +546,14 @@ function JSify(data, functionsOnly, givenFunctions) {
func.params.forEach(function(param) {
func.JS += ' ' + param.ident + ' = ' + asmCoercion(param.ident, param.type) + ';\n';
});
+
+ // spell out local variables
+ var vars = values(func.variables);
+ if (vars.length) {
+ func.JS += ' var ' + vars.filter(function(v) { return v.origin != 'funcparam' }).map(function(v) {
+ return v.ident + ' = ' + asmInitializer(v.type);
+ }).join(', ') + ';\n';
+ }
}
if (PROFILE) {
@@ -764,7 +772,7 @@ function JSify(data, functionsOnly, givenFunctions) {
var valueJS = item.JS;
item.JS = '';
if (CLOSURE_ANNOTATIONS) item.JS += '/** @type {number} */ ';
- item.JS += (item.overrideSSA ? '' : 'var ') + toNiceIdent(item.assignTo);
+ item.JS += ((item.overrideSSA || ASM_JS) ? '' : 'var ') + toNiceIdent(item.assignTo);
var value = parseNumerical(valueJS);
var impl = getVarImpl(item.funcData, item.assignTo);
diff --git a/src/parseTools.js b/src/parseTools.js
index 7a8637a0..bd3109e7 100644
--- a/src/parseTools.js
+++ b/src/parseTools.js
@@ -949,6 +949,14 @@ function getHeapOffset(offset, type) {
}
}
+function asmInitializer(type) {
+ if (type in Runtime.INT_TYPES) {
+ return '0';
+ } else {
+ return '+0';
+ }
+}
+
function asmCoercion(value, type) {
if (type in Runtime.INT_TYPES) {
return value + '|0';