diff options
author | Steve Bennett <steveb@workware.net.au> | 2014-01-04 11:33:40 +1000 |
---|---|---|
committer | Steve Bennett <steveb@workware.net.au> | 2014-01-15 07:21:08 +1000 |
commit | bb53a41ac64e00e3bb5e882290e5ef6eba4bf626 (patch) | |
tree | b03f1f859b64a6a1e0efc8c10b77ec5c7cb4422b /jim-array.c | |
parent | 39558d51b0f7e368eb104f86a525b63fa5475618 (diff) | |
download | jimtcl-bb53a41ac64e00e3bb5e882290e5ef6eba4bf626.zip jimtcl-bb53a41ac64e00e3bb5e882290e5ef6eba4bf626.tar.gz jimtcl-bb53a41ac64e00e3bb5e882290e5ef6eba4bf626.tar.bz2 |
array: error msg for odd length array get
Currently an error is set, but with no message
Signed-off-by: Steve Bennett <steveb@workware.net.au>
Diffstat (limited to 'jim-array.c')
-rw-r--r-- | jim-array.c | 24 |
1 files changed, 10 insertions, 14 deletions
diff --git a/jim-array.c b/jim-array.c index 179e110..3bb74c6 100644 --- a/jim-array.c +++ b/jim-array.c @@ -61,29 +61,25 @@ static int array_cmd_exists(Jim_Interp *interp, int argc, Jim_Obj *const *argv) static int array_cmd_get(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_Obj *objPtr = Jim_GetVariable(interp, argv[0], JIM_NONE); + Jim_Obj *patternObj; if (!objPtr) { return JIM_OK; } - if (argc == 1 || Jim_CompareStringImmediate(interp, argv[1], "*")) { - /* Optimise the "all" case */ - if (Jim_IsList(objPtr)) { - if (Jim_ListLength(interp, objPtr) % 2 != 0) { - /* A list with an odd number of elements */ - return JIM_ERR; - } - } - else if (Jim_DictSize(interp, objPtr) < 0) { - /* Can't be converted to a dictionary */ - return JIM_ERR; + patternObj = (argc == 1) ? NULL : argv[1]; + + /* Optimise the "all" case */ + if (patternObj == NULL || Jim_CompareStringImmediate(interp, patternObj, "*")) { + if (Jim_IsList(objPtr) && Jim_ListLength(interp, objPtr) % 2 == 0) { + /* A list with an even number of elements */ + Jim_SetResult(interp, objPtr); + return JIM_OK; } - Jim_SetResult(interp, objPtr); - return JIM_OK; } /* Return a list of keys and values where the keys match the pattern */ - return Jim_DictValues(interp, objPtr, argv[1]); + return Jim_DictValues(interp, objPtr, patternObj); } static int array_cmd_names(Jim_Interp *interp, int argc, Jim_Obj *const *argv) |