aboutsummaryrefslogtreecommitdiff
path: root/jim.c
diff options
context:
space:
mode:
authorSteve Bennett <steveb@workware.net.au>2011-11-12 16:58:30 +1000
committerSteve Bennett <steveb@workware.net.au>2011-11-18 08:07:06 +1000
commit7b1b99481c0dd40eb5a5b0428fab91d2dd858edf (patch)
tree6c354411c5c5298ad1a9bc2bfbd1f8826527d765 /jim.c
parent2ebe3f6dde9a1ece4ca1914778e07f33208ca0f9 (diff)
downloadjimtcl-7b1b99481c0dd40eb5a5b0428fab91d2dd858edf.zip
jimtcl-7b1b99481c0dd40eb5a5b0428fab91d2dd858edf.tar.gz
jimtcl-7b1b99481c0dd40eb5a5b0428fab91d2dd858edf.tar.bz2
SetListFromAny() only converts if required
Signed-off-by: Steve Bennett <steveb@workware.net.au>
Diffstat (limited to 'jim.c')
-rw-r--r--jim.c25
1 files changed, 11 insertions, 14 deletions
diff --git a/jim.c b/jim.c
index bb52915..11f3aef 100644
--- a/jim.c
+++ b/jim.c
@@ -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) {