Index: generic/tclAPI.h =================================================================== diff -u -rdc0040a6ddddf73e61c2a7d733ad7e15127e6bc1 -rf209c50ea8cb651d0dea25206301e45202217797 --- generic/tclAPI.h (.../tclAPI.h) (revision dc0040a6ddddf73e61c2a7d733ad7e15127e6bc1) +++ generic/tclAPI.h (.../tclAPI.h) (revision f209c50ea8cb651d0dea25206301e45202217797) @@ -4,15 +4,28 @@ Tcl_ObjCmdProc *proc; interfaceDefinition ifd; } methodDefinition2; + +static int parse2(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[], + int idx, parseContext *pc); +static int getMatchObject3(Tcl_Interp *interp, Tcl_Obj *patternObj, parseContext *pc, + XOTclObject **matchObject, char **pattern); -static int XOTclClassInfoHeritageMethod(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv []); -static int XOTclClassInfoInstancesMethod(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv []); -static int XOTclClassInfoInstargsMethod(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv []); -static int XOTclClassInfoInstbodyMethod(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv []); -static int XOTclClassInfoInstcommandsMethod(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv []); -static int XOTclClassInfoInstdefaultMethod(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv []); -static int XOTclClassInfoInstfilterMethod(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv []); -static int XOTclClassInfoInstfilterguardMethod(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv []); +static int XOTclClassInfoHeritageMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv []); +static int XOTclClassInfoHeritageMethod(Tcl_Interp *interp, XOTclClass * class, char * pattern); +static int XOTclClassInfoInstancesMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv []); +static int XOTclClassInfoInstancesMethod(Tcl_Interp *interp, XOTclClass * class, int withClosure, char *patternString, XOTclObject *patternObj); +static int XOTclClassInfoInstargsMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv []); +static int XOTclClassInfoInstargsMethod(Tcl_Interp *interp, XOTclClass * class, char * methodName); +static int XOTclClassInfoInstbodyMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv []); +static int XOTclClassInfoInstbodyMethod(Tcl_Interp *interp, XOTclClass * class, char * methodName); +static int XOTclClassInfoInstcommandsMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv []); +static int XOTclClassInfoInstcommandsMethod(Tcl_Interp *interp, XOTclClass * class, char * pattern); +static int XOTclClassInfoInstdefaultMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv []); +static int XOTclClassInfoInstdefaultMethod(Tcl_Interp *interp, XOTclClass * class, char * methodName, char * arg, Tcl_Obj * var); +static int XOTclClassInfoInstfilterMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv []); +static int XOTclClassInfoInstfilterMethod(Tcl_Interp *interp, XOTclClass * class, int withGuards, char * pattern); +static int XOTclClassInfoInstfilterguardMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv []); +static int XOTclClassInfoInstfilterguardMethod(Tcl_Interp *interp, XOTclClass * class, char * filter); enum { XOTclClassInfoHeritageMethodIdx, @@ -25,40 +38,168 @@ XOTclClassInfoInstfilterguardMethodIdx } XOTclMethods; + +static int +XOTclClassInfoHeritageMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { + parseContext pc; + if (parse2(clientData, interp, objc, objv, XOTclClassInfoHeritageMethodIdx, &pc) != TCL_OK) { + return TCL_ERROR; + } else { + XOTclClass * class = (XOTclClass *)pc.clientData[0]; + char * pattern = (char *)pc.clientData[1]; + + return XOTclClassInfoHeritageMethod(interp, class, pattern); + + } +} + +static int +XOTclClassInfoInstancesMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { + parseContext pc; + if (parse2(clientData, interp, objc, objv, XOTclClassInfoInstancesMethodIdx, &pc) != TCL_OK) { + return TCL_ERROR; + } else { + XOTclClass * class = (XOTclClass *)pc.clientData[0]; + int withClosure = (int)pc.clientData[1]; + char *patternString = NULL; + XOTclObject *patternObj = NULL; + Tcl_Obj * pattern = (Tcl_Obj *)pc.clientData[2]; + int returnCode; + + if (getMatchObject3(interp, pattern, &pc, &patternObj, &patternString) == -1) { + return TCL_OK; + } + + returnCode = XOTclClassInfoInstancesMethod(interp, class, withClosure, patternString, patternObj); + + if (patternObj) { + Tcl_SetObjResult(interp, returnCode ? patternObj->cmdName : XOTclGlobalObjects[XOTE_EMPTY]); + } + return TCL_OK; + } +} + +static int +XOTclClassInfoInstargsMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { + parseContext pc; + if (parse2(clientData, interp, objc, objv, XOTclClassInfoInstargsMethodIdx, &pc) != TCL_OK) { + return TCL_ERROR; + } else { + XOTclClass * class = (XOTclClass *)pc.clientData[0]; + char * methodName = (char *)pc.clientData[1]; + + return XOTclClassInfoInstargsMethod(interp, class, methodName); + + } +} + +static int +XOTclClassInfoInstbodyMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { + parseContext pc; + if (parse2(clientData, interp, objc, objv, XOTclClassInfoInstbodyMethodIdx, &pc) != TCL_OK) { + return TCL_ERROR; + } else { + XOTclClass * class = (XOTclClass *)pc.clientData[0]; + char * methodName = (char *)pc.clientData[1]; + + return XOTclClassInfoInstbodyMethod(interp, class, methodName); + + } +} + +static int +XOTclClassInfoInstcommandsMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { + parseContext pc; + if (parse2(clientData, interp, objc, objv, XOTclClassInfoInstcommandsMethodIdx, &pc) != TCL_OK) { + return TCL_ERROR; + } else { + XOTclClass * class = (XOTclClass *)pc.clientData[0]; + char * pattern = (char *)pc.clientData[1]; + + return XOTclClassInfoInstcommandsMethod(interp, class, pattern); + + } +} + +static int +XOTclClassInfoInstdefaultMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { + parseContext pc; + if (parse2(clientData, interp, objc, objv, XOTclClassInfoInstdefaultMethodIdx, &pc) != TCL_OK) { + return TCL_ERROR; + } else { + XOTclClass * class = (XOTclClass *)pc.clientData[0]; + char * methodName = (char *)pc.clientData[1]; + char * arg = (char *)pc.clientData[2]; + Tcl_Obj * var = (Tcl_Obj *)pc.clientData[3]; + + return XOTclClassInfoInstdefaultMethod(interp, class, methodName, arg, var); + + } +} + +static int +XOTclClassInfoInstfilterMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { + parseContext pc; + if (parse2(clientData, interp, objc, objv, XOTclClassInfoInstfilterMethodIdx, &pc) != TCL_OK) { + return TCL_ERROR; + } else { + XOTclClass * class = (XOTclClass *)pc.clientData[0]; + int withGuards = (int)pc.clientData[1]; + char * pattern = (char *)pc.clientData[2]; + + return XOTclClassInfoInstfilterMethod(interp, class, withGuards, pattern); + + } +} + +static int +XOTclClassInfoInstfilterguardMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { + parseContext pc; + if (parse2(clientData, interp, objc, objv, XOTclClassInfoInstfilterguardMethodIdx, &pc) != TCL_OK) { + return TCL_ERROR; + } else { + XOTclClass * class = (XOTclClass *)pc.clientData[0]; + char * filter = (char *)pc.clientData[1]; + + return XOTclClassInfoInstfilterguardMethod(interp, class, filter); + + } +} + static methodDefinition2 methodDefinitons[] = { -{"instances", XOTclClassInfoHeritageMethod, { +{"instances", XOTclClassInfoHeritageMethodStub, { {"class", 1, 0, "class"}, {"pattern", 0, 0, NULL}} }, -{"instances", XOTclClassInfoInstancesMethod, { +{"instances", XOTclClassInfoInstancesMethodStub, { {"class", 1, 0, "class"}, {"-closure", 0, 0, NULL}, {"pattern", 0, 0, "objpattern"}} }, -{"instargs", XOTclClassInfoInstargsMethod, { +{"instargs", XOTclClassInfoInstargsMethodStub, { {"class", 1, 0, "class"}, {"methodName", 1, 0, NULL}} }, -{"instbody", XOTclClassInfoInstbodyMethod, { +{"instbody", XOTclClassInfoInstbodyMethodStub, { {"class", 1, 0, "class"}, {"methodName", 1, 0, NULL}} }, -{"instances", XOTclClassInfoInstcommandsMethod, { +{"instances", XOTclClassInfoInstcommandsMethodStub, { {"class", 1, 0, "class"}, {"pattern", 0, 0, NULL}} }, -{"instdefault", XOTclClassInfoInstdefaultMethod, { +{"instdefault", XOTclClassInfoInstdefaultMethodStub, { {"class", 1, 0, "class"}, {"methodName", 1, 0, NULL}, {"arg", 1, 0, NULL}, - {"var", 1, 0, NULL}} + {"var", 1, 0, "tclobj"}} }, -{"instfilter", XOTclClassInfoInstfilterMethod, { +{"instfilter", XOTclClassInfoInstfilterMethodStub, { {"class", 1, 0, "class"}, {"-guards", 0, 0, NULL}, {"pattern", 0, 0, NULL}} }, -{"instfilterguard", XOTclClassInfoInstfilterguardMethod, { +{"instfilterguard", XOTclClassInfoInstfilterguardMethodStub, { {"class", 1, 0, "class"}, {"filter", 1, 0, NULL}} }