Menu

#2119 trace add command doesn't qualify names

obsolete: 8.4.1
closed-fixed
5
2003-02-03
2002-12-10
Anonymous
No

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

Discussion

  • Donal K. Fellows

    • assigned_to: dkf --> kennykb
     
  • Kevin B KENNY

    Kevin B KENNY - 2003-02-02
    • status: open --> open-accepted
     
  • Kevin B KENNY

    Kevin B KENNY - 2003-02-02

    Patch that fixes the problem

     
  • Kevin B KENNY

    Kevin B KENNY - 2003-02-02

    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.

     
  • Kevin B KENNY

    Kevin B KENNY - 2003-02-03
    • status: open-accepted --> closed-fixed
     
  • Kevin B KENNY

    Kevin B KENNY - 2003-02-03

    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.