Index: generic/xotcl.c =================================================================== diff -u -r62913a6c49e78801642a5d974c30ec1100831c2f -rb187bc23ce51a3c8a3f99010d1088dd3d3330fff --- generic/xotcl.c (.../xotcl.c) (revision 62913a6c49e78801642a5d974c30ec1100831c2f) +++ generic/xotcl.c (.../xotcl.c) (revision b187bc23ce51a3c8a3f99010d1088dd3d3330fff) @@ -10155,7 +10155,22 @@ } } - if (((Command *)cmd)->objProc == XOTclForwardMethod) { + if (((Command *)cmd)->objProc == XOTclSetterMethod) { + SetterCmdClientData *cd = (SetterCmdClientData *)Tcl_Command_objClientData(cmd); + if (cd->paramsPtr) { + Tcl_Obj *list; + XOTclParamDefs paramDefs; + paramDefs.paramsPtr = cd->paramsPtr; + paramDefs.nrParams = 1; + paramDefs.slotObj = NULL; + list = withVarnames ? ParamDefsList(interp, ¶mDefs) : ParamDefsFormat(interp, ¶mDefs); + Tcl_SetObjResult(interp, list); + return TCL_OK; + } else { + Tcl_SetObjResult(interp, Tcl_NewStringObj(methodName, -1)); + return TCL_OK; + } + } else if (((Command *)cmd)->objProc == XOTclForwardMethod) { return XOTclVarErrMsg(interp, "info params: could not obtain parameter definition for forwarder '", methodName, "'", (char *) NULL); } else { @@ -10358,14 +10373,19 @@ case InfomethodsubcmdTypeIdx: Tcl_SetObjResult(interp, XOTclGlobalObjects[XOTE_SETTER]); break; - case InfomethodsubcmdDefinitionIdx: + case InfomethodsubcmdDefinitionIdx: { + SetterCmdClientData *cd = (SetterCmdClientData *)Tcl_Command_objClientData(cmd); + resultObj = Tcl_NewListObj(0, NULL); /* todo: don't hard-code registering command name "setter" / XOTE_SETTER */ - AppendMethodRegistration(interp, resultObj, XOTclGlobalStrings[XOTE_SETTER], - object, methodName, cmd, 0, outputPerObject); + + AppendMethodRegistration(interp, resultObj, XOTclGlobalStrings[XOTE_SETTER], object, + cd->paramsPtr ? ObjStr(cd->paramsPtr->paramObj) : methodName, + cmd, 0, outputPerObject); Tcl_SetObjResult(interp, resultObj); break; } + } } else { /* must be an alias */ Index: tests/parameters.xotcl =================================================================== diff -u -r62913a6c49e78801642a5d974c30ec1100831c2f -rb187bc23ce51a3c8a3f99010d1088dd3d3330fff --- tests/parameters.xotcl (.../parameters.xotcl) (revision 62913a6c49e78801642a5d974c30ec1100831c2f) +++ tests/parameters.xotcl (.../parameters.xotcl) (revision b187bc23ce51a3c8a3f99010d1088dd3d3330fff) @@ -822,12 +822,25 @@ ? {::xotcl::setter o a} "::o::a" ? {::xotcl::setter C c} "::xotcl::classes::C::c" +? {o info method definition a} "::o setter a" +? {o info method parameter a} "a" +? {o info method args a} "a" +? {C info method definition c} "::C setter c" ? {o a 1} "1" ? {::xotcl::setter o a:integer} "::o::a" ? {::xotcl::setter o ints:integer,multivalued} "::o::ints" ? {::xotcl::setter o o:object} "::o::o" + +? {o info method name ints} "::o::ints" +? {o info method definition ints} "::o setter ints:integer,multivalued" +? {o info method parameter ints} "ints:integer,multivalued" +? {o info method args ints} "ints" + ? {o info method name o} "::o::o" +? {o info method definition o} "::o setter o:object" +? {o info method parameter o} "o:object" +? {o info method args o} "o" ? {o a 2} 2 ? {o a hugo} {expected integer but got "hugo" for parameter a} @@ -843,6 +856,7 @@ # test for slot-optimizer ####################################################### Test case slot-optimizer +Test parameter count 1000 Class create C -parameter {a b:integer c:integer,multivalued}