diff --git a/bin/ikarus b/bin/ikarus index d6e8b9a..8e18bb3 100755 Binary files a/bin/ikarus and b/bin/ikarus differ diff --git a/bin/ikarus-runtime.c b/bin/ikarus-runtime.c index 4ac09fe..b965294 100644 --- a/bin/ikarus-runtime.c +++ b/bin/ikarus-runtime.c @@ -263,6 +263,7 @@ ikp ik_mmap_protected(int size){ ikpcb* ik_make_pcb(){ ikpcb* pcb = ik_malloc(sizeof(ikpcb)); bzero(pcb, sizeof(ikpcb)); + pcb->collect_key = false_object; #define HEAPSIZE (1024 * 4096) #define STAKSIZE (1024 * 4096) //#define STAKSIZE (256 * 4096) diff --git a/src/ikarus.boot b/src/ikarus.boot index db85645..11c6e39 100644 Binary files a/src/ikarus.boot and b/src/ikarus.boot differ diff --git a/src/ikarus.collect.ss b/src/ikarus.collect.ss index bf8ffe9..0a1354d 100644 --- a/src/ikarus.collect.ss +++ b/src/ikarus.collect.ss @@ -1,10 +1,11 @@ (library (ikarus collect) (export do-overflow do-overflow-words do-vararg-overflow collect - do-stack-overflow) + do-stack-overflow collect-key) (import - (except (ikarus) collect) - (ikarus system $fx)) + (except (ikarus) collect collect-key) + (ikarus system $fx) + (ikarus system $arg-list)) (define do-overflow (lambda (n) @@ -36,4 +37,11 @@ (define dump-dirty-vector (lambda () (foreign-call "ik_dump_dirty_vector"))) + +(define (collect-key) + (or ($collect-key) + (begin + ($collect-key (string #\k)) + (collect-key)))) + ) diff --git a/src/makefile.ss b/src/makefile.ss index a956b58..f727c15 100755 --- a/src/makefile.ss +++ b/src/makefile.ss @@ -761,6 +761,7 @@ [$unread-char $io] [$arg-list $arg-list] + [$collect-key $arg-list] [$$apply $stack] [$fp-at-base $stack] @@ -796,6 +797,7 @@ [do-overflow-words ] [do-vararg-overflow ] [collect i] + [collect-key i] [do-stack-overflow ] [syntax-dispatch ] ))