diff options
author | Steve Bennett <steveb@workware.net.au> | 2012-08-18 17:02:59 +1000 |
---|---|---|
committer | Steve Bennett <steveb@workware.net.au> | 2012-08-18 17:02:59 +1000 |
commit | cc366598cfbf40266d700c9e554fe21ece78dc78 (patch) | |
tree | 5d1410f9ff657a7a1beef87c0cde0e5041d70823 | |
parent | b225e36dd50337cde65fd1acfb0fe11a69ffcb71 (diff) | |
download | jimtcl-cc366598cfbf40266d700c9e554fe21ece78dc78.zip jimtcl-cc366598cfbf40266d700c9e554fe21ece78dc78.tar.gz jimtcl-cc366598cfbf40266d700c9e554fe21ece78dc78.tar.bz2 |
Fix a dict/list shimmering bug
Signed-off-by: Steve Bennett <steveb@workware.net.au>
-rw-r--r-- | jim.c | 4 | ||||
-rw-r--r-- | tests/dict.test | 3 |
2 files changed, 5 insertions, 2 deletions
@@ -6185,11 +6185,11 @@ static int SetListFromAny(Jim_Interp *interp, struct Jim_Obj *objPtr) return JIM_OK; } - /* Optimise dict -> list. Note that this may only save a little time, but + /* Optimise dict -> list for unshared object. Note that this may only save a little time, but * it also preserves any source location of the dict elements * which can be very useful */ - if (Jim_IsDict(objPtr)) { + if (Jim_IsDict(objPtr) && !Jim_IsShared(objPtr)) { Jim_Obj **listObjPtrPtr; int len; int i; diff --git a/tests/dict.test b/tests/dict.test index 1b3f5a5..e5e3d60 100644 --- a/tests/dict.test +++ b/tests/dict.test @@ -227,4 +227,7 @@ test dict-23.4 {dict unset command: write failure} -setup { unset dictVar } -result {missing value to go with key} +test dict-24.1 {dict/list shimmering - Bug 3004007} {set l [list p 1 p 2 q 3];dict get $l q;set l} {p 1 p 2 q 3} +test dict-24.2 {dict/list shimmering - Bug 3004007} {set l [list p 1 p 2 q 3];dict get $l q;llength $l} 6 + testreport |