@@ -1981,35 +1981,51 @@ ecma_op_function_list_lazy_property_names (ecma_object_t *object_p, /**< functio
1981
1981
ecma_collection_t * prop_names_p , /**< prop name collection */
1982
1982
ecma_property_counter_t * prop_counter_p ) /**< prop counter */
1983
1983
{
1984
+ const ecma_compiled_code_t * bytecode_data_p ;
1985
+ bytecode_data_p = ecma_op_function_get_compiled_code ((ecma_extended_object_t * ) object_p );
1986
+
1987
+ #if JERRY_ESNEXT
1988
+ bool append_prototype = CBC_FUNCTION_HAS_PROTOTYPE (bytecode_data_p -> status_flags );
1989
+ #else /* !JERRY_ESNEXT */
1990
+ bool append_prototype = true;
1991
+ #endif /* JERRY_ESNEXT */
1992
+
1993
+ if (append_prototype )
1994
+ {
1995
+ /* 'prototype' property is non-enumerable (ECMA-262 v5, 13.2.18) */
1996
+ ecma_collection_push_back (prop_names_p , ecma_make_magic_string_value (LIT_MAGIC_STRING_PROTOTYPE ));
1997
+ prop_counter_p -> string_named_props ++ ;
1998
+ }
1999
+
1984
2000
#if JERRY_ESNEXT
1985
2001
ecma_extended_object_t * ext_func_p = (ecma_extended_object_t * ) object_p ;
2002
+
1986
2003
if (!ECMA_GET_FIRST_BIT_FROM_POINTER_TAG (ext_func_p -> u .function .scope_cp ))
1987
2004
{
1988
2005
/* Unintialized 'length' property is non-enumerable (ECMA-262 v6, 19.2.4.1) */
1989
2006
ecma_collection_push_back (prop_names_p , ecma_make_magic_string_value (LIT_MAGIC_STRING_LENGTH ));
1990
2007
prop_counter_p -> string_named_props ++ ;
1991
2008
}
2009
+
2010
+ if (CBC_FUNCTION_GET_TYPE (bytecode_data_p -> status_flags ) != CBC_FUNCTION_CONSTRUCTOR
2011
+ && !ECMA_GET_SECOND_BIT_FROM_POINTER_TAG (ext_func_p -> u .function .scope_cp ))
2012
+ {
2013
+ /* Unintialized 'name' property is non-enumerable (ECMA-262 v6, 19.2.4.2) */
2014
+ ecma_collection_push_back (prop_names_p , ecma_make_magic_string_value (LIT_MAGIC_STRING_NAME ));
2015
+ prop_counter_p -> string_named_props ++ ;
2016
+ }
1992
2017
#else /* !JERRY_ESNEXT */
1993
2018
/* 'length' property is non-enumerable (ECMA-262 v5, 13.2.5) */
1994
2019
ecma_collection_push_back (prop_names_p , ecma_make_magic_string_value (LIT_MAGIC_STRING_LENGTH ));
1995
2020
prop_counter_p -> string_named_props ++ ;
1996
2021
#endif /* JERRY_ESNEXT */
1997
2022
1998
- const ecma_compiled_code_t * bytecode_data_p ;
1999
- bytecode_data_p = ecma_op_function_get_compiled_code ((ecma_extended_object_t * ) object_p );
2000
-
2001
2023
#if JERRY_ESNEXT
2002
- if (!CBC_FUNCTION_HAS_PROTOTYPE ( bytecode_data_p -> status_flags ) )
2024
+ if (!append_prototype )
2003
2025
{
2004
2026
return ;
2005
2027
}
2006
- #endif /* JERRY_ESNEXT */
2007
2028
2008
- /* 'prototype' property is non-enumerable (ECMA-262 v5, 13.2.18) */
2009
- ecma_collection_push_back (prop_names_p , ecma_make_magic_string_value (LIT_MAGIC_STRING_PROTOTYPE ));
2010
- prop_counter_p -> string_named_props ++ ;
2011
-
2012
- #if JERRY_ESNEXT
2013
2029
bool append_caller_and_arguments = !(bytecode_data_p -> status_flags & CBC_CODE_FLAGS_STRICT_MODE );
2014
2030
#else /* !JERRY_ESNEXT */
2015
2031
bool append_caller_and_arguments = (bytecode_data_p -> status_flags & CBC_CODE_FLAGS_STRICT_MODE );
0 commit comments