diff --git a/bin/ikarus b/bin/ikarus index 512253e..25d09c4 100755 Binary files a/bin/ikarus and b/bin/ikarus differ diff --git a/bin/ikarus-fasl.c b/bin/ikarus-fasl.c index 8d43891..9e89ac5 100644 --- a/bin/ikarus-fasl.c +++ b/bin/ikarus-fasl.c @@ -358,7 +358,7 @@ static ikp do_read(ikpcb* pcb, fasl_port* p){ } return rtd; } - else if(c == 'T'){ /* thunk */ + else if(c == 'Q'){ /* thunk */ fprintf(stderr, "THUNK\n"); ikp proc = ik_alloc(pcb, align(disp_closure_data)) + closure_tag; if(put_mark_index){ diff --git a/lib/ikarus.boot b/lib/ikarus.boot index 740aea2..1ab0c2f 100644 Binary files a/lib/ikarus.boot and b/lib/ikarus.boot differ diff --git a/lib/libcompile.ss b/lib/libcompile.ss index 907ce59..12f5e87 100644 --- a/lib/libcompile.ss +++ b/lib/libcompile.ss @@ -234,6 +234,7 @@ (define-record clambda (cases)) (define-record clambda-code (label cases free)) (define-record closure (code free*)) +(define-record thunk (code)) (define-record funcall (op rand*)) (define-record appcall (op rand*)) (define-record forcall (op rand*)) @@ -3892,7 +3893,12 @@ (lambda (ls) (for-each (lambda (x) (printf " ~s\n" x)) ls)) ls*)) - (let ([code* (list*->code* (lambda (x) #f) ls*)]) + (let ([code* (list*->code* + (lambda (x) + (if (thunk? x) + (thunk-code x) + #f)) + ls*)]) (car code*))))) (define compile-file