aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoralon@honor <none@none>2010-08-29 11:21:12 -0700
committeralon@honor <none@none>2010-08-29 11:21:12 -0700
commit4fecb8fcce279780e901412b5f575abbbd450fdc (patch)
tree4cf093a5bed70373e9a4addd35fd8821d84037a5
parent2dab432a4211ec490f45680b75418027d01d64f6 (diff)
patch for multiple heaps in /experimental
-rw-r--r--src/experimental/multiple_heaps.diff175
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;
+ }
+
+