From 04c6cb30c7b2fbc46eb114a07dd6ba2584a729af Mon Sep 17 00:00:00 2001 From: Ruben Ayrapetyan Date: Fri, 15 Aug 2014 17:26:49 +0400 Subject: [PATCH] Adding ecma_is_lexical_environment_global helper. --- src/libecmaoperations/ecma-lex-env.c | 28 ++++++++++++++++++++++++++++ src/libecmaoperations/ecma-lex-env.h | 1 + 2 files changed, 29 insertions(+) diff --git a/src/libecmaoperations/ecma-lex-env.c b/src/libecmaoperations/ecma-lex-env.c index f9192a1f9..7231a8aec 100644 --- a/src/libecmaoperations/ecma-lex-env.c +++ b/src/libecmaoperations/ecma-lex-env.c @@ -509,6 +509,34 @@ ecma_op_create_global_environment (void) return glob_env_p; } /* ecma_op_create_global_environment */ +/** + * Figure out whether the lexical environment is global. + * + * @return true - if lexical environment is object-bound and corresponding object is global object, + * false - otherwise. + */ +bool +ecma_is_lexical_environment_global (ecma_object_t *lex_env_p) /**< lexical environment */ +{ + JERRY_ASSERT (lex_env_p != NULL && lex_env_p->is_lexical_environment); + + ecma_lexical_environment_type_t type = lex_env_p->u.lexical_environment.type; + + bool ret_value = false; + + if (type == ECMA_LEXICAL_ENVIRONMENT_OBJECTBOUND) + { + ecma_object_t *binding_obj_p = ecma_get_lex_env_binding_object (lex_env_p); + ecma_object_t *glob_obj_p = ecma_get_global_object (); + + ret_value = (binding_obj_p == glob_obj_p); + + ecma_deref_object (glob_obj_p); + } + + return ret_value; +} /* ecma_is_lexical_environment_global */ + /** * @} * @} diff --git a/src/libecmaoperations/ecma-lex-env.h b/src/libecmaoperations/ecma-lex-env.h index 2b4c8a01d..7fa23ae27 100644 --- a/src/libecmaoperations/ecma-lex-env.h +++ b/src/libecmaoperations/ecma-lex-env.h @@ -53,6 +53,7 @@ extern void ecma_op_initialize_immutable_binding (ecma_object_t *lex_env_p, ecma_value_t value); extern ecma_object_t* ecma_op_create_global_environment (void); +extern bool ecma_is_lexical_environment_global (ecma_object_t *lex_env_p); /** * @}