diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2023-07-17 20:19:17 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2023-07-17 20:19:17 -0700 |
commit | a1b37dbbff94493db56b600338b5b76ba2ae2313 (patch) | |
tree | da04b7c71caed3e23b008bbb892e106ce609e501 | |
parent | ef239fb96066c558fd8965dce8ab923162f5519e (diff) | |
download | txr-a1b37dbbff94493db56b600338b5b76ba2ae2313.tar.gz txr-a1b37dbbff94493db56b600338b5b76ba2ae2313.tar.bz2 txr-a1b37dbbff94493db56b600338b5b76ba2ae2313.zip |
bug: compiled code keeps seeing var clobbered by symacro.
* eval.c (op_defsymacro, rt_defsymacro): We must call
vm_invalidate_binding so the VM forgets a cached binding
for this variable.
* tests/019/redef.tl: Test added.
-rw-r--r-- | eval.c | 2 | ||||
-rw-r--r-- | tests/019/redef.tl | 4 |
2 files changed, 6 insertions, 0 deletions
@@ -2162,6 +2162,7 @@ static val op_defsymacro(val form, val env) if (!opt_compat || opt_compat > 143) remhash(special, sym); sethash(top_smb, sym, second(args)); + vm_invalidate_binding(sym); return sym; } @@ -2171,6 +2172,7 @@ static val rt_defsymacro(val sym, val def) remhash(top_vb, sym); remhash(special, sym); sethash(top_smb, sym, def); + vm_invalidate_binding(sym); return sym; } diff --git a/tests/019/redef.tl b/tests/019/redef.tl index 036fb8c9..943b5c3a 100644 --- a/tests/019/redef.tl +++ b/tests/019/redef.tl @@ -17,3 +17,7 @@ (defparml foov :barv) (test (bar) (:bar :barv)) + +(defsymacro foov 42) + +(test (bar) :error) |