diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2019-08-28 07:19:34 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2019-08-28 07:19:34 -0700 |
commit | 31c42db88657d05b1f1347beeb6f4db53cf134bb (patch) | |
tree | fa9a0300fd9ecc8e7b8c53ffd66367e60c404524 /struct.c | |
parent | 2aac8b96d028bfda879da660062ee58aae0b47be (diff) | |
download | txr-31c42db88657d05b1f1347beeb6f4db53cf134bb.tar.gz txr-31c42db88657d05b1f1347beeb6f4db53cf134bb.tar.bz2 txr-31c42db88657d05b1f1347beeb6f4db53cf134bb.zip |
trace: bug: redef of traced method resurrects old.
When a method which is traced is redefined, a warning message
is correctly issued and the trace is removed. But the removal
is done in the wrong order and ends up restoring the old
function, clobbering the new definition.
* struct.c (static_slot_ensure): Move the trace_check before
the call to static_slot_ens_rec, so installation of the new
method takes place after the trace is removed from the old
one.
Diffstat (limited to 'struct.c')
-rw-r--r-- | struct.c | 6 |
1 files changed, 3 insertions, 3 deletions
@@ -1246,15 +1246,15 @@ val static_slot_ensure(val stype, val sym, val newval, val no_error_p) uw_throwf(error_s, lit("~a: ~s isn't a valid slot name"), self, sym, nao); - no_error_p = default_null_arg(no_error_p); - res = static_slot_ens_rec(stype, sym, newval, no_error_p, self, 0); - if (trace_loaded) { struct struct_type *st = stype_handle(&stype, self); val name = list(meth_s, st->name, sym, nao); trace_check(name); } + no_error_p = default_null_arg(no_error_p); + res = static_slot_ens_rec(stype, sym, newval, no_error_p, self, 0); + return res; } |