summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2022-10-09 16:29:02 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2022-10-09 16:29:02 (GMT)
commit8958065cc37b76f85ed77dc5f45aa83c3bcb1d9e (patch)
tree0c4e96e543337ae06da7614068687ebe3d763eb1
parentbff6ed619c256ef90256f67fc53f7b566b58c368 (diff)
parent2d5ed059a0d65242470b8ef41870bbadaa67e927 (diff)
downloadtcl-8958065cc37b76f85ed77dc5f45aa83c3bcb1d9e.zip
tcl-8958065cc37b76f85ed77dc5f45aa83c3bcb1d9e.tar.gz
tcl-8958065cc37b76f85ed77dc5f45aa83c3bcb1d9e.tar.bz2
Merge 8.7
-rw-r--r--doc/BoolObj.312
-rw-r--r--generic/tclDecls.h14
-rw-r--r--generic/tclTest.c45
-rw-r--r--generic/tclTestObj.c15
-rw-r--r--win/tclWinSock.c18
5 files changed, 59 insertions, 45 deletions
diff --git a/doc/BoolObj.3 b/doc/BoolObj.3
index 47a2189..71580af 100644
--- a/doc/BoolObj.3
+++ b/doc/BoolObj.3
@@ -20,7 +20,7 @@ Tcl_Obj *
\fBTcl_SetBooleanObj\fR(\fIobjPtr, intValue\fR)
.sp
int
-\fBTcl_GetBooleanFromObj\fR(\fIinterp, objPtr, intPtr\fR)
+\fBTcl_GetBooleanFromObj\fR(\fIinterp, objPtr, boolPtr\fR)
.sp
int
\fBTcl_GetBoolFromObj\fR(\fIinterp, objPtr, flags. charPtr\fR)
@@ -35,7 +35,7 @@ retrieve a boolean value.
If a boolean value cannot be retrieved,
an error message is left in the interpreter's result value
unless \fIinterp\fR is NULL.
-.AP int *intPtr out
+.AP "bool \&| int" *boolPtr out
Points to place where \fBTcl_GetBooleanFromObj\fR
stores the boolean value (0 or 1) obtained from \fIobjPtr\fR.
.AP char *charPtr out
@@ -71,13 +71,13 @@ any former value stored in \fI*objPtr\fR.
from the value stored in \fI*objPtr\fR.
If \fIobjPtr\fR holds a string value recognized by \fBTcl_GetBoolean\fR,
then the recognized boolean value is written at the address given
-by \fIintPtr\fR.
+by \fIboolPtr\fR.
If \fIobjPtr\fR holds any value recognized as
a number by Tcl, then if that value is zero a 0 is written at
-the address given by \fIintPtr\fR and if that
-value is non-zero a 1 is written at the address given by \fIintPtr\fR.
+the address given by \fIboolPtr\fR and if that
+value is non-zero a 1 is written at the address given by \fIboolPtr\fR.
In all cases where a value is written at the address given
-by \fIintPtr\fR, \fBTcl_GetBooleanFromObj\fR returns \fBTCL_OK\fR.
+by \fIboolPtr\fR, \fBTcl_GetBooleanFromObj\fR returns \fBTCL_OK\fR.
If the value of \fIobjPtr\fR does not meet any of the conditions
above, then \fBTCL_ERROR\fR is returned and an error message is
left in the interpreter's result unless \fIinterp\fR is NULL.
diff --git a/generic/tclDecls.h b/generic/tclDecls.h
index 80131e8..b25803f 100644
--- a/generic/tclDecls.h
+++ b/generic/tclDecls.h
@@ -4326,6 +4326,8 @@ extern const TclStubs *tclStubsPtr;
Tcl_GetUnicodeFromObj(objPtr, (int *)NULL)
#undef Tcl_GetBytesFromObj
#undef Tcl_GetIndexFromObjStruct
+#undef Tcl_GetBooleanFromObj
+#undef Tcl_GetBoolean
#ifdef TCL_NO_DEPRECATED
#undef Tcl_GetStringFromObj
#undef Tcl_GetUnicodeFromObj
@@ -4336,6 +4338,12 @@ extern const TclStubs *tclStubsPtr;
(sizeof(*(sizePtr)) <= sizeof(int) ? tclStubsPtr->tclGetBytesFromObj(interp, objPtr, (int *)(sizePtr)) : tclStubsPtr->tcl_GetBytesFromObj(interp, objPtr, (size_t *)(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_GetBooleanFromObj(interp, objPtr, boolPtr) \
+ (sizeof(*(boolPtr)) == sizeof(int) ? tclStubsPtr->tcl_GetBooleanFromObj(interp, objPtr, (int *)(boolPtr)) : \
+ ((sizeof(*(boolPtr)) == sizeof(char)) ? Tcl_GetBoolFromObj(interp, objPtr, 0, (char *)(boolPtr)) : (Tcl_Panic("Wrong bool var for %s", "Tcl_GetBooleanFromObj"), TCL_ERROR)))
+#define Tcl_GetBoolean(interp, src, boolPtr) \
+ (sizeof(*(boolPtr)) == sizeof(int) ? tclStubsPtr->tcl_GetBoolean(interp, src, (int *)(boolPtr)) : \
+ ((sizeof(*(boolPtr)) == sizeof(char)) ? Tcl_GetBool(interp, src, 0, (char *)(boolPtr)) : (Tcl_Panic("Wrong bool var for %s", "Tcl_GetBoolean"), TCL_ERROR)))
#ifdef TCL_NO_DEPRECATED
#define Tcl_GetStringFromObj(objPtr, sizePtr) \
(sizeof(*(sizePtr)) <= sizeof(int) ? tclStubsPtr->tcl_GetStringFromObj(objPtr, (int *)(sizePtr)) : tclStubsPtr->tclGetStringFromObj(objPtr, (size_t *)(sizePtr)))
@@ -4349,6 +4357,12 @@ extern const TclStubs *tclStubsPtr;
(sizeof(*(sizePtr)) <= sizeof(int) ? (TclGetBytesFromObj)(interp, objPtr, (int *)(sizePtr)) : (Tcl_GetBytesFromObj)(interp, objPtr, (size_t *)(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_GetBooleanFromObj(interp, objPtr, boolPtr) \
+ (sizeof(*(boolPtr)) == sizeof(int) ? Tcl_GetBooleanFromObj(interp, objPtr, (int *)(boolPtr)) : \
+ ((sizeof(*(boolPtr)) == sizeof(char)) ? Tcl_GetBoolFromObj(interp, objPtr, 0, (char *)(boolPtr)) : (Tcl_Panic("Wrong bool var for %s", "Tcl_GetBooleanFromObj"), TCL_ERROR)))
+#define Tcl_GetBoolean(interp, src, boolPtr) \
+ (sizeof(*(boolPtr)) == sizeof(int) ? Tcl_GetBoolean(interp, src, (int *)(boolPtr)) : \
+ ((sizeof(*(boolPtr)) == sizeof(char)) ? Tcl_GetBool(interp, src, 0, (char *)(boolPtr)) : (Tcl_Panic("Wrong bool var for %s", "Tcl_GetBoolean"), TCL_ERROR)))
#ifdef TCL_NO_DEPRECATED
#define Tcl_GetStringFromObj(objPtr, sizePtr) \
(sizeof(*(sizePtr)) <= sizeof(int) ? (Tcl_GetStringFromObj)(objPtr, (int *)(sizePtr)) : (TclGetStringFromObj)(objPtr, (size_t *)(sizePtr)))
diff --git a/generic/tclTest.c b/generic/tclTest.c
index 95f4d2f..d2d3c1e 100644
--- a/generic/tclTest.c
+++ b/generic/tclTest.c
@@ -33,6 +33,7 @@
#endif
#include "tclOO.h"
#include <math.h>
+#include <stdbool.h>
/*
* Required for Testregexp*Cmd
@@ -2332,7 +2333,7 @@ TesteventProc(
Tcl_Obj *command = ev->command;
int result = Tcl_EvalObjEx(interp, command,
TCL_EVAL_GLOBAL | TCL_EVAL_DIRECT);
- int retval;
+ bool retval;
if (result != TCL_OK) {
Tcl_AddErrorInfo(interp,
@@ -2904,7 +2905,8 @@ TestlinkCmd(
static Tcl_WideUInt uwideVar = 123;
static int created = 0;
char buffer[2*TCL_DOUBLE_SPACE];
- int writable, flag;
+ bool writable;
+ int flag;
Tcl_Obj *tmp;
if (argc < 2) {
@@ -2941,7 +2943,7 @@ TestlinkCmd(
if (Tcl_GetBoolean(interp, argv[2], &writable) != TCL_OK) {
return TCL_ERROR;
}
- flag = (writable != 0) ? 0 : TCL_LINK_READ_ONLY;
+ flag = writable ? 0 : TCL_LINK_READ_ONLY;
if (Tcl_LinkVar(interp, "int", &intVar,
TCL_LINK_INT | flag) != TCL_OK) {
return TCL_ERROR;
@@ -2949,7 +2951,7 @@ TestlinkCmd(
if (Tcl_GetBoolean(interp, argv[3], &writable) != TCL_OK) {
return TCL_ERROR;
}
- flag = (writable != 0) ? 0 : TCL_LINK_READ_ONLY;
+ flag = writable ? 0 : TCL_LINK_READ_ONLY;
if (Tcl_LinkVar(interp, "real", &realVar,
TCL_LINK_DOUBLE | flag) != TCL_OK) {
return TCL_ERROR;
@@ -2957,7 +2959,7 @@ TestlinkCmd(
if (Tcl_GetBoolean(interp, argv[4], &writable) != TCL_OK) {
return TCL_ERROR;
}
- flag = (writable != 0) ? 0 : TCL_LINK_READ_ONLY;
+ flag = writable ? 0 : TCL_LINK_READ_ONLY;
if (Tcl_LinkVar(interp, "bool", &boolVar,
TCL_LINK_BOOLEAN | flag) != TCL_OK) {
return TCL_ERROR;
@@ -2965,7 +2967,7 @@ TestlinkCmd(
if (Tcl_GetBoolean(interp, argv[5], &writable) != TCL_OK) {
return TCL_ERROR;
}
- flag = (writable != 0) ? 0 : TCL_LINK_READ_ONLY;
+ flag = writable ? 0 : TCL_LINK_READ_ONLY;
if (Tcl_LinkVar(interp, "string", &stringVar,
TCL_LINK_STRING | flag) != TCL_OK) {
return TCL_ERROR;
@@ -2973,7 +2975,7 @@ TestlinkCmd(
if (Tcl_GetBoolean(interp, argv[6], &writable) != TCL_OK) {
return TCL_ERROR;
}
- flag = (writable != 0) ? 0 : TCL_LINK_READ_ONLY;
+ flag = writable ? 0 : TCL_LINK_READ_ONLY;
if (Tcl_LinkVar(interp, "wide", &wideVar,
TCL_LINK_WIDE_INT | flag) != TCL_OK) {
return TCL_ERROR;
@@ -2981,7 +2983,7 @@ TestlinkCmd(
if (Tcl_GetBoolean(interp, argv[7], &writable) != TCL_OK) {
return TCL_ERROR;
}
- flag = (writable != 0) ? 0 : TCL_LINK_READ_ONLY;
+ flag = writable ? 0 : TCL_LINK_READ_ONLY;
if (Tcl_LinkVar(interp, "char", &charVar,
TCL_LINK_CHAR | flag) != TCL_OK) {
return TCL_ERROR;
@@ -2989,7 +2991,7 @@ TestlinkCmd(
if (Tcl_GetBoolean(interp, argv[8], &writable) != TCL_OK) {
return TCL_ERROR;
}
- flag = (writable != 0) ? 0 : TCL_LINK_READ_ONLY;
+ flag = writable ? 0 : TCL_LINK_READ_ONLY;
if (Tcl_LinkVar(interp, "uchar", &ucharVar,
TCL_LINK_UCHAR | flag) != TCL_OK) {
return TCL_ERROR;
@@ -2997,7 +2999,7 @@ TestlinkCmd(
if (Tcl_GetBoolean(interp, argv[9], &writable) != TCL_OK) {
return TCL_ERROR;
}
- flag = (writable != 0) ? 0 : TCL_LINK_READ_ONLY;
+ flag = writable ? 0 : TCL_LINK_READ_ONLY;
if (Tcl_LinkVar(interp, "short", &shortVar,
TCL_LINK_SHORT | flag) != TCL_OK) {
return TCL_ERROR;
@@ -3005,7 +3007,7 @@ TestlinkCmd(
if (Tcl_GetBoolean(interp, argv[10], &writable) != TCL_OK) {
return TCL_ERROR;
}
- flag = (writable != 0) ? 0 : TCL_LINK_READ_ONLY;
+ flag = writable ? 0 : TCL_LINK_READ_ONLY;
if (Tcl_LinkVar(interp, "ushort", &ushortVar,
TCL_LINK_USHORT | flag) != TCL_OK) {
return TCL_ERROR;
@@ -3013,7 +3015,7 @@ TestlinkCmd(
if (Tcl_GetBoolean(interp, argv[11], &writable) != TCL_OK) {
return TCL_ERROR;
}
- flag = (writable != 0) ? 0 : TCL_LINK_READ_ONLY;
+ flag = writable ? 0 : TCL_LINK_READ_ONLY;
if (Tcl_LinkVar(interp, "uint", &uintVar,
TCL_LINK_UINT | flag) != TCL_OK) {
return TCL_ERROR;
@@ -3021,7 +3023,7 @@ TestlinkCmd(
if (Tcl_GetBoolean(interp, argv[12], &writable) != TCL_OK) {
return TCL_ERROR;
}
- flag = (writable != 0) ? 0 : TCL_LINK_READ_ONLY;
+ flag = writable ? 0 : TCL_LINK_READ_ONLY;
if (Tcl_LinkVar(interp, "long", &longVar,
TCL_LINK_LONG | flag) != TCL_OK) {
return TCL_ERROR;
@@ -3029,7 +3031,7 @@ TestlinkCmd(
if (Tcl_GetBoolean(interp, argv[13], &writable) != TCL_OK) {
return TCL_ERROR;
}
- flag = (writable != 0) ? 0 : TCL_LINK_READ_ONLY;
+ flag = writable ? 0 : TCL_LINK_READ_ONLY;
if (Tcl_LinkVar(interp, "ulong", &ulongVar,
TCL_LINK_ULONG | flag) != TCL_OK) {
return TCL_ERROR;
@@ -3037,7 +3039,7 @@ TestlinkCmd(
if (Tcl_GetBoolean(interp, argv[14], &writable) != TCL_OK) {
return TCL_ERROR;
}
- flag = (writable != 0) ? 0 : TCL_LINK_READ_ONLY;
+ flag = writable ? 0 : TCL_LINK_READ_ONLY;
if (Tcl_LinkVar(interp, "float", &floatVar,
TCL_LINK_FLOAT | flag) != TCL_OK) {
return TCL_ERROR;
@@ -3045,7 +3047,7 @@ TestlinkCmd(
if (Tcl_GetBoolean(interp, argv[15], &writable) != TCL_OK) {
return TCL_ERROR;
}
- flag = (writable != 0) ? 0 : TCL_LINK_READ_ONLY;
+ flag = writable ? 0 : TCL_LINK_READ_ONLY;
if (Tcl_LinkVar(interp, "uwide", &uwideVar,
TCL_LINK_WIDE_UINT | flag) != TCL_OK) {
return TCL_ERROR;
@@ -5537,7 +5539,8 @@ TestsaveresultCmd(
Tcl_Obj *const objv[]) /* The argument objects. */
{
Interp* iPtr = (Interp*) interp;
- int discard, result, index;
+ int result, index;
+ bool discard;
Tcl_SavedResult state;
Tcl_Obj *objPtr;
static const char *const optionStrings[] = {
@@ -6522,7 +6525,7 @@ TestSocketCmd(
if ((cmdName[0] == 't') && (strncmp(cmdName, "testflags", len) == 0)) {
Tcl_Channel hChannel;
int modePtr;
- int testMode;
+ bool testMode;
TcpState *statePtr;
/* Set test value in the socket driver
*/
@@ -6746,7 +6749,8 @@ TestFilesystemObjCmd(
int objc,
Tcl_Obj *const objv[])
{
- int res, boolVal;
+ int res;
+ bool boolVal;
const char *msg;
if (objc != 2) {
@@ -7117,7 +7121,8 @@ TestSimpleFilesystemObjCmd(
int objc,
Tcl_Obj *const objv[])
{
- int res, boolVal;
+ int res;
+ bool boolVal;
const char *msg;
if (objc != 2) {
diff --git a/generic/tclTestObj.c b/generic/tclTestObj.c
index 721237b..a995241 100644
--- a/generic/tclTestObj.c
+++ b/generic/tclTestObj.c
@@ -24,6 +24,7 @@
# include "tclTomMath.h"
#endif
#include "tclStringRep.h"
+#include <stdbool.h>
#ifdef __GNUC__
/*
@@ -292,9 +293,9 @@ TestbignumobjCmd(
return TCL_ERROR;
}
if (!Tcl_IsShared(varPtr[varIndex])) {
- Tcl_SetWideIntObj(varPtr[varIndex], mp_iszero(&bignumValue));
+ Tcl_SetBooleanObj(varPtr[varIndex], mp_iszero(&bignumValue));
} else {
- SetVarToObj(varPtr, varIndex, Tcl_NewWideIntObj(mp_iszero(&bignumValue)));
+ SetVarToObj(varPtr, varIndex, Tcl_NewBooleanObj(mp_iszero(&bignumValue)));
}
mp_clear(&bignumValue);
break;
@@ -353,7 +354,7 @@ TestbooleanobjCmd(
Tcl_Obj *const objv[]) /* Argument objects. */
{
size_t varIndex;
- int boolValue;
+ bool boolValue;
const char *subCmd;
Tcl_Obj **varPtr;
@@ -387,9 +388,9 @@ TestbooleanobjCmd(
*/
if ((varPtr[varIndex] != NULL) && !Tcl_IsShared(varPtr[varIndex])) {
- Tcl_SetWideIntObj(varPtr[varIndex], boolValue != 0);
+ Tcl_SetWideIntObj(varPtr[varIndex], boolValue);
} else {
- SetVarToObj(varPtr, varIndex, Tcl_NewWideIntObj(boolValue != 0));
+ SetVarToObj(varPtr, varIndex, Tcl_NewBooleanObj(boolValue));
}
Tcl_SetObjResult(interp, varPtr[varIndex]);
} else if (strcmp(subCmd, "get") == 0) {
@@ -412,9 +413,9 @@ TestbooleanobjCmd(
return TCL_ERROR;
}
if (!Tcl_IsShared(varPtr[varIndex])) {
- Tcl_SetWideIntObj(varPtr[varIndex], boolValue == 0);
+ Tcl_SetBooleanObj(varPtr[varIndex], !boolValue);
} else {
- SetVarToObj(varPtr, varIndex, Tcl_NewWideIntObj(boolValue == 0));
+ SetVarToObj(varPtr, varIndex, Tcl_NewBooleanObj(!boolValue));
}
Tcl_SetObjResult(interp, varPtr[varIndex]);
} else {
diff --git a/win/tclWinSock.c b/win/tclWinSock.c
index f1a6a5e..3962859 100644
--- a/win/tclWinSock.c
+++ b/win/tclWinSock.c
@@ -1206,15 +1206,12 @@ TcpSetOptionProc(
sock = statePtr->sockets->fd;
if (!strcasecmp(optionName, "-keepalive")) {
- BOOL val = FALSE;
- int boolVar, rtn;
+ BOOL val;
+ int rtn;
- if (Tcl_GetBoolean(interp, value, &boolVar) != TCL_OK) {
+ if (Tcl_GetBoolean(interp, value, &val) != TCL_OK) {
return TCL_ERROR;
}
- if (boolVar) {
- val = TRUE;
- }
rtn = setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE,
(const char *) &val, sizeof(BOOL));
if (rtn != 0) {
@@ -1228,15 +1225,12 @@ TcpSetOptionProc(
}
return TCL_OK;
} else if (!strcasecmp(optionName, "-nagle")) {
- BOOL val = FALSE;
- int boolVar, rtn;
+ BOOL val;
+ int rtn;
- if (Tcl_GetBoolean(interp, value, &boolVar) != TCL_OK) {
+ if (Tcl_GetBoolean(interp, value, &val) != TCL_OK) {
return TCL_ERROR;
}
- if (!boolVar) {
- val = TRUE;
- }
rtn = setsockopt(sock, IPPROTO_TCP, TCP_NODELAY,
(const char *) &val, sizeof(BOOL));
if (rtn != 0) {