Tcl_Method Tcl_NewProcMethod( Tcl_Interp *interp, /* The interpreter containing the object. */ Tcl_Object oPtr, /* The object to modify. */ TclOO_PreCallProc preCallPtr, TclOO_PostCallProc postCallPtr, Tcl_ProcErrorProc errProc, ClientData clientData, Tcl_Obj *nameObj, /* The name of the method, which must not be * NULL. */ Tcl_Obj *argsObj, /* The formal argument list for the method, * which must not be NULL. */ Tcl_Obj *bodyObj, /* The body of the method, which must not be * NULL. */ int flags, /* Whether this is a public method. */ ClientData *clientData2) { ProcedureMethod *pmPtr; Tcl_Method method; method = (Tcl_Method)TclOONewProcMethod(interp, (Object *)oPtr, flags, nameObj, argsObj, bodyObj, &pmPtr); pmPtr->flags = flags & USE_DECLARER_NS; pmPtr->preCallProc = preCallPtr; pmPtr->postCallProc = postCallPtr; pmPtr->errProc = errProc; pmPtr->clientData = clientData; if (clientData2 != NULL) { *clientData2 = pmPtr; } return method; } Tcl_Method Tcl_NewProcClassMethod( Tcl_Interp *interp, /* The interpreter containing the class. */ Tcl_Class clsPtr, /* The class to modify. */ TclOO_PreCallProc preCallPtr, TclOO_PostCallProc postCallPtr, Tcl_ProcErrorProc errProc, ClientData clientData, Tcl_Obj *nameObj, /* The name of the method, which may be NULL; * if so, up to caller to manage storage * (e.g., because it is a constructor or * destructor). */ Tcl_Obj *argsObj, /* The formal argument list for the method, * which may be NULL; if so, it is equivalent * to an empty list. */ Tcl_Obj *bodyObj, /* The body of the method, which must not be * NULL. */ int flags, /* Whether this is a public method. */ ClientData *clientData2) { ProcedureMethod *pmPtr; Method *method; method = TclOONewProcClassMethod(interp, (Class *)clsPtr, flags, nameObj, argsObj, bodyObj, &pmPtr); pmPtr->flags = flags & USE_DECLARER_NS; pmPtr->preCallProc = preCallPtr; pmPtr->postCallProc = postCallPtr; pmPtr->errProc = errProc; pmPtr->clientData = clientData; if (clientData2 != NULL) { *clientData2 = pmPtr; } return (Tcl_Method)method; } #define PUBLIC_METHOD 0x01 /* This is a public (exported) method. */ #define PRIVATE_METHOD 0x02 /* This is a private (class's direct instances * only) method. */ #define USE_DECLARER_NS 0x80 /* * ---------------------------------------------------------------------- * * Tcl_PublicObjectCmd, Tcl_PrivateObjectCmd -- * * ---------------------------------------------------------------------- */ int Tcl_PublicObjectCmd( ClientData clientData, Tcl_Interp *interp, Tcl_Class clsPtr, int objc, Tcl_Obj *const *objv) { Object *oPtr = (Object *)clientData; int result; result = TclOOObjectCmdCore(oPtr, interp, objc, objv, PUBLIC_METHOD, &oPtr->publicContextCache, (Class *)clsPtr); return result; } int Tcl_PrivateObjectCmd( ClientData clientData, Tcl_Interp *interp, Tcl_Class clsPtr, int objc, Tcl_Obj *const *objv) { Object *oPtr = (Object *)clientData; int result; result = TclOOObjectCmdCore(oPtr, interp, objc, objv, PRIVATE_METHOD, &oPtr->publicContextCache, (Class *)clsPtr); return result; }