@@ -1158,8 +1158,8 @@ opfunc_add_computed_field (ecma_value_t class_object, /**< class object */
1158
1158
* @return - new external function ecma-object
1159
1159
*/
1160
1160
ecma_value_t
1161
- opfunc_create_implicit_class_constructor (uint8_t opcode , /**< current cbc opcode */
1162
- const ecma_compiled_code_t * bytecode_p ) /**< current byte code */
1161
+ opfunc_create_implicit_class_constructor (const ecma_compiled_code_t * bytecode_p , /**< current byte code */
1162
+ bool is_herigate ) /* true -if class heritage is present */
1163
1163
{
1164
1164
/* 8. */
1165
1165
ecma_value_t script_value = ((cbc_uint8_arguments_t * ) bytecode_p )-> script_value ;
@@ -1181,7 +1181,7 @@ opfunc_create_implicit_class_constructor (uint8_t opcode, /**< current cbc opcod
1181
1181
constructor_object_p -> u .constructor_function .flags = 0 ;
1182
1182
1183
1183
/* 10.a.i */
1184
- if (opcode == CBC_EXT_PUSH_IMPLICIT_CONSTRUCTOR_HERITAGE )
1184
+ if (is_herigate )
1185
1185
{
1186
1186
constructor_object_p -> u .constructor_function .flags |= ECMA_CONSTRUCTOR_FUNCTION_HAS_HERITAGE ;
1187
1187
}
@@ -1574,9 +1574,6 @@ opfunc_collect_private_properties (ecma_value_t constructor, ecma_value_t prop_n
1574
1574
1575
1575
if (opcode == CBC_EXT_COLLECT_PRIVATE_METHOD )
1576
1576
{
1577
- prop_name ^= value ;
1578
- value ^= prop_name ;
1579
- prop_name ^= value ;
1580
1577
kind = ECMA_PRIVATE_METHOD ;
1581
1578
}
1582
1579
else if (opcode == CBC_EXT_COLLECT_PRIVATE_GETTER )
@@ -1977,10 +1974,7 @@ opfunc_finalize_class (vm_frame_ctx_t *frame_ctx_p, /**< frame context */
1977
1974
* ECMA_VALUE_EMPTY - otherwise
1978
1975
*/
1979
1976
ecma_value_t
1980
- opfunc_form_super_reference (ecma_value_t * * vm_stack_top_p , /**< current vm stack top */
1981
- vm_frame_ctx_t * frame_ctx_p , /**< frame context */
1982
- ecma_value_t prop_name , /**< property name to resolve */
1983
- uint8_t opcode ) /**< current cbc opcode */
1977
+ opfunc_resolve_super (vm_frame_ctx_t * frame_ctx_p ) /**< frame context */
1984
1978
{
1985
1979
ecma_environment_record_t * environment_record_p = ecma_op_get_environment_record (frame_ctx_p -> lex_env_p );
1986
1980
@@ -2001,112 +1995,8 @@ opfunc_form_super_reference (ecma_value_t **vm_stack_top_p, /**< current vm stac
2001
1995
return ECMA_VALUE_ERROR ;
2002
1996
}
2003
1997
2004
- ecma_value_t * stack_top_p = * vm_stack_top_p ;
2005
-
2006
- if (opcode >= CBC_EXT_SUPER_PROP_ASSIGNMENT_REFERENCE )
2007
- {
2008
- JERRY_ASSERT (opcode == CBC_EXT_SUPER_PROP_ASSIGNMENT_REFERENCE
2009
- || opcode == CBC_EXT_SUPER_PROP_LITERAL_ASSIGNMENT_REFERENCE );
2010
- * stack_top_p ++ = parent ;
2011
- * stack_top_p ++ = ecma_copy_value (prop_name );
2012
- * vm_stack_top_p = stack_top_p ;
2013
-
2014
- return ECMA_VALUE_EMPTY ;
2015
- }
2016
-
2017
- ecma_object_t * parent_p = ecma_get_object_from_value (parent );
2018
- ecma_string_t * prop_name_p = ecma_op_to_property_key (prop_name );
2019
-
2020
- if (prop_name_p == NULL )
2021
- {
2022
- ecma_deref_object (parent_p );
2023
- return ECMA_VALUE_ERROR ;
2024
- }
2025
-
2026
- ecma_value_t result = ecma_op_object_get_with_receiver (parent_p , prop_name_p , frame_ctx_p -> this_binding );
2027
- ecma_deref_ecma_string (prop_name_p );
2028
- ecma_deref_object (parent_p );
2029
-
2030
- if (ECMA_IS_VALUE_ERROR (result ))
2031
- {
2032
- return result ;
2033
- }
2034
-
2035
- if (opcode == CBC_EXT_SUPER_PROP_LITERAL_REFERENCE || opcode == CBC_EXT_SUPER_PROP_REFERENCE )
2036
- {
2037
- * stack_top_p ++ = ecma_copy_value (frame_ctx_p -> this_binding );
2038
- * stack_top_p ++ = ECMA_VALUE_UNDEFINED ;
2039
- }
2040
-
2041
- * stack_top_p ++ = result ;
2042
- * vm_stack_top_p = stack_top_p ;
2043
-
2044
- return ECMA_VALUE_EMPTY ;
2045
- } /* opfunc_form_super_reference */
2046
-
2047
- /**
2048
- * Assignment operation for SuperRefence base
2049
- *
2050
- * @return ECMA_VALUE_ERROR - if the operation fails
2051
- * ECMA_VALUE_EMPTY - otherwise
2052
- */
2053
- ecma_value_t
2054
- opfunc_assign_super_reference (ecma_value_t * * vm_stack_top_p , /**< vm stack top */
2055
- vm_frame_ctx_t * frame_ctx_p , /**< frame context */
2056
- uint32_t opcode_data ) /**< opcode data to store the result */
2057
- {
2058
- ecma_value_t * stack_top_p = * vm_stack_top_p ;
2059
-
2060
- ecma_value_t base_obj = ecma_op_to_object (stack_top_p [-3 ]);
2061
-
2062
- if (ECMA_IS_VALUE_ERROR (base_obj ))
2063
- {
2064
- return base_obj ;
2065
- }
2066
-
2067
- ecma_object_t * base_obj_p = ecma_get_object_from_value (base_obj );
2068
- ecma_string_t * prop_name_p = ecma_op_to_property_key (stack_top_p [-2 ]);
2069
-
2070
- if (prop_name_p == NULL )
2071
- {
2072
- ecma_deref_object (base_obj_p );
2073
- return ECMA_VALUE_ERROR ;
2074
- }
2075
-
2076
- bool is_strict = (frame_ctx_p -> status_flags & VM_FRAME_CTX_IS_STRICT ) != 0 ;
2077
-
2078
- ecma_value_t result =
2079
- ecma_op_object_put_with_receiver (base_obj_p , prop_name_p , stack_top_p [-1 ], frame_ctx_p -> this_binding , is_strict );
2080
-
2081
- ecma_deref_ecma_string (prop_name_p );
2082
- ecma_deref_object (base_obj_p );
2083
-
2084
- if (ECMA_IS_VALUE_ERROR (result ))
2085
- {
2086
- return result ;
2087
- }
2088
-
2089
- for (int32_t i = 1 ; i <= 3 ; i ++ )
2090
- {
2091
- ecma_free_value (stack_top_p [- i ]);
2092
- }
2093
-
2094
- stack_top_p -= 3 ;
2095
-
2096
- if (opcode_data & VM_OC_PUT_STACK )
2097
- {
2098
- * stack_top_p ++ = result ;
2099
- }
2100
- else if (opcode_data & VM_OC_PUT_BLOCK )
2101
- {
2102
- ecma_fast_free_value (VM_GET_REGISTER (frame_ctx_p , 0 ));
2103
- VM_GET_REGISTERS (frame_ctx_p )[0 ] = result ;
2104
- }
2105
-
2106
- * vm_stack_top_p = stack_top_p ;
2107
-
2108
- return result ;
2109
- } /* opfunc_assign_super_reference */
1998
+ return parent ;
1999
+ } /* opfunc_resolve_super */
2110
2000
2111
2001
/**
2112
2002
* Copy data properties of an object
@@ -2303,8 +2193,69 @@ opfunc_lexical_scope_has_restricted_binding (vm_frame_ctx_t *frame_ctx_p, /**< f
2303
2193
&& !ecma_is_property_configurable (property ));
2304
2194
} /* opfunc_lexical_scope_has_restricted_binding */
2305
2195
2196
+ void
2197
+ opfunc_set_function_name (ecma_value_t function_object ,
2198
+ ecma_value_t function_name ,
2199
+ char * prefix_p ,
2200
+ lit_utf8_size_t prefix_size )
2201
+ {
2202
+ ecma_object_t * func_obj_p = ecma_get_object_from_value (function_object );
2203
+
2204
+ if (ecma_find_named_property (func_obj_p , ecma_get_magic_string (LIT_MAGIC_STRING_NAME )) != NULL )
2205
+ {
2206
+ return ;
2207
+ }
2208
+
2209
+ ecma_property_value_t * value_p ;
2210
+ value_p = ecma_create_named_data_property (func_obj_p ,
2211
+ ecma_get_magic_string (LIT_MAGIC_STRING_NAME ),
2212
+ ECMA_PROPERTY_FLAG_CONFIGURABLE ,
2213
+ NULL );
2214
+
2215
+ if (ecma_get_object_type (func_obj_p ) == ECMA_OBJECT_TYPE_FUNCTION )
2216
+ {
2217
+ ECMA_SET_SECOND_BIT_TO_POINTER_TAG (((ecma_extended_object_t * ) func_obj_p )-> u .function .scope_cp );
2218
+ }
2219
+
2220
+ value_p -> value = ecma_op_function_form_name (ecma_get_prop_name_from_value (function_name ), prefix_p , prefix_size );
2221
+ } /* opfunc_set_function_name */
2222
+
2306
2223
#endif /* JERRY_ESNEXT */
2307
2224
2225
+ ecma_value_t
2226
+ opfunc_set_property (ecma_value_t * stack_top_p , ecma_value_t prop_name , ecma_value_t value , bool is_static )
2227
+ {
2228
+ ecma_string_t * prop_name_p = ecma_op_to_property_key (prop_name );
2229
+
2230
+ if (JERRY_UNLIKELY (prop_name_p == NULL ))
2231
+ {
2232
+ return ECMA_VALUE_ERROR ;
2233
+ }
2234
+
2235
+ int index = -1 ;
2236
+
2237
+ #if JERRY_ESNEXT
2238
+ if (JERRY_UNLIKELY (is_static ))
2239
+ {
2240
+ if (ecma_compare_ecma_string_to_magic_id (prop_name_p , LIT_MAGIC_STRING_PROTOTYPE ))
2241
+ {
2242
+ return ecma_raise_type_error (ECMA_ERR_CLASS_IS_NON_CONFIGURABLE );
2243
+ }
2244
+
2245
+ index -- ;
2246
+ }
2247
+ #else /* !JERRY_ESNEXT */
2248
+ JERRY_UNUSED (is_static );
2249
+ #endif /* JERRY_ESNEXT */
2250
+
2251
+ ecma_object_t * object_p = ecma_get_object_from_value (stack_top_p [index ]);
2252
+
2253
+ opfunc_set_data_property (object_p , prop_name_p , value );
2254
+ ecma_deref_ecma_string (prop_name_p );
2255
+
2256
+ return ECMA_VALUE_EMPTY ;
2257
+ } /* opfunc_set_property */
2258
+
2308
2259
/**
2309
2260
* @}
2310
2261
* @}
0 commit comments