summaryrefslogtreecommitdiffstats
path: root/generic/tclBasic.c
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2022-08-22 10:17:38 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2022-08-22 10:17:38 (GMT)
commit7fd9e2f5fdd413114e252c3c3db7546551e309a9 (patch)
treec480ab33229034c89b94a44b09086b8e982b2a85 /generic/tclBasic.c
parentc42f34e33320fc95bf80bdca0da2bae7bebbbe0f (diff)
downloadtcl-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.c35
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;
}