summaryrefslogtreecommitdiffstats
path: root/generic
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2011-04-04 13:40:01 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2011-04-04 13:40:01 (GMT)
commit25e4dca4916e5ae7be29bb21c40e59f3adb4b5ec (patch)
treeeebeebaa58948935075500c432b9c53885fe1d6b /generic
parent2205a28b9e00ec29977d2b21e2f2bda3b77aaaf4 (diff)
downloadtcl-25e4dca4916e5ae7be29bb21c40e59f3adb4b5ec.zip
tcl-25e4dca4916e5ae7be29bb21c40e59f3adb4b5ec.tar.gz
tcl-25e4dca4916e5ae7be29bb21c40e59f3adb4b5ec.tar.bz2
Better error-message in case of errors related to setting a variable
Diffstat (limited to 'generic')
-rw-r--r--generic/tclCmdAH.c10
-rw-r--r--generic/tclCmdIL.c22
-rw-r--r--generic/tclDictObj.c20
-rw-r--r--generic/tclScan.c8
-rw-r--r--generic/tclTest.c4
5 files changed, 19 insertions, 45 deletions
diff --git a/generic/tclCmdAH.c b/generic/tclCmdAH.c
index 3edfa54..8b5f13d 100644
--- a/generic/tclCmdAH.c
+++ b/generic/tclCmdAH.c
@@ -345,10 +345,7 @@ CatchObjCmdCallback(
if (objc >= 3) {
if (NULL == Tcl_ObjSetVar2(interp, varNamePtr, NULL,
- Tcl_GetObjResult(interp), 0)) {
- Tcl_ResetResult(interp);
- Tcl_AppendResult(interp,
- "couldn't save command result in variable", NULL);
+ Tcl_GetObjResult(interp), TCL_LEAVE_ERR_MSG)) {
return TCL_ERROR;
}
}
@@ -356,11 +353,8 @@ CatchObjCmdCallback(
Tcl_Obj *options = Tcl_GetReturnOptions(interp, result);
if (NULL == Tcl_ObjSetVar2(interp, optionVarNamePtr, NULL,
- options, 0)) {
+ options, TCL_LEAVE_ERR_MSG)) {
Tcl_DecrRefCount(options);
- Tcl_ResetResult(interp);
- Tcl_AppendResult(interp,
- "couldn't save return options in variable", NULL);
return TCL_ERROR;
}
}
diff --git a/generic/tclCmdIL.c b/generic/tclCmdIL.c
index b38ec9f..c42a54b 100644
--- a/generic/tclCmdIL.c
+++ b/generic/tclCmdIL.c
@@ -966,7 +966,7 @@ InfoDefaultCmd(
Tcl_Obj *const objv[]) /* Argument objects. */
{
Interp *iPtr = (Interp *) interp;
- const char *procName, *argName, *varName;
+ const char *procName, *argName;
Proc *procPtr;
CompiledLocal *localPtr;
Tcl_Obj *valueObjPtr;
@@ -993,18 +993,18 @@ InfoDefaultCmd(
&& (strcmp(argName, localPtr->name) == 0)) {
if (localPtr->defValuePtr != NULL) {
valueObjPtr = Tcl_ObjSetVar2(interp, objv[3], NULL,
- localPtr->defValuePtr, 0);
+ localPtr->defValuePtr, TCL_LEAVE_ERR_MSG);
if (valueObjPtr == NULL) {
- goto defStoreError;
+ return TCL_ERROR;
}
Tcl_SetObjResult(interp, Tcl_NewIntObj(1));
} else {
Tcl_Obj *nullObjPtr = Tcl_NewObj();
valueObjPtr = Tcl_ObjSetVar2(interp, objv[3], NULL,
- nullObjPtr, 0);
+ nullObjPtr, TCL_LEAVE_ERR_MSG);
if (valueObjPtr == NULL) {
- goto defStoreError;
+ return TCL_ERROR;
}
Tcl_SetObjResult(interp, Tcl_NewIntObj(0));
}
@@ -1016,12 +1016,6 @@ InfoDefaultCmd(
"\" doesn't have an argument \"", argName, "\"", NULL);
Tcl_SetErrorCode(interp, "TCL", "LOOKUP", "ARGUMENT", argName, NULL);
return TCL_ERROR;
-
- defStoreError:
- varName = TclGetString(objv[3]);
- Tcl_AppendResult(interp, "couldn't store default value in variable \"",
- varName, "\"", NULL);
- return TCL_ERROR;
}
/*
@@ -1058,7 +1052,7 @@ InfoErrorStackCmd(
Tcl_WrongNumArgs(interp, 1, objv, "?interp?");
return TCL_ERROR;
}
-
+
target = interp;
if (objc == 2) {
target = Tcl_GetSlave(interp, Tcl_GetString(objv[1]));
@@ -1069,7 +1063,7 @@ InfoErrorStackCmd(
iPtr = (Interp *) target;
Tcl_SetObjResult(interp, iPtr->errorStack);
-
+
return TCL_OK;
}
@@ -1163,7 +1157,7 @@ InfoFrameCmd(
CoroutineData *corPtr = iPtr->execEnvPtr->corPtr;
CmdFrame *runPtr = iPtr->cmdFramePtr;
CmdFrame *lastPtr = NULL;
-
+
topLevel += corPtr->caller.cmdFramePtr->level;
while (runPtr && (runPtr != corPtr->caller.cmdFramePtr)) {
lastPtr = runPtr;
diff --git a/generic/tclDictObj.c b/generic/tclDictObj.c
index 3da91a3..508c2af 100644
--- a/generic/tclDictObj.c
+++ b/generic/tclDictObj.c
@@ -2456,18 +2456,12 @@ DictForNRCmd(
*/
Tcl_IncrRefCount(valueObj);
- if (Tcl_ObjSetVar2(interp, keyVarObj, NULL, keyObj, 0) == NULL) {
- Tcl_ResetResult(interp);
- Tcl_AppendResult(interp, "couldn't set key variable: \"",
- TclGetString(keyVarObj), "\"", NULL);
+ if (Tcl_ObjSetVar2(interp, keyVarObj, NULL, keyObj, TCL_LEAVE_ERR_MSG) == NULL) {
TclDecrRefCount(valueObj);
goto error;
}
TclDecrRefCount(valueObj);
- if (Tcl_ObjSetVar2(interp, valueVarObj, NULL, valueObj, 0) == NULL) {
- Tcl_ResetResult(interp);
- Tcl_AppendResult(interp, "couldn't set value variable: \"",
- TclGetString(valueVarObj), "\"", NULL);
+ if (Tcl_ObjSetVar2(interp, valueVarObj, NULL, valueObj, TCL_LEAVE_ERR_MSG) == NULL) {
goto error;
}
@@ -2540,19 +2534,13 @@ DictForLoopCallback(
*/
Tcl_IncrRefCount(valueObj);
- if (Tcl_ObjSetVar2(interp, keyVarObj, NULL, keyObj, 0) == NULL) {
- Tcl_ResetResult(interp);
- Tcl_AppendResult(interp, "couldn't set key variable: \"",
- TclGetString(keyVarObj), "\"", NULL);
+ if (Tcl_ObjSetVar2(interp, keyVarObj, NULL, keyObj, TCL_LEAVE_ERR_MSG) == NULL) {
TclDecrRefCount(valueObj);
result = TCL_ERROR;
goto done;
}
TclDecrRefCount(valueObj);
- if (Tcl_ObjSetVar2(interp, valueVarObj, NULL, valueObj, 0) == NULL) {
- Tcl_ResetResult(interp);
- Tcl_AppendResult(interp, "couldn't set value variable: \"",
- TclGetString(valueVarObj), "\"", NULL);
+ if (Tcl_ObjSetVar2(interp, valueVarObj, NULL, valueObj, TCL_LEAVE_ERR_MSG) == NULL) {
result = TCL_ERROR;
goto done;
}
diff --git a/generic/tclScan.c b/generic/tclScan.c
index 68b8d21..06e66e4 100644
--- a/generic/tclScan.c
+++ b/generic/tclScan.c
@@ -1001,10 +1001,10 @@ Tcl_ScanObjCmd(
continue;
}
result++;
-#warning Why make your own error message? Why?
- if (Tcl_ObjSetVar2(interp, objv[i+3], NULL, objs[i], 0) == NULL) {
- Tcl_AppendResult(interp, "couldn't set variable \"",
- TclGetString(objv[i+3]), "\"", NULL);
+ /* In case of multiple errors in setting variables, just report
+ * the first one. */
+ if (Tcl_ObjSetVar2(interp, objv[i+3], NULL, objs[i],
+ (code == TCL_OK) ? TCL_LEAVE_ERR_MSG : 0) == NULL) {
code = TCL_ERROR;
}
Tcl_DecrRefCount(objs[i]);
diff --git a/generic/tclTest.c b/generic/tclTest.c
index b757185..bac0c7f 100644
--- a/generic/tclTest.c
+++ b/generic/tclTest.c
@@ -3939,10 +3939,8 @@ TestregexpObjCmd(
info.matches[ii].end - 1);
}
}
- valuePtr = Tcl_ObjSetVar2(interp, varPtr, NULL, newPtr, 0);
+ valuePtr = Tcl_ObjSetVar2(interp, varPtr, NULL, newPtr, TCL_LEAVE_ERR_MSG);
if (valuePtr == NULL) {
- Tcl_AppendResult(interp, "couldn't set variable \"",
- Tcl_GetString(varPtr), "\"", NULL);
return TCL_ERROR;
}
}