Index: generic/gentclAPI.tcl =================================================================== diff -u -rb8af431b779825e6d2cfa7a8b334158da1ea9370 -rc942f4e117d2aa3c8594702e0476a3f73a4147df --- generic/gentclAPI.tcl (.../gentclAPI.tcl) (revision b8af431b779825e6d2cfa7a8b334158da1ea9370) +++ generic/gentclAPI.tcl (.../gentclAPI.tcl) (revision c942f4e117d2aa3c8594702e0476a3f73a4147df) @@ -89,14 +89,14 @@ set if [list "XOTclClass *cl"] append intro \ " XOTclClass *cl = XOTclObjectToClass(clientData);" \n \ - { if (!cl) return XOTclObjErrType(interp, objv[0], "Class");} + { if (!cl) return XOTclObjErrType(interp, objv[0], "Class", "");} } object { set a [list obj] set if [list "XOTclObject *obj"] append intro \ " XOTclObject *obj = (XOTclObject *)clientData;" \n \ - { if (!obj) return XOTclObjErrType(interp, objv[0], "Object");} + { if (!obj) return XOTclObjErrType(interp, objv[0], "Object", "");} } "" { set a [list] Index: generic/predefined.h =================================================================== diff -u -r464811a4aaa475de10e834b0a009521446163fc0 -rc942f4e117d2aa3c8594702e0476a3f73a4147df --- generic/predefined.h (.../predefined.h) (revision 464811a4aaa475de10e834b0a009521446163fc0) +++ generic/predefined.h (.../predefined.h) (revision c942f4e117d2aa3c8594702e0476a3f73a4147df) @@ -440,15 +440,16 @@ "proc createBootstrapAttributeSlots {} {}\n" "::xotcl::Slot method type=hasmixin {name value arg} {\n" "if {![::xotcl::is $value hasmixin $arg]} {\n" -"error \"Value '$value' of $name has not mixin $arg\"}\n" +"error \"Value '$value' of $name has not mixin $arg\"\n" +"error \"expected object with mixin $arg but got \\\"$value\\\" for parameter $name\"}\n" "return $value}\n" "::xotcl::Slot method type=baseclass {name value} {\n" "if {![::xotcl::is $value baseclass]} {\n" -"error \"Value '$value' of $name is not a baseclass\"}\n" +"error \"expected baseclass but got \\\"$value\\\" for parameter $name\"}\n" "return $value}\n" "::xotcl::Slot method type=metaclass {name value} {\n" "if {![::xotcl::is $value metaclass]} {\n" -"error \"Value '$value' of $name is not a metaclass\"}\n" +"error \"expected metaclass but got \\\"$value\\\" for parameter $name\"}\n" "return $value}}\n" "::xotcl2::Class create ::xotcl::ScopedNew -superclass ::xotcl2::Class -parameter {\n" "{withclass ::xotcl2::Object}\n" Index: generic/predefined.xotcl =================================================================== diff -u -ra38906707b8e508b97f01c9b68071c927c2a5d0f -rc942f4e117d2aa3c8594702e0476a3f73a4147df --- generic/predefined.xotcl (.../predefined.xotcl) (revision a38906707b8e508b97f01c9b68071c927c2a5d0f) +++ generic/predefined.xotcl (.../predefined.xotcl) (revision c942f4e117d2aa3c8594702e0476a3f73a4147df) @@ -850,18 +850,19 @@ ::xotcl::Slot method type=hasmixin {name value arg} { if {![::xotcl::is $value hasmixin $arg]} { error "Value '$value' of $name has not mixin $arg" + error "expected object with mixin $arg but got \"$value\" for parameter $name" } return $value } ::xotcl::Slot method type=baseclass {name value} { if {![::xotcl::is $value baseclass]} { - error "Value '$value' of $name is not a baseclass" + error "expected baseclass but got \"$value\" for parameter $name" } return $value } ::xotcl::Slot method type=metaclass {name value} { if {![::xotcl::is $value metaclass]} { - error "Value '$value' of $name is not a metaclass" + error "expected metaclass but got \"$value\" for parameter $name" } return $value } Index: generic/tclAPI.h =================================================================== diff -u -r464811a4aaa475de10e834b0a009521446163fc0 -rc942f4e117d2aa3c8594702e0476a3f73a4147df --- generic/tclAPI.h (.../tclAPI.h) (revision 464811a4aaa475de10e834b0a009521446163fc0) +++ generic/tclAPI.h (.../tclAPI.h) (revision c942f4e117d2aa3c8594702e0476a3f73a4147df) @@ -373,7 +373,7 @@ XOTclCAllocMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { parseContext pc; XOTclClass *cl = XOTclObjectToClass(clientData); - if (!cl) return XOTclObjErrType(interp, objv[0], "Class"); + if (!cl) return XOTclObjErrType(interp, objv[0], "Class", ""); if (ArgumentParse(interp, objc, objv, (XOTclObject *) cl, objv[0], method_definitions[XOTclCAllocMethodIdx].paramDefs, method_definitions[XOTclCAllocMethodIdx].nrParameters, @@ -392,7 +392,7 @@ XOTclCCreateMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { parseContext pc; XOTclClass *cl = XOTclObjectToClass(clientData); - if (!cl) return XOTclObjErrType(interp, objv[0], "Class"); + if (!cl) return XOTclObjErrType(interp, objv[0], "Class", ""); if (ArgumentParse(interp, objc, objv, (XOTclObject *) cl, objv[0], method_definitions[XOTclCCreateMethodIdx].paramDefs, method_definitions[XOTclCCreateMethodIdx].nrParameters, @@ -411,7 +411,7 @@ XOTclCDeallocMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { parseContext pc; XOTclClass *cl = XOTclObjectToClass(clientData); - if (!cl) return XOTclObjErrType(interp, objv[0], "Class"); + if (!cl) return XOTclObjErrType(interp, objv[0], "Class", ""); if (ArgumentParse(interp, objc, objv, (XOTclObject *) cl, objv[0], method_definitions[XOTclCDeallocMethodIdx].paramDefs, method_definitions[XOTclCDeallocMethodIdx].nrParameters, @@ -430,7 +430,7 @@ XOTclCFilterGuardMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { parseContext pc; XOTclClass *cl = XOTclObjectToClass(clientData); - if (!cl) return XOTclObjErrType(interp, objv[0], "Class"); + if (!cl) return XOTclObjErrType(interp, objv[0], "Class", ""); if (ArgumentParse(interp, objc, objv, (XOTclObject *) cl, objv[0], method_definitions[XOTclCFilterGuardMethodIdx].paramDefs, method_definitions[XOTclCFilterGuardMethodIdx].nrParameters, @@ -450,7 +450,7 @@ XOTclCInvalidateObjectParameterMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { parseContext pc; XOTclClass *cl = XOTclObjectToClass(clientData); - if (!cl) return XOTclObjErrType(interp, objv[0], "Class"); + if (!cl) return XOTclObjErrType(interp, objv[0], "Class", ""); if (ArgumentParse(interp, objc, objv, (XOTclObject *) cl, objv[0], method_definitions[XOTclCInvalidateObjectParameterMethodIdx].paramDefs, method_definitions[XOTclCInvalidateObjectParameterMethodIdx].nrParameters, @@ -469,7 +469,7 @@ XOTclCMixinGuardMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { parseContext pc; XOTclClass *cl = XOTclObjectToClass(clientData); - if (!cl) return XOTclObjErrType(interp, objv[0], "Class"); + if (!cl) return XOTclObjErrType(interp, objv[0], "Class", ""); if (ArgumentParse(interp, objc, objv, (XOTclObject *) cl, objv[0], method_definitions[XOTclCMixinGuardMethodIdx].paramDefs, method_definitions[XOTclCMixinGuardMethodIdx].nrParameters, @@ -489,7 +489,7 @@ XOTclCNewMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { parseContext pc; XOTclClass *cl = XOTclObjectToClass(clientData); - if (!cl) return XOTclObjErrType(interp, objv[0], "Class"); + if (!cl) return XOTclObjErrType(interp, objv[0], "Class", ""); if (ArgumentParse(interp, objc, objv, (XOTclObject *) cl, objv[0], method_definitions[XOTclCNewMethodIdx].paramDefs, method_definitions[XOTclCNewMethodIdx].nrParameters, @@ -508,7 +508,7 @@ XOTclCRecreateMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { parseContext pc; XOTclClass *cl = XOTclObjectToClass(clientData); - if (!cl) return XOTclObjErrType(interp, objv[0], "Class"); + if (!cl) return XOTclObjErrType(interp, objv[0], "Class", ""); if (ArgumentParse(interp, objc, objv, (XOTclObject *) cl, objv[0], method_definitions[XOTclCRecreateMethodIdx].paramDefs, method_definitions[XOTclCRecreateMethodIdx].nrParameters, @@ -1207,7 +1207,7 @@ XOTclOAutonameMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { parseContext pc; XOTclObject *obj = (XOTclObject *)clientData; - if (!obj) return XOTclObjErrType(interp, objv[0], "Object"); + if (!obj) return XOTclObjErrType(interp, objv[0], "Object", ""); if (ArgumentParse(interp, objc, objv, obj, objv[0], method_definitions[XOTclOAutonameMethodIdx].paramDefs, method_definitions[XOTclOAutonameMethodIdx].nrParameters, @@ -1228,7 +1228,7 @@ XOTclOCleanupMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { parseContext pc; XOTclObject *obj = (XOTclObject *)clientData; - if (!obj) return XOTclObjErrType(interp, objv[0], "Object"); + if (!obj) return XOTclObjErrType(interp, objv[0], "Object", ""); if (ArgumentParse(interp, objc, objv, obj, objv[0], method_definitions[XOTclOCleanupMethodIdx].paramDefs, method_definitions[XOTclOCleanupMethodIdx].nrParameters, @@ -1246,7 +1246,7 @@ static int XOTclOConfigureMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { XOTclObject *obj = (XOTclObject *)clientData; - if (!obj) return XOTclObjErrType(interp, objv[0], "Object"); + if (!obj) return XOTclObjErrType(interp, objv[0], "Object", ""); return XOTclOConfigureMethod(interp, obj, objc, objv); @@ -1257,7 +1257,7 @@ XOTclODestroyMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { parseContext pc; XOTclObject *obj = (XOTclObject *)clientData; - if (!obj) return XOTclObjErrType(interp, objv[0], "Object"); + if (!obj) return XOTclObjErrType(interp, objv[0], "Object", ""); if (ArgumentParse(interp, objc, objv, obj, objv[0], method_definitions[XOTclODestroyMethodIdx].paramDefs, method_definitions[XOTclODestroyMethodIdx].nrParameters, @@ -1276,7 +1276,7 @@ XOTclOExistsMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { parseContext pc; XOTclObject *obj = (XOTclObject *)clientData; - if (!obj) return XOTclObjErrType(interp, objv[0], "Object"); + if (!obj) return XOTclObjErrType(interp, objv[0], "Object", ""); if (ArgumentParse(interp, objc, objv, obj, objv[0], method_definitions[XOTclOExistsMethodIdx].paramDefs, method_definitions[XOTclOExistsMethodIdx].nrParameters, @@ -1295,7 +1295,7 @@ XOTclOFilterGuardMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { parseContext pc; XOTclObject *obj = (XOTclObject *)clientData; - if (!obj) return XOTclObjErrType(interp, objv[0], "Object"); + if (!obj) return XOTclObjErrType(interp, objv[0], "Object", ""); if (ArgumentParse(interp, objc, objv, obj, objv[0], method_definitions[XOTclOFilterGuardMethodIdx].paramDefs, method_definitions[XOTclOFilterGuardMethodIdx].nrParameters, @@ -1315,7 +1315,7 @@ XOTclOFilterSearchMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { parseContext pc; XOTclObject *obj = (XOTclObject *)clientData; - if (!obj) return XOTclObjErrType(interp, objv[0], "Object"); + if (!obj) return XOTclObjErrType(interp, objv[0], "Object", ""); if (ArgumentParse(interp, objc, objv, obj, objv[0], method_definitions[XOTclOFilterSearchMethodIdx].paramDefs, method_definitions[XOTclOFilterSearchMethodIdx].nrParameters, @@ -1333,7 +1333,7 @@ static int XOTclOInstVarMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { XOTclObject *obj = (XOTclObject *)clientData; - if (!obj) return XOTclObjErrType(interp, objv[0], "Object"); + if (!obj) return XOTclObjErrType(interp, objv[0], "Object", ""); return XOTclOInstVarMethod(interp, obj, objc, objv); @@ -1344,7 +1344,7 @@ XOTclOMixinGuardMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { parseContext pc; XOTclObject *obj = (XOTclObject *)clientData; - if (!obj) return XOTclObjErrType(interp, objv[0], "Object"); + if (!obj) return XOTclObjErrType(interp, objv[0], "Object", ""); if (ArgumentParse(interp, objc, objv, obj, objv[0], method_definitions[XOTclOMixinGuardMethodIdx].paramDefs, method_definitions[XOTclOMixinGuardMethodIdx].nrParameters, @@ -1363,7 +1363,7 @@ static int XOTclONextMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { XOTclObject *obj = (XOTclObject *)clientData; - if (!obj) return XOTclObjErrType(interp, objv[0], "Object"); + if (!obj) return XOTclObjErrType(interp, objv[0], "Object", ""); return XOTclONextMethod(interp, obj, objc, objv); @@ -1374,7 +1374,7 @@ XOTclONoinitMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { parseContext pc; XOTclObject *obj = (XOTclObject *)clientData; - if (!obj) return XOTclObjErrType(interp, objv[0], "Object"); + if (!obj) return XOTclObjErrType(interp, objv[0], "Object", ""); if (ArgumentParse(interp, objc, objv, obj, objv[0], method_definitions[XOTclONoinitMethodIdx].paramDefs, method_definitions[XOTclONoinitMethodIdx].nrParameters, @@ -1393,7 +1393,7 @@ XOTclORequireNamespaceMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { parseContext pc; XOTclObject *obj = (XOTclObject *)clientData; - if (!obj) return XOTclObjErrType(interp, objv[0], "Object"); + if (!obj) return XOTclObjErrType(interp, objv[0], "Object", ""); if (ArgumentParse(interp, objc, objv, obj, objv[0], method_definitions[XOTclORequireNamespaceMethodIdx].paramDefs, method_definitions[XOTclORequireNamespaceMethodIdx].nrParameters, @@ -1411,7 +1411,7 @@ static int XOTclOResidualargsMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { XOTclObject *obj = (XOTclObject *)clientData; - if (!obj) return XOTclObjErrType(interp, objv[0], "Object"); + if (!obj) return XOTclObjErrType(interp, objv[0], "Object", ""); return XOTclOResidualargsMethod(interp, obj, objc, objv); @@ -1421,7 +1421,7 @@ static int XOTclOUplevelMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { XOTclObject *obj = (XOTclObject *)clientData; - if (!obj) return XOTclObjErrType(interp, objv[0], "Object"); + if (!obj) return XOTclObjErrType(interp, objv[0], "Object", ""); return XOTclOUplevelMethod(interp, obj, objc, objv); @@ -1431,7 +1431,7 @@ static int XOTclOUpvarMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { XOTclObject *obj = (XOTclObject *)clientData; - if (!obj) return XOTclObjErrType(interp, objv[0], "Object"); + if (!obj) return XOTclObjErrType(interp, objv[0], "Object", ""); return XOTclOUpvarMethod(interp, obj, objc, objv); @@ -1442,7 +1442,7 @@ XOTclOVolatileMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { parseContext pc; XOTclObject *obj = (XOTclObject *)clientData; - if (!obj) return XOTclObjErrType(interp, objv[0], "Object"); + if (!obj) return XOTclObjErrType(interp, objv[0], "Object", ""); if (ArgumentParse(interp, objc, objv, obj, objv[0], method_definitions[XOTclOVolatileMethodIdx].paramDefs, method_definitions[XOTclOVolatileMethodIdx].nrParameters, @@ -1461,7 +1461,7 @@ XOTclOVwaitMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { parseContext pc; XOTclObject *obj = (XOTclObject *)clientData; - if (!obj) return XOTclObjErrType(interp, objv[0], "Object"); + if (!obj) return XOTclObjErrType(interp, objv[0], "Object", ""); if (ArgumentParse(interp, objc, objv, obj, objv[0], method_definitions[XOTclOVwaitMethodIdx].paramDefs, method_definitions[XOTclOVwaitMethodIdx].nrParameters, 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; Index: generic/xotcl.decls =================================================================== diff -u -r1c11937f4f0aea905fbedfbb9c2d1782b08833f5 -rc942f4e117d2aa3c8594702e0476a3f73a4147df --- generic/xotcl.decls (.../xotcl.decls) (revision 1c11937f4f0aea905fbedfbb9c2d1782b08833f5) +++ generic/xotcl.decls (.../xotcl.decls) (revision c942f4e117d2aa3c8594702e0476a3f73a4147df) @@ -122,7 +122,7 @@ int XOTclErrBadVal_(Tcl_Interp *interp, char *expected, char *value) } declare 28 generic { - int XOTclObjErrType(Tcl_Interp *interp, Tcl_Obj *nm, char *wt) + int XOTclObjErrType(Tcl_Interp *interp, Tcl_Obj *nm, char *wt, char *parameterName) } declare 29 generic { void XOTclStackDump (Tcl_Interp *interp) Index: generic/xotclDecls.h =================================================================== diff -u -r1c11937f4f0aea905fbedfbb9c2d1782b08833f5 -rc942f4e117d2aa3c8594702e0476a3f73a4147df --- generic/xotclDecls.h (.../xotclDecls.h) (revision 1c11937f4f0aea905fbedfbb9c2d1782b08833f5) +++ generic/xotclDecls.h (.../xotclDecls.h) (revision c942f4e117d2aa3c8594702e0476a3f73a4147df) @@ -154,7 +154,7 @@ #define XOTclObjErrType_TCL_DECLARED /* 28 */ EXTERN int XOTclObjErrType (Tcl_Interp * interp, Tcl_Obj * nm, - char * wt); + char * wt, char * parameterName); #endif #ifndef XOTclStackDump_TCL_DECLARED #define XOTclStackDump_TCL_DECLARED @@ -282,7 +282,7 @@ int (*xOTclErrInProc) (Tcl_Interp * interp, Tcl_Obj * objName, Tcl_Obj * clName, char * procName); /* 25 */ void *reserved26; int (*xOTclErrBadVal_) (Tcl_Interp * interp, char * expected, char * value); /* 27 */ - int (*xOTclObjErrType) (Tcl_Interp * interp, Tcl_Obj * nm, char * wt); /* 28 */ + int (*xOTclObjErrType) (Tcl_Interp * interp, Tcl_Obj * nm, char * wt, char * parameterName); /* 28 */ void (*xOTclStackDump) (Tcl_Interp * interp); /* 29 */ void (*xOTclCallStackDump) (Tcl_Interp * interp); /* 30 */ void *reserved31; Index: generic/xotclError.c =================================================================== diff -u -rc6066a15de738754028991b2b57b8f1d5a1cccaa -rc942f4e117d2aa3c8594702e0476a3f73a4147df --- generic/xotclError.c (.../xotclError.c) (revision c6066a15de738754028991b2b57b8f1d5a1cccaa) +++ generic/xotclError.c (.../xotclError.c) (revision c942f4e117d2aa3c8594702e0476a3f73a4147df) @@ -108,9 +108,11 @@ } extern int -XOTclObjErrType(Tcl_Interp *interp, Tcl_Obj *value, char *type) { +XOTclObjErrType(Tcl_Interp *interp, Tcl_Obj *value, char *type, char *parameterName) { Tcl_ResetResult(interp); Tcl_AppendResult(interp,"expected ", type, " but got \"", ObjStr(value), "\"", + parameterName ? " for parameter " : "", + parameterName ? parameterName : "", (char *) NULL); return TCL_ERROR; } Index: generic/xotclMetaData.c =================================================================== diff -u -r2111020b49da8ce57758e51accf0b6073037f0d2 -rc942f4e117d2aa3c8594702e0476a3f73a4147df --- generic/xotclMetaData.c (.../xotclMetaData.c) (revision 2111020b49da8ce57758e51accf0b6073037f0d2) +++ generic/xotclMetaData.c (.../xotclMetaData.c) (revision c942f4e117d2aa3c8594702e0476a3f73a4147df) @@ -88,7 +88,7 @@ int result = TCL_OK; int oc; Tcl_Obj* *ov; int i; - if (!obj) return XOTclObjErrType(interp, obj->cmdName, "Object"); + if (!obj) return XOTclObjErrType(interp, obj->cmdName, "Object", ""); if (objc < 2) return XOTclObjErrArgCnt(interp,obj->cmdName, "metadata ?(add|remove)? metaDataList"); Index: library/store/XOTclGdbm/xotclgdbm.c =================================================================== diff -u -r1c11937f4f0aea905fbedfbb9c2d1782b08833f5 -rc942f4e117d2aa3c8594702e0476a3f73a4147df --- library/store/XOTclGdbm/xotclgdbm.c (.../xotclgdbm.c) (revision 1c11937f4f0aea905fbedfbb9c2d1782b08833f5) +++ library/store/XOTclGdbm/xotclgdbm.c (.../xotclgdbm.c) (revision c942f4e117d2aa3c8594702e0476a3f73a4147df) @@ -34,7 +34,7 @@ XOTcl_Object* obj = (XOTcl_Object*) cd; int flags, block_size, mode; - if (!obj) return XOTclObjErrType(in, obj->cmdName, "Object"); + if (!obj) return XOTclObjErrType(in, obj->cmdName, "Object", ""); if (objc != 2) return XOTclObjErrArgCnt(in, obj->cmdName, "open filename"); @@ -71,7 +71,7 @@ db_t *db; XOTcl_Object* obj = (XOTcl_Object *) cd; - if (!obj) return XOTclObjErrType(in, obj->cmdName, "Object"); + if (!obj) return XOTclObjErrType(in, obj->cmdName, "Object", ""); if (objc != 1) return XOTclObjErrArgCnt(in, obj->cmdName, "close"); @@ -94,7 +94,7 @@ Tcl_DString result; datum del, key; - if (!obj) return XOTclObjErrType(in, obj->cmdName, "Object"); + if (!obj) return XOTclObjErrType(in, obj->cmdName, "Object", ""); if (objc != 1) return XOTclObjErrArgCnt(in, obj->cmdName, "names"); @@ -131,7 +131,7 @@ db_t *db; datum key, content; - if (!obj) return XOTclObjErrType(in, obj->cmdName, "Object"); + if (!obj) return XOTclObjErrType(in, obj->cmdName, "Object", ""); if (objc <2 || objc > 3) return XOTclObjErrArgCnt(in, obj->cmdName, "set key ?value?"); @@ -177,7 +177,7 @@ db_t *db; datum key; - if (!obj) return XOTclObjErrType(in, obj->cmdName, "Object"); + if (!obj) return XOTclObjErrType(in, obj->cmdName, "Object", ""); if (objc != 2) return XOTclObjErrArgCnt(in, obj->cmdName, "exists variable"); @@ -204,7 +204,7 @@ datum key; int ret; - if (!obj) return XOTclObjErrType(in, obj->cmdName, "Object"); + if (!obj) return XOTclObjErrType(in, obj->cmdName, "Object", ""); if (objc != 2) return XOTclObjErrArgCnt(in, obj->cmdName, "unset key"); @@ -232,7 +232,7 @@ db_t *db; datum key; - if (!obj) return XOTclObjErrType(in, obj->cmdName, "Object"); + if (!obj) return XOTclObjErrType(in, obj->cmdName, "Object", ""); if (objc != 1) return XOTclObjErrArgCnt(in, obj->cmdName, "firstkey"); @@ -270,7 +270,7 @@ db_t *db; datum newkey; - if (!obj) return XOTclObjErrType(in, obj->cmdName, "Object"); + if (!obj) return XOTclObjErrType(in, obj->cmdName, "Object", ""); if (objc != 1) return XOTclObjErrArgCnt(in, obj->cmdName, "nextkey"); Index: library/store/XOTclSdbm/xotclsdbm.c =================================================================== diff -u -r1c11937f4f0aea905fbedfbb9c2d1782b08833f5 -rc942f4e117d2aa3c8594702e0476a3f73a4147df --- library/store/XOTclSdbm/xotclsdbm.c (.../xotclsdbm.c) (revision 1c11937f4f0aea905fbedfbb9c2d1782b08833f5) +++ library/store/XOTclSdbm/xotclsdbm.c (.../xotclsdbm.c) (revision c942f4e117d2aa3c8594702e0476a3f73a4147df) @@ -36,7 +36,7 @@ for (i=0; i< objc; i++) fprintf(stderr, " objv[%d]=%s\n",i,TclObjStr(objv[i])); */ - if (!obj) return XOTclObjErrType(in, obj->cmdName, "Object"); + if (!obj) return XOTclObjErrType(in, obj->cmdName, "Object", ""); if (objc != 2) return XOTclObjErrArgCnt(in, obj->cmdName, "open filename"); @@ -114,7 +114,7 @@ db_t *db; XOTcl_Object* obj = (XOTcl_Object *) cd; - if (!obj) return XOTclObjErrType(in, obj->cmdName, "Object"); + if (!obj) return XOTclObjErrType(in, obj->cmdName, "Object", ""); if (objc != 1) return XOTclObjErrArgCnt(in, obj->cmdName, "close"); @@ -139,7 +139,7 @@ Tcl_DString result; datum key; - if (!obj) return XOTclObjErrType(in, obj->cmdName, "Object"); + if (!obj) return XOTclObjErrType(in, obj->cmdName, "Object", ""); if (objc != 1) return XOTclObjErrArgCnt(in, obj->cmdName, "names"); @@ -174,7 +174,7 @@ db_t *db; datum key, content; - if (!obj) return XOTclObjErrType(in, obj->cmdName, "Object"); + if (!obj) return XOTclObjErrType(in, obj->cmdName, "Object", ""); if (objc <2 || objc > 3) return XOTclObjErrArgCnt(in, obj->cmdName, "set key ?value?"); @@ -223,7 +223,7 @@ db_t *db; datum key, content; - if (!obj) return XOTclObjErrType(in, obj->cmdName, "Object"); + if (!obj) return XOTclObjErrType(in, obj->cmdName, "Object", ""); if (objc != 2) return XOTclObjErrArgCnt(in, obj->cmdName, "exists variable"); @@ -250,7 +250,7 @@ datum key; int ret; - if (!obj) return XOTclObjErrType(in, obj->cmdName, "Object"); + if (!obj) return XOTclObjErrType(in, obj->cmdName, "Object", ""); if (objc != 2) return XOTclObjErrArgCnt(in, obj->cmdName, "unset key"); @@ -287,7 +287,7 @@ db_t *db; datum key; - if (!obj) return XOTclObjErrType(in, obj->cmdName, "Object"); + if (!obj) return XOTclObjErrType(in, obj->cmdName, "Object", ""); if (objc != 1) return XOTclObjErrArgCnt(in, obj->cmdName, "firstkey"); @@ -315,7 +315,7 @@ db_t *db; datum newkey; - if (!obj) return XOTclObjErrType(in, obj->cmdName, "Object"); + if (!obj) return XOTclObjErrType(in, obj->cmdName, "Object", ""); if (objc != 1) return XOTclObjErrArgCnt(in, obj->cmdName, "nextkey"); Index: tests/parameters.xotcl =================================================================== diff -u -r464811a4aaa475de10e834b0a009521446163fc0 -rc942f4e117d2aa3c8594702e0476a3f73a4147df --- tests/parameters.xotcl (.../parameters.xotcl) (revision 464811a4aaa475de10e834b0a009521446163fc0) +++ tests/parameters.xotcl (.../parameters.xotcl) (revision c942f4e117d2aa3c8594702e0476a3f73a4147df) @@ -180,7 +180,7 @@ ? {D create d1} "::d1 configure: required argument 'd' is missing" "check error msg" ? {D create d2 -d x -b a} \ - {expected boolean value but got "a"} \ + {expected boolean value but got "a" for parameter -b} \ "create d2 without required argument given" D create d1 -d 1 @@ -193,31 +193,31 @@ "call method without a required argument" ? {d1 foo -r a} \ - {expected integer but got "a"} \ + {expected integer but got "a" for parameter -r} \ "required argument is not integer" ? {d1 foo -r 1} \ - {expected integer but got "aaa"} \ + {expected integer but got "aaa" for parameter -x} \ "default value is not of type integer" ? {d1 foo -r 1 -x 1 -object d1} \ "" \ "pass object" ? {d1 foo -r 1 -x 1 -object d11} \ - {expected object but got "d11"} \ + {expected object but got "d11" for parameter -object} \ "pass non-existing object" ? {d1 foo -r 1 -x 1 -class D} \ "" \ "pass class" ? {d1 foo -r 1 -x 1 -class d1} \ - {expected class but got "d1"} \ + {expected class but got "d1" for parameter -class} \ "pass object instead of class" ? {d1 foo -r 1 -x 1 -class D11} \ - {expected class but got "D11"} \ + {expected class but got "D11" for parameter -class} \ "pass non-existing class" ? {D method foo {a:relation} {}} \ @@ -229,7 +229,7 @@ "allow 'string is XXXX' for argument checking" ? {d1 foo 1} 1 "check int as double" ? {d1 foo 1.1} 1.1 "check double as double" -? {d1 foo 1.1a} {expected double but got "1.1a"} "check non-double as double" +? {d1 foo 1.1a} {expected double but got "1.1a" for parameter a} "check non-double as double" ? {D info method parameter foo} a:double ####################################################### @@ -263,7 +263,7 @@ ? {d1 foo 1} "1" "single value" ? {d1 foo {1 2}} "1 2" "multiple values" ? {d1 foo {1 a 2}} \ - {invalid value in "1 a 2": expected integer but got "a"} \ + {invalid value in "1 a 2": expected integer but got "a" for parameter m} \ "multiple values with wrong value" D method foo {m:object,multivalued} { @@ -272,18 +272,18 @@ ? {d1 foo ""} "" "emtpy list" ? {d1 foo o} "o" "single value" ? {d1 foo {o d1 x}} \ - {invalid value in "o d1 x": expected object but got "x"} \ + {invalid value in "o d1 x": expected object but got "x" for parameter m} \ "multiple values" Class create Foo -parameter { {ints:integer,multivalued} } ? {Foo create foo -ints {1 2}} "::foo" -? {Foo create foo -ints {1 a 2}} {invalid value in "1 a 2": expected integer but got "a"} +? {Foo create foo -ints {1 a 2}} {invalid value in "1 a 2": expected integer but got "a" for parameter -ints} Foo create foo -ints {1 2} ? {foo ints add 0} "0 1 2" -? {foo ints add a} {expected integer but got "a"} +? {foo ints add a} {expected integer but got "a" for parameter value} ####################################################### # subst default tests @@ -519,20 +519,20 @@ ? {d1 foo-base ::xotcl2::Object} "::xotcl2::Object" ? {d1 foo-base C} \ - "Value 'C' of x is not a baseclass" \ + {expected baseclass but got "C" for parameter x} \ "not a base class" ? {d1 foo-class D} "D" ? {d1 foo-class xxx} \ - {expected class but got "xxx"} \ + {expected class but got "xxx" for parameter x} \ "not a class" ? {d1 foo-class o} \ - {expected class but got "o"} \ + {expected class but got "o" for parameter x} \ "not a class" ? {d1 foo-meta ::xotcl2::Class} "::xotcl2::Class" ? {d1 foo-meta ::xotcl2::Object} \ - "Value '::xotcl2::Object' of x is not a metaclass" \ + {expected metaclass but got "::xotcl2::Object" for parameter x} \ "not a base class" ? {d1 foo-hasmixin c1} "c1" @@ -542,13 +542,13 @@ ? {d1 foo-object o} "o" ? {d1 foo-object xxx} \ - {expected object but got "xxx"} \ + {expected object but got "xxx" for parameter x} \ "not an object" ? {d1 foo-type d1} "d1" ? {d1 foo-type c1} "c1" ? {d1 foo-type o} \ - {expected object of type ::C but got "o"} \ + {expected object of type ::C but got "o" for parameter x} \ "o not of type ::C" ####################################################### @@ -578,17 +578,17 @@ ? {s1 bar} 1 ? {s1 bar 3} 3 -? {s1 bar a} {expected integer but got "a"} +? {s1 bar a} {expected integer but got "a" for parameter y} -? {s1 baz} {expected integer but got "b"} +? {s1 baz} {expected integer but got "b" for parameter x} ? {s1 baz 20} 20 s1 y 100 ? {s1 baz} 100 ? {s1 baz 101} 101 ? {s1 boz} {1 2 3} s1 z {1 x 100} -? {s1 boz} {invalid value in "1 x 100": expected integer but got "x"} +? {s1 boz} {invalid value in "1 x 100": expected integer but got "x" for parameter x} ? {s1 boz {100 200}} {100 200} set aaa 100 @@ -650,24 +650,24 @@ ? {ParamTest create p -o o} ::p ? {ParamTest create p -o xxx} \ - {expected object but got "xxx"} \ + {expected object but got "xxx" for parameter -o} \ "not an object" ? {ParamTest create p -c C} ::p "class" ? {ParamTest create p -c o} \ - {expected class but got "o"} \ + {expected class but got "o" for parameter -c} \ "not a class" ? {ParamTest create p -c1 MC1} ::p "instance of meta-class MC" ? {ParamTest create p -c1 C} \ - {expected class of type ::MC but got "C"} \ + {expected class of type ::MC but got "C" for parameter -c1} \ "not an instance of meta-class MC" ? {ParamTest create p -d d1} ::p ? {ParamTest create p -d1 d1} ::p ? {ParamTest create p -d c1} ::p ? {ParamTest create p -d o} \ - {expected object of type ::C but got "o"} \ + {expected object of type ::C but got "o" for parameter -d} \ "o not of type ::C" ? {ParamTest create p -mix c1} ::p @@ -676,9 +676,9 @@ "does not have mixin M" ? {ParamTest create p -u A} ::p -? {ParamTest create p -u c1} {expected upper but got "c1"} +? {ParamTest create p -u c1} {expected upper but got "c1" for parameter -u} ? {ParamTest create p -us {A B c}} \ - {invalid value in "A B c": expected upper but got "c"} + {invalid value in "A B c": expected upper but got "c" for parameter -us} ? {ParamTest create p -us {A B}} ::p ? {p us add C end} "A B C" @@ -698,7 +698,7 @@ "o" \ "value is an object" ? {p o xxx} \ - {expected object but got "xxx"} \ + {expected object but got "xxx" for parameter value} \ "value is not an object" ParamTest slots { @@ -713,7 +713,7 @@ "value is a list of objects (multiple elements)" ? {p os {o xxx d1}} \ - {invalid value in "o xxx d1": expected object but got "xxx"} \ + {invalid value in "o xxx d1": expected object but got "xxx" for parameter value} \ "list with invalid object" ####################################################### Index: tests/slottest.xotcl =================================================================== diff -u -r147831f1098cb9b96a28d4d5b0f9f3ccea35b9da -rc942f4e117d2aa3c8594702e0476a3f73a4147df --- tests/slottest.xotcl (.../slottest.xotcl) (revision 147831f1098cb9b96a28d4d5b0f9f3ccea35b9da) +++ tests/slottest.xotcl (.../slottest.xotcl) (revision c942f4e117d2aa3c8594702e0476a3f73a4147df) @@ -392,7 +392,7 @@ Person p2 -name "Gustaf" p2 projects add ::project1 -? {p2 projects add ::o1} {expected object of type ::Project but got "::o1"} +? {p2 projects add ::o1} {expected object of type ::Project but got "::o1" for parameter value} p2 salary 100 ? {catch {p2 salary 100.9}} 1 ? {p2 salary} 100 Index: tests/testx.xotcl =================================================================== diff -u -r48d5751e9aeb6a4f388f6531a9248c1847b22cae -rc942f4e117d2aa3c8594702e0476a3f73a4147df --- tests/testx.xotcl (.../testx.xotcl) (revision 48d5751e9aeb6a4f388f6531a9248c1847b22cae) +++ tests/testx.xotcl (.../testx.xotcl) (revision c942f4e117d2aa3c8594702e0476a3f73a4147df) @@ -3985,7 +3985,7 @@ catch { o z3 -b abc -- -b } m - errorCheck $m {expected boolean value but got "abc"} "not boolean" + errorCheck $m {expected boolean value but got "abc" for parameter -b} "not boolean" set ::r "" #o z4 -c 1 1