~ chicken-core (chicken-5) cc07beaa06865f7b140dcf3ee0ab1365319ac47b
commit cc07beaa06865f7b140dcf3ee0ab1365319ac47b
Author: Evan Hanson <evhan@foldling.org>
AuthorDate: Fri Feb 5 10:24:38 2016 +1300
Commit: Evan Hanson <evhan@foldling.org>
CommitDate: Tue Mar 8 22:52:35 2016 +1300
Some fixes after load-extension signature changes
Require that extension IDs be symbols, and make sure it's only ever
called with a single library ID argument.
diff --git a/core.scm b/core.scm
index 3523b25c..10c405d5 100644
--- a/core.scm
+++ b/core.scm
@@ -665,7 +665,7 @@
,(walk (caddr x) e se dest ldest h ln)))
((##core#require-for-syntax)
- (apply ##sys#load-extension (cdr x))
+ (for-each ##sys#load-extension (cdr x))
'(##core#undefined))
((##core#require)
diff --git a/eval.scm b/eval.scm
index 27178f56..3ef9fdfb 100644
--- a/eval.scm
+++ b/eval.scm
@@ -702,14 +702,14 @@
(compile `(##sys#provide (##core#quote ,(cadr x))) e #f tf cntr se)]
[(##core#require-for-syntax)
- (let ((ids (cdr x)))
- (apply ##sys#load-extension ids)
- (let ((rs (lookup-runtime-requirements ids)))
- (compile
- (if (null? rs)
- '(##core#undefined)
- `(##sys#load-extension ,@(map (lambda (x) `(##core#quote ,x)) rs)))
- e #f tf cntr se) ) ) ]
+ (let ((ids (strip-syntax (cdr x))))
+ (for-each ##sys#load-extension ids)
+ (compile
+ `(##core#begin
+ ,@(map (lambda (x)
+ `(##sys#load-extension (##core#quote ,x)))
+ (lookup-runtime-requirements ids)))
+ e #f tf cntr se))]
[(##core#require)
(compile
@@ -1219,8 +1219,6 @@
(define (##sys#load-extension id #!optional loc)
(define (fail message)
(##sys#error loc message id))
- (cond ((string? id) (set! id (string->symbol id)))
- (else (##sys#check-symbol id loc)))
(cond ((##sys#provided? id))
((memq id core-units)
(or (load-library-0 id #f)
@@ -1238,6 +1236,7 @@
(##sys#load-extension id 'load-extension))
(define (require . ids)
+ (for-each (cut ##sys#check-symbol <> 'require) ids)
(for-each (cut ##sys#load-extension <> 'require) ids))
(define (provide . ids)
@@ -1245,10 +1244,7 @@
(for-each (cut ##sys#provide <>) ids))
(define (provided? . ids)
- (let loop ((ids ids))
- (or (null? ids)
- (and (##sys#provided? (car ids))
- (loop (cdr ids))))))
+ (every ##sys#provided? ids))
(define extension-information/internal
(let ([with-input-from-file with-input-from-file]
Trap