~ chicken-core (chicken-5) b24b03084e2b2214fdbfcdba5fe27bf3532b7277


commit b24b03084e2b2214fdbfcdba5fe27bf3532b7277
Author:     Evan Hanson <evhan@foldling.org>
AuthorDate: Tue Jan 19 00:17:34 2016 +1300
Commit:     Evan Hanson <evhan@foldling.org>
CommitDate: Tue Mar 8 22:52:34 2016 +1300

    Move locative-related procedures to new chicken.locative module

diff --git a/README b/README
index d0c09447..4996042a 100644
--- a/README
+++ b/README
@@ -294,6 +294,7 @@
 	|   |       |-- chicken.files.import.so
 	|   |       |-- chicken.foreign.import.so
 	|   |       |-- chicken.format.import.so
+	|   |       |-- chicken.locative.import.so
 	|   |       |-- chicken.lolevel.import.so
 	|   |       |-- chicken.internal.import.so
 	|   |       |-- chicken.io.import.so
diff --git a/c-platform.scm b/c-platform.scm
index 082b9149..d748a179 100644
--- a/c-platform.scm
+++ b/c-platform.scm
@@ -179,8 +179,8 @@
     chicken.lolevel#u16vector-set! chicken.lolevel#s16vector-set!
     chicken.lolevel#u32vector-set! chicken.lolevel#s32vector-set!
     chicken.lolevel#u64vector-set! chicken.lolevel#s64vector-set!
-    chicken.lolevel#locative-ref chicken.lolevel#locative-set!
-    chicken.lolevel#locative->object chicken.lolevel#locative?
+    chicken.locative#locative-ref chicken.locative#locative-set!
+    chicken.locative#locative->object chicken.locative#locative?
     chicken.lolevel#pointer->object chicken.lolevel#pointer+
     chicken.lolevel#address->pointer chicken.lolevel#pointer->address
     chicken.lolevel#pointer=? chicken.lolevel#number-of-slots
