Small performance optimizations of the interpreter.

Short summary of the changes:
 - The ecma_reference_t is removed, and its helper functions are deleted.
 - The delete operation does not depend on ecma_reference_t anymore.
 - A new resolve function is added which returns the current value
   of a named binding in the context chain.
 - The vm_op_set_value does not perform type conversions when its arguments
   has the appropriate types.

JerryScript-DCO-1.0-Signed-off-by: Zoltan Herczeg zherczeg.u-szeged@partner.samsung.com
This commit is contained in:
Zoltan Herczeg
2016-07-06 00:00:03 -07:00
parent fb9b4dd807
commit 41337dbd59
5 changed files with 112 additions and 139 deletions
+4 -22
View File
@@ -260,43 +260,25 @@ vm_op_delete_prop (ecma_value_t object, /**< base object */
*/
ecma_value_t
vm_op_delete_var (jmem_cpointer_t name_literal, /**< name literal */
ecma_object_t *lex_env_p, /**< lexical environment */
bool is_strict) /**< strict mode */
ecma_object_t *lex_env_p) /**< lexical environment */
{
ecma_value_t completion_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_EMPTY);
ecma_string_t *var_name_str_p = JMEM_CP_GET_NON_NULL_POINTER (ecma_string_t, name_literal);
ecma_reference_t ref = ecma_op_get_identifier_reference (lex_env_p,
var_name_str_p,
is_strict);
ecma_object_t *ref_base_lex_env_p = ecma_op_resolve_reference_base (lex_env_p, var_name_str_p);
JERRY_ASSERT (!ref.is_strict);
if (ecma_is_value_undefined (ref.base))
if (ref_base_lex_env_p == NULL)
{
completion_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_TRUE);
}
else
{
ecma_object_t *ref_base_lex_env_p = ecma_op_resolve_reference_base (lex_env_p, var_name_str_p);
JERRY_ASSERT (ecma_is_lexical_environment (ref_base_lex_env_p));
ECMA_TRY_CATCH (delete_op_ret_val,
ecma_op_delete_binding (ref_base_lex_env_p,
ECMA_GET_NON_NULL_POINTER (ecma_string_t,
ref.referenced_name_cp)),
completion_value);
completion_value = delete_op_ret_val;
ECMA_FINALIZE (delete_op_ret_val);
completion_value = ecma_op_delete_binding (ref_base_lex_env_p, var_name_str_p);
}
ecma_free_reference (ref);
return completion_value;
} /* vm_op_delete_var */