Index: generic/xotcl.c =================================================================== diff -u -r464811a4aaa475de10e834b0a009521446163fc0 -rc942f4e117d2aa3c8594702e0476a3f73a4147df --- generic/xotcl.c (.../xotcl.c) (revision 464811a4aaa475de10e834b0a009521446163fc0) +++ generic/xotcl.c (.../xotcl.c) (revision c942f4e117d2aa3c8594702e0476a3f73a4147df) @@ -6214,7 +6214,8 @@ *outObjPtr = objPtr; } else { result = XOTclVarErrMsg(interp, "expected ", ObjStr(pPtr->converterArg), - " but got \"", ObjStr(objPtr), "\"", NULL); + " but got \"", ObjStr(objPtr), + "\" for parameter ", pPtr->name, NULL); } } } else { @@ -6235,17 +6236,27 @@ ClientData *clientData, Tcl_Obj **outObjPtr) { int result, bool; result = Tcl_GetBooleanFromObj(interp, objPtr, &bool); - if (result == TCL_OK) *clientData = (ClientData)INT2PTR(bool); - *outObjPtr = objPtr; + if (result == TCL_OK) { + *clientData = (ClientData)INT2PTR(bool); + *outObjPtr = objPtr; + } else { + XOTclVarErrMsg(interp, "expected boolean value but got \"", ObjStr(objPtr), + "\" for parameter ", pPtr->name, NULL); + } return result; } static int convertToInteger(Tcl_Interp *interp, Tcl_Obj *objPtr, XOTclParam CONST *pPtr, ClientData *clientData, Tcl_Obj **outObjPtr) { int result, i; result = Tcl_GetIntFromObj(interp, objPtr, &i); - if (result == TCL_OK) *clientData = (ClientData)INT2PTR(i); - *outObjPtr = objPtr; + if (result == TCL_OK) { + *clientData = (ClientData)INT2PTR(i); + *outObjPtr = objPtr; + } else { + XOTclVarErrMsg(interp, "expected integer but got \"", ObjStr(objPtr), + "\" for parameter ", pPtr->name, NULL); + } return result; } @@ -6271,7 +6282,7 @@ Tcl_DStringAppend(dsPtr, what, -1); Tcl_DStringAppend(dsPtr, " of type ", -1); Tcl_DStringAppend(dsPtr, ObjStr(pPtr->converterArg), -1); - XOTclObjErrType(interp, objPtr, Tcl_DStringValue(dsPtr)); + XOTclObjErrType(interp, objPtr, Tcl_DStringValue(dsPtr), pPtr->name); DSTRING_FREE(dsPtr); return TCL_ERROR; @@ -6283,7 +6294,7 @@ if (GetObjectFromObj(interp, objPtr, (XOTclObject **)clientData) == TCL_OK) { return objectOfType(interp, (XOTclObject *)*clientData, "object", objPtr, pPtr); } - return XOTclObjErrType(interp, objPtr, "object"); + return XOTclObjErrType(interp, objPtr, "object", pPtr->name); } static int convertToClass(Tcl_Interp *interp, Tcl_Obj *objPtr, XOTclParam CONST *pPtr, @@ -6292,7 +6303,7 @@ if (GetClassFromObj(interp, objPtr, (XOTclClass **)clientData, 0) == TCL_OK) { return objectOfType(interp, (XOTclObject *)*clientData, "class", objPtr, pPtr); } - return XOTclObjErrType(interp, objPtr, "class"); + return XOTclObjErrType(interp, objPtr, "class", pPtr->name); } static int convertToRelation(Tcl_Interp *interp, Tcl_Obj *objPtr, XOTclParam CONST *pPtr, @@ -8806,7 +8817,7 @@ XOTclSetterMethod(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { XOTclObject *object = (XOTclObject*)clientData; - if (!object) return XOTclObjErrType(interp, objv[0], "object"); + if (!object) return XOTclObjErrType(interp, objv[0], "object", ObjStr(objv[0])); if (objc > 2) return XOTclObjErrArgCnt(interp, object->cmdName, objv[0], "?value?"); return setInstVar(interp, object, objv[0], objc == 2 ? objv[1] : NULL); } @@ -9079,7 +9090,7 @@ */ #endif - if (!tcd || !tcd->obj) return XOTclObjErrType(interp, objv[0], "object"); + if (!tcd || !tcd->obj) return XOTclObjErrType(interp, objv[0], "object", ""); if (tcd->passthrough) { /* two short cuts for simple cases */ /* early binding, cmd *resolved, we have to care only for objscope */ @@ -11924,7 +11935,7 @@ if (XOTclObjectIsClass(object)) { cl = (XOTclClass *)object; } else { - return XOTclObjErrType(interp, object->cmdName, "class"); + return XOTclObjErrType(interp, object->cmdName, "class", ""); } if (value == NULL) { @@ -11944,7 +11955,7 @@ case RelationtypeSuperclassIdx: if (!XOTclObjectIsClass(object)) - return XOTclObjErrType(interp, object->cmdName, "class"); + return XOTclObjErrType(interp, object->cmdName, "class", ""); cl = (XOTclClass *)object; if (value == NULL) { return ListSuperclasses(interp, cl, NULL, 0); @@ -11967,15 +11978,15 @@ XOTclClass *metaClass; if (!XOTclObjectIsClass(object)) - return XOTclObjErrType(interp, object->cmdName, "class"); + return XOTclObjErrType(interp, object->cmdName, "class", ""); cl = (XOTclClass *)object; if (value == NULL) { return XOTclVarErrMsg(interp, "metaclass must be specified as third argument", (char *) NULL); } GetClassFromObj(interp, value, &metaClass, 0); - if (!metaClass) return XOTclObjErrType(interp, value, "class"); + if (!metaClass) return XOTclObjErrType(interp, value, "class", ""); cl->object.flags |= XOTCL_IS_ROOT_CLASS; metaClass->object.flags |= XOTCL_IS_ROOT_META_CLASS;