mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-12 23:00:22 +02:00
* boot-9.scm (process-define-module): Added new specifier
:autoload MODULENAME BINDINGS to the define-module form. The autoload specifier tells the module system to load the module MODULENAME at the first occasion that any variable with its name among BINDINGS is referenced. (make-autoload-interface): New procedure: Constructs a stand-in for the public interface for the module to be autoloaded.
This commit is contained in:
parent
3b3085c692
commit
7122506062
2 changed files with 33 additions and 0 deletions
|
@ -1,3 +1,13 @@
|
||||||
|
1998-12-02 Mikael Djurfeldt <mdj@barbara.nada.kth.se>
|
||||||
|
|
||||||
|
* boot-9.scm (process-define-module): Added new specifier
|
||||||
|
:autoload MODULENAME BINDINGS to the define-module form.
|
||||||
|
The autoload specifier tells the module system to load the module
|
||||||
|
MODULENAME at the first occasion that any variable with its name
|
||||||
|
among BINDINGS is referenced.
|
||||||
|
(make-autoload-interface): New procedure: Constructs a stand-in
|
||||||
|
for the public interface for the module to be autoloaded.
|
||||||
|
|
||||||
1998-12-01 Mikael Djurfeldt <mdj@mdj.nada.kth.se>
|
1998-12-01 Mikael Djurfeldt <mdj@mdj.nada.kth.se>
|
||||||
|
|
||||||
* boot-9.scm (*suppress-old-style-hook-warning*): Set this to #t
|
* boot-9.scm (*suppress-old-style-hook-warning*): Set this to #t
|
||||||
|
|
|
@ -1989,9 +1989,31 @@
|
||||||
#f)))
|
#f)))
|
||||||
(loop (cddr kws)
|
(loop (cddr kws)
|
||||||
(cons interface reversed-interfaces)))))))
|
(cons interface reversed-interfaces)))))))
|
||||||
|
((autoload)
|
||||||
|
(if (not (and (pair? (cdr kws)) (pair? (cddr kws))))
|
||||||
|
(error "unrecognized defmodule argument" kws))
|
||||||
|
(loop (cdddr kws)
|
||||||
|
(cons (make-autoload-interface module
|
||||||
|
(cadr kws)
|
||||||
|
(caddr kws))
|
||||||
|
reversed-interfaces)))
|
||||||
(else
|
(else
|
||||||
(error "unrecognized defmodule argument" kws))))))
|
(error "unrecognized defmodule argument" kws))))))
|
||||||
module))
|
module))
|
||||||
|
|
||||||
|
;;; {Autoload}
|
||||||
|
|
||||||
|
(define (make-autoload-interface module name bindings)
|
||||||
|
(let ((b (lambda (a sym definep)
|
||||||
|
(and (memq sym bindings)
|
||||||
|
(let ((i (module-public-interface (resolve-module name))))
|
||||||
|
(if (not i)
|
||||||
|
(error "missing interface for module" name))
|
||||||
|
;; Replace autoload-interface with interface
|
||||||
|
(set-car! (memq a (module-uses module)) i)
|
||||||
|
(module-local-variable i sym))))))
|
||||||
|
(module-constructor #() #f b #f #f name 'autoload)))
|
||||||
|
|
||||||
|
|
||||||
;;; {Autoloading modules}
|
;;; {Autoloading modules}
|
||||||
|
|
||||||
|
@ -2038,6 +2060,7 @@
|
||||||
(lambda () (set-autoloaded! dir-hint name didit)))
|
(lambda () (set-autoloaded! dir-hint name didit)))
|
||||||
didit))))
|
didit))))
|
||||||
|
|
||||||
|
|
||||||
;;; Dynamic linking of modules
|
;;; Dynamic linking of modules
|
||||||
|
|
||||||
;; Initializing a module that is written in C is a two step process.
|
;; Initializing a module that is written in C is a two step process.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue