diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/jsifier.js | 11 | ||||
-rw-r--r-- | src/parseTools.js | 11 |
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; + } +} + |