~ 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