Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | artificial "fix", illustrating that bug [28cc67a606] is related to abstract lists and co |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | bug-28cc67a606--iter-dict-regress |
Files: | files | file ages | folders |
SHA3-256: |
f525e7ad92ff63c8caf1bad59f6b43f7 |
User & Date: | sebres 2024-04-16 21:46:23 |
References
2024-04-16
| ||
22:17 | • Ticket [28cc67a606] array set from dict: set values multi times on the same array is slower with Tcl9.0. status still Open with 3 other changes artifact: cb994888ff user: sebres | |
Context
2024-04-16
| ||
21:46 | artificial "fix", illustrating that bug [28cc67a606] is related to abstract lists and co Closed-Leaf check-in: f525e7ad92 user: sebres tags: bug-28cc67a606--iter-dict-regress | |
2024-04-14
| ||
14:46 | Merge 8.7 check-in: 961fda5266 user: jan.nijtmans tags: trunk, main | |
Changes
Changes to generic/tclDictObj.c.
︙ | ︙ | |||
57 58 59 60 61 62 63 64 65 | Tcl_Obj *keyPtr); static Tcl_NRPostProc FinalizeDictUpdate; static Tcl_NRPostProc FinalizeDictWith; static Tcl_ObjCmdProc DictForNRCmd; static Tcl_ObjCmdProc DictMapNRCmd; static Tcl_NRPostProc DictForLoopCallback; static Tcl_NRPostProc DictMapLoopCallback; static Tcl_ObjTypeLengthProc DictAsListLength; /* static Tcl_ObjTypeIndexProc DictAsListIndex; Needs rewrite */ | > | | 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | Tcl_Obj *keyPtr); static Tcl_NRPostProc FinalizeDictUpdate; static Tcl_NRPostProc FinalizeDictWith; static Tcl_ObjCmdProc DictForNRCmd; static Tcl_ObjCmdProc DictMapNRCmd; static Tcl_NRPostProc DictForLoopCallback; static Tcl_NRPostProc DictMapLoopCallback; #if 0 /* Needs rewrite */ static Tcl_ObjTypeLengthProc DictAsListLength; /* static Tcl_ObjTypeIndexProc DictAsListIndex; Needs rewrite */ #endif /* * Table of dict subcommand names and implementations. */ static const EnsembleImplMap implementationMap[] = { {"append", DictAppendCmd, TclCompileDictAppendCmd, NULL, NULL, 0 }, {"create", DictCreateCmd, TclCompileDictCreateCmd, NULL, NULL, 0 }, |
︙ | ︙ | |||
145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 | const Tcl_ObjType tclDictType = { "dict", FreeDictInternalRep, /* freeIntRepProc */ DupDictInternalRep, /* dupIntRepProc */ UpdateStringOfDict, /* updateStringProc */ SetDictFromAny, /* setFromAnyProc */ TCL_OBJTYPE_V2( /* Extended type for AbstractLists */ DictAsListLength, /* return "list" length of dict value w/o * shimmering */ NULL, /* return key or value at "list" index * location. (keysare at even indicies, * values at odd indicies) */ NULL, NULL, NULL, NULL, NULL, NULL) }; #define DictSetInternalRep(objPtr, dictRepPtr) \ do { \ Tcl_ObjInternalRep ir; \ ir.twoPtrValue.ptr1 = (dictRepPtr); \ ir.twoPtrValue.ptr2 = NULL; \ | > > > | 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 | const Tcl_ObjType tclDictType = { "dict", FreeDictInternalRep, /* freeIntRepProc */ DupDictInternalRep, /* dupIntRepProc */ UpdateStringOfDict, /* updateStringProc */ SetDictFromAny, /* setFromAnyProc */ TCL_OBJTYPE_V0 #if 0 TCL_OBJTYPE_V2( /* Extended type for AbstractLists */ DictAsListLength, /* return "list" length of dict value w/o * shimmering */ NULL, /* return key or value at "list" index * location. (keysare at even indicies, * values at odd indicies) */ NULL, NULL, NULL, NULL, NULL, NULL) #endif }; #define DictSetInternalRep(objPtr, dictRepPtr) \ do { \ Tcl_ObjInternalRep ir; \ ir.twoPtrValue.ptr1 = (dictRepPtr); \ ir.twoPtrValue.ptr2 = NULL; \ |
︙ | ︙ | |||
3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 | Tcl_Command TclInitDictCmd( Tcl_Interp *interp) { return TclMakeEnsemble(interp, "dict", implementationMap); } /* *---------------------------------------------------------------------- * * DictAsListLength -- * * Compute the length of a list as if the dict value were converted to a * list. | > | 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 | Tcl_Command TclInitDictCmd( Tcl_Interp *interp) { return TclMakeEnsemble(interp, "dict", implementationMap); } #if 0 /* Needs rewrite */ /* *---------------------------------------------------------------------- * * DictAsListLength -- * * Compute the length of a list as if the dict value were converted to a * list. |
︙ | ︙ | |||
3934 3935 3936 3937 3938 3939 3940 | * operation w/o causing the Obj value to shimmer into a List. * * Side Effects -- * * The intent is to have no side effects. * */ | < | 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 | * operation w/o causing the Obj value to shimmer into a List. * * Side Effects -- * * The intent is to have no side effects. * */ static int DictAsListIndex( Tcl_Interp *interp, struct Tcl_Obj *objPtr, Tcl_Size index, Tcl_Obj** elemObjPtr) { |
︙ | ︙ |