@@ -421,11 +421,8 @@ ecma_gc_mark_properties (ecma_object_t *object_p, /**< object */
421
421
* Mark compiled code.
422
422
*/
423
423
static void
424
- ecma_gc_mark_compiled_code (const ecma_compiled_code_t * compiled_code_p ) /**< compiled code */
424
+ ecma_gc_mark_compiled_code (ecma_value_t script_value ) /**< script value */
425
425
{
426
- JERRY_ASSERT (!(compiled_code_p -> status_flags & CBC_CODE_FLAGS_STATIC_FUNCTION ));
427
-
428
- ecma_value_t script_value = ((cbc_uint8_arguments_t * ) compiled_code_p )-> script_value ;
429
426
cbc_script_t * script_p = ECMA_GET_INTERNAL_VALUE_POINTER (cbc_script_t , script_value );
430
427
431
428
if (script_p -> refs_and_type & CBC_SCRIPT_USER_VALUE_IS_OBJECT )
@@ -895,7 +892,9 @@ ecma_gc_mark (ecma_object_t *object_p) /**< object to mark from */
895
892
const ecma_compiled_code_t * compiled_code_p ;
896
893
compiled_code_p = ECMA_GET_INTERNAL_VALUE_POINTER (ecma_compiled_code_t ,
897
894
ext_object_p -> u .cls .u3 .value );
898
- ecma_gc_mark_compiled_code (compiled_code_p );
895
+
896
+ JERRY_ASSERT (!(compiled_code_p -> status_flags & CBC_CODE_FLAGS_STATIC_FUNCTION ));
897
+ ecma_gc_mark_compiled_code (((cbc_uint8_arguments_t * ) compiled_code_p )-> script_value );
899
898
break ;
900
899
}
901
900
#endif /* JERRY_PARSER */
@@ -934,7 +933,10 @@ ecma_gc_mark (ecma_object_t *object_p) /**< object to mark from */
934
933
if (!(module_p -> header .u .cls .u2 .module_flags & ECMA_MODULE_IS_NATIVE )
935
934
&& module_p -> u .compiled_code_p != NULL )
936
935
{
937
- ecma_gc_mark_compiled_code (module_p -> u .compiled_code_p );
936
+ const ecma_compiled_code_t * compiled_code_p = module_p -> u .compiled_code_p ;
937
+
938
+ JERRY_ASSERT (!(compiled_code_p -> status_flags & CBC_CODE_FLAGS_STATIC_FUNCTION ));
939
+ ecma_gc_mark_compiled_code (((cbc_uint8_arguments_t * ) compiled_code_p )-> script_value );
938
940
}
939
941
940
942
ecma_module_node_t * node_p = module_p -> imports_p ;
@@ -1095,21 +1097,16 @@ ecma_gc_mark (ecma_object_t *object_p) /**< object to mark from */
1095
1097
break ;
1096
1098
}
1097
1099
#endif /* JERRY_BUILTIN_PROXY */
1098
- case ECMA_OBJECT_TYPE_BOUND_FUNCTION :
1099
- {
1100
- ecma_gc_mark_bound_function_object (object_p );
1101
- break ;
1102
- }
1103
1100
case ECMA_OBJECT_TYPE_FUNCTION :
1104
1101
{
1105
1102
ecma_extended_object_t * ext_func_p = (ecma_extended_object_t * ) object_p ;
1106
1103
ecma_gc_set_object_visited (ECMA_GET_NON_NULL_POINTER_FROM_POINTER_TAG (ecma_object_t ,
1107
1104
ext_func_p -> u .function .scope_cp ));
1108
1105
1109
- const ecma_compiled_code_t * byte_code_p = ecma_op_function_get_compiled_code (ext_func_p );
1106
+ const ecma_compiled_code_t * compiled_code_p = ecma_op_function_get_compiled_code (ext_func_p );
1110
1107
1111
1108
#if JERRY_ESNEXT
1112
- if (CBC_FUNCTION_IS_ARROW (byte_code_p -> status_flags ))
1109
+ if (CBC_FUNCTION_IS_ARROW (compiled_code_p -> status_flags ))
1113
1110
{
1114
1111
ecma_arrow_function_t * arrow_func_p = (ecma_arrow_function_t * ) object_p ;
1115
1112
@@ -1126,25 +1123,22 @@ ecma_gc_mark (ecma_object_t *object_p) /**< object to mark from */
1126
1123
#endif /* JERRY_ESNEXT */
1127
1124
1128
1125
#if JERRY_SNAPSHOT_EXEC
1129
- if (JERRY_UNLIKELY (byte_code_p -> status_flags & CBC_CODE_FLAGS_STATIC_FUNCTION ))
1126
+ if (JERRY_UNLIKELY (compiled_code_p -> status_flags & CBC_CODE_FLAGS_STATIC_FUNCTION ))
1130
1127
{
1131
1128
/* Static snapshot functions have a global realm */
1132
1129
break ;
1133
1130
}
1134
1131
#endif /* JERRY_SNAPSHOT_EXEC */
1135
1132
1136
- ecma_gc_mark_compiled_code (byte_code_p );
1133
+ JERRY_ASSERT (!(compiled_code_p -> status_flags & CBC_CODE_FLAGS_STATIC_FUNCTION ));
1134
+ ecma_gc_mark_compiled_code (((cbc_uint8_arguments_t * ) compiled_code_p )-> script_value );
1137
1135
break ;
1138
1136
}
1139
- #if JERRY_BUILTIN_REALMS
1140
- case ECMA_OBJECT_TYPE_NATIVE_FUNCTION :
1137
+ case ECMA_OBJECT_TYPE_BOUND_FUNCTION :
1141
1138
{
1142
- ecma_native_function_t * native_function_p = (ecma_native_function_t * ) object_p ;
1143
- ecma_gc_set_object_visited (ECMA_GET_INTERNAL_VALUE_POINTER (ecma_object_t ,
1144
- native_function_p -> realm_value ));
1139
+ ecma_gc_mark_bound_function_object (object_p );
1145
1140
break ;
1146
1141
}
1147
- #endif /* JERRY_BUILTIN_REALMS */
1148
1142
#if JERRY_ESNEXT || JERRY_BUILTIN_REALMS
1149
1143
case ECMA_OBJECT_TYPE_BUILT_IN_FUNCTION :
1150
1144
{
@@ -1226,6 +1220,22 @@ ecma_gc_mark (ecma_object_t *object_p) /**< object to mark from */
1226
1220
break ;
1227
1221
}
1228
1222
#endif /* JERRY_ESNEXT || JERRY_BUILTIN_REALMS */
1223
+ #if JERRY_ESNEXT
1224
+ case ECMA_OBJECT_TYPE_CONSTRUCTOR_FUNCTION :
1225
+ {
1226
+ ecma_gc_mark_compiled_code (((ecma_extended_object_t * ) object_p )-> u .constructor_function .script_value );
1227
+ break ;
1228
+ }
1229
+ #endif /* JERRY_ESNEXT */
1230
+ #if JERRY_BUILTIN_REALMS
1231
+ case ECMA_OBJECT_TYPE_NATIVE_FUNCTION :
1232
+ {
1233
+ ecma_native_function_t * native_function_p = (ecma_native_function_t * ) object_p ;
1234
+ ecma_gc_set_object_visited (ECMA_GET_INTERNAL_VALUE_POINTER (ecma_object_t ,
1235
+ native_function_p -> realm_value ));
1236
+ break ;
1237
+ }
1238
+ #endif /* JERRY_BUILTIN_REALMS */
1229
1239
default :
1230
1240
{
1231
1241
break ;
@@ -1974,40 +1984,6 @@ ecma_gc_free_object (ecma_object_t *object_p) /**< object to free */
1974
1984
#endif /* JERRY_SNAPSHOT_EXEC */
1975
1985
break ;
1976
1986
}
1977
- case ECMA_OBJECT_TYPE_BOUND_FUNCTION :
1978
- {
1979
- ext_object_size = sizeof (ecma_bound_function_t );
1980
- ecma_bound_function_t * bound_func_p = (ecma_bound_function_t * ) object_p ;
1981
-
1982
- ecma_value_t args_len_or_this = bound_func_p -> header .u .bound_function .args_len_or_this ;
1983
-
1984
- #if JERRY_ESNEXT
1985
- ecma_free_value (bound_func_p -> target_length );
1986
- #endif /* JERRY_ESNEXT */
1987
-
1988
- if (!ecma_is_value_integer_number (args_len_or_this ))
1989
- {
1990
- ecma_free_value_if_not_object (args_len_or_this );
1991
- break ;
1992
- }
1993
-
1994
- ecma_integer_value_t args_length = ecma_get_integer_from_value (args_len_or_this );
1995
- ecma_value_t * args_p = (ecma_value_t * ) (bound_func_p + 1 );
1996
-
1997
- for (ecma_integer_value_t i = 0 ; i < args_length ; i ++ )
1998
- {
1999
- ecma_free_value_if_not_object (args_p [i ]);
2000
- }
2001
-
2002
- size_t args_size = ((size_t ) args_length ) * sizeof (ecma_value_t );
2003
- ext_object_size += args_size ;
2004
- break ;
2005
- }
2006
- case ECMA_OBJECT_TYPE_NATIVE_FUNCTION :
2007
- {
2008
- ext_object_size = sizeof (ecma_native_function_t );
2009
- break ;
2010
- }
2011
1987
case ECMA_OBJECT_TYPE_BUILT_IN_FUNCTION :
2012
1988
{
2013
1989
ecma_extended_object_t * extended_func_p = (ecma_extended_object_t * ) object_p ;
@@ -2071,6 +2047,47 @@ ecma_gc_free_object (ecma_object_t *object_p) /**< object to free */
2071
2047
#endif /* JERRY_ESNEXT */
2072
2048
break ;
2073
2049
}
2050
+ case ECMA_OBJECT_TYPE_BOUND_FUNCTION :
2051
+ {
2052
+ ext_object_size = sizeof (ecma_bound_function_t );
2053
+ ecma_bound_function_t * bound_func_p = (ecma_bound_function_t * ) object_p ;
2054
+
2055
+ ecma_value_t args_len_or_this = bound_func_p -> header .u .bound_function .args_len_or_this ;
2056
+
2057
+ #if JERRY_ESNEXT
2058
+ ecma_free_value (bound_func_p -> target_length );
2059
+ #endif /* JERRY_ESNEXT */
2060
+
2061
+ if (!ecma_is_value_integer_number (args_len_or_this ))
2062
+ {
2063
+ ecma_free_value_if_not_object (args_len_or_this );
2064
+ break ;
2065
+ }
2066
+
2067
+ ecma_integer_value_t args_length = ecma_get_integer_from_value (args_len_or_this );
2068
+ ecma_value_t * args_p = (ecma_value_t * ) (bound_func_p + 1 );
2069
+
2070
+ for (ecma_integer_value_t i = 0 ; i < args_length ; i ++ )
2071
+ {
2072
+ ecma_free_value_if_not_object (args_p [i ]);
2073
+ }
2074
+
2075
+ size_t args_size = ((size_t ) args_length ) * sizeof (ecma_value_t );
2076
+ ext_object_size += args_size ;
2077
+ break ;
2078
+ }
2079
+ #if JERRY_ESNEXT
2080
+ case ECMA_OBJECT_TYPE_CONSTRUCTOR_FUNCTION :
2081
+ {
2082
+ ecma_script_deref (((ecma_extended_object_t * ) object_p )-> u .constructor_function .script_value );
2083
+ break ;
2084
+ }
2085
+ #endif /* JERRY_ESNEXT */
2086
+ case ECMA_OBJECT_TYPE_NATIVE_FUNCTION :
2087
+ {
2088
+ ext_object_size = sizeof (ecma_native_function_t );
2089
+ break ;
2090
+ }
2074
2091
default :
2075
2092
{
2076
2093
JERRY_UNREACHABLE ();
0 commit comments