~ chicken-core (chicken-5) f0770c330de183017c0d4a6b17ab135e6f42af67
commit f0770c330de183017c0d4a6b17ab135e6f42af67
Author: LemonBoy <thatlemon@gmail.com>
AuthorDate: Mon May 15 20:19:37 2017 +0200
Commit: Peter Bex <peter@more-magic.net>
CommitDate: Sat May 27 15:19:48 2017 +0200
Keep the module module-defined-syntax-list updated
When a macro is shadowed via a set! it is also removed from the
macro-environment but not from the current module's export list. This
leads to a compile-time error during the module finalization phase.
Signed-off-by: Evan Hanson <evhan@foldling.org>
Signed-off-by: Peter Bex <peter@more-magic.net>
diff --git a/core.scm b/core.scm
index 7c8a2f45..e73d207c 100644
--- a/core.scm
+++ b/core.scm
@@ -1115,7 +1115,9 @@
(warning
(sprintf "~aassignment to syntax `~S'"
(if ln (sprintf "(~a) - " ln) "") var0))
- (when undefine-shadowed-macros (##sys#undefine-macro! var0)))
+ (when undefine-shadowed-macros
+ (##sys#undefine-macro! var0)
+ (##sys#unregister-syntax-export var0 (##sys#current-module))))
((assq var0 (##sys#current-environment))
(warning
(sprintf "~aassignment to imported value binding `~S'"
diff --git a/modules.scm b/modules.scm
index a5680b2a..4470a1b6 100644
--- a/modules.scm
+++ b/modules.scm
@@ -224,6 +224,12 @@
mod
(cons (cons sym val) (module-defined-syntax-list mod))))))
+(define (##sys#unregister-syntax-export sym mod)
+ (when mod
+ (set-module-defined-syntax-list!
+ mod
+ (delete sym (module-defined-syntax-list mod) (lambda (x y) (eq? x (car y)))))))
+
(define (register-undefined sym mod where)
(when mod
(let ((ul (module-undefined-list mod)))
Trap