~ chicken-core (chicken-5) f2523f3baffc5c0076c4e6094ce3840e0bbd0d6e


commit f2523f3baffc5c0076c4e6094ce3840e0bbd0d6e
Author:     Evan Hanson <evhan@foldling.org>
AuthorDate: Fri Oct 9 11:48:50 2015 +1300
Commit:     Peter Bex <peter@more-magic.net>
CommitDate: Mon Nov 2 21:29:01 2015 +0100

    Move library list helpers to new "internal" unit

diff --git a/README b/README
index c85c2ce2..136917b5 100644
--- a/README
+++ b/README
@@ -291,6 +291,7 @@
 	|   |       |-- chicken.files.import.so
 	|   |       |-- chicken.foreign.import.so
 	|   |       |-- chicken.lolevel.import.so
+	|   |       |-- chicken.internal.import.so
 	|   |       |-- chicken.irregex.import.so
 	|   |       |-- chicken.ports.import.so
 	|   |       |-- chicken.posix.import.so
diff --git a/chicken-install.scm b/chicken-install.scm
index eb5f633d..eb1b2fb3 100644
--- a/chicken-install.scm
+++ b/chicken-install.scm
@@ -52,6 +52,7 @@
       "chicken.files.import.so"
       "chicken.foreign.import.so"
       "chicken.import.so"
+      "chicken.internal.import.so"
       "chicken.irregex.import.so"
       "chicken.lolevel.import.so"
       "chicken.ports.import.so"
diff --git a/defaults.make b/defaults.make
index 289d9eff..f3648008 100644
--- a/defaults.make
+++ b/defaults.make
@@ -261,7 +261,7 @@ PRIMITIVE_IMPORT_LIBRARIES = chicken csi chicken.foreign
 POSIX_IMPORT_LIBRARY = chicken.posix
 DYNAMIC_IMPORT_LIBRARIES = setup-api setup-download srfi-4
 DYNAMIC_CHICKEN_IMPORT_LIBRARIES = data-structures eval expand extras \
-	files irregex lolevel ports tcp utils
+	files internal irregex lolevel ports tcp utils
 
 # targets
 
diff --git a/distribution/manifest b/distribution/manifest
index eb3ebe7a..f8546ef4 100644
--- a/distribution/manifest
+++ b/distribution/manifest
@@ -247,6 +247,8 @@ chicken.files.import.scm
 chicken.files.import.c
 chicken.foreign.import.scm
 chicken.foreign.import.c
+chicken.internal.import.scm
+chicken.internal.import.c
 chicken.irregex.import.scm
 chicken.irregex.import.c
 chicken.lolevel.import.scm
