Associate #:replace info with modules, not variables

* doc/ref/api-modules.texi (Creating Guile Modules): Document
  #:re-export-and-replace.
* module/ice-9/boot-9.scm (module-replacements): New module field.
  (make-module, make-autoload-interface): Initialize replacements to an
  empty hash table.
  (resolve-interface): Propagate replacement info when making custom
  interfaces.
  (define-module): Parse a #:re-export-and-replace keyword arg.
  (define-module*): Handle #:re-export-and-replace.
  (module-export!, module-re-export!): Add a keyword arg to indicate
  whether to replace or not.
  (module-replace!): Call module-export! with #:replace? #t.
  (duplicate-handlers): Update replace duplicate handler to look for
  replacement info on the interfaces.
* module/srfi/srfi-18.scm (srfi):
* module/srfi/srfi-34.scm (srfi): Update to #:re-export-and-replace
  raise-continuable as raise.
This commit is contained in:
Andy Wingo 2019-11-29 11:51:29 +01:00
commit cf08dbdc18
4 changed files with 72 additions and 60 deletions

View file

@ -354,6 +354,11 @@ in the module body.
The @code{#:duplicates} (see below) provides fine-grain control about
duplicate binding handling on the module-user side.
@item #:re-export-and-replace @var{list}
@cindex re-export-and-replace
Like @code{#:re-export}, but also marking the bindings as replacements
in the sense of @code{#:replace}.
@item #:version @var{list}
@cindex module version
Specify a version for the module in the form of @var{list}, a list of