mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-15 08:10:17 +02:00
Support for renaming bindings on module export.
* module/ice-9/boot-9.scm (module-export!, module-replace!) (module-re-export!): Allow members of export list to be pairs, mapping internal names to external ones. * doc/ref/api-modules.texi (Creating Guile Modules): Update documentation for `#:export', `#:export-syntax', `#:replace', `#:re-export', `#:re-export-syntax', `export', and `re-export' to reflect new format for arguments.
This commit is contained in:
parent
820f33aaed
commit
78c22f5edc
2 changed files with 43 additions and 31 deletions
|
@ -2968,16 +2968,20 @@ module '(ice-9 q) '(make-q q-length))}."
|
|||
(define (module-export! m names)
|
||||
(let ((public-i (module-public-interface m)))
|
||||
(for-each (lambda (name)
|
||||
(let ((var (module-ensure-local-variable! m name)))
|
||||
(module-add! public-i name var)))
|
||||
(let* ((internal-name (if (pair? name) (car name) name))
|
||||
(external-name (if (pair? name) (cdr name) name))
|
||||
(var (module-ensure-local-variable! m internal-name)))
|
||||
(module-add! public-i external-name var)))
|
||||
names)))
|
||||
|
||||
(define (module-replace! m names)
|
||||
(let ((public-i (module-public-interface m)))
|
||||
(for-each (lambda (name)
|
||||
(let ((var (module-ensure-local-variable! m name)))
|
||||
(let* ((internal-name (if (pair? name) (car name) name))
|
||||
(external-name (if (pair? name) (cdr name) name))
|
||||
(var (module-ensure-local-variable! m internal-name)))
|
||||
(set-object-property! var 'replace #t)
|
||||
(module-add! public-i name var)))
|
||||
(module-add! public-i external-name var)))
|
||||
names)))
|
||||
|
||||
;; Re-export a imported variable
|
||||
|
@ -2985,13 +2989,15 @@ module '(ice-9 q) '(make-q q-length))}."
|
|||
(define (module-re-export! m names)
|
||||
(let ((public-i (module-public-interface m)))
|
||||
(for-each (lambda (name)
|
||||
(let ((var (module-variable m name)))
|
||||
(let* ((internal-name (if (pair? name) (car name) name))
|
||||
(external-name (if (pair? name) (cdr name) name))
|
||||
(var (module-variable m internal-name)))
|
||||
(cond ((not var)
|
||||
(error "Undefined variable:" name))
|
||||
((eq? var (module-local-variable m name))
|
||||
(error "re-exporting local variable:" name))
|
||||
(error "Undefined variable:" internal-name))
|
||||
((eq? var (module-local-variable m internal-name))
|
||||
(error "re-exporting local variable:" internal-name))
|
||||
(else
|
||||
(module-add! public-i name var)))))
|
||||
(module-add! public-i external-name var)))))
|
||||
names)))
|
||||
|
||||
(defmacro export names
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue