1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-30 00:40:20 +02:00

* boot-9.scm (define-public): Changed to accomodate Hobbit.

This commit is contained in:
Jim Blandy 1997-07-11 05:13:59 +00:00
parent 8cedfb2e6c
commit 3c5af9ef9b

View file

@ -2488,28 +2488,31 @@
(error "bad syntax" (list 'define-public args))) (error "bad syntax" (list 'define-public args)))
(define (defined-name n) (define (defined-name n)
(cond (cond
((symbol? n) n) ((symbol? n) n)
((pair? n) (defined-name (car n))) ((pair? n) (defined-name (car n)))
(else (syntax)))) (else (syntax))))
(cond (cond
((null? args) (syntax)) ((null? args) (syntax))
(#t (let ((name (defined-name (car args)))) (#t (let ((name (defined-name (car args))))
`(begin `(begin
(let ((public-i (module-public-interface (current-module)))) (let ((public-i (module-public-interface (current-module))))
;; Make sure there is a local variable: ;; Make sure there is a local variable:
;; ;;
(module-define! (current-module) (module-define! (current-module)
',name ',name
(module-ref (current-module) ',name #f)) (module-ref (current-module) ',name #f))
;; Make sure that local is exported: ;; Make sure that local is exported:
;; ;;
(module-add! public-i ',name (module-variable (current-module) ',name))) (module-add! public-i ',name
(module-variable (current-module) ',name)))
;; Now (re)define the var normally. ;; Now (re)define the var normally. Bernard URBAN
;; ;; suggests we use eval here to accomodate Hobbit; it lets
(define-private ,@ args)))))) ;; the interpreter handle the define-private form, which
;; Hobbit can't digest.
(eval '(define-private ,@ args)))))))