diff options
Diffstat (limited to 'generic/tclOO.c')
| -rw-r--r-- | generic/tclOO.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/generic/tclOO.c b/generic/tclOO.c index e77934c..0f400e7 100644 --- a/generic/tclOO.c +++ b/generic/tclOO.c @@ -442,6 +442,8 @@ InitFoundation( TclOOCallbackObjCmd, NULL, NULL, 0); CreateCmdInNS(interp, fPtr->helpersNs, "classvariable", TclOOClassVariableObjCmd, NULL, NULL, 0); + CreateCmdInNS(interp, fPtr->helpersNs, "link", + TclOOLinkObjCmd, NULL, NULL, 0); CreateCmdInNS(interp, fPtr->helpersNs, "next", NULL, TclOONextObjCmd, TclCompileObjectNextCmd); CreateCmdInNS(interp, fPtr->helpersNs, "nextto", @@ -814,6 +816,7 @@ AllocObject( oPtr->myclassCommand = TclNRCreateCommandInNs(interp, "myclass", oPtr->namespacePtr, TclOOMyClassObjCmd, MyClassNRObjCmd, oPtr, MyClassDeleted); + oPtr->linkedCmdsList = NULL; return oPtr; } @@ -857,7 +860,18 @@ MyDeleted( * squelched. */ { Object *oPtr = (Object *) clientData; + Tcl_Size linkc, i; + Tcl_Obj **linkv, *link; + if (oPtr->linkedCmdsList) { + TclListObjGetElements(NULL, oPtr->linkedCmdsList, &linkc, &linkv); + for (i=0 ; i<linkc ; i++) { + link = linkv[i]; + (void) Tcl_DeleteCommand(oPtr->fPtr->interp, TclGetString(link)); + } + Tcl_DecrRefCount(oPtr->linkedCmdsList); + oPtr->linkedCmdsList = NULL; + } oPtr->myCommand = NULL; } |
