diff --git a/bin/ikarus-collect.c b/bin/ikarus-collect.c index 4aaf803..a802770 100644 --- a/bin/ikarus-collect.c +++ b/bin/ikarus-collect.c @@ -230,7 +230,6 @@ gc_tconc_push_extending(gc_t* gc, ikp tcbucket){ p->next = gc->tconc_queue; gc->tconc_queue = p; } - /* Wrong MR! */ ikp ap = ik_mmap_typed(pagesize, meta_mt[meta_ptrs] | next_gen_tag[0], @@ -1070,7 +1069,7 @@ add_object_proc(gc_t* gc, ikp x) if((! is_fixnum(key)) && (tagof(key) != immediate_tag)){ unsigned int kt = gc->segment_vector[page_index(key)]; if((kt & gen_mask) <= gc->collect_gen){ - /* key is moved */ + /* key will be moved */ gc_tconc_push(gc, y); } } @@ -1777,8 +1776,7 @@ add_one_tconc(ikpcb* pcb, ikp p){ assert(tagof(tc) == pair_tag); ikp d = ref(tc, off_cdr); assert(tagof(d) == pair_tag); - /* Wrong MR! */ - ikp new_pair = p + pair_tag; //ik_alloc(pcb, pair_size) + pair_tag; + ikp new_pair = p + pair_tag; ref(d, off_car) = tcbucket; ref(d, off_cdr) = new_pair; ref(new_pair, off_car) = false_object; diff --git a/src/ikarus.boot b/src/ikarus.boot index 8b6edd1..aa602d3 100644 Binary files a/src/ikarus.boot and b/src/ikarus.boot differ diff --git a/src/ikarus.syntax.ss b/src/ikarus.syntax.ss index bf0fc75..fdaa306 100644 --- a/src/ikarus.syntax.ss +++ b/src/ikarus.syntax.ss @@ -784,6 +784,11 @@ (bless `(letrec ([,f (lambda ,lhs* ,b . ,b*)]) (,f . ,rhs*))) (stx-error stx "invalid syntax"))]))) + (define time-macro + (lambda (stx) + (syntax-match stx () + [(_ expr) + (bless `(time-it ',expr (lambda () ,expr)))]))) (define identifier-syntax-macro (lambda (stx) (syntax-match stx () @@ -1567,6 +1572,7 @@ [(quasiquote) quasiquote-macro] [(with-syntax) with-syntax-macro] [(identifier-syntax) identifier-syntax-macro] + [(time) time-macro] [(... => _ else) incorrect-usage-macro] [else (error 'macro-transformer "invalid macro ~s" x)])] [else (error 'core-macro-transformer "invalid macro ~s" x)]))) diff --git a/src/makefile.ss b/src/makefile.ss index d91081e..c7dbb11 100755 --- a/src/makefile.ss +++ b/src/makefile.ss @@ -109,6 +109,7 @@ [do (macro . do)] [and (macro . and)] [or (macro . or)] + [time (macro . time)] [... (macro . ...)] [=> (macro . =>)] [else (macro . else)] @@ -234,6 +235,7 @@ [do i r] [and i r] [or i r] + [time i] [... i r] [=> i r] [else i r] diff --git a/src/todo-r6rs.ss b/src/todo-r6rs.ss index a963e13..0d01789 100755 --- a/src/todo-r6rs.ss +++ b/src/todo-r6rs.ss @@ -527,15 +527,15 @@ [command-line C pr] [exit C pr] - [delay D r5] + [delay S r5] [exact->inexact C r5] - [force D r5] + [force S r5] [inexact->exact C r5] - [modulo D r5] - [remainder D r5] - [null-environment D r5] - [quotient D r5] - [scheme-report-environment D r5] + [modulo C r5] + [remainder C r5] + [null-environment S r5] + [quotient C r5] + [scheme-report-environment S r5] [close-port D ip] [eol-style D ip]