Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Simplify STRING_AT macro. Protect Tcl_GetIndexFromObjStruct from invalid "offset" values, like 0 or -1. Undocumented, because I don't want to promote people start using that. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
4d66f17ddbd1697c40dec36a20a9b455 |
User & Date: | jan.nijtmans 2013-01-24 08:22:40 |
Context
2013-01-24
| ||
20:46 | Silence some compiler warnings. check-in: cd00ede986 user: dgp tags: trunk | |
15:14 | New file, tclBrodnik.c, to hold a dynamic array implementation. New routine TclMSB() to compute trun... check-in: 4dca221eb8 user: dgp tags: dgp-refactor | |
10:37 | Convert Tcl_GetIndexFromObj implementation to macro check-in: 039696e2d8 user: jan.nijtmans tags: novem | |
08:22 | Simplify STRING_AT macro. Protect Tcl_GetIndexFromObjStruct from invalid "offset" values, like 0 or ... check-in: 4d66f17ddb user: jan.nijtmans tags: trunk | |
08:05 | Simplify STRING_AT macro. Protect Tcl_GetIndexFromObjStruct from invalid "offset" values, like 0 or ... check-in: 8d90ad34d1 user: jan.nijtmans tags: core-8-5-branch | |
2013-01-23
| ||
14:04 | Fix [2911139]: connect asynchronously, but without unnecessary internal waits. check-in: b242bb3e4b user: jan.nijtmans tags: trunk | |
Changes
Changes to generic/tclIndexObj.c.
︙ | ︙ | |||
65 66 67 68 69 70 71 | int index; /* Selected index into table. */ } IndexRep; /* * The following macros greatly simplify moving through a table... */ | | | | | | 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | int index; /* Selected index into table. */ } IndexRep; /* * The following macros greatly simplify moving through a table... */ #define STRING_AT(table, offset) \ (*((const char *const *)(((char *)(table)) + (offset)))) #define NEXT_ENTRY(table, offset) \ (&(STRING_AT(table, offset))) #define EXPAND_OF(indexRep) \ STRING_AT((indexRep)->tablePtr, (indexRep)->offset*(indexRep)->index) /* *---------------------------------------------------------------------- * * Tcl_GetIndexFromObj -- * * This function looks up an object's value in a table of strings and |
︙ | ︙ | |||
234 235 236 237 238 239 240 | * Results: * If the value of objPtr is identical to or a unique abbreviation for * one of the entries in tablePtr, then the return value is TCL_OK and * the index of the matching entry is stored at *indexPtr. If there isn't * a proper match, then TCL_ERROR is returned and an error message is * left in interp's result (unless interp is NULL). The msg argument is * used in the error message; for example, if msg has the value "option" | | | 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 | * Results: * If the value of objPtr is identical to or a unique abbreviation for * one of the entries in tablePtr, then the return value is TCL_OK and * the index of the matching entry is stored at *indexPtr. If there isn't * a proper match, then TCL_ERROR is returned and an error message is * left in interp's result (unless interp is NULL). The msg argument is * used in the error message; for example, if msg has the value "option" * then the error message will say something like 'bad option "foo": must * be ...' * * Side effects: * The result of the lookup is cached as the internal rep of objPtr, so * that repeated lookups can be done quickly. * *---------------------------------------------------------------------- |
︙ | ︙ | |||
266 267 268 269 270 271 272 273 274 275 276 277 278 279 | int index, idx, numAbbrev; const char *key, *p1; const char *p2; const char *const *entryPtr; Tcl_Obj *resultPtr; IndexRep *indexRep; /* * See if there is a valid cached result from a previous lookup. */ if (objPtr->typePtr == &indexType) { indexRep = objPtr->internalRep.otherValuePtr; if (indexRep->tablePtr==tablePtr && indexRep->offset==offset) { | > > > > | 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 | int index, idx, numAbbrev; const char *key, *p1; const char *p2; const char *const *entryPtr; Tcl_Obj *resultPtr; IndexRep *indexRep; /* Protect against invalid values, like -1 or 0. */ if (offset < (int)sizeof(char *)) { offset = (int)sizeof(char *); } /* * See if there is a valid cached result from a previous lookup. */ if (objPtr->typePtr == &indexType) { indexRep = objPtr->internalRep.otherValuePtr; if (indexRep->tablePtr==tablePtr && indexRep->offset==offset) { |
︙ | ︙ |