~ chicken-core (chicken-5) 1564a4600c69c0db6b9be97bbda518e725121f75


commit 1564a4600c69c0db6b9be97bbda518e725121f75
Author:     Peter Bex <peter.bex@xs4all.nl>
AuthorDate: Thu Aug 9 20:55:24 2012 +0200
Commit:     felix <felix@call-with-current-continuation.org>
CommitDate: Fri Aug 10 10:58:34 2012 +0200

    Fix implicit renaming to avoid using core aliases directly; this wreaks havoc when later the original symbol needs to be retrieved. This fixes #893, reported by Megane
    
    Signed-off-by: felix <felix@call-with-current-continuation.org>

diff --git a/expand.scm b/expand.scm
index 1e137b98..660d1fa5 100644
--- a/expand.scm
+++ b/expand.scm
@@ -877,7 +877,12 @@
 			 (lambda (name)
 			   (dd "STRIP SYNTAX ON " sym " ---> " name)
 			   name))
-			(else (dd "BUILTIN ALIAS:" renamed) renamed))))))
+                        ;; Rename builtin aliases so strip-syntax can still
+                        ;; access symbols as entered by the user
+			(else (let ((implicitly-renamed (rename sym)))
+                                (dd "BUILTIN ALIAS: " sym " as " renamed
+                                    " --> " implicitly-renamed)
+                                implicitly-renamed)))))))
        (if explicit-renaming?
 	   ;; Let the user handle renaming
 	   (handler form rename compare)
diff --git a/tests/syntax-tests.scm b/tests/syntax-tests.scm
index 833d1ed9..cc5f246c 100644
--- a/tests/syntax-tests.scm
+++ b/tests/syntax-tests.scm
@@ -1041,4 +1041,17 @@ take
      (lambda (e r c)
        `(,(r 'list) ,(r 'define))))))
 
-(f (eval '(begin (import renamed-macros) (renamed-macro-not-firstclassed))))
\ No newline at end of file
+(f (eval '(begin (import renamed-macros) (renamed-macro-not-firstclassed))))
+
+;; #893: implicitly renamed variables shouldn't be resolved to core
+;;       builtins (#%xyz), but go through a level of indirection, so
+;;       strip-syntax can still access the original symbol.
+(module rename-builtins
+ (strip-syntax-on-*)
+ (import chicken scheme)
+ (define-syntax strip-syntax-on-*
+   (ir-macro-transformer
+    (lambda (e r c) '(quote *)))))
+
+(import rename-builtins)
+(assert (eq? '* (strip-syntax-on-*)))
\ No newline at end of file
Trap