From 2842c51aff6a909c14484a8f50c892c2586f8c78 Mon Sep 17 00:00:00 2001 From: Peter Bex Date: Sun, 2 Apr 2017 20:15:08 +0200 Subject: [PATCH 2/4] Don't use ##sys# prefix for compiled module registration procedures. Instead, explicitly export them, and make generated module definitions refer to the chicken.internal.module namespace directly. We still define ##sys#-prefixed aliases to avoid bootstrapping problems. Once we have a snapshot release, we can get rid of these. --- chicken.csi.import.scm | 2 + chicken.foreign.import.scm | 2 + chicken.import.scm | 2 + modules.scm | 132 ++++++++++++++++++++++++--------------------- tests/module-tests.scm | 4 +- 5 files changed, 79 insertions(+), 63 deletions(-) diff --git a/chicken.csi.import.scm b/chicken.csi.import.scm index a5b727a..2e1c26f 100644 --- a/chicken.csi.import.scm +++ b/chicken.csi.import.scm @@ -24,6 +24,8 @@ ; POSSIBILITY OF SUCH DAMAGE. +;; TODO: After a snapshot release is made, replace this with: +;; chicken.internal.module#register-primitive-module (##sys#register-primitive-module 'chicken.csi '((editor-command . chicken.csi#editor-command) diff --git a/chicken.foreign.import.scm b/chicken.foreign.import.scm index cab548f..4653088 100644 --- a/chicken.foreign.import.scm +++ b/chicken.foreign.import.scm @@ -24,6 +24,8 @@ ; POSSIBILITY OF SUCH DAMAGE. +;; TODO: After a snapshot release is made, replace this with: +;; chicken.internal.module#register-primitive-module (##sys#register-primitive-module 'chicken.foreign '() diff --git a/chicken.import.scm b/chicken.import.scm index ca439fc..0b45503 100644 --- a/chicken.import.scm +++ b/chicken.import.scm @@ -24,6 +24,8 @@ ; POSSIBILITY OF SUCH DAMAGE. +;; TODO: After a snapshot release is made, replace this with: +;; chicken.internal.module#register-primitive-module (##sys#register-primitive-module 'chicken '(abort diff --git a/modules.scm b/modules.scm index ff30e93..ae04ab1 100644 --- a/modules.scm +++ b/modules.scm @@ -36,7 +36,10 @@ (not inline ##sys#alias-global-hook)) (module chicken.internal.module - (find-module/import-library module-saved-environments) + (find-module/import-library module-saved-environments + register-compiled-module register-primitive-module + ;; TODO: Expose this properly to the user in chicken.module? + register-module-alias) (import scheme (only chicken @@ -109,7 +112,7 @@ (define (make-module name lib explist vexports sexports iexports) (%make-module name lib explist '() '() '() '() '() '() '() vexports sexports iexports #f)) -(define (##sys#register-module-alias alias name) +(define (register-module-alias alias name) (##sys#module-alias-environment (cons (cons alias name) (##sys#module-alias-environment)))) @@ -304,7 +307,7 @@ `(,@(if (pair? ifs) `((chicken.eval#eval '(import-syntax ,@(strip-syntax ifs)))) '()) ,@(if (pair? mifs) `((import-syntax ,@(strip-syntax mifs))) '()) ,@(##sys#fast-reverse (strip-syntax (module-meta-expressions mod))) - (##sys#register-compiled-module + (chicken.internal.module#register-compiled-module ',(module-name mod) ',(module-library mod) (list @@ -335,7 +338,7 @@ (cons `(cons ',(caar sd) ,(strip-syntax (cdar sd))) (loop (cdr sd))))))))))))) -(define (##sys#register-compiled-module name lib iexports vexports sexports #!optional +(define (register-compiled-module name lib iexports vexports sexports #!optional (sdefs '())) (define (find-reexport name) (let ((a (assq name (##sys#macro-environment)))) @@ -386,7 +389,7 @@ (set! ##sys#module-table (cons (cons name mod) ##sys#module-table)) mod)) -(define (##sys#register-core-module name lib vexports #!optional (sexports '())) +(define (register-core-module name lib vexports #!optional (sexports '())) (let* ((me (##sys#macro-environment)) (mod (make-module name lib '() @@ -414,8 +417,8 @@ mod)) ;; same as register-core-module, but uses module's name as its library -(define (##sys#register-primitive-module name vexports #!optional (sexports '())) - (##sys#register-core-module name name vexports sexports)) +(define (register-primitive-module name vexports #!optional (sexports '())) + (register-core-module name name vexports sexports)) (define (find-export sym mod indirect) (let ((exports (module-export-list mod))) @@ -925,110 +928,117 @@ ;; ##sys#initial-macro-environment and thus always available inside ;; modules. ##sys#default-macro-environment)) - (##sys#register-primitive-module 'r4rs r4rs-values r4rs-syntax) - (##sys#register-primitive-module + (register-primitive-module 'r4rs r4rs-values r4rs-syntax) + (register-primitive-module 'scheme (append '(dynamic-wind values call-with-values) r4rs-values) r4rs-syntax) - (##sys#register-primitive-module 'r4rs-null '() r4rs-syntax) - (##sys#register-primitive-module 'r5rs-null '() r4rs-syntax)) + (register-primitive-module 'r4rs-null '() r4rs-syntax) + (register-primitive-module 'r5rs-null '() r4rs-syntax)) -(##sys#register-module-alias 'r5rs 'scheme) -(##sys#register-module-alias 'srfi-88 'chicken.keyword) +(register-module-alias 'r5rs 'scheme) +(register-module-alias 'srfi-88 'chicken.keyword) ;; NOTE these are just here for shorthand and can be dropped whenever -(##sys#register-module-alias 'bitwise 'chicken.bitwise) -(##sys#register-module-alias 'continuation 'chicken.continuation) -(##sys#register-module-alias 'csi 'chicken.csi) -(##sys#register-module-alias 'data-structures 'chicken.data-structures) -(##sys#register-module-alias 'errno 'chicken.errno) -(##sys#register-module-alias 'eval 'chicken.eval) -(##sys#register-module-alias 'expand 'chicken.expand) -(##sys#register-module-alias 'file 'chicken.file) -(##sys#register-module-alias 'files 'chicken.files) -(##sys#register-module-alias 'fixnum 'chicken.fixnum) -(##sys#register-module-alias 'flonum 'chicken.flonum) -(##sys#register-module-alias 'foreign 'chicken.foreign) -(##sys#register-module-alias 'format 'chicken.format) -(##sys#register-module-alias 'gc 'chicken.gc) -(##sys#register-module-alias 'internal 'chicken.internal) -(##sys#register-module-alias 'io 'chicken.io) -(##sys#register-module-alias 'irregex 'chicken.irregex) -(##sys#register-module-alias 'keyword 'chicken.keyword) -(##sys#register-module-alias 'locative 'chicken.locative) -(##sys#register-module-alias 'lolevel 'chicken.lolevel) -(##sys#register-module-alias 'memory 'chicken.memory) -(##sys#register-module-alias 'pathname 'chicken.pathname) -(##sys#register-module-alias 'port 'chicken.port) -(##sys#register-module-alias 'posix 'chicken.posix) -(##sys#register-module-alias 'pretty-print 'chicken.pretty-print) -(##sys#register-module-alias 'random 'chicken.random) -(##sys#register-module-alias 'read-syntax 'chicken.read-syntax) -(##sys#register-module-alias 'repl 'chicken.repl) -(##sys#register-module-alias 'tcp 'chicken.tcp) -(##sys#register-module-alias 'time 'chicken.time) +(register-module-alias 'bitwise 'chicken.bitwise) +(register-module-alias 'continuation 'chicken.continuation) +(register-module-alias 'csi 'chicken.csi) +(register-module-alias 'data-structures 'chicken.data-structures) +(register-module-alias 'errno 'chicken.errno) +(register-module-alias 'eval 'chicken.eval) +(register-module-alias 'expand 'chicken.expand) +(register-module-alias 'file 'chicken.file) +(register-module-alias 'files 'chicken.files) +(register-module-alias 'fixnum 'chicken.fixnum) +(register-module-alias 'flonum 'chicken.flonum) +(register-module-alias 'foreign 'chicken.foreign) +(register-module-alias 'format 'chicken.format) +(register-module-alias 'gc 'chicken.gc) +(register-module-alias 'internal 'chicken.internal) +(register-module-alias 'io 'chicken.io) +(register-module-alias 'irregex 'chicken.irregex) +(register-module-alias 'keyword 'chicken.keyword) +(register-module-alias 'locative 'chicken.locative) +(register-module-alias 'lolevel 'chicken.lolevel) +(register-module-alias 'memory 'chicken.memory) +(register-module-alias 'pathname 'chicken.pathname) +(register-module-alias 'port 'chicken.port) +(register-module-alias 'posix 'chicken.posix) +(register-module-alias 'pretty-print 'chicken.pretty-print) +(register-module-alias 'random 'chicken.random) +(register-module-alias 'read-syntax 'chicken.read-syntax) +(register-module-alias 'repl 'chicken.repl) +(register-module-alias 'tcp 'chicken.tcp) +(register-module-alias 'time 'chicken.time) (define-inline (se-subset names env) (map (cut assq <> env) names)) -(##sys#register-primitive-module +(register-primitive-module 'srfi-0 '() (se-subset '(cond-expand) ##sys#default-macro-environment)) -(##sys#register-primitive-module +(register-primitive-module 'srfi-2 '() (se-subset '(and-let*) ##sys#chicken-macro-environment)) -(##sys#register-core-module +(register-core-module 'srfi-6 'library '(open-input-string open-output-string get-output-string)) -(##sys#register-primitive-module +(register-primitive-module 'srfi-8 '() (se-subset '(receive) ##sys#chicken-macro-environment)) -(##sys#register-primitive-module +(register-primitive-module 'srfi-9 '() (se-subset '(define-record-type) ##sys#chicken-macro-environment)) -(##sys#register-core-module +(register-core-module 'srfi-10 'read-syntax '((define-reader-ctor . chicken.read-syntax#define-reader-ctor))) -(##sys#register-primitive-module +(register-primitive-module 'srfi-11 '() (se-subset '(let-values let*-values) ##sys#chicken-macro-environment)) -(##sys#register-core-module +(register-core-module 'srfi-12 'library '(abort condition? condition-predicate condition-property-accessor current-exception-handler make-composite-condition make-property-condition signal with-exception-handler) (se-subset '(handle-exceptions) ##sys#chicken-macro-environment)) -(##sys#register-primitive-module +(register-primitive-module 'srfi-15 '() (se-subset '(fluid-let) ##sys#chicken-macro-environment)) -(##sys#register-primitive-module +(register-primitive-module 'srfi-16 '() (se-subset '(case-lambda) ##sys#chicken-macro-environment)) -(##sys#register-primitive-module +(register-primitive-module 'srfi-17 '() (se-subset '(set!) ##sys#default-macro-environment)) -(##sys#register-core-module +(register-core-module 'srfi-23 'library '(error)) -(##sys#register-primitive-module +(register-primitive-module 'srfi-26 '() (se-subset '(cut cute) ##sys#chicken-macro-environment)) -(##sys#register-core-module +(register-core-module 'srfi-28 'extras '((format . chicken.format#format))) -(##sys#register-primitive-module +(register-primitive-module 'srfi-31 '() (se-subset '(rec) ##sys#chicken-macro-environment)) -(##sys#register-core-module +(register-core-module 'srfi-39 'library '(make-parameter) (se-subset '(parameterize) ##sys#chicken-macro-environment)) -(##sys#register-primitive-module +(register-primitive-module 'srfi-55 '() (se-subset '(require-extension) ##sys#default-macro-environment)) -(##sys#register-core-module +(register-core-module 'srfi-98 'posix '(get-environment-variable (get-environment-variables . chicken.posix#get-environment-variables))) ) + +;; OBSOLETE; can be removed after a snapshot release is made. +;; But don't forget to also replace this in the hardcoded import files! +(define ##sys#register-compiled-module + chicken.internal.module#register-compiled-module) +(define ##sys#register-primitive-module + chicken.internal.module#register-primitive-module) diff --git a/tests/module-tests.scm b/tests/module-tests.scm index 421560e..a8f31af 100644 --- a/tests/module-tests.scm +++ b/tests/module-tests.scm @@ -198,7 +198,7 @@ (module m17 (a) (import scheme) (define a 1)) (begin-for-syntax ; XXX workaround for missing module alias functionality - (##sys#register-module-alias 'm18 'm17)) + (chicken.internal.module#register-module-alias 'm18 'm17)) (module m19 (a) (import scheme) (define a 2)) (test-equal @@ -214,7 +214,7 @@ (module m21 () (import scheme) (begin-for-syntax ; XXX s.a. - (##sys#register-module-alias 'm18 'm19)) + (chicken.internal.module#register-module-alias 'm18 'm19)) (import m18) a) 2) -- 2.1.4