mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-01 12:20:26 +02:00
* emacs.scm (emacs-load): Added new parameter `module'.
* syncase.scm (putprop, getprop): Modified to use the object properties of the variable object corresponding to the symbol; This way we can ride on the mechanisms of the module system. Changed `builtin-variable' calls to `define-public' calls. Setup the hooks sc-expand and sc-interface. * boot-9.scm (sc-interface, sc-expand): New builtin variables. (set-current-module): Switch to and from sc-expand as scm:eval-transformer when going into and out of modules using syncase macros. (module-use!): Set scm:eval-transformer to sc-expand when adding the syncase interface.
This commit is contained in:
parent
1f355b4f35
commit
d43f8c9708
4 changed files with 82 additions and 40 deletions
|
@ -1,3 +1,20 @@
|
|||
Fri Sep 5 03:09:09 1997 Mikael Djurfeldt <mdj@mdj.nada.kth.se>
|
||||
|
||||
* emacs.scm (emacs-load): Added new parameter `module'.
|
||||
|
||||
* syncase.scm (putprop, getprop): Modified to use the object
|
||||
properties of the variable object corresponding to the symbol;
|
||||
This way we can ride on the mechanisms of the module system.
|
||||
Changed `builtin-variable' calls to `define-public' calls.
|
||||
Setup the hooks sc-expand and sc-interface.
|
||||
|
||||
* boot-9.scm (sc-interface, sc-expand): New builtin variables.
|
||||
(set-current-module): Switch to and from sc-expand as
|
||||
scm:eval-transformer when going into and out of modules using
|
||||
syncase macros.
|
||||
(module-use!): Set scm:eval-transformer to sc-expand when adding
|
||||
the syncase interface.
|
||||
|
||||
Thu Sep 4 14:57:04 1997 Mikael Djurfeldt <mdj@mdj.nada.kth.se>
|
||||
|
||||
* syncase.scm (putprop): Temporary fix which publishes new syntax
|
||||
|
|
|
@ -1622,15 +1622,27 @@
|
|||
;;
|
||||
(define the-module #f)
|
||||
|
||||
;; Syntax case macro support
|
||||
;;
|
||||
(define sc-interface #f)
|
||||
(define sc-expand #f)
|
||||
|
||||
;; set-current-module module
|
||||
;;
|
||||
;; set the current module as viewed by the normalizer.
|
||||
;;
|
||||
(define (set-current-module m)
|
||||
(let ((from-sc-module? (and the-module
|
||||
(memq sc-interface (module-uses the-module))))
|
||||
(to-sc-module? (and m
|
||||
(memq sc-interface (module-uses m)))))
|
||||
(set! the-module m)
|
||||
(if from-sc-module? (set! scm:eval-transformer #f))
|
||||
(if m
|
||||
(begin
|
||||
(set! *top-level-lookup-closure* (module-eval-closure the-module))
|
||||
(set! *top-level-lookup-closure* #f)))
|
||||
(if to-sc-module? (set! scm:eval-transformer sc-expand)))
|
||||
(set! *top-level-lookup-closure* #f))))
|
||||
|
||||
|
||||
;; current-module
|
||||
|
@ -1714,7 +1726,10 @@
|
|||
;;
|
||||
(define (module-use! module interface)
|
||||
(set-module-uses! module
|
||||
(cons interface (delq! interface (module-uses module)))))
|
||||
(cons interface (delq! interface (module-uses module))))
|
||||
(if (and (eq? interface sc-interface)
|
||||
(eq? module (current-module)))
|
||||
(set! scm:eval-transformer sc-expand)))
|
||||
|
||||
|
||||
;;; {Recursive Namespaces}
|
||||
|
|
|
@ -126,7 +126,7 @@
|
|||
(read-char port) ; Read final newline
|
||||
#t)))
|
||||
|
||||
(define (emacs-load filename linum colnum interactivep)
|
||||
(define (emacs-load filename linum colnum module interactivep)
|
||||
(set-port-filename! %%load-port filename)
|
||||
(set-port-line! %%load-port linum)
|
||||
(set-port-column! %%load-port colnum)
|
||||
|
|
|
@ -21,6 +21,31 @@
|
|||
|
||||
|
||||
|
||||
;;; Exported variables
|
||||
|
||||
(define-public install-global-transformer #f)
|
||||
(define-public syntax-dispatch #f)
|
||||
(define-public syntax-error #f)
|
||||
|
||||
(define-public bound-identifier=? #f)
|
||||
(define-public datum->syntax-object #f)
|
||||
(define-public define-syntax #f)
|
||||
(define-public fluid-let-syntax #f)
|
||||
(define-public free-identifier=? #f)
|
||||
(define-public generate-temporaries #f)
|
||||
(define-public identifier? #f)
|
||||
(define-public identifier-syntax #f)
|
||||
(define-public let-syntax #f)
|
||||
(define-public letrec-syntax #f)
|
||||
(define-public syntax #f)
|
||||
(define-public syntax-case #f)
|
||||
(define-public syntax-object->datum #f)
|
||||
(define-public syntax-rules #f)
|
||||
(define-public with-syntax #f)
|
||||
|
||||
|
||||
;;; Hooks needed by the syntax-case macro package
|
||||
|
||||
(define-public (void) *unspecified*)
|
||||
|
||||
(define andmap
|
||||
|
@ -49,32 +74,17 @@
|
|||
(list why what)
|
||||
'())))
|
||||
|
||||
(define (putprop s p v)
|
||||
(builtin-variable s)
|
||||
(set-symbol-property! s p v))
|
||||
(define getprop symbol-property)
|
||||
(define (putprop symbol key binding)
|
||||
(let* ((m (current-module))
|
||||
(v (or (module-variable m symbol)
|
||||
(module-make-local-var! m symbol))))
|
||||
(set-object-property! v key binding)))
|
||||
|
||||
(define-public sc-expand #f)
|
||||
(define-public install-global-transformer #f)
|
||||
(define-public syntax-dispatch #f)
|
||||
(define-public syntax-error #f)
|
||||
(define (getprop symbol key)
|
||||
(let* ((m (current-module))
|
||||
(v (module-variable m symbol)))
|
||||
(and v (object-property v key))))
|
||||
|
||||
;;;*fixme* builtin-variable
|
||||
(define-public bound-identifier=? #f)
|
||||
(define-public datum->syntax-object #f)
|
||||
(builtin-variable 'define-syntax)
|
||||
(builtin-variable 'fluid-let-syntax)
|
||||
(define-public free-identifier=? #f)
|
||||
(define-public generate-temporaries #f)
|
||||
(define-public identifier? #f)
|
||||
(builtin-variable 'identifier-syntax)
|
||||
(builtin-variable 'let-syntax)
|
||||
(builtin-variable 'letrec-syntax)
|
||||
(builtin-variable 'syntax)
|
||||
(builtin-variable 'syntax-case)
|
||||
(define-public syntax-object->datum #f)
|
||||
(builtin-variable 'syntax-rules)
|
||||
(builtin-variable 'with-syntax)
|
||||
|
||||
;;; Compatibility
|
||||
|
||||
|
@ -99,6 +109,9 @@
|
|||
(apply consumer (access-values result))
|
||||
(consumer result))))))
|
||||
|
||||
|
||||
;;; Load the preprocessed code
|
||||
|
||||
(let ((old-debug #f)
|
||||
(old-read #f))
|
||||
(dynamic-wind (lambda ()
|
||||
|
@ -112,17 +125,14 @@
|
|||
(debug-options old-debug)
|
||||
(read-options old-read))))
|
||||
|
||||
;; The followin line is necessary only if we start making changes
|
||||
|
||||
;;; The following line is necessary only if we start making changes
|
||||
;; (load-from-path "ice-9/psyntax.ss")
|
||||
|
||||
(define-public (eval-options . args)
|
||||
'())
|
||||
|
||||
;;; *fixme*
|
||||
(define-public (eval-enable x)
|
||||
(variable-set! (builtin-variable 'scm:eval-transformer) sc-expand))
|
||||
;;; Setup some hooks for the module system and the evaluator
|
||||
|
||||
(define-public (eval-disable x)
|
||||
(variable-set! (builtin-variable 'scm:eval-transformer) #f))
|
||||
|
||||
(eval-enable 'syncase)
|
||||
(variable-set! (builtin-variable 'sc-interface)
|
||||
(module-public-interface (current-module)))
|
||||
(variable-set! (builtin-variable 'sc-expand) sc-expand)
|
||||
(variable-set! (builtin-variable 'scm:eval-transformer) #f)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue