From: <no...@so...> - 2002-07-29 13:53:20
|
Bugs item #582522, was opened at 2002-07-16 19:07 You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=110894&aid=582522&group_id=10894 Category: 43. Parsing and Eval Group: 8.4b2 Status: Open Resolution: Fixed Priority: 3 Submitted By: Don Porter (dgp) Assigned to: miguel sofer (msofer) Summary: aliases do not fire exec traces Initial Comment: % proc print args {puts "printtrace $args"} % proc foo {} {puts orig_foo} % interp alias {} al_foo {} foo al_foo % trace add execution foo enter {print foo} % trace add execution al_foo enter {print al_foo} % foo printtrace foo foo enter orig_foo % al_foo printtrace al_foo al_foo enter orig_foo % The [print foo] trace is missing. It should have been fired by [al_foo]. The problem seems to be that execution traces are performed by TclEvalObjvInternal() and aliases get evaluated by TclObjInvoke() which bypasses that and executes the command procedure directly. In combination with Bug 582506, it seems the correct solution may be to tie execution traces into the command procedure itself instead of in TclEvalObjvInternal(). ---------------------------------------------------------------------- >Comment By: miguel sofer (msofer) Date: 2002-07-29 10:53 Message: Logged In: YES user_id=148712 I'm pretty sure safety has been maintained: I only modified AliasObjCmd which processes aliases and never sent the flag TCL_INVOKE_HIDDEN to TclObjInvoke. TEOVI looks for commands using Tcl_GetCommandFromObj(), so essentially using a cached value if (available && valid), and looking up by name otherwise. So the issue is: could the cmdName object have a cached reference to a hidden command? I'll build extra safety and make the Alias structure keep a private copy of the targetCmdName object, so that it never keeps a foreign cached value. BTW, traces on hidden commands are still not being fired ... ---------------------------------------------------------------------- Comment By: Don Porter (dgp) Date: 2002-07-29 02:03 Message: Logged In: YES user_id=80530 I haven't reviewed the fix, but be sure to check it carefully that it preserves the same semantics. The difference between "invoke" and "eval" is very important, especially to be sure that aliases in safe interps don't "leak safety". ---------------------------------------------------------------------- Comment By: miguel sofer (msofer) Date: 2002-07-28 21:17 Message: Logged In: YES user_id=148712 Fixed by sending aliases through TEOI. Leaving openas reminder to check into the other suggestion. An alternative would be to eliminate the independent import mechanism, and just use it as a front-end for aliases which are now almost as fast. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=110894&aid=582522&group_id=10894 |