diff options
| author | dgp@users.sourceforge.net <dgp> | 2013-08-15 19:59:32 (GMT) |
|---|---|---|
| committer | dgp@users.sourceforge.net <dgp> | 2013-08-15 19:59:32 (GMT) |
| commit | f228a3d780b151e65e2556dc6931dab3da644414 (patch) | |
| tree | 53980304ebd4b378c6e5926bd746ac753440f77d | |
| parent | 565d20c208b6ee5f6d6253fdac47a3b35533f0db (diff) | |
| parent | 9aa94a7e289e9e7ac71e5278b8cbe56fedad8336 (diff) | |
| download | tcl-f228a3d780b151e65e2556dc6931dab3da644414.zip tcl-f228a3d780b151e65e2556dc6931dab3da644414.tar.gz tcl-f228a3d780b151e65e2556dc6931dab3da644414.tar.bz2 | |
Make sure the errors raised by execution traces become errors raised by the
traced command, as documented. Deletion of the traced command was supressing
that.
| -rw-r--r-- | generic/tclBasic.c | 6 | ||||
| -rw-r--r-- | tests/trace.test | 7 |
2 files changed, 10 insertions, 3 deletions
diff --git a/generic/tclBasic.c b/generic/tclBasic.c index dd6a40b..4a95340 100644 --- a/generic/tclBasic.c +++ b/generic/tclBasic.c @@ -4188,12 +4188,12 @@ TclNREvalObjv( result = TEOV_RunEnterTraces(interp, &cmdPtr, TclGetSourceFromFrame( flags & TCL_EVAL_SOURCE_IN_FRAME ? iPtr->cmdFramePtr : NULL, objc, objv), objc, objv, lookupNsPtr); - if (!cmdPtr) { - return TEOV_NotFound(interp, objc, objv, lookupNsPtr); - } if (result != TCL_OK) { return result; } + if (!cmdPtr) { + return TEOV_NotFound(interp, objc, objv, lookupNsPtr); + } } diff --git a/tests/trace.test b/tests/trace.test index a3a5604..d830f3c 100644 --- a/tests/trace.test +++ b/tests/trace.test @@ -2661,6 +2661,13 @@ test trace-39.1 {bug #3485022: tracing Bc'ed commands} -setup { rename dotrace {} rename foo {} } -result {3 | 0 1 1} + +test trace-40.1 {execution trace errors become command errors} { + proc foo args {} + trace add execution foo enter {rename foo {}; error bar;#} + catch foo m + return -level 0 $m[unset m] +} bar # Delete procedures when done, so we don't clash with other tests # (e.g. foobar will clash with 'unknown' tests). |
