diff options
-rw-r--r-- | changes | 127 | ||||
-rw-r--r-- | doc/Encoding.3 | 2 | ||||
-rw-r--r-- | doc/info.n | 2 | ||||
-rw-r--r-- | generic/regc_locale.c | 3 | ||||
-rw-r--r-- | generic/tcl.decls | 273 | ||||
-rw-r--r-- | generic/tclBinary.c | 19 | ||||
-rw-r--r-- | generic/tclCompCmdsSZ.c | 2 | ||||
-rw-r--r-- | generic/tclDecls.h | 8 | ||||
-rw-r--r-- | generic/tclIOUtil.c | 17 | ||||
-rw-r--r-- | generic/tclInt.decls | 75 | ||||
-rw-r--r-- | generic/tclTomMath.decls | 59 | ||||
-rw-r--r-- | generic/tclUtf.c | 2 | ||||
-rw-r--r-- | library/clock.tcl | 13 | ||||
-rw-r--r-- | library/msgcat/msgcat.tcl | 45 | ||||
-rw-r--r-- | win/tclWinPipe.c | 2 |
15 files changed, 191 insertions, 458 deletions
@@ -9460,3 +9460,130 @@ Update bundled libtommath Many code fixes to avoid overflow or undefined behavior. Thanks chrstphrchvz. - Released 8.6.13, Nov 22, 2022 - details at https://core.tcl-lang.org/tcl/ - + +2022-12-01 Backport TIP #402: path name starting with '//' not + replaced by '/' also on Cygwin and QNX (nijtmans) + +2022-12-12 Windows binaries licence metadata changed to University of + California to match licence (nadkarni) + +2022-12-16 check mknod, tcdrain and uname in build script for VxWorks or others + (nijtmans) + +2022-12-16 32-bit cygwin is dead, so --enable-64bit in a Cygwin build no longer + needed (nijtmans) + +2023-01-01 (bug)[8e811b] Wrong formatting of arguments in man page (nijtmans) + +2023-01-06 (bug) [0f19ed]: Windows 11 not reported in tcl_platform(osVersion) + (nijtmans) + +2023-01-15 (bug) [8f7fde] string compare failing on big endian (coulter) + +2023-01-22 (bug) [3e8074] y2k38 problem in [interp limit time -seconds] + (nijtmans) + +2023-01-22 (bug) [e3dcab] crash with tcl_precision equal 15..18 (kenny) + +2023-02-22 (bug) [d19fe0] output replacement character on incomplete sequences + in unicode encoding (nijtmans) + +2023-02-22 (bug) [534172] sporadic crash in memchan thread cleanup. + (neumann,nijtmans) + +2023-02-28 (bug) [f9eafc] throw error in zip command when file comment/filename + to long or not iso-latin-1 (nijtmans) + +2023-03-04 (bug) [1b8df1] fix usec on windows returned by Tcl_GetTime (nadkarni) + +2023-03-05 (bug) [9c5a00]. Fix ~ and ~user path prefix on Windows (nadkarni) + +2023-03-13 (bug)[183a1a] Prevent BO by Tcl_UtfToExternal (nadkarni) + +2023-03-14 (bug) [ea69b0], crash when using a channel transformation on TCP + client socket (coulter) + +2023-03-22 (bug)[026575] Prevent invalid read in Tcl_UtfToUniChar (nijtmans) + +2023-03-30 (rfe) Allow empty mode in [chan create] to allow refchan version of + [socket -server] (max) + +2023-03-30 [0cb355] macOS 13 SDK deprecates sprintf() (chavez) + +2023-05-02 (bug) [ab123c] argument position overflow in [scan %num$mode] + (nadkarni) + +2023-05-02 (bug) [784bef] tailcall crash (nadkarni) + +2023-06-03 (bug) [af3ebc] clock scan and clock add bugs in error cases / with + abbreviated options (ade) + +2023-07-05 (bug) [66ffaf] incomplete double byte encoding sequences ignored like + in [encoding convertfrom gb12345 x] (nadkarni) + +2023-07-26 (rfe) [c54e4a] fork multithreading performance by using vfork/spawn + when supported (neumann) + +2023-08-29 Update zlib to version 1.3 (nijtmans) + +2023-09-04 Update libtommath to version 1.2.1 (nijtmans) + +2023-09-05 (bug) [60cacf] Fix tclvfs tkt Segmentation Fault at interpreter exit + when tclvfs loaded. +2023-09-05 (bug) [b5ac3e] Tcl_GetUniChar reads beyond string length for ASCII + strings (nadkarni) + +2023-09-06 (bug) [d3465c] Update install-sh to version 2020-11-14.01 (nijtmans) + +2023-09-08 Unicode 15.1 (nijtmans) + +2023-09-12 Remove option utf16 from win/makefile.vc (nijtmans) + +2023-09-13 (bug) [43b065] MS Windows: files with emojis are found by glob but + not recognized by file exists or open (nijtmans) + +2023-09-13 (bug) [a1f11d] VC6 compilation error of core-8-6-branch: error C2065: + 'int16_t' : undeclared identifier (nijtmans) + +2023-09-14 (bug) [00655c] ClockGetdatefieldsObjCmd(): avoid signed integer + overflow and platform-dependent behavior (nijtmans) + +2023-09-28 TIP #662: Tcl_VarEval is not depreciated any more (nijtmans) + +2023-10-01 (bug) [7b3167] tclOO.c: initialize fakeObject.refCount (nijtmans) + +2023-10-04 (bug) [7371b6] AddressSanitizer use-after-return detection breaks NRE + tests, coroutines (nijtmans) + +2023-11-20 (bug)[32b889] prevent spurious errors from [clock format] (gahr) + +2023-11-30 (bug) [fb2fa9],[21b062] reallow [exec %var%] on MS-Windows. It was + forbidden in 8.6.13 (brester) + +2023-12-30 (rfe) [0ac9d0] Don't call getsockname(2) in Tcl_MakeFileChannel(3) + unless absolutely necessary. Permits better constraining of Tcl/tclsh + via OpenBSD's pledge(2) or similar mechanisms. Minor rewrite. + +2024-01-09 (feature) Adapt tcltest to support Tcl 9. +=> tcltest 2.5.7 + +2024-01-11 (bug) [fd27ad] doc change of Tcl_PkgRequire & friends: version string + specification refers to "package require". + +2024-01-27 (bug) [16e25e] error for [tcl_startOfPreviousWord string end-1] + (nijtmans) + +2024-01-29 Update to zlib 1.3.1 (nijtmans) + +2024-01-29 [db4f28] segfault when Tcl_ReadChars is called with unicode object + (brester) + +2024-02-04 tzdata updated to Olson's tzdata2024a (nijtmans) + +2024-02-05 fix/document Tcl_ObjPrintf with "ll" modifier (nijtmans) + +2024-02-06 [8e666d] endless loop when redefining proc ::history (nash) + +2024-02-06 [86b3c1] endless loop when ::unknown is moved into a namespace (nash) + +- Released 8.6.14, Feb 28, 2024 - details at https://core.tcl-lang.org/tcl/ - diff --git a/doc/Encoding.3 b/doc/Encoding.3 index 9e5ae06..45398f3 100644 --- a/doc/Encoding.3 +++ b/doc/Encoding.3 @@ -253,7 +253,7 @@ the unconverted bytes that remained in \fIsrc\fR plus some further bytes from the source stream to properly convert the formerly split-up multibyte sequence. .IP \fBTCL_CONVERT_SYNTAX\fR 29 -The source buffer contained an invalid byte or character sequence. This may +The source buffer contained an invalid byte or character sequence. This may occur if the input stream has been damaged or if the input encoding method was misidentified. .IP \fBTCL_CONVERT_UNKNOWN\fR 29 @@ -358,7 +358,7 @@ Other components identify a namespace. See \fBNAMESPACE RESOLUTION\fR in the results are fully qualified. .RS .PP -A variable that has been declared but not yet given a value will be included in +A variable that has been declared but not yet given a value will be included in the results. .RE .SS "CLASS INTROSPECTION" diff --git a/generic/regc_locale.c b/generic/regc_locale.c index 177c2b9..b6687f3 100644 --- a/generic/regc_locale.c +++ b/generic/regc_locale.c @@ -1101,9 +1101,8 @@ cclass( addchr(cv, ' '); break; case CC_CNTRL: - cv = getcvec(v, NUM_CONTROL_CHAR, NUM_CONTROL_RANGE+1); + cv = getcvec(v, NUM_CONTROL_CHAR, NUM_CONTROL_RANGE); if (cv) { - addrange(cv, 0xE000, 0xF8FF); /* private */ for (i=0 ; i<NUM_CONTROL_RANGE ; i++) { addrange(cv, controlRangeTable[i].start, controlRangeTable[i].end); diff --git a/generic/tcl.decls b/generic/tcl.decls index b8e1e1f..5f82a1c 100644 --- a/generic/tcl.decls +++ b/generic/tcl.decls @@ -104,10 +104,6 @@ declare 20 { declare 21 { int Tcl_DbIsShared(Tcl_Obj *objPtr, const char *file, int line) } -# Removed in 9.0 (changed to macro): -#declare 22 { -# Tcl_Obj *Tcl_DbNewBooleanObj(int intValue, const char *file, int line) -#} declare 23 { Tcl_Obj *Tcl_DbNewByteArrayObj(const unsigned char *bytes, Tcl_Size numBytes, const char *file, int line) @@ -120,10 +116,6 @@ declare 25 { Tcl_Obj *Tcl_DbNewListObj(Tcl_Size objc, Tcl_Obj *const *objv, const char *file, int line) } -# Removed in 9.0 (changed to macro): -#declare 26 { -# Tcl_Obj *Tcl_DbNewLongObj(long longValue, const char *file, int line) -#} declare 27 { Tcl_Obj *Tcl_DbNewObj(const char *file, int line) } @@ -155,11 +147,6 @@ declare 35 { int Tcl_GetDoubleFromObj(Tcl_Interp *interp, Tcl_Obj *objPtr, double *doublePtr) } -# Removed in 9.0, replaced by macro. -#declare 36 { -# int Tcl_GetIndexFromObj(Tcl_Interp *interp, Tcl_Obj *objPtr, -# const char *const *tablePtr, const char *msg, int flags, int *indexPtr) -#} declare 37 { int Tcl_GetInt(Tcl_Interp *interp, const char *src, int *intPtr) } @@ -202,37 +189,21 @@ declare 48 { int Tcl_ListObjReplace(Tcl_Interp *interp, Tcl_Obj *listPtr, Tcl_Size first, Tcl_Size count, Tcl_Size objc, Tcl_Obj *const objv[]) } -# Removed in 9.0 (changed to macro): -#declare 49 { -# Tcl_Obj *Tcl_NewBooleanObj(int intValue) -#} declare 50 { Tcl_Obj *Tcl_NewByteArrayObj(const unsigned char *bytes, Tcl_Size numBytes) } declare 51 { Tcl_Obj *Tcl_NewDoubleObj(double doubleValue) } -# Removed in 9.0 (changed to macro): -#declare 52 { -# Tcl_Obj *Tcl_NewIntObj(int intValue) -#} declare 53 { Tcl_Obj *Tcl_NewListObj(Tcl_Size objc, Tcl_Obj *const objv[]) } -# Removed in 9.0 (changed to macro): -#declare 54 { -# Tcl_Obj *Tcl_NewLongObj(long longValue) -#} declare 55 { Tcl_Obj *Tcl_NewObj(void) } declare 56 { Tcl_Obj *Tcl_NewStringObj(const char *bytes, Tcl_Size length) } -# Removed in 9.0 (changed to macro): -#declare 57 { -# void Tcl_SetBooleanObj(Tcl_Obj *objPtr, int intValue) -#} declare 58 { unsigned char *Tcl_SetByteArrayLength(Tcl_Obj *objPtr, Tcl_Size numBytes) } @@ -243,32 +214,15 @@ declare 59 { declare 60 { void Tcl_SetDoubleObj(Tcl_Obj *objPtr, double doubleValue) } -# Removed in 9.0 (changed to macro): -#declare 61 { -# void Tcl_SetIntObj(Tcl_Obj *objPtr, int intValue) -#} declare 62 { void Tcl_SetListObj(Tcl_Obj *objPtr, Tcl_Size objc, Tcl_Obj *const objv[]) } -# Removed in 9.0 (changed to macro): -#declare 63 { -# void Tcl_SetLongObj(Tcl_Obj *objPtr, long longValue) -#} declare 64 { void Tcl_SetObjLength(Tcl_Obj *objPtr, Tcl_Size length) } declare 65 { void Tcl_SetStringObj(Tcl_Obj *objPtr, const char *bytes, Tcl_Size length) } -# Removed in 9.0, replaced by macro. -#declare 66 { -# void Tcl_AddErrorInfo(Tcl_Interp *interp, const char *message) -#} -# Removed in 9.0, replaced by macro. -#declare 67 { -# void Tcl_AddObjErrorInfo(Tcl_Interp *interp, const char *message, -# Tcl_Size length) -#} declare 68 { void Tcl_AllowExceptions(Tcl_Interp *interp) } @@ -294,14 +248,6 @@ declare 74 { declare 75 { int Tcl_AsyncReady(void) } -# Removed in 9.0 -#declare 76 { -# void Tcl_BackgroundError(Tcl_Interp *interp) -#} -# Removed in 9.0: -#declare 77 { -# char Tcl_Backslash(const char *src, int *readPtr) -#} declare 78 { int Tcl_BadChannelOption(Tcl_Interp *interp, const char *optionName, const char *optionList) @@ -367,12 +313,6 @@ declare 93 { declare 94 { Tcl_Interp *Tcl_CreateInterp(void) } -# Removed in 9.0: -#declare 95 { -# void Tcl_CreateMathFunc(Tcl_Interp *interp, const char *name, -# int numArgs, Tcl_ValueType *argTypes, -# Tcl_MathProc *proc, void *clientData) -#} declare 96 { Tcl_Command Tcl_CreateObjCommand(Tcl_Interp *interp, const char *cmdName, @@ -482,17 +422,9 @@ declare 127 { declare 128 { const char *Tcl_ErrnoMsg(int err) } -# Removed in 9.0, replaced by macro. -#declare 129 { -# int Tcl_Eval(Tcl_Interp *interp, const char *script) -#} declare 130 { int Tcl_EvalFile(Tcl_Interp *interp, const char *fileName) } -# Removed in 9.0, replaced by macro. -#declare 131 { -# int Tcl_EvalObj(Tcl_Interp *interp, Tcl_Obj *objPtr) -#} declare 132 { void Tcl_EventuallyFree(void *clientData, Tcl_FreeProc *freeProc) } @@ -531,10 +463,6 @@ declare 142 { declare 143 { void Tcl_Finalize(void) } -# Removed in 9.0 (stub entry only) -#declare 144 { -# const char *Tcl_FindExecutable(const char *argv0) -#} declare 145 { Tcl_HashEntry *Tcl_FirstHashEntry(Tcl_HashTable *tablePtr, Tcl_HashSearch *searchPtr) @@ -542,10 +470,6 @@ declare 145 { declare 146 { int Tcl_Flush(Tcl_Channel chan) } -# Removed in 9.0, TIP 559 -#declare 147 { -# void Tcl_FreeResult(Tcl_Interp *interp) -#} declare 148 { int Tcl_GetAlias(Tcl_Interp *interp, const char *childCmd, Tcl_Interp **targetInterpPtr, const char **targetCmdPtr, @@ -641,27 +565,10 @@ declare 172 { declare 173 { Tcl_Channel Tcl_GetStdChannel(int type) } -# Removed in 9.0, replaced by macro. -#declare 174 { -# const char *Tcl_GetStringResult(Tcl_Interp *interp) -#} -# Removed in 9.0, replaced by macro. -#declare 175 { -# const char *Tcl_GetVar(Tcl_Interp *interp, const char *varName, -# int flags) -#} declare 176 { const char *Tcl_GetVar2(Tcl_Interp *interp, const char *part1, const char *part2, int flags) } -# Removed in 9.0, replaced by macro. -#declare 177 { -# int Tcl_GlobalEval(Tcl_Interp *interp, const char *command) -#} -# Removed in 9.0, replaced by macro. -#declare 178 { -# int Tcl_GlobalEvalObj(Tcl_Interp *interp, Tcl_Obj *objPtr) -#} declare 179 { int Tcl_HideCommand(Tcl_Interp *interp, const char *cmdName, const char *hiddenCmdToken) @@ -702,10 +609,6 @@ declare 187 { declare 189 { Tcl_Channel Tcl_MakeFileChannel(void *handle, int mode) } -# Removed in 9.0 -#declare 190 { -# int Tcl_MakeSafe(Tcl_Interp *interp) -#} declare 191 { Tcl_Channel Tcl_MakeTcpClientChannel(void *tcpSocket) } @@ -804,10 +707,6 @@ declare 218 { declare 219 { Tcl_Size Tcl_ScanCountedElement(const char *src, Tcl_Size length, int *flagPtr) } -# Removed in 9.0: -#declare 220 { -# int Tcl_SeekOld(Tcl_Channel chan, int offset, int mode) -#} declare 221 { int Tcl_ServiceAll(void) } @@ -838,18 +737,9 @@ declare 228 { declare 229 { void Tcl_SetMaxBlockTime(const Tcl_Time *timePtr) } -# Removed in 9.0 (stub entry only) -#declare 230 { -# const char *Tcl_SetPanicProc(TCL_NORETURN1 Tcl_PanicProc *panicProc) -#} declare 231 { Tcl_Size Tcl_SetRecursionLimit(Tcl_Interp *interp, Tcl_Size depth) } -# Removed in 9.0, replaced by macro. -#declare 232 { -# void Tcl_SetResult(Tcl_Interp *interp, char *result, -# Tcl_FreeProc *freeProc) -#} declare 233 { int Tcl_SetServiceMode(int mode) } @@ -862,11 +752,6 @@ declare 235 { declare 236 { void Tcl_SetStdChannel(Tcl_Channel channel, int type) } -# Removed in 9.0, replaced by macro. -#declare 237 { -# const char *Tcl_SetVar(Tcl_Interp *interp, const char *varName, -# const char *newValue, int flags) -#} declare 238 { const char *Tcl_SetVar2(Tcl_Interp *interp, const char *part1, const char *part2, const char *newValue, int flags) @@ -888,24 +773,6 @@ declare 242 { declare 243 { void TclSplitPath(const char *path, void *argcPtr, const char ***argvPtr) } -# Removed in 9.0 (stub entry only) -#declare 244 { -# void Tcl_StaticLibrary(Tcl_Interp *interp, const char *prefix, -# Tcl_LibraryInitProc *initProc, Tcl_LibraryInitProc *safeInitProc) -#} -# Removed in 9.0 (stub entry only) -#declare 245 { -# int Tcl_StringMatch(const char *str, const char *pattern) -#} -# Removed in 9.0: -#declare 246 { -# int Tcl_TellOld(Tcl_Channel chan) -#} -# Removed in 9.0, replaced by macro. -#declare 247 { -# int Tcl_TraceVar(Tcl_Interp *interp, const char *varName, int flags, -# Tcl_VarTraceProc *proc, void *clientData) -#} declare 248 { int Tcl_TraceVar2(Tcl_Interp *interp, const char *part1, const char *part2, int flags, Tcl_VarTraceProc *proc, void *clientData) @@ -923,19 +790,10 @@ declare 251 { declare 252 { int Tcl_UnregisterChannel(Tcl_Interp *interp, Tcl_Channel chan) } -# Removed in 9.0, replaced by macro. -#declare 253 { -# int Tcl_UnsetVar(Tcl_Interp *interp, const char *varName, int flags) -#} declare 254 { int Tcl_UnsetVar2(Tcl_Interp *interp, const char *part1, const char *part2, int flags) } -# Removed in 9.0, replaced by macro. -#declare 255 { -# void Tcl_UntraceVar(Tcl_Interp *interp, const char *varName, int flags, -# Tcl_VarTraceProc *proc, void *clientData) -#} declare 256 { void Tcl_UntraceVar2(Tcl_Interp *interp, const char *part1, const char *part2, int flags, Tcl_VarTraceProc *proc, @@ -944,11 +802,6 @@ declare 256 { declare 257 { void Tcl_UpdateLinkedVar(Tcl_Interp *interp, const char *varName) } -# Removed in 9.0, replaced by macro. -#declare 258 { -# int Tcl_UpVar(Tcl_Interp *interp, const char *frameName, -# const char *varName, const char *localName, int flags) -#} declare 259 { int Tcl_UpVar2(Tcl_Interp *interp, const char *frameName, const char *part1, const char *part2, const char *localName, int flags) @@ -956,11 +809,6 @@ declare 259 { declare 260 { int Tcl_VarEval(Tcl_Interp *interp, ...) } -# Removed in 9.0, replaced by macro. -#declare 261 { -# void *Tcl_VarTraceInfo(Tcl_Interp *interp, const char *varName, -# int flags, Tcl_VarTraceProc *procPtr, void *prevClientData) -#} declare 262 { void *Tcl_VarTraceInfo2(Tcl_Interp *interp, const char *part1, const char *part2, int flags, Tcl_VarTraceProc *procPtr, @@ -979,14 +827,6 @@ declare 265 { declare 266 { void Tcl_ValidateAllMemory(const char *file, int line) } -# Removed in 9.0: -#declare 267 { -# void Tcl_AppendResultVA(Tcl_Interp *interp, va_list argList) -#} -# Removed in 9.0: -#declare 268 { -# void Tcl_AppendStringsToObjVA(Tcl_Obj *objPtr, va_list argList) -#} declare 269 { char *Tcl_HashStats(Tcl_HashTable *tablePtr) } @@ -994,42 +834,14 @@ declare 270 { const char *Tcl_ParseVar(Tcl_Interp *interp, const char *start, const char **termPtr) } -# Removed in 9.0, replaced by macro. -#declare 271 { -# const char *Tcl_PkgPresent(Tcl_Interp *interp, const char *name, -# const char *version, int exact) -#} declare 272 { const char *Tcl_PkgPresentEx(Tcl_Interp *interp, const char *name, const char *version, int exact, void *clientDataPtr) } -# Removed in 9.0, replaced by macro. -#declare 273 { -# int Tcl_PkgProvide(Tcl_Interp *interp, const char *name, -# const char *version) -#} -# TIP #268: The internally used new Require function is in slot 573. -# Removed in 9.0, replaced by macro. -#declare 274 { -# const char *Tcl_PkgRequire(Tcl_Interp *interp, const char *name, -# const char *version, int exact) -#} -# Removed in 9.0: -#declare 275 { -# void Tcl_SetErrorCodeVA(Tcl_Interp *interp, va_list argList) -#} -# Removed in 9.0: -#declare 276 { -# int Tcl_VarEvalVA(Tcl_Interp *interp, va_list argList) -#} declare 277 { Tcl_Pid Tcl_WaitPid(Tcl_Pid pid, int *statPtr, int options) } -# Removed in 9.0: -#declare 278 { -# TCL_NORETURN void Tcl_PanicVA(const char *format, va_list argList) -#} declare 279 { void Tcl_GetVersion(int *major, int *minor, int *patchLevel, int *type) } @@ -1086,10 +898,6 @@ declare 288 { declare 289 { void Tcl_DeleteThreadExitHandler(Tcl_ExitProc *proc, void *clientData) } -# Removed in 9.0 -#declare 290 { -# void Tcl_DiscardResult(Tcl_SavedResult *statePtr) -#} declare 291 { int Tcl_EvalEx(Tcl_Interp *interp, const char *script, Tcl_Size numBytes, int flags) @@ -1170,14 +978,6 @@ declare 313 { Tcl_Size Tcl_ReadChars(Tcl_Channel channel, Tcl_Obj *objPtr, Tcl_Size charsToRead, int appendFlag) } -# Removed in 9.0 -#declare 314 { -# void Tcl_RestoreResult(Tcl_Interp *interp, Tcl_SavedResult *statePtr) -#} -# Removed in 9.0 -#declare 315 { -# void Tcl_SaveResult(Tcl_Interp *interp, Tcl_SavedResult *statePtr) -#} declare 316 { int Tcl_SetSystemEncoding(Tcl_Interp *interp, const char *name) } @@ -1259,14 +1059,6 @@ declare 339 { declare 340 { char *Tcl_GetString(Tcl_Obj *objPtr) } -# Removed in 9.0: -#declare 341 { -# const char *Tcl_GetDefaultEncodingDir(void) -#} -# Removed in 9.0: -#declare 342 { -# void Tcl_SetDefaultEncodingDir(const char *path) -#} declare 343 { void Tcl_AlertNotifier(void *clientData) } @@ -1297,11 +1089,6 @@ declare 351 { declare 352 { Tcl_Size Tcl_Char16Len(const unsigned short *uniStr) } -# Removed in 9.0: -#declare 353 { -# int Tcl_UniCharNcmp(const Tcl_UniChar *ucs, const Tcl_UniChar *uct, -# unsigned long numChars) -#} declare 354 { char *Tcl_Char16ToUtfDString(const unsigned short *uniStr, Tcl_Size uniLength, Tcl_DString *dsPtr) @@ -1314,11 +1101,6 @@ declare 356 { Tcl_RegExp Tcl_GetRegExpFromObj(Tcl_Interp *interp, Tcl_Obj *patObj, int flags) } -# Removed in 9.0: -#declare 357 { -# Tcl_Obj *Tcl_EvalTokens(Tcl_Interp *interp, Tcl_Token *tokenPtr, -# Tcl_Size count) -#} declare 358 { void Tcl_FreeParse(Tcl_Parse *parsePtr) } @@ -1403,10 +1185,6 @@ declare 380 { declare 381 { int TclGetUniChar(Tcl_Obj *objPtr, Tcl_Size index) } -# Removed in 9.0, replaced by macro. -#declare 382 { -# Tcl_UniChar *Tcl_GetUnicode(Tcl_Obj *objPtr) -#} declare 383 { Tcl_Obj *TclGetRange(Tcl_Obj *objPtr, Tcl_Size first, Tcl_Size last) } @@ -1469,11 +1247,6 @@ declare 400 { Tcl_DriverBlockModeProc *Tcl_ChannelBlockModeProc( const Tcl_ChannelType *chanTypePtr) } -# Removed in 9.0 -#declare 401 { -# Tcl_DriverCloseProc *Tcl_ChannelCloseProc( -# const Tcl_ChannelType *chanTypePtr) -#} declare 402 { Tcl_DriverClose2Proc *Tcl_ChannelClose2Proc( const Tcl_ChannelType *chanTypePtr) @@ -1486,11 +1259,6 @@ declare 404 { Tcl_DriverOutputProc *Tcl_ChannelOutputProc( const Tcl_ChannelType *chanTypePtr) } -# Removed in 9.0 -#declare 405 { -# Tcl_DriverSeekProc *Tcl_ChannelSeekProc( -# const Tcl_ChannelType *chanTypePtr) -#} declare 406 { Tcl_DriverSetOptionProc *Tcl_ChannelSetOptionProc( const Tcl_ChannelType *chanTypePtr) @@ -1538,25 +1306,6 @@ declare 417 { declare 418 { int Tcl_IsChannelExisting(const char *channelName) } -# Removed in 9.0: -#declare 419 { -# int Tcl_UniCharNcasecmp(const Tcl_UniChar *ucs, const Tcl_UniChar *uct, -# unsigned long numChars) -#} -# Removed in 9.0: -#declare 420 { -# int Tcl_UniCharCaseMatch(const Tcl_UniChar *uniStr, -# const Tcl_UniChar *uniPattern, int nocase) -#} -# Removed in 9.0, as it is actually a macro: -#declare 421 { -# Tcl_HashEntry *Tcl_FindHashEntry(Tcl_HashTable *tablePtr, const void *key) -#} -# Removed in 9.0, as it is actually a macro: -#declare 422 { -# Tcl_HashEntry *Tcl_CreateHashEntry(Tcl_HashTable *tablePtr, -# const void *key, int *newPtr) -#} declare 423 { void Tcl_InitCustomHashTable(Tcl_HashTable *tablePtr, int keyType, const Tcl_HashKeyType *typePtr) @@ -1604,18 +1353,6 @@ declare 434 { Tcl_UniChar *TclGetUnicodeFromObj(Tcl_Obj *objPtr, void *lengthPtr) } -# TIP#15 (math function introspection) dkf -# Removed in 9.0: -#declare 435 { -# int Tcl_GetMathFuncInfo(Tcl_Interp *interp, const char *name, -# int *numArgsPtr, Tcl_ValueType **argTypesPtr, -# Tcl_MathProc **procPtr, void **clientDataPtr) -#} -# Removed in 9.0: -#declare 436 { -# Tcl_Obj *Tcl_ListMathFuncs(Tcl_Interp *interp, const char *pattern) -#} - # TIP#36 (better access to 'subst') dkf declare 437 { Tcl_Obj *Tcl_SubstObj(Tcl_Interp *interp, Tcl_Obj *objPtr, int flags) @@ -1929,11 +1666,6 @@ declare 518 { const char *encodingName) } -# Removed in 9.0 (stub entry only) -#declare 519 {nostub {Don't use this function in a stub-enabled extension}} { -# Tcl_ExitProc *Tcl_SetExitProc(TCL_NORETURN1 Tcl_ExitProc *proc) -#} - # TIP#143 (resource limits) dkf declare 520 { void Tcl_LimitAddHandler(Tcl_Interp *interp, int type, @@ -2499,11 +2231,6 @@ declare 655 { declare 656 { const char *Tcl_UtfPrev(const char *src, const char *start) } -# Removed by TIP #652 -# -#declare 657 { -# int Tcl_UniCharIsUnicode(int ch) -#} # TIP 656 declare 658 { diff --git a/generic/tclBinary.c b/generic/tclBinary.c index 429f7c1..314e9fd 100644 --- a/generic/tclBinary.c +++ b/generic/tclBinary.c @@ -208,7 +208,7 @@ TclIsPureByteArray( * from the given array of bytes. * * Results: - * The newly create object is returned. This object will have no initial + * The newly created object is returned. This object has no initial * string representation. The returned object has a ref count of 0. * * Side effects: @@ -223,7 +223,8 @@ Tcl_Obj * Tcl_NewByteArrayObj( const unsigned char *bytes, /* The array of bytes used to initialize the * new object. */ - Tcl_Size numBytes) /* Number of bytes in the array */ + Tcl_Size numBytes) /* Number of bytes in the array, + * must be >= 0. */ { #ifdef TCL_MEM_DEBUG return Tcl_DbNewByteArrayObj(bytes, numBytes, "unknown", 0); @@ -266,7 +267,8 @@ Tcl_Obj * Tcl_DbNewByteArrayObj( const unsigned char *bytes, /* The array of bytes used to initialize the * new object. */ - Tcl_Size numBytes, /* Number of bytes in the array */ + Tcl_Size numBytes, /* Number of bytes in the array, + * must be >= 0. */ const char *file, /* The name of the source file calling this * procedure; used for debugging. */ int line) /* Line number in the source file; used for @@ -283,7 +285,8 @@ Tcl_Obj * Tcl_DbNewByteArrayObj( const unsigned char *bytes, /* The array of bytes used to initialize the * new object. */ - Tcl_Size numBytes, /* Number of bytes in the array */ + Tcl_Size numBytes, /* Number of bytes in the array, + * must be >= 0. */ TCL_UNUSED(const char *) /*file*/, TCL_UNUSED(int) /*line*/) { @@ -314,8 +317,8 @@ Tcl_SetByteArrayObj( Tcl_Obj *objPtr, /* Object to initialize as a ByteArray. */ const unsigned char *bytes, /* The array of bytes to use as the new value. * May be NULL even if numBytes > 0. */ - Tcl_Size numBytes) /* Number of bytes in the array. - * Must be >= 0 */ + Tcl_Size numBytes) /* Number of bytes in the array, + * must be >= 0 */ { ByteArray *byteArrayPtr; Tcl_ObjInternalRep ir; @@ -1405,7 +1408,7 @@ BinaryScanCmd( if (count == BINARY_NOCOUNT) { count = 1; } - if (count > length - offset) { + if (count > (length - offset)) { goto done; } } @@ -1603,7 +1606,7 @@ BinaryScanCmd( goto badIndex; } if (count == BINARY_NOCOUNT) { - if (length < size + offset) { + if (length < (size + offset)) { goto done; } valuePtr = ScanNumber(buffer+offset, cmd, flags, diff --git a/generic/tclCompCmdsSZ.c b/generic/tclCompCmdsSZ.c index d79b7b9..0281465 100644 --- a/generic/tclCompCmdsSZ.c +++ b/generic/tclCompCmdsSZ.c @@ -2563,7 +2563,7 @@ DupJumptableInfo( Tcl_InitHashTable(&newJtPtr->hashTable, TCL_STRING_KEYS); hPtr = Tcl_FirstHashEntry(&jtPtr->hashTable, &search); - while (hPtr != NULL) { + for (; hPtr ; hPtr = Tcl_NextHashEntry(&search)) { newHPtr = Tcl_CreateHashEntry(&newJtPtr->hashTable, Tcl_GetHashKey(&jtPtr->hashTable, hPtr), &isNew); Tcl_SetHashValue(newHPtr, Tcl_GetHashValue(hPtr)); diff --git a/generic/tclDecls.h b/generic/tclDecls.h index afa29a1..a2b0ec1 100644 --- a/generic/tclDecls.h +++ b/generic/tclDecls.h @@ -1764,8 +1764,7 @@ EXTERN int Tcl_UtfCharComplete(const char *src, Tcl_Size length); EXTERN const char * Tcl_UtfNext(const char *src); /* 656 */ EXTERN const char * Tcl_UtfPrev(const char *src, const char *start); -/* 657 */ -EXTERN int Tcl_UniCharIsUnicode(int ch); +/* Slot 657 is reserved */ /* 658 */ EXTERN int Tcl_ExternalToUtfDStringEx(Tcl_Interp *interp, Tcl_Encoding encoding, const char *src, @@ -2537,7 +2536,7 @@ typedef struct TclStubs { int (*tcl_UtfCharComplete) (const char *src, Tcl_Size length); /* 654 */ const char * (*tcl_UtfNext) (const char *src); /* 655 */ const char * (*tcl_UtfPrev) (const char *src, const char *start); /* 656 */ - int (*tcl_UniCharIsUnicode) (int ch); /* 657 */ + void (*reserved657)(void); int (*tcl_ExternalToUtfDStringEx) (Tcl_Interp *interp, Tcl_Encoding encoding, const char *src, Tcl_Size srcLen, int flags, Tcl_DString *dsPtr, Tcl_Size *errorLocationPtr); /* 658 */ int (*tcl_UtfToExternalDStringEx) (Tcl_Interp *interp, Tcl_Encoding encoding, const char *src, Tcl_Size srcLen, int flags, Tcl_DString *dsPtr, Tcl_Size *errorLocationPtr); /* 659 */ int (*tcl_AsyncMarkFromSignal) (Tcl_AsyncHandler async, int sigNumber); /* 660 */ @@ -3835,8 +3834,7 @@ extern const TclStubs *tclStubsPtr; (tclStubsPtr->tcl_UtfNext) /* 655 */ #define Tcl_UtfPrev \ (tclStubsPtr->tcl_UtfPrev) /* 656 */ -#define Tcl_UniCharIsUnicode \ - (tclStubsPtr->tcl_UniCharIsUnicode) /* 657 */ +/* Slot 657 is reserved */ #define Tcl_ExternalToUtfDStringEx \ (tclStubsPtr->tcl_ExternalToUtfDStringEx) /* 658 */ #define Tcl_UtfToExternalDStringEx \ diff --git a/generic/tclIOUtil.c b/generic/tclIOUtil.c index 921d79e..df218b3 100644 --- a/generic/tclIOUtil.c +++ b/generic/tclIOUtil.c @@ -1802,12 +1802,12 @@ Tcl_FSEvalFileEx( */ const char *pathString = Tcl_GetStringFromObj(pathPtr, &length); - unsigned limit = 150; - int overflow = ((unsigned)length > limit); + int limit = 150; + int overflow = (length > limit); Tcl_AppendObjToErrorInfo(interp, Tcl_ObjPrintf( "\n (file \"%.*s%s\" line %d)", - (overflow ? limit : (unsigned)length), pathString, + (overflow ? limit : (int)length), pathString, (overflow ? "..." : ""), Tcl_GetErrorLine(interp))); } @@ -1955,12 +1955,12 @@ EvalFileCallback( Tcl_Size length; const char *pathString = Tcl_GetStringFromObj(pathPtr, &length); - const unsigned limit = 150; - int overflow = ((unsigned)length > limit); + const int limit = 150; + int overflow = (length > limit); Tcl_AppendObjToErrorInfo(interp, Tcl_ObjPrintf( "\n (file \"%.*s%s\" line %d)", - (overflow ? limit : (unsigned)length), pathString, + (overflow ? limit : (int)length), pathString, (overflow ? "..." : ""), Tcl_GetErrorLine(interp))); } @@ -3798,7 +3798,6 @@ FsListMounts( *--------------------------------------------------------------------------- */ -#undef Tcl_FSSplitPath Tcl_Obj * Tcl_FSSplitPath( Tcl_Obj *pathPtr, /* The pathname to split. */ @@ -3862,8 +3861,8 @@ Tcl_FSSplitPath( length = p - elementStart; if (length > 0) { Tcl_Obj *nextElt; - nextElt = Tcl_NewStringObj(elementStart, length); - Tcl_ListObjAppendElement(NULL, result, nextElt); + nextElt = Tcl_NewStringObj(elementStart, length); + Tcl_ListObjAppendElement(NULL, result, nextElt); } if (*p++ == '\0') { break; diff --git a/generic/tclInt.decls b/generic/tclInt.decls index ad37a0f..6a389c0 100644 --- a/generic/tclInt.decls +++ b/generic/tclInt.decls @@ -37,11 +37,6 @@ declare 6 { declare 7 { Tcl_Size TclCopyAndCollapse(Tcl_Size count, const char *src, char *dst) } -# Removed in 9.0: -#declare 8 { -# int TclCopyChannelOld(Tcl_Interp *interp, Tcl_Channel inChan, -# Tcl_Channel outChan, int toRead, Tcl_Obj *cmdPtr) -#} # TclCreatePipeline unofficially exported for use by BLT. declare 9 { Tcl_Size TclCreatePipeline(Tcl_Interp *interp, Tcl_Size argc, const char **argv, @@ -290,33 +285,10 @@ declare 120 { Tcl_Var Tcl_FindNamespaceVar(Tcl_Interp *interp, const char *name, Tcl_Namespace *contextNsPtr, int flags) } -# Removed in 9.0: -#declare 121 { -# int TclForgetImport(Tcl_Interp *interp, Tcl_Namespace *nsPtr, -# const char *pattern) -#} -#declare 122 { -# Tcl_Command TclGetCommandFromObj(Tcl_Interp *interp, Tcl_Obj *objPtr) -#} -#declare 123 { -# void TclGetCommandFullName(Tcl_Interp *interp, Tcl_Command command, -# Tcl_Obj *objPtr) -#} -#declare 124 { -# Tcl_Namespace *TclGetCurrentNamespace_(Tcl_Interp *interp) -#} -#declare 125 { -# Tcl_Namespace *TclGetGlobalNamespace_(Tcl_Interp *interp) -#} declare 126 { void Tcl_GetVariableFullName(Tcl_Interp *interp, Tcl_Var variable, Tcl_Obj *objPtr) } -# Removed in 9.0: -#declare 127 { -# int TclImport(Tcl_Interp *interp, Tcl_Namespace *nsPtr, -# const char *pattern, int allowOverwrite) -#} declare 128 { void Tcl_PopCallFrame(Tcl_Interp *interp) } @@ -332,14 +304,6 @@ declare 131 { Tcl_ResolveCmdProc *cmdProc, Tcl_ResolveVarProc *varProc, Tcl_ResolveCompiledVarProc *compiledVarProc) } -# Removed in 9.0: -#declare 132 { -# int TclpHasSockets(Tcl_Interp *interp) -#} -# Removed in 9.0: -#declare 133 { -# struct tm *TclpGetDate(const time_t *time, int useGMT) -#} declare 138 { const char *TclGetEnv(const char *name, Tcl_DString *valuePtr) } @@ -388,14 +352,6 @@ declare 156 { declare 157 { Var *TclVarTraceExists(Tcl_Interp *interp, const char *varName) } -# Removed in 9.0: -#declare 158 { -# void TclSetStartupScriptFileName(const char *filename) -#} -#declare 159 { -# const char *TclGetStartupScriptFileName(void) -#} - declare 161 { int TclChannelTransform(Tcl_Interp *interp, Tcl_Channel chan, Tcl_Obj *cmdObjPtr) @@ -432,13 +388,6 @@ declare 166 { Tcl_Size index, Tcl_Obj *valuePtr) } -# Removed in 9.0: -#declare 167 { -# void TclSetStartupScriptPath(Tcl_Obj *pathPtr) -#} -#declare 168 { -# Tcl_Obj *TclGetStartupScriptPath(void) -#} # variant of Tcl_UtfNcmp that takes n as bytes, not chars declare 169 { int TclpUtfNcmp2(const void *s1, const void *s2, size_t n) @@ -471,22 +420,6 @@ declare 177 { void TclVarErrMsg(Tcl_Interp *interp, const char *part1, const char *part2, const char *operation, const char *reason) } -# Removed in 9.0: -#declare 178 { -# void TclSetStartupScript(Tcl_Obj *pathPtr, const char *encodingName) -#} -#declare 179 { -# Tcl_Obj *TclGetStartupScript(const char **encodingNamePtr) -#} -#declare 182 { -# struct tm *TclpLocaltime(const time_t *clock) -#} -#declare 183 { -# struct tm *TclpGmtime(const time_t *clock) -#} - -# For the new "Thread Storage" subsystem. - declare 198 { int TclObjGetFrame(Tcl_Interp *interp, Tcl_Obj *objPtr, CallFrame **framePtrPtr) @@ -609,10 +542,6 @@ declare 234 { declare 235 { void TclInitVarHashTable(TclVarHashTable *tablePtr, Namespace *nsPtr) } -# Removed in 9.0: -#declare 236 { -# void TclBackgroundException(Tcl_Interp *interp, int code) -#} # TIP #285: Script cancellation support. declare 237 { @@ -726,10 +655,6 @@ interface tclIntPlat ################################ # Platform specific functions -# Removed in 9.0 -#declare 0 {unix win} { -# void TclWinConvertError(unsigned errCode) -#} declare 1 { int TclpCloseFile(TclFile file) } diff --git a/generic/tclTomMath.decls b/generic/tclTomMath.decls index da3f95d..dad35b3 100644 --- a/generic/tclTomMath.decls +++ b/generic/tclTomMath.decls @@ -73,10 +73,6 @@ declare 15 { declare 16 { mp_err MP_WUR TclBN_mp_div_2d(const mp_int *a, int b, mp_int *q, mp_int *r) } -# Removed in 9.0 -#declare 17 { -# mp_err TclBN_mp_div_3(const mp_int *a, mp_int *q, mp_digit *r) -#} declare 18 { void TclBN_mp_exch(mp_int *a, mp_int *b) } @@ -140,14 +136,6 @@ declare 37 { declare 38 { mp_err MP_WUR TclBN_mp_shrink(mp_int *a) } -# Removed in 9.0 -#declare 39 { -# void TclBN_mp_set(mp_int *a, unsigned int b) -#} -# Removed in 9.0 -#declare 40 {nostub {is private function in libtommath}} { -# mp_err TclBN_mp_sqr(const mp_int *a, mp_int *b) -#} declare 41 { mp_err MP_WUR TclBN_mp_sqrt(const mp_int *a, mp_int *b) } @@ -157,19 +145,6 @@ declare 42 { declare 43 { mp_err MP_WUR TclBN_mp_sub_d(const mp_int *a, mp_digit b, mp_int *c) } -# Removed in 9.0 -#declare 44 { -# mp_err TclBN_mp_to_unsigned_bin(const mp_int *a, unsigned char *b) -#} -# Removed in 9.0 -#declare 45 { -# mp_err TclBN_mp_to_unsigned_bin_n(const mp_int *a, unsigned char *b, -# unsigned long *outlen) -#} -# Removed in 9.0 -#declare 46 { -# mp_err TclBN_mp_toradix_n(const mp_int *a, char *str, int radix, int maxlen) -#} declare 47 { size_t MP_WUR TclBN_mp_ubin_size(const mp_int *a) } @@ -179,21 +154,9 @@ declare 48 { declare 49 { void TclBN_mp_zero(mp_int *a) } -# Removed in 9.0 -#declare 61 { -# mp_err TclBN_mp_init_ul(mp_int *a, unsigned long i) -#} -# Removed in 9.0 -#declare 62 { -# void TclBN_mp_set_ul(mp_int *a, unsigned long i) -#} declare 63 { int MP_WUR TclBN_mp_cnt_lsb(const mp_int *a) } -# Removed in 9.0 -#declare 64 { -# int TclBN_mp_init_l(mp_int *bignum, long initVal) -#} declare 65 { int MP_WUR TclBN_mp_init_i64(mp_int *bignum, int64_t initVal) } @@ -201,11 +164,6 @@ declare 66 { int MP_WUR TclBN_mp_init_u64(mp_int *bignum, uint64_t initVal) } -# Removed in 9.0 -#declare 67 { -# mp_err TclBN_mp_expt_d_ex(const mp_int *a, mp_digit b, mp_int *c, int fast) -#} -# Added in libtommath 1.0.1 declare 68 { void TclBN_mp_set_u64(mp_int *a, uint64_t i) } @@ -224,19 +182,6 @@ declare 72 { size_t size, mp_endian endian, size_t nails, const mp_int *op) } -# Added in libtommath 1.1.0 -# No longer in use: replaced by mp_and() -#declare 73 { -# int TclBN_mp_tc_and(const mp_int *a, const mp_int *b, mp_int *c) -#} -# No longer in use: replaced by mp_or() -#declare 74 { -# int TclBN_mp_tc_or(const mp_int *a, const mp_int *b, mp_int *c) -#} -# No longer in use: replaced by mp_xor() -#declare 75 { -# int TclBN_mp_tc_xor(const mp_int *a, const mp_int *b, mp_int *c) -#} declare 76 { mp_err MP_WUR TclBN_mp_signed_rsh(const mp_int *a, int b, mp_int *c) } @@ -248,10 +193,6 @@ declare 77 { declare 78 { int MP_WUR TclBN_mp_to_ubin(const mp_int *a, unsigned char *buf, size_t maxlen, size_t *written) } -# Removed in 9.0 -#declare 79 { -# mp_err MP_WUR TclBN_mp_div_ld(const mp_int *a, mp_digit b, mp_int *q, mp_digit *r) -#} declare 80 { int MP_WUR TclBN_mp_to_radix(const mp_int *a, char *str, size_t maxlen, size_t *written, int radix) } diff --git a/generic/tclUtf.c b/generic/tclUtf.c index 9888772..0babf4d 100644 --- a/generic/tclUtf.c +++ b/generic/tclUtf.c @@ -26,7 +26,7 @@ #define ALPHA_BITS ((1 << UPPERCASE_LETTER) | (1 << LOWERCASE_LETTER) \ | (1 << TITLECASE_LETTER) | (1 << MODIFIER_LETTER) | (1<<OTHER_LETTER)) -#define CONTROL_BITS ((1 << CONTROL) | (1 << FORMAT) | (1 << PRIVATE_USE)) +#define CONTROL_BITS ((1 << CONTROL) | (1 << FORMAT)) #define DIGIT_BITS (1 << DECIMAL_DIGIT_NUMBER) diff --git a/library/clock.tcl b/library/clock.tcl index 1891b21..60dfb38 100644 --- a/library/clock.tcl +++ b/library/clock.tcl @@ -16,9 +16,17 @@ # #---------------------------------------------------------------------- -# We must have message catalogs that support the root locale. +# msgcat 1.7 features are used. We need access to the Registry on Windows +# systems. -package require msgcat 1.6 +uplevel \#0 { + package require msgcat 1.7 + if { $::tcl_platform(platform) eq {windows} } { + if { [catch { package require registry 1.1 }] } { + namespace eval ::tcl::clock [list variable NoRegistry {}] + } + } +} # Put the library directory into the namespace for the ensemble so that the # library code can find message catalogs and time zone definition files. @@ -52,6 +60,7 @@ namespace eval ::tcl::clock { # Import the message catalog commands that we use. namespace import ::msgcat::mclocale + proc mc {args} { tailcall ::msgcat::mcn [namespace current] {*}$args } namespace import ::msgcat::mcpackagelocale } diff --git a/library/msgcat/msgcat.tcl b/library/msgcat/msgcat.tcl index fa21685..f6e5224 100644 --- a/library/msgcat/msgcat.tcl +++ b/library/msgcat/msgcat.tcl @@ -1220,27 +1220,32 @@ proc msgcat::mcutil::ConvertLocale {value} { # - called from an class defined oo object # - called from a classless oo object proc ::msgcat::PackageNamespaceGet {} { - uplevel 2 { - # Check self namespace to determine environment - switch -exact -- [namespace which self] { - {::oo::define::self} { - # We are within a class definition - return [namespace qualifiers [self]] - } - {::oo::Helpers::self} { - # We are within an object - set Class [info object class [self]] - # Check for classless defined object - if {$Class eq {::oo::object}} { - return [namespace qualifiers [self]] - } - # Class defined object - return [namespace qualifiers $Class] - } - default { - # Not in object environment - return [namespace current] + set ns [uplevel 2 { namespace current }] + + if {![string match {::oo::*} $ns]} { + # Not in object environment + return $ns + } + + # Check self namespace to determine environment + switch -exact -- [uplevel 2 { namespace which -command self }] { + {::oo::define::self} { + # We are within a class definition + return [namespace qualifiers [uplevel 2 { self }]] + } + {::oo::Helpers::self} { + # We are within an object + set Class [info object class [uplevel 2 { self }]] + # Check for classless defined object + if {$Class eq {::oo::object}} { + return [namespace qualifiers [uplevel 2 { self }]] } + # Class defined object + return [namespace qualifiers $Class] + } + default { + # Not in object environment + return $ns } } } diff --git a/win/tclWinPipe.c b/win/tclWinPipe.c index 60764e6..bce4d52 100644 --- a/win/tclWinPipe.c +++ b/win/tclWinPipe.c @@ -1101,7 +1101,7 @@ TclpCreateProcess( */ if (HasConsole()) { - createFlags = 0; + createFlags = 0; } else if (applType == APPL_DOS) { /* * Under NT, 16-bit DOS applications will not run unless they can |