diff options
| author | kjnash <k.j.nash@usa.net> | 2020-08-28 01:53:33 (GMT) |
|---|---|---|
| committer | kjnash <k.j.nash@usa.net> | 2020-08-28 01:53:33 (GMT) |
| commit | bba42d0251c44fb8d13efa3b72c1b443dab6063f (patch) | |
| tree | 9533368b31032b1588674dc02ba2ce4c08217f20 | |
| parent | 17058912aa60f6a98953579de27b7876ce1ec4dd (diff) | |
| parent | 1f7a1beab25bccf98fa6643e73672de5fb5b5fd1 (diff) | |
| download | tcl-bba42d0251c44fb8d13efa3b72c1b443dab6063f.zip tcl-bba42d0251c44fb8d13efa3b72c1b443dab6063f.tar.gz tcl-bba42d0251c44fb8d13efa3b72c1b443dab6063f.tar.bz2 | |
Merge 8.7
| -rw-r--r-- | .fossil-settings/ignore-glob | 3 | ||||
| -rw-r--r-- | .travis.yml | 60 | ||||
| -rw-r--r-- | generic/tclBasic.c | 27 | ||||
| -rw-r--r-- | generic/tclCmdMZ.c | 2 | ||||
| -rw-r--r-- | generic/tclCompExpr.c | 4 | ||||
| -rw-r--r-- | generic/tclDate.c | 4 | ||||
| -rw-r--r-- | generic/tclExecute.c | 6 | ||||
| -rw-r--r-- | generic/tclGetDate.y | 4 | ||||
| -rw-r--r-- | generic/tclIO.c | 2 | ||||
| -rw-r--r-- | generic/tclIORChan.c | 8 | ||||
| -rw-r--r-- | generic/tclInt.h | 2 | ||||
| -rw-r--r-- | generic/tclLink.c | 10 | ||||
| -rw-r--r-- | generic/tclOOBasic.c | 2 | ||||
| -rw-r--r-- | generic/tclPkg.c | 3 | ||||
| -rw-r--r-- | generic/tclProcess.c | 12 | ||||
| -rw-r--r-- | generic/tclTrace.c | 4 | ||||
| -rw-r--r-- | generic/tclVar.c | 2 | ||||
| -rw-r--r-- | tests/chanio.test | 8 | ||||
| -rw-r--r-- | tests/event.test | 5 | ||||
| -rw-r--r-- | tests/io.test | 11 | ||||
| -rw-r--r-- | win/nmakehlp.c | 2 | ||||
| -rw-r--r-- | win/tclWinConsole.c | 11 | ||||
| -rw-r--r-- | win/tclWinPort.h | 4 |
23 files changed, 105 insertions, 91 deletions
diff --git a/.fossil-settings/ignore-glob b/.fossil-settings/ignore-glob index a58aef5..651d616 100644 --- a/.fossil-settings/ignore-glob +++ b/.fossil-settings/ignore-glob @@ -32,7 +32,7 @@ libtommath/pretty.build libtommath/tommath.src libtommath/*.log libtommath/*.pdf -libtommath/gen.pl +libtommath/*.pl libtommath/*.sh libtommath/doc/* libtommath/tombc/* @@ -64,4 +64,5 @@ win/*.manifest win/pkgs/* win/coffbase.txt win/tcl.hpj +win/nmakehlp.out win/nmhlp-out.txt diff --git a/.travis.yml b/.travis.yml index f05a9df..ac340a6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,3 @@ -sudo: false language: c addons: apt: @@ -10,50 +9,46 @@ addons: - gcc-mingw-w64-i686 - gcc-mingw-w64-x86-64 - gcc-multilib - homebrew: - packages: - - libtommath - update: true -matrix: +jobs: include: # Testing on Linux with various compilers - name: "Linux/GCC/Shared" os: linux - dist: bionic + dist: focal compiler: gcc env: - BUILD_DIR=unix - name: "Linux/GCC/Shared: UTF_MAX=4" os: linux - dist: bionic + dist: focal compiler: gcc env: - BUILD_DIR=unix - CFGOPT=CFLAGS=-DTCL_UTF_MAX=4 - name: "Linux/GCC/Shared: NO_DEPRECATED" os: linux - dist: bionic + dist: focal compiler: gcc env: - BUILD_DIR=unix - CFGOPT="CFLAGS=-DTCL_NO_DEPRECATED=1" - name: "Linux/GCC/Static" os: linux - dist: bionic + dist: focal compiler: gcc env: - CFGOPT="--disable-shared" - BUILD_DIR=unix - name: "Linux/GCC/Debug" os: linux - dist: bionic + dist: focal compiler: gcc env: - BUILD_DIR=unix - CFGOPT="--enable-symbols" - name: "Linux/GCC/Mem-Debug" os: linux - dist: bionic + dist: focal compiler: gcc env: - BUILD_DIR=unix @@ -61,7 +56,7 @@ matrix: # C++ build. - name: "Linux/G++/Shared" os: linux - dist: bionic + dist: focal compiler: g++ env: - BUILD_DIR=unix @@ -69,7 +64,7 @@ matrix: # Older versions of GCC... - name: "Linux/GCC 7/Shared" os: linux - dist: bionic + dist: focal compiler: gcc-7 addons: apt: @@ -106,7 +101,7 @@ matrix: # Clang - name: "Linux/Clang/Shared" os: linux - dist: bionic + dist: focal compiler: clang env: - BUILD_DIR=unix @@ -119,21 +114,21 @@ matrix: - CFGOPT="CFLAGS=-DTCL_NO_DEPRECATED=1" - name: "Linux/Clang/Static" os: linux - dist: bionic + dist: focal compiler: clang env: - CFGOPT="--disable-shared" - BUILD_DIR=unix - name: "Linux/Clang/Debug" os: linux - dist: bionic + dist: focal compiler: clang env: - BUILD_DIR=unix - CFGOPT="--enable-symbols" - name: "Linux/Clang/Mem-Debug" os: linux - dist: bionic + dist: focal compiler: clang env: - BUILD_DIR=unix @@ -154,6 +149,17 @@ matrix: osx_image: xcode11.5 env: - BUILD_DIR=unix + - name: "macOS/Clang/Xcode 11.5/Shared/libtommath" + os: osx + osx_image: xcode11.5 + env: + - BUILD_DIR=macosx + install: [] + script: *mactest + addons: + homebrew: + packages: + - libtommath - name: "macOS/Clang++/Xcode 11.5/Shared" os: osx osx_image: xcode11.5 @@ -177,10 +183,6 @@ matrix: - BUILD_DIR=macosx install: [] script: *mactest - addons: - homebrew: - packages: - - libtommath - name: "macOS/Clang/Xcode 9/Shared" os: osx osx_image: xcode9.2 @@ -188,10 +190,6 @@ matrix: - BUILD_DIR=macosx install: [] script: *mactest - addons: - homebrew: - packages: - - libtommath - name: "macOS/Clang/Xcode 8/Shared" os: osx osx_image: xcode8.3 @@ -199,15 +197,11 @@ matrix: - BUILD_DIR=macosx install: [] script: *mactest - addons: - homebrew: - packages: - - libtommath # Test with mingw-w64 cross-compile # Doesn't run tests because wine is only an imperfect Windows emulation - name: "Linux-cross-Windows/GCC/Shared/no test" os: linux - dist: bionic + dist: focal compiler: x86_64-w64-mingw32-gcc env: - BUILD_DIR=win @@ -221,7 +215,7 @@ matrix: # Doesn't run tests because wine is only an imperfect Windows emulation - name: "Linux-cross-Windows-32/GCC/Shared/no test" os: linux - dist: bionic + dist: focal compiler: i686-w64-mingw32-gcc env: - BUILD_DIR=win @@ -449,7 +443,7 @@ matrix: # "make dist" only - name: "Linux: make dist" os: linux - dist: bionic + dist: focal compiler: gcc env: - BUILD_DIR=unix diff --git a/generic/tclBasic.c b/generic/tclBasic.c index 4ee2ca0..2b1bae9 100644 --- a/generic/tclBasic.c +++ b/generic/tclBasic.c @@ -3547,6 +3547,19 @@ Tcl_DeleteCommandFromToken( iPtr->compileEpoch++; } + if (!(cmdPtr->flags & CMD_REDEF_IN_PROGRESS)) { + /* + * Delete any imports of this routine before deleting this routine itself. + * See issue 688fcc7082fa. + */ + for (refPtr = cmdPtr->importRefPtr; refPtr != NULL; + refPtr = nextRefPtr) { + nextRefPtr = refPtr->nextPtr; + importCmd = (Tcl_Command) refPtr->importedCmdPtr; + Tcl_DeleteCommandFromToken(interp, importCmd); + } + } + if (cmdPtr->deleteProc != NULL) { /* * Delete the command's client data. If this was an imported command @@ -3567,20 +3580,6 @@ Tcl_DeleteCommandFromToken( } /* - * If this command was imported into other namespaces, then imported - * commands were created that refer back to this command. Delete these - * imported commands now. - */ - if (!(cmdPtr->flags & CMD_REDEF_IN_PROGRESS)) { - for (refPtr = cmdPtr->importRefPtr; refPtr != NULL; - refPtr = nextRefPtr) { - nextRefPtr = refPtr->nextPtr; - importCmd = (Tcl_Command) refPtr->importedCmdPtr; - Tcl_DeleteCommandFromToken(interp, importCmd); - } - } - - /* * Don't use hPtr to delete the hash entry here, because it's possible * that the deletion callback renamed the command. Instead, use * cmdPtr->hptr, and make sure that no-one else has already deleted the diff --git a/generic/tclCmdMZ.c b/generic/tclCmdMZ.c index fe7cddd..f95dd12 100644 --- a/generic/tclCmdMZ.c +++ b/generic/tclCmdMZ.c @@ -4311,7 +4311,7 @@ Tcl_TimeRateObjCmd( */ measureOverhead = 0; - Tcl_SetObjResult(interp, Tcl_NewLongObj(0)); + Tcl_SetObjResult(interp, Tcl_NewWideIntObj(0)); return TCL_OK; } diff --git a/generic/tclCompExpr.c b/generic/tclCompExpr.c index 4fb41fc..74610c7 100644 --- a/generic/tclCompExpr.c +++ b/generic/tclCompExpr.c @@ -2725,7 +2725,7 @@ TclVariadicOpCmd( Tcl_Obj *const *litObjPtrPtr = litObjv; if (lexeme == EXPON) { - litObjv[1] = Tcl_NewIntObj(occdPtr->i.identity); + TclNewIntObj(litObjv[1], occdPtr->i.identity); Tcl_IncrRefCount(litObjv[1]); decrMe = 1; litObjv[0] = objv[1]; @@ -2741,7 +2741,7 @@ TclVariadicOpCmd( if (lexeme == DIVIDE) { litObjv[0] = Tcl_NewDoubleObj(1.0); } else { - litObjv[0] = Tcl_NewIntObj(occdPtr->i.identity); + TclNewIntObj(litObjv[0], occdPtr->i.identity); } Tcl_IncrRefCount(litObjv[0]); litObjv[1] = objv[1]; diff --git a/generic/tclDate.c b/generic/tclDate.c index e9ef9bd..f8552a3 100644 --- a/generic/tclDate.c +++ b/generic/tclDate.c @@ -2501,12 +2501,12 @@ TclDateerror( Tcl_AppendToObj(infoPtr->messages, infoPtr->separatrix, -1); Tcl_AppendToObj(infoPtr->messages, s, -1); Tcl_AppendToObj(infoPtr->messages, " (characters ", -1); - t = Tcl_NewIntObj(location->first_column); + TclNewIntObj(t, location->first_column); Tcl_IncrRefCount(t); Tcl_AppendObjToObj(infoPtr->messages, t); Tcl_DecrRefCount(t); Tcl_AppendToObj(infoPtr->messages, "-", -1); - t = Tcl_NewIntObj(location->last_column); + TclNewIntObj(t, location->last_column); Tcl_IncrRefCount(t); Tcl_AppendObjToObj(infoPtr->messages, t); Tcl_DecrRefCount(t); diff --git a/generic/tclExecute.c b/generic/tclExecute.c index 4c25397..0f1c2cc 100644 --- a/generic/tclExecute.c +++ b/generic/tclExecute.c @@ -3635,7 +3635,7 @@ TEBCresume( case INST_INCR_SCALAR_STK_IMM: case INST_INCR_STK_IMM: increment = TclGetInt1AtPtr(pc+1); - incrPtr = Tcl_NewIntObj(increment); + TclNewIntObj(incrPtr, increment); Tcl_IncrRefCount(incrPtr); pcAdjustment = 2; @@ -3670,7 +3670,7 @@ TEBCresume( case INST_INCR_ARRAY1_IMM: opnd = TclGetUInt1AtPtr(pc+1); increment = TclGetInt1AtPtr(pc+2); - incrPtr = Tcl_NewIntObj(increment); + TclNewIntObj(incrPtr, increment); Tcl_IncrRefCount(incrPtr); pcAdjustment = 3; @@ -7022,7 +7022,7 @@ TEBCresume( if (valuePtr == NULL) { Tcl_DictObjPut(NULL, dictPtr, OBJ_AT_TOS,Tcl_NewIntObj(opnd)); } else { - value2Ptr = Tcl_NewIntObj(opnd); + TclNewIntObj(value2Ptr, opnd); Tcl_IncrRefCount(value2Ptr); if (Tcl_IsShared(valuePtr)) { valuePtr = Tcl_DuplicateObj(valuePtr); diff --git a/generic/tclGetDate.y b/generic/tclGetDate.y index c06e53a..33b23ae 100644 --- a/generic/tclGetDate.y +++ b/generic/tclGetDate.y @@ -716,12 +716,12 @@ TclDateerror( Tcl_AppendToObj(infoPtr->messages, infoPtr->separatrix, -1); Tcl_AppendToObj(infoPtr->messages, s, -1); Tcl_AppendToObj(infoPtr->messages, " (characters ", -1); - t = Tcl_NewIntObj(location->first_column); + TclNewIntObj(t, location->first_column); Tcl_IncrRefCount(t); Tcl_AppendObjToObj(infoPtr->messages, t); Tcl_DecrRefCount(t); Tcl_AppendToObj(infoPtr->messages, "-", -1); - t = Tcl_NewIntObj(location->last_column); + TclNewIntObj(t, location->last_column); Tcl_IncrRefCount(t); Tcl_AppendObjToObj(infoPtr->messages, t); Tcl_DecrRefCount(t); diff --git a/generic/tclIO.c b/generic/tclIO.c index f0d4c9e..7af6aa0 100644 --- a/generic/tclIO.c +++ b/generic/tclIO.c @@ -7711,7 +7711,7 @@ Tcl_BadChannelOption( } Tcl_ResetResult(interp); errObj = Tcl_ObjPrintf("bad option \"%s\": should be one of ", - optionName); + optionName ? optionName : ""); argc--; for (i = 0; i < argc; i++) { Tcl_AppendPrintfToObj(errObj, "-%s, ", argv[i]); diff --git a/generic/tclIORChan.c b/generic/tclIORChan.c index 8a5675a..c622afa 100644 --- a/generic/tclIORChan.c +++ b/generic/tclIORChan.c @@ -1365,7 +1365,7 @@ ReflectInput( Tcl_Preserve(rcPtr); - toReadObj = Tcl_NewIntObj(toRead); + TclNewIntObj(toReadObj, toRead); Tcl_IncrRefCount(toReadObj); if (InvokeTclMethod(rcPtr, METH_READ, toReadObj, NULL, &resObj)!=TCL_OK) { @@ -3047,8 +3047,10 @@ ForwardProc( } case ForwardedInput: { - Tcl_Obj *toReadObj = Tcl_NewIntObj(paramPtr->input.toRead); - Tcl_IncrRefCount(toReadObj); + Tcl_Obj *toReadObj; + + TclNewIntObj(toReadObj, paramPtr->input.toRead); + Tcl_IncrRefCount(toReadObj); Tcl_Preserve(rcPtr); if (InvokeTclMethod(rcPtr, METH_READ, toReadObj, NULL, &resObj)!=TCL_OK){ diff --git a/generic/tclInt.h b/generic/tclInt.h index dcac9e8..3018d98 100644 --- a/generic/tclInt.h +++ b/generic/tclInt.h @@ -1734,7 +1734,7 @@ typedef struct Command { #define CMD_COMPILES_EXPANDED 0x08 #define CMD_REDEF_IN_PROGRESS 0x10 #define CMD_VIA_RESOLVER 0x20 -#define CMD_DEAD 0x30 +#define CMD_DEAD 0x40 /* diff --git a/generic/tclLink.c b/generic/tclLink.c index 4256f84..c763218 100644 --- a/generic/tclLink.c +++ b/generic/tclLink.c @@ -1296,7 +1296,7 @@ ObjValue( memcpy(linkPtr->lastValue.aryPtr, linkPtr->addr, linkPtr->bytes); objv = (Tcl_Obj **)ckalloc(linkPtr->numElems * sizeof(Tcl_Obj *)); for (i=0; i < linkPtr->numElems; i++) { - objv[i] = Tcl_NewIntObj(linkPtr->lastValue.iPtr[i]); + TclNewIntObj(objv[i], linkPtr->lastValue.iPtr[i]); } resultObj = Tcl_NewListObj(linkPtr->numElems, objv); ckfree(objv); @@ -1348,7 +1348,7 @@ ObjValue( memcpy(linkPtr->lastValue.aryPtr, linkPtr->addr, linkPtr->bytes); objv = (Tcl_Obj **)ckalloc(linkPtr->numElems * sizeof(Tcl_Obj *)); for (i=0; i < linkPtr->numElems; i++) { - objv[i] = Tcl_NewIntObj(linkPtr->lastValue.cPtr[i]); + TclNewIntObj(objv[i], linkPtr->lastValue.cPtr[i]); } resultObj = Tcl_NewListObj(linkPtr->numElems, objv); ckfree(objv); @@ -1361,7 +1361,7 @@ ObjValue( memcpy(linkPtr->lastValue.aryPtr, linkPtr->addr, linkPtr->bytes); objv = (Tcl_Obj **)ckalloc(linkPtr->numElems * sizeof(Tcl_Obj *)); for (i=0; i < linkPtr->numElems; i++) { - objv[i] = Tcl_NewIntObj(linkPtr->lastValue.ucPtr[i]); + TclNewIntObj(objv[i], linkPtr->lastValue.ucPtr[i]); } resultObj = Tcl_NewListObj(linkPtr->numElems, objv); ckfree(objv); @@ -1374,7 +1374,7 @@ ObjValue( memcpy(linkPtr->lastValue.aryPtr, linkPtr->addr, linkPtr->bytes); objv = (Tcl_Obj **)ckalloc(linkPtr->numElems * sizeof(Tcl_Obj *)); for (i=0; i < linkPtr->numElems; i++) { - objv[i] = Tcl_NewIntObj(linkPtr->lastValue.sPtr[i]); + TclNewIntObj(objv[i], linkPtr->lastValue.sPtr[i]); } resultObj = Tcl_NewListObj(linkPtr->numElems, objv); ckfree(objv); @@ -1387,7 +1387,7 @@ ObjValue( memcpy(linkPtr->lastValue.aryPtr, linkPtr->addr, linkPtr->bytes); objv = (Tcl_Obj **)ckalloc(linkPtr->numElems * sizeof(Tcl_Obj *)); for (i=0; i < linkPtr->numElems; i++) { - objv[i] = Tcl_NewIntObj(linkPtr->lastValue.usPtr[i]); + TclNewIntObj(objv[i], linkPtr->lastValue.usPtr[i]); } resultObj = Tcl_NewListObj(linkPtr->numElems, objv); ckfree(objv); diff --git a/generic/tclOOBasic.c b/generic/tclOOBasic.c index 9f7b526..b866c2c 100644 --- a/generic/tclOOBasic.c +++ b/generic/tclOOBasic.c @@ -1249,7 +1249,7 @@ TclOOSelfObjCmd( } case SELF_CALL: result[0] = TclOORenderCallChain(interp, contextPtr->callPtr); - result[1] = Tcl_NewIntObj(contextPtr->index); + TclNewIntObj(result[1], contextPtr->index); Tcl_SetObjResult(interp, Tcl_NewListObj(2, result)); return TCL_OK; } diff --git a/generic/tclPkg.c b/generic/tclPkg.c index b39224e..bdd9a86 100644 --- a/generic/tclPkg.c +++ b/generic/tclPkg.c @@ -905,8 +905,9 @@ SelectPackageFinal( } } } else if (result != TCL_ERROR) { - Tcl_Obj *codePtr = Tcl_NewIntObj(result); + Tcl_Obj *codePtr; + TclNewIntObj(codePtr, result); Tcl_SetObjResult(interp, Tcl_ObjPrintf( "attempt to provide package %s %s failed:" " bad return code: %s", diff --git a/generic/tclProcess.c b/generic/tclProcess.c index 5bf0af8..c0f21e3 100644 --- a/generic/tclProcess.c +++ b/generic/tclProcess.c @@ -267,8 +267,8 @@ WaitProcessStatus( "child process exited abnormally", -1); if (errorObjPtr) { errorStrings[0] = Tcl_NewStringObj("CHILDSTATUS", -1); - errorStrings[1] = Tcl_NewIntObj(resolvedPid); - errorStrings[2] = Tcl_NewIntObj(WEXITSTATUS(waitStatus)); + TclNewIntObj(errorStrings[1], resolvedPid); + TclNewIntObj(errorStrings[2], WEXITSTATUS(waitStatus)); *errorObjPtr = Tcl_NewListObj(3, errorStrings); } } @@ -286,7 +286,7 @@ WaitProcessStatus( "child killed: %s", msg); if (errorObjPtr) { errorStrings[0] = Tcl_NewStringObj("CHILDKILLED", -1); - errorStrings[1] = Tcl_NewIntObj(resolvedPid); + TclNewIntObj(errorStrings[1], resolvedPid); errorStrings[2] = Tcl_NewStringObj(Tcl_SignalId(WTERMSIG(waitStatus)), -1); errorStrings[3] = Tcl_NewStringObj(msg, -1); *errorObjPtr = Tcl_NewListObj(4, errorStrings); @@ -305,7 +305,7 @@ WaitProcessStatus( "child suspended: %s", msg); if (errorObjPtr) { errorStrings[0] = Tcl_NewStringObj("CHILDSUSP", -1); - errorStrings[1] = Tcl_NewIntObj(resolvedPid); + TclNewIntObj(errorStrings[1], resolvedPid); errorStrings[2] = Tcl_NewStringObj(Tcl_SignalId(WSTOPSIG(waitStatus)), -1); errorStrings[3] = Tcl_NewStringObj(msg, -1); *errorObjPtr = Tcl_NewListObj(4, errorStrings); @@ -326,7 +326,7 @@ WaitProcessStatus( errorStrings[1] = Tcl_NewStringObj("OPERATION", -1); errorStrings[2] = Tcl_NewStringObj("EXEC", -1); errorStrings[3] = Tcl_NewStringObj("ODDWAITRESULT", -1); - errorStrings[4] = Tcl_NewIntObj(resolvedPid); + TclNewIntObj(errorStrings[4], resolvedPid); *errorObjPtr = Tcl_NewListObj(5, errorStrings); } return TCL_PROCESS_UNKNOWN_STATUS; @@ -378,7 +378,7 @@ BuildProcessStatusObj( * Abnormal exit, return {TCL_ERROR msg error} */ - resultObjs[0] = Tcl_NewIntObj(TCL_ERROR); + TclNewIntObj(resultObjs[0], TCL_ERROR); resultObjs[1] = info->msg; resultObjs[2] = info->error; return Tcl_NewListObj(3, resultObjs); diff --git a/generic/tclTrace.c b/generic/tclTrace.c index e05fa69..9896e0e 100644 --- a/generic/tclTrace.c +++ b/generic/tclTrace.c @@ -1848,7 +1848,7 @@ TraceExecutionProc( * Append result code. */ - resultCode = Tcl_NewIntObj(code); + TclNewIntObj(resultCode, code); resultCodeStr = Tcl_GetString(resultCode); Tcl_DStringAppendElement(&cmd, resultCodeStr); Tcl_DecrRefCount(resultCode); @@ -1976,7 +1976,7 @@ TraceVarProc( int rewind = ((Interp *)interp)->execEnvPtr->rewind; /* - * We might call Tcl_Eval() below, and that might evaluate [trace vdelete] + * We might call Tcl_EvalEx() below, and that might evaluate [trace vdelete] * which might try to free tvarPtr. We want to use tvarPtr until the end * of this function, so we use Tcl_Preserve() and Tcl_Release() to be sure * it is not freed while we still need it. diff --git a/generic/tclVar.c b/generic/tclVar.c index 72724a4..2818fc9 100644 --- a/generic/tclVar.c +++ b/generic/tclVar.c @@ -2322,7 +2322,7 @@ TclPtrIncrObjVarIdx( VarHashRefCount(varPtr)--; } if (varValuePtr == NULL) { - varValuePtr = Tcl_NewIntObj(0); + TclNewIntObj(varValuePtr, 0); } if (Tcl_IsShared(varValuePtr)) { /* Copy on write */ diff --git a/tests/chanio.test b/tests/chanio.test index 46a0c06..4e6fcc1 100644 --- a/tests/chanio.test +++ b/tests/chanio.test @@ -6379,12 +6379,16 @@ test chan-io-50.1 {testing handler deletion} -setup { set f [open $path(test1) w] chan close $f set f [open $path(test1) r] + variable z not_called + set timer [after 50 lappend z timeout] + testservicemode 0 testchannelevent $f add readable [namespace code { variable z called testchannelevent $f delete 0 }] - variable z not_called - update + testservicemode 1 + vwait z + after cancel $timer set z } -cleanup { chan close $f diff --git a/tests/event.test b/tests/event.test index b42909c..70d4cff 100644 --- a/tests/event.test +++ b/tests/event.test @@ -23,11 +23,12 @@ testConstraint testfilehandler [llength [info commands testfilehandler]] testConstraint testexithandler [llength [info commands testexithandler]] testConstraint testfilewait [llength [info commands testfilewait]] testConstraint exec [llength [info commands exec]] - +testConstraint notOSX [expr {$::tcl_platform(os) ne "Darwin"}] + test event-1.1 {Tcl_CreateFileHandler, reading} -setup { testfilehandler close set result "" -} -constraints testfilehandler -body { +} -constraints {testfilehandler notOSX} -body { testfilehandler create 0 readable off testfilehandler clear 0 testfilehandler oneevent diff --git a/tests/io.test b/tests/io.test index c78492b..ca37870 100644 --- a/tests/io.test +++ b/tests/io.test @@ -6935,7 +6935,7 @@ test io-50.5 {testing handler deletion vs reentrant calls} -constraints {testcha } -cleanup { close $f } -result [list {del calling recursive} {del deleted notcalled} \ - {del deleted myself} {del after recursive}] + {del deleted myself} {del after recursive}] test io-50.6 {testing handler deletion vs reentrant calls} -constraints {testchannelevent testservicemode} -setup { file delete $path(test1) } -body { @@ -6944,6 +6944,7 @@ test io-50.6 {testing handler deletion vs reentrant calls} -constraints {testcha proc first {f} { variable u variable z + variable done if {"$u" == "toplevel"} { lappend z "first called" set u first @@ -6951,6 +6952,7 @@ test io-50.6 {testing handler deletion vs reentrant calls} -constraints {testcha vwait z after cancel $timer lappend z "first after toplevel" + set done 1 } else { lappend z "first called not toplevel" } @@ -6972,19 +6974,24 @@ test io-50.6 {testing handler deletion vs reentrant calls} -constraints {testcha } set z "" set u toplevel + set done 0 testservicemode 0 set f [open $path(test1) r] testchannelevent $f add readable [namespace code [list second $f]] testchannelevent $f add readable [namespace code [list first $f]] testservicemode 1 update + if {!$done} { + set timer2 [after 200 set done 1] + vwait done + after cancel $timer2 + } set z } -cleanup { close $f } -result [list {first called} {first called not toplevel} \ {second called, first time} {second called, second time} \ {first after toplevel}] - test io-51.1 {Test old socket deletion on Macintosh} {socket} { set x 0 set result "" diff --git a/win/nmakehlp.c b/win/nmakehlp.c index fac32ee..7536ede 100644 --- a/win/nmakehlp.c +++ b/win/nmakehlp.c @@ -708,7 +708,7 @@ QualifyPath( { char szCwd[MAX_PATH + 1]; - GetFullPathName(szPath, sizeof(szCwd)-1, szCwd, NULL); + GetFullPathName(szPath, sizeof(szCwd)-1, szCwd, NULL); printf("%s\n", szCwd); return 0; } diff --git a/win/tclWinConsole.c b/win/tclWinConsole.c index 8b1b2da..3b8753b 100644 --- a/win/tclWinConsole.c +++ b/win/tclWinConsole.c @@ -1527,11 +1527,14 @@ ConsoleSetOptionProc( } else { infoPtr->flags |= CONSOLE_RESET; } - } else if (len > 0) { - return Tcl_BadChannelOption(interp, optionName, - (infoPtr->flags & CONSOLE_READ_OPS) ? "inputmode" : ""); + return TCL_OK; + } + + if (infoPtr->flags & CONSOLE_READ_OPS) { + return Tcl_BadChannelOption(interp, optionName, "inputmode"); + } else { + return Tcl_BadChannelOption(interp, optionName, ""); } - return TCL_OK; } /* diff --git a/win/tclWinPort.h b/win/tclWinPort.h index 1aaf21d..bf4553c 100644 --- a/win/tclWinPort.h +++ b/win/tclWinPort.h @@ -49,7 +49,9 @@ typedef DWORD_PTR * PDWORD_PTR; /* * Ask for the winsock function typedefs, also. */ -#define INCL_WINSOCK_API_TYPEDEFS 1 +#ifndef INCL_WINSOCK_API_TYPEDEFS +# define INCL_WINSOCK_API_TYPEDEFS 1 +#endif #include <winsock2.h> #include <ws2tcpip.h> #ifdef HAVE_WSPIAPI_H |
