Removing JERRY_UNREACHABLE from lexical environment related routines.

This commit is contained in:
Ruben Ayrapetyan
2014-12-05 13:25:41 +03:00
parent 5bb90fb8ca
commit 1182f7bbfe
+38 -82
View File
@@ -45,24 +45,20 @@ ecma_op_has_binding (ecma_object_t *lex_env_p, /**< lexical environment */
JERRY_ASSERT(lex_env_p != NULL JERRY_ASSERT(lex_env_p != NULL
&& ecma_is_lexical_environment (lex_env_p)); && ecma_is_lexical_environment (lex_env_p));
switch (ecma_get_lex_env_type (lex_env_p)) if (ecma_get_lex_env_type (lex_env_p) == ECMA_LEXICAL_ENVIRONMENT_DECLARATIVE)
{
case ECMA_LEXICAL_ENVIRONMENT_DECLARATIVE:
{ {
ecma_property_t *property_p = ecma_find_named_property (lex_env_p, name_p); ecma_property_t *property_p = ecma_find_named_property (lex_env_p, name_p);
return (property_p != NULL); return (property_p != NULL);
} }
else
case ECMA_LEXICAL_ENVIRONMENT_OBJECTBOUND:
{ {
JERRY_ASSERT (ecma_get_lex_env_type (lex_env_p) == ECMA_LEXICAL_ENVIRONMENT_OBJECTBOUND);
ecma_object_t *binding_obj_p = ecma_get_lex_env_binding_object (lex_env_p); ecma_object_t *binding_obj_p = ecma_get_lex_env_binding_object (lex_env_p);
return (ecma_op_object_get_property (binding_obj_p, name_p) != NULL); return (ecma_op_object_get_property (binding_obj_p, name_p) != NULL);
} }
}
JERRY_UNREACHABLE ();
} /* ecma_op_has_binding */ } /* ecma_op_has_binding */
/** /**
@@ -82,19 +78,16 @@ ecma_op_create_mutable_binding (ecma_object_t *lex_env_p, /**< lexical environme
&& ecma_is_lexical_environment (lex_env_p)); && ecma_is_lexical_environment (lex_env_p));
JERRY_ASSERT(name_p != NULL); JERRY_ASSERT(name_p != NULL);
switch (ecma_get_lex_env_type (lex_env_p)) if (ecma_get_lex_env_type (lex_env_p) == ECMA_LEXICAL_ENVIRONMENT_DECLARATIVE)
{
case ECMA_LEXICAL_ENVIRONMENT_DECLARATIVE:
{ {
ecma_create_named_data_property (lex_env_p, ecma_create_named_data_property (lex_env_p,
name_p, name_p,
true, false, is_deletable); true, false, is_deletable);
break;
} }
case ECMA_LEXICAL_ENVIRONMENT_OBJECTBOUND: else
{ {
JERRY_ASSERT (ecma_get_lex_env_type (lex_env_p) == ECMA_LEXICAL_ENVIRONMENT_OBJECTBOUND);
ecma_object_t *binding_obj_p = ecma_get_lex_env_binding_object (lex_env_p); ecma_object_t *binding_obj_p = ecma_get_lex_env_binding_object (lex_env_p);
ecma_property_descriptor_t prop_desc = ecma_make_empty_property_descriptor (); ecma_property_descriptor_t prop_desc = ecma_make_empty_property_descriptor ();
@@ -117,13 +110,14 @@ ecma_op_create_mutable_binding (ecma_object_t *lex_env_p, /**< lexical environme
&prop_desc, &prop_desc,
true); true);
if (!(ecma_is_completion_value_normal_true (completion) if (ecma_is_completion_value_throw (completion))
|| ecma_is_completion_value_normal_false (completion)))
{ {
JERRY_ASSERT(ecma_is_completion_value_throw (completion));
return completion; return completion;
} }
else
{
JERRY_ASSERT (ecma_is_completion_value_normal_true (completion)
|| ecma_is_completion_value_normal_false (completion));
} }
} }
@@ -148,9 +142,7 @@ ecma_op_set_mutable_binding (ecma_object_t *lex_env_p, /**< lexical environment
&& ecma_is_lexical_environment (lex_env_p)); && ecma_is_lexical_environment (lex_env_p));
JERRY_ASSERT(name_p != NULL); JERRY_ASSERT(name_p != NULL);
switch (ecma_get_lex_env_type (lex_env_p)) if (ecma_get_lex_env_type (lex_env_p) == ECMA_LEXICAL_ENVIRONMENT_DECLARATIVE)
{
case ECMA_LEXICAL_ENVIRONMENT_DECLARATIVE:
{ {
#ifndef JERRY_NDEBUG #ifndef JERRY_NDEBUG
# ifdef CONFIG_ECMA_COMPACT_PROFILE # ifdef CONFIG_ECMA_COMPACT_PROFILE
@@ -182,26 +174,26 @@ ecma_op_set_mutable_binding (ecma_object_t *lex_env_p, /**< lexical environment
{ {
return ecma_make_throw_obj_completion_value (ecma_new_standard_error (ECMA_ERROR_TYPE)); return ecma_make_throw_obj_completion_value (ecma_new_standard_error (ECMA_ERROR_TYPE));
} }
break;
} }
case ECMA_LEXICAL_ENVIRONMENT_OBJECTBOUND: else
{ {
JERRY_ASSERT (ecma_get_lex_env_type (lex_env_p) == ECMA_LEXICAL_ENVIRONMENT_OBJECTBOUND);
ecma_object_t *binding_obj_p = ecma_get_lex_env_binding_object (lex_env_p); ecma_object_t *binding_obj_p = ecma_get_lex_env_binding_object (lex_env_p);
ecma_completion_value_t completion = ecma_op_object_put (binding_obj_p, ecma_completion_value_t completion = ecma_op_object_put (binding_obj_p,
name_p, name_p,
value, value,
is_strict); is_strict);
if (!(ecma_is_completion_value_normal_true (completion)
|| ecma_is_completion_value_normal_false (completion)))
{
JERRY_ASSERT(ecma_is_completion_value_throw (completion));
if (ecma_is_completion_value_throw (completion))
{
return completion; return completion;
} }
else
break; {
JERRY_ASSERT (ecma_is_completion_value_normal_true (completion)
|| ecma_is_completion_value_normal_false (completion));
} }
} }
@@ -225,9 +217,7 @@ ecma_op_get_binding_value (ecma_object_t *lex_env_p, /**< lexical environment */
&& ecma_is_lexical_environment (lex_env_p)); && ecma_is_lexical_environment (lex_env_p));
JERRY_ASSERT(name_p != NULL); JERRY_ASSERT(name_p != NULL);
switch (ecma_get_lex_env_type (lex_env_p)) if (ecma_get_lex_env_type (lex_env_p) == ECMA_LEXICAL_ENVIRONMENT_DECLARATIVE)
{
case ECMA_LEXICAL_ENVIRONMENT_DECLARATIVE:
{ {
#ifndef JERRY_NDEBUG #ifndef JERRY_NDEBUG
# ifdef CONFIG_ECMA_COMPACT_PROFILE # ifdef CONFIG_ECMA_COMPACT_PROFILE
@@ -269,11 +259,11 @@ ecma_op_get_binding_value (ecma_object_t *lex_env_p, /**< lexical environment */
} }
return ecma_make_normal_completion_value (ecma_copy_value (prop_value, true)); return ecma_make_normal_completion_value (ecma_copy_value (prop_value, true));
break;
} }
case ECMA_LEXICAL_ENVIRONMENT_OBJECTBOUND: else
{ {
JERRY_ASSERT (ecma_get_lex_env_type (lex_env_p) == ECMA_LEXICAL_ENVIRONMENT_OBJECTBOUND);
ecma_object_t *binding_obj_p = ecma_get_lex_env_binding_object (lex_env_p); ecma_object_t *binding_obj_p = ecma_get_lex_env_binding_object (lex_env_p);
if (ecma_op_object_get_property (binding_obj_p, name_p) == NULL) if (ecma_op_object_get_property (binding_obj_p, name_p) == NULL)
@@ -290,9 +280,6 @@ ecma_op_get_binding_value (ecma_object_t *lex_env_p, /**< lexical environment */
return ecma_op_object_get (binding_obj_p, name_p); return ecma_op_object_get (binding_obj_p, name_p);
} }
}
JERRY_UNREACHABLE();
} /* ecma_op_get_binding_value */ } /* ecma_op_get_binding_value */
/** /**
@@ -312,9 +299,8 @@ ecma_op_delete_binding (ecma_object_t *lex_env_p, /**< lexical environment */
&& ecma_is_lexical_environment (lex_env_p)); && ecma_is_lexical_environment (lex_env_p));
JERRY_ASSERT(name_p != NULL); JERRY_ASSERT(name_p != NULL);
switch (ecma_get_lex_env_type (lex_env_p))
{ if (ecma_get_lex_env_type (lex_env_p) == ECMA_LEXICAL_ENVIRONMENT_DECLARATIVE)
case ECMA_LEXICAL_ENVIRONMENT_DECLARATIVE:
{ {
ecma_property_t *prop_p = ecma_find_named_property (lex_env_p, name_p); ecma_property_t *prop_p = ecma_find_named_property (lex_env_p, name_p);
ecma_simple_value_t ret_val; ecma_simple_value_t ret_val;
@@ -341,15 +327,14 @@ ecma_op_delete_binding (ecma_object_t *lex_env_p, /**< lexical environment */
return ecma_make_simple_completion_value (ret_val); return ecma_make_simple_completion_value (ret_val);
} }
case ECMA_LEXICAL_ENVIRONMENT_OBJECTBOUND: else
{ {
JERRY_ASSERT (ecma_get_lex_env_type (lex_env_p) == ECMA_LEXICAL_ENVIRONMENT_OBJECTBOUND);
ecma_object_t *binding_obj_p = ecma_get_lex_env_binding_object (lex_env_p); ecma_object_t *binding_obj_p = ecma_get_lex_env_binding_object (lex_env_p);
return ecma_op_object_delete (binding_obj_p, name_p, false); return ecma_op_object_delete (binding_obj_p, name_p, false);
} }
}
JERRY_UNREACHABLE();
} /* ecma_op_delete_binding */ } /* ecma_op_delete_binding */
/** /**
@@ -366,14 +351,14 @@ ecma_op_implicit_this_value (ecma_object_t *lex_env_p) /**< lexical environment
JERRY_ASSERT(lex_env_p != NULL JERRY_ASSERT(lex_env_p != NULL
&& ecma_is_lexical_environment (lex_env_p)); && ecma_is_lexical_environment (lex_env_p));
switch (ecma_get_lex_env_type (lex_env_p)) if (ecma_get_lex_env_type (lex_env_p) == ECMA_LEXICAL_ENVIRONMENT_DECLARATIVE)
{
case ECMA_LEXICAL_ENVIRONMENT_DECLARATIVE:
{ {
return ecma_make_simple_completion_value (ECMA_SIMPLE_VALUE_UNDEFINED); return ecma_make_simple_completion_value (ECMA_SIMPLE_VALUE_UNDEFINED);
} }
case ECMA_LEXICAL_ENVIRONMENT_OBJECTBOUND: else
{ {
JERRY_ASSERT (ecma_get_lex_env_type (lex_env_p) == ECMA_LEXICAL_ENVIRONMENT_OBJECTBOUND);
if (ecma_get_lex_env_provide_this (lex_env_p)) if (ecma_get_lex_env_provide_this (lex_env_p))
{ {
ecma_object_t *binding_obj_p = ecma_get_lex_env_binding_object (lex_env_p); ecma_object_t *binding_obj_p = ecma_get_lex_env_binding_object (lex_env_p);
@@ -386,9 +371,6 @@ ecma_op_implicit_this_value (ecma_object_t *lex_env_p) /**< lexical environment
return ecma_make_simple_completion_value (ECMA_SIMPLE_VALUE_UNDEFINED); return ecma_make_simple_completion_value (ECMA_SIMPLE_VALUE_UNDEFINED);
} }
} }
}
JERRY_UNREACHABLE();
} /* ecma_op_implicit_this_value */ } /* ecma_op_implicit_this_value */
/** /**
@@ -402,11 +384,8 @@ ecma_op_create_immutable_binding (ecma_object_t *lex_env_p, /**< lexical environ
{ {
JERRY_ASSERT(lex_env_p != NULL JERRY_ASSERT(lex_env_p != NULL
&& ecma_is_lexical_environment (lex_env_p)); && ecma_is_lexical_environment (lex_env_p));
JERRY_ASSERT (ecma_get_lex_env_type (lex_env_p) == ECMA_LEXICAL_ENVIRONMENT_DECLARATIVE);
switch (ecma_get_lex_env_type (lex_env_p))
{
case ECMA_LEXICAL_ENVIRONMENT_DECLARATIVE:
{
/* /*
* Warning: * Warning:
* Whether immutable bindings are deletable seems not to be defined by ECMA v5. * Whether immutable bindings are deletable seems not to be defined by ECMA v5.
@@ -419,16 +398,6 @@ ecma_op_create_immutable_binding (ecma_object_t *lex_env_p, /**< lexical environ
ecma_set_named_data_property_value (prop_p, ecma_set_named_data_property_value (prop_p,
ecma_make_simple_value (ECMA_SIMPLE_VALUE_EMPTY)); ecma_make_simple_value (ECMA_SIMPLE_VALUE_EMPTY));
return;
}
case ECMA_LEXICAL_ENVIRONMENT_OBJECTBOUND:
{
JERRY_UNREACHABLE();
}
}
JERRY_UNREACHABLE();
} /* ecma_op_create_immutable_binding */ } /* ecma_op_create_immutable_binding */
/** /**
@@ -443,11 +412,8 @@ ecma_op_initialize_immutable_binding (ecma_object_t *lex_env_p, /**< lexical env
{ {
JERRY_ASSERT(lex_env_p != NULL JERRY_ASSERT(lex_env_p != NULL
&& ecma_is_lexical_environment (lex_env_p)); && ecma_is_lexical_environment (lex_env_p));
JERRY_ASSERT (ecma_get_lex_env_type (lex_env_p) == ECMA_LEXICAL_ENVIRONMENT_DECLARATIVE);
switch (ecma_get_lex_env_type (lex_env_p))
{
case ECMA_LEXICAL_ENVIRONMENT_DECLARATIVE:
{
ecma_property_t *prop_p = ecma_get_named_data_property (lex_env_p, name_p); ecma_property_t *prop_p = ecma_get_named_data_property (lex_env_p, name_p);
/* The binding must be unitialized immutable binding */ /* The binding must be unitialized immutable binding */
@@ -455,16 +421,6 @@ ecma_op_initialize_immutable_binding (ecma_object_t *lex_env_p, /**< lexical env
&& ecma_is_value_empty (ecma_get_named_data_property_value (prop_p))); && ecma_is_value_empty (ecma_get_named_data_property_value (prop_p)));
ecma_named_data_property_assign_value (lex_env_p, prop_p, value); ecma_named_data_property_assign_value (lex_env_p, prop_p, value);
return;
}
case ECMA_LEXICAL_ENVIRONMENT_OBJECTBOUND:
{
JERRY_UNREACHABLE();
}
}
JERRY_UNREACHABLE();
} /* ecma_op_initialize_immutable_binding */ } /* ecma_op_initialize_immutable_binding */
/** /**