summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--generic/tclDecls.h24
-rw-r--r--generic/tclFCmd.c2
-rw-r--r--generic/tclTest.c27
-rw-r--r--generic/tclTestObj.c2
-rw-r--r--generic/tclThreadTest.c3
-rw-r--r--generic/tclTrace.c3
-rw-r--r--win/rules.vc16
-rw-r--r--win/tclWinDde.c3
-rw-r--r--win/tclWinReg.c2
9 files changed, 53 insertions, 29 deletions
diff --git a/generic/tclDecls.h b/generic/tclDecls.h
index caf3ce6..dad9c05 100644
--- a/generic/tclDecls.h
+++ b/generic/tclDecls.h
@@ -4020,26 +4020,23 @@ 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)) : \
tclStubsPtr->tcl_GetBytesFromObj(interp, objPtr, (size_t *)(void *)(sizePtr)))
-# 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_GetStringFromObj(objPtr, sizePtr) \
(sizeof(*(sizePtr)) <= sizeof(int) ? \
tclStubsPtr->tclGetStringFromObj(objPtr, (int *)(void *)(sizePtr)) : \
@@ -4068,6 +4065,9 @@ extern const TclStubs *tclStubsPtr;
tclStubsPtr->tcl_GetByteArrayFromObj(objPtr, (size_t *)(void *)(sizePtr))
# endif /* TCL_MAJOR_VERSION > 8 */
# endif
+# 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)))
@@ -4075,14 +4075,11 @@ 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)) : \
(Tcl_GetBytesFromObj)(interp, objPtr, (size_t *)(void *)(sizePtr)))
-# 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_GetStringFromObj(objPtr, sizePtr) \
(sizeof(*(sizePtr)) <= sizeof(int) ? \
TclGetStringFromObj(objPtr, (int *)(void *)(sizePtr)) : \
@@ -4099,6 +4096,9 @@ extern const TclStubs *tclStubsPtr;
# define Tcl_GetByteArrayFromObj(objPtr, sizePtr) \
Tcl_GetBytesFromObj(NULL, objPtr, (size_t *)(void *)(sizePtr))
# endif /* 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_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)))
@@ -4176,7 +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)
+#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 +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)
+#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/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
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) {