Setting ThisBinding of the Global Environment to the Global Object.
This commit is contained in:
@@ -16,6 +16,7 @@
|
|||||||
#include "deserializer.h"
|
#include "deserializer.h"
|
||||||
#include "ecma-gc.h"
|
#include "ecma-gc.h"
|
||||||
#include "ecma-globals.h"
|
#include "ecma-globals.h"
|
||||||
|
#include "ecma-global-object.h"
|
||||||
#include "ecma-helpers.h"
|
#include "ecma-helpers.h"
|
||||||
#include "ecma-lex-env.h"
|
#include "ecma-lex-env.h"
|
||||||
#include "ecma-operations.h"
|
#include "ecma-operations.h"
|
||||||
@@ -50,12 +51,14 @@ run_int (void)
|
|||||||
{
|
{
|
||||||
JERRY_ASSERT (__program != NULL);
|
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);
|
FIXME (Strict mode);
|
||||||
const bool is_strict = false;
|
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,
|
ecma_completion_value_t completion = run_int_from_pos (start_pos,
|
||||||
this_binding_value,
|
this_binding_value,
|
||||||
lex_env_p,
|
lex_env_p,
|
||||||
@@ -70,6 +73,7 @@ run_int (void)
|
|||||||
}
|
}
|
||||||
case ECMA_COMPLETION_TYPE_EXIT:
|
case ECMA_COMPLETION_TYPE_EXIT:
|
||||||
{
|
{
|
||||||
|
ecma_deref_object (glob_obj_p);
|
||||||
ecma_deref_object (lex_env_p);
|
ecma_deref_object (lex_env_p);
|
||||||
ecma_finalize ();
|
ecma_finalize ();
|
||||||
ecma_gc_run (ECMA_GC_GEN_COUNT - 1);
|
ecma_gc_run (ECMA_GC_GEN_COUNT - 1);
|
||||||
|
|||||||
@@ -498,14 +498,10 @@ ecma_op_initialize_immutable_binding (ecma_object_t *lex_env_p, /**< lexical env
|
|||||||
* @return pointer to created lexical environment
|
* @return pointer to created lexical environment
|
||||||
*/
|
*/
|
||||||
ecma_object_t*
|
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_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;
|
return glob_env_p;
|
||||||
} /* ecma_op_create_global_environment */
|
} /* ecma_op_create_global_environment */
|
||||||
|
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ extern void ecma_op_initialize_immutable_binding (ecma_object_t *lex_env_p,
|
|||||||
ecma_string_t *name_p,
|
ecma_string_t *name_p,
|
||||||
ecma_value_t value);
|
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);
|
extern bool ecma_is_lexical_environment_global (ecma_object_t *lex_env_p);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user