@@ -49,6 +49,9 @@ snapshot_get_global_flags (bool has_regex, /**< regex literal is present */
4949#if ENABLED (JERRY_ESNEXT )
5050 flags |= (has_class ? JERRY_SNAPSHOT_HAS_CLASS_LITERAL : 0 );
5151#endif /* ENABLED (JERRY_ESNEXT) */
52+ #if ENABLED (JERRY_BUILTIN_REALMS )
53+ flags |= JERRY_SNAPSHOT_HAS_REALM_VALUE ;
54+ #endif /* ENABLED (JERRY_BUILTIN_REALMS) */
5255
5356 return flags ;
5457} /* snapshot_get_global_flags */
@@ -67,6 +70,9 @@ snapshot_check_global_flags (uint32_t global_flags) /**< global flags */
6770#if ENABLED (JERRY_ESNEXT )
6871 global_flags &= (uint32_t ) ~JERRY_SNAPSHOT_HAS_CLASS_LITERAL ;
6972#endif /* ENABLED (JERRY_ESNEXT) */
73+ #if ENABLED (JERRY_BUILTIN_REALMS )
74+ global_flags |= JERRY_SNAPSHOT_HAS_REALM_VALUE ;
75+ #endif /* ENABLED (JERRY_BUILTIN_REALMS) */
7076
7177 return global_flags == snapshot_get_global_flags (false, false);
7278} /* snapshot_check_global_flags */
@@ -380,6 +386,10 @@ static_snapshot_add_compiled_code (ecma_compiled_code_t *compiled_code_p, /**< c
380386 cbc_uint16_arguments_t * args_p = (cbc_uint16_arguments_t * ) buffer_p ;
381387 literal_end = (uint32_t ) (args_p -> literal_end - args_p -> register_end );
382388 const_literal_end = (uint32_t ) (args_p -> const_literal_end - args_p -> register_end );
389+
390+ #if ENABLED (JERRY_BUILTIN_REALMS )
391+ args_p -> realm_value = ECMA_VALUE_UNDEFINED ;
392+ #endif /* ENABLED (JERRY_BUILTIN_REALMS) */
383393 }
384394 else
385395 {
@@ -388,6 +398,10 @@ static_snapshot_add_compiled_code (ecma_compiled_code_t *compiled_code_p, /**< c
388398 cbc_uint8_arguments_t * args_p = (cbc_uint8_arguments_t * ) buffer_p ;
389399 literal_end = (uint32_t ) (args_p -> literal_end - args_p -> register_end );
390400 const_literal_end = (uint32_t ) (args_p -> const_literal_end - args_p -> register_end );
401+
402+ #if ENABLED (JERRY_BUILTIN_REALMS )
403+ args_p -> realm_value = ECMA_VALUE_UNDEFINED ;
404+ #endif /* ENABLED (JERRY_BUILTIN_REALMS) */
391405 }
392406
393407 for (uint32_t i = 0 ; i < const_literal_end ; i ++ )
@@ -585,6 +599,10 @@ snapshot_load_compiled_code (const uint8_t *base_addr_p, /**< base address of th
585599 const_literal_end = (uint32_t ) (args_p -> const_literal_end - args_p -> register_end );
586600 literal_end = (uint32_t ) (args_p -> literal_end - args_p -> register_end );
587601 header_size = sizeof (cbc_uint16_arguments_t );
602+
603+ #if ENABLED (JERRY_BUILTIN_REALMS )
604+ args_p -> realm_value = ecma_make_object_value (ecma_builtin_get_global ());
605+ #endif /* ENABLED (JERRY_BUILTIN_REALMS) */
588606 }
589607 else
590608 {
@@ -595,6 +613,10 @@ snapshot_load_compiled_code (const uint8_t *base_addr_p, /**< base address of th
595613 const_literal_end = (uint32_t ) (args_p -> const_literal_end - args_p -> register_end );
596614 literal_end = (uint32_t ) (args_p -> literal_end - args_p -> register_end );
597615 header_size = sizeof (cbc_uint8_arguments_t );
616+
617+ #if ENABLED (JERRY_BUILTIN_REALMS )
618+ args_p -> realm_value = ecma_make_object_value (ecma_builtin_get_global ());
619+ #endif /* ENABLED (JERRY_BUILTIN_REALMS) */
598620 }
599621
600622 if (copy_bytecode
@@ -1003,14 +1025,20 @@ jerry_snapshot_result (const uint32_t *snapshot_p, /**< snapshot */
10031025
10041026 if (as_function )
10051027 {
1028+ ecma_object_t * global_object_p = ecma_builtin_get_global ();
1029+
1030+ #if ENABLED (JERRY_BUILTIN_REALMS )
1031+ JERRY_ASSERT (global_object_p == ecma_get_object_from_value (ecma_op_function_get_realm (bytecode_p )));
1032+ #endif /* ENABLED (JERRY_BUILTIN_REALMS) */
1033+
10061034#if ENABLED (JERRY_ESNEXT )
10071035 if (bytecode_p -> status_flags & CBC_CODE_FLAGS_LEXICAL_BLOCK_NEEDED )
10081036 {
1009- ecma_create_global_lexical_block ();
1037+ ecma_create_global_lexical_block (global_object_p );
10101038 }
10111039#endif /* ENABLED (JERRY_ESNEXT) */
10121040
1013- ecma_object_t * lex_env_p = ecma_get_global_scope ();
1041+ ecma_object_t * lex_env_p = ecma_get_global_scope (global_object_p );
10141042 ecma_object_t * func_obj_p = ecma_op_create_simple_function_object (lex_env_p , bytecode_p );
10151043
10161044 if (!(bytecode_p -> status_flags & CBC_CODE_FLAGS_STATIC_FUNCTION ))
0 commit comments