~ 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