summaryrefslogtreecommitdiffstats
path: root/generic/tclBasic.c
diff options
context:
space:
mode:
authordgp <dgp@users.sourceforge.net>2013-09-02 18:47:07 (GMT)
committerdgp <dgp@users.sourceforge.net>2013-09-02 18:47:07 (GMT)
commitbfee748b41a556c2c213d22b99ce12b156acb1d8 (patch)
tree27a8b5d15d20dd51cf3d1104f7512dc8638602fc /generic/tclBasic.c
parenta01e0439ec88f4f83820d36da9ed018cc3b9ff00 (diff)
downloadtcl-bfee748b41a556c2c213d22b99ce12b156acb1d8.zip
tcl-bfee748b41a556c2c213d22b99ce12b156acb1d8.tar.gz
tcl-bfee748b41a556c2c213d22b99ce12b156acb1d8.tar.bz2
Add test and improve errorInfo.bug_010f4162ef
Diffstat (limited to 'generic/tclBasic.c')
-rw-r--r--generic/tclBasic.c22
1 files changed, 16 insertions, 6 deletions
diff --git a/generic/tclBasic.c b/generic/tclBasic.c
index e909a1a..a10a11a 100644
--- a/generic/tclBasic.c
+++ b/generic/tclBasic.c
@@ -4680,6 +4680,12 @@ TEOV_RunEnterTraces(
if (traceCode != TCL_OK) {
if (traceCode == TCL_ERROR) {
+ Tcl_Obj *info;
+
+ TclNewLiteralStringObj(info, "\n (enter trace on \"");
+ Tcl_AppendLimitedToObj(info, command, length, 55, "...");
+ Tcl_AppendToObj(info, "\")", 2);
+ Tcl_AppendObjToErrorInfo(interp, info);
iPtr->flags |= ERR_ALREADY_LOGGED;
}
return traceCode;
@@ -4702,12 +4708,10 @@ TEOV_RunLeaveTraces(
Tcl_Obj *commandPtr = data[1];
Command *cmdPtr = data[2];
Tcl_Obj **objv = data[3];
-
+ int length;
+ const char *command = Tcl_GetStringFromObj(commandPtr, &length);
if (!(cmdPtr->flags & CMD_IS_DELETED)) {
- int length;
- const char *command = Tcl_GetStringFromObj(commandPtr, &length);
-
if (cmdPtr->flags & CMD_HAS_EXEC_TRACES){
traceCode = TclCheckExecutionTraces(interp, command, length,
cmdPtr, result, TCL_TRACE_LEAVE_EXEC, objc, objv);
@@ -4717,7 +4721,6 @@ TEOV_RunLeaveTraces(
cmdPtr, result, TCL_TRACE_LEAVE_EXEC, objc, objv);
}
}
- Tcl_DecrRefCount(commandPtr);
/*
* As cmdPtr is set, TclNRRunCallbacks is about to reduce the numlevels.
@@ -4729,10 +4732,17 @@ TEOV_RunLeaveTraces(
if (traceCode != TCL_OK) {
if (traceCode == TCL_ERROR) {
+ Tcl_Obj *info;
+
+ TclNewLiteralStringObj(info, "\n (leave trace on \"");
+ Tcl_AppendLimitedToObj(info, command, length, 55, "...");
+ Tcl_AppendToObj(info, "\")", 2);
+ Tcl_AppendObjToErrorInfo(interp, info);
iPtr->flags |= ERR_ALREADY_LOGGED;
}
- return traceCode;
+ result = traceCode;
}
+ Tcl_DecrRefCount(commandPtr);
return result;
}