Description: |
(text/x-fossil-wiki)
At least up until commit [2e5531f5f88d047f], in the following script, the
command being deleted is succesfully called during first trace, but not during
the second trace. The difference is that in the second script "p1" is not
resolved even though ns2, which is in the process of being deleted, is in the
path. The namespace is not yet fully deleted though, and p1 should still exist
because the trace on it is still in progress. The success of the first trigger
illustrates that the name still exists and that the routine can still be
accessed using a fully-qualified name. Likewise, "p1" should be succesfully
resolved during the second trigger.
A related test case, namespace-51.13, includes an old comment asking whether
the outcome of the test should instead be what is proposed here.
<code><verbatim>
namespace eval ns1 {
proc p1 caller {
lappend [namespace parent]::res $caller
}
}
namespace eval ns1a {
namespace path [namespace parent]::ns1
proc t1 {old new op} {
$old t1
}
}
namespace eval ns2 {
proc p1 caller {
lappend [namespace parent]::res $caller
}
}
namespace eval ns2a {
namespace path [namespace parent]::ns2
proc t1 {old new op} {
[namespace tail $old] t2
}
}
trace add command ns1::p1 delete ns1a::t1
namespace delete ns1
trace add command ns2::p1 delete ns2a::t1
namespace delete ns2
puts $res ;# -> t1
</verbatim></code>
|