summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Grabmüller <mgrabmue@cs.tu-berlin.de>2001-05-23 05:08:17 +0000
committerMartin Grabmüller <mgrabmue@cs.tu-berlin.de>2001-05-23 05:08:17 +0000
commitb9b8f9da6020bbb18a0478d980ed8b291f6ee168 (patch)
tree998de361eebcf43bd1d81ec8ab31111b4961e8f1
parent1b2f40b9f1b5950f014ad44943e081fc8b004970 (diff)
downloadguile-b9b8f9da6020bbb18a0478d980ed8b291f6ee168.tar.gz
* boot-9.scm (%cond-expand-table): New hash table mapping modules
to feature lists. (cond-expand): Use feature information associated with modules. * boot-9.scm (use-srfis): Do not extend the srfi-0 feature list. (cond-expand-provide): New procedure.
-rw-r--r--ice-9/ChangeLog11
-rw-r--r--ice-9/boot-9.scm26
2 files changed, 33 insertions, 4 deletions
diff --git a/ice-9/ChangeLog b/ice-9/ChangeLog
index 39ad3c82f..fda2e46f7 100644
--- a/ice-9/ChangeLog
+++ b/ice-9/ChangeLog
@@ -1,3 +1,14 @@
+2001-05-23 Martin Grabmueller <mgrabmue@cs.tu-berlin.de>
+
+ * boot-9.scm (%cond-expand-table): New hash table mapping modules
+ to feature lists.
+ (cond-expand): Use feature information associated with modules.
+
+2001-05-21 Martin Grabmueller <mgrabmue@cs.tu-berlin.de>
+
+ * boot-9.scm (use-srfis): Do not extend the srfi-0 feature list.
+ (cond-expand-provide): New procedure.
+
2001-05-22 Marius Vollmer <mvo@zagadka.ping.de>
* boot-9.scm (define-module): Return the new module.
diff --git a/ice-9/boot-9.scm b/ice-9/boot-9.scm
index cf38dcaed..884b7f3c3 100644
--- a/ice-9/boot-9.scm
+++ b/ice-9/boot-9.scm
@@ -2723,10 +2723,24 @@
;;;
;;; Remember to update the features list when adding more SRFIs.
-(define cond-expand-features
+(define %cond-expand-features
;; Adjust the above comment when changing this.
'(guile r5rs srfi-0))
+;; This table maps module public interfaces to the list of features.
+;;
+(define %cond-expand-table (make-hash-table 31))
+
+;; Add one or more features to the `cond-expand' feature list of the
+;; module `module'.
+;;
+(define (cond-expand-provide module features)
+ (let ((mod (module-public-interface module)))
+ (and mod
+ (hashq-set! %cond-expand-table mod
+ (append (hashq-ref %cond-expand-table mod '())
+ features)))))
+
(define-macro (cond-expand clause . clauses)
(let ((clauses (cons clause clauses))
@@ -2737,7 +2751,13 @@
(lambda (clause)
(cond
((symbol? clause)
- (memq clause cond-expand-features))
+ (or (memq clause %cond-expand-features)
+ (let lp ((uses (module-uses (current-module))))
+ (if (pair? uses)
+ (or (memq clause
+ (hashq-ref %cond-expand-table (car uses) '()))
+ (lp (cdr uses)))
+ #f))))
((pair? clause)
(cond
((eq? 'and (car clause))
@@ -2793,8 +2813,6 @@
(string-append "srfi-" (number->string (car s)))))
(mod-i (resolve-interface (list 'srfi srfi))))
(module-use! (current-module) mod-i)
- (set! cond-expand-features
- (append cond-expand-features (list srfi)))
(lp (cdr s))))))