aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/jsifier.js11
-rw-r--r--src/parseTools.js11
2 files changed, 16 insertions, 6 deletions
diff --git a/src/jsifier.js b/src/jsifier.js
index f22d3d88..ac3d1955 100644
--- a/src/jsifier.js
+++ b/src/jsifier.js
@@ -1503,20 +1503,19 @@ function JSify(data, functionsOnly, givenFunctions) {
if (phase == 'pre') {
if (memoryInitialization.length > 0) {
- /*
// apply postsets directly into the big memory initialization
itemsDict.GlobalVariablePostSet = itemsDict.GlobalVariablePostSet.filter(function(item) {
var m
- if (m = /^HEAPU?(\d+)\[([()>\d]+)\] *= *([()|\d]+);?$/.exec(item.JS)) {
- var bits = +m[1];
- var target = eval(m[2]) << log2(bits/8);
+ if (m = /^HEAP([\dFU]+)\[([()>\d]+)\] *= *([()|\d]+);?$/.exec(item.JS)) {
+ var type = getTypeFromHeap(m[1]);
+ var bytes = Runtime.getNativeTypeSize(type);
+ var target = eval(m[2]) << log2(bytes);
var value = eval(m[3]);
- writeInt8s(memoryInitialization, target - TOTAL_STACK, value, 'i' + bits); // XXX floats
+ writeInt8s(memoryInitialization, target - TOTAL_STACK, value, type);
return false;
}
return true;
});
- */
// write out the singleton big memory initialization value
print('/* memory initializer */ ' + makePointer(memoryInitialization, null, 'ALLOC_NONE', 'i8', 'TOTAL_STACK', true)); // we assert on TOTAL_STACK == GLOBAL_BASE
}
diff --git a/src/parseTools.js b/src/parseTools.js
index 5459fc67..639c583b 100644
--- a/src/parseTools.js
+++ b/src/parseTools.js
@@ -2349,3 +2349,14 @@ function charCode(char) {
return char.charCodeAt(0);
}
+function getTypeFromHeap(suffix) {
+ switch (suffix) {
+ case '8': return 'i8';
+ case '16': return 'i16';
+ case '32': return 'i32';
+ case 'F32': return 'float';
+ case 'F64': return 'double';
+ default: throw 'getTypeFromHeap? ' + suffix;
+ }
+}
+