diff options
author | alon@honor <none@none> | 2010-08-29 11:21:12 -0700 |
---|---|---|
committer | alon@honor <none@none> | 2010-08-29 11:21:12 -0700 |
commit | 4fecb8fcce279780e901412b5f575abbbd450fdc (patch) | |
tree | 4cf093a5bed70373e9a4addd35fd8821d84037a5 | |
parent | 2dab432a4211ec490f45680b75418027d01d64f6 (diff) |
patch for multiple heaps in /experimental
-rw-r--r-- | src/experimental/multiple_heaps.diff | 175 |
1 files changed, 175 insertions, 0 deletions
diff --git a/src/experimental/multiple_heaps.diff b/src/experimental/multiple_heaps.diff new file mode 100644 index 00000000..1b451b01 --- /dev/null +++ b/src/experimental/multiple_heaps.diff @@ -0,0 +1,175 @@ +diff -r e90280547f0d enzymatic/parser.js +--- a/enzymatic/parser.js Mon Aug 16 20:31:28 2010 -0700 ++++ b/enzymatic/parser.js Tue Aug 17 21:00:45 2010 -0700 +@@ -1250,20 +1250,22 @@ + + function makePointer(slab, pos) { + // XXX hardcoded ptr impl ++ if (slab == 'HEAP') return pos; ++ return 'Pointer_make(' + slab + ', ' + (pos ? pos : 0) + ')'; + // return '{ slab: ' + slab + ', pos: ' + (pos ? pos : 0) + ' }'; +- return '[' + slab + ', ' + (pos ? pos : 0) + ']'; ++// return '[' + slab + ', ' + (pos ? pos : 0) + ']'; + } + + function makeGetSlab(ptr) { + // XXX hardcoded ptr impl + // return ptr + '.slab'; +- return ptr + '[0]'; ++ return 'HEAP'; + } + + function makeGetPos(ptr) { + // XXX hardcoded ptr impl + // return ptr + '.pos'; +- return ptr + '[1]'; ++ return ptr; + } + + function makeGetValue(ptr, pos, noNeedFirst) { +@@ -1275,14 +1277,13 @@ + } + + function makeEmptyStruct(type) { +-// print('// ???? ' + type + ' : ' + (new Error().stack) + dump(TYPES)); +- return TYPES[type].fields.map(function(field) { +- if (isPointerType(field)) { +- return makePointer('null'); +- } else { +- return 0; +- } +- }); ++// print('// ???? ' + type + ' : ' + dump(TYPES)); ++// XXX hardcoded ptr impl ++ var ret = []; ++ for (var i = 0; i < TYPES[type].flatSize; i++) { ++ ret.push(0); ++ } ++ return ret; + } + + // globalVariable +diff -r e90280547f0d enzymatic/postamble.js +--- a/enzymatic/postamble.js Mon Aug 16 20:31:28 2010 -0700 ++++ b/enzymatic/postamble.js Tue Aug 17 21:00:45 2010 -0700 +@@ -3,7 +3,7 @@ + + function run(args) { + var argc = args.length+1; +- var argv = [intArrayFromString("/bin/this.program") ]; ++ var argv = [Pointer_make(intArrayFromString("/bin/this.program")) ]; + for (var i = 0; i < argc-1; i = i + 1) { + argv.push(Pointer_make(intArrayFromString(args[i]))); + } +diff -r e90280547f0d enzymatic/preamble.js +--- a/enzymatic/preamble.js Mon Aug 16 20:31:28 2010 -0700 ++++ b/enzymatic/preamble.js Tue Aug 17 21:00:45 2010 -0700 +@@ -6,6 +6,9 @@ + + UNDEFINED = null; // None in python; good for pypy + ++HEAP = []; ++HEAPTOP = 0; ++ + function abort(text) { + text = "ABORT: " + text; + print(text + "\n"); +@@ -15,16 +18,24 @@ + } + + function Pointer_niceify(ptr) { +- if (!ptr.slab) +- return { slab: ptr[0], pos: ptr[1] }; +- else +- return ptr; ++// XXX hardcoded ptr impl ++ return { slab: HEAP, pos: ptr }; ++// if (!ptr.slab) ++// return { slab: ptr[0], pos: ptr[1] }; ++// else ++// return ptr; + } + + function Pointer_make(slab, pos) { ++ pos = pos ? pos : 0; + // XXX hardcoded ptr impl ++ if (slab === HEAP) return pos; ++ var ret = _malloc(Math.max(slab.length - pos, 1)); ++ for (var i = 0; i < slab.length - pos; i++) { ++ HEAP[ret + i] = slab[pos + i]; ++ } ++ return ret; + // return { slab: slab, pos: pos ? pos : 0 }; +- return [slab, pos ? pos : 0]; + } + + function Pointer_stringify(ptr) { +@@ -47,20 +58,24 @@ + NULL = Pointer_make([]); + + function _malloc(size) { ++// XXX hardcoded ptr impl ++ var ret = HEAPTOP; ++ HEAPTOP += size; ++ return ret; + // We don't actually do new Array(size) - memory is uninitialized anyhow +- return Pointer_make([]); ++// return Pointer_make([]); + } + + __Znwj = _malloc; // Mangled "new" + __Znaj = _malloc; // Mangled "new" + + function _free(ptr) { ++// XXX hardcoded ptr impl + // Nothing needs to be done! But we mark the pointer + // as invalid. Note that we should do it for all other + // pointers of this slab too. +-// XXX hardcoded ptr impl + // ptr.slab = null; +- ptr[0] = null; ++// ptr[0] = null; + } + + __ZdlPv = _free; // Mangled "delete" +@@ -90,8 +105,12 @@ + } + + function _strlen(p) { +- p = Pointer_niceify(p); +- return p.slab.length; // XXX might want to find the null terminator... ++// XXX hardcoded ptr impl ++ var q = p; ++ while (HEAP[q] != 0) q++; ++ return q - p; ++// p = Pointer_niceify(p); ++// return p.slab.length; // XXX might want to find the null terminator... + } + + // stdlib.h +@@ -102,9 +121,13 @@ + } + + function _llvm_memcpy_i32(dest, src, num, idunno) { +- dest = Pointer_niceify(dest); +- src = Pointer_niceify(src); +- dest.slab = src.slab.slice(src.pos); ++// XXX hardcoded ptr impl ++ for (var i = 0; i < num; i++) { ++ HEAP[dest + i] = HEAP[src + i]; ++ } ++// dest = Pointer_niceify(dest); ++// src = Pointer_niceify(src); ++// dest.slab = src.slab.slice(src.pos); + } + + // Tools +@@ -131,6 +154,7 @@ + ret.push(stringy.charCodeAt(i)); + i = i + 1; + } ++ ret.push(0); + return ret; + } + + |