Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | * 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. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | core-8-5-branch |
Files: | files | file ages | folders |
SHA1: |
bbb487eaacd980cdfaa96b8850e29e31 |
User & Date: | andreask 2011-05-17 21:26:26 |
Context
2011-05-24
| ||
14:55 | Update to Olson tzdata2011g check-in: bbc19ec223 user: venkat tags: core-8-5-branch | |
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:07 |
[Bug 2715421] fix backported from 8.6 to remove extra newline from POSTs.
Package version increment... check-in: 9c90ac52e4 user: patthoyts tags: core-8-5-branch | |
Changes
Changes to ChangeLog.
1 2 3 4 5 6 7 | 2011-05-10 Don Porter <[email protected]> * generic/tclInt.h: New internal routines TclScanElement() and * generic/tclUtil.c: TclConvertElement() are rewritten guts of machinery to produce string rep of lists. The new routines avoid and correct [Bug 3173086]. See comments for much more detail. | > > > > > > > > > > | 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-10 Don Porter <[email protected]> * generic/tclInt.h: New internal routines TclScanElement() and * generic/tclUtil.c: TclConvertElement() are rewritten guts of machinery to produce string rep of lists. The new routines avoid and correct [Bug 3173086]. See comments for much more detail. |
︙ | ︙ |
Changes to generic/tclBasic.c.
︙ | ︙ | |||
4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 | * (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, (char*) objv[word], &isnew); | > > > > | 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 | * (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, (char*) objv[word], &isnew); |
︙ | ︙ |
Changes to generic/tclCompile.c.
︙ | ︙ | |||
3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 | rangePtr->catchOffset += 3; break; default: Tcl_Panic("TclFixupForwardJump: bad ExceptionRange type %d", rangePtr->type); } } return 1; /* the jump was grown */ } /* *---------------------------------------------------------------------- * * TclGetInstructionTable -- | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 | 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 -- |
︙ | ︙ |