Index: generic/nsf.c =================================================================== diff -u -reea18b07ddfc917545d48ab6a272c0bfb9656f07 -r0722c5e7a7d98ec23fcb8fdc55f528567c3bd3fa --- generic/nsf.c (.../nsf.c) (revision eea18b07ddfc917545d48ab6a272c0bfb9656f07) +++ generic/nsf.c (.../nsf.c) (revision 0722c5e7a7d98ec23fcb8fdc55f528567c3bd3fa) @@ -25004,10 +25004,32 @@ case ParametersubcmdTypeIdx: if (paramsPtr->type) { + if (paramsPtr->converter == Nsf_ConvertToTclobj && paramsPtr->converterArg) { Tcl_SetObjResult(interp, paramsPtr->converterArg); + } else { - Tcl_SetObjResult(interp, Tcl_NewStringObj(paramsPtr->type, -1)); + if (paramsPtr->converter == Nsf_ConvertToObject || paramsPtr->converter == Nsf_ConvertToClass) { + CONST char *what = paramsPtr->type; + /* + * baseclass and metaclass are communicated via flags + */ + if (unlikely(paramsPtr->flags & NSF_ARG_BASECLASS)) { + what = "baseclass"; + } else if (unlikely(paramsPtr->flags & NSF_ARG_METACLASS)) { + what = "metaclass"; + } + /* + * The converterArg might contain a class for type checking + */ + if (paramsPtr->converterArg == NULL) { + Tcl_SetObjResult(interp, Tcl_NewStringObj(what, -1)); + } else { + NsfPrintError(interp, "%s,type=%s", what, ObjStr(paramsPtr->converterArg)); + } + } else { + Tcl_SetObjResult(interp, Tcl_NewStringObj(paramsPtr->type, -1)); + } } } else { Tcl_SetObjResult(interp, NsfGlobalObjs[NSF_EMPTY]);