~ chicken-core (chicken-5) a1763b87d5d1f56998d5a005c3bd903969c358fd
commit a1763b87d5d1f56998d5a005c3bd903969c358fd Author: felix <felix@call-with-current-continuation.org> AuthorDate: Wed Sep 15 09:06:22 2010 -0400 Commit: felix <felix@call-with-current-continuation.org> CommitDate: Wed Sep 15 09:06:22 2010 -0400 added pv-length and tests diff --git a/lolevel.import.scm b/lolevel.import.scm index a61d5ae7..9e9ae290 100644 --- a/lolevel.import.scm +++ b/lolevel.import.scm @@ -44,6 +44,7 @@ locative? make-locative make-record-instance + make-pointer-vector make-weak-locative move-memory! mutate-procedure @@ -75,6 +76,11 @@ pointer-s32-set! pointer-s8-ref pointer-s8-set! + pointer-vector + pointer-vector? + pointer-vector-length + pointer-vector-ref + pointer-vector-set! pointer-tag pointer-u16-ref pointer-u16-set! diff --git a/lolevel.scm b/lolevel.scm index acff3cd3..8c02cc81 100644 --- a/lolevel.scm +++ b/lolevel.scm @@ -712,3 +712,7 @@ EOF (pv-buf-ref (##sys#slot pv 2) i)) ; buf pointer-vector-set! "(pointer-vector-ref pv i)")) + +(define (pointer-vector-length pv) + (##sys#check-structure pv 'pointer-vector 'pointer-vector-length) + (##sys#slot pv 1)) diff --git a/tests/lolevel-tests.scm b/tests/lolevel-tests.scm index a1ed0f93..82095073 100644 --- a/tests/lolevel-tests.scm +++ b/tests/lolevel-tests.scm @@ -273,3 +273,16 @@ (assert (not (eq? foo new-foo))) (assert (equal? '(hello 1 2) (foo 1 2))) + +; pointer vectors + +(define pv (make-pointer-vector 42 #f)) +(assert (= 42 (pointer-vector-length pv))) +(pointer-vector-set! pv 1 (address->pointer 999)) +(set! (pointer-vector-ref pv 40) (address->pointer 777)) +(assert (not (pointer-vector-ref pv 0))) +(assert (not (pointer-vector-ref pv 41))) +(assert (= (pointer->address (pointer-vector-ref pv 1)) 999)) +(assert (= (pointer->address (pointer-vector-ref pv 40)) 777)) +(pointer-vector-fill! pv (address->pointer 1)) +(assert (= 1 (pointer-vector-ref pv 0))) diff --git a/types.db b/types.db index 459a111f..61e39bb0 100644 --- a/types.db +++ b/types.db @@ -614,6 +614,7 @@ (pointer-vector (procedure pointer-vector (#!rest pointer-vector) boolean)) (pointer-vector? (procedure pointer-vector? (*) boolean)) (pointer-vector-fill! (procedure pointer-vector-fill! (pointer-vector pointer) undefined)) +(pointer-vector-length (procedure pointer-vector-length (pointer-vector) fixnum)) (pointer-vector-ref (procedure pointer-vector-ref (pointer-vector fixnum) pointer)) (pointer-vector-set! (procedure pointer-vector-set! (pointer-vector fixnum pointer) pointer)) (pointer-s16-ref (procedure pointer-s16-ref (pointer) fixnum))Trap