diff options
39 files changed, 110 insertions, 230 deletions
diff --git a/generic/tclArithSeries.c b/generic/tclArithSeries.c index 11833d5..76d5c79 100755 --- a/generic/tclArithSeries.c +++ b/generic/tclArithSeries.c @@ -11,7 +11,6 @@ */ #include "tclInt.h" -#include <assert.h> #include <math.h> /* diff --git a/generic/tclAssembly.c b/generic/tclAssembly.c index 9c6ed6a..3da2b54 100644 --- a/generic/tclAssembly.c +++ b/generic/tclAssembly.c @@ -31,7 +31,6 @@ #include "tclInt.h" #include "tclCompile.h" #include "tclOOInt.h" -#include <assert.h> /* * Structure that represents a range of instructions in the bytecode. diff --git a/generic/tclBasic.c b/generic/tclBasic.c index 5d2dddb..ab287e3 100644 --- a/generic/tclBasic.c +++ b/generic/tclBasic.c @@ -22,7 +22,6 @@ #include "tclCompile.h" #include "tclTomMath.h" #include <math.h> -#include <assert.h> /* * TCL_FPCLASSIFY_MODE: diff --git a/generic/tclBinary.c b/generic/tclBinary.c index f72c38f..503a30f 100644 --- a/generic/tclBinary.c +++ b/generic/tclBinary.c @@ -15,7 +15,6 @@ #include "tclTomMath.h" #include <math.h> -#include <assert.h> /* * The following constants are used by GetFormatSpec to indicate various diff --git a/generic/tclCkalloc.c b/generic/tclCkalloc.c index a391efd..6fa547d 100644 --- a/generic/tclCkalloc.c +++ b/generic/tclCkalloc.c @@ -16,7 +16,6 @@ */ #include "tclInt.h" -#include <assert.h> #define FALSE 0 #define TRUE 1 diff --git a/generic/tclCmdIL.c b/generic/tclCmdIL.c index f12a8b2..c09aefa 100644 --- a/generic/tclCmdIL.c +++ b/generic/tclCmdIL.c @@ -21,7 +21,6 @@ #include "tclRegexp.h" #include "tclTomMath.h" #include <math.h> -#include <assert.h> /* * During execution of the "lsort" command, structures of the following type diff --git a/generic/tclCompCmds.c b/generic/tclCompCmds.c index cf074c5..361cd92 100644 --- a/generic/tclCompCmds.c +++ b/generic/tclCompCmds.c @@ -15,7 +15,6 @@ #include "tclInt.h" #include "tclCompile.h" -#include <assert.h> /* * Prototypes for procedures defined later in this file: @@ -36,7 +35,7 @@ static int CompileEachloopCmd(Tcl_Interp *interp, CompileEnv *envPtr, int collect); static int CompileDictEachCmd(Tcl_Interp *interp, Tcl_Parse *parsePtr, Command *cmdPtr, - struct CompileEnv *envPtr, int collect); + CompileEnv *envPtr, int collect); static inline void IssueDictWithEmpty(Tcl_Interp *interp, Tcl_Size numWords, Tcl_Token *varTokenPtr, CompileEnv *envPtr); diff --git a/generic/tclCompCmdsGR.c b/generic/tclCompCmdsGR.c index c473f88..e3f0b70 100644 --- a/generic/tclCompCmdsGR.c +++ b/generic/tclCompCmdsGR.c @@ -16,7 +16,6 @@ #include "tclInt.h" #include "tclCompile.h" -#include <assert.h> /* * Prototypes for procedures defined later in this file: diff --git a/generic/tclCompile.c b/generic/tclCompile.c index 3e6b75d..34f4dc2 100644 --- a/generic/tclCompile.c +++ b/generic/tclCompile.c @@ -15,7 +15,6 @@ #include "tclInt.h" #define ALLOW_DEPRECATED_OPCODES #include "tclCompile.h" -#include <assert.h> /* * Variable that controls whether compilation tracing is enabled and, if so, diff --git a/generic/tclDictObj.c b/generic/tclDictObj.c index 44e4a2b..aded1c8 100644 --- a/generic/tclDictObj.c +++ b/generic/tclDictObj.c @@ -12,7 +12,6 @@ #include "tclInt.h" #include "tclTomMath.h" -#include <assert.h> /* * Forward declaration. diff --git a/generic/tclDisassemble.c b/generic/tclDisassemble.c index 5534b17..d05bbb8 100644 --- a/generic/tclDisassemble.c +++ b/generic/tclDisassemble.c @@ -16,7 +16,6 @@ #define ALLOW_DEPRECATED_OPCODES #include "tclCompile.h" #include "tclOOInt.h" -#include <assert.h> /* * Prototypes for procedures defined later in this file: diff --git a/generic/tclEncoding.c b/generic/tclEncoding.c index c0f7de0..c4b8704 100644 --- a/generic/tclEncoding.c +++ b/generic/tclEncoding.c @@ -10,7 +10,6 @@ */ #include "tclInt.h" -#include <assert.h> #include "../utf8proc/utf8proc.h" /* Relative path to ignore system include */ typedef size_t (LengthProc)(const char *src); diff --git a/generic/tclExecute.c b/generic/tclExecute.c index bc00d1b..2fa5d84 100644 --- a/generic/tclExecute.c +++ b/generic/tclExecute.c @@ -24,7 +24,6 @@ #include "tclOOInt.h" #include "tclTomMath.h" #include <math.h> -#include <assert.h> #if defined(__GNUC__) && (__GNUC__ > 4) && defined(_WIN32) && defined(TCL_COMPILE_DEBUG) // These are FAR too noisy when we're using the MSVC runtime. @@ -2102,6 +2101,16 @@ TclNRExecuteByteCode( return TCL_OK; } +static inline Var * +FollowLinks( + Var *varPtr) +{ + while (TclIsVarLink(varPtr)) { + varPtr = varPtr->value.linkPtr; + } + return varPtr; +} + static int TEBCresume( void *data[], @@ -2150,6 +2159,7 @@ TEBCresume( #define LOCAL(i) (&compiledLocals[(i)]) #define TCONST(i) (constants[(i)]) +#define LOCALVAR(i) FollowLinks(LOCAL(i)) /* * These macros are just meant to save some global variables that are not @@ -3160,10 +3170,7 @@ TEBCresume( case INST_LOAD_SCALAR1: DEPRECATED_OPCODE_MARK(INST_LOAD_SCALAR1); varIdx = TclGetUInt1AtPtr(pc + 1); - varPtr = LOCAL(varIdx); - while (TclIsVarLink(varPtr)) { - varPtr = varPtr->value.linkPtr; - } + varPtr = LOCALVAR(varIdx); TRACE(("%u => ", (unsigned) varIdx)); if (TclIsVarDirectReadable(varPtr)) { /* @@ -3184,10 +3191,7 @@ TEBCresume( case INST_LOAD_SCALAR: instLoadScalar: varIdx = TclGetUInt4AtPtr(pc + 1); - varPtr = LOCAL(varIdx); - while (TclIsVarLink(varPtr)) { - varPtr = varPtr->value.linkPtr; - } + varPtr = LOCALVAR(varIdx); TRACE(("%u => ", (unsigned) varIdx)); if (TclIsVarDirectReadable(varPtr)) { /* @@ -3219,10 +3223,7 @@ TEBCresume( #endif part1Ptr = NULL; part2Ptr = OBJ_AT_TOS; - arrayPtr = LOCAL(varIdx); - while (TclIsVarLink(arrayPtr)) { - arrayPtr = arrayPtr->value.linkPtr; - } + arrayPtr = LOCALVAR(varIdx); TRACE(("%u \"%.30s\" => ", (unsigned) varIdx, O2S(part2Ptr))); if (TclIsVarArray(arrayPtr) && !ReadTraced(arrayPtr)) { varPtr = VarHashFindVar(arrayPtr->value.tablePtr, part2Ptr); @@ -3332,12 +3333,9 @@ TEBCresume( #endif valuePtr = OBJ_AT_TOS; part2Ptr = OBJ_UNDER_TOS; - arrayPtr = LOCAL(varIdx); + arrayPtr = LOCALVAR(varIdx); TRACE(("%u \"%.30s\" <- \"%.30s\" => ", (unsigned) varIdx, O2S(part2Ptr), O2S(valuePtr))); - while (TclIsVarLink(arrayPtr)) { - arrayPtr = arrayPtr->value.linkPtr; - } if (TclIsVarArray(arrayPtr) && !WriteTraced(arrayPtr)) { varPtr = VarHashFindVar(arrayPtr->value.tablePtr, part2Ptr); if (varPtr && TclIsVarDirectWritable(varPtr)) { @@ -3368,11 +3366,8 @@ TEBCresume( doStoreScalarDirect: #endif valuePtr = OBJ_AT_TOS; - varPtr = LOCAL(varIdx); + varPtr = LOCALVAR(varIdx); TRACE(("%u <- \"%.30s\" => ", (unsigned) varIdx, O2S(valuePtr))); - while (TclIsVarLink(varPtr)) { - varPtr = varPtr->value.linkPtr; - } if (!TclIsVarDirectWritable(varPtr)) { storeFlags = TCL_LEAVE_ERR_MSG; part1Ptr = NULL; @@ -3501,12 +3496,9 @@ TEBCresume( doStoreArray: valuePtr = OBJ_AT_TOS; part2Ptr = OBJ_UNDER_TOS; - arrayPtr = LOCAL(varIdx); + arrayPtr = LOCALVAR(varIdx); TRACE(("%u \"%.30s\" <- \"%.30s\" => ", (unsigned) varIdx, O2S(part2Ptr), O2S(valuePtr))); - while (TclIsVarLink(arrayPtr)) { - arrayPtr = arrayPtr->value.linkPtr; - } cleanup = 2; part1Ptr = NULL; @@ -3553,11 +3545,8 @@ TEBCresume( doStoreScalar: valuePtr = OBJ_AT_TOS; - varPtr = LOCAL(varIdx); + varPtr = LOCALVAR(varIdx); TRACE(("%u <- \"%.30s\" => ", (unsigned) varIdx, O2S(valuePtr))); - while (TclIsVarLink(varPtr)) { - varPtr = varPtr->value.linkPtr; - } cleanup = 1; arrayPtr = NULL; part1Ptr = part2Ptr = NULL; @@ -3582,12 +3571,9 @@ TEBCresume( case INST_LAPPEND_LIST: varIdx = TclGetUInt4AtPtr(pc + 1); valuePtr = OBJ_AT_TOS; - varPtr = LOCAL(varIdx); + varPtr = LOCALVAR(varIdx); cleanup = 1; pcAdjustment = 5; - while (TclIsVarLink(varPtr)) { - varPtr = varPtr->value.linkPtr; - } TRACE(("%u <- \"%.30s\" => ", (unsigned) varIdx, O2S(valuePtr))); if (TclListObjGetElements(interp, valuePtr, &objc, &objv) != TCL_OK) { @@ -3607,12 +3593,9 @@ TEBCresume( valuePtr = OBJ_AT_TOS; part1Ptr = NULL; part2Ptr = OBJ_UNDER_TOS; - arrayPtr = LOCAL(varIdx); + arrayPtr = LOCALVAR(varIdx); cleanup = 2; pcAdjustment = 5; - while (TclIsVarLink(arrayPtr)) { - arrayPtr = arrayPtr->value.linkPtr; - } TRACE(("%u \"%.30s\" \"%.30s\" => ", (unsigned) varIdx, O2S(part2Ptr), O2S(valuePtr))); if (TclListObjGetElements(interp, valuePtr, &objc, &objv) @@ -3868,11 +3851,8 @@ TEBCresume( doIncrArray: part1Ptr = NULL; part2Ptr = OBJ_AT_TOS; - arrayPtr = LOCAL(varIdx); + arrayPtr = LOCALVAR(varIdx); cleanup = 1; - while (TclIsVarLink(arrayPtr)) { - arrayPtr = arrayPtr->value.linkPtr; - } TRACE(("%u \"%.30s\" (by %ld) => ", (unsigned) varIdx, O2S(part2Ptr), increment)); varPtr = TclLookupArrayElement(interp, part1Ptr, part2Ptr, @@ -3900,10 +3880,7 @@ TEBCresume( doIncrScalarImm: #endif cleanup = 0; - varPtr = LOCAL(varIdx); - while (TclIsVarLink(varPtr)) { - varPtr = varPtr->value.linkPtr; - } + varPtr = LOCALVAR(varIdx); if (TclIsVarDirectModifyable(varPtr)) { void *ptr; @@ -3981,10 +3958,7 @@ TEBCresume( Tcl_IncrRefCount(incrPtr); doIncrScalar: - varPtr = LOCAL(varIdx); - while (TclIsVarLink(varPtr)) { - varPtr = varPtr->value.linkPtr; - } + varPtr = LOCALVAR(varIdx); arrayPtr = NULL; part1Ptr = part2Ptr = NULL; cleanup = 0; @@ -4038,10 +4012,7 @@ TEBCresume( cleanup = 0; pcAdjustment = 5; varIdx = TclGetUInt4AtPtr(pc + 1); - varPtr = LOCAL(varIdx); - while (TclIsVarLink(varPtr)) { - varPtr = varPtr->value.linkPtr; - } + varPtr = LOCALVAR(varIdx); TRACE(("%u => ", (unsigned) varIdx)); if (ReadTraced(varPtr)) { DECACHE_STACK_INFO(); @@ -4060,10 +4031,7 @@ TEBCresume( pcAdjustment = 5; varIdx = TclGetUInt4AtPtr(pc + 1); part2Ptr = OBJ_AT_TOS; - arrayPtr = LOCAL(varIdx); - while (TclIsVarLink(arrayPtr)) { - arrayPtr = arrayPtr->value.linkPtr; - } + arrayPtr = LOCALVAR(varIdx); TRACE(("%u \"%.30s\" => ", (unsigned)varIdx, O2S(part2Ptr))); if (TclIsVarArray(arrayPtr) && !ReadTraced(arrayPtr)) { varPtr = VarHashFindVar(arrayPtr->value.tablePtr, part2Ptr); @@ -4141,10 +4109,7 @@ TEBCresume( case INST_UNSET_SCALAR: flags = TclGetUInt1AtPtr(pc + 1) ? TCL_LEAVE_ERR_MSG : 0; varIdx = TclGetUInt4AtPtr(pc + 2); - varPtr = LOCAL(varIdx); - while (TclIsVarLink(varPtr)) { - varPtr = varPtr->value.linkPtr; - } + varPtr = LOCALVAR(varIdx); TRACE(("%s %u => ", (flags ? "normal" : "noerr"), (unsigned)varIdx)); if (TclIsVarDirectUnsettable(varPtr) && !TclIsVarInHash(varPtr)) { /* @@ -4175,10 +4140,7 @@ TEBCresume( flags = TclGetUInt1AtPtr(pc + 1) ? TCL_LEAVE_ERR_MSG : 0; varIdx = TclGetUInt4AtPtr(pc + 2); part2Ptr = OBJ_AT_TOS; - arrayPtr = LOCAL(varIdx); - while (TclIsVarLink(arrayPtr)) { - arrayPtr = arrayPtr->value.linkPtr; - } + arrayPtr = LOCALVAR(varIdx); TRACE(("%s %u \"%.30s\" => ", (flags ? "normal" : "noerr"), (unsigned)varIdx, O2S(part2Ptr))); if (TclIsVarArray(arrayPtr) && !UnsetTraced(arrayPtr) @@ -4272,11 +4234,8 @@ TEBCresume( part1Ptr = NULL; objPtr = OBJ_AT_TOS; TRACE(("%u \"%.30s\" => \n", (unsigned) varIdx, O2S(objPtr))); - varPtr = LOCAL(varIdx); + varPtr = LOCALVAR(varIdx); arrayPtr = NULL; - while (TclIsVarLink(varPtr)) { - varPtr = varPtr->value.linkPtr; - } goto doConst; case INST_CONST_STK: varIdx = -1; @@ -4341,10 +4300,7 @@ TEBCresume( part1Ptr = NULL; arrayPtr = NULL; TRACE(("%u => ", (unsigned)varIdx)); - varPtr = LOCAL(varIdx); - while (TclIsVarLink(varPtr)) { - varPtr = varPtr->value.linkPtr; - } + varPtr = LOCALVAR(varIdx); goto doArrayExists; case INST_ARRAY_EXISTS_STK: varIdx = -1; @@ -4377,10 +4333,7 @@ TEBCresume( part1Ptr = NULL; arrayPtr = NULL; TRACE(("%u => ", (unsigned)varIdx)); - varPtr = LOCAL(varIdx); - while (TclIsVarLink(varPtr)) { - varPtr = varPtr->value.linkPtr; - } + varPtr = LOCALVAR(varIdx); goto doArrayMake; case INST_ARRAY_MAKE_STK: varIdx = -1; @@ -6967,10 +6920,7 @@ TEBCresume( } varIndex = varListPtr->varIndexes[j]; - varPtr = LOCAL(varIndex); - while (TclIsVarLink(varPtr)) { - varPtr = varPtr->value.linkPtr; - } + varPtr = LOCALVAR(varIndex); if (TclIsVarDirectWritable(varPtr)) { value2Ptr = varPtr->value.objPtr; if (valuePtr != value2Ptr) { @@ -7312,10 +7262,7 @@ TEBCresume( numArgs = TclGetUInt4AtPtr(pc + 1); varIdx = TclGetUInt4AtPtr(pc + 5); - varPtr = LOCAL(varIdx); - while (TclIsVarLink(varPtr)) { - varPtr = varPtr->value.linkPtr; - } + varPtr = LOCALVAR(varIdx); TRACE(("%u %u => ", (unsigned)numArgs, (unsigned)varIdx)); if (TclIsVarDirectReadable(varPtr)) { dictPtr = varPtr->value.objPtr; @@ -7415,10 +7362,7 @@ TEBCresume( case INST_DICT_APPEND: case INST_DICT_LAPPEND: varIdx = TclGetUInt4AtPtr(pc + 1); - varPtr = LOCAL(varIdx); - while (TclIsVarLink(varPtr)) { - varPtr = varPtr->value.linkPtr; - } + varPtr = LOCALVAR(varIdx); TRACE(("%u => ", (unsigned)varIdx)); if (TclIsVarDirectReadable(varPtr)) { dictPtr = varPtr->value.objPtr; @@ -7569,6 +7513,7 @@ TEBCresume( ir.twoPtrValue.ptr2 = dictPtr; Tcl_StoreInternalRep(statePtr, &dictIteratorType, &ir); } + // Special var; never linked varPtr = LOCAL(varIdx); if (varPtr->value.objPtr) { if (TclHasInternalRep(varPtr->value.objPtr, &dictIteratorType)) { @@ -7584,6 +7529,7 @@ TEBCresume( case INST_DICT_NEXT: varIdx = TclGetUInt4AtPtr(pc + 1); TRACE(("%u => ", (unsigned)varIdx)); + // Special var; never linked statePtr = (*LOCAL(varIdx)).value.objPtr; { const Tcl_ObjInternalRep *irPtr; @@ -7622,11 +7568,8 @@ TEBCresume( varIdx = TclGetUInt4AtPtr(pc + 1); tblIdx = TclGetUInt4AtPtr(pc + 5); TRACE(("%u %u => ", (unsigned)varIdx, tblIdx)); - varPtr = LOCAL(varIdx); + varPtr = LOCALVAR(varIdx); duiPtr = (DictUpdateInfo *)codePtr->auxDataArrayPtr[tblIdx].clientData; - while (TclIsVarLink(varPtr)) { - varPtr = varPtr->value.linkPtr; - } if (TclIsVarDirectReadable(varPtr)) { dictPtr = varPtr->value.objPtr; } else { @@ -7656,10 +7599,7 @@ TEBCresume( Tcl_DecrRefCount(dictPtr); goto gotError; } - varPtr = LOCAL(duiPtr->varIndices[i]); - while (TclIsVarLink(varPtr)) { - varPtr = varPtr->value.linkPtr; - } + varPtr = LOCALVAR(duiPtr->varIndices[i]); DECACHE_STACK_INFO(); if (valuePtr == NULL) { TclObjUnsetVar2(interp, @@ -7683,11 +7623,8 @@ TEBCresume( varIdx = TclGetUInt4AtPtr(pc + 1); tblIdx = TclGetUInt4AtPtr(pc + 5); TRACE(("%u %u => ", (unsigned)varIdx, tblIdx)); - varPtr = LOCAL(varIdx); + varPtr = LOCALVAR(varIdx); duiPtr = (DictUpdateInfo *)codePtr->auxDataArrayPtr[tblIdx].clientData; - while (TclIsVarLink(varPtr)) { - varPtr = varPtr->value.linkPtr; - } if (TclIsVarDirectReadable(varPtr)) { dictPtr = varPtr->value.objPtr; } else { @@ -7714,11 +7651,9 @@ TEBCresume( TclInvalidateStringRep(dictPtr); } for (i=0 ; i<length ; i++) { - Var *var2Ptr = LOCAL(duiPtr->varIndices[i]); + Var *var2Ptr; - while (TclIsVarLink(var2Ptr)) { - var2Ptr = var2Ptr->value.linkPtr; - } + var2Ptr = LOCALVAR(duiPtr->varIndices[i]); if (TclIsVarDirectReadable(var2Ptr)) { valuePtr = var2Ptr->value.objPtr; } else { @@ -7806,16 +7741,13 @@ TEBCresume( varIdx = TclGetUInt4AtPtr(pc + 1); listPtr = OBJ_UNDER_TOS; keysPtr = OBJ_AT_TOS; - varPtr = LOCAL(varIdx); + varPtr = LOCALVAR(varIdx); TRACE(("%u <- \"%.30s\" \"%.30s\" => ", (unsigned)varIdx, O2S(valuePtr), O2S(keysPtr))); if (TclListObjGetElements(interp, listPtr, &objc, &objv) != TCL_OK) { TRACE_ERROR(interp); goto gotError; } - while (TclIsVarLink(varPtr)) { - varPtr = varPtr->value.linkPtr; - } DECACHE_STACK_INFO(); result = TclDictWithFinish(interp, varPtr, NULL, NULL, NULL, varIdx, objc, objv, keysPtr); diff --git a/generic/tclIO.c b/generic/tclIO.c index 6ea74c6..1fc44df 100644 --- a/generic/tclIO.c +++ b/generic/tclIO.c @@ -14,7 +14,6 @@ #include "tclInt.h" #include "tclIO.h" -#include <assert.h> /* * For each channel handler registered in a call to Tcl_CreateChannelHandler, diff --git a/generic/tclIORChan.c b/generic/tclIORChan.c index 267510b..521f30f 100644 --- a/generic/tclIORChan.c +++ b/generic/tclIORChan.c @@ -18,7 +18,6 @@ #include "tclInt.h" #include "tclIO.h" -#include <assert.h> #ifndef EINVAL #define EINVAL 9 diff --git a/generic/tclIORTrans.c b/generic/tclIORTrans.c index 7630448..b5ae242 100644 --- a/generic/tclIORTrans.c +++ b/generic/tclIORTrans.c @@ -18,7 +18,6 @@ #include "tclInt.h" #include "tclIO.h" -#include <assert.h> #ifndef EINVAL #define EINVAL 9 diff --git a/generic/tclInt.decls b/generic/tclInt.decls index db8a664..e1db374 100644 --- a/generic/tclInt.decls +++ b/generic/tclInt.decls @@ -555,7 +555,7 @@ declare 239 { } declare 240 { int TclNRRunCallbacks(Tcl_Interp *interp, int result, - struct NRE_callback *rootPtr) + NRE_callback *rootPtr) } declare 241 { int TclNREvalObjEx(Tcl_Interp *interp, Tcl_Obj *objPtr, int flags, diff --git a/generic/tclInt.h b/generic/tclInt.h index e356a17..0c4802d 100644 --- a/generic/tclInt.h +++ b/generic/tclInt.h @@ -63,12 +63,14 @@ #include "tclPort.h" #include <stdio.h> - +#include <assert.h> #include <ctype.h> #include <stdarg.h> #include <stdlib.h> #include <stdint.h> +#if defined(__STDC_VERSION__) && __STDC_VERSION__ < 202311L #include <stdbool.h> +#endif #include <string.h> #include <locale.h> @@ -3480,7 +3482,7 @@ MODULE_SCOPE void TclInitNamespaceSubsystem(void); MODULE_SCOPE void TclInitNotifier(void); MODULE_SCOPE void TclInitObjSubsystem(void); MODULE_SCOPE int TclInterpReady(Tcl_Interp *interp); -MODULE_SCOPE int TclIsBareword(int byte); +MODULE_SCOPE bool TclIsBareword(int byte); MODULE_SCOPE Tcl_Obj * TclJoinPath(Tcl_Size elements, Tcl_Obj * const objv[], int forceRelative); MODULE_SCOPE Tcl_Obj * TclGetHomeDirObj(Tcl_Interp *interp, const char *user); @@ -3536,9 +3538,6 @@ MODULE_SCOPE int TclParseNumber(Tcl_Interp *interp, Tcl_Obj *objPtr, Tcl_Size numBytes, const char **endPtrPtr, int flags); MODULE_SCOPE void TclParseInit(Tcl_Interp *interp, const char *string, Tcl_Size numBytes, Tcl_Parse *parsePtr); -MODULE_SCOPE int TclParseExprSubst(Tcl_Interp *interp, - const char *start, Tcl_Size numBytes, - Tcl_Parse *parsePtr, int append); MODULE_SCOPE Tcl_Size TclParseAllWhiteSpace(const char *src, Tcl_Size numBytes); MODULE_SCOPE int TclProcessReturn(Tcl_Interp *interp, int code, int level, Tcl_Obj *returnOpts); @@ -3733,7 +3732,7 @@ MODULE_SCOPE void TclSetObjNameOfShlib(Tcl_Obj *namePtr, Tcl_Encoding); * optimization (fragile on changes) in one place. */ -MODULE_SCOPE int TclIsSpaceProc(int byte); +MODULE_SCOPE bool TclIsSpaceProc(int byte); #define TclIsSpaceProcM(byte) \ (((unsigned)(byte) > 0x20) ? 0 : TclIsSpaceProc(byte)) @@ -5091,7 +5090,6 @@ MODULE_SCOPE Tcl_LibraryInitProc Tcl_ABSListTest_Init; void Tcl_Panic(const char *, ...) __attribute__((analyzer_noreturn)); #endif #if !defined(CLANG_ASSERT) -#include <assert.h> #define CLANG_ASSERT(x) assert(x) #endif #elif !defined(CLANG_ASSERT) diff --git a/generic/tclIntDecls.h b/generic/tclIntDecls.h index 232e987..e5050ea 100644 --- a/generic/tclIntDecls.h +++ b/generic/tclIntDecls.h @@ -508,7 +508,7 @@ EXTERN int TclNRInterpProcCore(Tcl_Interp *interp, ProcErrorProc *errorProc); /* 240 */ EXTERN int TclNRRunCallbacks(Tcl_Interp *interp, int result, - struct NRE_callback *rootPtr); + NRE_callback *rootPtr); /* 241 */ EXTERN int TclNREvalObjEx(Tcl_Interp *interp, Tcl_Obj *objPtr, int flags, const CmdFrame *invoker, int word); @@ -820,7 +820,7 @@ typedef struct TclIntStubs { int (*tclResetCancellation) (Tcl_Interp *interp, int force); /* 237 */ int (*tclNRInterpProc) (void *clientData, Tcl_Interp *interp, Tcl_Size objc, Tcl_Obj *const objv[]); /* 238 */ int (*tclNRInterpProcCore) (Tcl_Interp *interp, Tcl_Obj *procNameObj, Tcl_Size skip, ProcErrorProc *errorProc); /* 239 */ - int (*tclNRRunCallbacks) (Tcl_Interp *interp, int result, struct NRE_callback *rootPtr); /* 240 */ + int (*tclNRRunCallbacks) (Tcl_Interp *interp, int result, NRE_callback *rootPtr); /* 240 */ int (*tclNREvalObjEx) (Tcl_Interp *interp, Tcl_Obj *objPtr, int flags, const CmdFrame *invoker, int word); /* 241 */ int (*tclNREvalObjv) (Tcl_Interp *interp, Tcl_Size objc, Tcl_Obj *const objv[], int flags, Command *cmdPtr); /* 242 */ void (*tclDbDumpActiveObjects) (FILE *outFile); /* 243 */ diff --git a/generic/tclListObj.c b/generic/tclListObj.c index 54eac09..29fdb9f 100644 --- a/generic/tclListObj.c +++ b/generic/tclListObj.c @@ -9,7 +9,6 @@ * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ -#include <assert.h> #include "tclInt.h" #include "tclTomMath.h" diff --git a/generic/tclListTypes.c b/generic/tclListTypes.c index 0ae4563..bd16946 100644 --- a/generic/tclListTypes.c +++ b/generic/tclListTypes.c @@ -10,7 +10,6 @@ * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ -#include <assert.h> #include "tclInt.h" /* diff --git a/generic/tclNamesp.c b/generic/tclNamesp.c index 49745e6..febad5e 100644 --- a/generic/tclNamesp.c +++ b/generic/tclNamesp.c @@ -25,7 +25,6 @@ #include "tclInt.h" #include "tclCompile.h" /* for TclLogCommandInfo visibility */ -#include <assert.h> /* * Thread-local storage used to avoid having a global lock on data that is not @@ -143,14 +142,14 @@ static const Tcl_ObjType nsNameType = { ir.twoPtrValue.ptr1 = (nnPtr); \ ir.twoPtrValue.ptr2 = NULL; \ Tcl_StoreInternalRep((objPtr), &nsNameType, &ir); \ - } while (0) + } while (false) #define NsNameGetInternalRep(objPtr, nnPtr) \ do { \ const Tcl_ObjInternalRep *irPtr; \ irPtr = TclFetchInternalRep((objPtr), &nsNameType); \ (nnPtr) = irPtr ? (ResolvedNsName *) irPtr->twoPtrValue.ptr1 : NULL; \ - } while (0) + } while (false) /* * Array of values describing how to implement each standard subcommand of the @@ -1188,7 +1187,7 @@ TclDeleteNamespaceChildren( Tcl_Interp *interp = nsPtr->interp; Tcl_HashEntry *entryPtr; size_t i; - int unchecked; + bool unchecked; Tcl_HashSearch search; /* @@ -1218,10 +1217,10 @@ TclDeleteNamespaceChildren( children[i]->refCount++; i++; } - unchecked = 0; + unchecked = false; for (i = 0 ; i < length ; i++) { if (!(children[i]->flags & NS_DYING)) { - unchecked = 1; + unchecked = true; Tcl_DeleteNamespace((Tcl_Namespace *) children[i]); TclNsDecrRefCount(children[i]); } @@ -2839,7 +2838,8 @@ TclResetShadowedCmdRefs( Namespace *nsPtr; Namespace *trailNsPtr, *shadowNsPtr; Namespace *globalNsPtr = (Namespace *) TclGetGlobalNamespace(interp); - int found, i; + int i; + bool found; int trailFront = -1; int trailSize = 5; /* Formerly NUM_TRAIL_ELEMS. */ Namespace **trailPtr = (Namespace **) TclStackAlloc(interp, @@ -2875,7 +2875,7 @@ TclResetShadowedCmdRefs( * contains a command cmdName. */ - found = 1; + found = true; shadowNsPtr = globalNsPtr; for (i = trailFront; i >= 0; i--) { @@ -2884,7 +2884,7 @@ TclResetShadowedCmdRefs( if (hPtr != NULL) { shadowNsPtr = (Namespace *) Tcl_GetHashValue(hPtr); } else { - found = 0; + found = false; break; } } @@ -3807,7 +3807,7 @@ NamespaceImportCmd( int objc, /* Number of arguments. */ Tcl_Obj *const objv[]) /* Argument objects. */ { - int allowOverwrite = 0; + bool allowOverwrite = false; const char *string, *pattern; int i, firstArg; int result; @@ -3825,7 +3825,7 @@ NamespaceImportCmd( if (firstArg < objc) { string = TclGetString(objv[firstArg]); if ((*string == '-') && (strcmp(string, "-force") == 0)) { - allowOverwrite = 1; + allowOverwrite = true; firstArg++; } } else { diff --git a/generic/tclOOCall.c b/generic/tclOOCall.c index 7000877..4e56a5c 100644 --- a/generic/tclOOCall.c +++ b/generic/tclOOCall.c @@ -16,7 +16,6 @@ #endif #include "tclInt.h" #include "tclOOInt.h" -#include <assert.h> /* * Structure containing a CallChain and any other values needed only during diff --git a/generic/tclObj.c b/generic/tclObj.c index 4a2d44d..4b9595b 100644 --- a/generic/tclObj.c +++ b/generic/tclObj.c @@ -17,7 +17,6 @@ #include "tclInt.h" #include "tclTomMath.h" #include <math.h> -#include <assert.h> /* * Table of all object types. diff --git a/generic/tclOptimize.c b/generic/tclOptimize.c index 0ff20f9..a65c7f9 100644 --- a/generic/tclOptimize.c +++ b/generic/tclOptimize.c @@ -12,7 +12,6 @@ #include "tclInt.h" #define ALLOW_DEPRECATED_OPCODES #include "tclCompile.h" -#include <assert.h> /* * Forward declarations. diff --git a/generic/tclParse.c b/generic/tclParse.c index 24c20f8..fd49897 100644 --- a/generic/tclParse.c +++ b/generic/tclParse.c @@ -15,7 +15,6 @@ #include "tclInt.h" #include "tclParse.h" -#include <assert.h> /* * The following table provides parsing information about each possible 8-bit @@ -140,17 +139,19 @@ const unsigned char tclCharTypeTable[] = { * Prototypes for local functions defined in this file: */ -static int CommandComplete(const char *script, Tcl_Size numBytes); +static bool CommandComplete(const char *script, Tcl_Size numBytes); static Tcl_Size ParseComment(const char *src, Tcl_Size numBytes, Tcl_Parse *parsePtr); static int ParseTokens(const char *src, Tcl_Size numBytes, int mask, int flags, Tcl_Parse *parsePtr); static Tcl_Size ParseWhiteSpace(const char *src, Tcl_Size numBytes, - int *incompletePtr, char *typePtr); + int *incompletePtr, unsigned char *typePtr); static Tcl_Size ParseAllWhiteSpace(const char *src, Tcl_Size numBytes, int *incompletePtr); static Tcl_Size ParseHex(const char *src, Tcl_Size numBytes, int *resultPtr); +static int ParseExprSubst(const char *start, Tcl_Size numBytes, + Tcl_Parse *parsePtr); /* *---------------------------------------------------------------------- @@ -231,7 +232,7 @@ Tcl_ParseCommand( { const char *src; /* Points to current character in the * command. */ - char type; /* Result returned by CHAR_TYPE(*src). */ + unsigned char type; /* Result returned by CHAR_TYPE(*src). */ Tcl_Token *tokenPtr; /* Pointer to token being filled in. */ Tcl_Size wordIndex; /* Index of word token for current word. */ int terminators; /* CHAR_TYPE bits that indicate the end of a @@ -283,8 +284,8 @@ Tcl_ParseCommand( parsePtr->commandStart = src; type = CHAR_TYPE(*src); scanned = 1; /* Can't have missing whitepsace before first word. */ - while (1) { - int expandWord = 0; + while (true) { + bool expandWord = false; /* Are we at command termination? */ @@ -362,7 +363,7 @@ Tcl_ParseCommand( */ expPtr = &parsePtr->tokenPtr[expIdx]; - if ((0 == expandWord) + if (!expandWord /* Haven't seen prefix already */ && (expIdx + 1 == parsePtr->numTokens) /* Only one token */ @@ -374,7 +375,7 @@ Tcl_ParseCommand( numBytes, &parsePtr->incomplete, &type)) && (type != TYPE_COMMAND_END) /* Non-whitespace follows */) { - expandWord = 1; + expandWord = true; parsePtr->numTokens--; goto parseWord; } @@ -402,7 +403,7 @@ Tcl_ParseCommand( tokenPtr->numComponents = parsePtr->numTokens - (wordIndex + 1); if (expandWord) { Tcl_Size i; - int isLiteral = 1; + bool isLiteral = true; /* * When a command includes a word that is an expanded literal; for @@ -420,7 +421,7 @@ Tcl_ParseCommand( for (i = 1; i <= tokenPtr->numComponents; i++) { if (tokenPtr[i].type != TCL_TOKEN_TEXT) { - isLiteral = 0; + isLiteral = false; break; } } @@ -573,11 +574,11 @@ Tcl_ParseCommand( *---------------------------------------------------------------------- */ -int +bool TclIsSpaceProc( int byte) { - return CHAR_TYPE(byte) & (TYPE_SPACE) || byte == '\n'; + return (CHAR_TYPE(byte) & TYPE_SPACE) || (byte == '\n'); } /* @@ -594,7 +595,7 @@ TclIsSpaceProc( * the alphabetic chars ('a'-'z', 'A'-'Z') and underscore ('_'). * * Results: - * Returns 1, if byte is in the accepted set of chars, 0 otherwise. + * Returns true if byte is in the accepted set of chars, false otherwise. * * Side effects: * None. @@ -602,23 +603,23 @@ TclIsSpaceProc( *---------------------------------------------------------------------- */ -int +bool TclIsBareword( int byte) { if (byte < '0' || byte > 'z') { - return 0; + return false; } if (byte <= '9' || byte >= 'a') { - return 1; + return true; } if (byte == '_') { - return 1; + return true; } if (byte < 'A' || byte > 'Z') { - return 0; + return false; } - return 1; + return true; } /* @@ -647,13 +648,13 @@ ParseWhiteSpace( Tcl_Size numBytes, /* Max number of bytes to scan. */ int *incompletePtr, /* Set this boolean memory to true if parsing * indicates an incomplete command. */ - char *typePtr) /* Points to location to store character type + unsigned char *typePtr) /* Points to location to store character type * of character that ends run of whitespace */ { - char type = TYPE_NORMAL; + unsigned char type = TYPE_NORMAL; const char *p = src; - while (1) { + while (true) { while (numBytes && ((type = CHAR_TYPE(*p)) & TYPE_SPACE)) { numBytes--; p++; @@ -701,7 +702,7 @@ ParseAllWhiteSpace( Tcl_Size numBytes, /* Max number of byes to scan */ int *incompletePtr) /* Set true if parse is incomplete. */ { - char type; + unsigned char type; const char *p = src; do { @@ -1021,7 +1022,7 @@ ParseComment( break; } } - incomplete = (*p == '\n'); + incomplete = (*p == '\n') ? 1 : 0; p++; numBytes--; } @@ -1072,12 +1073,8 @@ ParseTokens( * Updated with additional tokens and * termination information. */ { - char type; + unsigned char type; Tcl_Size originalTokens; - int noSubstCmds = !(flags & TCL_SUBST_COMMANDS); - int noSubstExprs = !(flags & TCL_SUBST_EXPRS); - int noSubstVars = !(flags & TCL_SUBST_VARIABLES); - int noSubstBS = !(flags & TCL_SUBST_BACKSLASHES); Tcl_Token *tokenPtr; /* @@ -1109,24 +1106,24 @@ ParseTokens( parsePtr->numTokens++; } else if (*src == '$') { Tcl_Size varToken = parsePtr->numTokens; - if (!noSubstExprs && (numBytes > 1 && src[1] == EXPR_TRIGGER_CHAR + if ((flags & TCL_SUBST_EXPRS) && (numBytes > 1) && (src[1] == EXPR_TRIGGER_CHAR) #if EXPR_SUBST_MODE > 1 - && numBytes > 2 && src[2] == '(' + && (numBytes > 2) && (src[2] == '(') #endif - )) { + ) { // For $(expr), the COMMAND token has synthetic string length // but we need to advance by original $(...) length // Mode 1: "[expr {" (7) + "}]" (2) - "$(" (2) - ")" (1) = 6 // Mode 2: "[expr {" (7) + "}]" (2) - "$=(" (3) - ")" (1) = 5 // Mode 3: "[expr {" (7) + "}]" (2) - "$((" (3) - "))" (2) = 4 - if (TclParseExprSubst(parsePtr->interp, src, numBytes, parsePtr, 1) != TCL_OK) { + if (ParseExprSubst(src, numBytes, parsePtr) != TCL_OK) { return TCL_ERROR; } Tcl_Size syntheticSize = parsePtr->tokenPtr[varToken].size; Tcl_Size originalSize = syntheticSize - EXPR_SIZE_DIFF; src += originalSize; numBytes -= originalSize; - } else if (!noSubstVars) { + } else if ((flags & TCL_SUBST_VARIABLES) != 0) { // Normal variable substitution if (Tcl_ParseVarName(parsePtr->interp, src, numBytes, parsePtr, 1) != TCL_OK) { return TCL_ERROR; @@ -1143,7 +1140,7 @@ ParseTokens( } else if (*src == '[') { Tcl_Parse *nestedPtr; - if (noSubstCmds) { + if (!(flags & TCL_SUBST_COMMANDS)) { tokenPtr->type = TCL_TOKEN_TEXT; tokenPtr->size = 1; parsePtr->numTokens++; @@ -1161,7 +1158,7 @@ ParseTokens( src++; numBytes--; nestedPtr = (Tcl_Parse *)TclStackAlloc(parsePtr->interp, sizeof(Tcl_Parse)); - while (1) { + while (true) { const char *curEnd; if (Tcl_ParseCommand(parsePtr->interp, src, numBytes, 1, @@ -1205,7 +1202,7 @@ ParseTokens( tokenPtr->size = src - tokenPtr->start; parsePtr->numTokens++; } else if (*src == '\\') { - if (noSubstBS) { + if (!(flags & TCL_SUBST_BACKSLASHES)) { tokenPtr->type = TCL_TOKEN_TEXT; tokenPtr->size = 1; parsePtr->numTokens++; @@ -1543,20 +1540,14 @@ Tcl_ParseVarName( } int -TclParseExprSubst( - Tcl_Interp *interp, /* Interpreter to use for error reporting; if - * NULL, then no error message is provided. */ +ParseExprSubst( const char *start, /* Start of variable substitution string. * First character must be "$". */ Tcl_Size numBytes, /* Total number of bytes in string. If -1, * the string consists of all bytes up to the * first null character. */ - Tcl_Parse *parsePtr, /* Structure to fill in with information about + Tcl_Parse *parsePtr) /* Structure to fill in with information about * the variable name. */ - int append) /* Non-zero means append tokens to existing - * information in parsePtr; zero means ignore - * existing tokens in parsePtr and - * reinitialize it. */ { Tcl_Token *tokenPtr; const char *src; @@ -1565,9 +1556,6 @@ TclParseExprSubst( if (numBytes < 0 && start) { numBytes = strlen(start); } - if (!append) { - TclParseInit(interp, start, numBytes, parsePtr); - } if ((numBytes == 0) || (start == NULL)) { return TCL_ERROR; } @@ -1850,7 +1838,7 @@ Tcl_ParseBraces( tokenPtr->start = src+1; tokenPtr->numComponents = 0; level = 1; - while (1) { + while (true) { while (++src, --numBytes) { if (CHAR_TYPE(*src) != TYPE_NORMAL) { break; @@ -1953,15 +1941,15 @@ Tcl_ParseBraces( */ { - int openBrace = 0; + bool openBrace = false; while (--src > start) { switch (*src) { case '{': - openBrace = 1; + openBrace = true; break; case '\n': - openBrace = 0; + openBrace = false; break; case '#' : if (openBrace && TclIsSpaceProcM(src[-1])) { @@ -2319,7 +2307,7 @@ TclSubstTokens( Tcl_Obj *result; int code = TCL_OK; #define NUM_STATIC_POS 20 - int isLiteral; + bool isLiteral; Tcl_Size i, maxNumCL, numCL, adjust; Tcl_Size *clPosition = NULL; Interp *iPtr = (Interp *) interp; @@ -2345,11 +2333,11 @@ TclSubstTokens( numCL = 0; maxNumCL = 0; - isLiteral = 1; + isLiteral = true; for (i=0 ; i < count; i++) { if ((tokenPtr[i].type != TCL_TOKEN_TEXT) && (tokenPtr[i].type != TCL_TOKEN_BS)) { - isLiteral = 0; + isLiteral = false; break; } } @@ -2589,8 +2577,8 @@ TclSubstTokens( * script is complete * * Results: - * 1 is returned if the script is complete, 0 if there are open - * delimiters such as " or (. 1 is also returned if there is a parse + * true is returned if the script is complete, false if there are open + * delimiters such as " or (. true is also returned if there is a parse * error in the script other than unmatched delimiters. * * Side effects: @@ -2599,14 +2587,14 @@ TclSubstTokens( *---------------------------------------------------------------------- */ -static int +static bool CommandComplete( const char *script, /* Script to check. */ Tcl_Size numBytes) /* Number of bytes in script. */ { Tcl_Parse parse; const char *p, *end; - int result; + bool result; p = script; end = p + numBytes; @@ -2617,11 +2605,7 @@ CommandComplete( } Tcl_FreeParse(&parse); } - if (parse.incomplete) { - result = 0; - } else { - result = 1; - } + result = !parse.incomplete; Tcl_FreeParse(&parse); return result; } diff --git a/generic/tclPathObj.c b/generic/tclPathObj.c index be6df77..a46b7a3 100644 --- a/generic/tclPathObj.c +++ b/generic/tclPathObj.c @@ -13,7 +13,6 @@ #include "tclInt.h" #include "tclFileSystem.h" -#include <assert.h> /* * Prototypes for functions defined later in this file. diff --git a/generic/tclProc.c b/generic/tclProc.c index 2374516..63b07e7 100644 --- a/generic/tclProc.c +++ b/generic/tclProc.c @@ -15,7 +15,6 @@ #include "tclInt.h" #include "tclCompile.h" -#include <assert.h> /* * Variables that are part of the [apply] command implementation and which diff --git a/generic/tclRegexp.c b/generic/tclRegexp.c index 79a7490..573dbe7 100644 --- a/generic/tclRegexp.c +++ b/generic/tclRegexp.c @@ -14,7 +14,6 @@ #include "tclInt.h" #include "tclRegexp.h" #include "tclTomMath.h" -#include <assert.h> /* *---------------------------------------------------------------------- diff --git a/generic/tclResult.c b/generic/tclResult.c index 3be57e0..7c43b01 100644 --- a/generic/tclResult.c +++ b/generic/tclResult.c @@ -10,7 +10,6 @@ */ #include "tclInt.h" -#include <assert.h> /* * Indices of the standard return options dictionary keys. diff --git a/generic/tclScan.c b/generic/tclScan.c index feddedc..a4502b9 100644 --- a/generic/tclScan.c +++ b/generic/tclScan.c @@ -11,7 +11,6 @@ #include "tclInt.h" #include "tclTomMath.h" -#include <assert.h> /* * Flag values used by Tcl_ScanObjCmd. diff --git a/generic/tclStringObj.c b/generic/tclStringObj.c index ac16760..305f969 100644 --- a/generic/tclStringObj.c +++ b/generic/tclStringObj.c @@ -35,7 +35,7 @@ #include "tclInt.h" #include "tclTomMath.h" #include "tclStringRep.h" -#include <assert.h> + /* * Prototypes for functions defined later in this file: */ diff --git a/generic/tclTestObj.c b/generic/tclTestObj.c index 1ca9cf5..47807b8 100644 --- a/generic/tclTestObj.c +++ b/generic/tclTestObj.c @@ -27,8 +27,6 @@ #endif #include "tclStringRep.h" -#include <assert.h> - /* * Forward declarations for functions defined later in this file: */ diff --git a/generic/tclUtil.c b/generic/tclUtil.c index b20fec7..5920d89 100644 --- a/generic/tclUtil.c +++ b/generic/tclUtil.c @@ -12,7 +12,6 @@ * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ -#include <assert.h> #include "tclInt.h" #include "tclParse.h" #include "tclStringTrim.h" diff --git a/generic/tclZipfs.c b/generic/tclZipfs.c index 4c97468..5eb5fe9 100644 --- a/generic/tclZipfs.c +++ b/generic/tclZipfs.c @@ -23,8 +23,6 @@ #include "tclInt.h" #include "tclFileSystem.h" -#include <assert.h> - #ifdef _WIN32 # if defined(_WIN32) && defined (__clang__) && (__clang_major__ > 20) # pragma clang diagnostic ignored "-Wc++-keyword" diff --git a/unix/tclUnixThrd.c b/unix/tclUnixThrd.c index b8c7768..292135d 100644 --- a/unix/tclUnixThrd.c +++ b/unix/tclUnixThrd.c @@ -12,7 +12,6 @@ */ #include "tclInt.h" -#include <assert.h> #if TCL_THREADS diff --git a/win/tclWinConsole.c b/win/tclWinConsole.c index ec6d170..d29c194 100644 --- a/win/tclWinConsole.c +++ b/win/tclWinConsole.c @@ -15,7 +15,6 @@ #endif #include "tclWinInt.h" -#include <assert.h> #include <ctype.h> /* diff --git a/win/tclWinInit.c b/win/tclWinInit.c index 7ce69e3..8d7610d 100644 --- a/win/tclWinInit.c +++ b/win/tclWinInit.c @@ -12,7 +12,6 @@ */ #include "tclWinInt.h" -#include <assert.h> #include <winnt.h> #include <winbase.h> #include <lmcons.h> diff --git a/win/tclWinThrd.c b/win/tclWinThrd.c index 3fd86cd..26d1298 100644 --- a/win/tclWinThrd.c +++ b/win/tclWinThrd.c @@ -12,7 +12,6 @@ */ #include "tclWinInt.h" -#include <assert.h> /* Workaround for mingw versions which don't provide this in float.h */ #ifndef _MCW_EM |
