Index: generic/nsf.c =================================================================== diff -u -r70d242f602e1807f7ef67cf9d642bb78f059be44 -r5678f49b80ef65fdcfad0d2500f0c06eb1e5e320 --- generic/nsf.c (.../nsf.c) (revision 70d242f602e1807f7ef67cf9d642bb78f059be44) +++ generic/nsf.c (.../nsf.c) (revision 5678f49b80ef65fdcfad0d2500f0c06eb1e5e320) @@ -98,6 +98,7 @@ typedef struct SetterCmdClientData { NsfObject *object; + Tcl_Obj *varNameObj; NsfParam *paramsPtr; } SetterCmdClientData; @@ -10544,7 +10545,7 @@ &flags, &checkedData, &outObjPtr); if (result == TCL_OK) { - result = SetInstVar(interp, object, objv[0], outObjPtr); + result = SetInstVar(interp, object, cd->varNameObj, outObjPtr); if (flags & NSF_PC_MUST_DECR) { DECR_REF_COUNT(outObjPtr); @@ -10553,7 +10554,7 @@ return result; } else { - return SetInstVar(interp, object, objv[0], objc == 2 ? objv[1] : NULL); + return SetInstVar(interp, object, cd->varNameObj, objc == 2 ? objv[1] : NULL); } } @@ -11027,6 +11028,10 @@ SetterCmdDeleteProc(ClientData clientData) { SetterCmdClientData *setterClientData = (SetterCmdClientData *)clientData; + if (setterClientData->varNameObj) { + DECR_REF_COUNT(setterClientData->varNameObj); + } + if (setterClientData->paramsPtr) { ParamsFree(setterClientData->paramsPtr); } @@ -14396,6 +14401,8 @@ setterClientData = NEW(SetterCmdClientData); setterClientData->paramsPtr = NULL; + setterClientData->varNameObj = NULL; + length = strlen(methodName); for (j=0; jparamsPtr->name; + setterClientData->varNameObj = Tcl_NewStringObj(methodName,-1); } else { setterClientData->paramsPtr = NULL; + setterClientData->varNameObj = parameter; } + INCR_REF_COUNT(setterClientData->varNameObj); + if (cl) { result = NsfAddClassMethod(interp, (Nsf_Class *)cl, methodName, (Tcl_ObjCmdProc*)NsfSetterMethod,