Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | merge trunk |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | dkf-alias-encoding |
Files: | files | file ages | folders |
SHA1: |
f7b605d4cddc611c312125c65396e29a |
User & Date: | dkf 2012-02-17 09:10:06 |
Context
2012-03-08
| ||
08:59 | merge from trunk check-in: cb4a3bfbb9 user: dkf tags: dkf-alias-encoding | |
2012-02-17
| ||
09:10 | merge trunk check-in: f7b605d4cd user: dkf tags: dkf-alias-encoding | |
2012-02-16
| ||
23:11 | [Bug 2233954] AIX: compile error check-in: dc007f490b user: jan.nijtmans tags: trunk | |
2012-02-09
| ||
15:28 | merge trunk check-in: 2b01c45c26 user: dkf tags: dkf-alias-encoding | |
Changes
Changes to ChangeLog.
1 2 | 2012-02-09 Don Porter <[email protected]> | > > > > > > > > > > > > > > > > > > > > > > > > > | | | | | | | | | | | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | 2012-02-17 Jan Nijtmans <[email protected]> * generic/tclIOUtil.c: [Bug 2233954] AIX: compile error * unix/tclUnixPort.h: 2012-02-16 Donal K. Fellows <[email protected]> * generic/tclExecute.c (INST_LIST_RANGE_IMM): Enhance implementation so that shortening a (not multiply-referenced) list by lopping the end off with [lrange] or [lreplace] is efficient. 2012-02-15 Donal K. Fellows <[email protected]> * generic/tclCompCmds.c (TclCompileLreplaceCmd): Added a compilation strategy for [lreplace] that tackles the cases which are equivalent to a static [lrange]. (TclCompileLrangeCmd): Add compiler for [lrange] with constant indices so we can take advantage of existing TCL_LIST_RANGE_IMM opcode. (TclCompileLindexCmd): Improve coverage of constant-index-style compliation using technique developed for [lrange] above. (TclCompileDictForCmd): [Bug 3487626]: Fix crash in compilation of [dict for] when its implementation command is used directly rather than through the ensemble. 2012-02-09 Don Porter <[email protected]> * generic/tclStringObj.c: Converted the memcpy() calls in append operations to memmove() calls. This adds safety in the case of overlapping copies, and improves performance on some benchmarks. 2012-02-06 Don Porter <[email protected]> * generic/tclEnsemble.c: [Bug 3485022]: TclCompileEnsemble() avoid * tests/trace.test: compile when exec traces set. 2012-02-06 Miguel Sofer <[email protected]> * generic/tclTrace.c: [Bug 3484621]: Ensure that execution traces on * tests/trace.test: bytecoded commands bump the interp's compile epoch. 2012-02-02 Jan Nijtmans <[email protected]> * generic/tclUniData.c: [FRQ 3464401]: Support Unicode 6.1 * generic/regc_locale.c: 2012-02-02 Don Porter <[email protected]> * win/tclWinFile.c: [Bugs 2974459,2879351,1951574,1852572, 1661378,1613456]: Revisions to the NativeAccess() routine that queries file permissions on Windows native filesystems. Meant to fix numerous bugs where [file writable|readable|executable] "lies" about what operations are possible, especially when the file resides on a Samba share. 2012-02-01 Donal K. Fellows <[email protected]> * doc/AddErrInfo.3: [Bug 3482614]: Documentation nit. 2012-01-30 Donal K. Fellows <[email protected]> |
︙ | ︙ | |||
58 59 60 61 62 63 64 | * generic/tclOO.c (Tcl_CopyObjectInstance): [Bug 3474460]: When copying an object, make sure that the configuration of the variable resolver is also duplicated. 2012-01-22 Jan Nijtmans <[email protected]> * tools/uniClass.tcl: [FRQ 3473670]: Various Unicode-related | | | | | | 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | * generic/tclOO.c (Tcl_CopyObjectInstance): [Bug 3474460]: When copying an object, make sure that the configuration of the variable resolver is also duplicated. 2012-01-22 Jan Nijtmans <[email protected]> * tools/uniClass.tcl: [FRQ 3473670]: Various Unicode-related * tools/uniParse.tcl: speedups/robustness. Enhanced tools to be * generic/tclUniData.c: able to handle characters > 0xffff. Done in * generic/tclUtf.c: all branches in order to simplify merges for * generic/regc_locale.c: new Unicode versions (such as 6.1) 2012-01-22 Donal K. Fellows <[email protected]> * generic/tclDictObj.c (DictExistsCmd): [Bug 3475264]: Ensure that errors only ever happen when insufficient arguments are supplied, and not when a path doesn't exist or a dictionary is poorly formatted (the two cases can't be easily distinguished). |
︙ | ︙ | |||
152 153 154 155 156 157 158 | * tools/uniParse.tcl: [Bug 3444754]: string tolower \u01c5 is wrong * generic/tclUniData.c: * tests/utf.test: 2011-11-30 Jan Nijtmans <[email protected]> | | | | | 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 | * tools/uniParse.tcl: [Bug 3444754]: string tolower \u01c5 is wrong * generic/tclUniData.c: * tests/utf.test: 2011-11-30 Jan Nijtmans <[email protected]> * library/tcltest/tcltest.tcl: [Bug 967195]: Make tcltest work when tclsh is compiled without using the setargv() function on mingw (No need to incr the version, since 2.2.10 is never released). 2011-11-29 Jan Nijtmans <[email protected]> * win/Makefile.in: don't install tommath_(super)?class.h * unix/Makefile.in: don't install directories like 8.2 and 8.3 * generic/tclTomMath.h: [Bug 2991415]: move include tclInt.h from * generic/tclTomMathInt.h: tclTomMath.h to tclTomMathInt.h |
︙ | ︙ | |||
279 280 281 282 283 284 285 | * generic/tclCompCmds.c (TclCompileDictWithCmd): Corrected handling of qualified names, and added spacial cases for empty bodies (used when [dict with] is just used for extracting variables). 2011-10-07 Jan Nijtmans <[email protected]> | | | | < | 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 | * generic/tclCompCmds.c (TclCompileDictWithCmd): Corrected handling of qualified names, and added spacial cases for empty bodies (used when [dict with] is just used for extracting variables). 2011-10-07 Jan Nijtmans <[email protected]> * generic/tcl.h: Fix gcc warnings (discovered with latest * generic/tclIORChan.c: mingw, based on gcc 4.6.1) * tests/env.test: Fix env.test, when running under wine 1.3. 2011-10-06 Donal K. Fellows <[email protected]> * generic/tclDictObj.c (TclDictWithInit, TclDictWithFinish): * generic/tclCompCmds.c (TclCompileDictWithCmd): Experimental compilation for the [dict with] subcommand, using parts factored out from the interpreted version of the command. |
︙ | ︙ | |||
340 341 342 343 344 345 346 | make the main [file] command hidden by default in safe interpreters, because that's what existing code expects. This will reduce the amount which the code breaks, but not necessarily eliminate it... 2011-09-23 Don Porter <[email protected]> * generic/tclIORTrans.c: More revisions to get finalization of | | | | 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 | make the main [file] command hidden by default in safe interpreters, because that's what existing code expects. This will reduce the amount which the code breaks, but not necessarily eliminate it... 2011-09-23 Don Porter <[email protected]> * generic/tclIORTrans.c: More revisions to get finalization of ReflectedTransforms correct, including adopting a "dead" field as was done in tclIORChan.c. * tests/thread.test: Stop using the deprecated thread management commands of the tcltest package. The test suite ought to provide these tools for itself. They do not belong in a testing harness. 2011-09-22 Don Porter <[email protected]> |
︙ | ︙ | |||
363 364 365 366 367 368 369 | * tools/tcltk-man2html-utils.tcl (process-text): Teach the HTML generator how to handle this magic. 2011-09-21 Don Porter <[email protected]> * generic/tclThreadTest.c: Revise the thread exit handling of the [testthread] command so that it properly maintains the per-process | | | | 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 | * tools/tcltk-man2html-utils.tcl (process-text): Teach the HTML generator how to handle this magic. 2011-09-21 Don Porter <[email protected]> * generic/tclThreadTest.c: Revise the thread exit handling of the [testthread] command so that it properly maintains the per-process data structures even when the thread exits for reasons other than the [testthread exit] command. 2011-09-21 Alexandre Ferrieux <[email protected]> * unix/tclIO.c: [Bug 3412487]: Now short reads are allowed in synchronous fcopy, avoid mistaking them as nonblocking ones. 2011-09-21 Andreas Kupries <[email protected]> |
︙ | ︙ | |||
446 447 448 449 450 451 452 | * generic/tclCompExpr.c: [Bug 3408408]: Partial improvement by sharing as literals the computed values of constant subexpressions when we can do so without incurring the cost of string rep generation. 2011-09-13 Don Porter <[email protected]> | | | | | | 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 | * generic/tclCompExpr.c: [Bug 3408408]: Partial improvement by sharing as literals the computed values of constant subexpressions when we can do so without incurring the cost of string rep generation. 2011-09-13 Don Porter <[email protected]> * generic/tclUtil.c: [Bug 3390638]: Workaround broken Solaris Studio cc optimizer. Thanks to Wolfgang S. Kechel. * generic/tclDTrace.d: [Bug 3405652]: Portability workaround for broken system DTrace support. Thanks to Dagobert Michelson. 2011-09-12 Jan Nijtmans <[email protected]> * win/tclWinPort.h: [Bug 3407070]: tclPosixStr.c won't build with EOVERFLOW==E2BIG 2011-09-11 Don Porter <[email protected]> * tests/thread.test: Convert [testthread] use to Thread package use in thread-6.1. Eliminates a memory leak in `make valgrind`. * tests/socket.test: [Bug 3390699]: Convert [testthread] use to Thread package use in socket_*-13.1. Eliminates a memory leak in `make valgrind`. 2011-09-09 Don Porter <[email protected]> |
︙ | ︙ | |||
826 827 828 829 830 831 832 | * README: * unix/configure: autoconf-2.59 * win/configure: 2011-07-15 Don Porter <[email protected]> | | | | | | | 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 | * README: * unix/configure: autoconf-2.59 * win/configure: 2011-07-15 Don Porter <[email protected]> * generic/tclCompile.c: Avoid segfaults when RecordByteCodeStats() is called in a deleted interp. * generic/tclCompile.c: [Bug 467523, 3357771]: Prevent circular references in values with ByteCode intreps. They can lead to memory leaks. 2011-07-14 Donal K. Fellows <[email protected]> * generic/tclOOCall.c (TclOORenderCallChain): [Bug 3365156]: Remove stray refcount bump that caused a memory leak. 2011-07-12 Don Porter <[email protected]> |
︙ | ︙ | |||
884 885 886 887 888 889 890 | 2011-06-28 Reinhard Max <[email protected]> * unix/tclUnixSock.c (CreateClientSocket): [Bug 3325339]: Fix and simplify posting of the writable fileevent at the end of an asynchronous connection attempt. Improve comments for some of the trickery around [socket -async]. | | | | | | | | | | | | | | | | | | | 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 | 2011-06-28 Reinhard Max <[email protected]> * unix/tclUnixSock.c (CreateClientSocket): [Bug 3325339]: Fix and simplify posting of the writable fileevent at the end of an asynchronous connection attempt. Improve comments for some of the trickery around [socket -async]. * tests/socket.test: Adjust tests to the async code changes. Add more tests for corner cases of async sockets. 2011-06-22 Andreas Kupries <[email protected]> * library/platform/pkgIndex.tcl: Updated to platform 1.0.10. Added * library/platform/platform.tcl: handling of the DEB_HOST_MULTIARCH * unix/Makefile.in: location change for libc. * win/Makefile.in: * generic/tclInt.h: Fixed the inadvertently committed disabling of stack checks, see my 2010-11-15 commit. 2011-06-22 Reinhard Max <[email protected]> Merge from rmax-ipv6-branch: * unix/tclUnixSock.c: Fix [socket -async], so that all addresses returned by getaddrinfo() are tried, not just the first one. This requires the event loop to be running while the async connection is in progress. ***POTENTIAL INCOMPATIBILITY*** * tests/socket.test: Add a test for the above. * doc/socket: Document the fact that -async needs the event loop * generic/tclIOSock.c: AI_ADDRCONFIG is broken on HP-UX 2011-06-21 Don Porter <[email protected]> * generic/tclLink.c: [Bug 3317466]: Prevent multiple links to a single Tcl variable when calling Tcl_LinkVar(). 2011-06-13 Don Porter <[email protected]> * generic/tclStrToD.c: [Bug 3315098]: Mem leak fix from Gustaf Neumann. 2011-06-08 Andreas Kupries <[email protected]> * generic/tclExecute.c: Reverted the fix for [Bug 3274728] committed on 2011-04-06 and replaced with one which is 64bit-safe. The existing fix crashed tclsh on Windows 64bit. 2011-06-08 Donal K. Fellows <[email protected]> * tests/fileSystem.test: Reduce the amount of use of duplication of complex code to perform common tests, and convert others to do the test result check directly using Tcltest's own primitives. 2011-06-06 Jan Nijtmans <[email protected]> * tests/socket.test: Add test constraint, so 6.2 and 6.3 don't fail when the machine does not have support for ip6. Follow-up to checkin from 2011-05-11 by rmax. 2011-06-02 Don Porter <[email protected]> * generic/tclBasic.c: Removed TclCleanupLiteralTable(), and old * generic/tclInt.h: band-aid routine put in place while a fix for * generic/tclLiteral.c: [Bug 994838] took shape. No longer needed. 2011-06-02 Donal K. Fellows <[email protected]> * generic/tclInt.h (TclInvalidateNsCmdLookup): [Bug 3185407]: Extend the set of epochs that are potentially bumped when a command is created, for a slight performance drop (in some circumstances) and improved semantics. 2011-06-01 Miguel Sofer <[email protected]> * generic/tclBasic.c: Using the two free data elements in NRCommand to store objc and objv - useful for debugging. 2011-06-01 Jan Nijtmans <[email protected]> * generic/tclUtil.c: Fix for [Bug 3309871]: Valgrind finds: invalid read in TclMaxListLength(). 2011-05-31 Don Porter <[email protected]> * generic/tclInt.h: Use a complete growth algorithm for lists so * generic/tclListObj.c: that length limits do not overconstrain by a * generic/tclStringObj.c: factor of 2. [Bug 3293874]: Fix includes * generic/tclUtil.c: rooting all growth routines by default on a common tunable parameter TCL_MIN_GROWTH. 2011-05-25 Don Porter <[email protected]> * library/msgcat/msgcat.tcl: Bump to msgcat 1.4.4. * library/msgcat/pkgIndex.tcl: * unix/Makefile.in * win/Makefile.in |
︙ | ︙ | |||
997 998 999 1000 1001 1002 1003 | * library/msgcat/msgcat.tcl (msgcat::mcset, msgcat::mcmset): Remove some useless code; [dict set] builds dictionary levels for us. 2011-05-17 Andreas Kupries <[email protected]> * generic/tclCompile.c (TclFixupForwardJump): Tracked down and fixed | | | | | | | | < | | | | | 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 | * library/msgcat/msgcat.tcl (msgcat::mcset, msgcat::mcmset): Remove some useless code; [dict set] builds dictionary levels for us. 2011-05-17 Andreas Kupries <[email protected]> * generic/tclCompile.c (TclFixupForwardJump): Tracked down and fixed * generic/tclBasic.c (TclArgumentBCEnter): the cause of a violation of my assertion that 'ePtr->nline == objc' in TclArgumentBCEnter. When a bytecode was grown during jump fixup the pc -> command line mapping was not updated. When things aligned just wrong the mapping would direct command A to the data for command B, with a different number of arguments. 2011-05-11 Reinhard Max <[email protected]> * unix/tclUnixSock.c (TcpWatchProc): No need to check for server sockets here, as the generic server code already takes care of that. * tests/socket.test (accept): Add tests to make sure that this remains so. 2011-05-10 Don Porter <[email protected]> * generic/tclInt.h: New internal routines TclScanElement() and * generic/tclUtil.c: TclConvertElement() are rewritten guts of machinery to produce string rep of lists. The new routines avoid and correct [Bug 3173086]. See comments for much more detail. * generic/tclDictObj.c: Update all callers. * generic/tclIndexObj.c: * generic/tclListObj.c: * generic/tclUtil.c: * tests/list.test: |
︙ | ︙ | |||
1044 1045 1046 1047 1048 1049 1050 | 2011-05-07 Donal K. Fellows <[email protected]> * generic/tclLoad.c (TclGetLoadedPackages): Convert to use Tcl_Obj API for result generation. 2011-05-07 Miguel Sofer <[email protected]> | | | | | | | | | | | | | | | | | | | 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 | 2011-05-07 Donal K. Fellows <[email protected]> * generic/tclLoad.c (TclGetLoadedPackages): Convert to use Tcl_Obj API for result generation. 2011-05-07 Miguel Sofer <[email protected]> * generic/tclInt.h: Fix USE_TCLALLOC so that it can be enabled without * unix/Makefile.in: editing the Makefile. 2011-05-05 Don Porter <[email protected]> * generic/tclListObj.c: Stop generating string rep of dict when converting to list. Tolerate NULL interps more completely. 2011-05-03 Don Porter <[email protected]> * generic/tclUtil.c: Tighten Tcl_SplitList(). * generic/tclListObj.c: Tighten SetListFromAny(). * generic/tclDictObj.c: Tighten SetDictFromAny(). * tests/join.test: * tests/mathop.test: 2011-05-02 Don Porter <[email protected]> * generic/tclCmdMZ.c: Revised TclFindElement() interface. The final * generic/tclDictObj.c: argument had been bracePtr, the address of a * generic/tclListObj.c: boolean var, where the caller can be told * generic/tclParse.c: whether or not the parsed list element was * generic/tclUtil.c: enclosed in braces. In practice, no callers really care about that. What the callers really want to know is whether the list element value exists as a literal substring of the string being parsed, or whether a call to TclCopyAndCollpase() is needed to produce the list element value. Now the final argument is changed to do what callers actually need. This is a better fit for the calls in tclParse.c, where now a good deal of post-processing checking for "naked backslashes" is no longer necessary. ***POTENTIAL INCOMPATIBILITY*** For any callers calling in via the internal stubs table who really do use the final argument explicitly to check for the enclosing brace scenario. Simply looking for the braces where they must be is the revision available to those callers, and it will backport cleanly. * tests/parse.test: Tests for expanded literals quoting detection. * generic/tclCompCmdsSZ.c: New TclFindElement() is also a better fit for the [switch] compiler. * generic/tclInt.h: Replace TclCountSpaceRuns() with * generic/tclListObj.c: TclMaxListLength() which is the function we * generic/tclUtil.c: actually want. * generic/tclCompCmdsSZ.c: * generic/tclCompCmdsSZ.c: Rewrite of parts of the switch compiler to better use the powers of TclFindElement() and do less parsing on its own. 2011-04-28 Don Porter <[email protected]> * generic/tclInt.h: New utility routines: * generic/tclParse.c: TclIsSpaceProc() and TclCountSpaceRuns() * generic/tclUtil.c: * generic/tclCmdMZ.c: Use new routines to replace calls to isspace() * generic/tclListObj.c: and their /* INTL */ risk. * generic/tclStrToD.c: * generic/tclUtf.c: * unix/tclUnixFile.c: * generic/tclStringObj.c: Improved reaction to out of memory. 2011-04-27 Don Porter <[email protected]> |
︙ | ︙ | |||
1160 1161 1162 1163 1164 1165 1166 | 2011-04-18 Don Porter <[email protected]> * generic/tclCmdIL.c: Use ListRepPtr(.) and other cleanup. * generic/tclConfig.c: * generic/tclListObj.c: | | | | 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 | 2011-04-18 Don Porter <[email protected]> * generic/tclCmdIL.c: Use ListRepPtr(.) and other cleanup. * generic/tclConfig.c: * generic/tclListObj.c: * generic/tclInt.h: Define and use macros that test whether a Tcl * generic/tclBasic.c: list value is canonical. * generic/tclUtil.c: 2011-04-18 Donal K. Fellows <[email protected]> * doc/dict.n: [Bug 3288696]: Command summary was confusingly wrong when it came to [dict filter] with a 'value' filter. |
︙ | ︙ | |||
1331 1332 1333 1334 1335 1336 1337 | * generic/tclGetDate.y, generic/tclDate.c (TclClockOldscanObjCmd): More generation of errorCode information. 2011-03-28 Donal K. Fellows <[email protected]> * generic/tclCmdMZ.c, generic/tclConfig.c, generic/tclUtil.c: More | | < | | | | | | 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 | * generic/tclGetDate.y, generic/tclDate.c (TclClockOldscanObjCmd): More generation of errorCode information. 2011-03-28 Donal K. Fellows <[email protected]> * generic/tclCmdMZ.c, generic/tclConfig.c, generic/tclUtil.c: More generation of errorCode information, notably when lists are mis-parsed * generic/tclCmdMZ.c (Tcl_RegexpObjCmd, Tcl_RegsubObjCmd): Use the error messages generated by the variable management code rather than creating our own. 2011-03-27 Miguel Sofer <[email protected]> * generic/tclBasic.c (TclNREvalObjEx): fix performance issue, notably apparent in tclbench's "LIST lset foreach". Many thanks to Twylite for patiently researching the issue and explaining it to me: a missing Tcl_ResetObjResult that causes unwanted sharing of the current result Tcl_Obj. 2011-03-26 Donal K. Fellows <[email protected]> * generic/tclNamesp.c (Tcl_Export, Tcl_Import, DoImport): More generation of errorCode information. * generic/tclCompExpr.c, generic/tclCompile.c, generic/tclExecute.c: |
︙ | ︙ | |||
1416 1417 1418 1419 1420 1421 1422 | 2011-03-16 Jan Nijtmans <[email protected]> * generic/tclCkalloc.c: [Bug 3197864]: Pointer truncation on Win64 TCL_MEM_DEBUG builds. 2011-03-16 Don Porter <[email protected]> | | | | 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 | 2011-03-16 Jan Nijtmans <[email protected]> * generic/tclCkalloc.c: [Bug 3197864]: Pointer truncation on Win64 TCL_MEM_DEBUG builds. 2011-03-16 Don Porter <[email protected]> * generic/tclBasic.c: Some rewrites to eliminate calls to isspace() * generic/tclParse.c: and their /* INTL */ risk. * generic/tclProc.c: 2011-03-16 Jan Nijtmans <[email protected]> * unix/tcl.m4: Make SHLIB_LD_LIBS='${LIBS}' the default and * unix/configure: set to "" on per-platform necessary basis. Backported from TEA, but kept all original platform code which was |
︙ | ︙ | |||
1566 1567 1568 1569 1570 1571 1572 | * generic/tclAssembly.c (new file): * generic/tclBasic.c (Tcl_CreateInterp): * generic/tclInt.h: * tests/assemble.test (new file): * unix/Makefile.in: * win/Makefile.in: | | | | | | | | | | | 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 | * generic/tclAssembly.c (new file): * generic/tclBasic.c (Tcl_CreateInterp): * generic/tclInt.h: * tests/assemble.test (new file): * unix/Makefile.in: * win/Makefile.in: * win/makefile.vc: Merged dogeen-assembler-branch into HEAD. Since all functional changes are in the tcl::unsupported namespace, there's no reason to sequester this code on a separate branch. 2011-03-05 Miguel Sofer <[email protected]> * generic/tclExecute.c: Cleaner mem management for TEBCdata * generic/tclExecute.c: * tests/nre.test: Renamed BottomData to TEBCdata, so that the name refers to what it is rather than to its storage location. * generic/tclBasic.c: Renamed struct TEOV_callback to the more * generic/tclCompExpr.c: descriptive NRE_callback. * generic/tclCompile.c: * generic/tclExecute.c: * generic/tclInt.decls: * generic/tclInt.h: * generic/tclIntDecls.h: * generic/tclTest.c: 2011-03-04 Donal K. Fellows <[email protected]> * generic/tclOOMethod.c (ProcedureMethodCompiledVarConnect) (ProcedureMethodCompiledVarDelete): [Bug 3185009]: Keep references to resolved object variables so that an unset doesn't leave any dangling pointers for code to trip over. 2011-03-01 Miguel Sofer <[email protected]> * generic/tclBasic.c (TclNREvalObjv): Missing a variable declaration in commented out non-optimised code, left for ref in checkin [b97b771b6d] 2011-03-03 Don Porter <[email protected]> * generic/tclResult.c (Tcl_AppendResultVA): Use the directive USE_INTERP_RESULT [TIP 330] to force compat with interp->result access, instead of the improvised hack USE_DIRECT_INTERP_RESULT_ACCESS from releases past. |
︙ | ︙ | |||
1629 1630 1631 1632 1633 1634 1635 | * generic/tclExecute.c (ExprObjCallback): Fix object leak * generic/tclExecute.c (TEBCresume): Store local var array and constants in automatic vars to reduce indirection, slight perf increase | | | | 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 | * generic/tclExecute.c (ExprObjCallback): Fix object leak * generic/tclExecute.c (TEBCresume): Store local var array and constants in automatic vars to reduce indirection, slight perf increase * generic/tclOOCall.c (TclOODeleteContext): Added missing '*' so that trunk compiles. * generic/tclBasic.c (TclNRRunCallbacks): [Patch 3168229]: Don't do the trampoline dance for commands that do not have an nreProc. 2011-03-01 Donal K. Fellows <[email protected]> * generic/tclOO.c (Tcl_NewObjectInstance, TclNRNewObjectInstance) |
︙ | ︙ | |||
1718 1719 1720 1721 1722 1723 1724 | * win/configure: (autoconf-2.59) * win/tclWin32Dll.c: VS 2005 64-bit does not have intrin.h, and * generic/tclPanic.c: does not need it. 2011-01-07 Kevin B. Kenny <[email protected]> * tests/util.test (util-15.*): Added test cases for floating point | | | | < | 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 | * win/configure: (autoconf-2.59) * win/tclWin32Dll.c: VS 2005 64-bit does not have intrin.h, and * generic/tclPanic.c: does not need it. 2011-01-07 Kevin B. Kenny <[email protected]> * tests/util.test (util-15.*): Added test cases for floating point conversion of the largest denormal and the smallest normal number, to avoid any possibility of the failure suffered by PHP in the last couple of days. (They didn't fail, so no actual functional change.) 2011-01-05 Donal K. Fellows <[email protected]> * tests/package.test, tests/pkg.test: Coalesce these tests into one file that is concerned with the package system. Convert to use tcltest2 properly. * tests/autoMkindex.test, tests/pkgMkIndex.test: Convert to use |
︙ | ︙ | |||
1828 1829 1830 1831 1832 1833 1834 | * generic/tclPanic.c: Restore abort() as it was before. * win/tclWinFile.c: [Patch 3124554]: Use ExitProcess() here, like in wish. 2010-12-14 Jan Nijtmans <[email protected]> | | < | | | 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 | * generic/tclPanic.c: Restore abort() as it was before. * win/tclWinFile.c: [Patch 3124554]: Use ExitProcess() here, like in wish. 2010-12-14 Jan Nijtmans <[email protected]> * generic/tcl.h: [Bug 3137454]: Tcl CVS HEAD does not build on GCC 3. 2010-12-14 Reinhard Max <[email protected]> * win/tclWinSock.c (CreateSocket): Swap the loops over * unix/tclUnixSock.c (CreateClientSocket): local and remote addresses, so that the system's address preference for the remote side decides which family gets tried first. Cleanup and clarify some of the comments. 2010-12-13 Jan Nijtmans <[email protected]> * generic/tcl.h: [Bug 3135271]: Link error due to hidden * unix/tcl.m4: symbols (CentOS 4.2) * unix/configure: (autoconf-2.59) * win/tclWinFile.c: Undocumented feature, only meant to be used by Tk_Main. See [Patch 3124554]: Move WishPanic from Tk to Tcl 2010-12-12 Stuart Cassoff <[email protected]> * unix/tcl.m4: Better building on OpenBSD. * unix/configure: (autoconf-2.59) 2010-12-10 Jan Nijtmans <[email protected]> |
︙ | ︙ | |||
6217 6218 6219 6220 6221 6222 6223 | * tests/httpd11.test: modes (normal, -channel and -handler) * makefiles: package version set to 2.8.0 2009-04-10 Daniel Steffen <[email protected]> * unix/tclUnixChan.c: TclUnixWaitForFile(): use FD_* macros * macosx/tclMacOSXNotify.c: to manipulate select masks (Cassoff). | | | 6237 6238 6239 6240 6241 6242 6243 6244 6245 6246 6247 6248 6249 6250 6251 | * tests/httpd11.test: modes (normal, -channel and -handler) * makefiles: package version set to 2.8.0 2009-04-10 Daniel Steffen <[email protected]> * unix/tclUnixChan.c: TclUnixWaitForFile(): use FD_* macros * macosx/tclMacOSXNotify.c: to manipulate select masks (Cassoff). [Freq 1960647] [Bug 3486554] * unix/tclLoadDyld.c: use RTLD_GLOBAL instead of RTLD_LOCAL. [Bug 1961211] * macosx/tclMacOSXNotify.c: revise CoreFoundation notifier to allow embedding into applications that already have a CFRunLoop running and |
︙ | ︙ |
Changes to generic/tclBasic.c.
︙ | ︙ | |||
226 227 228 229 230 231 232 | {"join", Tcl_JoinObjCmd, NULL, NULL, 1}, {"lappend", Tcl_LappendObjCmd, TclCompileLappendCmd, NULL, 1}, {"lassign", Tcl_LassignObjCmd, TclCompileLassignCmd, NULL, 1}, {"lindex", Tcl_LindexObjCmd, TclCompileLindexCmd, NULL, 1}, {"linsert", Tcl_LinsertObjCmd, NULL, NULL, 1}, {"list", Tcl_ListObjCmd, TclCompileListCmd, NULL, 1}, {"llength", Tcl_LlengthObjCmd, TclCompileLlengthCmd, NULL, 1}, | | | | 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 | {"join", Tcl_JoinObjCmd, NULL, NULL, 1}, {"lappend", Tcl_LappendObjCmd, TclCompileLappendCmd, NULL, 1}, {"lassign", Tcl_LassignObjCmd, TclCompileLassignCmd, NULL, 1}, {"lindex", Tcl_LindexObjCmd, TclCompileLindexCmd, NULL, 1}, {"linsert", Tcl_LinsertObjCmd, NULL, NULL, 1}, {"list", Tcl_ListObjCmd, TclCompileListCmd, NULL, 1}, {"llength", Tcl_LlengthObjCmd, TclCompileLlengthCmd, NULL, 1}, {"lrange", Tcl_LrangeObjCmd, TclCompileLrangeCmd, NULL, 1}, {"lrepeat", Tcl_LrepeatObjCmd, NULL, NULL, 1}, {"lreplace", Tcl_LreplaceObjCmd, TclCompileLreplaceCmd, NULL, 1}, {"lreverse", Tcl_LreverseObjCmd, NULL, NULL, 1}, {"lsearch", Tcl_LsearchObjCmd, NULL, NULL, 1}, {"lset", Tcl_LsetObjCmd, TclCompileLsetCmd, NULL, 1}, {"lsort", Tcl_LsortObjCmd, NULL, NULL, 1}, {"package", Tcl_PackageObjCmd, NULL, NULL, 1}, {"proc", Tcl_ProcObjCmd, NULL, NULL, 1}, {"regexp", Tcl_RegexpObjCmd, TclCompileRegexpCmd, NULL, 1}, |
︙ | ︙ |
Changes to generic/tclCompCmds.c.
︙ | ︙ | |||
902 903 904 905 906 907 908 | loopRange = DeclareExceptionRange(envPtr, LOOP_EXCEPTION_RANGE); ExceptionRangeStarts(envPtr, loopRange); /* * Compile the loop body itself. It should be stack-neutral. */ | | | 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 | loopRange = DeclareExceptionRange(envPtr, LOOP_EXCEPTION_RANGE); ExceptionRangeStarts(envPtr, loopRange); /* * Compile the loop body itself. It should be stack-neutral. */ SetLineInformation(3); CompileBody(envPtr, bodyTokenPtr, interp); TclEmitOpcode( INST_POP, envPtr); /* * Both exception target ranges (error and loop) end here. */ |
︙ | ︙ | |||
1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 | TclEmitInt4( infoIndex, envPtr); range = DeclareExceptionRange(envPtr, CATCH_EXCEPTION_RANGE); TclEmitInstInt4( INST_BEGIN_CATCH4, range, envPtr); ExceptionRangeStarts(envPtr, range); envPtr->currStackDepth++; CompileBody(envPtr, bodyTokenPtr, interp); envPtr->currStackDepth = savedStackDepth; ExceptionRangeEnds(envPtr, range); /* * Normal termination code: the stack has the key list below the result of * the body evaluation: swap them and finish the update code. | > | 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 | TclEmitInt4( infoIndex, envPtr); range = DeclareExceptionRange(envPtr, CATCH_EXCEPTION_RANGE); TclEmitInstInt4( INST_BEGIN_CATCH4, range, envPtr); ExceptionRangeStarts(envPtr, range); envPtr->currStackDepth++; SetLineInformation(parsePtr->numWords - 1); CompileBody(envPtr, bodyTokenPtr, interp); envPtr->currStackDepth = savedStackDepth; ExceptionRangeEnds(envPtr, range); /* * Normal termination code: the stack has the key list below the result of * the body evaluation: swap them and finish the update code. |
︙ | ︙ | |||
3142 3143 3144 3145 3146 3147 3148 3149 3150 | idxTokenPtr = TokenAfter(valTokenPtr); if (idxTokenPtr->type == TCL_TOKEN_SIMPLE_WORD) { Tcl_Obj *tmpObj; int idx, result; tmpObj = Tcl_NewStringObj(idxTokenPtr[1].start, idxTokenPtr[1].size); result = TclGetIntFromObj(NULL, tmpObj, &idx); TclDecrRefCount(tmpObj); | > > > > > > > > > > | | | > | 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 | idxTokenPtr = TokenAfter(valTokenPtr); if (idxTokenPtr->type == TCL_TOKEN_SIMPLE_WORD) { Tcl_Obj *tmpObj; int idx, result; tmpObj = Tcl_NewStringObj(idxTokenPtr[1].start, idxTokenPtr[1].size); result = TclGetIntFromObj(NULL, tmpObj, &idx); if (result == TCL_OK) { if (idx < 0) { result = TCL_ERROR; } } else { result = TclGetIntForIndexM(NULL, tmpObj, -2, &idx); if (result == TCL_OK && idx > -2) { result = TCL_ERROR; } } TclDecrRefCount(tmpObj); if (result == TCL_OK) { /* * All checks have been completed, and we have exactly one of * these constructs: * lindex <arbitraryValue> <posInt> * lindex <arbitraryValue> end-<posInt> * This is best compiled as a push of the arbitrary value followed * by an "immediate lindex" which is the most efficient variety. */ CompileWord(envPtr, valTokenPtr, interp, 1); TclEmitInstInt4( INST_LIST_INDEX_IMM, idx, envPtr); return TCL_OK; |
︙ | ︙ | |||
3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 | } varTokenPtr = TokenAfter(parsePtr->tokenPtr); CompileWord(envPtr, varTokenPtr, interp, 1); TclEmitOpcode( INST_LIST_LENGTH, envPtr); return TCL_OK; } /* *---------------------------------------------------------------------- * * TclCompileLsetCmd -- * * Procedure called to compile the "lset" command. | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 | } varTokenPtr = TokenAfter(parsePtr->tokenPtr); CompileWord(envPtr, varTokenPtr, interp, 1); TclEmitOpcode( INST_LIST_LENGTH, envPtr); return TCL_OK; } /* *---------------------------------------------------------------------- * * TclCompileLrangeCmd -- * * How to compile the "lrange" command. We only bother because we needed * the opcode anyway for "lassign". * *---------------------------------------------------------------------- */ int TclCompileLrangeCmd( Tcl_Interp *interp, /* Tcl interpreter for context. */ Tcl_Parse *parsePtr, /* Points to a parse structure for the * command. */ Command *cmdPtr, /* Points to defintion of command being * compiled. */ CompileEnv *envPtr) /* Holds the resulting instructions. */ { Tcl_Token *tokenPtr, *listTokenPtr; DefineLineInformation; /* TIP #280 */ Tcl_Obj *tmpObj; int idx1, idx2, result; if (parsePtr->numWords != 4) { return TCL_ERROR; } listTokenPtr = TokenAfter(parsePtr->tokenPtr); /* * Parse the first index. Will only compile if it is constant and not an * _integer_ less than zero (since we reserve negative indices here for * end-relative indexing). */ tokenPtr = TokenAfter(listTokenPtr); if (tokenPtr->type != TCL_TOKEN_SIMPLE_WORD) { return TCL_ERROR; } tmpObj = Tcl_NewStringObj(tokenPtr[1].start, tokenPtr[1].size); result = TclGetIntFromObj(NULL, tmpObj, &idx1); if (result == TCL_OK) { if (idx1 < 0) { result = TCL_ERROR; } } else { result = TclGetIntForIndexM(NULL, tmpObj, -2, &idx1); if (result == TCL_OK && idx1 > -2) { result = TCL_ERROR; } } TclDecrRefCount(tmpObj); if (result != TCL_OK) { return TCL_ERROR; } /* * Parse the second index. Will only compile if it is constant and not an * _integer_ less than zero (since we reserve negative indices here for * end-relative indexing). */ tokenPtr = TokenAfter(tokenPtr); if (tokenPtr->type != TCL_TOKEN_SIMPLE_WORD) { return TCL_ERROR; } tmpObj = Tcl_NewStringObj(tokenPtr[1].start, tokenPtr[1].size); result = TclGetIntFromObj(NULL, tmpObj, &idx2); if (result == TCL_OK) { if (idx2 < 0) { result = TCL_ERROR; } } else { result = TclGetIntForIndexM(NULL, tmpObj, -2, &idx2); if (result == TCL_OK && idx2 > -2) { result = TCL_ERROR; } } TclDecrRefCount(tmpObj); if (result != TCL_OK) { return TCL_ERROR; } /* * Issue instructions. It's not safe to skip doing the LIST_RANGE, as * we've not proved that the 'list' argument is really a list. Not that it * is worth trying to do that given current knowledge. */ CompileWord(envPtr, listTokenPtr, interp, 1); TclEmitInstInt4( INST_LIST_RANGE_IMM, idx1, envPtr); TclEmitInt4( idx2, envPtr); return TCL_OK; } /* *---------------------------------------------------------------------- * * TclCompileLreplaceCmd -- * * How to compile the "lreplace" command. We only bother with the case * where there are no elements to insert and where both the 'first' and * 'last' arguments are constant and one can be deterined to be at the * end of the list. (This is the case that could also be written with * "lrange".) * *---------------------------------------------------------------------- */ int TclCompileLreplaceCmd( Tcl_Interp *interp, /* Tcl interpreter for context. */ Tcl_Parse *parsePtr, /* Points to a parse structure for the * command. */ Command *cmdPtr, /* Points to defintion of command being * compiled. */ CompileEnv *envPtr) /* Holds the resulting instructions. */ { Tcl_Token *tokenPtr, *listTokenPtr; DefineLineInformation; /* TIP #280 */ Tcl_Obj *tmpObj; int idx1, idx2, result, guaranteedDropAll = 0; if (parsePtr->numWords != 4) { return TCL_ERROR; } listTokenPtr = TokenAfter(parsePtr->tokenPtr); /* * Parse the first index. Will only compile if it is constant and not an * _integer_ less than zero (since we reserve negative indices here for * end-relative indexing). */ tokenPtr = TokenAfter(listTokenPtr); if (tokenPtr->type != TCL_TOKEN_SIMPLE_WORD) { return TCL_ERROR; } tmpObj = Tcl_NewStringObj(tokenPtr[1].start, tokenPtr[1].size); result = TclGetIntFromObj(NULL, tmpObj, &idx1); if (result == TCL_OK) { if (idx1 < 0) { result = TCL_ERROR; } } else { result = TclGetIntForIndexM(NULL, tmpObj, -2, &idx1); if (result == TCL_OK && idx1 > -2) { result = TCL_ERROR; } } TclDecrRefCount(tmpObj); if (result != TCL_OK) { return TCL_ERROR; } /* * Parse the second index. Will only compile if it is constant and not an * _integer_ less than zero (since we reserve negative indices here for * end-relative indexing). */ tokenPtr = TokenAfter(tokenPtr); if (tokenPtr->type != TCL_TOKEN_SIMPLE_WORD) { return TCL_ERROR; } tmpObj = Tcl_NewStringObj(tokenPtr[1].start, tokenPtr[1].size); result = TclGetIntFromObj(NULL, tmpObj, &idx2); if (result == TCL_OK) { if (idx2 < 0) { result = TCL_ERROR; } } else { result = TclGetIntForIndexM(NULL, tmpObj, -2, &idx2); if (result == TCL_OK && idx2 > -2) { result = TCL_ERROR; } } TclDecrRefCount(tmpObj); if (result != TCL_OK) { return TCL_ERROR; } /* * Sanity check: can only issue when we're removing a range at one or * other end of the list. If we're at one end or the other, convert the * indices into the equivalent for an [lrange]. */ if (idx1 == 0) { if (idx2 == -2) { guaranteedDropAll = 1; } idx1 = idx2 + 1; idx2 = -2; } else if (idx2 == -2) { idx2 = idx1 - 1; idx1 = 0; } else { return TCL_ERROR; } /* * Issue instructions. It's not safe to skip doing the LIST_RANGE, as * we've not proved that the 'list' argument is really a list. Not that it * is worth trying to do that given current knowledge. */ CompileWord(envPtr, listTokenPtr, interp, 1); if (guaranteedDropAll) { TclEmitOpcode( INST_LIST_LENGTH, envPtr); TclEmitOpcode( INST_POP, envPtr); PushLiteral(envPtr, "", 0); } else { TclEmitInstInt4( INST_LIST_RANGE_IMM, idx1, envPtr); TclEmitInt4( idx2, envPtr); } return TCL_OK; } /* *---------------------------------------------------------------------- * * TclCompileLsetCmd -- * * Procedure called to compile the "lset" command. |
︙ | ︙ |
Changes to generic/tclExecute.c.
︙ | ︙ | |||
4306 4307 4308 4309 4310 4311 4312 | /* * Check if we are referring to a valid, non-empty list range, and if * so, build the list of elements in that range. */ if (fromIdx<=toIdx && fromIdx<objc && toIdx>=0) { | | > > > > > > > > > > > > > > > > > > > > > | 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 | /* * Check if we are referring to a valid, non-empty list range, and if * so, build the list of elements in that range. */ if (fromIdx<=toIdx && fromIdx<objc && toIdx>=0) { if (fromIdx < 0) { fromIdx = 0; } if (toIdx >= objc) { toIdx = objc-1; } if (fromIdx == 0 && toIdx != objc-1 && !Tcl_IsShared(valuePtr)) { /* * BEWARE! This is looking inside the implementation of the * list type. */ List *listPtr = valuePtr->internalRep.twoPtrValue.ptr1; if (listPtr->refCount == 1) { TRACE(("\"%.30s\" %d %d => ", O2S(valuePtr), TclGetInt4AtPtr(pc+1), TclGetInt4AtPtr(pc+5))); for (index=toIdx+1 ; index<objc-1 ; index++) { TclDecrRefCount(objv[index]); } listPtr->elemCount = toIdx+1; listPtr->canonicalFlag = 1; TclInvalidateStringRep(valuePtr); TRACE_APPEND(("%.30s\n", O2S(valuePtr))); NEXT_INST_F(9, 0, 0); } } objResultPtr = Tcl_NewListObj(toIdx-fromIdx+1, objv+fromIdx); } else { TclNewObj(objResultPtr); } TRACE_WITH_OBJ(("\"%.30s\" %d %d => ", O2S(valuePtr), |
︙ | ︙ | |||
5712 5713 5714 5715 5716 5717 5718 | Tcl_IncrRefCount(value2Ptr); if (Tcl_IsShared(valuePtr)) { valuePtr = Tcl_DuplicateObj(valuePtr); Tcl_DictObjPut(NULL, dictPtr, OBJ_AT_TOS, valuePtr); } result = TclIncrObj(interp, valuePtr, value2Ptr); if (result == TCL_OK) { | | | 5733 5734 5735 5736 5737 5738 5739 5740 5741 5742 5743 5744 5745 5746 5747 | Tcl_IncrRefCount(value2Ptr); if (Tcl_IsShared(valuePtr)) { valuePtr = Tcl_DuplicateObj(valuePtr); Tcl_DictObjPut(NULL, dictPtr, OBJ_AT_TOS, valuePtr); } result = TclIncrObj(interp, valuePtr, value2Ptr); if (result == TCL_OK) { TclInvalidateStringRep(dictPtr); } TclDecrRefCount(value2Ptr); } break; case INST_DICT_UNSET: cleanup = opnd; result = Tcl_DictObjRemoveKeyList(interp, dictPtr, opnd, |
︙ | ︙ |
Changes to generic/tclIOUtil.c.
︙ | ︙ | |||
14 15 16 17 18 19 20 21 22 23 24 25 26 27 | * Copyright (c) 1994-1997 Sun Microsystems, Inc. * Copyright (c) 2001-2004 Vincent Darley. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ #include "tclInt.h" #ifdef __WIN32__ # include "tclWinInt.h" #endif #include "tclFileSystem.h" /* | > > > | 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | * Copyright (c) 1994-1997 Sun Microsystems, Inc. * Copyright (c) 2001-2004 Vincent Darley. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ #ifdef HAVE_SYS_STAT_H # include <sys/stat.h> #endif #include "tclInt.h" #ifdef __WIN32__ # include "tclWinInt.h" #endif #include "tclFileSystem.h" /* |
︙ | ︙ |
Changes to generic/tclInt.h.
︙ | ︙ | |||
3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 | Tcl_Parse *parsePtr, Command *cmdPtr, struct CompileEnv *envPtr); MODULE_SCOPE int TclCompileListCmd(Tcl_Interp *interp, Tcl_Parse *parsePtr, Command *cmdPtr, struct CompileEnv *envPtr); MODULE_SCOPE int TclCompileLlengthCmd(Tcl_Interp *interp, Tcl_Parse *parsePtr, Command *cmdPtr, struct CompileEnv *envPtr); MODULE_SCOPE int TclCompileLsetCmd(Tcl_Interp *interp, Tcl_Parse *parsePtr, Command *cmdPtr, struct CompileEnv *envPtr); MODULE_SCOPE int TclCompileNamespaceUpvarCmd(Tcl_Interp *interp, Tcl_Parse *parsePtr, Command *cmdPtr, struct CompileEnv *envPtr); | > > > > > > | 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 | Tcl_Parse *parsePtr, Command *cmdPtr, struct CompileEnv *envPtr); MODULE_SCOPE int TclCompileListCmd(Tcl_Interp *interp, Tcl_Parse *parsePtr, Command *cmdPtr, struct CompileEnv *envPtr); MODULE_SCOPE int TclCompileLlengthCmd(Tcl_Interp *interp, Tcl_Parse *parsePtr, Command *cmdPtr, struct CompileEnv *envPtr); MODULE_SCOPE int TclCompileLrangeCmd(Tcl_Interp *interp, Tcl_Parse *parsePtr, Command *cmdPtr, struct CompileEnv *envPtr); MODULE_SCOPE int TclCompileLreplaceCmd(Tcl_Interp *interp, Tcl_Parse *parsePtr, Command *cmdPtr, struct CompileEnv *envPtr); MODULE_SCOPE int TclCompileLsetCmd(Tcl_Interp *interp, Tcl_Parse *parsePtr, Command *cmdPtr, struct CompileEnv *envPtr); MODULE_SCOPE int TclCompileNamespaceUpvarCmd(Tcl_Interp *interp, Tcl_Parse *parsePtr, Command *cmdPtr, struct CompileEnv *envPtr); |
︙ | ︙ |
Changes to tests/dict.test.
︙ | ︙ | |||
1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 | set ::d {p {q {a 1 b 2}}} apply {{} { dict with ::d p q { } return $a,$b }} } 1,2 # cleanup ::tcltest::cleanupTests return # Local Variables: # mode: tcl | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 | set ::d {p {q {a 1 b 2}}} apply {{} { dict with ::d p q { } return $a,$b }} } 1,2 proc linenumber {} { dict get [info frame -1] line } test dict-23.1 {dict compilation crash: Bug 3487626} { apply {n { set e {} set k {} dict for {a b} {c {d {e {f g}}}} { ::tcl::dict::for {h i} $b { dict update i e j { ::tcl::dict::update j f k { return [expr {$n - [linenumber]}] } } } } }} [linenumber] } 5 test dict-23.2 {dict compilation crash: Bug 3487626} knownBug { # Something isn't quite right in line number and continuation line # tracking; at time of writing, this test produces 7, not 5, which # indicates that the extra newlines in the non-script argument are # confusing things. apply {n { set e {} set k {} dict for {a { b }} {c {d {e {f g}}}} { ::tcl::dict::for {h { i }} ${ b } { dict update { i } e { j } { ::tcl::dict::update { j } f k { return [expr {$n - [linenumber]}] } } } } }} [linenumber] } 5 rename linenumber {} # cleanup ::tcltest::cleanupTests return # Local Variables: # mode: tcl |
︙ | ︙ |
Changes to unix/tclUnixPort.h.
︙ | ︙ | |||
92 93 94 95 96 97 98 | *--------------------------------------------------------------------------- */ #include <sys/file.h> #ifdef HAVE_SYS_SELECT_H # include <sys/select.h> #endif | > | > | 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | *--------------------------------------------------------------------------- */ #include <sys/file.h> #ifdef HAVE_SYS_SELECT_H # include <sys/select.h> #endif #ifdef HAVE_SYS_STAT_H # include <sys/stat.h> #endif #if TIME_WITH_SYS_TIME # include <sys/time.h> # include <time.h> #else #if HAVE_SYS_TIME_H # include <sys/time.h> #else |
︙ | ︙ |