~ chicken-core (chicken-5) 315fc3698727803ad74dd424b365d5ae1c56d5cf
commit 315fc3698727803ad74dd424b365d5ae1c56d5cf
Author: Peter Bex <peter.bex@xs4all.nl>
AuthorDate: Thu Jun 23 22:28:56 2011 +0200
Commit: Peter Bex <peter.bex@xs4all.nl>
CommitDate: Thu Jun 23 22:28:56 2011 +0200
Peter, whenever you change something, check to see if *all* occurrences of the same kind of thing are handled!
diff --git a/expand.scm b/expand.scm
index ef6c10ae..6747135a 100644
--- a/expand.scm
+++ b/expand.scm
@@ -77,9 +77,10 @@
(char=? #\# (##core#inline "C_subchar" str 0)))))
var
(let* ((alias (gensym var))
- (ua (or (lookup var se) var)))
+ (ua (or (lookup var se) var))
+ (rn (or (getp var '##core#real-name) var)))
(putp alias '##core#macro-alias ua)
- (putp alias '##core#real-name var)
+ (putp alias '##core#real-name rn)
(dd "aliasing " alias " (real: " var ") to "
(if (pair? ua)
'<macro>
@@ -836,17 +837,17 @@
((not (symbol? sym)) sym)
(else ; Code stolen from ##sys#strip-syntax
(let ((renamed (lookup sym se) ) )
- (cond ((getp sym '##core#real-name) =>
- (lambda (name)
- (dd "STRIP SYNTAX ON " sym " ---> " name)
- name))
- ((assq-reverse sym renv) =>
+ (cond ((assq-reverse sym renv) =>
(lambda (a)
(dd "REVERSING RENAME: " sym " --> " (car a)) (car a)))
((not renamed)
(dd "IMPLICITLY RENAMED: " sym) (rename sym))
((pair? renamed)
(dd "MACRO: " sym) (rename sym))
+ ((getp sym '##core#real-name) =>
+ (lambda (name)
+ (dd "STRIP SYNTAX ON " sym " ---> " name)
+ name))
(else (dd "BUILTIN ALIAS:" renamed) renamed))))))
(if explicit-renaming?
;; Let the user handle renaming
diff --git a/tests/syntax-tests.scm b/tests/syntax-tests.scm
index b01de67f..969420cf 100644
--- a/tests/syntax-tests.scm
+++ b/tests/syntax-tests.scm
@@ -208,6 +208,18 @@
(t "x" (symbol->string (c)))
+(define-syntax c2
+ (syntax-rules ()
+ [(_)
+ (let ([x 10])
+ (let-syntax ([z (syntax-rules ()
+ [(_) (let-syntax ([w (syntax-rules ()
+ [(_) (quote x)])])
+ (w))])])
+ (z)))]))
+
+(t "x" (symbol->string (c2)))
+
;;; strip-syntax on renamed module identifiers, as well as core identifiers
(module foo (bar)
(import chicken scheme)
Trap