diff --git a/eval.scm b/eval.scm
index 1b30b154..1db97c09 100644
--- a/eval.scm
+++ b/eval.scm
@@ -27,7 +27,7 @@
 
 (declare
   (unit eval)
-  (uses expand modules)
+  (uses expand internal modules)
   (not inline ##sys#repl-read-hook ##sys#repl-print-hook 
        ##sys#read-prompt-hook ##sys#alias-global-hook ##sys#user-read-hook
        ##sys#syntax-error-hook))
@@ -48,36 +48,6 @@
 #define C_rnd_fix()		(C_fix(rand()))
 <#
 
-;;; Runtime support module
-
-(module chicken.core (srfi-id library-id)
-
-(import scheme chicken)
-
-;; 1 => srfi-1
-(define (srfi-id n)
-  (if (fixnum? n)
-      (##sys#intern-symbol
-       (##sys#string-append "srfi-" (##sys#number->string n)))
-      (##sys#syntax-error-hook 'require-extension "invalid SRFI number" n)))
-
-;; (foo bar baz) => foo.bar.baz
-(define (library-id lib)
-  (define (library-part->string id)
-    (cond ((symbol? id) (##sys#symbol->string id))
-	  ((number? id) (##sys#number->string id))
-	  (else (##sys#error "invalid library specifier" lib))))
-  (cond
-    ((symbol? lib) lib)
-    ((list? lib)
-     (do ((lib (cdr lib) (cdr lib))
-	  (str (library-part->string (car lib))
-	       (string-append str "." (library-part->string (car lib)))))
-	 ((null? lib) (##sys#intern-symbol str))))
-    (else (##sys#error "invalid library specifier" lib))))
-
-) ; chicken.core
-
 (module chicken.eval
   (chicken-home define-reader-ctor dynamic-load-libraries
    eval eval-handler extension-information
@@ -90,7 +60,7 @@
 (import (except scheme eval load interaction-environment null-environment scheme-report-environment))
 (import chicken)
 
-(import chicken.core
+(import chicken.internal
 	chicken.expand
 	chicken.foreign)
 
diff --git a/expand.scm b/expand.scm
index cef6ef41..e7ad3a13 100644
--- a/expand.scm
+++ b/expand.scm
@@ -29,7 +29,7 @@
 
 (declare
   (unit expand)
-  (uses extras)
+  (uses extras internal)
   (disable-interrupts)
   (fixnum)
   (not inline ##sys#syntax-error-hook ##sys#compiler-syntax-hook
@@ -1444,7 +1444,7 @@
   (lambda (x r c)
     (##sys#check-syntax 'module x '(_ _ _ . #(_ 0)))
     (let ((len (length x))
-	  (name (chicken.core#library-id (cadr x))))
+	  (name (chicken.internal#library-id (cadr x))))
       (cond ((and (fx>= len 4) (c (r '=) (caddr x)))
 	     (let* ((x (chicken.expand#strip-syntax x))
 		    (app (cadddr x)))
diff --git a/internal.scm b/internal.scm
new file mode 100644
index 00000000..76f75af7
--- /dev/null
+++ b/internal.scm
@@ -0,0 +1,57 @@
+;;;; internal.scm - Runtime support module for CHICKEN
+;
+; Copyright (c) 2008-2015, The CHICKEN Team
+; Copyright (c) 2000-2007, Felix L. Winkelmann
+; All rights reserved.
+;
+; Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following
+; conditions are met:
+;
+;   Redistributions of source code must retain the above copyright notice, this list of conditions and the following
+;     disclaimer.
+;   Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
+;     disclaimer in the documentation and/or other materials provided with the distribution.
+;   Neither the name of the author nor the names of its contributors may be used to endorse or promote
+;     products derived from this software without specific prior written permission.
+;
+; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
+; OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+; AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
+; CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+; SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+; THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+; OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+; POSSIBILITY OF SUCH DAMAGE.
+
+(declare
+  (unit internal)
+  (disable-interrupts)
+  (fixnum))
+
+(module chicken.internal
+  (srfi-id library-id)
+
+(import scheme chicken)
+
+(define (srfi-id n)
+  (if (fixnum? n)
+      (##sys#intern-symbol
+       (##sys#string-append "srfi-" (##sys#number->string n)))
+      (##sys#error "invalid SRFI number" n)))
+
+(define (library-id lib)
+  (define (library-part->string id)
+    (cond ((symbol? id) (##sys#symbol->string id))
+	  ((number? id) (##sys#number->string id))
+	  (else (##sys#error "invalid library specifier" lib))))
+  (cond
+    ((symbol? lib) lib)
+    ((list? lib)
+     (do ((lib (cdr lib) (cdr lib))
+	  (str (library-part->string (car lib))
+	       (string-append str "." (library-part->string (car lib)))))
+	 ((null? lib) (##sys#intern-symbol str))))
+    (else (##sys#error "invalid library specifier" lib))))
+
+) ; chicken.internal
diff --git a/modules.scm b/modules.scm
index 4e6c4df3..5afdbbf4 100644
--- a/modules.scm
+++ b/modules.scm
@@ -26,7 +26,7 @@
 
 (declare
   (unit modules)
-  (uses eval expand)
+  (uses eval expand internal)
   (disable-interrupts)
   (fixnum)
   (hide lookup merge-se module-indirect-exports)
@@ -125,7 +125,7 @@
     (thunk)))
 
 (define (##sys#resolve-module-name name loc)
-  (let loop ((n name) (done '()))
+  (let loop ((n (chicken.internal#library-id name)) (done '()))
     (cond ((assq n (##sys#module-alias-environment)) =>
 	   (lambda (a)
 	     (let ((n2 (cdr a)))
@@ -604,7 +604,7 @@
       (cond ((symbol? spec) (import-name spec))
 	    ((null? (cdr spec)) (import-name (car spec))) ; single library component
 	    ((and (c %srfi (car spec)) (fixnum? (cadr spec)) (null? (cddr spec))) ; only one number
-	     (import-name (chicken.core#srfi-id (cadr spec))))
+	     (import-name (chicken.internal#srfi-id (cadr spec))))
 	    (else
 	     (let ((head (car spec))
 		   (imports (cddr spec)))
@@ -687,7 +687,7 @@
 			     (cdr imp) ) )
 			  (values name `(,head ,form ,pref) (map ren impv) (map ren imps) impi))))
 		     (else
-		      (import-name (chicken.core#library-id spec))))))))
+		      (import-name (chicken.internal#library-id spec))))))))
     (##sys#check-syntax loc x '(_ . #(_ 1)))
     (let ((cm (##sys#current-module)))
       (for-each
diff --git a/rules.make b/rules.make
index ffd3bfe6..67cf4023 100644
--- a/rules.make
+++ b/rules.make
@@ -37,7 +37,7 @@ SETUP_API_OBJECTS_1 = setup-api setup-download
 
 LIBCHICKEN_SCHEME_OBJECTS_1 = \
        library eval data-structures ports files extras lolevel utils tcp srfi-4 \
-       $(POSIXFILE) irregex scheduler \
+       $(POSIXFILE) internal irregex scheduler \
        profiler stub expand modules chicken-syntax chicken-ffi-syntax build-version
 LIBCHICKEN_OBJECTS_1 = $(LIBCHICKEN_SCHEME_OBJECTS_1) runtime
 LIBCHICKEN_SHARED_OBJECTS = $(LIBCHICKEN_OBJECTS_1:=$(O))
@@ -662,7 +662,8 @@ extras.c: extras.scm \
 		chicken.data-structures.import.scm
 eval.c: eval.scm \
 		chicken.expand.import.scm \
-		chicken.foreign.import.scm
+		chicken.foreign.import.scm \
+		chicken.internal.import.scm
 files.c: files.scm \
 		chicken.data-structures.import.scm \
 		chicken.extras.import.scm \
@@ -691,8 +692,10 @@ bootstrap-lib = $(CHICKEN) $(call profile-flags, $@) $< $(CHICKEN_LIBRARY_OPTION
 
 library.c: $(SRCDIR)library.scm $(SRCDIR)banner.scm $(SRCDIR)common-declarations.scm
 	$(bootstrap-lib)
+internal.c: $(SRCDIR)internal.scm
+	$(bootstrap-lib) -emit-import-library chicken.internal
 eval.c: $(SRCDIR)eval.scm $(SRCDIR)common-declarations.scm $(SRCDIR)mini-srfi-1.scm
-	$(bootstrap-lib) -emit-import-library chicken.eval -emit-import-library chicken.core
+	$(bootstrap-lib) -emit-import-library chicken.eval
 expand.c: $(SRCDIR)expand.scm $(SRCDIR)synrules.scm $(SRCDIR)common-declarations.scm
 	$(bootstrap-lib) -emit-import-library chicken.expand
 modules.c: $(SRCDIR)modules.scm $(SRCDIR)common-declarations.scm $(SRCDIR)mini-srfi-1.scm
diff --git a/tests/runtests.sh b/tests/runtests.sh
index 05d6c429..5b614041 100755
--- a/tests/runtests.sh
+++ b/tests/runtests.sh
@@ -41,6 +41,7 @@ for x in setup-api.so setup-api.import.so setup-download.so \
       chicken.ports.import.so chicken.utils.import.so chicken.files.import.so \
       chicken.posix.import.so \
       chicken.extras.import.so \
+      chicken.internal.import.so \
       chicken.irregex.import.so \
       chicken.tcp.import.so \
       chicken.foreign.import.so \
Trap