Compare commits

..
Author SHA1 Message Date
andy 681f02daf1 Check in stash. This code probably does not compile as-is. Changes intended to address possible segfault on termination of search. 2017-04-15 15:15:59 +00:00
andy 154ca655c9 Add note to array documentation about the general uselessness of -exact matching. It exists because [array names] had it since check-in [634da00427] (8.4a1), which also added -regexp. 2016-12-25 00:39:48 +00:00
andy 7f81f792a1 Do not deallocate Tcl_ArraySearchStart()-initiated array searches when Tcl_ArraySearchPeek() or Tcl_ArraySearchNext() is called, only when Tcl_ArraySearchDone() is called. This avoids a crash should user code unconditionally call Tcl_ArraySearchDone() at the end of an array enumeration loop. This change does not affect array searches initiated by the Tcl script command [array startsearch]. 2016-12-25 00:23:21 +00:00
andy 21c60565b1 Update tests array-7.16 and array-7.17 and delete test array-7.18 now that bug [46a2410650] is fixed 2016-12-25 00:11:11 +00:00
andy 517a53c57c Merge array-search-unset 2016-12-25 00:04:33 +00:00
andy 5d444e0610 Reference ticket number in tests var-13.2 and var-13.3 2016-12-25 00:00:30 +00:00
andy cd9fecea9c Bug [46a2410650]: Create macro TclIsVarArraySearched to check if an array variable has an active search, and modify INST_UNSET_ARRAY to fall back on the slow unset method for array elements within an array being searched. The slow unset method involves a call to DeleteSearches() which stops all active searches. 2016-12-24 23:58:29 +00:00
andy 17d343aa62 Add test var-13.3 which is a more serious version of test var-13.2. var-13.3 is a SIGSEGV until we fix it. 2016-12-24 23:25:40 +00:00
andy f857e512dd Merge trunk. Test var-13.2 now fails due to [af5c35971a]. 2016-12-24 23:02:02 +00:00
andy 628009fb64 Add test var-13.2 to check that unsetting an array element terminates an array search. This behavior was broken by check-in [af5c35971a]. 2016-12-24 23:00:56 +00:00
jan.nijtmans b76f99d88c Update -DMSTATS functionality, for possible total memory sizes > 2Gb. One more place where use of size_t can increase range. 2016-12-23 15:43:42 +00:00
jan.nijtmans f256ed021d Eliminate the internal macro/function TclNewIntObj: In all cases TclNewLongObj is just as good. 2016-12-23 08:27:02 +00:00
andy f8e15b9d2c Correct typo, credit Brad Lanam for report 2016-12-21 23:23:01 +00:00
jan.nijtmans cbfc7befb0 Make sure that Tcl_GetIntFromObj/Tcl_GetWideIntFromObj/Tcl_GetDoubleFromObj don't set an error in the interp during LinkTraceProc(): The error is supposed to be reported as return value of this function, not the interp. 2016-12-21 14:03:15 +00:00
jan.nijtmans e1e78edbbc Make sure that Tcl_GetIntFromObj/Tcl_GetWideIntFromObj/Tcl_GetDoubleFromObj don't set an error in the interp during LinkTraceProc(): The error is supposed to be reported as return value of this function, not the interp. 2016-12-21 14:01:26 +00:00
jan.nijtmans 97834be313 Make sure that Tcl_GetIntFromObj/Tcl_GetWideIntFromObj/Tcl_GetDoubleFromObj don't set an error in the interp during LinkTraceProc(): The error is supposed to be reported as return value of this function, not the interp. 2016-12-21 13:59:26 +00:00
jan.nijtmans dd3012b0b5 Document that from the "exact" parameter of Tcl_InitStubs(), only bit 0 has meaning. 2016-12-20 10:32:37 +00:00
jan.nijtmans 0dd0678546 more internal use of size_t in stead of int. 2016-12-20 09:46:14 +00:00
jan.nijtmans 3d1095d348 Record the fact that all stub-enabled extensions work in Tcl 8.5+, no 8.6 (or 9.0) features are needed. (Differences between 8.x and 9.0 are handled by a different stub magic value) 2016-12-20 09:36:50 +00:00
andy 834146d5a7 Implement deferring search structure deallocation until the next search function is called. Determination of immediate versus deferred deallocation is done using a new search flags field. 2016-12-20 05:45:34 +00:00
andy 1a31487c96 Merge trunk 2016-12-20 05:12:13 +00:00
andy 83316ca933 Rework array search C API to invoke array traces and report errors. Still need to update documentation accordingly and to add tests demonstrating correct execution of array traces. Also need to handle early search termination due to array elements being added or removed. 2016-12-20 05:08:07 +00:00
jan.nijtmans 972b65b569 Some more internal use of size_t in stead of int. No functional change. 2016-12-16 16:14:57 +00:00
jan.nijtmans b549e19961 Add back testcase winFile-4.10. This test passes anyway, even though it appeared to be Windows 2000 only. 2016-12-15 15:18:21 +00:00
jan.nijtmans 05a9b0d75c Add "file join $grandParentDir tcl8.? library" as possible path for a valid init.tcl.
Some simplifications in use of test restrictions.
2016-12-15 15:07:56 +00:00
andy b69d556f2e Add more array search tests per Brad Lanam. These tests should fail because adding or removing elements should terminate the search, but the tests are not failing in the right way. 2016-12-15 01:01:48 +00:00
jan.nijtmans 6edec95607 Implement all possible TCL_LL_MODIFIER formats in Tcl_ObjPrintf(), can be "ll", "I64" and "L", whatever the platform defines for long long integer. With test-cases. 2016-12-14 15:03:13 +00:00
jan.nijtmans b2c94acd0b Implement all possible TCL_LL_MODIFIER formats in Tcl_ObjPrintf(), can be "ll", "I64" and "L", whatever the platform defines for long long integer. With test-cases. 2016-12-14 14:14:17 +00:00
andy 6cda9a3dd0 Rework array size increase/decrease tests to avoid dummy list element 2016-12-13 19:21:16 +00:00
andy bc6a6d8093 Update ArrayArgs() comments again 2016-12-12 04:53:39 +00:00
andy 11e45a8e8a Update ArrayArgs() comments 2016-12-12 04:52:49 +00:00
andy d207738ea6 Finish implementing array search tests 2016-12-11 05:00:40 +00:00
andy 8be00e1a2d Remove invalid panic. There is an odd case in which exact matching does take a trip through the ArrayNext() search loop despite the fact that ArrayFirst() finds the exact element and sets the search to the end of the hash table. If exact matching is used in combination with a command that stuffs the found element back into the queue (e.g. [array anymore]), ArrayNext() will have to "find" the element again. It's the very next entry, but nevertheless it needs to confirm. 2016-12-11 04:57:38 +00:00
andy dda69c2bd3 Continue array search tests, array-7.12 panics 2016-12-11 04:29:18 +00:00
andy 8f3cc52061 Use setup feature in test array-5.4 2016-12-11 04:08:02 +00:00
andy 7429c43446 Add first array search test 2016-12-11 04:03:35 +00:00
andy 04a12eac75 Adjust test array-5.4 to not use [array set] 2016-12-11 03:05:29 +00:00
andy c1c0c583a8 Reorganize array tests 2016-12-11 03:04:25 +00:00
andy 2e808506d0 Add [array statistics] tests 2016-12-11 02:38:50 +00:00
andy ce63d3dd71 Add [array names] tests 2016-12-10 22:45:51 +00:00
andy c51e8269ab Add [array get] tests 2016-12-10 22:43:58 +00:00
andy dd989ca6aa Add [array exists] tests 2016-12-10 22:42:18 +00:00
andy beb833ddfb Plan remainder of test suite 2016-12-10 22:37:05 +00:00
andy 7dc11bcdf6 Adjust comments 2016-12-10 22:32:12 +00:00
andy 6b7d38ac8a Rename $result to $resultPattern to reduce confusion 2016-12-10 22:16:29 +00:00
andy 1d958d0818 Fix spelling 2016-12-10 22:02:08 +00:00
andy a57f1df696 Add [array unset] tests 2016-12-10 22:01:21 +00:00
andy ac5ad5b7c1 Add first [array unset] test 2016-12-10 21:13:14 +00:00
andy ed9b488466 Add [array size] tests 2016-12-10 21:11:52 +00:00
andy 01fd1c7404 Exchange setup and extra 2016-12-10 20:45:10 +00:00
andy 8c1885a481 Condense non-array error handling tests and incorporate non-array successful result tests 2016-12-10 20:42:31 +00:00
andy 9b015ba94c Add [array set] tests 2016-12-10 19:35:41 +00:00
andy c7b4e5a092 Add more failure cases to test suite, gonna have to do non-error cases one of these days 2016-12-03 00:42:19 +00:00
andy cb62b287a5 Rename [oxor] to [or] and [oxand] to [and], also [oxjoin] to [oxfordJoin] 2016-12-02 22:10:39 +00:00
andy c8f1b6377e Merge trunk 2016-12-02 21:18:39 +00:00
andy 0cd0bb6862 Avoid "warning: format '%llu' expects argument of type 'long long unsigned int', but argument 2 has type 'long unsigned int'" on platforms where TCL_WIDE_INT_IS_LONG. Warning introduced by check-in [e3ba334a42] which was merged to trunk by [eac13870dc]. This fix also was made by [418b169207] which has not yet been merged to trunk. 2016-12-02 21:08:15 +00:00
andy 8a552b0e0a Merge trunk 2016-12-02 21:00:11 +00:00
andy 550d30ff4a Experiment with wrapping [::tcltest::test] 2016-12-02 20:50:54 +00:00
dgp 0714cd9321 Added long comment explaining history and work in progress making bytearray
interfaces usable.
2016-12-02 18:18:59 +00:00
jan.nijtmans 6a1787475c implement "I64" format in Tcl_ObjPrintf as well. Still to be tested. 2016-12-02 15:52:09 +00:00
dgp e9d4e1005e Relocate the cmdEpoch bumps during command deletion so that command resolution
caching works properly in deletion callbacks (destructors!) and delete traces.
2016-12-02 15:39:31 +00:00
jan.nijtmans 74c17b45b2 Implement %ll (WideInt) handling for Tcl_ObjPrintf(). Use it in some places. (now without edit-error in tcl.h, thanks Don!) 2016-12-02 14:52:11 +00:00
dgp c4e63fa109 Repair what appears to be a stray edit error. This restores ability to
build on a TCL_WIDE_INT_IS_LONG platform, but leaves code in tclStringObj.c
raising compiler warnings.  Suspect things still need some reconciliation
in the TCL_WIDE_INT_IS_LONG scenario.
2016-12-02 14:17:40 +00:00
jan.nijtmans ef88cbd89e Implement %ll (WideInt) handling for Tcl_ObjPrintf(). Use it in some places.
Moved to feature branch temporarily.  Breaks build.
2016-12-02 13:50:29 +00:00
dgp 674aeae3b0 Remove dup line. 2016-12-02 13:26:08 +00:00
andy 7c56b863cb Minor test tweaks, add test for nonexistent arrays 2016-12-01 22:32:22 +00:00
dgp 72c1f925db Reports from NSF that command epoch bumping isn't properly timed.
http://paste.tclers.tk/4030
Since the epoch should bump to indicate when Tcl_FindCommand() would
produce a different result from the cached value, the bump ought to be
connected to the state change that would have that effect.  This checkin
appears to be the more correct answer, and it makes the Delete path get
into agreement with the Rename path.  Review would be good.
2016-12-01 20:13:10 +00:00
andy 6a3ecb5e40 Annoyed with tabs, switching to spaces 2016-12-01 18:43:52 +00:00
andy b0b36759a5 Continue implementation of test suite 2016-12-01 18:43:05 +00:00
andy d0c0f228e0 Clarify detection of regular expression errors. While this may seem bogus and inconsistent, it is actually the undocumented baseline behavior of [array names -regexp **]. 2016-12-01 17:28:25 +00:00
dgp e42f5d61b2 So long as we register only one, we can have multiple Tcl_ObjTypes with
the same name.  This smooths migration. See obj-2.2 and tclsqlite usage.
2016-12-01 17:25:40 +00:00
andy 77b96afba5 Implement [array names] in terms of Tcl_ArrayNames(), also make Tcl_ArrayNames() treat non-array like empty array for consistency with documentation, other functions, and baseline [array names] 2016-12-01 17:08:24 +00:00
dgp a8e3472731 Created a new "proper bytearray" Tcl_ObjType so we can use bytearrays
as bytearrays without all this fussing about over purity.
2016-12-01 13:20:47 +00:00
jan.nijtmans 95d020a657 compatability -> compatibility 2016-12-01 11:44:23 +00:00
jan.nijtmans 6d7abfd8a9 compatability -> compatibility 2016-12-01 11:42:07 +00:00
jan.nijtmans bbaecb023a compatability -> compatibility 2016-12-01 11:39:40 +00:00
andy 3f2cb54333 Correct tab stops 2016-12-01 01:49:03 +00:00
andy a396f84b31 Begin implementation of array test suite 2016-11-30 19:47:13 +00:00
andy d334401183 Document filter options to [array exists] 2016-11-30 19:35:25 +00:00
andy 6a0f0076bc Be more consistent in usage of italic text 2016-11-30 17:57:26 +00:00
andy 3a9990cb01 Minor documentation correction pointing out that Tcl_ArraySet allows the variable to not exist in which case it will create it 2016-11-30 17:53:15 +00:00
dgp c25e21b7bb Route all [string repeat] operations through a common implementation.
Code that to preserve bytearrays, eliminate unnecessary string rep
generation, increase efficiency, and encapsulate access to internal rep
details.
2016-11-30 03:08:24 +00:00
andy 42b47a6d64 Restore tests set-old-8.46 and set-old-10.2. Note: this is commit number 20000 2016-11-29 19:45:52 +00:00
andy 2c1225e7dd Merge trunk 2016-11-29 19:39:08 +00:00
andy 6cbc96a10d Add filtering capability to [array exists] and Tcl_ArrayExists() so that individual elements can be tested for. For example, [array exists arrayName *] is a higher-performance alternative to [array size arrayName] for testing if an array is non-empty since it doesn't fully enumerate the array and only checks if there is at least one matching element. 2016-11-29 19:29:16 +00:00
andy 5eb1f0c955 Add comments to tcl.h more clearly indicating which flag values are reserved to better avoid future collisions 2016-11-29 18:50:07 +00:00
dgp 3489a76210 Where feasible, convert concatenation panics into errors. 2016-11-29 18:46:41 +00:00
andy 28048d3791 Update [array] man page for new/expanded filter options 2016-11-29 18:46:34 +00:00
jan.nijtmans 357515037a Minor simplifications. Eliminate FUNCPRT from regexp engine. Fix compile-error (non-debug) in tclDictObj.c, from previous commit 2016-11-29 13:03:15 +00:00
jan.nijtmans a435d9e14b more internal use of size_t (in stead of int) 2016-11-29 11:10:10 +00:00
andy 128e222ada Man page tweak 2016-11-28 17:53:45 +00:00
andy 83ad62ad4d Double backslashes in man page 2016-11-28 16:47:43 +00:00
andy 990bb19ffd Add manual page for new array functions 2016-11-28 06:06:15 +00:00
andy 1d514c5f57 Fix set-old-8.35 2016-11-28 04:47:38 +00:00
andy 94cc1a4ddb Fix set-old-8.56 2016-11-28 04:31:32 +00:00
andy 1bf28f3806 Add Tcl_ArrayStatistics() 2016-11-28 04:21:58 +00:00
andy 80888b3fc9 Change Tcl_ArraySet() to always report errors without having to specify TCL_LEAVE_ERR_MSG 2016-11-28 02:35:33 +00:00
andy fbdfb60849 Remove most instances of TCL_LEAVE_ERR_MSG in favor of making Tcl_Array*() functions treat nonexistent and scalar variables as empty arrays and always reporting other kinds of errors, was very confusing having the absence of TCL_LEAVE_ERR_MSG only inhibiting variable lookup errors. Clean up documentation throughout. Merge ArraySize() into Tcl_ArraySize() and make ArraySizeCmd() use Tcl_ArraySize() directly now that the error handling policy is consistent. Rename *existsPtr to *intPtr for consistency with other public functions. Change Tcl_ArraySize() to use *intPtr to report the size rather than returning it. 2016-11-28 01:20:41 +00:00
andy 3fe79a32c6 Change TCL_MATCH_GLOB to avoid collision with the deprecated TCL_PARSE_PART1 flag 2016-11-27 20:37:19 +00:00
andy 2bf69fa2b7 Renumber and rearrange new Tcl_Array*() functions to have a somewhat more logical ordering 2016-11-26 20:03:13 +00:00
andy b353bc10cb Revert unintended change to Tcl_ZlibStreamInit() argument name 2016-11-26 07:39:31 +00:00
andy 45c7b5098e Implement Tcl_ArrayGet(), add -exact|-glob|-regexp options to [array get] 2016-11-26 07:30:58 +00:00
andy f67b7c4e94 Remove new test trace-41.1 since it is a duplicate of test var-18.1 2016-11-26 07:21:18 +00:00
andy 5c93cd4200 Remove optimization that runs afoul of test var-18.1 2016-11-26 07:19:59 +00:00
andy f3aab2af7c Update test for [array unset] mode option 2016-11-26 07:11:00 +00:00
andy fb45801148 Implement Tcl_ArrayExists() 2016-11-26 02:14:08 +00:00
andy cde090bbd2 Fold create argument to ArrayVar() into TCL_VAR_CREATE flags bit which only ArrayVar() understands. Implement Tcl_ArrayUnset(). Add a test case showing bug [2939073] which was fixed long ago but could have been disturbed by any refactoring done to [array unset]. [array unset] now has -exact|-glob|-regexp options to customize the match style. 2016-11-26 01:57:34 +00:00
andy a463dba6d5 Simplify function description comment 2016-11-25 18:24:02 +00:00
andy b03c2cad93 Merge CleanupVar() into TclCleanupVar(), no need for them to be separate 2016-11-25 18:11:59 +00:00
andy 8bbff6bc30 Rename dictObj to dictPtr for consistency with other public variable function arguments, even though I like dictObj better 2016-11-25 18:08:20 +00:00
andy 88b52cca59 Rename TclArraySet() to Tcl_ArraySet() and put in tcl.decls. Enhance ArrayVar() to support array creation, and update Tcl_ArraySet() to use it. 2016-11-25 18:05:49 +00:00
jan.nijtmans df537d0dfb Eliminate some macros that are no longer used/needed. 2016-11-25 11:47:54 +00:00
andy d738104aff Add Tcl_ArraySearchPeek() 2016-11-25 08:17:16 +00:00
andy dbb0afd2b0 Add filter options to more [array] subcommands, implement with a common function 2016-11-25 07:55:57 +00:00
andy 032df7c99f Merge trunk 2016-11-25 07:33:14 +00:00
andy 1000af34fa Allow [array names -regexp] to use backreferences. This capability was broken by [71270e9141]. See also bug [1366683]. 2016-11-25 07:31:46 +00:00
andy f1a0cd2e9d Add filtering options to [array size] command 2016-11-25 07:02:21 +00:00
andy b45f0bb10f Correct bug by splitting Tcl_ArrayNames() to high-level Tcl_ArrayNames() operating on a variable name and low-level ArrayNames() operating on a variable pointer so that the [array names] command can customize its handling of non-array variables 2016-11-25 06:27:43 +00:00
andy f81e77119d Implement Tcl_ArrayNames(), still have a bug to fix though 2016-11-25 05:53:55 +00:00
andy 91725a719a Implement various array functions in terms of ArrayVar() to avoid repetition of trace code, and restore TCL_LEAVE_ERR_MSG to accommodate the functions that need it 2016-11-25 05:11:23 +00:00
andy 8055d2fd9a Implement Tcl_ArraySearchDone() 2016-11-25 04:42:04 +00:00
andy 04a0e60983 Implement Tcl_ArraySearchNext() 2016-11-25 04:31:09 +00:00
andy da411794db Remove need for passing TCL_LEAVE_ERR_MSG to various array functions 2016-11-25 04:11:54 +00:00
andy c4ee3e6388 Correct test failures in set-old.test 2016-11-25 03:56:33 +00:00
andy 7fa35ac034 Split ArrayNext() into ArrayFirst() and ArrayNext(), and reimplement other array functions in terms of these two functions 2016-11-25 03:33:01 +00:00
andy d37425bc05 Remove spurious article in comments 2016-11-25 01:39:13 +00:00
andy 02e8249054 Rename LookupArrayVar() to ArrayVar(), add ArrayNext(), reimplement ArraySize() in terms of ArrayNext(), fix typo (recount -> refcount) 2016-11-25 01:36:27 +00:00
andy 6edd446f14 Improve comments, add interp to Tcl_ArraySearch so Tcl_ArraySearchNext() can report regular expression errors. Alternate approach would be giving Tcl_ArraySearchNext() an interp argument, but there is no need to send errors to a different interpreter than the one in which the search was created. 2016-11-24 22:51:15 +00:00
andy e7967fc2c8 Implement Tcl_ArraySearchStart() 2016-11-24 22:38:00 +00:00
andy 998d27f2c2 Simplify LookupArrayVar() interface 2016-11-24 22:24:51 +00:00
andy a60c64b7fc Fold VerifyArray() into LookupArrayVar(), begin adding filtering capabilities to array search 2016-11-24 22:06:43 +00:00
andy ee28e88470 Add exact/glob/regexp filter capability to new array size and enumeration functions. Change Tcl_ArrayNames() to append to a list-type Tcl_Obj to simplify memory management. Fix typo in name of Tcl_ArraySearchDone(). 2016-11-24 21:33:07 +00:00
andy f24a078b50 Improve comments a little 2016-11-24 20:12:09 +00:00
andy 74590c5ddc Merge trunk 2016-11-24 19:22:48 +00:00
andy 5e9f624428 Partially backout [ef4da65408] because AppendPrintfToObjVA() (used indirectly by [tcl::unsupported::disassemble]) does not yet support wide and bignum arguments. This fixes a SIGSEGV in compile.test and makes [disassemble] work again. 2016-11-24 19:21:12 +00:00
andy 3f12ad7691 Correct reporting of trace errors in [array size] 2016-11-24 18:49:32 +00:00
andy 1aea568d6e Correct sense of scalar variable detection 2016-11-24 18:46:15 +00:00
andy e2e7983c0e Get rid of now-unnecessary varPtr2 variable, add stubbed-out (pun unintentional) implementations of new Tcl_Array*() functions 2016-11-24 18:42:04 +00:00
andy 4725a30a34 Reorganize code into separate LookupArrayVar() and ArraySize() functions so that [array size] can separately detect and report array trace errors 2016-11-24 18:36:22 +00:00
andy b663b683d5 Update stubs init 2016-11-24 18:35:09 +00:00
andy 2085fc1daf Rename part1Ptr arguments to varNamePtr 2016-11-24 18:34:50 +00:00
jan.nijtmans c2f9601344 Make compileEpoch "unsigned int", and start counting at 1. 2016-11-24 13:33:32 +00:00
jan.nijtmans c8d9ab8790 typos 2016-11-24 10:26:28 +00:00
dkf f096df2170 Corrections to misleading comments. 2016-11-22 15:04:28 +00:00
andy 896caee843 [array size] should 0 if argument does not name an array. TODO: Distinguish between existence errors and trace errors. Hide the former and report the latter for compatibility with [array size]. 2016-11-21 18:25:04 +00:00
andy 8292447454 Initial commit of new C API for array enumeration. TIP forthcoming. Work far from complete, only Tcl_ArraySize() implemented as of yet. See [http://wiki.tcl.tk/48264] for more information. 2016-11-21 13:12:11 +00:00
jan.nijtmans 990d6fd6f1 More internal use of size_t in stead of int. 2016-11-21 10:15:24 +00:00
dkf da608f8c61 Minor: fix the indentation of comments. 2016-11-18 15:51:27 +00:00
jan.nijtmans c58016090f Fix mp_cnt_lsb() signature, so it matches the signature used in Tcl 2016-11-18 10:53:45 +00:00
jan.nijtmans e7f46501e2 Fix mp_cnt_lsb() signature, so it matches the signature used in Tcl. Add two missing "static" keywords in tclUnixNotfy.c. Remove some more files in libtommath directory which are not useful for Tcl. 2016-11-18 10:23:24 +00:00
jan.nijtmans 13a2801fd7 Fix [e6f27aa56fa51bfc1752ce768bf0d301c60bfd2c|e6f27aa56f]: Update libtommath to 1.0 2016-11-18 09:50:37 +00:00
andy 995aaf8bfd Remove extra space in documentation for [file stat] 2016-11-18 03:34:32 +00:00
jan.nijtmans d7da846591 Fix libtommath's mp_radix_size() function such that it returns 2 for single-digit numbers. Add testcases for mp_radix_size() and mp_iseven(). Undo useless change in bn_mp_add_d.c (bring back libtommath's version). 2016-11-17 16:26:50 +00:00
jan.nijtmans 2287394ba1 Fix libtommath's mp_radix_size() function such that it returns 2 for single-digit numbers. Add testcases for mp_radix_size() and mp_iseven(). Undo useless change in bn_mp_add_d.c (bring back libtommath's version). 2016-11-17 16:24:37 +00:00
jan.nijtmans 8d1caeae4d Fix libtommath's mp_radix_size() function such that it returns 2 for single-digit numbers. Add testcases for mp_radix_size() and mp_iseven(). Undo useless change in bn_mp_add_d.c (bring back libtommath's version). 2016-11-17 16:12:14 +00:00
jan.nijtmans 1be35f340f Restore bn_mp_radix_size.c to exact copy of libtommath-1.0 version: Since the radix_size of "9" should return 2, not 3. Add test-case to prove that. 2016-11-17 15:30:32 +00:00
jan.nijtmans ca471eb748 Restore bn_mp_add_d.c to exact copy of libtommath-1.0 version: Since the mp_clamp() function already restores the sign of it's argument to positive if c->used ==0, it is not necessary to do that twice. Therefore, the original version of the code is correct. 2016-11-17 13:18:17 +00:00
jan.nijtmans 538960215f Add test-case for mp_iseven(). If mp_iseven(0) ever returns 0, we will be warned that we are using the wrong mp_iseven() function. 2016-11-17 11:38:13 +00:00
jan.nijtmans 1375c96d2f Bring in fix for mp_iseven().... almost missed that .... This should be given a dedicated test-case. Now everything taken from "gahr-ticket-e6f27aa56f" branch is handled. 2016-11-17 11:03:39 +00:00
jan.nijtmans 8f07b4a94c Merge trunk. Re-generate tclTomMath.h. Use faster exponentiation-function from libtommath 1.0 (in tclExecute.c). 2016-11-17 10:46:09 +00:00
jan.nijtmans 2edb1dcd83 Remove subdirectories of "libtommath", and various individual related files, not taking any part in the Tcl build. Makes the Tcl distribution smaller without sacrificing anything.
And remove the TCL_TOMMATH define, which was never used for anything.
2016-11-17 09:33:08 +00:00
jan.nijtmans 37f6932c0a Remove subdirectories of "libtommath", and various individual related files, not taking any part in the Tcl build. Makes the Tcl distribution smaller without sacrificing anything. 2016-11-17 09:24:05 +00:00
jan.nijtmans 9e7c15f53e merge trunk 2016-11-16 15:59:40 +00:00
jan.nijtmans f850132635 (experimental) Upgrade to libtommath 1.0 (actually by merging all changes between libtommath 0.42.0 and 1.0). Still to be tested thourougly, before doing anything with it. 2016-11-16 15:22:26 +00:00
jan.nijtmans f10147dbfe import libtommath 1.0 2016-11-16 13:04:26 +00:00
jan.nijtmans 0dd529776d Use more "size_t" in stead of "int" internall. Also eliminate a lot of type-casts which are not necessary any more. 2016-11-16 10:55:40 +00:00
dkf ea1423a2ab See Itcl Bug [1b28657c0e]. Make methodNameType honor the Tcl_ObjType contract. 2016-11-15 13:33:35 +00:00
dkf 5b71bf5ea8 See Itcl Bug [1b28657c0e]. Make methodNameType honor the Tcl_ObjType contract. 2016-11-15 13:32:51 +00:00
dkf a5538d84c4 Slightly more efficient version as this is Hot Path code. 2016-11-15 13:31:02 +00:00
dgp addd1694e0 See Itcl Bug [1b28657c0e]. The methodNameType fails to honor the Tcl_ObjType
contract. Need dkf review on suitability of this fix.
2016-11-14 17:01:37 +00:00
jan.nijtmans 7cdd87e4f1 Merge core-8-6-branch 2016-11-14 14:26:38 +00:00
jan.nijtmans 0b9cb76206 Better fix for the usability of TCL_NO_DEPRECATED on MacOSX 2016-11-14 14:25:13 +00:00
jan.nijtmans 99fd1215e2 Better fix for the usability of TCL_NO_DEPRECATED on MacOSX. 2016-11-14 14:20:13 +00:00
venkat 6e380ef6e9 Merge tzdata2016i from IETF 2016-11-12 11:19:52 +00:00
venkat ae6e14e33c Merge tzdata2016i from IETF 2016-11-12 11:19:26 +00:00
venkat bc5ffbb3b2 Update to tzdata2016i from IETF 2016-11-12 11:18:31 +00:00
jan.nijtmans 92b58040dd Fix harmless gcc warning message: using "unsigned" doesn't serve any purpose, actually. 2016-11-11 14:53:58 +00:00
jan.nijtmans fcc907b2a6 Fix [79614fb8b61983ac8ef30ea8752c310465798fc7|79614fb8b6]: "glob", "encoding system" and encoding-free filesystems 2016-11-11 10:58:54 +00:00
jan.nijtmans 25ba428ff9 Fix [79614fb8b61983ac8ef30ea8752c310465798fc7|79614fb8b6]: "glob", "encoding system" and encoding-free filesystems 2016-11-11 10:55:45 +00:00
jan.nijtmans 2020e9be61 Fix [79614fb8b61983ac8ef30ea8752c310465798fc7|79614fb8b6]: "glob", "encoding system" and encoding-free filesystems 2016-11-11 10:53:10 +00:00
jan.nijtmans 6497c6c6ee On OSX, there is a conflict with the "define panic" and definitions in "mach.h". 2016-11-10 14:21:41 +00:00
jan.nijtmans 31647bcceb On OSX, there is a conflict with the "define panic" and definitions in "mach.h". 2016-11-10 14:19:28 +00:00
dgp 3555752d45 Route all [string last] operations through a common implementation. 2016-11-08 02:56:11 +00:00
dgp 37fb43ad48 Purge disabled code. 2016-11-07 20:18:30 +00:00
dgp cd2858d1d0 Refactor to channel all [string first] functions through a single implementation. 2016-11-07 20:11:11 +00:00
dgp 790b302275 Optimize case of all single-byte chars. 2016-11-07 20:04:22 +00:00
dgp dc11ffbbdb Consolidate the "find empty string" cases. 2016-11-07 19:41:15 +00:00
dgp 1571dc01bb Implement direct eval [string first] with the refactored engine. 2016-11-07 19:28:25 +00:00
dgp 4dc2505e43 First draft refactoring the [string first] functionality. 2016-11-04 21:29:30 +00:00
dgp 18a2ebc51d [824752f10e] Use LIST_MAX instead of INT_MAX for unknown number of elements to the end of the list. 2016-11-04 14:56:19 +00:00
dgp da3723c942 [8245752f10e] Use LIST_MAX instead of INT_MAX for unknown number of elements
to the end of the list.
2016-11-04 14:54:38 +00:00
dgp 27ef344b9c merge mark 2016-11-04 14:49:22 +00:00
dgp 885ced5608 [824752f10e] More robust, portable check for integer overflow. 2016-11-04 14:48:36 +00:00
dgp b1fe66323b close fork 2016-11-04 14:42:14 +00:00
dgp a188ceee21 [824752f10e] More robust, portable check for integer overflow. 2016-11-04 14:40:54 +00:00
dgp eb87ed60f6 close fork 2016-11-04 14:39:00 +00:00
dgp bc94a394c9 [824752f10e] More robust, portable check for integer overflow. 2016-11-04 14:37:50 +00:00
gahr 46d871617f merge core-8-5-branch ([824752f10e] Avoid calling Tcl_SetObjResult if interp is NULL) 2016-11-04 14:24:42 +00:00
gahr d654ce6429 merge core-8-5-branch ([824752f10e] Avoid calling Tcl_SetObjResult if interp is NULL) 2016-11-04 14:23:43 +00:00
gahr 452f14ebb5 [824752f10e] Avoid calling Tcl_SetObjResult if interp is NULL 2016-11-04 14:21:04 +00:00
jan.nijtmans 0a7d5ef6ed Fix the generated copyright sections in the HTML help file 2016-11-04 11:51:22 +00:00
jan.nijtmans f785a01764 Fix the generated copyright sections in the HTML help file. 2016-11-04 11:50:22 +00:00
jan.nijtmans 274f081025 Make packages msgcat and tcltest work unmodified in "novem". Make more test-cases work unmodified in "novem". 2016-11-04 11:38:09 +00:00
jan.nijtmans 76ed3d5b55 Make packages msgcat and tcltest work unmodified in "novem". 2016-11-04 11:32:44 +00:00
jan.nijtmans fba10e8615 merge core-8-6-branch (http package version update) 2016-11-02 12:45:47 +00:00
jan.nijtmans 1f0c1b800d Update http version number to 2.8.10, due to [838e99a76d] 2016-11-02 12:44:32 +00:00
jan.nijtmans a7e97de50a Update http version number to 2.7.14, due to [838e99a76d] 2016-11-02 12:41:04 +00:00
Joe Mistachkin ea11870f5b Fix the generated copyright sections in the HTML help file. 2016-11-02 01:42:49 +00:00
dgp 95b511bac2 Refactor to channel all [string cat] functions through a single implementation. 2016-11-01 16:18:08 +00:00
dgp 17e1ea228c Replace indexing with pointer increments. 2016-11-01 15:42:50 +00:00
dgp 53abdcc518 Trim away obsolete code. 2016-11-01 15:12:07 +00:00
dgp d963b1acb7 Expand all the cases of the [string cat] engine. 2016-11-01 15:07:30 +00:00
dgp 04432d4dd1 Reduce copies in the pure binary implementation of [string cat]. 2016-10-31 18:10:21 +00:00
dgp 3e4f5907b6 Complete the "pure binary" implementation of the [string cat] engine. 2016-10-31 16:15:16 +00:00
dgp 4a159c5199 merge trunk 2016-10-31 14:18:03 +00:00
dgp b53cf6d38c Coverage tests for INST_STR_CONCAT1 byterarray ops. 2016-10-31 14:17:31 +00:00
dkf 779b8dad76 [253ba6e818] Improved description of [variable] behaviour. 2016-10-30 16:52:50 +00:00
dkf cd428c1a44 [253ba6e818] Improved description of [variable] behaviour. 2016-10-30 16:16:29 +00:00
dkf 16dbe3f5a2 [1ae12987cb] Ensure that deleting the [history] command deletes its storage. 2016-10-30 08:31:21 +00:00
dkf 7b989f0312 [1ae12987cb] Ensure that deleting the [history] command deletes its storage. 2016-10-30 08:22:13 +00:00
dkf 994e1d8062 One more place where the internal API change can be used easily. 2016-10-30 05:07:47 +00:00
dkf de8e3be492 [b26e38a3e4] Ensure that compressing streams manage buffers correctly in all cases. 2016-10-30 05:05:46 +00:00
dkf d44a63b65b [b26e38a3e4] Ensure that compressing streams manage buffers correctly in all cases. 2016-10-30 05:04:54 +00:00
dkf 423d995e0d Fix the bug. Make use of zlib API in this area more like a Tcl API with wrapper function. 2016-10-30 05:02:46 +00:00
dkf 5c37d95180 Added test for bug 2016-10-29 21:03:25 +00:00
dgp 970922295a WIP 2016-10-28 20:33:55 +00:00
dgp 31690ce7fb revise [dict append] to make use of common [string cat] engine. 2016-10-28 16:55:44 +00:00
dgp 630d4b9211 merge trunk 2016-10-28 15:47:07 +00:00
dgp 7faf4f27a4 Add optimization to [dict append]. 2016-10-28 15:46:49 +00:00
dgp dd1c28a788 When appropriate, implement [join] with the common [string cat] engine. 2016-10-28 14:59:27 +00:00
dgp afd6d5649f Add obvious optimizations to [join] implementation. 2016-10-28 14:45:54 +00:00
dgp e9d7b07476 merge trunk 2016-10-28 14:28:40 +00:00
dgp b8ffbb14c4 Add warning commentary making important assumptions explicit. 2016-10-28 14:27:59 +00:00
dgp 39dbbd57af Add warning commentary making important assumptions explicit. 2016-10-28 14:26:18 +00:00
dgp bbfc83c86f Add warning commentary making important assumptions explicit. 2016-10-28 14:23:25 +00:00
dgp d31beb3e7f merge trunk 2016-10-28 14:06:36 +00:00
dgp aa3b157338 Add obvious optimization to Tcl_GetCharLength(). 2016-10-28 14:06:15 +00:00
dgp bf27b64405 Convert INST_STR_CONCAT1 to the common string cat implementation. 2016-10-27 20:06:36 +00:00
dgp 76b6b03be7 Start bringing all string cat operations into one place so it can be coded
correctly one time instead of badly multiple times.
2016-10-27 19:39:49 +00:00
venkat c205f272f7 Merge timezone data tzdata2016h 2016-10-26 08:04:36 +00:00
venkat 0551ecffd6 Merge timezone data tzdata2016h 2016-10-26 08:04:10 +00:00
venkat 13967f965d Update timezone data to tzdata2016h from IETF 2016-10-26 08:03:17 +00:00
dgp 79ff282b02 merge 8.6 2016-10-21 13:12:16 +00:00
dgp 9afdf28497 Repair recently opened memleak. 2016-10-20 20:02:19 +00:00
dgp bfae5bf492 EVIL HACKs are bad. Unnecessary ones are intolerable. Bad tests cause trouble. 2016-10-20 17:54:47 +00:00
dgp 925bd5794e Use memcmp where possible. 2016-10-18 19:16:35 +00:00
dgp ae54e070a1 [eb6b68c1a9] Simple fix for [string replace] error demonstrated by new test. 2016-10-14 19:29:52 +00:00
dgp 8b894ab295 [eb6b68c1a9] Simple fix for [string replace] error demonstrated by new test. 2016-10-14 19:28:46 +00:00
dgp e35292f314 Merge INST_STR_REPLACE fixes and improvements. 2016-10-13 16:56:23 +00:00
dgp 7f0e6652c7 Another streamline. 2016-10-13 16:50:06 +00:00
dgp 7634bdaef2 Stop invading the String internals to work around a bug. Fix it instead. 2016-10-13 16:43:05 +00:00
dgp 9cb330963b Streamline the substring copying case of [string replace] bytecode execution. 2016-10-13 15:37:45 +00:00
dgp 4dc1a8a588 merge TclParseNumber fixes 2016-10-12 13:47:32 +00:00
dgp 66f257a588 [be003d570f] TclParseNumber() failed to fully implement TCL_PARSE_BINARY_ONLY. 2016-10-12 13:46:14 +00:00
dgp 36825d23b9 [be003d570f] TclParseNumber() failed to fully implement TCL_PARSE_OCTAL_ONLY. 2016-10-12 13:42:40 +00:00
dgp 326e0a8fdf Add a test too. 2016-10-12 13:38:28 +00:00
dgp 29fdaa6dcd [be003d570f] TclParseNumber() failed to fully implement TCL_PARSE_OCTAL_ONLY. 2016-10-12 13:31:07 +00:00
dkf ae0ad313fd [74bc0e44f5] Doc tweak. 2016-10-12 09:58:12 +00:00
dkf ec64cc0418 [74bc0e44f5] Doc tweak. 2016-10-12 09:57:49 +00:00
dkf c482675d84 [74bc0e44f5] Doc tweak. 2016-10-12 09:57:15 +00:00
jan.nijtmans 7dd13b72b6 Fix [3cc1d91345]: duplicate calls to TclpFreeAllocCache() on thread exists 2016-10-11 21:52:57 +00:00
jan.nijtmans 54c0881e9d Fix [3cc1d91345]: duplicate calls to TclpFreeAllocCache() on thread exists 2016-10-11 21:43:44 +00:00
jan.nijtmans d81daf76bd Fix [3cc1d91345]: duplicate calls to TclpFreeAllocCache() on thread exists 2016-10-11 21:35:27 +00:00
dkf 11e9b6a9a5 [62b36e326c] Noted edge case in behaviour of [concat] with empty arguments. 2016-10-09 16:02:38 +00:00
dkf 8fe7f3fcdf [62b36e326c] Noted edge case in behaviour of [concat] with empty arguments. 2016-10-09 16:02:16 +00:00
dkf f3e9f9caa3 [62b36e326c] Noted edge case in behaviour of [concat] with empty arguments. 2016-10-09 16:01:53 +00:00
dkf 28d5ff4eb5 [7114ac6141] Improve testing and docs of Tcl_GetInt and Tcl_GetDouble. No behaviour change. 2016-10-09 15:22:20 +00:00
dkf 71c2d1a883 [7114ac6141] Improve testing and docs of Tcl_GetInt and Tcl_GetDouble. No behaviour change. 2016-10-09 15:21:26 +00:00
dkf c8597887e4 Be more accurate about scan's %i 2016-10-09 12:03:30 +00:00
ferrieux 05009534ee Be more accurate about scan's %i 2016-10-09 10:35:24 +00:00
dkf f50a4eed54 [74bc0e44f5] Document result of [http::unregister]. 2016-10-08 17:10:40 +00:00
dkf 90813dfce8 [74bc0e44f5] Document result of [http::unregister]. 2016-10-08 17:10:21 +00:00
dkf a16868a54c [74bc0e44f5] Document result of [http::unregister]. 2016-10-08 17:10:02 +00:00
dkf c4eac3e8eb [838e99a76d] Ensure that encodings are handled with application/xml and friends. 2016-10-08 16:41:51 +00:00
dkf 7b78869343 [838e99a76d] Ensure that encodings are handled with application/xml and friends. 2016-10-08 16:40:35 +00:00
dkf ab8a39e6b9 [838e99a76d] Ensure that encodings are handled with application/xml and friends. 2016-10-08 16:38:42 +00:00
dgp 870f61c05d Update [string map] tests to get illustration of need for pure dict
restriction up to date with ordered dicts.
2016-10-07 18:52:57 +00:00
pooryorick 6585306973 Fix typos in expr documentation. 2016-10-05 04:53:49 +00:00
pooryorick b1d510f1db Rewrite expr documentation. Among other things, fixes [ef5373e6fa0617ee]. 2016-10-05 00:05:55 +00:00
dkf 111f52e7ed [4d5ae7d88a] Stop crashes with asynchronous connects to hosts without addresses. 2016-10-04 19:12:33 +00:00
dkf 6548fc4ad1 [4d5ae7d88a] Stop crashes with asynchronous connects to hosts without addresses. 2016-10-04 19:11:07 +00:00
max a629b0ba31 When opening a server socket on an ephemeral port, make sure that the
port number that gets picked for IPv4 is also available on IPv6. If
not, start all over for up to ten times to find a port number that is
available on both protocols.
2016-10-04 13:31:49 +00:00
pooryorick 8c066a970f Fix documentation of [expr] operators, replacing "divisor" with "dividend" 2016-10-03 16:49:58 +00:00
jan.nijtmans 29b9de871c (cherry-pick): Fix [2bf561854c55a], interp alias to command whose name is the empty string. 2016-10-03 14:53:32 +00:00
pooryorick a9dbadf46a Fix [2bf561854c55a], interp alias to command whose name is the empty string. 2016-10-03 01:10:16 +00:00
venkat 02e79b9ec1 Merge tzdata2016g from ietf.org 2016-10-02 19:26:30 +00:00
venkat 5aa514f49a Merge tzdata2016g from ietf.org 2016-10-02 19:25:58 +00:00
venkat 2bc8d915a2 Update tzdata to 2016g from ietf.org 2016-10-02 19:24:52 +00:00
gahr c4f7e08fc6 [4d5ae7d88a] Restore default-to-error logic in TcpConnect 2016-09-27 20:06:49 +00:00
jan.nijtmans 008c7038cb merge core-8-6-branch 2016-09-26 09:10:35 +00:00
jan.nijtmans dfb2a3f2e2 Fix the 'htmlhelp' target so that it compiles cleanly and includes all the appropriate HTML files.
Permit static linking to the MSVCRT as a stand-alone option. 
Patch by Joe Mistachkin.
2016-09-26 09:08:13 +00:00
jan.nijtmans 8d3c0c2e81 Merge core-8-6-branch. Add more comments to tclLiteral.c, contributed by mr_calvin 2016-09-21 09:28:39 +00:00
jan.nijtmans e7e4c74b7f merge core-8-6-branch 2016-09-16 09:09:25 +00:00
dgp db811061d4 Revert b98ee56376. The "bug" fixed was documented behavior. 2016-09-09 12:36:53 +00:00
gahr 63a316c43b Remove unnecessary use of fpsetround. See https://bugs.freebsd.org/212512 2016-09-09 07:28:45 +00:00
dgp 3da8f74e75 [7f02ff1efa] Fix scope for var unset traces when procs return.
*** POTENTIAL INCOMPATIBILITY ***
2016-09-08 02:38:39 +00:00
dgp 3833c42f54 New test trace-18.5 for the bug. Updated trace-18.1 which was tuned to it. 2016-09-08 02:34:37 +00:00
dgp 2bfb7b96c0 Attempt to fix [7f02ff1efa]. Make trace-18.1 fail. Suspect test is an
experiment that preserves the bug.
2016-09-07 18:31:58 +00:00
dgp 35141afcc9 [4dbdd9af14] Plug mem leak when var unset trace re-creates namespace var. Thanks mr_calvin for report and fix. 2016-09-07 18:09:30 +00:00
jan.nijtmans 4ef0c69aaa Fix [d4e7780ca1681cd095dbd81fe264feff75c988f7|d4e7780ca1]: "global" cmd literal sharing vs. per-interp resolvers 2016-09-07 13:34:41 +00:00
dkf ab18c108f7 Fixed bug in pushed transforms with full internal buffers not writing out. 2016-09-06 10:46:49 +00:00
jan.nijtmans c4b6cab579 merge core-8-6-branch 2016-09-05 13:56:15 +00:00
jan.nijtmans 5b7e79f851 Don't ever allow UTF-8 sequences of more than 4 characters to be generated or parsed, even when TCL_UTF_MAX>4: According to current Unicode standard, a byte string of >4 characters can never form a single UTF-8 character.
And a few minor micro-optimizations related to UTF-8 handling.
2016-08-30 13:07:10 +00:00
dgp 0cce018c67 Merge dup-removal into search loop so we avoid pre-processing efforts on data that are never used. Contributed patch from Brian Griffin. 2016-08-26 13:49:07 +00:00
dgp a134b03eda merge mark 2016-07-27 18:56:20 +00:00
dkf b37c60fe43 [db0a5f6417] Make a few tests resilient to differences in semantics of pipes between OSs. 2016-07-26 10:09:06 +00:00
dkf d4eb48d90f [6a19dedc2e] "Clarified" what the units are that [chan copy] uses for -size and that synchronous copying returns. 2016-07-24 17:58:13 +00:00
dgp 0050652afb Stop internals intrusion into lists. 2016-07-20 20:39:16 +00:00
dgp 4704b442fb Streamline TclObjLookupVarEx 2016-07-20 17:39:04 +00:00
dgp 5b8d20e6de Use strchr() to parse array variable syntax. 2016-07-20 16:32:16 +00:00
dgp 2151838b5b Use the new private flag INDEX_TEMP_TABLE in testing command too. 2016-07-20 15:43:08 +00:00
venkat ee54cd02de Merge tzdata 2016f from ietf.org 2016-07-20 03:05:57 +00:00
dgp a8f05c5339 Factor out common prologue. 2016-07-19 20:40:27 +00:00
dgp e26431e0f3 merge 8.6 2016-07-19 19:52:59 +00:00
dgp 23a34a26fe "array search" is no longer a registered Tcl_ObjType. 2016-07-19 19:33:35 +00:00
dgp 3cd3541039 [0363f0146c] Fix [array startsearch] id handling to support var name variations 2016-07-19 19:31:28 +00:00
dgp 87a97e0609 [104f2885bb] Rework the "chan" Tcl_ObjType to properly validate cached channel name lookups.
Also merge backlog of test suite & doc improvements.
2016-07-18 16:50:22 +00:00
dgp 0cf3369f9f Remove unmaintained disabled speculative code.
Such things are for branches and history.
2016-07-15 14:20:34 +00:00
dgp 8f28138f6e Factor the cmdName intrep setting code into common utility routine. 2016-07-15 14:19:07 +00:00
dgp c0d0df8550 Stop using the tclCmdNameType to store failed command lookups. If we don't
find a command, there's nothing to store, so better not to shimmer at all.
2016-07-15 12:36:33 +00:00
dgp 9df68a3879 One of the validity checks for the "cmdName" type is to see if the
resolved command has been deleted by checking for the CMD_IS_DELETED flag.
Only one thing sets this flag -- Tcl_DeleteCommandFromToken(), and
every time it sets that flag it also bumps the cmdEpoch of the Command
as well.  The "cmdName" type is already validating that epoch.  It gains
nothing to be checking the CMD_IS_DELETED flag too.  Eliminated the 
pointless test.
2016-07-15 02:33:11 +00:00
dgp bd8c790e2e Stop checking case that can never happen. 2016-07-14 17:58:45 +00:00
dgp 5c3b0101a2 Plug memory leak created in recent variable Tcl_ObjType reform. 2016-07-14 15:17:58 +00:00
dgp fed06f2292 New test demonstrates memleak discovered by Rolf Ade. 2016-07-14 14:40:37 +00:00
dkf f68e18d159 Tidy up some references to INDEX_TEMP_TABLE. 2016-07-14 08:05:35 +00:00
dgp 66a18f91c0 merge 8.6 2016-07-13 19:19:37 +00:00
dgp 4c4629d5fd New private flag value INDEX_TEMP_TABLE.
Used to signal to Tcl_GetIndexFromObj*() routines that the table in which
lookups are done has a fleeting existence.  Thus there is no value in caching
any results, since the cache can never be useful.  Improvement over existing
hackery where cache is stored and then freed to avoid bogus results.
Likely candidate to eventually push to the public interface.
2016-07-13 19:06:22 +00:00
jan.nijtmans 1f93e78598 Fix "file owned" for Cygwin: st_uid is only 16-bit there. 2016-07-12 14:03:36 +00:00
jan.nijtmans b11d2bb62d Make hash type changable by compiling with -DTCL_HASH_TYPE=size_t (for example). Default (unsigned) cannot be changed in Tcl 8.x, that must wait until Tcl 9. 2016-07-12 13:44:26 +00:00
dgp e0a4741204 merge 8.6 2016-07-11 22:04:02 +00:00
dgp 9b324cef64 merge 8.6 2016-07-10 19:33:46 +00:00
dgp 77e9a375ff merge 8.6 2016-07-09 15:47:28 +00:00
jan.nijtmans d8785b8358 Merge core-8-6-branch: Bug [a47641a031]. TclJoinPath was calling TclNewFSPathObj with a first argument that was not an absolute path. Added a check for that. Fixes Windows test failures fileSystem-1.{3,4} 2016-07-08 10:30:07 +00:00
jan.nijtmans 7de7029fa5 Micro-optimization: Use TclGetStringFromObj in stead of Tcl_GetStringFromObj in many places where possible. 2016-07-08 10:28:48 +00:00
jan.nijtmans 1e5db76cc1 Merge core-8-6-branch:
New tests to demo the remaining flaw in ensemble dispatch revisions. Itcl 4 also demonstrated these
[bd7f17bce8] Revise ensemble dispatch to call TclNREvalObjv() which supports the TCL_EVAL_INVOKE
Simplify all the Tcl_NRPostProc declarations
Create and use a utility Tcl_NRPostProc when decr ref count of values is all that is needed
Bugfix [5d7ea04580]. Treat .cmd and .ps1 files are executable on Windows
2016-07-07 07:48:53 +00:00
jan.nijtmans d65776f03f Fixup the ensemble rewrite conversions 2016-07-05 08:55:04 +00:00
jan.nijtmans 2ee0bbf7fb Use conventional list operations for ensemble dispatch
Add ability to disassemble TclOO constructors and destructors
2016-07-04 08:39:28 +00:00
dgp 8e39be1340 [09fabeb1fd] test subdirs in sorted order. 2016-07-02 17:58:49 +00:00
dgp 4110638cdd [f961d7d1dd] Repair usage message for ensemble parameters with spaces. 2016-07-02 17:57:58 +00:00
dgp e68b3d0183 [4402cfa58c] Rework the spell check machinery into something that will not be foiled by value sharing. 2016-07-01 20:18:47 +00:00
jan.nijtmans a67b58390b Make test-case "for.test" pass, regardless of end-of-line spacing 2016-07-01 14:11:38 +00:00
jan.nijtmans b6f5ea3c8f merge core-8-6-branch 2016-07-01 13:34:20 +00:00
dgp 680d1a1513 Disable special hacks for Itcl 3 ensemble error message generation.
Migration paths are in place to bring this to an end.
2016-07-01 13:20:37 +00:00
dgp f2718ded6d Use the utility routines to eliminate the last bit of intrusion into the ensembleRewrite area. 2016-07-01 13:07:39 +00:00
jan.nijtmans c1ce97106f Simplify use of "struct" keyword in many places. 2016-06-30 13:16:44 +00:00
jan.nijtmans c8212c36e9 Remove Tcl_Main() function, since it's no longer being used: It has been a macro already for ages. 2016-06-29 15:45:26 +00:00
jan.nijtmans 964477ea36 Eliminate internal use of TCL_STORAGE_CLASS, as it will be gone in 9.0 anyway 2016-06-29 15:28:36 +00:00
jan.nijtmans 88fc841203 Tcl_SetVar -> Tcl_SetVar2 and comparable replacements, eliminating functions which are deprecated. 2016-06-29 11:39:00 +00:00
dgp 75a582f357 Route all ensemble rewrite activity through a few utility routines. 2016-06-28 22:30:18 +00:00
dgp 73124928ba Re-order loop for fewer gotos. 2016-06-27 20:29:46 +00:00
dgp cc2f6f6a7d Stop parsing white space where there cannot be any. 2016-06-27 19:01:34 +00:00
dgp bf285438a2 Streamline comment parsing. 2016-06-27 15:16:04 +00:00
dkf 844c8c3016 [dd260aaf72] Allow the -dictionary option to be read from a pushed transform. 2016-06-27 14:28:33 +00:00
dkf 9c058fa5d4 [c3d956be5b] Clearer text about positioning of optional arguments. 2016-06-27 13:44:40 +00:00
jan.nijtmans 6c2f2fec8a Make TCL_MAJOR_VERSION/TCL_MINOR_VERSION/TCL_STUB_MAGIC available to Tcl_InitStubs() arguments. Useful for debugging and detection of stub incompatibilities (e.g. for Tcl9) 2016-06-27 10:22:30 +00:00
jan.nijtmans 0cb6ad07c6 Add TCL_NOINLINE macro, useful for micro-optimizations 2016-06-26 09:03:08 +00:00
max bf46c5018d [c30087b04f] Install man pages with permissions 644 instead of 444. 2016-06-24 16:40:30 +00:00
dkf e577cd8cf8 [d553228d9f] Stop crashes in [dict update] with low refcount dictionaries. 2016-06-23 08:21:42 +00:00
dkf ff29c56ea4 [c95b9fc0e3] Make errorcodes out of level parsing more consistent. 2016-06-22 20:58:14 +00:00
dgp 5207d2fe71 [16896d49fd] Tcl_DStrings should tolerate appends to self. 2016-06-22 18:05:46 +00:00
dgp 7f038e4db7 Repair earlier bug fix. Stopped crash, but botched the logic for multiple glob patterns. 2016-06-21 11:11:14 +00:00
jan.nijtmans 8290f077d2 Upgrade internal Unicode tables to Unicode 9.0 2016-06-21 09:59:51 +00:00
dgp df9f4ed74f [c383ebb5e4] Match DStringInit and DStringFree properly. 2016-06-20 19:31:05 +00:00
dgp b300fecc27 [4b61afd660] Allow [info frame] to record line info for substituted command names. 2016-06-16 17:15:28 +00:00
dgp 7b7647f1ab [16828b3744] [vwait] *must* successfully undo its variable trace, or else it risks corrupting memory. Namespace teardown complexities were giving the traces an opportunity to survive. Added another (arguably better) Tcl_UntraceVar() call to be sure we avoid this problem. 2016-06-16 17:09:19 +00:00
jan.nijtmans be577d6027 Fix [7393be0be6e7f91cbb2016fa777896e3895929e3|7393be0be6]: Tcl Thread library doesn't work in Debug build on Windows_x64 2016-06-14 09:58:47 +00:00
gahr ed326ae9b5 Merge trunk 2016-06-10 12:10:41 +00:00
jan.nijtmans 710ec0ef20 Fix [e14c77b845] for MSVC6: Compilation error over typedef 2016-06-09 11:41:31 +00:00
jan.nijtmans 0789d80b7a Fix [e14c77b845]: Compilation error over typedef. 2016-06-02 14:56:20 +00:00
jan.nijtmans c0e9c99a1c tcltest 2.3.9 -> 2.4.0 2016-06-02 12:24:28 +00:00
jan.nijtmans 47115ff565 Fix [3bd69eba99a395ee]: 'make dist' fails when tclsh9.0 is on $PATH 2016-06-01 12:03:50 +00:00
gahr cb6e9135f2 Merge TIP #447: Execution Time Verbosity Levels in tcltest::configure 2016-06-01 09:55:40 +00:00
andy 20619d8334 Change "integer string" to "integer" in documentation for [tell]. It's not necessary to emphasize EIAS in every man page. The phrase "integer string" dates back to 1999 [ee1e5d143e], previous was "decimal string" which dates back to 1998, in fact the oldest version in Fossil [196f92fd17]. 2016-05-26 02:19:14 +00:00
gahr 7e85a50a46 Merge trunk 2016-05-23 11:40:10 +00:00
dkf 0e5bc322f1 Fix for [f97d4ee020]; use a two-stage approach to avoid quadratic behavior. 2016-05-21 09:30:02 +00:00
jan.nijtmans 3a20c7912b Merge core-8-6-branch 2016-05-13 09:09:05 +00:00
jan.nijtmans e0c7416333 Merge core-8-6-branch. Eliminate some unnecessary spacing. 2016-05-13 08:01:44 +00:00
Kevin B Kenny 7f12c0adfa Bug fix: Assembler dereferences a rogue pointer when unstacking an empty exception range. 2016-05-13 00:46:23 +00:00
dgp 5789574f89 Value correctness over performance myths. Encoding ObjType duplication
needs to dup the typePtr so that each Tcl_GetEncoding() is balanced by
a Tcl_FreeEncoding().
2016-05-10 16:52:53 +00:00
dgp f705798ed7 merge trunk 2016-05-10 16:03:13 +00:00
gahr 8e26969a34 Add a note in tcltest manual page to betray false expectations on msec and usec. 2016-05-04 12:23:40 +00:00
gahr ee742713d1 Approximate ms by μs/1000 2016-05-03 19:50:15 +00:00
gahr 00f3aef9ac Merge trunk 2016-05-03 19:40:53 +00:00
dgp 54a8b02774 Rework bytecode intialization to serve different callers better. 2016-04-29 19:31:31 +00:00
dgp a9f506ce21 Parameterize TclInitByteCodeObj to callers sense of typePtr. 2016-04-29 19:29:14 +00:00
dgp 8c36db11d0 No longer need to create Tcl_Obj just to make some bytecode. 2016-04-29 18:02:55 +00:00
dgp a3838de0f9 Make obj-free bytecode maker available to rest of compile-related files. 2016-04-29 17:58:33 +00:00
dgp 9c0f41cdde Tease apart the bytecode creation machinery from the Tcl_Obj intrep machinery. 2016-04-29 17:52:30 +00:00
dgp 012caa867f Refactor bytecode initialization machinery. 2016-04-29 17:34:14 +00:00
jan.nijtmans 2d7c30cea8 merge-mark 2016-04-24 16:02:49 +00:00
dgp dbf87bdccf close forked fork 2016-04-22 19:59:37 +00:00
dgp 097a0bb6e2 close fork 2016-04-22 19:56:48 +00:00
venkat bbc790ccac Merge Fork 2016-04-22 19:54:22 +00:00
venkat 689cee14b2 Update to tzdata2016d from IETF 2016-04-22 19:46:41 +00:00
dgp a52a0147b7 Refactor bytecode cleanup. 2016-04-22 18:13:17 +00:00
gahr d243959c21 Bump tcltest version to 2.3.9 2016-04-20 19:37:31 +00:00
gahr dba0cd17dc Implement msec and usec verbosity levels in tcltest::configure 2016-04-20 19:27:31 +00:00
dgp 3f2f704c28 [d1f55451c6] Remove unnecessary panic routines. 2016-04-11 17:29:47 +00:00
jan.nijtmans 71ae050a68 Fix [07d13d99b0a9]: Who broke TCL 8.6 and Tclblend ? 2016-04-10 16:01:17 +00:00
jan.nijtmans 9a27611f89 Fix [2538f373ffc78d6dba9c3d973c147a84fdd9bbd8|2538f373ffc78d6d]: crash in Tcl_OpenTcpServer() on Windows 2016-04-08 13:30:12 +00:00
jan.nijtmans 7210b03f81 merge 8.6 2016-04-08 12:28:01 +00:00
dgp 3611f9be2c merge 8.6 2016-04-07 14:56:25 +00:00
jan.nijtmans 1e5e66b31f Rename UtfCount() to TclUtfCount() and use it in more places. Suggested by pspjuth here: [e99a79a32650e7e5] 2016-04-05 09:32:43 +00:00
dkf 4315a57ac4 [47ac84309b] Clear up a bunch of problems with [lreplace]. It now does nothing more gracefully, and properly ensures that the compiled and interpreted versions work the same. Thanks to aspect for his work on this. 2016-04-04 21:39:15 +00:00
dgp 89b344e544 Revise "parsedVarName" Tcl_ObjType to eliminated unnecessary parts and
to reduce string copying.
2016-04-04 18:27:46 +00:00
dgp 92a18f28ec merge 8.6 2016-04-04 16:02:17 +00:00
dgp 1a7bb8dae4 close fork 2016-04-04 15:53:30 +00:00
dgp e1173969e6 Merge *both* commits to get the TclAsyncReady optimization. Without
both parts, the test interp-34.3.1 hangs.
2016-04-04 15:43:49 +00:00
gahr 47b005a0d1 Merge tip-444 2016-04-04 11:30:07 +00:00
gahr b99e43073a merge trunk 2016-04-04 11:25:12 +00:00
jan.nijtmans 518ebabc90 micro-optimization from drh-micro-optimization branch: Knock perhaps 1% off execution time: guard on TclAsyncReady more efficient when decrementing to zero. 2016-04-04 11:21:03 +00:00
jan.nijtmans d2a222320b RFE [0ef5e653ff4caf5f896ec1182e0aac38ab9a0c46|0ef5e653]: Add nsf to coffbase.txt. Eliminate exess spacing 2016-04-01 13:06:40 +00:00
jan.nijtmans ffcf42745c Two micro-optimizations in Win and UNIX notifier. See: [http://code.activestate.com/lists/tcl-core/15645/] 2016-04-01 11:56:42 +00:00
jan.nijtmans 421817ca2c merge trunk 2016-03-30 12:57:27 +00:00
jan.nijtmans 40fd1928b8 Eliminate AT_FORK_INIT_VALUE/RESET_ATFORK_MUTEX macro's, since other values than the default are not supported anyway. This results in the elimination of (empty functions anyway) AtForkPrepare/AtForkParent.
Also improve consistancy in some variable names. No change of functionality.
2016-03-29 10:17:02 +00:00
dgp f816bb2a60 The DupEncodingIntRep() routine is broken. It fails to set the typePtr
field of the duplicated Tcl_Obj to indicate that the intrep is that of
the &encodingType.  The impact must be that refcounting of Tcl_Encodings
are out of balance, at least in the (unusual?) case where "encoding" values
need duplication.  I hesitate to actually commit this fix until I have a
test demonstrating the need for it, and a chance to see the impact on
actual encoding operations.  The lifetime management of encodings has a
history of being tricky and raising controversy.  More work required.
2016-03-28 21:24:22 +00:00
dgp 40a37e9b4a There's a "parsedVarName" Tcl_ObjType that remembers how a variable name
breaks down into the name of an array and the name of an element.  It has
been storing them in an intrep as a Tcl_Obj holding the array name and an
allocated string holding the element name.  This branch revises the intrep
strategy to use Tcl_Obj's to hold both parts.  This reduces copying and seems
to simplify the code.  Also "nulled out" the UpdateStringProc for the type
which can never be called.  I think this is a better answer, but I'd like
any other informed opinions.
2016-03-28 19:03:14 +00:00
jan.nijtmans e79059759a Better fix for [7d0db7c388f52de81]: In stead of adding dependencies to multiple Makefile lines, combine them 2016-03-27 21:28:15 +00:00
dkf 8f836376b7 [47ac84309b] Fix problems with [lreplace] compilation. 2016-03-27 16:40:28 +00:00
dkf 7dd80b0182 Some OSX symbols builds create libtcl8.7.dylib.dSYM which is a directory. 2016-03-27 15:48:55 +00:00
venkat c9251df909 Update to tzdata 2016c from ietf.org 2016-03-26 18:12:24 +00:00
jan.nijtmans 137f138b0a - Undo unix notifier changes: too risky at this moment.
- Merge trunk
- (cherry-pick from dhr-micro-optimization): Micro-optimization: remove double checked lock from TclGetAllocCache in favour of initialization in TclInitSubsystems
2016-03-25 14:41:26 +00:00
dgp 9acaee3d40 No longer a need to keep around 'revert to 8.5' code. 2016-03-24 21:21:42 +00:00
jan.nijtmans 2e4f989482 Fix DTRACE_HDR value if tracing is diabled. Follow-up to [7d0db7c388] 2016-03-23 13:03:54 +00:00
dkf 7c0f0f400e merge mark 2016-03-23 10:55:40 +00:00
jan.nijtmans 46d899ba95 Fix [f1253530cdd83e66]: Different Windows / *nix default bindings for text widget.
Still - most likely - not the complete story for trunk/tcl9, but whatever we do this is a better starting-point than how it was.
2016-03-23 09:55:06 +00:00
jan.nijtmans fcc11a1aff Fix [f1253530cdd83e66]: tcl_wordchars and tcl_nonwordchars are unknown at startup.
For trunk this will not be the complete story, but for core-8-6-branch and core-8-5-branch it will at least make tcl_wordchars and tcl_nonwordchars function as documented. That's the least polish we should do.
See: [https://groups.google.com/forum/#!topic/comp.lang.tcl/ZZ_WwfQdmoE].
People like Eric Brunel, who want the most logical behavior for any Tcl release can simply do:
    set ::tcl_wordchars {\w}
    set ::tcl_nonwordchars {\W}
2016-03-23 09:46:40 +00:00
jan.nijtmans b21ca89201 Fix [7d0db7c388f52de8]: Occasional build failures with parallel make. Thanks to Jaroslav Škarvada for bug report and fix. 2016-03-23 08:48:54 +00:00
dkf 1498795d38 Factor out string internal rep definition so fix for [1af8de570511] is less awful. 2016-03-22 20:30:47 +00:00
dgp 69d4a9d89e Revised fix for signed/unsigned mismatch. "get types right" > "add more casts" 2016-03-22 17:21:03 +00:00
jan.nijtmans 35c8885bad Alternative solution for [f1253530cd] 2016-03-22 13:15:21 +00:00
jan.nijtmans 740454d17a Fix signed-unsigned-compare warning (reported by François Vogel on Windows, but gcc can trigger it as well) 2016-03-22 09:05:10 +00:00
jan.nijtmans 6ca0220e0b (experiment) Use TclpMasterLock() in stead of a separate notifierInitMutex. One less mutex to be worried about. 2016-03-21 14:22:52 +00:00
jan.nijtmans a2827884a9 Fix [d3071887dbc7aeac]: Fix SEGV in Tcl_FinalizeNotifier(). Thanks to hirofumi for both the bug-report and the fix.
Use TclpMasterLock() in stead of MASTER_LOCK everywhere (in stead of in some files only, not in others). 
Use "static int initialized" variable consistantly. 
Fix some comments. No change of functionality.
2016-03-21 11:59:19 +00:00
jan.nijtmans fdcc17288c .... oops .... 2016-03-21 09:16:28 +00:00
jan.nijtmans cfe1b9b146 Proposed fix for [d3071887dbc7aeac]: Fix SEGV in Tcl_FinalizeNotifier() 2016-03-21 09:05:34 +00:00
dkf 6f7c0d0cb8 [1af8de570511] Fix crash in [string replace] caused by cut-n-paste. 2016-03-20 20:42:26 +00:00
dgp 38f165b6d2 [0b8c387cf7] Replace deprecated Tcl_VarEval(). socket accept callbacks now
always evaluate in global context.  *** POTENTIAL INCOMPATIBILITY ***
2016-03-17 13:25:11 +00:00
dgp e5ba57087a merge 8.6 bug fixes 2016-03-17 13:19:44 +00:00
jan.nijtmans 401704baeb Merge trunk.
Add TCL_EVAL_GLOBAL flag to Tcl_EvalObjEx(), for reason mentioned in [0b8c387cf7].
2016-03-16 14:52:46 +00:00
jan.nijtmans bf462d250e Remove undocumented TCL_HASH_KEY_STORE_HASH. Setting this to "0" is not supported (was it ever ????), and not tested for long time. 2016-03-16 09:56:55 +00:00
venkat 79a87f7d74 Update tzdata to 2016b from ietf.org 2016-03-16 09:07:57 +00:00
gahr 99ac77fd22 [e6f27aa56f] Add files I missed in my previous commit 2016-03-13 17:23:31 +00:00
gahr 32d41dcbb5 [e6f27aa56f] Initial import of libtommath-1.0
This commit brings in libtommath-1.0, as of tag v1.0 of the upstream repository
at https://github.com/libtom/libtommath.

Only the top-level directory has been imported: the demo, etc, logs, mtest,
pics, pre_gen, and tombc directories have been removed from our repo.

The stubs tables have been regenerated to accomodate for the new function:
mp_expt_d_ex(mp_int *a, mp_digit b, mp_int *c, int fast);
See https://github.com/libtom/libtommath/commit/e9b1837 for details.

Only the unix build system has been modified for now. Windows and Mac OSX will
come later.
2016-03-11 17:13:38 +00:00
jan.nijtmans 113f1348c0 Allow unstable Tcl releases to use unstable packages by default (this makes "package require Tk" find the expected 8.7a0 version in stead of 8.6). Make many "package" test-cases work even when the environment variable TCL_PKG_PREFER_LATEST is set. 2016-03-11 09:33:35 +00:00
jan.nijtmans 849bbbce67 Somewhat more excess spacing in for.test 2016-03-10 13:44:44 +00:00
jan.nijtmans e8df4c5fe0 Eliminate exess spacings in many test-cases 2016-03-10 11:56:23 +00:00
jan.nijtmans 69ddcaa16e Let Tcl 8.7 allow Tk 8.7 to be used by default 2016-03-09 15:59:07 +00:00
dgp 06ce1bc045 [0b8c387cf7] Replace deprecated Tcl_VarEval() call with reworked callback
system that uses Tcl_Obj scripts.
2016-03-08 18:06:06 +00:00
dgp c2480e69a5 [bbc304f61a] Avoid event handling when reflected channel has a watch change half-completed. (First half in 1 thread, second in another). When this is allowed to happen, false alarm errors from [chan postevent] are the result when timing is unlucky. See test iocmd.tf-24.17.bug3522560 . 2016-03-08 15:55:51 +00:00
jan.nijtmans 4ff3a61b82 Eliminate exess spacings in remaining doc pages 2016-03-08 15:31:06 +00:00
jan.nijtmans ee67bf676a configure.in -> configure.ac 2016-03-08 13:44:16 +00:00
jan.nijtmans c2844d65a8 Fix version number in .project file 2016-03-07 08:37:01 +00:00
jan.nijtmans 6964ca96c2 Fix gcc 5.3 warning: In function ‘NRInterpCmd’: tclInterp.c:726:5: warning: assuming signed overflow does not occur when assuming that (X + c) < X is always false [-Wstrict-overflow]
if ((i + 2) < objc) {
Remove some excessive spacing
2016-03-04 13:13:21 +00:00
dgp 4c3f17ea96 Bump trunk to 8.7a0 to accept new feature development. 2016-03-03 19:45:52 +00:00
gahr fcab9a91fa merge trunk 2016-03-03 08:34:56 +00:00
gahr 08296be4e4 Clarify that weekends are intended as Saturdays and Sundays 2016-03-03 08:30:56 +00:00
gahr 013f304b82 More comprehensive tests adding and subtracting week-days 2016-02-24 09:10:01 +00:00
gahr 3942c68ef0 merge trunk 2016-02-23 19:44:07 +00:00
gahr 35844385d6 Make sure that adding 0 weekdays doesn't result in going back in time 2016-02-23 16:31:18 +00:00
gahr d6eeb008f7 [5f71353740] Support the "weekdays" unit in [clock add] 2016-02-17 11:03:48 +00:00
dkf c0946d430e Knock perhaps 1% off execution time: guard on TclAsyncReady more efficient when decrementing to zero. 2015-10-23 21:52:10 +00:00
Kevin B Kenny 56619f9f70 fix typo in micro-optimization TclpInitThreadAlloc 2015-10-22 14:07:01 +00:00
dkf 30c0c8a7fe Turn off NRE asserts by default. About a 5% speedup on [clock format]. 2015-10-22 01:00:28 +00:00
Kevin B Kenny 8f8aa2b0d9 Micro-optimization: remove double checked lock from TclGetAllocCache in favour of initialization in TclInitSubsystems 2015-10-21 23:30:41 +00:00
jan.nijtmans a3eb84e8cb Import of tommath 0.42.0 2011-03-14 12:08:07 +00:00
jan.nijtmans d5b999af66 Import of libtommath 0.41
Import of libtommath 0.41
2011-03-14 11:59:15 +00:00
jan.nijtmans 4878f1b6a4 Import of libtommath 0.40 2011-03-14 11:51:58 +00:00
jan.nijtmans c5e0f27a28 re-import ltm-0.39, with original RCS-ID's 2011-03-14 09:36:26 +00:00
636 changed files with 33038 additions and 68121 deletions
+18
View File
@@ -17,8 +17,26 @@
*/tclsh*
*/tcltest*
*/versions.vc
libtommath/bn.ilg
libtommath/bn.ind
libtommath/pretty.build
libtommath/tommath.src
libtommath/*.pdf
libtommath/*.pl
libtommath/*.sh
libtommath/tombc/*
libtommath/pre_gen/*
libtommath/pics/*
libtommath/mtest/*
libtommath/logs/*
libtommath/etc/*
libtommath/demo/*
libtommath/*.out
libtommath/*.tex
unix/autoMkindex.tcl
unix/dltest.marker
unix/tcl.pc
unix/tclIndex
unix/pkgs/*
win/pkgs/*
win/tcl.hpj
+1 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>tcl8.6</name>
<name>tcl8.7</name>
<comment></comment>
<projects>
</projects>
+1 -1
View File
@@ -414,7 +414,7 @@
Tcl_IsChannelExisting, and Tcl_ClearChannelHandlers to conform to the
new stacked channel implementation. Their stub slots were also moved
to give preference to the new 8.3.2 stub functions. This will cause an
incompatability with 8.4a1 only.
incompatibility with 8.4a1 only.
(StopCopy): fixed a bug introduced by a partial fix in 8.3.2 that
didn't set nonBlocking correctly when resetting the flags for the
write side. [Bug: 6261]
+3 -3
View File
@@ -847,7 +847,7 @@
exit.
* tests/exec.test: marked exec-18.1 unixOnly until the Windows
incompatability (in the test, not the core) can be resolved.
incompatibility (in the test, not the core) can be resolved.
* tests/http.test (http-3.11): added close $fp that was causing an
error on Windows because the file was not closed before deleting.
@@ -3642,7 +3642,7 @@
* compat/strtoll.c (strtoll):
* compat/strtoull.c (strtoull):
* unix/tclUnixPort.h:
* win/tclWinPort.h: Const-ing 64-bit compatability declarations. Note
* win/tclWinPort.h: Const-ing 64-bit compatibility declarations. Note
that the return pointer is non-const because it is entirely legal for
the functions to be called from somewhere that owns the string being
passed. Fixes problem reported by Larry Virden.
@@ -3779,7 +3779,7 @@
There are a lot of changes from this TIP, so please see
http://purl.org/tcl/tip/72.html for discussion of
backward-compatability issues, but the main ones modifications are in:
backward-compatibility issues, but the main ones modifications are in:
* generic/tcl.h: New types.
* generic/tcl.decls: New public functions.
+2 -2
View File
@@ -947,7 +947,7 @@
declarations match and will end up using the declarations in the
public code from now on because of #include ordering. Keeping the old
declarations in tclInt.decls; there's no need to gratuitously break
compatability for those extensions which are already clients of the
compatibility for those extensions which are already clients of the
namespace code.
2003-08-23 Zoran Vasiljevic <zoran@archiwrae.com>
@@ -1278,7 +1278,7 @@
* generic/tclVar.c (Tcl_ArrayObjCmd, TclArraySet): Made [array get]
and [array set] work with dictionaries, producing them and consuming
them. Note that for compatability reasons, you will never get a dict
them. Note that for compatibility reasons, you will never get a dict
from feeding a string literal to [array set] since that alters the
trace behaviour of "multi-key" sets. [Bug 759935]
+1 -1
View File
@@ -1356,7 +1356,7 @@
2004-10-07 Donal K. Fellows <donal.k.fellows@man.ac.uk>
* *.3: Convert CONST to const and VOID to void so we document how
people should actually use the Tcl API and not the compatability hacks
people should actually use the Tcl API and not the compatibility hacks
that it has to have.
* doc/man.macros, *.3: Update .AS macro so it can know how wide to
+4 -4
View File
@@ -1,5 +1,5 @@
README: Tcl
This is the Tcl 8.6.6 source distribution.
This is the Tcl 8.7a0 source distribution.
http://sourceforge.net/projects/tcl/files/Tcl/
You can get any source release of Tcl from the URL above.
@@ -49,7 +49,7 @@ and selling it either in whole or in part. See the file
Extensive documentation is available at our website.
The home page for this release, including new features, is
http://www.tcl.tk/software/tcltk/8.6.html
http://www.tcl.tk/software/tcltk/8.7.html
Detailed release notes can be found at the file distributions page
by clicking on the relevant version.
@@ -61,9 +61,9 @@ Information about Tcl itself can be found at
There have been many Tcl books on the market. Many are mentioned in the Wiki:
http://wiki.tcl.tk/_/ref?N=25206
To view the complete set of reference manual entries for Tcl 8.6 online,
To view the complete set of reference manual entries for Tcl 8.7 online,
visit the URL:
http://www.tcl.tk/man/tcl8.6/
http://www.tcl.tk/man/tcl8.7/
2a. Unix Documentation
----------------------
-74
View File
@@ -8624,77 +8624,3 @@ improvements to regexp engine from Postgres (lane,porter,fellows,seltenreich)
2016-02-22 (bug)[9b4702] [info exists env(missing)] kills trace (nijtmans)
--- Released 8.6.5, February 29, 2016 --- http://core.tcl.tk/tcl/ for details
2016-03-01 (bug)[803042] mem leak due to reference cycle (porter)
2016-03-08 (bug)[bbc304] reflected watch race condition (porter)
2016-03-17 (bug)[fadc99] compile-5.3 (rodriguez,porter)
2016-03-17 (enhancement)[1a25fd] compile [variable ${ns}::v] (porter)
2016-03-20 (bug)[1af8de] crash in compiled [string replace] (harder,fellows)
2016-03-21 (bug)[d30718] segv in notifier finalize (hirofumi,nijtmans)
2016-03-23 (enhancement)[7d0db7] parallel make (yarda,nijtmans)
2016-03-23 [f12535] enable test bindings customization (vogel,nijtmans)
2016-04-04 (bug)[47ac84] compiled [lreplace] fixes (aspect,ferrieux,fellows)
*** POTENTIAL INCOMPATIBILITY ***
2016-04-08 (bug)[866368] RE \w includes 'Punctuation Connector' (nijtmans)
2016-04-08 (bug)[2538f3] Win crash Tcl_OpenTcpServer() (griffin)
2016-04-10 [07d13d] Restore TclBlend support lost in 8.6.1 (buratti)
2016-05-13 (bug)[3154ea] Mem corruption in assembler exceptions (tkob,kenny)
2016-05-13 (bug) registry package support any Unicode env (nijtmans)
=> registry 1.3.2
2016-05-21 (bug)[f7d4e] [namespace delete] performance (fellows)
2016-06-02 (TIP 447) execution time verbosity option (cerutti)
=> tcltest 2.4.0
2016-06-16 (bug)[16828b] crash due to [vwait] trace undo fail (dah,porter)
2016-06-16 (enhancement)[4b61af] good [info frame] from more cases (beric)
2016-06-21 (bug)[c383eb] crash in [glob -path a] (oehlmann,porter)
2016-06-21 (update) Update Unicode data to 9.0 (nijtmans)
*** POTENTIAL INCOMPATIBILITY ***
2016-06-22 (bug)[16896d] Tcl_DString tolerate append to self. (dah,porter)
2016-06-23 (bug)[d55322] crash in [dict update] (yorick,fellows)
2016-06-27 (bug)[dd260a] crash in [chan configure -dictionary] (madden,aspect)
2016-07-02 (bug)[f961d7] usage message with parameters with spaces (porter)
*** POTENTIAL INCOMPATIBILITY ***
2016-07-02 (enhancement)[09fabc] Sort order of -relateddir (lanam)
2016-07-07 (bug)[5d7ca0] Win: [file executable] for .cmd and .ps1 (nadkarni)
*** POTENTIAL INCOMPATIBILITY ***
2016-07-08 (bug)[a47641] [file normalize] & Windows junctions (nadkarni)
2016-07-09 [ae61a6] [file] handling of Win hardcoded names (CON) (nadkarni)
*** POTENTIAL INCOMPATIBILITY ***
2016-07-09 [3613671] [file owned] (more) useful on Win (nadkarni)
2016-07-09 (bug)[1493a4] [namespace upvar] use of resolvers (beric,fellows)
*** POTENTIAL INCOMPATIBILITY ***
2016-07-10 (bug)[da340d] integer division in clock math (nadkarni)
2016-07-20 tzdata updated to Olson's tzdata2016f (venkat)
--- Released 8.6.6, July 27, 2016 --- http://core.tcl.tk/tcl/ for details
+1 -1
View File
@@ -106,5 +106,5 @@ closedir(
close(dirp->dd_fd);
dirp->dd_fd = -1;
dirp->dd_loc = 0;
ckfree((char *) dirp);
ckfree(dirp);
}
+1 -1
View File
@@ -100,7 +100,7 @@ waitpid(
} else {
prevPtr->nextPtr = waitPtr->nextPtr;
}
ckfree((char *) waitPtr);
ckfree(waitPtr);
return result;
}
+1 -1
View File
@@ -119,7 +119,7 @@ retrieve the stack trace when script evaluation returns
\fBTCL_ERROR\fR, like so:
.PP
.CS
int code = Tcl_Eval(interp, script);
int code = Tcl_EvalEx(interp, script, -1, 0);
if (code == TCL_ERROR) {
Tcl_Obj *options = \fBTcl_GetReturnOptions\fR(interp, code);
Tcl_Obj *key = Tcl_NewStringObj("-errorinfo", -1);
+333
View File
@@ -0,0 +1,333 @@
'\"
'\" Copyright (c) 2016 Andy Goth
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
.TH Tcl_ArraySet 3 8.7 Tcl "Tcl Library Procedures"
.so man.macros
.BS
'\" Note: do not modify the .SH NAME line immediately below!
.SH NAME
Tcl_ArraySet, Tcl_ArrayUnset, Tcl_ArrayGet, Tcl_ArrayNames, Tcl_ArraySize, Tcl_ArrayExists, Tcl_ArraySearchStart, Tcl_ArraySearchPeek, Tcl_ArraySearchNext, Tcl_ArraySearchDone, Tcl_ArrayStatistics \- manipulate Tcl array variables
.SH SYNOPSIS
.nf
\fB#include <tcl.h>\fR
.sp
int
\fBTcl_ArraySet\fR(\fIinterp, part1Ptr, dictPtr, flags\fR)
.sp
int
\fBTcl_ArrayUnset\fR(\fIinterp, part1Ptr, part2Ptr, flags\fR)
.sp
int
\fBTcl_ArrayGet\fR(\fIinterp, part1Ptr, part2Ptr, dictPtr, flags\fR)
.sp
int
\fBTcl_ArrayNames\fR(\fIinterp, part1Ptr, part2Ptr, listPtr, flags\fR)
.sp
int
\fBTcl_ArraySize\fR(\fIinterp, part1Ptr, part2Ptr, intPtr, flags\fR)
.sp
int
\fBTcl_ArrayExists\fR(\fIinterp, part1Ptr, part2ptr, intPtr, flags\fR)
.sp
Tcl_ArraySearch
\fBTcl_ArraySearchStart\fR(\fIinterp, part1Ptr, part2Ptr, flags\fR)
.sp
Tcl_Obj *
\fBTcl_ArraySearchPeek\fR(\fIsearch\fR)
.sp
Tcl_Obj *
\fBTcl_ArraySearchNext\fR(\fIsearch\fR)
.sp
void
\fBTcl_ArraySearchDone\fR(\fIsearch\fR)
.sp
int
\fBTcl_ArrayStatistics\fR(\fIinterp, part1Ptr, stringPtr, flags\fR)
.SH ARGUMENTS
.AS Tcl_ArraySearch search
.AP Tcl_Interp *interp in
Interpreter containing the variable. If an error occurs, an error message is
left in the interpreter's result.
.AP Tcl_Obj *part1Ptr in
Points to a Tcl value containing the array variable's name. The name may
include a series of \fB::\fR namespace qualifiers to specify a variable in a
particular namespace.
.AP Tcl_Obj *part2Ptr in
If non-NULL, points to a Tcl value containing an array element name filter
specification. The format and interpretation of \fIpart2Ptr\fR are determined
by the \fIflags\fR argument.
.AP int flags in
OR-ed combination of bits providing additional information. See below for valid
values.
.AP Tcl_Obj *dictPtr in/out
Points to the dictionary value to be read or manipulated. If \fIdictPtr\fR does
not already point to a dictionary value, an attempt will be made to convert it
to one. \fBTcl_ArraySet\fR allows \fIdictPtr\fR to be NULL, in which case it
creates an empty array if the array does not already exist.
.AP Tcl_Obj *listPtr in/out
Points to the list value to be manipulated. If \fIlistPtr\fR does not already
point to a list value, an attempt will be made to convert it to one.
.AP Tcl_Obj *stringPtr in/out
Points to the string value to be manipulated.
.AP int *intPtr out
Points to location where \fBTcl_ArrayExists\fR stores the array existence flag
or \fBTcl_ArraySize\fR stores the number of matching array elements.
.AP Tcl_ArraySearch search in/out
Token for tracking the progress of enumerating array elements.
.BE
.SH DESCRIPTION
.PP
These functions are used to create, modify, enumerate, analyze, read, and delete
Tcl array variables from C code.
.PP
The \fBTcl_ArraySet\fR, \fBTcl_ArrayUnset\fR, \fBTcl_ArrayGet\fR,
\fBTcl_ArrayNames\fR, \fBTcl_ArraySize\fR, \fBTcl_ArrayExists\fR, and
\fBTcl_ArrayStatistics\fR functions return \fBTCL_OK\fR on success and
\fBTCL_ERROR\fR on error. If an error occurs, an error message is left in the
interpreter's result. The possible errors are caused by format (invalid list,
dictionary, or regular expression) and traces (array, read, write, or unset).
.PP
Except for \fBTcl_ArraySet\fR, \fBTcl_ArraySearchStart\fR (not listed above),
and \fBTcl_ArrayStatistics\fR, the array functions do not consider it an error
for a namespace or variable to not exist or a variable to be a scalar or array
element instead of an array. \fBTcl_ArraySet\fR allows the array variable to
not exist, in which case it creates it, but it returns \fBTCL_ERROR\fR in all
the other situations listed in the previous sentence.
.PP
Array functions trigger array traces in the same manner as the \fBarray\fR
command. After the completion of any array traces, for each accessed array
element, \fBTcl_ArraySet\fR triggers write traces, \fBTcl_ArrayUnset\fR triggers
unset traces, and \fBTcl_ArrayGet\fR triggers read traces. As discussed above,
an error encountered during the execution of a trace causes the function to
place error information in the interpreter's result and return \fBTCL_ERROR\fR.
.PP
The \fBTcl_ArraySet\fR, \fBTcl_ArrayUnset\fR, \fBTcl_ArrayGet\fR,
\fBTcl_ArrayNames\fR, \fBTcl_ArraySize\fR, \fBTcl_ArrayExists\fR,
\fBTcl_ArraySearchStart\fR, and \fBTcl_ArrayStatistics\fR functions accept a
\fIflags\fR argument to control the scope of the variable lookup and to specify
the interpretation of \fIpart2Ptr\fR. It consists of an OR-ed combination of
zero or more of the following bits.
.TP
\fBTCL_GLOBAL_ONLY\fR
Under normal circumstances the functions look up variables as follows. If a
procedure call is active in \fIinterp\fR, the array variable is looked up at the
current level of procedure call. Otherwise, the array variable is looked up
first in the current namespace, then in the global namespace. However, if this
bit is set in \fIflags\fR then the array variable is looked up only in the
global namespace even if there is a procedure call active. If both
\fBTCL_GLOBAL_ONLY\fR and \fBTCL_NAMESPACE_ONLY\fR are given,
\fBTCL_GLOBAL_ONLY\fR is ignored.
.TP
\fBTCL_NAMESPACE_ONLY\fR
If this bit is set in \fIflags\fR then the array variable is looked up only in
the current namespace. If a procedure is active, its variables are ignored, and
the global namespace is also ignored unless it is the current namespace.
.PP
With the exception of \fBTcl_ArraySet\fR and \fBTcl_ArrayStatistics\fR which do
not support filtering, the \fIflags\fR argument is also OR-ed with zero or one
of the following values to select the type of filtering applied by
\fIpart2Ptr\fR. Setting more than one filter type may cause \fBTcl_Panic\fR to
be called. The filter type is ignored if \fIpart2Ptr\fR is NULL, in which case
no filtering is applied and all array elements are matched.
.TP
\fBTCL_MATCH_EXACT\fR
\fIpart2Ptr\fR is an array element name. The filter matches at most a single
array element whose name is exactly equal to the value of \fIpart2Ptr\fR. If no
filter type is explicitly specified in \fIflags\fR, \fBTCL_MATCH_EXACT\fR is
used by default. This differs from the \fBarray\fR commands which default to
\fB\-glob\fR.
.TP
\fBTCL_MATCH_GLOB\fR
\fIpart2Ptr\fR is a glob pattern, and it matches array element names according
to the rules of \fBstring match\fR. \fIpart2Ptr\fR must match the entire array
element name from beginning to end. To match substrings, place \fB*\fR at
either end of \fIpart2Ptr\fR.
.TP
\fBTCL_MATCH_REGEXP\fR
\fIpart2Ptr\fR is a regular expression, and it matches array element names
according to the rules of \fBregexp\fR. Unless anchored by the \fB^\fR and
\fB$\fR constraints, \fIpart2Ptr\fR matches substrings. Thus, an empty
\fIpart2Ptr\fR matches every possible array element name. It is an error for
\fIpart2Ptr\fR to not be a valid regular expression, but this error is only
detected and reported when \fIpart1Ptr\fR names a non-empty array.
.PP
The \fBTcl_ArraySet\fR, \fBTcl_ArrayGet\fR, and \fBTcl_ArrayNames\fR functions
accept \fIdictPtr\fR and \fIlistPtr\fR arguments referencing dictionary and list
values, respectively. If these values are not already dictionary and list
values, an attempt will be made to convert them. If the conversion fails,
\fBTCL_ERROR\fR will be returned and an error message will be left in the
interpreter's result.
.PP
\fBTcl_ArraySet\fR sets the values of zero or more elements in the array named
by \fIpart1Ptr\fR. If not NULL, \fIdictPtr\fR must be a valid dictionary, i.e.
it must be a list consisting of an even number of elements alternating between
key and value. Each key in \fIdictPtr\fR is treated as an element name within
the array, and its associated value is used as the new value for that array
element. If the variable named by \fIpart1Ptr\fR does not already exist and
\fIdictPtr\fR is empty or NULL, the variable is created as an empty array. It
is an error for \fIpart1Ptr\fR to name a scalar (non-array) variable or an array
element, or for it to reference a nonexistent namespace.
.PP
\fBTcl_ArrayUnset\fR unsets all elements in the array named by \fIpart1Ptr\fR
that match the filter specified by \fIpart2Ptr\fR and \fIflags\fR. It is not an
error for \fIpart1Ptr\fR to not name an array or for there to be no matching
elements in the array. If \fIpart2Ptr\fR is NULL and \fIpart1Ptr\fR names an
array, the entire array is unset, and future calls to \fBTcl_ArrayExists\fR will
report it as not existing. This is distinct from unsetting each element of the
array (e.g. if \fIpart2Ptr\fR is \fB*\fR and \fIflags\fR is
\fBTCL_MATCH_GLOB\fR), which does not cause future calls to
\fBTcl_ArrayExists\fR to report the array as not existing.
.PP
\fBTcl_ArrayGet\fR loads the contents of the array named by \fIpart1Ptr\fR into
the \fIdictPtr\fR dictionary object. The array element names and values are
used as the dictionary keys and values, respectively. If \fIpart2Ptr\fR is not
NULL, \fIpart2Ptr\fR and \fIflags\fR specify a filter used to limit which array
elements are loaded into \fIdictPtr\fR. If \fIpart1Ptr\fR does not name an
array or if there are no matching elements, \fIdictPtr\fR is not modified.
If \fIdictPtr\fR is not empty prior to calling \fBTcl_ArrayGet\fR, the array
data is merged into \fIdictPtr\fR. If an array element has the same name as an
existing dictionary key, the array element value replaces the existing
dictionary value.
.PP
\fBTcl_ArrayNames\fR loads the element names of the array named by
\fIpart1Ptr\fR into the \fIlistPtr\fR list object. If \fIpart2Ptr\fR is not
NULL, \fIpart2Ptr\fR and \fIflags\fR specify a filter used to limit which array
element names are loaded into \fIlistPtr\fR. If \fIpart1Ptr\fR does not name an
array or if there are no matching elements, \fIlistPtr\fR is not modified. If
\fIlistPtr\fR is not empty prior to calling \fBTcl_ArrayNames\fR, the array
element names are appended to \fIlistPtr\fR.
.PP
\fBTcl_ArraySize\fR stores the number of elements in the array named by
\fIpart1Ptr\fR into the address \fIintPtr\fR. If \fIpart2Ptr\fR is not NULL,
\fIpart2Ptr\fR and \fIflags\fR specify a filter used to limit which array
elements count toward the total number of elements.
.PP
\fBTcl_ArrayExists\fR checks for the existence of an array variable named
\fIpart1Ptr\fR or (if \fIpart2Ptr\fR is not NULL) an array element within
matching the filter specified by \fIpart2Ptr\fR and \fIflags\fR. If the array
variable or array element exists, the value \fB1\fR is stored into the location
\fIintPtr\fR, even if the array is empty. If \fIpart1Ptr\fR does not name an
array variable (the variable does not exist, it is a scalar variable or array
element, or it references a nonexistent namespace), or if \fIpart2Ptr\fR is not
NULL and no elements match the filter, the value \fB0\fR is stored into the
location \fIintPtr\fR.
.PP
\fBTcl_ArraySearchStart\fR initiates an array search, i.e. an array element
enumeration yielding one element at a time. \fIpart1Ptr\fR must name an array.
If \fIpart2Ptr\fR is not NULL, \fIpart2Ptr\fR and \fIflags\fR specify a filter
used to limit which array elements are included in the enumeration. The return
value is a token used to track the progress of the search, and it is to be
passed to the \fBTcl_ArraySearchPeek\fR, \fBTcl_ArraySearchNext\fR, and
\fBTcl_ArraySearchDone\fR functions. If there is an error looking up the
variable, executing an array trace, or validating a regular expression filter,
NULL is returned and error information is placed in the interpreter result.
.PP
\fBTcl_ArraySearchPeek\fR and \fBTcl_ArraySearchNext\fR return the next array
element name in the search identified by the \fIsearch\fR argument. If there
are no remaining element names, NULL is returned. \fBTcl_ArraySearchPeek\fR
does not advance the enumeration, whereas \fBTcl_ArraySearchNext\fR does, so
\fBTcl_ArraySearchPeek\fR will return the same value each time it is called if
there are no intervening calls to \fBTcl_ArraySearchNext\fR with the same
\fIsearch\fR argument.
.PP
\fBTcl_ArraySearchDone\fR completes the search identified by the \fIsearch\fR
argument and deallocates associated resources. To avoid memory leaks,
\fBTcl_ArraySearchDone\fR must be called once for each search token returned by
\fBTcl_ArraySearchStart\fR.
.PP
\fBTcl_ArrayStatistics\fR produces statistics about the distribution of data
within the hash table underlying the array named by \fIpart1Ptr\fR. This
information includes the number of entries in the table, the number of buckets,
and the utilization of the buckets. The statistics information is appended to
the string value \fIstringPtr\fR.
.SH EXAMPLES
.PP
Common initialization used for subsequent examples:
.PP
.CS
int size, i;
Tcl_Obj *obj, **objPtr;
Tcl_Obj *varNameObj = Tcl_NewStringObj("colorcount", -1);
Tcl_Channel outChan = Tcl_GetChannel(interp, "stdout", NULL);
.CE
.PP
Create an array:
.PP
.CS
obj = Tcl_NewStringObj(
" red 1"
" green 5"
" blue 4"
" white 9", -1);
\fBTcl_ArraySet\fR(interp, varNameObj, obj, 0);
.CE
.PP
Load the full contents of an array into a single object:
.PP
.CS
Tcl_SetStringObj(obj, NULL, 0);
\fBTcl_ArrayGet\fR(interp, varNameObj, NULL, obj, 0);
Tcl_ListObjGetElements(interp, obj, &size, &objPtr);
for (i = 0; i < size; i += 2, objPtr += 2) {
Tcl_WriteChars(outChan, "Color: ", -1);
Tcl_WriteObj(outChan, objPtr[0]);
Tcl_WriteChars(outChan, " Count: ", -1);
Tcl_WriteObj(outChan, objPtr[1]);
Tcl_WriteChars(outChan, "\\n", -1);
}
\fB\(->\fR Color: blue Count: 4
Color: white Count: 9
Color: green Count: 5
Color: red Count: 1
.CE
.PP
Get an array element name list then individually look up each element value:
.PP
.CS
Tcl_SetStringObj(obj, NULL, 0);
\fBTcl_ArrayNames\fR(interp, varNameObj, NULL, obj, 0);
Tcl_ListObjGetElements(interp, obj, &size, &objPtr);
for (i = 0; i < size; ++i, ++objPtr) {
Tcl_WriteChars(outChan, "Color: ", -1);
Tcl_WriteObj(outChan, *objPtr);
Tcl_WriteChars(outChan, " Count: ", -1);
Tcl_WriteObj(outChan, Tcl_ObjGetVar2(
interp, varNameObj, *objPtr, 0));
Tcl_WriteChars(outChan, "\\n", -1);
}
\fB\(->\fR Color: blue Count: 4
Color: white Count: 9
Color: green Count: 5
Color: red Count: 1
.CE
.PP
Get array hash table statistics:
.PP
.CS
Tcl_SetStringObj(obj, NULL, 0);
\fBTcl_ArrayStatistics\fR(interp, varNameObj, obj, 0);
Tcl_WriteObj(outChan, obj);
Tcl_WriteChars(outChan, "\\n", -1);
\fB\(->\fR 4 entries in table, 4 buckets
number of buckets with 0 entries: 1
number of buckets with 1 entries: 2
number of buckets with 2 entries: 1
number of buckets with 3 entries: 0
number of buckets with 4 entries: 0
number of buckets with 5 entries: 0
number of buckets with 6 entries: 0
number of buckets with 7 entries: 0
number of buckets with 8 entries: 0
number of buckets with 9 entries: 0
number of buckets with 10 or more entries: 0
average search distance for entry: 1.2
.CE
.SH "SEE ALSO"
array(n), Tcl_NewObj(3), Tcl_NewListObj(3), Tcl_NewDictObj(3),
Tcl_ObjGetVar2(3), Tcl_GetObjResult(3), Tcl_TraceVar2(3)
.SH KEYWORDS
array, dict, dict value, dictionary, get variable, hash table, iteration,
interpreter, set, unset, value, variable
+1 -1
View File
@@ -4,7 +4,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH Tcl_CallWhenDeleted 3 7.0 Tcl "Tcl Library Procedures"
.so man.macros
.BS
+1 -1
View File
@@ -4,7 +4,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH Tcl_CommandComplete 3 "" Tcl "Tcl Library Procedures"
.so man.macros
.BS
+1 -1
View File
@@ -4,7 +4,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH Tcl_Concat 3 7.5 Tcl "Tcl Library Procedures"
.so man.macros
.BS
+1 -1
View File
@@ -4,7 +4,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH Tcl_CreateFileHandler 3 8.0 Tcl "Tcl Library Procedures"
.so man.macros
.BS
+1 -1
View File
@@ -4,7 +4,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH Tcl_CreateInterp 3 7.5 Tcl "Tcl Library Procedures"
.so man.macros
.BS
+1 -1
View File
@@ -4,7 +4,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH Tcl_CreateTimerHandler 3 7.5 Tcl "Tcl Library Procedures"
.so man.macros
.BS
+1 -1
View File
@@ -4,7 +4,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH Tcl_DetachPids 3 "" Tcl "Tcl Library Procedures"
.so man.macros
.BS
+1 -1
View File
@@ -3,7 +3,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH Tcl_DictObj 3 8.5 Tcl "Tcl Library Procedures"
.so man.macros
.BS
+1 -1
View File
@@ -4,7 +4,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH Tcl_DoWhenIdle 3 7.5 Tcl "Tcl Library Procedures"
.so man.macros
.BS
+1 -1
View File
@@ -3,7 +3,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH Tcl_PutEnv 3 "7.5" Tcl "Tcl Library Procedures"
.so man.macros
.BS
+1 -1
View File
@@ -3,7 +3,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH Tcl_ExprLongObj 3 8.0 Tcl "Tcl Library Procedures"
.so man.macros
.BS
+1 -1
View File
@@ -3,7 +3,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH Tcl_FindExecutable 3 8.1 Tcl "Tcl Library Procedures"
.so man.macros
.BS
+1 -1
View File
@@ -3,7 +3,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH Tcl_GetCwd 3 8.1 Tcl "Tcl Library Procedures"
.so man.macros
.BS
+1 -1
View File
@@ -3,7 +3,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH Tcl_GetIndexFromObj 3 8.1 Tcl "Tcl Library Procedures"
.so man.macros
.BS
+24 -9
View File
@@ -4,7 +4,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH Tcl_GetInt 3 "" Tcl "Tcl Library Procedures"
.so man.macros
.BS
@@ -51,27 +51,42 @@ in the interpreter's result, and nothing is stored at *\fIintPtr\fR
or *\fIdoublePtr\fR or *\fIboolPtr\fR.
.PP
\fBTcl_GetInt\fR expects \fIsrc\fR to consist of a collection
of integer digits, optionally signed and optionally preceded by
white space. If the first two characters of \fIsrc\fR
of integer digits, optionally signed and optionally preceded and
followed by white space. If the first two characters of \fIsrc\fR
after the optional white space and sign are
.QW 0x
.QW \fB0x\fR
then \fIsrc\fR is expected to be in hexadecimal form; otherwise,
if the first such characters are
.QW \fB0o\fR
then \fIsrc\fR is expected to be in octal form; otherwise,
if the first such characters are
.QW \fB0b\fR
then \fIsrc\fR is expected to be in binary form; otherwise,
if the first such character is
.QW 0
.QW \fB0\fR
then \fIsrc\fR
is expected to be in octal form; otherwise, \fIsrc\fR is
expected to be in decimal form.
.PP
\fBTcl_GetDouble\fR expects \fIsrc\fR to consist of a floating-point
number, which is: white space; a sign; a sequence of digits; a
decimal point; a sequence of digits; the letter
.QW e ;
decimal point
.QW \fB.\fR ;
a sequence of digits; the letter
.QW \fBe\fR ;
a signed decimal exponent; and more white space.
Any of the fields may be omitted, except that
the digits either before or after the decimal point must be present
and if the
.QW e
is present then it must be followed by the exponent number.
.QW \fBe\fR
is present then it must be followed by the exponent number. If there
are no fields apart from the sign and initial sequence of digits
(i.e., no decimal point or exponent indicator), that
initial sequence of digits should take one of the forms that
\fBTcl_GetInt\fR supports, described above. The use of
.QW \fB,\fR
as a decimal point is not supported nor should any other sort of
inter-digit separator be present.
.PP
\fBTcl_GetBoolean\fR expects \fIsrc\fR to specify a boolean
value. If \fIsrc\fR is any of \fB0\fR, \fBfalse\fR,
+1 -1
View File
@@ -3,7 +3,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH Tcl_GetOpenFile 3 8.0 Tcl "Tcl Library Procedures"
.so man.macros
.BS
+1 -1
View File
@@ -3,7 +3,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH Tcl_GetTime 3 8.4 Tcl "Tcl Library Procedures"
.so man.macros
.BS
+1 -1
View File
@@ -281,7 +281,7 @@ The \fIhashKeyProc\fR member contains the address of a function called to
calculate a hash value for the key.
.PP
.CS
typedef unsigned int \fBTcl_HashKeyProc\fR(
typedef TCL_HASH_TYPE \fBTcl_HashKeyProc\fR(
Tcl_HashTable *\fItablePtr\fR,
void *\fIkeyPtr\fR);
.CE
+1 -1
View File
@@ -1,7 +1,7 @@
'\"
'\" Copyright (c) 1998-2000 by Scriptics Corporation.
'\" All rights reserved.
'\"
'\"
.TH Tcl_Init 3 8.0 Tcl "Tcl Library Procedures"
.so man.macros
.BS
+4 -4
View File
@@ -3,7 +3,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH Tcl_InitStubs 3 8.1 Tcl "Tcl Library Procedures"
.so man.macros
.BS
@@ -23,11 +23,11 @@ Tcl interpreter handle.
A version string consisting of one or more decimal numbers
separated by dots.
.AP int exact in
Non-zero means that only the particular version specified by
1 means that only the particular version specified by
\fIversion\fR is acceptable.
Zero means that versions newer than \fIversion\fR are also
0 means that versions newer than \fIversion\fR are also
acceptable as long as they have the same major version number
as \fIversion\fR.
as \fIversion\fR. Other bits have no effect.
.BE
.SH INTRODUCTION
.PP
+1 -1
View File
@@ -3,7 +3,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH Tcl_LimitCheck 3 8.5 Tcl "Tcl Library Procedures"
.so man.macros
.BS
+1 -1
View File
@@ -4,7 +4,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH Tcl_LinkVar 3 7.5 Tcl "Tcl Library Procedures"
.so man.macros
.BS
+1 -1
View File
@@ -4,7 +4,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH Load 3 8.6 Tcl "Tcl Library Procedures"
.so man.macros
.BS
+2 -2
View File
@@ -3,10 +3,10 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
'\" Note that some of these functions do not seem to belong, but they
'\" were all introduced with the same TIP (#139)
'\"
'\"
.TH Tcl_Namespace 3 8.5 Tcl "Tcl Library Procedures"
.so man.macros
.BS
+1 -1
View File
@@ -130,7 +130,7 @@ for the new channel, \fIhostName\fR points to a string containing
the name of the client host making the connection, and \fIport\fR
will contain the client's port number.
The new channel
is opened for both input and output.
is opened for both input and output.
If \fIproc\fR raises an error, the connection is closed automatically.
\fIProc\fR has no return value, but if it wishes to reject the
connection it can close \fIchannel\fR.
+1 -1
View File
@@ -3,7 +3,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH Tcl_ParseArgsObjv 3 8.6 Tcl "Tcl Library Procedures"
.so man.macros
.BS
+1 -1
View File
@@ -4,7 +4,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH Tcl_Preserve 3 7.5 Tcl "Tcl Library Procedures"
.so man.macros
.BS
+1 -1
View File
@@ -4,7 +4,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH Tcl_PrintDouble 3 8.0 Tcl "Tcl Library Procedures"
.so man.macros
.BS
+1 -1
View File
@@ -3,7 +3,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH Tcl_RecordAndEvalObj 3 8.0 Tcl "Tcl Library Procedures"
.so man.macros
.BS
+1 -1
View File
@@ -4,7 +4,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH Tcl_RecordAndEval 3 7.4 Tcl "Tcl Library Procedures"
.so man.macros
.BS
+1 -1
View File
@@ -3,7 +3,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH Tcl_SetErrno 3 8.3 Tcl "Tcl Library Procedures"
.so man.macros
.BS
+1 -1
View File
@@ -4,7 +4,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH Tcl_SetRecursionLimit 3 7.0 Tcl "Tcl Library Procedures"
.so man.macros
.BS
+1 -1
View File
@@ -3,7 +3,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH Tcl_SignalId 3 8.3 Tcl "Tcl Library Procedures"
.so man.macros
.BS
+1 -1
View File
@@ -4,7 +4,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH Tcl_Sleep 3 7.5 Tcl "Tcl Library Procedures"
.so man.macros
.BS
+1 -1
View File
@@ -4,7 +4,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH Tcl_SplitList 3 8.0 Tcl "Tcl Library Procedures"
.so man.macros
.BS
+1 -1
View File
@@ -3,7 +3,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH Tcl_SplitPath 3 7.5 Tcl "Tcl Library Procedures"
.so man.macros
.BS
+1 -1
View File
@@ -3,7 +3,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH Tcl_StaticPackage 3 7.5 Tcl "Tcl Library Procedures"
.so man.macros
.BS
+1 -1
View File
@@ -3,7 +3,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH "Standard Channels" 3 7.5 Tcl "Tcl Library Procedures"
.so man.macros
.BS
+1 -1
View File
@@ -4,7 +4,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH Tcl_StringMatch 3 8.5 Tcl "Tcl Library Procedures"
.so man.macros
.BS
+1 -1
View File
@@ -3,7 +3,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH Tcl_SubstObj 3 8.4 Tcl "Tcl Library Procedures"
.so man.macros
.BS
+2 -2
View File
@@ -1,8 +1,8 @@
'\"
'\"
'\" Copyright (c) 1992-1999 Karl Lehenbauer and Mark Diekhans.
'\" Copyright (c) 2000 by Scriptics Corporation.
'\" All rights reserved.
'\"
'\"
.TH TCL_MEM_DEBUG 3 8.1 Tcl "Tcl Library Procedures"
.so man.macros
.BS
+1 -1
View File
@@ -3,7 +3,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH TclZlib 3 8.6 Tcl "Tcl Library Procedures"
.so man.macros
.BS
+58 -22
View File
@@ -22,6 +22,42 @@ Unless otherwise specified for individual commands below,
\fIarrayName\fR must be the name of an existing array variable.
The \fIoption\fR argument determines what action is carried
out by the command.
.PP
Many array commands accept \fImode\fR and \fIpattern\fR arguments. These
arguments specify a filter to limit which array elements are included in the
operation. If neither argument is specified, no filtering is applied, and the
entire array is processed. If only one argument is specified, it is used as the
\fIpattern\fR argument, and \fB\-glob\fR is used as the default value for
\fImode\fR. If both arguments are specified, the first is used as \fImode\fR
and the second as \fIpattern\fR. The \fImode\fR argument designates which
matching rules to use to match \fIpattern\fR against the names of the elements
in the array. The legal \fImode\fR values are:
.TP
\fB\-exact\fR
.
\fIPattern\fR is a literal string that is compared for exact equality against
each array element name. This mode has limited utility because all uses of the
\fBarray\fR command with \fB-exact\fR matching can be implemented by operating
directly on the array element with standard \fIname\fB(\fIindex\fB)\fR notation.
.TP
\fB\-glob\fR
.
\fIPattern\fR is a glob-style pattern which is matched against each array
element name using the same rules as the \fBstring match\fR command.
\fIPattern\fR must match the entire array element name from beginning to end.
To match substrings, place \fB*\fR at either end of \fIpattern\fR. This mode is
the default if no \fImode\fR is specified.
.TP
\fB\-regexp\fR
.
\fIPattern\fR is treated as a regular expression and matched against each array
element name using the rules described in the \fBre_syntax\fR reference page.
Unless anchored by the \fB^\fR and \fB$\fR constraints, \fIpattern\fR matches
substrings. Thus, an empty \fIpattern\fR matches every possible array element
name. It is an error for \fIpattern\fR to not be a valid regular expression,
but this error condition is only detected and reported when \fIarrayName\fR is a
non-empty array.
.PP
The legal \fIoptions\fR (which may be abbreviated) are:
.TP
\fBarray anymore \fIarrayName searchId\fR
@@ -43,20 +79,20 @@ which search on \fIarrayName\fR to destroy, and must have
been the return value from a previous invocation of
\fBarray startsearch\fR. Returns an empty string.
.TP
\fBarray exists \fIarrayName\fR
\fBarray exists \fIarrayName\fR ?\fImode\fR? ?\fIpattern\fR?
Returns 1 if \fIarrayName\fR is an array variable, 0 if there
is no variable by that name or if it is a scalar variable.
If \fIpattern\fR is specified, this command instead checks if one or more
elements of \fIarrayName\fR match the filter defined by \fImode\fR and
\fIpattern\fR, returning 1 or 0 if the match succeeds or fails, respectively.
.TP
\fBarray get \fIarrayName\fR ?\fIpattern\fR?
\fBarray get \fIarrayName\fR ?\fImode\fR? ?\fIpattern\fR?
Returns a list containing pairs of elements. The first
element in each pair is the name of an element in \fIarrayName\fR
and the second element of each pair is the value of the
array element. The order of the pairs is undefined.
If \fIpattern\fR is not specified, then all of the elements of the
array are included in the result.
If \fIpattern\fR is specified, then only those elements whose names
match \fIpattern\fR (using the matching rules of
\fBstring match\fR) are included.
The \fImode\fR and \fIpattern\fR arguments can be used to limit which array
elements are included in the result.
If \fIarrayName\fR is not the name of an array variable, or if
the array contains no elements, then an empty list is returned.
If traces on the array modify the list of elements, the elements
@@ -65,15 +101,10 @@ returned are those that exist both before and after the call to
.TP
\fBarray names \fIarrayName\fR ?\fImode\fR? ?\fIpattern\fR?
Returns a list containing the names of all of the elements in
the array that match \fIpattern\fR. \fIMode\fR may be one of
\fB\-exact\fR, \fB\-glob\fR, or \fB\-regexp\fR. If specified, \fImode\fR
designates which matching rules to use to match \fIpattern\fR against
the names of the elements in the array. If not specified, \fImode\fR
defaults to \fB\-glob\fR. See the documentation for \fBstring match\fR
for information on glob style matching, and the documentation for
\fBregexp\fR for information on regexp matching.
If \fIpattern\fR is omitted then the command returns all of
the element names in the array. If there are no (matching) elements
the array.
The \fImode\fR and \fIpattern\fR arguments can be used to limit which array
element names are included in the result.
If there are no (matching) elements
in the array, or if \fIarrayName\fR is not the name of an array
variable, then an empty string is returned.
.TP
@@ -99,16 +130,20 @@ If the variable \fIarrayName\fR does not already exist
and \fIlist\fR is empty,
\fIarrayName\fR is created with an empty array value.
.TP
\fBarray size \fIarrayName\fR
Returns a decimal string giving the number of elements in the
\fBarray size \fIarrayName\fR ?\fImode\fR? ?\fIpattern\fR?
Returns an integer giving the number of elements in the
array.
The \fImode\fR and \fIpattern\fR arguments can be used to limit which array
elements are counted toward the result.
If \fIarrayName\fR is not the name of an array then 0 is returned.
.TP
\fBarray startsearch \fIarrayName\fR
\fBarray startsearch \fIarrayName\fR ?\fImode\fR? ?\fIpattern\fR?
This command initializes an element-by-element search through the
array given by \fIarrayName\fR, such that invocations of the
\fBarray nextelement\fR command will return the names of the
individual elements in the array.
The \fImode\fR and \fIpattern\fR arguments can be used to limit which array
element names are returned by future invocations of \fBarray nextelement\fR.
When the search has been completed, the \fBarray donesearch\fR
command should be invoked.
The return value is a
@@ -126,9 +161,10 @@ that represents the array. This information includes the number of
entries in the table, the number of buckets, and the utilization of
the buckets.
.TP
\fBarray unset \fIarrayName\fR ?\fIpattern\fR?
Unsets all of the elements in the array that match \fIpattern\fR (using the
matching rules of \fBstring match\fR). If \fIarrayName\fR is not the name
\fBarray unset \fIarrayName\fR ?\fImode\fR? ?\fIpattern\fR?
Unsets all of the elements in the array that match the filter specified by the
\fImode\fR and \fIpattern\fR arguments.
If \fIarrayName\fR is not the name
of an array variable or there are no matching elements in the array, no
error will be raised. If \fIpattern\fR is omitted and \fIarrayName\fR is
an array variable, then the command unsets the entire array.
+1 -1
View File
@@ -4,7 +4,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH break n "" Tcl "Tcl Built-In Commands"
.so man.macros
.BS
+1 -1
View File
@@ -4,7 +4,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH case n 7.0 Tcl "Tcl Built-In Commands"
.so man.macros
.BS
+1 -1
View File
@@ -4,7 +4,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH cd n "" Tcl "Tcl Built-In Commands"
.so man.macros
.BS
+6 -7
View File
@@ -89,10 +89,9 @@ have 59 or 61 seconds.
.TP
\fIunit\fR
One of the words, \fBseconds\fR, \fBminutes\fR, \fBhours\fR,
\fBdays\fR, \fBweeks\fR, \fBmonths\fR, or \fByears\fR, or
any unique prefix of such a word. Used in conjunction with \fIcount\fR
to identify an interval of time, for example, \fI3 seconds\fR or
\fI1 year\fR.
\fBdays\fR, \fBweekdays\fR, \fBweeks\fR, \fBmonths\fR, or \fByears\fR.
Used in conjunction with \fIcount\fR to identify an interval of time,
for example, \fI3 seconds\fR or \fI1 year\fR.
.SS "OPTIONS"
.TP
\fB\-base\fR time
@@ -175,8 +174,7 @@ given as its first argument. The remaining arguments (other than the
possible \fB\-timezone\fR, \fB\-locale\fR and \fB\-gmt\fR options)
are integers and keywords in alternation, where the keywords are chosen
from \fBseconds\fR, \fBminutes\fR, \fBhours\fR,
\fBdays\fR, \fBweeks\fR, \fBmonths\fR, or \fByears\fR, or
any unique prefix of such a word.
\fBdays\fR, \fBweekdays\fR, \fBweeks\fR, \fBmonths\fR, or \fByears\fR.
.PP
Addition of seconds, minutes and hours is fairly straightforward;
the given time increment (times sixty for minutes, or 3600 for hours)
@@ -213,7 +211,8 @@ the given time to a calendar day and time of day in the appropriate
time zone and locale. The requisite number of days (weeks are converted
to days by multiplying by seven) is added to the calendar day, and
the date and time are then converted back to a count of seconds from
the epoch time.
the epoch time. The \fBweekdays\fR keyword is similar to \fBdays\fR,
with the only difference that weekends - Saturdays and Sundays - are skipped.
.PP
Adding and subtracting a given number of days across the point that
the time changes at the start or end of summer time (Daylight Saving Time)
+1 -1
View File
@@ -4,7 +4,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH close n 7.5 Tcl "Tcl Built-In Commands"
.so man.macros
.BS
+2 -1
View File
@@ -4,7 +4,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH concat n 8.3 Tcl "Tcl Built-In Commands"
.so man.macros
.BS
@@ -20,6 +20,7 @@ This command joins each of its arguments together with spaces after
trimming leading and trailing white-space from each of them. If all of the
arguments are lists, this has the same effect as concatenating them
into a single list.
Arguments that are empty (after trimming) are ignored entirely.
It permits any number of arguments;
if no \fIarg\fRs are supplied, the result is an empty string.
.SH EXAMPLES
+1 -1
View File
@@ -4,7 +4,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH continue n "" Tcl "Tcl Built-In Commands"
.so man.macros
.BS
+1 -1
View File
@@ -3,7 +3,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH coroutine n 8.6 Tcl "Tcl Built-In Commands"
.so man.macros
.BS
+1 -1
View File
@@ -4,7 +4,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH eof n 7.5 Tcl "Tcl Built-In Commands"
.so man.macros
.BS
+1 -1
View File
@@ -4,7 +4,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH eval n "" Tcl "Tcl Built-In Commands"
.so man.macros
.BS
+1 -1
View File
@@ -4,7 +4,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH exit n "" Tcl "Tcl Built-In Commands"
.so man.macros
.BS
+171 -214
View File
@@ -17,14 +17,14 @@ expr \- Evaluate an expression
.BE
.SH DESCRIPTION
.PP
Concatenates \fIarg\fRs (adding separator spaces between them),
evaluates the result as a Tcl expression, and returns the value.
The operators permitted in Tcl expressions include a subset of
Concatenates \fIarg\fRs, separated by a space, into an expression, and evaluates
that expression, returning its value.
The operators permitted in an expression include a subset of
the operators permitted in C expressions. For those operators
common to both Tcl and C, Tcl applies the same meaning and precedence
as the corresponding C operators.
Expressions almost always yield numeric results
(integer or floating-point values).
The value of an expression is often a numeric result, either an integer or a
floating-point value, but may also be a non-numeric value.
For example, the expression
.PP
.CS
@@ -32,78 +32,68 @@ For example, the expression
.CE
.PP
evaluates to 14.2.
Tcl expressions differ from C expressions in the way that
operands are specified. Also, Tcl expressions support
non-numeric operands and string comparisons, as well as some
Expressions differ from C expressions in the way that
operands are specified. Expressions also support
non-numeric operands, string comparisons, and some
additional operators not found in C.
.PP
When an expression evaluates to an integer, the value is the decimal form of
the integer, and when an expression evaluates to a floating-point number, the
value is the form produced by the \fB%g\fR format specifier of Tcl's
\fBformat\fR command.
.SS OPERANDS
.PP
A Tcl expression consists of a combination of operands, operators,
parentheses and commas.
White space may be used between the operands and operators and
parentheses (or commas); it is ignored by the expression's instructions.
Where possible, operands are interpreted as integer values.
Integer values may be specified in decimal (the normal case), in binary
(if the first two characters of the operand are \fB0b\fR), in octal
(if the first two characters of the operand are \fB0o\fR), or in hexadecimal
(if the first two characters of the operand are \fB0x\fR). For
compatibility with older Tcl releases, an octal integer value is also
indicated simply when the first character of the operand is \fB0\fR,
whether or not the second character is also \fBo\fR.
If an operand does not have one of the integer formats given
above, then it is treated as a floating-point number if that is
possible. Floating-point numbers may be specified in any of several
common formats making use of the decimal digits, the decimal point \fB.\fR,
the characters \fBe\fR or \fBE\fR indicating scientific notation, and
the sign characters \fB+\fR or \fB\-\fR. For example, all of the
following are valid floating-point numbers: 2.1, 3., 6e4, 7.91e+16.
Also recognized as floating point values are the strings \fBInf\fR
and \fBNaN\fR making use of any case for each character.
If no numeric interpretation is possible (note that all literal
operands that are not numeric or boolean must be quoted with either
braces or with double quotes), then an operand is left as a string
(and only a limited set of operators may be applied to it).
An expression consists of a combination of operands, operators, parentheses and
commas, possibly with whitespace between any of these elements, which is
ignored.
An integer operand may be specified in decimal, binary
(the first two characters are \fB0b\fR), octal
(the first two characters are \fB0o\fR), or hexadecimal
(the first two characters are \fB0x\fR) form. For
compatibility with older Tcl releases, an operand that begins with \fB0\fR is
interpreted as an octal integer even if the second character is not \fBo\fR.
A floating-point number may be specified in any of several
common decimal formats, and may use the decimal point \fB.\fR,
\fBe\fR or \fBE\fR for scientific notation, and
the sign characters \fB+\fR and \fB\-\fR. The
following are all valid floating-point numbers: 2.1, 3., 6e4, 7.91e+16.
The strings \fBInf\fR
and \fBNaN\fR, in any combination of case, are also recognized as floating point
values. An operand that doesn't have a numeric interpretation must be quoted
with either braces or with double quotes.
.PP
Operands may be specified in any of the following ways:
An operand may be specified in any of the following ways:
.IP [1]
As a numeric value, either integer or floating-point.
.IP [2]
As a boolean value, using any form understood by \fBstring is\fR
\fBboolean\fR.
.IP [3]
As a Tcl variable, using standard \fB$\fR notation.
The variable's value will be used as the operand.
As a variable, using standard \fB$\fR notation.
The value of the variable is then the value of the operand.
.IP [4]
As a string enclosed in double-quotes.
The expression parser will perform backslash, variable, and
command substitutions on the information between the quotes,
and use the resulting value as the operand
Backslash, variable, and command substitution are performed as described in
\fBTcl\fR.
.IP [5]
As a string enclosed in braces.
The characters between the open brace and matching close brace
will be used as the operand without any substitutions.
The operand is treated as a braced value as described in \fBTcl\fR.
.IP [6]
As a Tcl command enclosed in brackets.
The command will be executed and its result will be used as
the operand.
Command substitution is performed as described in \fBTcl\fR.
.IP [7]
As a mathematical function whose arguments have any of the above
forms for operands, such as \fBsin($x)\fR. See \fBMATH FUNCTIONS\fR below for
As a mathematical function such as \fBsin($x)\fR, whose arguments have any of the above
forms for operands. See \fBMATH FUNCTIONS\fR below for
a discussion of how mathematical functions are handled.
.PP
Where the above substitutions occur (e.g. inside quoted strings), they
are performed by the expression's instructions.
However, the command parser may already have performed one round of
substitution before the expression processor was called.
As discussed below, it is usually best to enclose expressions
in braces to prevent the command parser from performing substitutions
on the contents.
Because \fBexpr\fR parses and performs substitutions on values that have
already been parsed and substituted by \fBTcl\fR, it is usually best to enclose
expressions in braces to avoid the first round of substitutions by
\fBTcl\fR.
.PP
For some examples of simple expressions, suppose the variable
\fBa\fR has the value 3 and
the variable \fBb\fR has the value 6.
Then the command on the left side of each of the lines below
will produce the value on the right side of the line:
Below are some examples of simple expressions where the value of \fBa\fR is 3
and the value of \fBb\fR is 6. The command on the left side of each line
produces the value on the right side.
.PP
.CS
.ta 6c
@@ -114,34 +104,41 @@ will produce the value on the right side of the line:
.CE
.SS OPERATORS
.PP
The valid operators (most of which are also available as commands in
the \fBtcl::mathop\fR namespace; see the \fBmathop\fR(n) manual page
for details) are listed below, grouped in decreasing order of precedence:
For operators having both a numeric mode and a string mode, the numeric mode is
chosen when all operands have a numeric interpretation. The integer
interpretation of an operand is preferred over the floating-point
interpretation. To ensure string operations on arbitrary values it is generally a
good idea to use \fBeq\fR, \fBne\fR, or the \fBstring\fR command instead of
more versatile operators such as \fB==\fR.
.PP
Unless otherwise specified, operators accept non-numeric operands. The value
of a boolean operation is 1 if true, 0 otherwise. See also \fBstring is\fR
\fBboolean\fR. The valid operators, most of which are also available as
commands in the \fBtcl::mathop\fR namespace (see \fBmathop\fR(n)), are listed
below, grouped in decreasing order of precedence:
.TP 20
\fB\-\0\0+\0\0~\0\0!\fR
.
Unary minus, unary plus, bit-wise NOT, logical NOT. None of these operators
may be applied to string operands, and bit-wise NOT may be
applied only to integers.
Unary minus, unary plus, bit-wise NOT, logical NOT. These operators
may only be applied to numeric operands, and bit-wise NOT may only be
applied to integers.
.TP 20
\fB**\fR
.
Exponentiation. Valid for any numeric operands.
Exponentiation. Valid for numeric operands.
.TP 20
\fB*\0\0/\0\0%\fR
.
Multiply, divide, remainder. None of these operators may be
applied to string operands, and remainder may be applied only
to integers.
The remainder will always have the same sign as the divisor and
an absolute value smaller than the absolute value of the divisor.
Multiply and divide, which are valid for numeric operands, and remainder, which
is valid for integers. The remainder, an absolute value smaller than the
absolute value of the divisor, has the same sign as the divisor.
.RS
.PP
When applied to integers, the division and remainder operators can be
considered to partition the number line into a sequence of equal-sized
adjacent non-overlapping pieces where each piece is the size of the divisor;
the division result identifies which piece the divisor lay within, and the
remainder result identifies where within that piece the divisor lay. A
When applied to integers, division and remainder can be
considered to partition the number line into a sequence of
adjacent non-overlapping pieces, where each piece is the size of the divisor;
the quotient identifies which piece the dividend lies within, and the
remainder identifies where within that piece the dividend lies. A
consequence of this is that the result of
.QW "-57 \fB/\fR 10"
is always -6, and the result of
@@ -151,177 +148,157 @@ is always 3.
.TP 20
\fB+\0\0\-\fR
.
Add and subtract. Valid for any numeric operands.
Add and subtract. Valid for numeric operands.
.TP 20
\fB<<\0\0>>\fR
.
Left and right shift. Valid for integer operands only.
Left and right shift. Valid for integers.
A right shift always propagates the sign bit.
.TP 20
\fB<\0\0>\0\0<=\0\0>=\fR
.
Boolean less, greater, less than or equal, and greater than or equal.
Each operator produces 1 if the condition is true, 0 otherwise.
These operators may be applied to strings as well as numeric operands,
in which case string comparison is used.
Boolean less than, greater than, less than or equal, and greater than or equal.
.TP 20
\fB==\0\0!=\fR
.
Boolean equal and not equal. Each operator produces a zero/one result.
Valid for all operand types.
Boolean equal and not equal.
.TP 20
\fBeq\0\0ne\fR
.
Boolean string equal and string not equal. Each operator produces a
zero/one result. The operand types are interpreted only as strings.
Boolean string equal and string not equal.
.TP 20
\fBin\0\0ni\fR
.
List containment and negated list containment. Each operator produces
a zero/one result and treats its first argument as a string and its
second argument as a Tcl list. The \fBin\fR operator indicates
whether the first argument is a member of the second argument list;
the \fBni\fR operator inverts the sense of the result.
List containment and negated list containment. The first argument is
interpreted as a string, the second as a list. \fBin\fR tests for membership
in the list, and \fBni\fR is the inverse.
.TP 20
\fB&\fR
.
Bit-wise AND. Valid for integer operands only.
Bit-wise AND. Valid for integer operands.
.TP 20
\fB^\fR
.
Bit-wise exclusive OR. Valid for integer operands only.
Bit-wise exclusive OR. Valid for integer operands.
.TP 20
\fB|\fR
.
Bit-wise OR. Valid for integer operands only.
Bit-wise OR. Valid for integer operands.
.TP 20
\fB&&\fR
.
Logical AND. Produces a 1 result if both operands are non-zero,
0 otherwise.
Valid for boolean and numeric (integers or floating-point) operands only.
Logical AND. If both operands are true, the result is 1, or 0 otherwise.
.TP 20
\fB||\fR
.
Logical OR. Produces a 0 result if both operands are zero, 1 otherwise.
Valid for boolean and numeric (integers or floating-point) operands only.
Logical OR. If both operands are false, the result is 0, or 1 otherwise.
.TP 20
\fIx\fB?\fIy\fB:\fIz\fR
.
If-then-else, as in C. If \fIx\fR
evaluates to non-zero, then the result is the value of \fIy\fR.
Otherwise the result is the value of \fIz\fR.
The \fIx\fR operand must have a boolean or numeric value.
If-then-else, as in C. If \fIx\fR is false , the result is the value of
\fIy\fR. Otherwise the result is the value of \fIz\fR.
.PP
See the C manual for more details on the results
produced by each operator.
The exponentiation operator promotes types like the multiply and
divide operators, and produces a result that is the same as the output
of the \fBpow\fR function (after any type conversions.)
All of the binary operators but exponentiation group left-to-right
within the same precedence level; exponentiation groups right-to-left. For example, the command
The exponentiation operator promotes types in the same way that the multiply
and divide operators do, and the result is is the same as the result of
\fBpow\fR.
Exponentiation groups right-to-left within a precedence level. Other binary
operators group left-to-right. For example, the value of
.PP
.CS
\fBexpr\fR {4*2 < 7}
.CE
.PP
returns 0, while
is 0, while the value of
.PP
.CS
\fBexpr\fR {2**3**2}
.CE
.PP
returns 512.
is 512.
.PP
The \fB&&\fR, \fB||\fR, and \fB?:\fR operators have
As in C, \fB&&\fR, \fB||\fR, and \fB?:\fR feature
.QW "lazy evaluation" ,
just as in C, which means that operands are not evaluated if they are
not needed to determine the outcome. For example, in the command
which means that operands are not evaluated if they are
not needed to determine the outcome. For example, in
.PP
.CS
\fBexpr\fR {$v ? [a] : [b]}
.CE
.PP
only one of
.QW \fB[a]\fR
or
.QW \fB[b]\fR
will actually be evaluated,
depending on the value of \fB$v\fR. Note, however, that this is
only true if the entire expression is enclosed in braces; otherwise
the Tcl parser will evaluate both
.QW \fB[a]\fR
and
.QW \fB[b]\fR
before invoking the \fBexpr\fR command.
only one of \fB[a]\fR or \fB[b]\fR is evaluated,
depending on the value of \fB$v\fR. This is not true of the normal Tcl parser,
so it is normally recommended to enclose the arguments to \fBexpr\fR in braces.
Without braces, as in
\fBexpr\fR $v ? [a] : [b]
both \fB[a]\fR and \fB[b]\fR are evaluated before \fBexpr\fR is even called.
.PP
For more details on the results
produced by each operator, see the documentation for C.
.SS "MATH FUNCTIONS"
.PP
When the expression parser encounters a mathematical function
such as \fBsin($x)\fR, it replaces it with a call to an ordinary
Tcl function in the \fBtcl::mathfunc\fR namespace. The processing
of an expression such as:
A mathematical function such as \fBsin($x)\fR is replaced with a call to an ordinary
Tcl command in the \fBtcl::mathfunc\fR namespace. The evaluation
of an expression such as
.PP
.CS
\fBexpr\fR {sin($x+$y)}
.CE
.PP
is the same in every way as the processing of:
is the same in every way as the evaluation of
.PP
.CS
\fBexpr\fR {[tcl::mathfunc::sin [\fBexpr\fR {$x+$y}]]}
.CE
.PP
which in turn is the same as the processing of:
which in turn is the same as the evaluation of
.PP
.CS
tcl::mathfunc::sin [\fBexpr\fR {$x+$y}]
.CE
.PP
The executor will search for \fBtcl::mathfunc::sin\fR using the usual
rules for resolving functions in namespaces. Either
\fB::tcl::mathfunc::sin\fR or \fB[namespace
current]::tcl::mathfunc::sin\fR will satisfy the request, and others
may as well (depending on the current \fBnamespace path\fR setting).
\fBtcl::mathfunc::sin\fR is resolved as described in
\fBNAMESPACE RESOLUTION\fR in the \fBnamespace\fR(n) documentation. Given the
default value of \fBnamespace path\fR, \fB[namespace
current]::tcl::mathfunc::sin\fR or \fB::tcl::mathfunc::sin\fR are the typical
resolutions.
.PP
Some mathematical functions have several arguments, separated by commas like in C. Thus:
As in C, a mathematical function may accept multiple arguments separated by commas. Thus,
.PP
.CS
\fBexpr\fR {hypot($x,$y)}
.CE
.PP
ends up as
becomes
.PP
.CS
tcl::mathfunc::hypot $x $y
.CE
.PP
See the \fBmathfunc\fR(n) manual page for the math functions that are
See the \fBmathfunc\fR(n) documentation for the math functions that are
available by default.
.SS "TYPES, OVERFLOW, AND PRECISION"
.PP
All internal computations involving integers are done calling on the
LibTomMath multiple precision integer library as required so that all
integer calculations are performed exactly. Note that in Tcl releases
prior to 8.5, integer calculations were performed with one of the C types
When needed to guarantee exact performance, internal computations involving
integers use the LibTomMath multiple precision integer library. In Tcl releases
prior to 8.5, integer calculations were performed using one of the C types
\fIlong int\fR or \fITcl_WideInt\fR, causing implicit range truncation
in those calculations where values overflowed the range of those types.
Any code that relied on these implicit truncations will need to explicitly
add \fBint()\fR or \fBwide()\fR function calls to expressions at the points
where such truncation is required to take place.
Any code that relied on these implicit truncations should instead call
\fBint()\fR or \fBwide()\fR, which do truncate.
.PP
All internal computations involving floating-point are
done with the C type \fIdouble\fR.
When converting a string to floating-point, exponent overflow is
Internal floating-point computations are
performed using the \fIdouble\fR C type.
When converting a string to floating-point value, exponent overflow is
detected and results in the \fIdouble\fR value of \fBInf\fR or
\fB\-Inf\fR as appropriate. Floating-point overflow and underflow
are detected to the degree supported by the hardware, which is generally
pretty reliable.
fairly reliable.
.PP
Conversion among internal representations for integer, floating-point,
and string operands is done automatically as needed.
For arithmetic computations, integers are used until some
floating-point number is introduced, after which floating-point is used.
For example,
Conversion among internal representations for integer, floating-point, and
string operands is done automatically as needed. For arithmetic computations,
integers are used until some floating-point number is introduced, after which
floating-point values are used. For example,
.PP
.CS
\fBexpr\fR {5 / 4}
@@ -335,82 +312,62 @@ returns 1, while
.CE
.PP
both return 1.25.
Floating-point values are always returned with a
A floating-point result can be distinguished from an integer result by the
presence of either
.QW \fB.\fR
or an
or
.QW \fBe\fR
so that they will not look like integer values. For example,
.PP
. For example,
.PP
.CS
\fBexpr\fR {20.0/5.0}
.CE
.PP
returns \fB4.0\fR, not \fB4\fR.
.SS "STRING OPERATIONS"
.PP
String values may be used as operands of the comparison operators,
although the expression evaluator tries to do comparisons as integer
or floating-point when it can,
i.e., when all arguments to the operator allow numeric interpretations,
except in the case of the \fBeq\fR and \fBne\fR operators.
If one of the operands of a comparison is a string and the other
has a numeric value, a canonical string representation of the numeric
operand value is generated to compare with the string operand.
Canonical string representation for integer values is a decimal string
format. Canonical string representation for floating-point values
is that produced by the \fB%g\fR format specifier of Tcl's
\fBformat\fR command. For example, the commands
.PP
.CS
\fBexpr\fR {"0x03" > "2"}
\fBexpr\fR {"0y" > "0x12"}
.CE
.PP
both return 1. The first comparison is done using integer
comparison, and the second is done using string comparison.
Because of Tcl's tendency to treat values as numbers whenever
possible, it is not generally a good idea to use operators like \fB==\fR
when you really want string comparison and the values of the
operands could be arbitrary; it is better in these cases to use
the \fBeq\fR or \fBne\fR operators, or the \fBstring\fR command instead.
.SH "PERFORMANCE CONSIDERATIONS"
.PP
Enclose expressions in braces for the best speed and the smallest
storage requirements.
This allows the Tcl bytecode compiler to generate the best code.
.PP
As mentioned above, expressions are substituted twice:
once by the Tcl parser and once by the \fBexpr\fR command.
For example, the commands
Where an expression contains syntax that Tcl would otherwise perform
substitutions on, enclosing an expression in braces or otherwise quoting it
so that it's a static value allows the Tcl compiler to generate bytecode for
the expression, resulting in better speed and smaller storage requirements.
This also avoids issues that can arise if Tcl is allowed to perform
substitution on the value before \fBexpr\fR is called.
.PP
In the following example, the value of the expression is 11 because the Tcl parser first
substitutes \fB$b\fR and \fBexpr\fR then substitutes \fB$a\fR. Enclosing the
expression in braces would result in a syntax error.
.CS
set a 3
set b {$a + 2}
\fBexpr\fR $b*4
.CE
.PP
return 11, not a multiple of 4.
This is because the Tcl parser will first substitute \fB$a + 2\fR for
the variable \fBb\fR,
then the \fBexpr\fR command will evaluate the expression \fB$a + 2*4\fR.
.PP
Most expressions do not require a second round of substitutions.
Either they are enclosed in braces or, if not,
their variable and command substitutions yield numbers or strings
that do not themselves require substitutions.
However, because a few unbraced expressions
need two rounds of substitutions,
the bytecode compiler must emit
additional instructions to handle this situation.
The most expensive code is required for
unbraced expressions that contain command substitutions.
These expressions must be implemented by generating new code
each time the expression is executed.
When the expression is unbraced to allow the substitution of a function or
operator, consider using the commands documented in the \fBmathfunc\fR(n) or
\fBmathop\fR(n) manual pages directly instead.
When an expression is generated at runtime, like the one above is, the bytcode
compiler must ensure that new code is generated each time the expression
is evaluated. This is the most costly kind of expression from a performance
perspective. In such cases, consider directly using the commands described in
the \fBmathfunc\fR(n) or \fBmathop\fR(n) documentation instead of \fBexpr\fR.
Most expressions are not formed at runtime, but are literal strings or contain
substitutions that don't introduce other substitutions. To allow the bytecode
compiler to work with an expression as a string literal at compilation time,
ensure that it contains no substitutions or that it is enclosed in braces or
otherwise quoted to prevent Tcl from performing substitutions, allowing
\fBexpr\fR to perform them instead.
.SH EXAMPLES
.PP
A numeric comparison whose result is 1:
.CS
\fBexpr\fR {"0x03" > "2"}
.CE
.PP
A string comparison whose result is 1:
.CS
\fBexpr\fR {"0y" > "0x12"}
.CE
.PP
Define a procedure that computes an
.QW interesting
mathematical function:
@@ -444,8 +401,8 @@ each other:
puts "a and b are [\fBexpr\fR {$a eq $b ? {equal} : {different}}]"
.CE
.PP
Set a variable to whether an environment variable is both defined at
all and also set to a true boolean value:
Set a variable indicating whether an environment variable is defined and has
value of true:
.PP
.CS
set isTrue [\fBexpr\fR {
+1 -1
View File
@@ -1,4 +1,4 @@
'\"
'\"
'\" Copyright (c) 1996 Sun Microsystems, Inc.
'\"
'\" See the file "license.terms" for information on usage and redistribution
+1 -1
View File
@@ -390,7 +390,7 @@ that use the third component do not attempt to perform tilde
substitution.
.RE
.TP
\fBfile stat \fIname varName\fR
\fBfile stat \fIname varName\fR
.
Invokes the \fBstat\fR kernel call on \fIname\fR, and uses the variable
given by \fIvarName\fR to hold information returned from the kernel call.
+1 -1
View File
@@ -4,7 +4,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH flush n 7.5 Tcl "Tcl Built-In Commands"
.so man.macros
.BS
+1 -1
View File
@@ -4,7 +4,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH foreach n "" Tcl "Tcl Built-In Commands"
.so man.macros
.BS
+1 -1
View File
@@ -4,7 +4,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH gets n 7.5 Tcl "Tcl Built-In Commands"
.so man.macros
.BS
+1 -1
View File
@@ -4,7 +4,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH history n "" Tcl "Tcl Built-In Commands"
.so man.macros
.BS
+4 -1
View File
@@ -418,7 +418,10 @@ set token [::http::geturl https://my.secure.site/]
\fB::http::unregister\fR \fIproto\fR
.
This procedure unregisters a protocol handler that was previously
registered via \fB::http::register\fR.
registered via \fB::http::register\fR, returning a two-item list of
the default port and handler command that was previously installed
(via \fB::http::register\fR) if there was such a handler, and an error if
there was no such handler.
.SH ERRORS
The \fB::http::geturl\fR procedure will raise errors in the following cases:
invalid command line options,
+1 -1
View File
@@ -4,7 +4,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH if n "" Tcl "Tcl Built-In Commands"
.so man.macros
.BS
+1 -1
View File
@@ -4,7 +4,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH incr n "" Tcl "Tcl Built-In Commands"
.so man.macros
.BS
+1 -1
View File
@@ -7,7 +7,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH info n 8.4 Tcl "Tcl Built-In Commands"
.so man.macros
.BS
+1 -1
View File
@@ -5,7 +5,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH interp n 8.6 Tcl "Tcl Built-In Commands"
.so man.macros
.BS
+1 -1
View File
@@ -4,7 +4,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH join n "" Tcl "Tcl Built-In Commands"
.so man.macros
.BS
+1 -1
View File
@@ -5,7 +5,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH lappend n "" Tcl "Tcl Built-In Commands"
.so man.macros
.BS
+1 -1
View File
@@ -4,7 +4,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH lassign n 8.5 Tcl "Tcl Built-In Commands"
.so man.macros
.BS
+1 -1
View File
@@ -5,7 +5,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH list n "" Tcl "Tcl Built-In Commands"
.so man.macros
.BS
+1 -1
View File
@@ -3,7 +3,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH load n 7.5 Tcl "Tcl Built-In Commands"
.so man.macros
.BS
+1 -1
View File
@@ -3,7 +3,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH lrepeat n 8.5 Tcl "Tcl Built-In Commands"
.so man.macros
.BS
+1 -1
View File
@@ -3,7 +3,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH lreverse n 8.5 Tcl "Tcl Built-In Commands"
.so man.macros
.BS
+1 -1
View File
@@ -303,7 +303,7 @@ used for qualified namespace or variable names.
Sets or returns the unknown command handler for the current namespace.
The handler is invoked when a command called from within the namespace
cannot be found in the current namespace, the namespace's path nor in
the global namespace.
the global namespace.
The \fIscript\fR argument, if given, should be a well
formed list representing a command name and optional arguments. When
the handler is invoked, the full invocation line will be appended to the
+1 -1
View File
@@ -138,7 +138,7 @@ before chaining from subclass, args = x 1 2 3 y
in the superclass, args = a x 1 2 3 y b
in the superclass, args = pureSynthesis
after chaining from subclass
before chaining from subclass, args =
before chaining from subclass, args =
in the superclass, args = a b
in the superclass, args = pureSynthesis
after chaining from subclass
+2 -2
View File
@@ -283,8 +283,8 @@ error.
.PP
When an interpreter is created, its initial selection mode value is set to
.QW stable
unless the environment variable \fBTCL_PKG_PREFER_LATEST\fR
is set. If that environment variable is defined (with any value) then
unless the environment variable \fBTCL_PKG_PREFER_LATEST\fR is set
(to any value) or the Tcl package itself is unstable. Otherwise
the initial (and permanent) selection mode value is set to
.QW latest .
.RE
+1 -1
View File
@@ -1,7 +1,7 @@
'\"
'\" Copyright (c) 1998-2000 by Scriptics Corporation.
'\" All rights reserved.
'\"
'\"
.TH pkg::create n 8.3 Tcl "Tcl Built-In Commands"
.so man.macros
.BS
+1 -1
View File
@@ -4,7 +4,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH pid n 7.0 Tcl "Tcl Built-In Commands"
.so man.macros
.BS
+1 -1
View File
@@ -3,7 +3,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH "platform" n 1.0.4 platform "Tcl Bundled Packages"
.so man.macros
.BS
+1 -1
View File
@@ -3,7 +3,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH "platform::shell" n 1.1.4 platform::shell "Tcl Bundled Packages"
.so man.macros
.BS
+1 -1
View File
@@ -3,7 +3,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH prefix n 8.6 Tcl "Tcl Built-In Commands"
.so man.macros
.BS
+1 -1
View File
@@ -4,7 +4,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH puts n 7.5 Tcl "Tcl Built-In Commands"
.so man.macros
.BS
+1 -1
View File
@@ -4,7 +4,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH pwd n "" Tcl "Tcl Built-In Commands"
.so man.macros
.BS
+1 -1
View File
@@ -1,4 +1,4 @@
'\"
'\"
'\" Copyright (c) 2006 Andreas Kupries <andreas_kupries@users.sourceforge.net>
'\"
'\" See the file "license.terms" for information on usage and redistribution
+1 -1
View File
@@ -152,7 +152,7 @@ nulls.
.TP
\fBsz\fR
.
The registry value contains a null-terminated string. The data is
The registry value contains a null-terminated string. The data is
represented in Tcl as a string.
.TP
\fBexpand_sz\fR
+1 -1
View File
@@ -4,7 +4,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH rename n "" Tcl "Tcl Built-In Commands"
.so man.macros
.BS
+1 -3
View File
@@ -123,9 +123,7 @@ with conversion character \fBu\fR.
.TP
\fBi\fR
.
The input substring must be an integer. The base (i.e. decimal, binary,
octal, or hexadecimal) is determined in the same fashion as described in
\fBexpr\fR. The integer value is stored in the variable,
The input substring must be an integer. The base (i.e. decimal, octal, or hexadecimal) is determined by the C convention (leading 0 for octal; prefix 0x for hexadecimal). The integer value is stored in the variable,
truncated as required by the size modifier value.
.TP
\fBc\fR
+1 -1
View File
@@ -4,7 +4,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
.TH seek n 8.1 Tcl "Tcl Built-In Commands"
.so man.macros
.BS

Some files were not shown because too many files have changed in this diff Show More