diff --git a/bin/ikarus b/bin/ikarus index b6a1177..20b0dfd 100755 Binary files a/bin/ikarus and b/bin/ikarus differ diff --git a/bin/ikarus-fasl.c b/bin/ikarus-fasl.c index d0ee32d..e39d84b 100644 --- a/bin/ikarus-fasl.c +++ b/bin/ikarus-fasl.c @@ -281,6 +281,7 @@ static ikp do_read(ikpcb* pcb, fasl_port* p){ ref(code, 0) = code_tag; ref(code, disp_code_code_size) = fix(code_size); ref(code, disp_code_freevars) = freevars; + ref(code, disp_code_annotation) = false_object; fasl_read_buf(p, code+disp_code_data, code_size); if(put_mark_index){ p->marks[put_mark_index] = code+vector_tag; diff --git a/src/ikarus.boot b/src/ikarus.boot index 357fae1..ff62f6d 100644 Binary files a/src/ikarus.boot and b/src/ikarus.boot differ diff --git a/src/ikarus.code-objects.ss b/src/ikarus.code-objects.ss index d03e274..5030465 100644 --- a/src/ikarus.code-objects.ss +++ b/src/ikarus.code-objects.ss @@ -3,13 +3,14 @@ (export make-code code-reloc-vector code-freevars code-size code-ref code-set! set-code-reloc-vector! - set-code-annotation! + set-code-annotation! procedure-annotation code->thunk) (import (ikarus system $fx) (ikarus system $codes) (except (ikarus) make-code code-reloc-vector code-freevars code-size code-ref code-set! set-code-reloc-vector! + procedure-annotation set-code-annotation!)) (define make-code @@ -80,5 +81,10 @@ (error 'code->thunk "~s has free variables" x)) ($code->closure x))) + (define (procedure-annotation x) + (if (procedure? x) + ($code-annotation ($closure-code x)) + (error 'procedure-annotation "~s is not a procedure" x))) + ) diff --git a/src/ikarus.fasl.ss b/src/ikarus.fasl.ss index 269ea1c..3bf03dd 100644 --- a/src/ikarus.fasl.ss +++ b/src/ikarus.fasl.ss @@ -41,7 +41,7 @@ (library (ikarus fasl read) (export fasl-read) (import (ikarus) - (ikarus code-objects) + (except (ikarus code-objects) procedure-annotation) (ikarus system $codes) (ikarus system $records)) diff --git a/src/ikarus.fasl.write.ss b/src/ikarus.fasl.write.ss index 534a575..47a59b1 100644 --- a/src/ikarus.fasl.write.ss +++ b/src/ikarus.fasl.write.ss @@ -12,7 +12,7 @@ (ikarus system $strings) (ikarus system $flonums) (ikarus system $bignums) - (ikarus code-objects) + (except (ikarus code-objects) procedure-annotation) (except (ikarus) fasl-write)) (define write-fixnum diff --git a/src/ikarus.intel-assembler.ss b/src/ikarus.intel-assembler.ss index 7081b05..9d74b98 100644 --- a/src/ikarus.intel-assembler.ss +++ b/src/ikarus.intel-assembler.ss @@ -4,7 +4,7 @@ (export assemble-sources code-entry-adjustment) (import (ikarus) - (ikarus code-objects) + (except (ikarus code-objects) procedure-annotation) (ikarus system $pairs)) (define fold diff --git a/src/makefile.ss b/src/makefile.ss index 95978b0..8075e82 100755 --- a/src/makefile.ss +++ b/src/makefile.ss @@ -779,6 +779,7 @@ [$code-ref $codes] [$code-set! $codes] [$set-code-annotation! $codes] + [procedure-annotation i] [$make-tcbucket $tcbuckets] [$tcbucket-key $tcbuckets]