From f714ca8e67d28444875cf0e9ce8934e2b5d70b73 Mon Sep 17 00:00:00 2001 From: Mikael Djurfeldt Date: Mon, 4 May 1998 11:44:13 +0000 Subject: [PATCH] * boot-9.scm (process-define-module): Added keyword use-syntax. --- ice-9/ChangeLog | 4 ++++ ice-9/boot-9.scm | 51 +++++++++++++++++++++++++++--------------------- 2 files changed, 33 insertions(+), 22 deletions(-) diff --git a/ice-9/ChangeLog b/ice-9/ChangeLog index e0347bfe8..610756417 100644 --- a/ice-9/ChangeLog +++ b/ice-9/ChangeLog @@ -1,3 +1,7 @@ +1998-04-22 Mikael Djurfeldt + + * boot-9.scm (process-define-module): Added keyword use-syntax. + 1998-04-19 Mikael Djurfeldt * nonblocking.scm: Removed. libguile is now inherently diff --git a/ice-9/boot-9.scm b/ice-9/boot-9.scm index f92ae0b97..ae073261e 100644 --- a/ice-9/boot-9.scm +++ b/ice-9/boot-9.scm @@ -1872,28 +1872,35 @@ (for-each (lambda (interface) (module-use! module interface)) reversed-interfaces) - (case (cond ((keyword? (car kws)) - (keyword->symbol (car kws))) - ((and (symbol? (car kws)) - (eq? (string-ref (car kws) 0) #\:)) - (string->symbol (substring (car kws) 1))) - (else #f)) - ((use-module) - (if (not (pair? (cdr kws))) - (error "unrecognized defmodule argument" kws)) - (let* ((used-name (cadr kws)) - (used-module (resolve-module used-name))) - (if (not (module-ref used-module '%module-public-interface #f)) - (begin - ((if %autoloader-developer-mode warn error) - "no code for module" (module-name used-module)) - (beautify-user-module! used-module))) - (let ((interface (module-public-interface used-module))) - (if (not interface) - (error "missing interface for use-module" used-module)) - (loop (cddr kws) (cons interface reversed-interfaces))))) - (else - (error "unrecognized defmodule argument" kws))))) + (let ((keyword (cond ((keyword? (car kws)) + (keyword->symbol (car kws))) + ((and (symbol? (car kws)) + (eq? (string-ref (car kws) 0) #\:)) + (string->symbol (substring (car kws) 1))) + (else #f)))) + (case keyword + ((use-module use-syntax) + (if (not (pair? (cdr kws))) + (error "unrecognized defmodule argument" kws)) + (let* ((used-name (cadr kws)) + (used-module (resolve-module used-name))) + (if (not (module-ref used-module '%module-public-interface #f)) + (begin + ((if %autoloader-developer-mode warn error) + "no code for module" (module-name used-module)) + (beautify-user-module! used-module))) + (let ((interface (module-public-interface used-module))) + (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))) + (loop (cddr kws) (cons interface reversed-interfaces))))) + (else + (error "unrecognized defmodule argument" kws)))))) module)) ;;; {Autoloading modules} -- 2.20.1