Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Introducing a new union member in Tcl_Obj is not a good idea in a patch release, especially using "long". Better allow iterNum and iterMax to grow to ssize_t (or size_t) in Tcl 9 (or 8.x, why not?). Usage of "long" in public API causes interoperability problems between Cygwin64 and Win64 (probably no-one cares except me). |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
e8d964a08e0869791cc50c14ad7a3aaf |
User & Date: | jan.nijtmans 2013-12-06 10:04:48 |
Context
2013-12-06
| ||
10:17 | Oops, wrong macro. check-in: c2afe8e73a user: jan.nijtmans tags: trunk | |
10:04 | Introducing a new union member in Tcl_Obj is not a good idea in a patch release, especially using "l... check-in: e8d964a08e user: jan.nijtmans tags: trunk | |
09:28 | Stop printing undefined values in disassembled code. check-in: ccaa2e5f90 user: dkf tags: trunk | |
Changes
Changes to generic/tcl.h.
︙ | ︙ | |||
844 845 846 847 848 849 850 | * tightly packed fields, where the alloc, * used and signum flags are packed into a * single word with everything else hung * off the pointer. */ void *ptr; unsigned long value; } ptrAndLongRep; | < < < < | 844 845 846 847 848 849 850 851 852 853 854 855 856 857 | * tightly packed fields, where the alloc, * used and signum flags are packed into a * single word with everything else hung * off the pointer. */ void *ptr; unsigned long value; } ptrAndLongRep; } internalRep; } Tcl_Obj; /* * Macros to increment and decrement a Tcl_Obj's reference count, and to test * whether an object is shared (i.e. has reference count > 1). Note: clients * should use Tcl_DecrRefCount() when they are finished using an object, and |
︙ | ︙ |
Changes to generic/tclExecute.c.
︙ | ︙ | |||
6233 6234 6235 6236 6237 6238 6239 | * Store the iterNum and iterMax in a single Tcl_Obj; we keep a * nul-string obj with the pointer stored in the ptrValue so that the * thing is properly garbage collected. THIS OBJ MAKES NO SENSE, but * it will never leave this scope and is read-only. */ TclNewObj(tmpPtr); | | | | 6233 6234 6235 6236 6237 6238 6239 6240 6241 6242 6243 6244 6245 6246 6247 6248 | * Store the iterNum and iterMax in a single Tcl_Obj; we keep a * nul-string obj with the pointer stored in the ptrValue so that the * thing is properly garbage collected. THIS OBJ MAKES NO SENSE, but * it will never leave this scope and is read-only. */ TclNewObj(tmpPtr); tmpPtr->internalRep.twoPtrValue.ptr1 = NULL; tmpPtr->internalRep.twoPtrValue.ptr2 = INT2PTR(iterMax); PUSH_OBJECT(tmpPtr); /* iterCounts object */ /* * Store a pointer to the ForeachInfo struct; same dirty trick * as above */ |
︙ | ︙ | |||
6264 6265 6266 6267 6268 6269 6270 | */ tmpPtr = OBJ_AT_TOS; infoPtr = tmpPtr->internalRep.otherValuePtr; numLists = infoPtr->numLists; tmpPtr = OBJ_AT_DEPTH(1); | | | | | 6264 6265 6266 6267 6268 6269 6270 6271 6272 6273 6274 6275 6276 6277 6278 6279 6280 6281 6282 6283 6284 6285 6286 6287 6288 6289 6290 6291 | */ tmpPtr = OBJ_AT_TOS; infoPtr = tmpPtr->internalRep.otherValuePtr; numLists = infoPtr->numLists; tmpPtr = OBJ_AT_DEPTH(1); iterNum = INT2PTR(tmpPtr->internalRep.twoPtrValue.ptr1); iterMax = INT2PTR(tmpPtr->internalRep.twoPtrValue.ptr2); /* * If some list still has a remaining list element iterate one more * time. Assign to var the next element from its value list. */ if (iterNum < iterMax) { /* * Set the variables and jump back to run the body */ tmpPtr->internalRep.twoPtrValue.ptr1 = INT2PTR(iterNum + 1); listTmpDepth = numLists + 1; for (i = 0; i < numLists; i++) { varListPtr = infoPtr->varLists[i]; numVars = varListPtr->numVars; |
︙ | ︙ |