From: Charlie Brej Date: Wed, 8 Jul 2009 16:07:42 +0000 (+0100) Subject: [script] Use hash access functions rather than doing lookups directly X-Git-Tag: 0.7.0~99 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=41ebc5f6305ee0432cbea85019da3cb0775cc1a8;p=thirdparty%2Fplymouth.git [script] Use hash access functions rather than doing lookups directly --- diff --git a/src/plugins/splash/script/script-execute.c b/src/plugins/splash/script/script-execute.c index 5cc72d25..2132da27 100644 --- a/src/plugins/splash/script/script-execute.c +++ b/src/plugins/splash/script/script-execute.c @@ -75,38 +75,19 @@ static script_obj_t *script_evaluate_hash (script_state_t *state, { script_obj_t *hash = script_evaluate (state, exp->data.dual.sub_a); script_obj_t *key = script_evaluate (state, exp->data.dual.sub_b); - script_obj_t *hash_dereffed = script_obj_deref_direct (hash); script_obj_t *obj; - - script_obj_deref (&key); - - if (hash_dereffed->type == SCRIPT_OBJ_TYPE_HASH) - script_obj_deref (&hash); - else - { - script_obj_reset (hash); - script_obj_t *newhash = script_obj_new_hash (); - hash->type = SCRIPT_OBJ_TYPE_REF; - hash->data.obj = newhash; - script_obj_deref (&hash); - } char *name = script_obj_as_string (key); - script_vareable_t *vareable = ply_hashtable_lookup (hash->data.hash, name); - if (vareable) + if (!script_obj_is_hash(hash)) { - obj = vareable->object; - free (name); - } - else - { - obj = script_obj_new_null (); - vareable = malloc (sizeof (script_vareable_t)); - vareable->name = name; - vareable->object = obj; - ply_hashtable_insert (hash->data.hash, vareable->name, vareable); + script_obj_t *newhash = script_obj_new_hash (); + script_obj_assign (hash, newhash); + script_obj_unref (newhash); } - script_obj_ref (obj); + + obj = script_obj_hash_get_element (hash, name); + free(name); + script_obj_unref (hash); script_obj_unref (key); return obj; @@ -120,7 +101,7 @@ static script_obj_t *script_evaluate_var (script_state_t *state, script_obj_deref (&state->global); script_obj_deref (&state->local); - assert (state->global->type == SCRIPT_OBJ_TYPE_HASH); + assert (state->global->type == SCRIPT_OBJ_TYPE_HASH); /*FIXME use script-object functions */ assert (state->local->type == SCRIPT_OBJ_TYPE_HASH); script_vareable_t *vareable = ply_hashtable_lookup (state->local->data.hash, diff --git a/src/plugins/splash/script/script-object.c b/src/plugins/splash/script/script-object.c index c77be866..29aefbe7 100644 --- a/src/plugins/splash/script/script-object.c +++ b/src/plugins/splash/script/script-object.c @@ -576,6 +576,7 @@ void script_obj_assign (script_obj_t *obj_a, script_obj_t *script_obj_hash_get_element (script_obj_t *hash, const char *name) { + hash = script_obj_deref_direct (hash); assert (hash->type == SCRIPT_OBJ_TYPE_HASH); script_vareable_t *vareable = ply_hashtable_lookup (hash->data.hash, (void *) name);