Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Merged core-8-5-branch, fixup of TIP 280 location mapping. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
168a79562b5f1807cfd8d5959b326162 |
User & Date: | andreask 2011-05-17 21:38:46 |
Context
2011-05-24
| ||
12:23 | Remove some useless code from mcset and mcmset: [dict set] builds dictionary levels for us. check-in: 076d311d4f user: dkf tags: trunk | |
2011-05-17
| ||
21:38 | Merged core-8-5-branch, fixup of TIP 280 location mapping. check-in: 168a79562b user: andreask tags: trunk | |
21:26 | * generic/tclCompile.c (TclFixupForwardJump): Tracked down and fixed * generic/tclBasic.c (TclArg... check-in: bbb487eaac user: andreask tags: core-8-5-branch | |
2011-05-12
| ||
21:13 | Merged 8.5 following http fix that is not needed on trunk. check-in: 084dac6c02 user: pat tags: trunk | |
Changes
Changes to ChangeLog.
1 2 3 4 5 6 7 | 2011-05-11 Reinhard Max <[email protected]> * unix/tclUnixSock.c (TcpWatchProc): No need to check for server sockets here, as the generic server code already takes care of that. * tests/socket.test (accept): Add tests to make sure that this remains so. | > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 2011-05-17 Andreas Kupries <[email protected]> * generic/tclCompile.c (TclFixupForwardJump): Tracked down and fixed * generic/tclBasic.c (TclArgumentBCEnter): the cause of a violation of my assertion that 'ePtr->nline == objc' in TclArgumentBCEnter. When a bytecode was grown during jump fixup the pc -> command line mapping was not updated. When things aligned just wrong the mapping would direct command A to the data for command B, with a different number of arguments. 2011-05-11 Reinhard Max <[email protected]> * unix/tclUnixSock.c (TcpWatchProc): No need to check for server sockets here, as the generic server code already takes care of that. * tests/socket.test (accept): Add tests to make sure that this remains so. |
︙ | ︙ |
Changes to generic/tclBasic.c.
︙ | ︙ | |||
5585 5586 5587 5588 5589 5590 5591 5592 5593 5594 5595 5596 5597 5598 | * (1) ePtr->nline == objc * (2) (ePtr->line[word] < 0) => !literal, for all words * (3) (word == 0) => !literal * * Item (2) is why we can use objv to get the literals, and do not * have to save them at compile time. */ for (word = 1; word < objc; word++) { if (ePtr->line[word] >= 0) { int isnew; Tcl_HashEntry *hPtr = Tcl_CreateHashEntry(iPtr->lineLABCPtr, objv[word], &isnew); CFWordBC *cfwPtr = ckalloc(sizeof(CFWordBC)); | > > > > | 5585 5586 5587 5588 5589 5590 5591 5592 5593 5594 5595 5596 5597 5598 5599 5600 5601 5602 | * (1) ePtr->nline == objc * (2) (ePtr->line[word] < 0) => !literal, for all words * (3) (word == 0) => !literal * * Item (2) is why we can use objv to get the literals, and do not * have to save them at compile time. */ if (ePtr->nline != objc) { Tcl_Panic ("TIP 280 data structure inconsistency"); } for (word = 1; word < objc; word++) { if (ePtr->line[word] >= 0) { int isnew; Tcl_HashEntry *hPtr = Tcl_CreateHashEntry(iPtr->lineLABCPtr, objv[word], &isnew); CFWordBC *cfwPtr = ckalloc(sizeof(CFWordBC)); |
︙ | ︙ |
Changes to generic/tclCompile.c.
︙ | ︙ | |||
3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 | rangePtr->catchOffset += 3; break; default: Tcl_Panic("TclFixupForwardJump: bad ExceptionRange type %d", rangePtr->type); } } return 1; /* the jump was grown */ } /* *---------------------------------------------------------------------- * * TclGetInstructionTable -- | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 | rangePtr->catchOffset += 3; break; default: Tcl_Panic("TclFixupForwardJump: bad ExceptionRange type %d", rangePtr->type); } } /* * TIP #280: Adjust the mapping from PC values to the per-command * information about arguments and their line numbers. * * Note: We cannot simply remove an out-of-date entry and then reinsert * with the proper PC, because then we might overwrite another entry which * was at that location. Therefore we pull (copy + delete) all effected * entries (beyond the fixed PC) into an array, update them there, and at * last reinsert them all. */ { ExtCmdLoc* eclPtr = envPtr->extCmdMapPtr; /* A helper structure */ typedef struct { int pc; int cmd; } MAP; /* * And the helper array. At most the whole hashtable is placed into * this. */ MAP *map = (MAP*) ckalloc (sizeof(MAP) * eclPtr->litInfo.numEntries); Tcl_HashSearch hSearch; Tcl_HashEntry* hPtr; int n, k, isnew; /* * Phase I: Locate the affected entries, and save them in adjusted * form to the array. This removes them from the hash. */ for (n = 0, hPtr = Tcl_FirstHashEntry(&eclPtr->litInfo, &hSearch); hPtr != NULL; hPtr = Tcl_NextHashEntry(&hSearch)) { map [n].cmd = PTR2INT(Tcl_GetHashValue(hPtr)); map [n].pc = PTR2INT(Tcl_GetHashKey (&eclPtr->litInfo,hPtr)); if (map[n].pc >= (jumpFixupPtr->codeOffset + 2)) { Tcl_DeleteHashEntry(hPtr); map [n].pc += 3; n++; } } /* * Phase II: Re-insert the modified entries into the hash. */ for (k=0;k<n;k++) { hPtr = Tcl_CreateHashEntry(&eclPtr->litInfo, INT2PTR(map[k].pc), &isnew); Tcl_SetHashValue(hPtr, INT2PTR(map[k].cmd)); } ckfree (map); } return 1; /* the jump was grown */ } /* *---------------------------------------------------------------------- * * TclGetInstructionTable -- |
︙ | ︙ |