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

* boot-9.scm: Doc fixes.

(make-module): Rework for readability.
(make-root-module, make-scm-module): USES argument to make-module
should be '(), not #f.
This commit is contained in:
Jim Blandy 1996-10-16 02:18:33 +00:00
parent d065b65fdb
commit 8b718458f3

View file

@ -1262,65 +1262,53 @@
;; bindings that would otherwise not be found locally in the module. ;; bindings that would otherwise not be found locally in the module.
;; ;;
(define module-type (define module-type
(make-record-type 'module '(obarray uses binder eval-thunk name kind) %print-module)) (make-record-type 'module '(obarray uses binder eval-thunk name kind)
%print-module))
;; make-module &opt size uses ;; make-module &opt size uses binder
;; ;;
;; Create a new module, perhaps with a particular size of obarray ;; Create a new module, perhaps with a particular size of obarray,
;; or initial uses list. ;; initial uses list, or binding procedure.
;; ;;
(define module-constructor (record-constructor module-type))
(define make-module (define make-module
(lambda args (lambda args
(let* ((size 1021)
(uses '())
(binder #f)
(answer #f)
(eval-thunk
(lambda (symbol define?)
(if define?
(module-make-local-var! answer symbol)
(module-variable answer symbol)))))
(if (> (length args) 0) (define (parse-arg index default)
(begin (if (> (length args) index)
(set! size (or (car args) size)) (list-ref args index)
(set! args (cdr args)))) default))
(if (> (length args) 0) (if (> (length args) 3)
(begin (error "Too many args to make-module." args))
(set! uses (or (car args) uses))
(set! args (cdr args))))
(if (> (length args) 0) (let ((size (parse-arg 0 1021))
(begin (uses (parse-arg 1 '()))
(set! binder (or (car args) binder)) (binder (parse-arg 2 #f)))
(set! args (cdr args))))
(if (not (null? args))
(error "Too many args to make-module." args))
(if (not (integer? size)) (if (not (integer? size))
(error "Illegal size to make-module." size)) (error "Illegal size to make-module." size))
(if (not (and (list? uses)
(and (list? uses) (and-map module? uses)))
(or (and-map module? uses) (error "Incorrect use list." uses))
(error "Incorrect use list." uses)))
(if (and binder (not (procedure? binder))) (if (and binder (not (procedure? binder)))
(error (error
"Lazy-binder expected to be a procedure or #f." binder)) "Lazy-binder expected to be a procedure or #f." binder))
(set! answer (let ((module (module-constructor (make-vector size '())
(module-constructor (make-vector size '()) uses binder #f #f #f)))
uses
binder
eval-thunk
#f
#f))
answer)))
;; We can't pass this as an argument to module-constructor,
;; because we need it to close over a pointer to the module
;; itself.
(set-module-eval-thunk! module
(lambda (symbol define?)
(if define?
(module-make-local-var! module symbol)
(module-variable module symbol))))
module))))
(define module-constructor (record-constructor module-type))
(define module-obarray (record-accessor module-type 'obarray)) (define module-obarray (record-accessor module-type 'obarray))
(define set-module-obarray! (record-modifier module-type 'obarray)) (define set-module-obarray! (record-modifier module-type 'obarray))
(define module-uses (record-accessor module-type 'uses)) (define module-uses (record-accessor module-type 'uses))
@ -1335,6 +1323,7 @@
(define set-module-kind! (record-modifier module-type 'kind)) (define set-module-kind! (record-modifier module-type 'kind))
(define module? (record-predicate module-type)) (define module? (record-predicate module-type))
(define (eval-in-module exp module) (define (eval-in-module exp module)
(eval2 exp (module-eval-thunk module))) (eval2 exp (module-eval-thunk module)))
@ -1607,7 +1596,7 @@
bi)))) bi))))
(define (make-root-module) (define (make-root-module)
(make-module 1019 #f root-module-thunk)) (make-module 1019 '() root-module-thunk))
;; make-scm-module ;; make-scm-module
@ -1620,7 +1609,7 @@
;; ;;
(define (make-scm-module) (define (make-scm-module)
(make-module 1019 #f (make-module 1019 '()
(lambda (m s define?) (lambda (m s define?)
(let ((bi (and (symbol-interned? #f s) (let ((bi (and (symbol-interned? #f s)
(builtin-variable s)))) (builtin-variable s))))
@ -2862,21 +2851,24 @@
;;;; ;;;;
;;; local-definitions-in root name ;;; local-definitions-in root name
;;; Returns a list of names defined locally in the named subdirectory of root. ;;; Returns a list of names defined locally in the named
;;; subdirectory of root.
;;; definitions-in root name ;;; definitions-in root name
;;; Returns a list of all names defined in the named subdirectory of root. ;;; Returns a list of all names defined in the named
;;; The list includes alll locally defined names as well as all names inherited ;;; subdirectory of root. The list includes alll locally
;;; from a member of a use-list. ;;; defined names as well as all names inherited from a
;;; member of a use-list.
;;; ;;;
;;; A convenient interface for examining the nature of things: ;;; A convenient interface for examining the nature of things:
;;; ;;;
;;; ls . various-names ;;; ls . various-names
;;; ;;;
;;; With just one argument, interpret that argument as the name of a subdirectory ;;; With just one argument, interpret that argument as the
;;; of the current module and return a list of names defined there. ;;; name of a subdirectory of the current module and
;;; return a list of names defined there.
;;; ;;;
;;; With more than one argument, still compute subdirectory lists, but ;;; With more than one argument, still compute
;;; return a list: ;;; subdirectory lists, but return a list:
;;; ((<subdir-name> . <names-defined-there>) ;;; ((<subdir-name> . <names-defined-there>)
;;; (<subdir-name> . <names-defined-there>) ;;; (<subdir-name> . <names-defined-there>)
;;; ...) ;;; ...)
@ -2896,7 +2888,8 @@
m m
(reduce union (reduce union
(cons (local-definitions-in m '()) (cons (local-definitions-in m '())
(map (lambda (m2) (definitions-in m2 '())) (module-uses m))))))) (map (lambda (m2) (definitions-in m2 '()))
(module-uses m)))))))
(define-public (ls . various-refs) (define-public (ls . various-refs)
(and various-refs (and various-refs