Index: generic/xotcl.c =================================================================== diff -u -r555e7f84db642cb7f4d77c8a5189922e1287b3d4 -rafa1cb8064311ef406ae50c499c026c8576393f8 --- generic/xotcl.c (.../xotcl.c) (revision 555e7f84db642cb7f4d77c8a5189922e1287b3d4) +++ generic/xotcl.c (.../xotcl.c) (revision afa1cb8064311ef406ae50c499c026c8576393f8) @@ -5116,6 +5116,8 @@ ParamDefsFormatOption(interp, nameStringObj, "initcmd", &colonWritten, &first); } else if ((pPtr->flags & XOTCL_ARG_METHOD)) { ParamDefsFormatOption(interp, nameStringObj, "method", &colonWritten, &first); + } else if ((pPtr->flags & XOTCL_ARG_NOARG)) { + ParamDefsFormatOption(interp, nameStringObj, "noarg", &colonWritten, &first); } innerlist = Tcl_NewListObj(0, NULL); @@ -6018,6 +6020,9 @@ paramPtr->flags |= XOTCL_ARG_INITCMD; } else if (strncmp(option, "method", length) == 0) { paramPtr->flags |= XOTCL_ARG_METHOD; + } else if (strncmp(option, "noarg", length) == 0) { + paramPtr->flags |= XOTCL_ARG_NOARG; + paramPtr->nrArgs = 0; } else if (strncmp(option, "switch", length) == 0) { paramPtr->nrArgs = 0; paramPtr->converter = convertToSwitch; @@ -11020,7 +11025,7 @@ result = Tcl_EvalObjEx(interp, newValue, TCL_EVAL_DIRECT); } else { result = callMethod((ClientData) obj, interp, - paramPtr->nameObj, 3, &newValue, 0); + paramPtr->nameObj, 2+(paramPtr->nrArgs), &newValue, 0); } fprintf(stderr, "XOTclOConfigureMethod_ attribute %s evaluated %s => (%d)\n", ObjStr(paramPtr->nameObj), ObjStr(newValue), result); @@ -11046,7 +11051,8 @@ XOTcl_PopFrame(interp, obj); remainingArgsc = pc.objc - paramDefs->nrParams; - if (remainingArgsc > 0) { + /* call residualargs only, when we have varargs and left over arguments */ + if (pc.varArgs && remainingArgsc > 0) { result = callMethod((ClientData) obj, interp, XOTclGlobalObjects[XOTE_RESIDUALARGS], remainingArgsc+2, pc.full_objv + i-1, 0); if (result != TCL_OK) {