@@ -413,7 +413,7 @@
 (rewrite 'call-with-values 13 2 "C_call_with_values" #t)
 (rewrite '##sys#call-with-values 13 2 "C_u_call_with_values" #f)
 (rewrite '##sys#call-with-values 13 2 "C_call_with_values" #t)
-(rewrite 'chicken.lolevel#locative-ref 13 1 "C_locative_ref" #t)
+(rewrite 'chicken.locative#locative-ref 13 1 "C_locative_ref" #t)
 (rewrite 'chicken.continuation#continuation-graft 13 2 "C_continuation_graft" #t)
 
 (rewrite 'caar 2 1 "C_u_i_caar" #f)
@@ -464,7 +464,7 @@
 (rewrite 'not 2 1 "C_i_not"#t )
 (rewrite 'char? 2 1 "C_charp" #t)
 (rewrite 'string? 2 1 "C_i_stringp" #t)
-(rewrite 'chicken.lolevel#locative? 2 1 "C_i_locativep" #t)
+(rewrite 'chicken.locative#locative? 2 1 "C_i_locativep" #t)
 (rewrite 'symbol? 2 1 "C_i_symbolp" #t)
 (rewrite 'vector? 2 1 "C_i_vectorp" #t)
 (rewrite '##sys#vector? 2 1 "C_i_vectorp" #t)
@@ -829,8 +829,8 @@
 (rewrite '##sys#permanent? 17 1 "C_permanentp")
 (rewrite '##sys#null-pointer? 17 1 "C_null_pointerp" "C_null_pointerp")
 (rewrite '##sys#immediate? 17 1 "C_immp")
-(rewrite 'chicken.lolevel#locative->object 17 1 "C_i_locative_to_object")
-(rewrite 'chicken.lolevel#locative-set! 17 2 "C_i_locative_set")
+(rewrite 'chicken.locative#locative->object 17 1 "C_i_locative_to_object")
+(rewrite 'chicken.locative#locative-set! 17 2 "C_i_locative_set")
 (rewrite '##sys#foreign-fixnum-argument 17 1 "C_i_foreign_fixnum_argumentp")
 (rewrite '##sys#foreign-char-argument 17 1 "C_i_foreign_char_argumentp")
 (rewrite '##sys#foreign-flonum-argument 17 1 "C_i_foreign_flonum_argumentp")
@@ -956,8 +956,8 @@
     (srfi-4#s64vector-ref . srfi-4#s64vector-set!)
     (srfi-4#f32vector-ref . srfi-4#f32vector-set!)
     (srfi-4#f64vector-ref . srfi-4#f64vector-set!)
+    (chicken.locative#locative-ref . chicken.locative#locative-set!)
     (chicken.lolevel#block-ref . chicken.lolevel#block-set!)
-    (chicken.lolevel#locative-ref . chicken.lolevel#locative-set!)
     (chicken.lolevel#pointer-u8-ref . chicken.lolevel#pointer-u8-set!)
     (chicken.lolevel#pointer-s8-ref . chicken.lolevel#pointer-s8-set!)
     (chicken.lolevel#pointer-u16-ref . chicken.lolevel#pointer-u16-set!)
diff --git a/chicken-install.scm b/chicken-install.scm
index 5c1b7242..28209635 100644
--- a/chicken-install.scm
+++ b/chicken-install.scm
@@ -58,6 +58,7 @@
       "chicken.internal.import.so"
       "chicken.io.import.so"
       "chicken.irregex.import.so"
+      "chicken.locative.import.so"
       "chicken.lolevel.import.so"
       "chicken.ports.import.so"
       "chicken.posix.import.so"
diff --git a/defaults.make b/defaults.make
index e72030ab..ffe337fa 100644
--- a/defaults.make
+++ b/defaults.make
@@ -264,7 +264,8 @@ CHICKEN_PROGRAM_OPTIONS += $(if $(PROFILE_OBJECTS),-profile)
 
 PRIMITIVE_IMPORT_LIBRARIES = chicken csi chicken.foreign
 DYNAMIC_IMPORT_LIBRARIES = setup-api setup-download srfi-4
-DYNAMIC_CHICKEN_IMPORT_LIBRARIES = bitwise format io posix pretty-print random
+DYNAMIC_CHICKEN_IMPORT_LIBRARIES = bitwise format io locative posix \
+	pretty-print random
 DYNAMIC_CHICKEN_UNIT_IMPORT_LIBRARIES = data-structures eval repl expand \
 	continuation files internal irregex lolevel ports tcp utils
 
diff --git a/distribution/manifest b/distribution/manifest
index e248e3a9..31a09946 100644
--- a/distribution/manifest
+++ b/distribution/manifest
@@ -266,6 +266,8 @@ chicken.io.import.scm
 chicken.io.import.c
 chicken.irregex.import.scm
 chicken.irregex.import.c
+chicken.locative.import.scm
+chicken.locative.import.c
 chicken.lolevel.import.scm
 chicken.lolevel.import.c
 chicken.ports.import.scm
diff --git a/eval.scm b/eval.scm
index 15445fe3..2225d2a4 100644
--- a/eval.scm
+++ b/eval.scm
@@ -85,6 +85,7 @@
     (chicken.internal . internal)
     (chicken.io . extras)
     (chicken.irregex . irregex)
+    (chicken.locative . lolevel)
     (chicken.lolevel . lolevel)
     (chicken.ports . ports)
     (chicken.posix . posix)
diff --git a/lolevel.scm b/lolevel.scm
index 0653903a..e10b446c 100644
--- a/lolevel.scm
+++ b/lolevel.scm
@@ -38,9 +38,8 @@ EOF
 
 (module chicken.lolevel
   (address->pointer align-to-word allocate block-ref block-set!
-   extend-procedure extended-procedure? free locative->object
-   locative-ref locative-set! locative? make-locative
-   make-pointer-vector make-record-instance make-weak-locative
+   extend-procedure extended-procedure? free
+   make-pointer-vector make-record-instance
    move-memory! mutate-procedure! number-of-bytes number-of-slots
    object->pointer object-become! object-copy pointer+ pointer->address
    pointer->object pointer-f32-ref pointer-f32-set! pointer-f64-ref
@@ -283,43 +282,6 @@ EOF
       (##sys#error-hook (foreign-value "C_BAD_ARGUMENT_TYPE_NO_POINTER_ERROR" int) 'pointer-tag x) ) )
 
 
-;;; locatives:
-
-;; Locative layout:
-;
-; 0	Object-address + Byte-offset (address)
-; 1	Byte-offset (fixnum)
-; 2	Type (fixnum)
-;	0	vector or pair		(C_SLOT_LOCATIVE)
-;	1	string			(C_CHAR_LOCATIVE)
-;	2	u8vector or blob        (C_U8_LOCATIVE)
-;	3	s8vector	        (C_S8_LOCATIVE)
-;	4	u16vector		(C_U16_LOCATIVE)
-;	5	s16vector		(C_S16_LOCATIVE)
-;	6	u32vector		(C_U32_LOCATIVE)
-;	7	s32vector		(C_S32_LOCATIVE)
-;	8	u64vector		(C_U32_LOCATIVE)
-;	9	s64vector		(C_S32_LOCATIVE)
-;	10	f32vector		(C_F32_LOCATIVE)
-;	11	f64vector		(C_F64_LOCATIVE)
-; 3	Object or #f, if weak (C_word)
-
-(define (make-locative obj . index)
-  (##sys#make-locative obj (optional index 0) #f 'make-locative) )
-
-(define (make-weak-locative obj . index)
-  (##sys#make-locative obj (optional index 0) #t 'make-weak-locative) )
-
-(define (locative-set! x y) (##core#inline "C_i_locative_set" x y))
-
-(define locative-ref
-  (getter-with-setter 
-   (##core#primitive "C_locative_ref") 
-   locative-set!
-   "(locative-ref loc)"))
-
-(define (locative->object x) (##core#inline "C_i_locative_to_object" x))
-(define (locative? x) (and (##core#inline "C_blockp" x) (##core#inline "C_locativep" x)))
 
 
 ;;; SRFI-4 number-vector:
@@ -588,4 +550,51 @@ EOF
   (##sys#check-structure pv 'pointer-vector 'pointer-vector-length)
   (##sys#slot pv 1))
 
-)
+) ; chicken.lolevel
+
+(module chicken.locative
+  (locative? make-locative make-weak-locative
+   locative-ref locative-set! locative->object)
+
+(import scheme chicken)
+
+;;; locatives:
+
+;; Locative layout:
+;
+; 0	Object-address + Byte-offset (address)
+; 1	Byte-offset (fixnum)
+; 2	Type (fixnum)
+;	0	vector or pair		(C_SLOT_LOCATIVE)
+;	1	string			(C_CHAR_LOCATIVE)
+;	2	u8vector or blob        (C_U8_LOCATIVE)
+;	3	s8vector	        (C_S8_LOCATIVE)
+;	4	u16vector		(C_U16_LOCATIVE)
+;	5	s16vector		(C_S16_LOCATIVE)
+;	6	u32vector		(C_U32_LOCATIVE)
+;	7	s32vector		(C_S32_LOCATIVE)
+;	8	u64vector		(C_U32_LOCATIVE)
+;	9	s64vector		(C_S32_LOCATIVE)
+;	10	f32vector		(C_F32_LOCATIVE)
+;	11	f64vector		(C_F64_LOCATIVE)
+; 3	Object or #f, if weak (C_word)
+
+(define (make-locative obj . index)
+  (##sys#make-locative obj (optional index 0) #f 'make-locative))
+
+(define (make-weak-locative obj . index)
+  (##sys#make-locative obj (optional index 0) #t 'make-weak-locative))
+
+(define (locative-set! x y) (##core#inline "C_i_locative_set" x y))
+
+(define locative-ref
+  (getter-with-setter
+   (##core#primitive "C_locative_ref")
+   locative-set!
+   "(locative-ref loc)"))
+
+(define (locative->object x)
+  (##core#inline "C_i_locative_to_object" x))
+
+(define (locative? x)
+  (and (##core#inline "C_blockp" x) (##core#inline "C_locativep" x))))
diff --git a/manual/Unit lolevel b/manual/Unit lolevel
index 28d2b063..33ba4994 100644
--- a/manual/Unit lolevel	
+++ b/manual/Unit lolevel	
@@ -374,6 +374,8 @@ on the locative. The container object can be computed by calling the
 
 Locatives may be passed to foreign procedures that expect pointer arguments.
 
+The following procedures are provided by the {{(chicken locative)}}
+module.
 
 ==== make-locative
 
diff --git a/modules.scm b/modules.scm
index 670e28ec..2bd739e7 100644
--- a/modules.scm
+++ b/modules.scm
@@ -940,6 +940,7 @@
 (##sys#register-module-alias 'format 'chicken.format)
 (##sys#register-module-alias 'io 'chicken.io)
 (##sys#register-module-alias 'irregex 'chicken.irregex)
+(##sys#register-module-alias 'locative 'chicken.locative)
 (##sys#register-module-alias 'lolevel 'chicken.lolevel)
 (##sys#register-module-alias 'ports 'chicken.ports)
 (##sys#register-module-alias 'posix 'chicken.posix)
diff --git a/rules.make b/rules.make
index d786be10..f66049a9 100644
--- a/rules.make
+++ b/rules.make
@@ -523,6 +523,7 @@ $(eval $(call declare-emitted-import-lib-dependency,chicken.format,extras))
 $(eval $(call declare-emitted-import-lib-dependency,chicken.io,extras))
 $(eval $(call declare-emitted-import-lib-dependency,chicken.pretty-print,extras))
 $(eval $(call declare-emitted-import-lib-dependency,chicken.random,extras))
+$(eval $(call declare-emitted-import-lib-dependency,chicken.locative,lolevel))
 
 chicken.c: chicken.scm mini-srfi-1.scm \
 		chicken.compiler.batch-driver.import.scm \
@@ -773,7 +774,9 @@ ports.c: $(SRCDIR)ports.scm $(SRCDIR)common-declarations.scm
 files.c: $(SRCDIR)files.scm $(SRCDIR)common-declarations.scm
 	$(bootstrap-lib) -emit-import-library chicken.files
 lolevel.c: $(SRCDIR)lolevel.scm $(SRCDIR)common-declarations.scm
-	$(bootstrap-lib) -emit-import-library chicken.lolevel
+	$(bootstrap-lib) \
+	-emit-import-library chicken.locative \
+	-emit-import-library chicken.lolevel
 tcp.c: $(SRCDIR)tcp.scm $(SRCDIR)common-declarations.scm
 	$(bootstrap-lib) -emit-import-library chicken.tcp
 srfi-4.c: $(SRCDIR)srfi-4.scm $(SRCDIR)common-declarations.scm
diff --git a/tests/lolevel-tests.scm b/tests/lolevel-tests.scm
index f84cedd7..d43123ab 100644
--- a/tests/lolevel-tests.scm
+++ b/tests/lolevel-tests.scm
@@ -1,6 +1,6 @@
 ;;;; Unit lolevel testing
 
-(require-extension lolevel srfi-4 extras)
+(require-extension locative lolevel srfi-4)
 
 (define-syntax assert-error
   (syntax-rules ()
diff --git a/tests/runtests.sh b/tests/runtests.sh
index 5fdeb34b..41c60bfa 100755
--- a/tests/runtests.sh
+++ b/tests/runtests.sh
@@ -48,6 +48,7 @@ for x in \
     chicken.internal.import.so \
     chicken.io.import.so \
     chicken.irregex.import.so \
+    chicken.locative.import.so \
     chicken.lolevel.import.so \
     chicken.ports.import.so \
     chicken.posix.import.so \
diff --git a/tests/typematch-tests.scm b/tests/typematch-tests.scm
index 507dea07..785691b6 100644
--- a/tests/typematch-tests.scm
+++ b/tests/typematch-tests.scm
@@ -1,7 +1,7 @@
 ;;;; typematch-tests.scm
 
 
-(use lolevel data-structures)
+(use locative lolevel data-structures)
 
 
 (define (make-list n x)
diff --git a/types.db b/types.db
index a7912e03..95103c9d 100644
--- a/types.db
+++ b/types.db
@@ -1707,14 +1707,8 @@
 (chicken.lolevel#extend-procedure (#(procedure #:clean #:enforce) chicken.lolevel#extend-procedure (procedure *) procedure))
 (chicken.lolevel#extended-procedure? (#(procedure #:clean) chicken.lolevel#extended-procedure (*) boolean))
 (chicken.lolevel#free (#(procedure #:clean #:enforce) chicken.lolevel#free (pointer) undefined))
-(chicken.lolevel#locative->object (#(procedure #:clean #:enforce) chicken.lolevel#locative->object (locative) *))
-(chicken.lolevel#locative-ref (#(procedure #:clean #:enforce) chicken.lolevel#locative-ref (locative) *))
-(chicken.lolevel#locative-set! (#(procedure #:enforce) chicken.lolevel#locative-set! (locative *) *))
-(chicken.lolevel#locative? (#(procedure #:pure #:predicate locative) chicken.lolevel#locative? (*) boolean))
-(chicken.lolevel#make-locative (#(procedure #:clean #:enforce) chicken.lolevel#make-locative (* #!optional fixnum) locative))
 (chicken.lolevel#make-pointer-vector (#(procedure #:clean #:enforce) chicken.lolevel#make-pointer-vector (fixnum #!optional (or pointer false)) pointer-vector))
 (chicken.lolevel#make-record-instance (#(procedure #:clean) chicken.lolevel#make-record-instance (symbol #!rest) *))
-(chicken.lolevel#make-weak-locative (#(procedure #:clean #:enforce) chicken.lolevel#make-weak-locative (* #!optional fixnum) locative))
 
 (chicken.lolevel#move-memory! (#(procedure #:enforce) chicken.lolevel#move-memory! (* * #!optional fixnum fixnum fixnum) *))
 
@@ -1805,6 +1799,14 @@
 (chicken.lolevel#tag-pointer (#(procedure #:clean #:enforce) chicken.lolevel#tag-pointer (pointer *) pointer))
 (chicken.lolevel#tagged-pointer? (#(procedure #:clean #:enforce) chicken.lolevel#tagged-pointer? (* #!optional *) boolean))
 
+;; locative
+
+(chicken.locative#locative->object (#(procedure #:clean #:enforce) chicken.locative#locative->object (locative) *))
+(chicken.locative#locative-ref (#(procedure #:clean #:enforce) chicken.locative#locative-ref (locative) *))
+(chicken.locative#locative-set! (#(procedure #:enforce) chicken.locative#locative-set! (locative *) *))
+(chicken.locative#locative? (#(procedure #:pure #:predicate locative) chicken.locative#locative? (*) boolean))
+(chicken.locative#make-locative (#(procedure #:clean #:enforce) chicken.locative#make-locative (* #!optional fixnum) locative))
+(chicken.locative#make-weak-locative (#(procedure #:clean #:enforce) chicken.locative#make-weak-locative (* #!optional fixnum) locative))
 
 ;; ports
 
Trap