diff options
author | Steve Bennett <steveb@workware.net.au> | 2014-01-12 16:31:02 +1000 |
---|---|---|
committer | Steve Bennett <steveb@workware.net.au> | 2014-01-15 20:30:11 +1000 |
commit | a7e96fdcfdcadcdc728044e7fcaae25c1b09422f (patch) | |
tree | 02cdc589b10cecf83bf5b817563e4d71fef2ea70 | |
parent | 22ef663868aede82b0fd68a23c0239b74addbd7e (diff) |
jim.c: simplify JimDictExpandArrayVariable()
Signed-off-by: Steve Bennett <steveb@workware.net.au>
-rw-r--r-- | jim.c | 27 | ||||
-rw-r--r-- | tests/array.test | 18 |
2 files changed, 18 insertions, 27 deletions
@@ -4740,24 +4740,13 @@ static Jim_Obj *JimDictExpandArrayVariable(Jim_Interp *interp, Jim_Obj *varObjPt ret = Jim_DictKey(interp, dictObjPtr, keyObjPtr, &resObjPtr, JIM_NONE); if (ret != JIM_OK) { - resObjPtr = NULL; - if (ret < 0) { - Jim_SetResultFormatted(interp, - "can't read \"%#s(%#s)\": variable isn't array", varObjPtr, keyObjPtr); - } - else { - Jim_SetResultFormatted(interp, - "can't read \"%#s(%#s)\": no such element in array", varObjPtr, keyObjPtr); - } + Jim_SetResultFormatted(interp, + "can't read \"%#s(%#s)\": %s array", varObjPtr, keyObjPtr, + ret < 0 ? "variable isn't" : "no such element in"); } else if ((flags & JIM_UNSHARED) && Jim_IsShared(dictObjPtr)) { - dictObjPtr = Jim_DuplicateObj(interp, dictObjPtr); - if (Jim_SetVariable(interp, varObjPtr, dictObjPtr) != JIM_OK) { - /* This can probably never happen */ - JimPanic((1, "SetVariable failed for JIM_UNSHARED")); - } - /* We know that the key exists. Get the result in the now-unshared dictionary */ - Jim_DictKey(interp, dictObjPtr, keyObjPtr, &resObjPtr, JIM_NONE); + /* Update the variable to have an unshared copy */ + Jim_SetVariable(interp, varObjPtr, Jim_DuplicateObj(interp, dictObjPtr)); } return resObjPtr; @@ -5456,7 +5445,7 @@ Jim_Interp *Jim_CreateInterp(void) void Jim_FreeInterp(Jim_Interp *i) { - Jim_CallFrame *cf = i->framePtr, *prevcf, *nextcf; + Jim_CallFrame *cf = i->framePtr, *prevcf; Jim_Obj *objPtr, *nextObjPtr; /* Free the call frames list - must be done before i->commands is destroyed */ @@ -7122,7 +7111,9 @@ Jim_Obj *Jim_NewDictObj(Jim_Interp *interp, Jim_Obj *const *elements, int len) } /* Return the value associated to the specified dict key - * Note: Returns JIM_OK if OK, JIM_ERR if entry not found or -1 if can't create dict value + * Returns JIM_OK if OK, JIM_ERR if entry not found or -1 if can't create dict value + * + * Sets *objPtrPtr to non-NULL only upon success. */ int Jim_DictKey(Jim_Interp *interp, Jim_Obj *dictPtr, Jim_Obj *keyPtr, Jim_Obj **objPtrPtr, int flags) diff --git a/tests/array.test b/tests/array.test index 06e7198..ba88147 100644 --- a/tests/array.test +++ b/tests/array.test @@ -68,21 +68,21 @@ test array-1.11 "array unset - all" { list [array size b] [array exists b] } {0 0} -test array-1.12 "array set to invalid variable" { +test array-1.12 "array set to invalid variable" -body { unset -nocomplain a b set a 1 - catch {array set a(1) {b c}} -} {1} + array set a(1) {b c} +} -returnCodes error -result {can't set "a(1)": variable isn't array} -test array-1.13 "unset missing array element" { +test array-1.13 "unset missing array element" -body { unset -nocomplain a set a(1) one - catch {unset a(2)} -} 1 + unset a(2) +} -returnCodes error -result {can't unset "a(2)": no such element in array} -test array-1.14 "access array via unset var" { +test array-1.14 "access array via unset var" -body { unset -nocomplain b - catch {expr {$a($b) + 4}} -} 1 + expr {$a($b) + 4} +} -returnCodes error -result {can't read "b": no such variable} testreport |