From 7b5764c44527016d540920f38d9d3044d121d0c0 Mon Sep 17 00:00:00 2001 From: Ilyong Cho Date: Fri, 3 Apr 2015 16:11:03 +0900 Subject: [PATCH] Storing global envorinment on global object's SCOPE internal property --- jerry-core/ecma/operations/ecma-lex-env.cpp | 25 +++++++++++++++++++++ jerry-core/ecma/operations/ecma-lex-env.h | 1 + 2 files changed, 26 insertions(+) diff --git a/jerry-core/ecma/operations/ecma-lex-env.cpp b/jerry-core/ecma/operations/ecma-lex-env.cpp index bf9509388..6dce07d43 100644 --- a/jerry-core/ecma/operations/ecma-lex-env.cpp +++ b/jerry-core/ecma/operations/ecma-lex-env.cpp @@ -440,9 +440,34 @@ ecma_op_create_global_environment (ecma_object_t *glob_obj_p) /**< the Global ob ecma_object_t *glob_env_p = ecma_create_object_lex_env (NULL, glob_obj_p, false); #endif /* !CONFIG_ECMA_GLOBAL_ENVIRONMENT_DECLARATIVE */ + ecma_property_t *scope_prop_p = ecma_create_internal_property (glob_obj_p, ECMA_INTERNAL_PROPERTY_SCOPE); + ECMA_SET_POINTER (scope_prop_p->u.internal_property.value, glob_env_p); + return glob_env_p; } /* ecma_op_create_global_environment */ +/** + * Get global lexcial envorinment + * + * Note: + * This function should called after global environment was created. + * + * @return pointer to global lexical environment + */ +ecma_object_t* +ecma_get_globl_lexical_environment () +{ + ecma_object_t *glob_p = ecma_builtin_get (ECMA_BUILTIN_ID_GLOBAL); + + ecma_property_t *scope_prop_p = ecma_get_internal_property (glob_p, ECMA_INTERNAL_PROPERTY_SCOPE); + + ecma_object_t *glob_env_p = ECMA_GET_POINTER (ecma_object_t, + scope_prop_p->u.internal_property.value); + JERRY_ASSERT (glob_env_p != NULL); + + return glob_env_p; +} + /** * Figure out whether the lexical environment is global. * diff --git a/jerry-core/ecma/operations/ecma-lex-env.h b/jerry-core/ecma/operations/ecma-lex-env.h index 5b40f1aeb..8c384a940 100644 --- a/jerry-core/ecma/operations/ecma-lex-env.h +++ b/jerry-core/ecma/operations/ecma-lex-env.h @@ -66,6 +66,7 @@ extern void ecma_op_initialize_immutable_binding (ecma_object_t *lex_env_p, const ecma_value_t& value); extern ecma_object_t* ecma_op_create_global_environment (ecma_object_t *glob_obj_p); +extern ecma_object_t* ecma_get_globl_lexical_environment (); extern bool ecma_is_lexical_environment_global (ecma_object_t *lex_env_p); /**