diff options
author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2022-08-22 10:17:38 (GMT) |
---|---|---|
committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2022-08-22 10:17:38 (GMT) |
commit | 7fd9e2f5fdd413114e252c3c3db7546551e309a9 (patch) | |
tree | c480ab33229034c89b94a44b09086b8e982b2a85 /generic/tclBasic.c | |
parent | c42f34e33320fc95bf80bdca0da2bae7bebbbe0f (diff) | |
download | tcl-7fd9e2f5fdd413114e252c3c3db7546551e309a9.zip tcl-7fd9e2f5fdd413114e252c3c3db7546551e309a9.tar.gz tcl-7fd9e2f5fdd413114e252c3c3db7546551e309a9.tar.bz2 |
Fix build error in tclTest.c (conflict with TIP #630). Handled deleteProc correctly in Tcl_(Set|Get)CommandInfo.
Diffstat (limited to 'generic/tclBasic.c')
-rw-r--r-- | generic/tclBasic.c | 35 |
1 files changed, 16 insertions, 19 deletions
diff --git a/generic/tclBasic.c b/generic/tclBasic.c index f7f6ed8..645a581 100644 --- a/generic/tclBasic.c +++ b/generic/tclBasic.c @@ -3377,8 +3377,14 @@ Tcl_SetCommandInfoFromToken( } cmdPtr->objClientData = infoPtr->objClientData; } - cmdPtr->deleteProc = infoPtr->deleteProc; - cmdPtr->deleteData = infoPtr->deleteData; + if (cmdPtr->deleteProc == cmdWrapperDeleteProc) { + CmdWrapperInfo *info = (CmdWrapperInfo *)cmdPtr->deleteData; + info->deleteProc = infoPtr->deleteProc; + info->clientData = infoPtr->deleteData; + } else { + cmdPtr->deleteProc = infoPtr->deleteProc; + cmdPtr->deleteData = infoPtr->deleteData; + } return 1; } @@ -3432,21 +3438,6 @@ Tcl_GetCommandInfo( *---------------------------------------------------------------------- */ -#if TCL_MAJOR_VERSION > 8 || defined(TCL_NO_DEPRECATED) -static int cmdWrapper2Proc(void *clientData, - Tcl_Interp *interp, - size_t objc, - Tcl_Obj *const objv[]) -{ - Command *cmdPtr = (Command *)clientData; - if (objc > INT_MAX) { - Tcl_WrongNumArgs(interp, 1, objv, "?arg ...?"); - return TCL_ERROR; - } - return cmdPtr->objProc(cmdPtr->objClientData, interp, objc, objv); -} -#endif - int Tcl_GetCommandInfoFromToken( Tcl_Command cmd, @@ -3470,8 +3461,14 @@ Tcl_GetCommandInfoFromToken( infoPtr->objClientData = cmdPtr->objClientData; infoPtr->proc = cmdPtr->proc; infoPtr->clientData = cmdPtr->clientData; - infoPtr->deleteProc = cmdPtr->deleteProc; - infoPtr->deleteData = cmdPtr->deleteData; + if (cmdPtr->deleteProc == cmdWrapperDeleteProc) { + CmdWrapperInfo *info = (CmdWrapperInfo *)cmdPtr->deleteData; + infoPtr->deleteProc = info->deleteProc; + infoPtr->deleteData = info->clientData; + } else { + infoPtr->deleteProc = cmdPtr->deleteProc; + infoPtr->deleteData = cmdPtr->deleteData; + } infoPtr->namespacePtr = (Tcl_Namespace *) cmdPtr->nsPtr; return 1; } |