diff --git a/src/libcoreint/interpreter.c b/src/libcoreint/interpreter.c index a7e295de7..5eff346b8 100644 --- a/src/libcoreint/interpreter.c +++ b/src/libcoreint/interpreter.c @@ -16,6 +16,7 @@ #include "deserializer.h" #include "ecma-gc.h" #include "ecma-globals.h" +#include "ecma-global-object.h" #include "ecma-helpers.h" #include "ecma-lex-env.h" #include "ecma-operations.h" @@ -50,12 +51,14 @@ run_int (void) { JERRY_ASSERT (__program != NULL); - const opcode_counter_t start_pos = 0; - ecma_value_t this_binding_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_UNDEFINED); - ecma_object_t *lex_env_p = ecma_op_create_global_environment (); FIXME (Strict mode); const bool is_strict = false; + const opcode_counter_t start_pos = 0; + ecma_object_t *glob_obj_p = ecma_op_create_global_object (); + ecma_object_t *lex_env_p = ecma_op_create_global_environment (glob_obj_p); + ecma_value_t this_binding_value = ecma_make_object_value (glob_obj_p); + ecma_completion_value_t completion = run_int_from_pos (start_pos, this_binding_value, lex_env_p, @@ -70,6 +73,7 @@ run_int (void) } case ECMA_COMPLETION_TYPE_EXIT: { + ecma_deref_object (glob_obj_p); ecma_deref_object (lex_env_p); ecma_finalize (); ecma_gc_run (ECMA_GC_GEN_COUNT - 1); diff --git a/src/libecmaoperations/ecma-lex-env.c b/src/libecmaoperations/ecma-lex-env.c index d1952112c..7fc68fe65 100644 --- a/src/libecmaoperations/ecma-lex-env.c +++ b/src/libecmaoperations/ecma-lex-env.c @@ -498,14 +498,10 @@ ecma_op_initialize_immutable_binding (ecma_object_t *lex_env_p, /**< lexical env * @return pointer to created lexical environment */ ecma_object_t* -ecma_op_create_global_environment (void) +ecma_op_create_global_environment (ecma_object_t *glob_obj_p) /**< the Global object */ { - ecma_object_t *glob_obj_p = ecma_op_create_global_object (); - ecma_object_t *glob_env_p = ecma_create_object_lex_env (NULL, glob_obj_p, false); - ecma_deref_object (glob_obj_p); - return glob_env_p; } /* ecma_op_create_global_environment */ diff --git a/src/libecmaoperations/ecma-lex-env.h b/src/libecmaoperations/ecma-lex-env.h index f2b0f39d3..65c252ac4 100644 --- a/src/libecmaoperations/ecma-lex-env.h +++ b/src/libecmaoperations/ecma-lex-env.h @@ -52,7 +52,7 @@ extern void ecma_op_initialize_immutable_binding (ecma_object_t *lex_env_p, ecma_string_t *name_p, ecma_value_t value); -extern ecma_object_t* ecma_op_create_global_environment (void); +extern ecma_object_t* ecma_op_create_global_environment (ecma_object_t *glob_obj_p); extern bool ecma_is_lexical_environment_global (ecma_object_t *lex_env_p); /**