From b2a28063811abb4c3bbe540d8e42b24c571b4588 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Tue, 12 Mar 2024 08:56:08 +0000 Subject: Restore the TclGetStringFromObj() macro in tclInt.h as it was in 8.6/8.7 --- generic/tclDecls.h | 26 ++++++++++++-------------- generic/tclInt.h | 7 ++++++- generic/tclObj.c | 1 + generic/tclStubInit.c | 4 +--- 4 files changed, 20 insertions(+), 18 deletions(-) diff --git a/generic/tclDecls.h b/generic/tclDecls.h index a2b0ec1..2acbb38 100644 --- a/generic/tclDecls.h +++ b/generic/tclDecls.h @@ -4158,19 +4158,17 @@ extern const TclStubs *tclStubsPtr; # define Tcl_GetMaster Tcl_GetParent #endif -#ifdef USE_TCL_STUBS - /* Protect those 10 functions, make them useless through the stub table */ -# undef TclGetStringFromObj -# undef TclGetBytesFromObj -# undef TclGetUnicodeFromObj -# undef TclListObjGetElements -# undef TclListObjLength -# undef TclDictObjSize -# undef TclSplitList -# undef TclSplitPath -# undef TclFSSplitPath -# undef TclParseArgsObjv -#endif +/* Protect those 10 functions, make them useless through the stub table */ +#undef TclGetStringFromObj +#undef TclGetBytesFromObj +#undef TclGetUnicodeFromObj +#undef TclListObjGetElements +#undef TclListObjLength +#undef TclDictObjSize +#undef TclSplitList +#undef TclSplitPath +#undef TclFSSplitPath +#undef TclParseArgsObjv #if TCL_MAJOR_VERSION < 9 /* TIP #627 for 8.7 */ @@ -4236,7 +4234,7 @@ extern const TclStubs *tclStubsPtr; TclGetBytesFromObj((interp), (objPtr), (sizePtr)) : \ (Tcl_GetBytesFromObj)((interp), (objPtr), (Tcl_Size *)(void *)(sizePtr))) # define Tcl_GetStringFromObj(objPtr, sizePtr) (sizeof(*(sizePtr)) <= sizeof(int) ? \ - TclGetStringFromObj((objPtr), (sizePtr)) : \ + (TclGetStringFromObj)((objPtr), (sizePtr)) : \ (Tcl_GetStringFromObj)((objPtr), (Tcl_Size *)(void *)(sizePtr))) # define Tcl_GetUnicodeFromObj(objPtr, sizePtr) (sizeof(*(sizePtr)) <= sizeof(int) ? \ TclGetUnicodeFromObj((objPtr), (sizePtr)) : \ diff --git a/generic/tclInt.h b/generic/tclInt.h index 14662b7..1fa6786 100644 --- a/generic/tclInt.h +++ b/generic/tclInt.h @@ -4396,6 +4396,11 @@ MODULE_SCOPE void TclDbInitNewObj(Tcl_Obj *objPtr, const char *file, #define TclGetString(objPtr) \ ((objPtr)->bytes? (objPtr)->bytes : Tcl_GetString(objPtr)) +#define TclGetStringFromObj(objPtr, lenPtr) \ + ((objPtr)->bytes \ + ? (*(lenPtr) = (objPtr)->length, (objPtr)->bytes) \ + : (Tcl_GetStringFromObj)((objPtr), (lenPtr))) + /* *---------------------------------------------------------------- * Macro used by the Tcl core to clean out an object's internal @@ -4587,7 +4592,7 @@ MODULE_SCOPE const TclFileAttrProcs tclpFileAttrProcs[]; #define TclNumUtfCharsM(numChars, bytes, numBytes) \ do { \ - Tcl_Size _count = 0, _i = (numBytes); \ + Tcl_Size _count, _i = (numBytes); \ unsigned char *_str = (unsigned char *) (bytes); \ while (_i > 0 && (*_str < 0xC0)) { _i--; _str++; } \ _count = (numBytes) - _i; \ diff --git a/generic/tclObj.c b/generic/tclObj.c index 17cb6a4..5dd4545 100644 --- a/generic/tclObj.c +++ b/generic/tclObj.c @@ -1660,6 +1660,7 @@ Tcl_GetString( */ #if !defined(TCL_NO_DEPRECATED) +#undef TclGetStringFromObj char * TclGetStringFromObj( Tcl_Obj *objPtr, /* Object whose string rep byte pointer should diff --git a/generic/tclStubInit.c b/generic/tclStubInit.c index 9072796..b48ec1b 100644 --- a/generic/tclStubInit.c +++ b/generic/tclStubInit.c @@ -73,10 +73,8 @@ # undef Tcl_WinConvertError # define Tcl_WinConvertError 0 #endif +#undef TclGetStringFromObj #if defined(TCL_NO_DEPRECATED) -# undef TclGetStringFromObj -# undef TclGetBytesFromObj -# undef TclGetUnicodeFromObj # define TclGetStringFromObj 0 # define TclGetBytesFromObj 0 # define TclGetUnicodeFromObj 0 -- cgit v0.12