Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | merge core-8-5-branch |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | dgp-scan-element |
Files: | files | file ages | folders |
SHA1: |
09bbc03c47b531c2b9c1eb8443498305 |
User & Date: | sebres 2012-03-01 10:02:00 |
Context
2012-03-06
| ||
09:30 | Compatibility to older visual studio / windows platform SDK check-in: a16a2b5417 user: sebres tags: dgp-scan-element | |
2012-03-01
| ||
10:02 | merge core-8-5-branch check-in: 09bbc03c47 user: sebres tags: dgp-scan-element | |
09:33 | fix compile error win / visual studio check-in: 57f30e3f2c user: sebres tags: dgp-scan-element | |
2012-02-29
| ||
22:38 | oops, that's no utf-8 BOM ;-( check-in: d2c359a194 user: jan.nijtmans tags: core-8-5-branch | |
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 | 2012-02-29 Jan Nijtmans <[email protected]> * generic/tclIOUtil.c: [Bug 3466099] BOM in Unicode * generic/tclEncoding.c: * tests/source.test 2012-02-23 Donal K. Fellows <[email protected]> * tests/reg.test (14.21-23): Add tests relating to bug 1115587. Actual bug is characterised by test marked with 'knownBug'. 2012-02-17 Jan Nijtmans <[email protected]> * generic/tclIOUtil.c: [Bug 2233954]: AIX: compile error * unix/tclUnixPort.h: 2012-02-15 Donal K. Fellows <[email protected]> * generic/tclCompCmds.c (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: [Bug 3484402]: Correct Off-By-One error appending unicode. Thanks to Poor Yorick. Also corrected test for when growth is needed. 2012-02-06 Don Porter <[email protected]> * generic/tclCompCmds.c: [Bug 3485022]: TclCompileEnsemble() avoid * tests/trace.test: compile when exec traces set. 2012-02-06 Miguel Sofer <[email protected]> * generic/tclTrace.c: Fix for [Bug 3484621]: insure that * tests/trace.test: execution traces on 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 |
︙ | ︙ | |||
2298 2299 2300 2301 2302 2303 2304 | * tests/httpd: Backport new tests for http 2.7.3. * tests/http.tcl: 2009-04-10 Daniel Steffen <[email protected]> * unix/tclUnixChan.c: TclUnixWaitForFile(): use FD_* macros * macosx/tclMacOSXNotify.c: to manipulate select masks (Cassoff). | | | 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 | * tests/httpd: Backport new tests for http 2.7.3. * tests/http.tcl: 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/tclCompCmds.c.
︙ | ︙ | |||
968 969 970 971 972 973 974 | loopRange = DeclareExceptionRange(envPtr, LOOP_EXCEPTION_RANGE); ExceptionRangeStarts(envPtr, loopRange); /* * Compile the loop body itself. It should be stack-neutral. */ | | | 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 | 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. */ |
︙ | ︙ | |||
1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 | TclEmitInstInt4( INST_DICT_UPDATE_START, dictIndex, envPtr); TclEmitInt4( infoIndex, envPtr); range = DeclareExceptionRange(envPtr, CATCH_EXCEPTION_RANGE); TclEmitInstInt4( INST_BEGIN_CATCH4, range, envPtr); ExceptionRangeStarts(envPtr, range); CompileBody(envPtr, bodyTokenPtr, interp); 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. */ | > | 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 | TclEmitInstInt4( INST_DICT_UPDATE_START, dictIndex, envPtr); TclEmitInt4( infoIndex, envPtr); range = DeclareExceptionRange(envPtr, CATCH_EXCEPTION_RANGE); TclEmitInstInt4( INST_BEGIN_CATCH4, range, envPtr); ExceptionRangeStarts(envPtr, range); SetLineInformation(parsePtr->numWords - 1); CompileBody(envPtr, bodyTokenPtr, interp); 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. */ |
︙ | ︙ |
Changes to generic/tclCompile.c.
︙ | ︙ | |||
4087 4088 4089 4090 4091 4092 4093 | void RecordByteCodeStats( ByteCode *codePtr) /* Points to ByteCode structure with info * to add to accumulated statistics. */ { Interp *iPtr = (Interp *) *codePtr->interpHandle; | | > | 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 | void RecordByteCodeStats( ByteCode *codePtr) /* Points to ByteCode structure with info * to add to accumulated statistics. */ { Interp *iPtr = (Interp *) *codePtr->interpHandle; register ByteCodeStats *statsPtr; if (iPtr == NULL) { /* Avoid segfaulting in case we're called in a deleted interp */ return; } statsPtr = &(iPtr->stats); statsPtr->numCompilations++; statsPtr->totalSrcBytes += (double) codePtr->numSrcBytes; statsPtr->totalByteCodeBytes += (double) codePtr->structureSize; statsPtr->currentSrcBytes += (double) codePtr->numSrcBytes; statsPtr->currentByteCodeBytes += (double) codePtr->structureSize; |
︙ | ︙ |
Changes to generic/tclEncoding.c.
︙ | ︙ | |||
980 981 982 983 984 985 986 | * *------------------------------------------------------------------------ */ int Tcl_SetSystemEncoding( Tcl_Interp *interp, /* Interp for error reporting, if not NULL. */ | | | | 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 | * *------------------------------------------------------------------------ */ int Tcl_SetSystemEncoding( Tcl_Interp *interp, /* Interp for error reporting, if not NULL. */ CONST char *name) /* The name of the desired encoding, or NULL/"" * to reset to default encoding. */ { Tcl_Encoding encoding; Encoding *encodingPtr; if (!name || !*name) { Tcl_MutexLock(&encodingMutex); encoding = defaultEncoding; encodingPtr = (Encoding *) encoding; encodingPtr->refCount++; Tcl_MutexUnlock(&encodingMutex); } else { encoding = Tcl_GetEncoding(interp, name); |
︙ | ︙ |
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. */ #if defined(HAVE_SYS_STAT_H) && !defined _WIN32 # include <sys/stat.h> #endif #include "tclInt.h" #ifdef __WIN32__ # include "tclWinInt.h" #endif #include "tclFileSystem.h" /* |
︙ | ︙ | |||
1781 1782 1783 1784 1785 1786 1787 | Tcl_Close(interp,chan); return result; } } objPtr = Tcl_NewObj(); Tcl_IncrRefCount(objPtr); | > > > | > > > > > > > > > > > > | 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 | Tcl_Close(interp,chan); return result; } } objPtr = Tcl_NewObj(); Tcl_IncrRefCount(objPtr); /* Try to read first character of stream, so we can * check for utf-8 BOM to be handled especially. */ if (Tcl_ReadChars(chan, objPtr, 1, 0) < 0) { Tcl_Close(interp, chan); Tcl_AppendResult(interp, "couldn't read file \"", Tcl_GetString(pathPtr), "\": ", Tcl_PosixError(interp), NULL); goto end; } string = Tcl_GetString(objPtr); /* * If first character is not a BOM, append the remaining characters, * otherwise replace them [Bug 3466099]. */ if (Tcl_ReadChars(chan, objPtr, -1, memcmp(string, "\xef\xbb\xbf", 3)) < 0) { Tcl_Close(interp, chan); Tcl_AppendResult(interp, "couldn't read file \"", Tcl_GetString(pathPtr), "\": ", Tcl_PosixError(interp), NULL); goto end; } if (Tcl_Close(interp, chan) != TCL_OK) { |
︙ | ︙ |
Changes to tests/dict.test.
︙ | ︙ | |||
1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 | incr inner } } } } string range [append foo OK] end-1 end } OK # cleanup ::tcltest::cleanupTests return # Local Variables: # mode: tcl | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 | incr inner } } } } string range [append foo OK] end-1 end } OK 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 tests/reg.test.
︙ | ︙ | |||
169 170 171 172 173 174 175 176 177 178 179 180 181 182 | foreach f [split $infonameorder ""] { if {[string match *$f* $fl]} { lappend ret $infonames($f) } } return $ret } # match expected, internal routine that does the work # parameters like the "real" routines except they don't have "opts", # which is a possibly-empty list of switches for the regexp match attempt # The ! flag is used to indicate expected match failure (for REG_EXPECT, # which wants argument testing even in the event of failure). proc MatchExpected {opts testid flags re target args} { | > > > > > > > > > > > > > > > > > > > > < < | < < < < < < < < < < < | 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 | foreach f [split $infonameorder ""] { if {[string match *$f* $fl]} { lappend ret $infonames($f) } } return $ret } # Share the generation of the list of test constraints so it is # done the same on all routes. proc TestConstraints {flags} { set constraints [list testregexp] variable regBug if {$regBug} { # This will trigger registration as a skipped test lappend constraints knownBug } # Tcl locale stuff doesn't do the ch/xy test fakery yet if {[string match *+* $flags]} { # This will trigger registration as a skipped test lappend constraints localeRegexp } return $constraints } # match expected, internal routine that does the work # parameters like the "real" routines except they don't have "opts", # which is a possibly-empty list of switches for the regexp match attempt # The ! flag is used to indicate expected match failure (for REG_EXPECT, # which wants argument testing even in the event of failure). proc MatchExpected {opts testid flags re target args} { # if &, test as both BRE and ARE if {[string match *&* $flags]} { set f [string map {& {}} $flags] MatchExpected $opts "$testid ARE" ${f} $re $target {*}$args MatchExpected $opts "$testid BRE" ${f}b $re $target {*}$args return } set constraints [TestConstraints $flags] set f [TestFlags $flags] set infoflags [TestInfoFlags $flags] set ccmd [list testregexp -about {*}$f $re] set ecmd [list testregexp {*}$opts {*}$f $re $target] set nsub [expr {[llength $args] - 1}] |
︙ | ︙ | |||
248 249 250 251 252 253 254 | if {[string match *&* $flags]} { set f [string map {& {}} $flags] expectError "$testid ARE" ${f} $re $err expectError "$testid BRE" ${f}b $re $err return } | | < < < < < < > | < < < < < < | 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 | if {[string match *&* $flags]} { set f [string map {& {}} $flags] expectError "$testid ARE" ${f} $re $err expectError "$testid BRE" ${f}b $re $err return } set constraints [TestConstraints $flags] set cmd [list testregexp -about {*}[TestFlags $flags] $re] ::tcltest::test [TestNum $testid error] [TestDesc $testid error] \ -constraints $constraints -result [list 1 REG_$err] -body \ "list \[catch \{$cmd\}\] \[lindex \$::errorCode 1\]" } # match failure expected proc expectNomatch {testid flags re target args} { variable regBug # if &, test as both ARE and BRE if {[string match *&* $flags]} { set f [string map {& {}} $flags] expectNomatch "$testid ARE" ${f} $re $target {*}$args expectNomatch "$testid BRE" ${f}b $re $target {*}$args return } set constraints [TestConstraints $flags] set f [TestFlags $flags] set infoflags [TestInfoFlags $flags] set ccmd [list testregexp -about {*}$f $re] set nsub [expr {[llength $args] - 1}] if {$nsub == -1} { # didn't tell us number of subexps |
︙ | ︙ | |||
327 328 329 330 331 332 333 | proc knownBug {args} { variable regBug 1 uplevel \#0 $args set regBug 0 } } namespace import RETest::* | | | 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 | proc knownBug {args} { variable regBug 1 uplevel \#0 $args set regBug 0 } } namespace import RETest::* ######## the tests themselves ######## # support functions and preliminary misc. # This is sensitive to changes in message wording, but we really have to # test the code->message expansion at least once. ::tcltest::test reg-0.1 "regexp error reporting" { list [catch {regexp (*) ign} msg] $msg |
︙ | ︙ | |||
656 657 658 659 660 661 662 663 664 665 666 667 668 669 | expectNomatch 14.14 QRP "a(\[bc])\\1{3,4}" abbb expectMatch 14.15 RP {a([bc])\1*} abbb abbb b expectMatch 14.16 RP {a([bc])\1*} ab ab b expectMatch 14.17 RP {a([bc])(\1*)} ab ab b "" expectError 14.18 - {a((b)\1)} ESUBREG expectError 14.19 - {a(b)c\2} ESUBREG expectMatch 14.20 bR {a\(b*\)c\1} abbcbb abbcbb bb doing 15 "octal escapes vs back references" # initial zero is always octal expectMatch 15.1 MP "a\\010b" "a\bb" "a\bb" expectMatch 15.2 MP "a\\0070b" "a\0070b" "a\0070b" expectMatch 15.3 MP "a\\07b" "a\007b" "a\007b" | > > > | 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 | expectNomatch 14.14 QRP "a(\[bc])\\1{3,4}" abbb expectMatch 14.15 RP {a([bc])\1*} abbb abbb b expectMatch 14.16 RP {a([bc])\1*} ab ab b expectMatch 14.17 RP {a([bc])(\1*)} ab ab b "" expectError 14.18 - {a((b)\1)} ESUBREG expectError 14.19 - {a(b)c\2} ESUBREG expectMatch 14.20 bR {a\(b*\)c\1} abbcbb abbcbb bb expectMatch 14.21 RP {^([bc])\1*$} bbb bbb b expectMatch 14.22 RP {^([bc])\1*$} ccc ccc c knownBug expectNomatch 14.23 R {^([bc])\1*$} bcb doing 15 "octal escapes vs back references" # initial zero is always octal expectMatch 15.1 MP "a\\010b" "a\bb" "a\bb" expectMatch 15.2 MP "a\\0070b" "a\0070b" "a\0070b" expectMatch 15.3 MP "a\\07b" "a\007b" "a\007b" |
︙ | ︙ | |||
1065 1066 1067 1068 1069 1070 1071 | test reg-33.13 {Bug 1810264 - infinite loop} { regexp {($|^)*} {x} } 1 # Some environments have small default stack sizes. [Bug 1905562] test reg-33.14 {Bug 1810264 - super-expensive expression} nonPortable { regexp {(x{200}){200}$y} {x} } 0 | | > > > > | 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 | test reg-33.13 {Bug 1810264 - infinite loop} { regexp {($|^)*} {x} } 1 # Some environments have small default stack sizes. [Bug 1905562] test reg-33.14 {Bug 1810264 - super-expensive expression} nonPortable { regexp {(x{200}){200}$y} {x} } 0 # cleanup ::tcltest::cleanupTests return # Local Variables: # mode: tcl # End: |
Changes to tests/source.test.
︙ | ︙ | |||
103 104 105 106 107 108 109 110 111 112 113 114 115 116 | set sourcefile [makeFile {} _non_existent_] removeFile _non_existent_ } -body { list [catch {source $sourcefile} msg] $msg $::errorCode } -match listGlob -result [list 1 \ {couldn't read file "*_non_existent_": no such file or directory} \ {POSIX ENOENT {no such file or directory}}] test source-3.1 {return in middle of source file} -setup { set sourcefile [makeFile { set x new-x return allDone set y new-y } source.file] | > > > > > > > > > > > > > | 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 | set sourcefile [makeFile {} _non_existent_] removeFile _non_existent_ } -body { list [catch {source $sourcefile} msg] $msg $::errorCode } -match listGlob -result [list 1 \ {couldn't read file "*_non_existent_": no such file or directory} \ {POSIX ENOENT {no such file or directory}}] test source-2.7 {utf-8 with BOM} -setup { set sourcefile [makeFile {} source.file] } -body { set out [open $sourcefile w] fconfigure $out -encoding utf-8 puts $out "\ufeffset y new-y" close $out set y old-y source -encoding utf-8 $sourcefile return $y } -cleanup { removeFile $sourcefile } -result {new-y} test source-3.1 {return in middle of source file} -setup { set sourcefile [makeFile { set x new-x return allDone set y new-y } source.file] |
︙ | ︙ |
Changes to unix/tclUnixPort.h.
︙ | ︙ | |||
81 82 83 84 85 86 87 | # define TclOSlstat lstat #endif #include <sys/file.h> #ifdef HAVE_SYS_SELECT_H # include <sys/select.h> #endif | > | > | 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | # define TclOSlstat lstat #endif #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 |
︙ | ︙ |