summaryrefslogtreecommitdiffstats
path: root/generic/tclDictObj.c
diff options
context:
space:
mode:
Diffstat (limited to 'generic/tclDictObj.c')
-rw-r--r--generic/tclDictObj.c78
1 files changed, 40 insertions, 38 deletions
diff --git a/generic/tclDictObj.c b/generic/tclDictObj.c
index a0ce8a4..c795030 100644
--- a/generic/tclDictObj.c
+++ b/generic/tclDictObj.c
@@ -149,18 +149,18 @@ const Tcl_ObjType tclDictType = {
SetDictFromAny /* setFromAnyProc */
};
-#define DictSetIntRep(objPtr, dictRepPtr) \
+#define DictSetInternalRep(objPtr, dictRepPtr) \
do { \
- Tcl_ObjIntRep ir; \
+ Tcl_ObjInternalRep ir; \
ir.twoPtrValue.ptr1 = (dictRepPtr); \
ir.twoPtrValue.ptr2 = NULL; \
- Tcl_StoreIntRep((objPtr), &tclDictType, &ir); \
+ Tcl_StoreInternalRep((objPtr), &tclDictType, &ir); \
} while (0)
-#define DictGetIntRep(objPtr, dictRepPtr) \
+#define DictGetInternalRep(objPtr, dictRepPtr) \
do { \
- const Tcl_ObjIntRep *irPtr; \
- irPtr = TclFetchIntRep((objPtr), &tclDictType); \
+ const Tcl_ObjInternalRep *irPtr; \
+ irPtr = TclFetchInternalRep((objPtr), &tclDictType); \
(dictRepPtr) = irPtr ? (Dict *)irPtr->twoPtrValue.ptr1 : NULL; \
} while (0)
@@ -362,7 +362,7 @@ DupDictInternalRep(
Dict *oldDict, *newDict = (Dict *)ckalloc(sizeof(Dict));
ChainEntry *cPtr;
- DictGetIntRep(srcPtr, oldDict);
+ DictGetInternalRep(srcPtr, oldDict);
/*
* Copy values across from the old hash table.
@@ -395,7 +395,7 @@ DupDictInternalRep(
* Store in the object.
*/
- DictSetIntRep(copyPtr, newDict);
+ DictSetInternalRep(copyPtr, newDict);
}
/*
@@ -422,7 +422,7 @@ FreeDictInternalRep(
{
Dict *dict;
- DictGetIntRep(dictPtr, dict);
+ DictGetInternalRep(dictPtr, dict);
if (dict->refCount-- <= 1) {
DeleteDict(dict);
@@ -499,7 +499,7 @@ UpdateStringOfDict(
int numElems;
- DictGetIntRep(dictPtr, dict);
+ DictGetInternalRep(dictPtr, dict);
assert (dict != NULL);
@@ -566,6 +566,7 @@ UpdateStringOfDict(
dst += TclConvertElement(elem, length, dst, flagPtr[i+1]);
*dst++ = ' ';
}
+ /* Last space overwrote the terminating NUL; cal T_ISR again to restore */
(void)Tcl_InitStringRep(dictPtr, NULL, bytesNeeded - 1);
if (flagPtr != localFlags) {
@@ -610,12 +611,12 @@ SetDictFromAny(
* the conversion from lists to dictionaries.
*/
- if (TclHasIntRep(objPtr, &tclListType)) {
+ if (TclHasInternalRep(objPtr, &tclListType)) {
int objc, i;
Tcl_Obj **objv;
/* Cannot fail, we already know the Tcl_ObjType is "list". */
- TclListObjGetElements(NULL, objPtr, &objc, &objv);
+ TclListObjGetElementsM(NULL, objPtr, &objc, &objv);
if (objc & 1) {
goto missingValue;
}
@@ -717,7 +718,7 @@ SetDictFromAny(
dict->epoch = 1;
dict->chain = NULL;
dict->refCount = 1;
- DictSetIntRep(objPtr, dict);
+ DictSetInternalRep(objPtr, dict);
return TCL_OK;
missingValue:
@@ -739,12 +740,12 @@ GetDictFromObj(
{
Dict *dict;
- DictGetIntRep(dictPtr, dict);
+ DictGetInternalRep(dictPtr, dict);
if (dict == NULL) {
if (SetDictFromAny(interp, dictPtr) != TCL_OK) {
return NULL;
}
- DictGetIntRep(dictPtr, dict);
+ DictGetInternalRep(dictPtr, dict);
}
return dict;
}
@@ -792,12 +793,12 @@ TclTraceDictPath(
Dict *dict, *newDict;
int i;
- DictGetIntRep(dictPtr, dict);
+ DictGetInternalRep(dictPtr, dict);
if (dict == NULL) {
if (SetDictFromAny(interp, dictPtr) != TCL_OK) {
return NULL;
}
- DictGetIntRep(dictPtr, dict);
+ DictGetInternalRep(dictPtr, dict);
}
if (flags & DICT_PATH_UPDATE) {
dict->chain = NULL;
@@ -835,7 +836,7 @@ TclTraceDictPath(
} else {
tmpObj = (Tcl_Obj *)Tcl_GetHashValue(hPtr);
- DictGetIntRep(tmpObj, newDict);
+ DictGetInternalRep(tmpObj, newDict);
if (newDict == NULL) {
if (SetDictFromAny(interp, tmpObj) != TCL_OK) {
@@ -844,7 +845,7 @@ TclTraceDictPath(
}
}
- DictGetIntRep(tmpObj, newDict);
+ DictGetInternalRep(tmpObj, newDict);
if (flags & DICT_PATH_UPDATE) {
if (Tcl_IsShared(tmpObj)) {
TclDecrRefCount(tmpObj);
@@ -852,7 +853,7 @@ TclTraceDictPath(
Tcl_IncrRefCount(tmpObj);
Tcl_SetHashValue(hPtr, tmpObj);
dict->epoch++;
- DictGetIntRep(tmpObj, newDict);
+ DictGetInternalRep(tmpObj, newDict);
}
newDict->chain = dictPtr;
@@ -889,14 +890,14 @@ InvalidateDictChain(
{
Dict *dict;
- DictGetIntRep(dictObj, dict);
+ DictGetInternalRep(dictObj, dict);
assert( dict != NULL);
do {
dict->refCount++;
TclInvalidateStringRep(dictObj);
- TclFreeIntRep(dictObj);
- DictSetIntRep(dictObj, dict);
+ TclFreeInternalRep(dictObj);
+ DictSetInternalRep(dictObj, dict);
dict->epoch++;
dictObj = dict->chain;
@@ -904,7 +905,7 @@ InvalidateDictChain(
break;
}
dict->chain = NULL;
- DictGetIntRep(dictObj, dict);
+ DictGetInternalRep(dictObj, dict);
} while (dict != NULL);
}
@@ -950,8 +951,8 @@ Tcl_DictObjPut(
TclInvalidateStringRep(dictPtr);
hPtr = CreateChainEntry(dict, keyPtr, &isNew);
dict->refCount++;
- TclFreeIntRep(dictPtr)
- DictSetIntRep(dictPtr, dict);
+ TclFreeInternalRep(dictPtr)
+ DictSetInternalRep(dictPtr, dict);
Tcl_IncrRefCount(valuePtr);
if (!isNew) {
Tcl_Obj *oldValuePtr = (Tcl_Obj *)Tcl_GetHashValue(hPtr);
@@ -1069,6 +1070,7 @@ Tcl_DictObjRemove(
*----------------------------------------------------------------------
*/
+#undef Tcl_DictObjSize
int
Tcl_DictObjSize(
Tcl_Interp *interp,
@@ -1306,7 +1308,7 @@ Tcl_DictObjPutKeyList(
return TCL_ERROR;
}
- DictGetIntRep(dictPtr, dict);
+ DictGetInternalRep(dictPtr, dict);
assert(dict != NULL);
hPtr = CreateChainEntry(dict, keyv[keyc-1], &isNew);
Tcl_IncrRefCount(valuePtr);
@@ -1364,7 +1366,7 @@ Tcl_DictObjRemoveKeyList(
return TCL_ERROR;
}
- DictGetIntRep(dictPtr, dict);
+ DictGetInternalRep(dictPtr, dict);
assert(dict != NULL);
DeleteChainEntry(dict, keyv[keyc-1]);
InvalidateDictChain(dictPtr);
@@ -1411,7 +1413,7 @@ Tcl_NewDictObj(void)
dict->epoch = 1;
dict->chain = NULL;
dict->refCount = 1;
- DictSetIntRep(dictPtr, dict);
+ DictSetInternalRep(dictPtr, dict);
return dictPtr;
#endif
}
@@ -1459,7 +1461,7 @@ Tcl_DbNewDictObj(
dict->epoch = 1;
dict->chain = NULL;
dict->refCount = 1;
- DictSetIntRep(dictPtr, dict);
+ DictSetInternalRep(dictPtr, dict);
return dictPtr;
}
#else /* !TCL_MEM_DEBUG */
@@ -2479,7 +2481,7 @@ DictForNRCmd(
* Parse arguments.
*/
- if (TclListObjGetElements(interp, objv[1], &varc, &varv) != TCL_OK) {
+ if (TclListObjGetElementsM(interp, objv[1], &varc, &varv) != TCL_OK) {
return TCL_ERROR;
}
if (varc != 2) {
@@ -2498,7 +2500,7 @@ DictForNRCmd(
TclStackFree(interp, searchPtr);
return TCL_OK;
}
- TclListObjGetElements(NULL, objv[1], &varc, &varv);
+ TclListObjGetElementsM(NULL, objv[1], &varc, &varv);
keyVarObj = varv[0];
valueVarObj = varv[1];
scriptObj = objv[3];
@@ -2673,7 +2675,7 @@ DictMapNRCmd(
* Parse arguments.
*/
- if (TclListObjGetElements(interp, objv[1], &varc, &varv) != TCL_OK) {
+ if (TclListObjGetElementsM(interp, objv[1], &varc, &varv) != TCL_OK) {
return TCL_ERROR;
}
if (varc != 2) {
@@ -2699,7 +2701,7 @@ DictMapNRCmd(
return TCL_OK;
}
TclNewObj(storagePtr->accumulatorObj);
- TclListObjGetElements(NULL, objv[1], &varc, &varv);
+ TclListObjGetElementsM(NULL, objv[1], &varc, &varv);
storagePtr->keyVarObj = varv[0];
storagePtr->valueVarObj = varv[1];
storagePtr->scriptObj = objv[3];
@@ -3112,7 +3114,7 @@ DictFilterCmd(
* copying from the "dict for" implementation has occurred!
*/
- if (TclListObjGetElements(interp, objv[3], &varc, &varv) != TCL_OK) {
+ if (TclListObjGetElementsM(interp, objv[3], &varc, &varv) != TCL_OK) {
return TCL_ERROR;
}
if (varc != 2) {
@@ -3373,7 +3375,7 @@ FinalizeDictUpdate(
* an instruction to remove the key.
*/
- Tcl_ListObjGetElements(NULL, argsObj, &objc, &objv);
+ TclListObjGetElementsM(NULL, argsObj, &objc, &objv);
for (i=0 ; i<objc ; i+=2) {
objPtr = Tcl_ObjGetVar2(interp, objv[i+1], NULL, 0);
if (objPtr == NULL) {
@@ -3497,7 +3499,7 @@ FinalizeDictWith(
state = Tcl_SaveInterpState(interp, result);
if (pathPtr != NULL) {
- Tcl_ListObjGetElements(NULL, pathPtr, &pathc, &pathv);
+ TclListObjGetElementsM(NULL, pathPtr, &pathc, &pathv);
} else {
pathc = 0;
pathv = NULL;
@@ -3703,7 +3705,7 @@ TclDictWithFinish(
* Now process our updates on the leaf dictionary.
*/
- TclListObjGetElements(NULL, keysPtr, &keyc, &keyv);
+ TclListObjGetElementsM(NULL, keysPtr, &keyc, &keyv);
for (i=0 ; i<keyc ; i++) {
valPtr = Tcl_ObjGetVar2(interp, keyv[i], NULL, 0);
if (valPtr == NULL) {