]> gitweb.factorcode.org Git - factor.git/commitdiff
fjsc: refactor callcc0 and add callcc1 and continue-with
authorchris.double <chris.double@double.co.nz>
Sun, 17 Dec 2006 04:29:46 +0000 (04:29 +0000)
committerchris.double <chris.double@double.co.nz>
Sun, 17 Dec 2006 04:29:46 +0000 (04:29 +0000)
apps/furnace-fjsc/resources/bootstrap.js

index 026e3c931c5104760a9d6ec82793cca70ac34044..3c8494ef4dc9b387ad4d621bd146b1f255490a90 100644 (file)
@@ -243,22 +243,32 @@ factor.add_word("kernel", "callcc0", "primitive", function(next) {
   var quot = data_stack.pop();
   var new_cont = factor.cont.clone();  
   var old_next = factor.cont.next;
-  var cont = {
-    next: function() {
+  factor.cont.next = function() {
       factor.cont.next = old_next;
       factor.call_next(next);
-    },
-    cont: factor.cont
-  };
-  new_cont.data_stack.push(cont);
-  factor.cont = new_cont;;
+  }
+  new_cont.data_stack.push(factor.cont);
+  factor.cont = new_cont;
   quot.execute(next);  
 });
 
+factor.add_word("kernel", "callcc1", "primitive", function(next) {  
+  factor.get_word("kernel", "callcc0").execute(next);
+});
+
 factor.add_word("kernel", "continue", "primitive", function(next) {  
   var data_stack = factor.cont.data_stack;
   var cont = data_stack.pop(); 
-  factor.cont = cont.cont.clone();
+  factor.cont = cont.clone();
+  factor.call_next(cont.next);
+});
+
+factor.add_word("kernel", "continue-with", "primitive", function(next) {  
+  var data_stack = factor.cont.data_stack;
+  var cont = data_stack.pop(); 
+  var data = data_stack.pop(); 
+  factor.cont = cont.clone();
+  factor.cont.data_stack.push(data);
   factor.call_next(cont.next);
 });