Introducing 'ecmabuiltins' component and interface for instantiating built-in properties.

This commit is contained in:
Ruben Ayrapetyan
2014-09-17 21:12:05 +04:00
parent 56e6d2a380
commit 11cf22f06c
6 changed files with 136 additions and 3 deletions
+18 -3
View File
@@ -17,6 +17,7 @@
#include "ecma-globals.h"
#include "ecma-array-object.h"
#include "ecma-function-object.h"
#include "ecma-non-instantiated-builtins.h"
#include "ecma-objects-arguments.h"
#include "ecma-objects-general.h"
#include "ecma-objects.h"
@@ -96,6 +97,8 @@ ecma_op_object_get_own_property (ecma_object_t *obj_p, /**< the object */
const ecma_object_type_t type = ecma_get_object_type (obj_p);
ecma_property_t *prop_p = NULL;
switch (type)
{
case ECMA_OBJECT_TYPE_GENERAL:
@@ -104,12 +107,16 @@ ecma_op_object_get_own_property (ecma_object_t *obj_p, /**< the object */
case ECMA_OBJECT_TYPE_BOUND_FUNCTION:
case ECMA_OBJECT_TYPE_BUILT_IN_FUNCTION:
{
return ecma_op_general_object_get_own_property (obj_p, property_name_p);
prop_p = ecma_op_general_object_get_own_property (obj_p, property_name_p);
break;
}
case ECMA_OBJECT_TYPE_ARGUMENTS:
{
return ecma_op_arguments_object_get_own_property (obj_p, property_name_p);
prop_p = ecma_op_arguments_object_get_own_property (obj_p, property_name_p);
break;
}
case ECMA_OBJECT_TYPE_STRING:
@@ -119,7 +126,15 @@ ecma_op_object_get_own_property (ecma_object_t *obj_p, /**< the object */
}
}
JERRY_UNREACHABLE();
if (unlikely (prop_p == NULL))
{
if (ecma_get_object_has_non_instantiated_builtins (obj_p))
{
prop_p = ecma_object_try_to_get_non_instantiated_property (obj_p, property_name_p);
}
}
return prop_p;
} /* ecma_op_object_get_own_property */
/**