Index: generic/nsf.c =================================================================== diff -u -race51b03d7e2b835c6867943f49c6ad5fa4c1b65 -re3487a745ff8d03bff82959c8fb0852e9ae23b36 --- generic/nsf.c (.../nsf.c) (revision ace51b03d7e2b835c6867943f49c6ad5fa4c1b65) +++ generic/nsf.c (.../nsf.c) (revision e3487a745ff8d03bff82959c8fb0852e9ae23b36) @@ -13844,18 +13844,19 @@ *---------------------------------------------------------------------- */ static int -UnsetInstVar(Tcl_Interp *interp, NsfObject *object, CONST char *name) { +UnsetInstVar(Tcl_Interp *interp, int withNocomplain, NsfObject *object, CONST char *name) { CallFrame frame, *framePtr = &frame; int flags, result; assert(object); - flags = (object->nsPtr) ? TCL_LEAVE_ERR_MSG|TCL_NAMESPACE_ONLY : TCL_LEAVE_ERR_MSG; + flags = withNocomplain ? 0 : TCL_LEAVE_ERR_MSG; + if (object->nsPtr) {flags |= TCL_NAMESPACE_ONLY;} Nsf_PushFrameObj(interp, object, framePtr); result = Tcl_UnsetVar2(interp, name, NULL, flags); Nsf_PopFrameObj(interp, framePtr); - return result; + return withNocomplain ? TCL_OK : result; } /* @@ -18817,19 +18818,20 @@ /* cmd var::unset NsfVarUnsetCmd { + {-argName "-nocomplain" -required 0 -nrargs 0} {-argName "object" -required 1 -type object} {-argName "varname" -required 1 -type tclobj} } */ static int -NsfVarUnsetCmd(Tcl_Interp *interp, NsfObject *object, Tcl_Obj *varNameObj) { +NsfVarUnsetCmd(Tcl_Interp *interp, int withNocomplain, NsfObject *object, Tcl_Obj *varNameObj) { char *varName = ObjStr(varNameObj); if (CheckVarName(interp, varName) != TCL_OK) { return TCL_ERROR; } - return UnsetInstVar(interp, object, varName); + return UnsetInstVar(interp, withNocomplain, object, varName); } /*********************************************************************** * End generated Next Scripting commands @@ -21361,7 +21363,8 @@ /* * If a single paramter name is given, we construct a filtered parameter - * list on the fly and provide it to the output functions. + * list on the fly and provide it to the output functions. Note, that the + * first matching parameter is queried. */ if (name) { Nsf_Param CONST *pPtr; @@ -21374,6 +21377,13 @@ break; } } + if (paramsPtr == parsedParam.paramDefs->paramsPtr) { + /* + * The named parameter was NOT found + */ + Tcl_SetObjResult(interp, NsfGlobalObjs[NSF_EMPTY]); + return TCL_OK; + } } switch (subcmd) {