diff --git a/ice-9/ChangeLog b/ice-9/ChangeLog index e40d8a185..903447194 100644 --- a/ice-9/ChangeLog +++ b/ice-9/ChangeLog @@ -1,3 +1,13 @@ +1998-06-07 Mikael Djurfeldt + + * boot-9.scm (use-syntax): Turned into a macro inorder to be + similar in use to `use-modules'. + Example: (use-syntax (ice-9 syncase)) will 1. load the module + (ice-9 syncase), and, 2. install the procedure `syncase' as eval + transformer. + (internal-use-syntax): New procedure. + (process-define-module): Use `internal-use-syntax'. + 1998-05-19 Mikael Djurfeldt * Makefile.am (ice9_sources): Add emacs.scm. diff --git a/ice-9/boot-9.scm b/ice-9/boot-9.scm index 6e38717e9..7e768899b 100644 --- a/ice-9/boot-9.scm +++ b/ice-9/boot-9.scm @@ -1861,6 +1861,10 @@ (define %autoloader-developer-mode #t) +(define (internal-use-syntax transformer) + (set-module-transformer! (current-module) transformer) + (set! scm:eval-transformer transformer)) + (define (process-define-module args) (let* ((module-id (car args)) (module (resolve-module module-id #f)) @@ -1893,11 +1897,9 @@ (if (not interface) (error "missing interface for use-module" used-module)) (if (eq? keyword 'use-syntax) - (let ((transformer (module-ref interface - (car (last-pair used-name)) - #f))) - (set-module-transformer! module transformer) - (set! scm:eval-transformer transformer))) + (internal-use-syntax + (module-ref interface (car (last-pair used-name)) + #f))) (loop (cddr kws) (cons interface reversed-interfaces))))) (else (error "unrecognized defmodule argument" kws)))))) @@ -2717,9 +2719,12 @@ (defmacro use-modules modules `(process-use-modules ',modules)) -(define (use-syntax transformer) - (set-module-transformer! (current-module) transformer) - (set! scm:eval-transformer transformer)) +(defmacro use-syntax (spec) + (if (pair? spec) + `(begin + (process-use-modules ',(list spec)) + (internal-use-syntax ,(car (last-pair spec)))) + `(internal-use-syntax ,spec))) (define define-private define)