aboutsummaryrefslogtreecommitdiff
path: root/jim-array.c
diff options
context:
space:
mode:
authorSteve Bennett <steveb@workware.net.au>2010-10-05 13:12:27 +1000
committerSteve Bennett <steveb@workware.net.au>2010-10-20 10:14:42 +1000
commit2d499dd0fd27436b64777396e1ebd9ae7774d674 (patch)
treef159d968791a49b14e8276cf4e6ea107b8b11454 /jim-array.c
parent1d2f53210dda3c9826c3ce2e499b46994c1bf0a8 (diff)
downloadjimtcl-2d499dd0fd27436b64777396e1ebd9ae7774d674.zip
jimtcl-2d499dd0fd27436b64777396e1ebd9ae7774d674.tar.gz
jimtcl-2d499dd0fd27436b64777396e1ebd9ae7774d674.tar.bz2
Add support for 'dict keys'
And implement 'array names' in terms of it Signed-off-by: Steve Bennett <steveb@workware.net.au>
Diffstat (limited to 'jim-array.c')
-rw-r--r--jim-array.c26
1 files changed, 1 insertions, 25 deletions
diff --git a/jim-array.c b/jim-array.c
index 73713b5..2d0d081 100644
--- a/jim-array.c
+++ b/jim-array.c
@@ -119,37 +119,13 @@ static int array_cmd_get(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
static int array_cmd_names(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
{
- int i;
- int len;
- Jim_Obj *resultObj;
Jim_Obj *objPtr = Jim_GetVariable(interp, argv[0], JIM_NONE);
- Jim_Obj *dictObj;
- Jim_Obj **dictValuesObj;
if (!objPtr) {
return JIM_OK;
}
- if (Jim_DictKeysVector(interp, objPtr, NULL, 0, &dictObj, JIM_ERRMSG) != JIM_OK) {
- return JIM_ERR;
- }
-
- if (Jim_DictPairs(interp, dictObj, &dictValuesObj, &len) != JIM_OK) {
- return JIM_ERR;
- }
-
- /* Only return the matching values */
- resultObj = Jim_NewListObj(interp, NULL, 0);
-
- for (i = 0; i < len; i += 2) {
- if (argc == 1 || Jim_StringMatchObj(argv[1], dictValuesObj[i], 0)) {
- Jim_ListAppendElement(interp, resultObj, dictValuesObj[i]);
- }
- }
- Jim_Free(dictValuesObj);
-
- Jim_SetResult(interp, resultObj);
- return JIM_OK;
+ return Jim_DictKeys(interp, objPtr, argc == 1 ? NULL : argv[1]);
}
static int array_cmd_unset(Jim_Interp *interp, int argc, Jim_Obj *const *argv)