From d8793e83491119eb06c71b027b48a1294e45155d Mon Sep 17 00:00:00 2001 From: Peter Bex Date: Sun, 2 Apr 2017 21:31:47 +0200 Subject: [PATCH 4/4] Remove ##sys# prefix from export registration stuff. We rename ##sys#register-export to register-exportable-definition, because it doesn't really directly register an export, only registers a definition that _can_ potentially be exported. The ##sys##add-to-export-list procedure is renamed to register-exports to more clearly indicate that it accepts multiple exports and to match the other "register-" procedures' naming conventions. Both procedures no longer accept a first-class module object, which means we can remove all (##sys#current-module) references from our macros, reducing coupling between expanded macros and the internal details of how the current module is tracked. --- chicken-syntax.scm | 2 +- expand.scm | 10 ++++------ modules.scm | 10 ++++++---- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/chicken-syntax.scm b/chicken-syntax.scm index 7923b6e..a1988c1 100644 --- a/chicken-syntax.scm +++ b/chicken-syntax.scm @@ -371,7 +371,7 @@ (lambda (vars argc rest) (for-each (lambda (nm) (let ((name (##sys#get nm '##core#macro-alias nm))) - (##sys#register-export name (##sys#current-module)))) + (chicken.internal.module#register-exportable-definition name))) vars))) `(,(r 'set!-values) ,@(cdr form)))))) diff --git a/expand.scm b/expand.scm index 0e6b14f..8a94037 100644 --- a/expand.scm +++ b/expand.scm @@ -1073,7 +1073,7 @@ (cond ((not (pair? head)) (##sys#check-syntax 'define form '(_ symbol . #(_ 0 1))) (let ((name (or (getp head '##core#macro-alias) head))) - (##sys#register-export name (##sys#current-module))) + (chicken.internal.module#register-exportable-definition name)) (when (c (r 'define) head) (chicken.expand#defjam-error x)) `(##core#define-toplevel @@ -1096,7 +1096,7 @@ (let ((head (cadr form)) (body (caddr form))) (let ((name (or (getp head '##core#macro-alias) head))) - (##sys#register-export name (##sys#current-module))) + (chicken.internal.module#register-exportable-definition name)) (when (c (r 'define-syntax) head) (chicken.expand#defjam-error form)) `(##core#define-syntax ,head ,body)))))) @@ -1566,10 +1566,8 @@ (##sys#er-transformer (lambda (x r c) (let ((exps (chicken.internal.module#validate-exports - (strip-syntax (cdr x)) 'export)) - (mod (##sys#current-module))) - (when mod - (##sys#add-to-export-list mod exps)) + (strip-syntax (cdr x)) 'export))) + (chicken.internal.module#register-exports exps) '(##core#undefined))))) diff --git a/modules.scm b/modules.scm index 6b07e9d..38bee49 100644 --- a/modules.scm +++ b/modules.scm @@ -39,6 +39,7 @@ (find-module/import-library module-saved-environments register-compiled-module register-primitive-module decompose-import expand-import register-import validate-exports + register-exports register-exportable-definition ;; TODO: Expose this properly to the user in chicken.module? register-module-alias) @@ -154,8 +155,9 @@ (##sys#macro-environment (cdr saved))) (##sys#current-module mod)))))) -(define (##sys#add-to-export-list mod exps) - (let ((xl (module-export-list mod))) +(define (register-exports exps) + (and-let* ((mod (##sys#current-module)) + (xl (module-export-list mod))) (if (eq? xl #t) (let ((el (module-exist-list mod)) (me (##sys#macro-environment)) @@ -182,8 +184,8 @@ (and-let* ((a (assq sym senv))) (##sys#warn "redefinition of imported syntax binding" sym))) -(define (##sys#register-export sym mod) - (when mod +(define (register-exportable-definition sym) + (and-let* ((mod (##sys#current-module))) (let ((exp (or (eq? #t (module-export-list mod)) (find-export sym mod #t))) (ulist (module-undefined-list mod))) -- 2.1.4