Index: generic/xotcl.c =================================================================== diff -u -r1acec493cc064647962a8c376f1343388b198252 -rc8c40374929b9b480dec18b8d0f07b9027edaaf8 --- generic/xotcl.c (.../xotcl.c) (revision 1acec493cc064647962a8c376f1343388b198252) +++ generic/xotcl.c (.../xotcl.c) (revision c8c40374929b9b480dec18b8d0f07b9027edaaf8) @@ -86,6 +86,7 @@ static int XOTclOCleanupMethod(Tcl_Interp *interp, XOTclObject *object); static int XOTclOConfigureMethod(Tcl_Interp *interp, XOTclObject *object, int objc, Tcl_Obj *CONST objv[]); static int XOTclODestroyMethod(Tcl_Interp *interp, XOTclObject *object); +static int XOTclOResidualargsMethod(Tcl_Interp *interp, XOTclObject *object, int objc, Tcl_Obj *CONST objv[]); static int DoDealloc(Tcl_Interp *interp, XOTclObject *object); static int RecreateObject(Tcl_Interp *interp, XOTclClass *cl, XOTclObject *object, int objc, Tcl_Obj *CONST objv[]); @@ -13092,8 +13093,16 @@ Call residualargs when we have varargs and left over arguments */ if (pc.varArgs && remainingArgsc > 0) { - result = callMethod((ClientData) object, interp, - XOTclGlobalObjs[XOTE_RESIDUALARGS], remainingArgsc+2, pc.full_objv + i-1, 0); + Tcl_Obj *methodObj; + + if (CallDirectly(interp, object, XO_residualargs_idx, &methodObj)) { + i -= 2; + if (methodObj) {pc.full_objv[i] = methodObj;} + result = XOTclOResidualargsMethod(interp, object, remainingArgsc+1, pc.full_objv + i); + } else { + result = callMethod((ClientData) object, interp, + methodObj, remainingArgsc+2, pc.full_objv + i-1, 0); + } if (result != TCL_OK) { parseContextRelease(&pc); goto configure_exit;