diff options
author | Steve Bennett <steveb@workware.net.au> | 2011-11-12 16:58:30 +1000 |
---|---|---|
committer | Steve Bennett <steveb@workware.net.au> | 2011-11-18 08:07:06 +1000 |
commit | 7b1b99481c0dd40eb5a5b0428fab91d2dd858edf (patch) | |
tree | 6c354411c5c5298ad1a9bc2bfbd1f8826527d765 | |
parent | 2ebe3f6dde9a1ece4ca1914778e07f33208ca0f9 (diff) | |
download | jimtcl-7b1b99481c0dd40eb5a5b0428fab91d2dd858edf.zip jimtcl-7b1b99481c0dd40eb5a5b0428fab91d2dd858edf.tar.gz jimtcl-7b1b99481c0dd40eb5a5b0428fab91d2dd858edf.tar.bz2 |
SetListFromAny() only converts if required
Signed-off-by: Steve Bennett <steveb@workware.net.au>
-rw-r--r-- | jim.c | 25 |
1 files changed, 11 insertions, 14 deletions
@@ -5773,6 +5773,10 @@ static int SetListFromAny(Jim_Interp *interp, struct Jim_Obj *objPtr) Jim_Obj *fileNameObj; int linenr; + if (objPtr->typePtr == &listObjType) { + return JIM_OK; + } + #if 0 /* Optimise dict -> list. XXX: Is it worth it? */ if (Jim_IsDict(objPtr)) { @@ -5963,8 +5967,7 @@ static int ListSortElements(Jim_Interp *interp, Jim_Obj *listObjPtr, struct lsor int rc; JimPanic((Jim_IsShared(listObjPtr), "Jim_ListSortElements called with shared object")); - if (!Jim_IsList(listObjPtr)) - SetListFromAny(interp, listObjPtr); + SetListFromAny(interp, listObjPtr); /* Allow lsort to be called reentrantly */ prev_info = sort_info; @@ -6060,8 +6063,7 @@ static void ListAppendList(Jim_Obj *listPtr, Jim_Obj *appendListPtr) void Jim_ListAppendElement(Jim_Interp *interp, Jim_Obj *listPtr, Jim_Obj *objPtr) { JimPanic((Jim_IsShared(listPtr), "Jim_ListAppendElement called with shared object")); - if (!Jim_IsList(listPtr)) - SetListFromAny(interp, listPtr); + SetListFromAny(interp, listPtr); Jim_InvalidateStringRep(listPtr); ListAppendElement(listPtr, objPtr); } @@ -6069,16 +6071,14 @@ void Jim_ListAppendElement(Jim_Interp *interp, Jim_Obj *listPtr, Jim_Obj *objPtr void Jim_ListAppendList(Jim_Interp *interp, Jim_Obj *listPtr, Jim_Obj *appendListPtr) { JimPanic((Jim_IsShared(listPtr), "Jim_ListAppendList called with shared object")); - if (!Jim_IsList(listPtr)) - SetListFromAny(interp, listPtr); + SetListFromAny(interp, listPtr); Jim_InvalidateStringRep(listPtr); ListAppendList(listPtr, appendListPtr); } int Jim_ListLength(Jim_Interp *interp, Jim_Obj *objPtr) { - if (!Jim_IsList(objPtr)) - SetListFromAny(interp, objPtr); + SetListFromAny(interp, objPtr); return objPtr->internalRep.listValue.len; } @@ -6086,8 +6086,7 @@ void Jim_ListInsertElements(Jim_Interp *interp, Jim_Obj *listPtr, int idx, int objc, Jim_Obj *const *objVec) { JimPanic((Jim_IsShared(listPtr), "Jim_ListInsertElement called with shared object")); - if (!Jim_IsList(listPtr)) - SetListFromAny(interp, listPtr); + SetListFromAny(interp, listPtr); if (idx >= 0 && idx > listPtr->internalRep.listValue.len) idx = listPtr->internalRep.listValue.len; else if (idx < 0) @@ -6098,8 +6097,7 @@ void Jim_ListInsertElements(Jim_Interp *interp, Jim_Obj *listPtr, int idx, int Jim_ListIndex(Jim_Interp *interp, Jim_Obj *listPtr, int idx, Jim_Obj **objPtrPtr, int flags) { - if (!Jim_IsList(listPtr)) - SetListFromAny(interp, listPtr); + SetListFromAny(interp, listPtr); if ((idx >= 0 && idx >= listPtr->internalRep.listValue.len) || (idx < 0 && (-idx - 1) >= listPtr->internalRep.listValue.len)) { if (flags & JIM_ERRMSG) { @@ -6117,8 +6115,7 @@ int Jim_ListIndex(Jim_Interp *interp, Jim_Obj *listPtr, int idx, Jim_Obj **objPt static int ListSetIndex(Jim_Interp *interp, Jim_Obj *listPtr, int idx, Jim_Obj *newObjPtr, int flags) { - if (!Jim_IsList(listPtr)) - SetListFromAny(interp, listPtr); + SetListFromAny(interp, listPtr); if ((idx >= 0 && idx >= listPtr->internalRep.listValue.len) || (idx < 0 && (-idx - 1) >= listPtr->internalRep.listValue.len)) { if (flags & JIM_ERRMSG) { |