From 7bfc449085967b56a950905b307536bf9c4223ba Mon Sep 17 00:00:00 2001 From: pointsman Date: Sun, 9 Apr 2023 00:09:50 +0000 Subject: Experimental branch which adds configure option --disable-tcl8api which builds without the Tcl 8 compatibility API. Atm unix only. --- generic/tclDecls.h | 94 ++++++++++++++++++++++++++++++------------------- unix/configure | 20 +++++++++++ unix/configure.ac | 10 ++++++ unix/dltest/Makefile.in | 2 +- 4 files changed, 89 insertions(+), 37 deletions(-) diff --git a/generic/tclDecls.h b/generic/tclDecls.h index ec9a49a..caf3ce6 100644 --- a/generic/tclDecls.h +++ b/generic/tclDecls.h @@ -4020,73 +4020,91 @@ extern const TclStubs *tclStubsPtr; Tcl_GetStringFromObj(objPtr, (Tcl_Size *)NULL) #define Tcl_GetUnicode(objPtr) \ Tcl_GetUnicodeFromObj(objPtr, (Tcl_Size *)NULL) -#undef Tcl_GetBytesFromObj -#undef Tcl_GetIndexFromObjStruct -#undef Tcl_GetBooleanFromObj -#undef Tcl_GetBoolean -#undef Tcl_GetStringFromObj -#undef Tcl_GetUnicodeFromObj +#if defined(TCL_8_API) +# undef Tcl_GetBytesFromObj +# undef Tcl_GetIndexFromObjStruct +# undef Tcl_GetStringFromObj +# undef Tcl_GetUnicodeFromObj +#endif #undef TclGetByteArrayFromObj #undef Tcl_GetByteArrayFromObj +#undef Tcl_GetBooleanFromObj +#undef Tcl_GetBoolean + #if defined(USE_TCL_STUBS) -#define Tcl_GetBytesFromObj(interp, objPtr, sizePtr) \ +# if defined(TCL_8_API) +# define Tcl_GetBytesFromObj(interp, objPtr, sizePtr) \ (sizeof(*(sizePtr)) <= sizeof(int) ? \ tclStubsPtr->tclGetBytesFromObj(interp, objPtr, (int *)(void *)(sizePtr)) : \ tclStubsPtr->tcl_GetBytesFromObj(interp, objPtr, (size_t *)(void *)(sizePtr))) -#define Tcl_GetIndexFromObjStruct(interp, objPtr, tablePtr, offset, msg, flags, indexPtr) \ +# define Tcl_GetIndexFromObjStruct(interp, objPtr, tablePtr, offset, msg, flags, indexPtr) \ (tclStubsPtr->tcl_GetIndexFromObjStruct((interp), (objPtr), (tablePtr), (offset), (msg), \ (flags)|(int)(sizeof(*(indexPtr))<<1), (indexPtr))) -#define Tcl_GetBooleanFromObj(interp, objPtr, boolPtr) \ - ((sizeof(*(boolPtr)) == sizeof(int) && (TCL_MAJOR_VERSION == 8)) ? tclStubsPtr->tcl_GetBooleanFromObj(interp, objPtr, (int *)(boolPtr)) : \ - Tcl_GetBoolFromObj(interp, objPtr, (TCL_NULL_OK-2)&(int)sizeof((*(boolPtr))), (char *)(boolPtr))) -#define Tcl_GetBoolean(interp, src, boolPtr) \ - ((sizeof(*(boolPtr)) == sizeof(int) && (TCL_MAJOR_VERSION == 8)) ? tclStubsPtr->tcl_GetBoolean(interp, src, (int *)(boolPtr)) : \ - Tcl_GetBool(interp, src, (TCL_NULL_OK-2)&(int)sizeof((*(boolPtr))), (char *)(boolPtr))) -#define Tcl_GetStringFromObj(objPtr, sizePtr) \ +# define Tcl_GetStringFromObj(objPtr, sizePtr) \ (sizeof(*(sizePtr)) <= sizeof(int) ? \ tclStubsPtr->tclGetStringFromObj(objPtr, (int *)(void *)(sizePtr)) : \ tclStubsPtr->tcl_GetStringFromObj(objPtr, (size_t *)(void *)(sizePtr))) -#if TCL_MAJOR_VERSION > 8 -#define Tcl_GetByteArrayFromObj(objPtr, sizePtr) \ - (sizeof(*(sizePtr)) <= sizeof(int) ? \ +# if TCL_MAJOR_VERSION > 8 +# define Tcl_GetByteArrayFromObj(objPtr, sizePtr) \ + (sizeof(*(sizePtr)) <= sizeof(int) ? \ tclStubsPtr->tclGetBytesFromObj(NULL, objPtr, (int *)(void *)(sizePtr)) : \ tclStubsPtr->tcl_GetBytesFromObj(NULL, objPtr, (size_t *)(void *)(sizePtr))) -#else -#define Tcl_GetByteArrayFromObj(objPtr, sizePtr) \ - (sizeof(*(sizePtr)) <= sizeof(int) ? \ +# else +# define Tcl_GetByteArrayFromObj(objPtr, sizePtr) \ + (sizeof(*(sizePtr)) <= sizeof(int) ? \ tclStubsPtr->tclGetByteArrayFromObj(objPtr, (int *)(void *)(sizePtr)) : \ tclStubsPtr->tcl_GetByteArrayFromObj(objPtr, (size_t *)(void *)(sizePtr))) -#endif -#define Tcl_GetUnicodeFromObj(objPtr, sizePtr) \ - (sizeof(*(sizePtr)) <= sizeof(int) ? \ +# endif +# define Tcl_GetUnicodeFromObj(objPtr, sizePtr) \ + (sizeof(*(sizePtr)) <= sizeof(int) ? \ tclStubsPtr->tclGetUnicodeFromObj(objPtr, (int *)(void *)(sizePtr)) : \ tclStubsPtr->tcl_GetUnicodeFromObj(objPtr, (size_t *)(void *)(sizePtr))) +# else /* TCL_8_API */ +# if TCL_MAJOR_VERSION > 8 +# define Tcl_GetByteArrayFromObj(objPtr, sizePtr) \ + tclStubsPtr->tcl_GetBytesFromObj(NULL, objPtr, (size_t *)(void *)(sizePtr)) +# else +# define Tcl_GetByteArrayFromObj(objPtr, sizePtr) \ + tclStubsPtr->tcl_GetByteArrayFromObj(objPtr, (size_t *)(void *)(sizePtr)) +# endif /* TCL_MAJOR_VERSION > 8 */ +# endif +# define Tcl_GetBooleanFromObj(interp, objPtr, boolPtr) \ + ((sizeof(*(boolPtr)) == sizeof(int) && (TCL_MAJOR_VERSION == 8)) ? tclStubsPtr->tcl_GetBooleanFromObj(interp, objPtr, (int *)(boolPtr)) : \ + Tcl_GetBoolFromObj(interp, objPtr, (TCL_NULL_OK-2)&(int)sizeof((*(boolPtr))), (char *)(boolPtr))) +# define Tcl_GetBoolean(interp, src, boolPtr) \ + ((sizeof(*(boolPtr)) == sizeof(int) && (TCL_MAJOR_VERSION == 8)) ? tclStubsPtr->tcl_GetBoolean(interp, src, (int *)(boolPtr)) : \ + Tcl_GetBool(interp, src, (TCL_NULL_OK-2)&(int)sizeof((*(boolPtr))), (char *)(boolPtr))) #else -#define Tcl_GetBytesFromObj(interp, objPtr, sizePtr) \ +# if defined(TCL_8_API) +# define Tcl_GetBytesFromObj(interp, objPtr, sizePtr) \ (sizeof(*(sizePtr)) <= sizeof(int) ? \ TclGetBytesFromObj(interp, objPtr, (int *)(void *)(sizePtr)) : \ (Tcl_GetBytesFromObj)(interp, objPtr, (size_t *)(void *)(sizePtr))) -#define Tcl_GetIndexFromObjStruct(interp, objPtr, tablePtr, offset, msg, flags, indexPtr) \ +# define Tcl_GetIndexFromObjStruct(interp, objPtr, tablePtr, offset, msg, flags, indexPtr) \ ((Tcl_GetIndexFromObjStruct)((interp), (objPtr), (tablePtr), (offset), (msg), \ (flags)|(int)(sizeof(*(indexPtr))<<1), (indexPtr))) -#define Tcl_GetBooleanFromObj(interp, objPtr, boolPtr) \ - ((sizeof(*(boolPtr)) == sizeof(int) && (TCL_MAJOR_VERSION == 8)) ? Tcl_GetBooleanFromObj(interp, objPtr, (int *)(boolPtr)) : \ - Tcl_GetBoolFromObj(interp, objPtr, (TCL_NULL_OK-2)&(int)sizeof((*(boolPtr))), (char *)(boolPtr))) -#define Tcl_GetBoolean(interp, src, boolPtr) \ - ((sizeof(*(boolPtr)) == sizeof(int) && (TCL_MAJOR_VERSION == 8)) ? Tcl_GetBoolean(interp, src, (int *)(boolPtr)) : \ - Tcl_GetBool(interp, src, (TCL_NULL_OK-2)&(int)sizeof((*(boolPtr))), (char *)(boolPtr))) -#define Tcl_GetStringFromObj(objPtr, sizePtr) \ +# define Tcl_GetStringFromObj(objPtr, sizePtr) \ (sizeof(*(sizePtr)) <= sizeof(int) ? \ TclGetStringFromObj(objPtr, (int *)(void *)(sizePtr)) : \ (Tcl_GetStringFromObj)(objPtr, (size_t *)(void *)(sizePtr))) -#define Tcl_GetByteArrayFromObj(objPtr, sizePtr) \ +# define Tcl_GetByteArrayFromObj(objPtr, sizePtr) \ (sizeof(*(sizePtr)) <= sizeof(int) ? \ TclGetBytesFromObj(NULL, objPtr, (int *)(void *)(sizePtr)) : \ (Tcl_GetBytesFromObj)(NULL, objPtr, (size_t *)(void *)(sizePtr))) -#define Tcl_GetUnicodeFromObj(objPtr, sizePtr) \ - (sizeof(*(sizePtr)) <= sizeof(int) ? \ +# define Tcl_GetUnicodeFromObj(objPtr, sizePtr) \ + (sizeof(*(sizePtr)) <= sizeof(int) ? \ TclGetUnicodeFromObj(objPtr, (int *)(void *)(sizePtr)) : \ (Tcl_GetUnicodeFromObj)(objPtr, (size_t *)(void *)(sizePtr))) +# else /* TCL_8_API */ +# define Tcl_GetByteArrayFromObj(objPtr, sizePtr) \ + Tcl_GetBytesFromObj(NULL, objPtr, (size_t *)(void *)(sizePtr)) +# endif /* TCL_8_API */ +# define Tcl_GetBooleanFromObj(interp, objPtr, boolPtr) \ + ((sizeof(*(boolPtr)) == sizeof(int) && (TCL_MAJOR_VERSION == 8)) ? Tcl_GetBooleanFromObj(interp, objPtr, (int *)(boolPtr)) : \ + Tcl_GetBoolFromObj(interp, objPtr, (TCL_NULL_OK-2)&(int)sizeof((*(boolPtr))), (char *)(boolPtr))) +# define Tcl_GetBoolean(interp, src, boolPtr) \ + ((sizeof(*(boolPtr)) == sizeof(int) && (TCL_MAJOR_VERSION == 8)) ? Tcl_GetBoolean(interp, src, (int *)(boolPtr)) : \ + Tcl_GetBool(interp, src, (TCL_NULL_OK-2)&(int)sizeof((*(boolPtr))), (char *)(boolPtr))) #endif #ifdef TCL_MEM_DEBUG @@ -4158,6 +4176,7 @@ extern const TclStubs *tclStubsPtr; # define Tcl_WCharLen (sizeof(wchar_t) != sizeof(short) \ ? (Tcl_Size (*)(wchar_t *))tclStubsPtr->tcl_UniCharLen \ : (Tcl_Size (*)(wchar_t *))Tcl_Char16Len) +#if defined(TCL_8_API) # undef Tcl_ListObjGetElements # define Tcl_ListObjGetElements(interp, listPtr, objcPtr, objvPtr) (sizeof(*(objcPtr)) == sizeof(int) \ ? tclStubsPtr->tclListObjGetElements((interp), (listPtr), (int *)(void *)(objcPtr), (objvPtr)) \ @@ -4186,6 +4205,7 @@ extern const TclStubs *tclStubsPtr; # define Tcl_ParseArgsObjv(interp, argTable, objcPtr, objv, remObjv) (sizeof(*(objcPtr)) == sizeof(int) \ ? tclStubsPtr->tclParseArgsObjv((interp), (argTable), (int *)(void *)(objcPtr), (objv), (remObjv)) \ : tclStubsPtr->tcl_ParseArgsObjv((interp), (argTable), (size_t *)(void *)(objcPtr), (objv), (remObjv))) +#endif /* TCL_8_API */ #else # define Tcl_WCharToUtfDString (sizeof(wchar_t) != sizeof(short) \ ? (char *(*)(const wchar_t *, Tcl_Size, Tcl_DString *))Tcl_UniCharToUtfDString \ @@ -4200,6 +4220,7 @@ extern const TclStubs *tclStubsPtr; ? (Tcl_Size (*)(wchar_t *))Tcl_UniCharLen \ : (Tcl_Size (*)(wchar_t *))Tcl_Char16Len) #if !defined(BUILD_tcl) +#if defined(TCL_8_API) # define Tcl_ListObjGetElements(interp, listPtr, objcPtr, objvPtr) (sizeof(*(objcPtr)) == sizeof(int) \ ? TclListObjGetElements((interp), (listPtr), (int *)(void *)(objcPtr), (objvPtr)) \ : (Tcl_ListObjGetElements)((interp), (listPtr), (size_t *)(void *)(objcPtr), (objvPtr))) @@ -4221,6 +4242,7 @@ extern const TclStubs *tclStubsPtr; # define Tcl_ParseArgsObjv(interp, argTable, objcPtr, objv, remObjv) (sizeof(*(objcPtr)) == sizeof(int) \ ? TclParseArgsObjv((interp), (argTable), (int *)(void *)(objcPtr), (objv), (remObjv)) \ : (Tcl_ParseArgsObjv)((interp), (argTable), (size_t *)(void *)(objcPtr), (objv), (remObjv))) +#endif /* TCL_8_API */ #endif /* !defined(BUILD_tcl) */ #endif diff --git a/unix/configure b/unix/configure index 4c54fbe..acb1ebe 100755 --- a/unix/configure +++ b/unix/configure @@ -810,6 +810,7 @@ enable_load enable_symbols enable_langinfo enable_dll_unloading +enable_tcl8api with_tzdata enable_dtrace enable_framework @@ -1460,6 +1461,7 @@ Optional Features: --enable-langinfo use nl_langinfo if possible to determine encoding at startup, otherwise use old heuristic (default: on) --enable-dll-unloading enable the 'unload' command (default: on) + --enable-tcl8api enable the Tcl 8 compatibility API (default: on) --enable-dtrace build with DTrace support (default: off) --enable-framework package shared libraries in MacOSX frameworks (default: off) @@ -10656,6 +10658,24 @@ fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_ok" >&5 printf "%s\n" "$tcl_ok" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to use Tcl 8 compatibility API" >&5 +printf %s "checking whether to use Tcl 8 compatibility API... " >&6; } +# Check whether --enable-tcl8api was given. +if test ${enable_tcl8api+y} +then : + enableval=$enable_tcl8api; tcl_ok=$enableval +else $as_nop + tcl_ok=yes +fi + +if test $tcl_ok = yes; then + +printf "%s\n" "#define TCL_8_API 1" >>confdefs.h + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_ok" >&5 +printf "%s\n" "$tcl_ok" >&6; } + #------------------------------------------------------------------------ # Check whether the timezone data is supplied by the OS or has # to be installed by Tcl. The default is autodetection, but can diff --git a/unix/configure.ac b/unix/configure.ac index 238e47a..173a977 100644 --- a/unix/configure.ac +++ b/unix/configure.ac @@ -666,6 +666,16 @@ if test $tcl_ok = yes; then fi AC_MSG_RESULT([$tcl_ok]) +AC_MSG_CHECKING([whether to use Tcl 8 compatibility API]) +AC_ARG_ENABLE(tcl8api, + AS_HELP_STRING([--enable-tcl8api], + [enable the Tcl 8 compatibility API (default: on)]), + [tcl_ok=$enableval], [tcl_ok=yes]) +if test $tcl_ok = yes; then + AC_DEFINE(TCL_8_API, 1, [Tcl 8 compatibility API enabled?]) +fi +AC_MSG_RESULT([$tcl_ok]) + #------------------------------------------------------------------------ # Check whether the timezone data is supplied by the OS or has # to be installed by Tcl. The default is autodetection, but can diff --git a/unix/dltest/Makefile.in b/unix/dltest/Makefile.in index e8dce2f..558376f 100644 --- a/unix/dltest/Makefile.in +++ b/unix/dltest/Makefile.in @@ -17,7 +17,7 @@ TCL_VERSION= @TCL_VERSION@ CFLAGS_DEBUG = @CFLAGS_DEBUG@ CFLAGS_OPTIMIZE = @CFLAGS_OPTIMIZE@ -CFLAGS = @CFLAGS_DEFAULT@ @CFLAGS@ -DTCL_NO_DEPRECATED=1 -Wall -Wextra -Wc++-compat -Wconversion -Werror +CFLAGS = @CFLAGS_DEFAULT@ @CFLAGS@ -DTCL_NO_DEPRECATED=1 -Wall -Wextra -Wc++-compat -Wconversion LDFLAGS_DEBUG = @LDFLAGS_DEBUG@ LDFLAGS_OPTIMIZE = @LDFLAGS_OPTIMIZE@ LDFLAGS = @LDFLAGS_DEFAULT@ @LDFLAGS@ -- cgit v0.12 From b2236891533a3b3e661914bc75bea1346351f0f1 Mon Sep 17 00:00:00 2001 From: apnadkarni Date: Mon, 10 Apr 2023 13:19:22 +0000 Subject: Add notcl8api to OPTS to mirror --disable-tcl8api in configure --- win/rules.vc | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/win/rules.vc b/win/rules.vc index 0dd6ef2..4ab549d 100644 --- a/win/rules.vc +++ b/win/rules.vc @@ -817,11 +817,14 @@ DOTSEPARATED=$(DOTSEPARATED:b=.) # _USE_64BIT_TIME_T - forces a build using 64-bit time_t for 32-bit build # (CRT library should support this, not needed for Tcl 9.x) # TCL_UTF_MAX=3 - forces a build using UTF-16 internally (not recommended). +# TCL_8_API - 0 -> Tcl 8 compatible API is disabled +# 1 -> Tcl 8 API enabled (default) # Further, LINKERFLAGS are modified based on above. # Default values for all the above STATIC_BUILD = 0 TCL_THREADS = 1 +TCL_8_API = 1 DEBUG = 0 SYMBOLS = 0 PROFILE = 0 @@ -877,10 +880,19 @@ TCL_THREADS = 0 USE_THREAD_ALLOC= 0 !endif +!if [nmakehlp -f $(OPTS) "notcl8api"] +!message *** Disable Tcl 8 API compatibility macros +TCL_8_API = 0 +!endif + +# NOTE: THIS MUST COME AFTER THE notcl8api CHECK ABOVE because the "-f" option +# does *substring* checks, not exact checks so "tcl8" will match "notcl8api" as well. +!if $(TCL_8_API) !if [nmakehlp -f $(OPTS) "tcl8"] !message *** Build for Tcl8 TCL_BUILD_FOR = 8 !endif +!endif !if $(TCL_MAJOR_VERSION) == 8 !if [nmakehlp -f $(OPTS) "time64bit"] @@ -1451,12 +1463,16 @@ OPTDEFINES = $(OPTDEFINES) /D_USE_64BIT_TIME_T=1 # _ATL_XP_TARGETING - Newer SDK's need this to build for XP COMPILERFLAGS = /D_ATL_XP_TARGETING !endif + !if "$(TCL_UTF_MAX)" == "3" OPTDEFINES = $(OPTDEFINES) /DTCL_UTF_MAX=3 !endif !if "$(TCL_BUILD_FOR)" == "8" OPTDEFINES = $(OPTDEFINES) /DTCL_MAJOR_VERSION=8 !endif +!if $(TCL_8_API) +OPTDEFINES = $(OPTDEFINES) /DTCL_8_API=1 +!endif # Like the TEA system only set this non empty for non-Tk extensions # Note: some extensions use PACKAGE_NAME and others use PACKAGE_TCLNAME -- cgit v0.12 From 06e049afdf041c22b28d0983a91a5d38d5bf2c6e Mon Sep 17 00:00:00 2001 From: apnadkarni Date: Mon, 10 Apr 2023 13:21:02 +0000 Subject: Fix compiler warnings and crashes. Builds and passes test suite on Windows and Ubuntu for 64-bit --- generic/tclDecls.h | 18 ++++++++++++------ generic/tclFCmd.c | 2 +- generic/tclTest.c | 27 ++++++++++++++++----------- generic/tclTestObj.c | 2 +- generic/tclThreadTest.c | 3 ++- generic/tclTrace.c | 3 ++- win/tclWinDde.c | 3 ++- win/tclWinReg.c | 2 +- 8 files changed, 37 insertions(+), 23 deletions(-) diff --git a/generic/tclDecls.h b/generic/tclDecls.h index caf3ce6..3f3d76e 100644 --- a/generic/tclDecls.h +++ b/generic/tclDecls.h @@ -4020,19 +4020,19 @@ extern const TclStubs *tclStubsPtr; Tcl_GetStringFromObj(objPtr, (Tcl_Size *)NULL) #define Tcl_GetUnicode(objPtr) \ Tcl_GetUnicodeFromObj(objPtr, (Tcl_Size *)NULL) -#if defined(TCL_8_API) +#if defined(TCL_8_API) || TCL_MAJOR_VERSION == 8 # undef Tcl_GetBytesFromObj -# undef Tcl_GetIndexFromObjStruct # undef Tcl_GetStringFromObj # undef Tcl_GetUnicodeFromObj #endif +#undef Tcl_GetIndexFromObjStruct #undef TclGetByteArrayFromObj #undef Tcl_GetByteArrayFromObj #undef Tcl_GetBooleanFromObj #undef Tcl_GetBoolean #if defined(USE_TCL_STUBS) -# if defined(TCL_8_API) +# if defined(TCL_8_API) || TCL_MAJOR_VERSION == 8 # define Tcl_GetBytesFromObj(interp, objPtr, sizePtr) \ (sizeof(*(sizePtr)) <= sizeof(int) ? \ tclStubsPtr->tclGetBytesFromObj(interp, objPtr, (int *)(void *)(sizePtr)) : \ @@ -4060,6 +4060,9 @@ extern const TclStubs *tclStubsPtr; tclStubsPtr->tclGetUnicodeFromObj(objPtr, (int *)(void *)(sizePtr)) : \ tclStubsPtr->tcl_GetUnicodeFromObj(objPtr, (size_t *)(void *)(sizePtr))) # else /* TCL_8_API */ +# define Tcl_GetIndexFromObjStruct(interp, objPtr, tablePtr, offset, msg, flags, indexPtr) \ + (tclStubsPtr->tcl_GetIndexFromObjStruct((interp), (objPtr), (tablePtr), (offset), (msg), \ + (flags)|(int)(sizeof(*(indexPtr))<<1), (indexPtr))) # if TCL_MAJOR_VERSION > 8 # define Tcl_GetByteArrayFromObj(objPtr, sizePtr) \ tclStubsPtr->tcl_GetBytesFromObj(NULL, objPtr, (size_t *)(void *)(sizePtr)) @@ -4075,7 +4078,7 @@ extern const TclStubs *tclStubsPtr; ((sizeof(*(boolPtr)) == sizeof(int) && (TCL_MAJOR_VERSION == 8)) ? tclStubsPtr->tcl_GetBoolean(interp, src, (int *)(boolPtr)) : \ Tcl_GetBool(interp, src, (TCL_NULL_OK-2)&(int)sizeof((*(boolPtr))), (char *)(boolPtr))) #else -# if defined(TCL_8_API) +# if defined(TCL_8_API) || TCL_MAJOR_VERSION == 8 # define Tcl_GetBytesFromObj(interp, objPtr, sizePtr) \ (sizeof(*(sizePtr)) <= sizeof(int) ? \ TclGetBytesFromObj(interp, objPtr, (int *)(void *)(sizePtr)) : \ @@ -4096,6 +4099,9 @@ extern const TclStubs *tclStubsPtr; TclGetUnicodeFromObj(objPtr, (int *)(void *)(sizePtr)) : \ (Tcl_GetUnicodeFromObj)(objPtr, (size_t *)(void *)(sizePtr))) # else /* TCL_8_API */ +# define Tcl_GetIndexFromObjStruct(interp, objPtr, tablePtr, offset, msg, flags, indexPtr) \ + ((Tcl_GetIndexFromObjStruct)((interp), (objPtr), (tablePtr), (offset), (msg), \ + (flags)|(int)(sizeof(*(indexPtr))<<1), (indexPtr))) # define Tcl_GetByteArrayFromObj(objPtr, sizePtr) \ Tcl_GetBytesFromObj(NULL, objPtr, (size_t *)(void *)(sizePtr)) # endif /* TCL_8_API */ @@ -4176,7 +4182,7 @@ extern const TclStubs *tclStubsPtr; # define Tcl_WCharLen (sizeof(wchar_t) != sizeof(short) \ ? (Tcl_Size (*)(wchar_t *))tclStubsPtr->tcl_UniCharLen \ : (Tcl_Size (*)(wchar_t *))Tcl_Char16Len) -#if defined(TCL_8_API) +#if defined(TCL_8_API) || TCL_MAJOR_VERSION == 8 # undef Tcl_ListObjGetElements # define Tcl_ListObjGetElements(interp, listPtr, objcPtr, objvPtr) (sizeof(*(objcPtr)) == sizeof(int) \ ? tclStubsPtr->tclListObjGetElements((interp), (listPtr), (int *)(void *)(objcPtr), (objvPtr)) \ @@ -4220,7 +4226,7 @@ extern const TclStubs *tclStubsPtr; ? (Tcl_Size (*)(wchar_t *))Tcl_UniCharLen \ : (Tcl_Size (*)(wchar_t *))Tcl_Char16Len) #if !defined(BUILD_tcl) -#if defined(TCL_8_API) +#if defined(TCL_8_API) || TCL_MAJOR_VERSION == 8 # define Tcl_ListObjGetElements(interp, listPtr, objcPtr, objvPtr) (sizeof(*(objcPtr)) == sizeof(int) \ ? TclListObjGetElements((interp), (listPtr), (int *)(void *)(objcPtr), (objvPtr)) \ : (Tcl_ListObjGetElements)((interp), (listPtr), (size_t *)(void *)(objcPtr), (objvPtr))) diff --git a/generic/tclFCmd.c b/generic/tclFCmd.c index a34e80a..d26eb9c 100644 --- a/generic/tclFCmd.c +++ b/generic/tclFCmd.c @@ -1533,7 +1533,7 @@ TclFileTempDirCmd( } if (objc > 1) { - int length; + Tcl_Size length; Tcl_Obj *templateObj = objv[1]; const char *string = Tcl_GetStringFromObj(templateObj, &length); const int onWindows = (tclPlatform == TCL_PLATFORM_WINDOWS); diff --git a/generic/tclTest.c b/generic/tclTest.c index e42d5e6..d829640 100644 --- a/generic/tclTest.c +++ b/generic/tclTest.c @@ -2028,7 +2028,7 @@ static int UtfExtWrapper( int result; int flags; Tcl_Obj **flagObjs; - int nflags; + Tcl_Size nflags; static const struct { const char *flagKey; int flag; @@ -2043,7 +2043,7 @@ static int UtfExtWrapper( {"profilereplace", TCL_ENCODING_PROFILE_REPLACE}, {NULL, 0} }; - int i; + Tcl_Size i; Tcl_WideInt wide; if (objc < 7 || objc > 10) { @@ -2418,7 +2418,8 @@ TestevalexObjCmd( int objc, /* Number of arguments. */ Tcl_Obj *const objv[]) /* Argument objects. */ { - int length, flags; + int flags; + Tcl_Size length; const char *script; flags = 0; @@ -3656,7 +3657,8 @@ TestlinkarrayCmd( TCL_LINK_FLOAT, TCL_LINK_DOUBLE, TCL_LINK_STRING, TCL_LINK_CHARS, TCL_LINK_BINARY }; - int typeIndex, readonly, i, size, length; + int typeIndex, readonly, i, size; + Tcl_Size length; char *name, *arg; Tcl_WideInt addr; @@ -4001,7 +4003,8 @@ TestparserObjCmd( Tcl_Obj *const objv[]) /* The argument objects. */ { const char *script; - int length, dummy; + Tcl_Size dummy; + int length; Tcl_Parse parse; if (objc != 3) { @@ -4057,7 +4060,8 @@ TestexprparserObjCmd( Tcl_Obj *const objv[]) /* The argument objects. */ { const char *script; - int length, dummy; + Tcl_Size dummy; + int length; Tcl_Parse parse; if (objc != 3) { @@ -4246,7 +4250,8 @@ TestparsevarnameObjCmd( Tcl_Obj *const objv[]) /* The argument objects. */ { const char *script; - int append, length, dummy; + int length, append; + Tcl_Size dummy; Tcl_Parse parse; if (objc != 4) { @@ -4379,8 +4384,8 @@ TestregexpObjCmd( int objc, /* Number of arguments. */ Tcl_Obj *const objv[]) /* Argument objects. */ { - int i, indices, stringLength, match, about; - Tcl_Size ii; + int i, indices, match, about; + Tcl_Size stringLength, ii; int hasxflags, cflags, eflags; Tcl_RegExp regExpr; const char *string; @@ -5533,7 +5538,7 @@ TeststringbytesObjCmd( int objc, /* Number of arguments. */ Tcl_Obj *const objv[]) /* The argument objects. */ { - int n; + Tcl_Size n; const unsigned char *p; if (objc != 2) { @@ -7269,7 +7274,7 @@ static Tcl_Obj * SimpleRedirect( Tcl_Obj *pathPtr) /* Name of file to copy. */ { - int len; + Tcl_Size len; const char *str; Tcl_Obj *origPtr; diff --git a/generic/tclTestObj.c b/generic/tclTestObj.c index b24c639..26d33ce 100644 --- a/generic/tclTestObj.c +++ b/generic/tclTestObj.c @@ -899,7 +899,7 @@ TestlistobjCmd( Tcl_Size first; /* First index in the list */ Tcl_Size count; /* Count of elements in a list */ Tcl_Obj **varPtr; - int i, len; + Tcl_Size i, len; if (objc < 3) { Tcl_WrongNumArgs(interp, 1, objv, "option arg ?arg...?"); diff --git a/generic/tclThreadTest.c b/generic/tclThreadTest.c index a5b079a..484c4e4 100644 --- a/generic/tclThreadTest.c +++ b/generic/tclThreadTest.c @@ -272,7 +272,8 @@ ThreadObjCmd( } case THREAD_CREATE: { const char *script; - int joinable, len; + int joinable; + Tcl_Size len; if (objc == 2) { /* diff --git a/generic/tclTrace.c b/generic/tclTrace.c index daeb424..4403562 100644 --- a/generic/tclTrace.c +++ b/generic/tclTrace.c @@ -269,7 +269,8 @@ Tcl_TraceObjCmd( case TRACE_OLD_VDELETE: { Tcl_Obj *copyObjv[6]; Tcl_Obj *opsList; - int code, numFlags; + int code; + Tcl_Size numFlags; if (objc != 5) { Tcl_WrongNumArgs(interp, 2, objv, "name ops command"); diff --git a/win/tclWinDde.c b/win/tclWinDde.c index fb2be99..457f20d 100644 --- a/win/tclWinDde.c +++ b/win/tclWinDde.c @@ -318,7 +318,8 @@ DdeSetServerName( Tcl_DString dString; const WCHAR *actualName; Tcl_Obj *srvListPtr = NULL, **srvPtrPtr = NULL; - int n, srvCount = 0, lastSuffix, r = TCL_OK; + Tcl_Size n, srvCount = 0; + int lastSuffix, r = TCL_OK; ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey); /* diff --git a/win/tclWinReg.c b/win/tclWinReg.c index becc6f5..efd5b7c 100644 --- a/win/tclWinReg.c +++ b/win/tclWinReg.c @@ -1329,7 +1329,7 @@ SetValue( (DWORD) type, (BYTE *) &value, sizeof(DWORD)); } else if (type == REG_MULTI_SZ) { Tcl_DString data, buf; - int objc, i; + Tcl_Size objc, i; Tcl_Obj **objv; if (Tcl_ListObjGetElements(interp, dataObj, &objc, &objv) != TCL_OK) { -- cgit v0.12