Index: generic/predefined.h =================================================================== diff -u -rcd12f5a50d870605292d8c957cb2a079f1a17c10 -r782f6b060b16282799fe936bc528f512e562362a --- generic/predefined.h (.../predefined.h) (revision cd12f5a50d870605292d8c957cb2a079f1a17c10) +++ generic/predefined.h (.../predefined.h) (revision 782f6b060b16282799fe936bc528f512e562362a) @@ -440,7 +440,6 @@ "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 \"expected object with mixin $arg but got \\\"$value\\\" for parameter $name\"}\n" "return $value}\n" "::xotcl::Slot method type=baseclass {name value} {\n" Index: generic/predefined.xotcl =================================================================== diff -u -rcd12f5a50d870605292d8c957cb2a079f1a17c10 -r782f6b060b16282799fe936bc528f512e562362a --- generic/predefined.xotcl (.../predefined.xotcl) (revision cd12f5a50d870605292d8c957cb2a079f1a17c10) +++ generic/predefined.xotcl (.../predefined.xotcl) (revision 782f6b060b16282799fe936bc528f512e562362a) @@ -849,7 +849,6 @@ ::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 Index: generic/xotcl.c =================================================================== diff -u -rc0b363cae9d43d3cb564b230233cc211470acd7e -r782f6b060b16282799fe936bc528f512e562362a --- generic/xotcl.c (.../xotcl.c) (revision c0b363cae9d43d3cb564b230233cc211470acd7e) +++ generic/xotcl.c (.../xotcl.c) (revision 782f6b060b16282799fe936bc528f512e562362a) @@ -9650,7 +9650,7 @@ } static int -ArgumentCheckHelper(Tcl_Interp *interp, Tcl_Obj *objPtr, struct XOTclParam CONST *pPtr, +ArgumentCheckHelper(Tcl_Interp *interp, Tcl_Obj *objPtr, struct XOTclParam CONST *pPtr, int *flags, ClientData *clientData, Tcl_Obj **outObjPtr) { int objc, i, result; Tcl_Obj **ov; @@ -9678,6 +9678,7 @@ ObjStr(resultObj), (char *) NULL); DECR_REF_COUNT(resultObj); DECR_REF_COUNT(*outObjPtr); + *flags &= ~XOTCL_PC_MUST_DECR; break; } } @@ -9717,7 +9718,7 @@ /*fprintf(stderr, "switch to output list construction for value %s\n", ObjStr(elementObjPtr));*/ *flags |= XOTCL_PC_MUST_DECR; - result = ArgumentCheckHelper(interp, objPtr, pPtr, clientData, outObjPtr); + result = ArgumentCheckHelper(interp, objPtr, pPtr, flags, clientData, outObjPtr); break; } } else { Index: tests/parameters.xotcl =================================================================== diff -u -rc0b363cae9d43d3cb564b230233cc211470acd7e -r782f6b060b16282799fe936bc528f512e562362a --- tests/parameters.xotcl (.../parameters.xotcl) (revision c0b363cae9d43d3cb564b230233cc211470acd7e) +++ tests/parameters.xotcl (.../parameters.xotcl) (revision 782f6b060b16282799fe936bc528f512e562362a) @@ -558,7 +558,7 @@ ? {d1 foo-hasmixin c1} "c1" ? {d1 foo-hasmixin o} \ - "Value 'o' of x has not mixin ::M" \ + {expected object with mixin ::M but got "o" for parameter x} \ "does not have mixin M" ? {d1 foo-object o} "o" @@ -693,7 +693,7 @@ ? {ParamTest create p -mix c1} ::p ? {ParamTest create p -mix o} \ - "Value 'o' of mix has not mixin M" \ + {expected object with mixin M but got "o" for parameter mix} \ "does not have mixin M" ? {ParamTest create p -u A} ::p @@ -756,6 +756,22 @@ C create c1 ? {c1 foo {male female mann frau}} "m f m f" + +Object create tmpObj +tmpObj method type=mType {name value arg:optional} { + if {[info exists arg]} { + puts stderr [arg=$arg] + } + puts stderr value=$value + if {$value} { + error invalid + } +} + +? {::xotcl::valuecheck mType,slot=::tmpObj,multivalued {1 0}} 0 "fail on first value" +? {::xotcl::valuecheck mType,slot=::tmpObj,multivalued {0 0 0}} 1 "all pass" +? {::xotcl::valuecheck mType,slot=::tmpObj,multivalued {0 1}} 0 "fail o last value" + ####################################################### # slot specific converter #######################################################