Tcl Source Code

View Ticket
Login
Ticket UUID: 651271
Title: trace add command doesn't qualify names
Type: Bug Version: obsolete: 8.4.1
Submitter: nobody Created on: 2002-12-10 04:37:56
Subsystem: 18. Commands M-Z Assigned To: kennykb
Priority: 5 Medium Severity:
Status: Closed Last Modified: 2003-02-04 03:26:11
Resolution: Fixed Closed By: kennykb
    Closed on: 2003-02-03 20:26:11
Description:
The new "trace add command" either has a bug or isn't
very useful,
one or the other.  Consider this example:

proc foo {} {puts "Foo!"}

proc tracer {old new op} {
    puts "traced $old $new $op"
 }

trace add command foo rename tracer

namespace eval my_ns { rename foo bar }

This outputs

traced foo bar rename

Now, in fact, command ::foo is being renamed ::my_ns::bar.
If I'm really using this trace for anything but debugging,
I need to know that.  So how do I find out?  My first
thought
was this, using "namespace which":

proc tracer {old new op} {
    set uold [uplevel namespace which -command $old]
        set unew [uplevel namespace which -command $new]

    puts "traced $old=$uold $new=$unew"
}

I was hoping that running the same case as above, I'd get
this output:

traced foo=::foo bar=::my_ns::bar

Instead, I got

trace foo=::my_ns::bar bar=::my_ns::bar

This isn't entirely unreasonable; it simply means that
that the command has already been renamed when "tracer"
is called.  In a way, it's surprising that I get a
result for "foo" at all.

I finally found a workaround...but gosh, I shouldn't
have to do that 
much work.  The "rename" command obviously has to
qualify the
proc names to do its job; it seems completely unreasonable
that it doesn't pass that information along to the
callback.

Will Duquette
User Comments: kennykb added on 2003-02-04 03:26:11:
Logged In: YES 
user_id=99768

After talking things over with Jeff, Don, and Donal, the consensus was
that the risk of breaking anything dependent on the existing behavior
is less than that of leaving the bug unfixed. So I committed the
changes.

kennykb added on 2003-02-02 09:36:35:

File Added - 41281: 651271.patch

Logged In: YES 
user_id=99768

I *do* wish we'd found this in beta.  I personally think that
this is a small (and beneficial) enough change that we
can put it in a patch release, but I want to talk this over
with a couple of other TCT members before I commit.

In the meantime, the attached patch fixes the problem, and
updates the test suite to (a) conform with the new results,
and (b) test for your problem case.

Thanks for pointing this one out.

Attachments: