@@ -2852,6 +2852,7 @@ DUK_LOCAL void duk__push_func_from_lightfunc(duk_context *ctx, duk_c_function fu
28522852
28532853 flags = DUK_HOBJECT_FLAG_EXTENSIBLE |
28542854 DUK_HOBJECT_FLAG_CONSTRUCTABLE |
2855+ DUK_HOBJECT_FLAG_FASTREFS |
28552856 DUK_HOBJECT_FLAG_NATFUNC |
28562857 DUK_HOBJECT_FLAG_NEWENV |
28572858 DUK_HOBJECT_FLAG_STRICT |
@@ -2902,6 +2903,7 @@ DUK_EXTERNAL void duk_to_object(duk_context *ctx, duk_idx_t idx) {
29022903 }
29032904 case DUK_TAG_BOOLEAN : {
29042905 flags = DUK_HOBJECT_FLAG_EXTENSIBLE |
2906+ DUK_HOBJECT_FLAG_FASTREFS |
29052907 DUK_HOBJECT_CLASS_AS_FLAGS (DUK_HOBJECT_CLASS_BOOLEAN );
29062908 proto = DUK_BIDX_BOOLEAN_PROTOTYPE ;
29072909 goto create_object ;
@@ -2912,10 +2914,12 @@ DUK_EXTERNAL void duk_to_object(duk_context *ctx, duk_idx_t idx) {
29122914 DUK_ASSERT (h != NULL );
29132915 if (DUK_UNLIKELY (DUK_HSTRING_HAS_SYMBOL (h ))) {
29142916 flags = DUK_HOBJECT_FLAG_EXTENSIBLE |
2917+ DUK_HOBJECT_FLAG_FASTREFS |
29152918 DUK_HOBJECT_CLASS_AS_FLAGS (DUK_HOBJECT_CLASS_SYMBOL );
29162919 proto = DUK_BIDX_SYMBOL_PROTOTYPE ;
29172920 } else {
29182921 flags = DUK_HOBJECT_FLAG_EXTENSIBLE |
2922+ DUK_HOBJECT_FLAG_FASTREFS |
29192923 DUK_HOBJECT_FLAG_EXOTIC_STRINGOBJ |
29202924 DUK_HOBJECT_CLASS_AS_FLAGS (DUK_HOBJECT_CLASS_STRING );
29212925 proto = DUK_BIDX_STRING_PROTOTYPE ;
@@ -2945,6 +2949,7 @@ DUK_EXTERNAL void duk_to_object(duk_context *ctx, duk_idx_t idx) {
29452949#endif /* DUK_USE_BUFFEROBJECT_SUPPORT */
29462950 case DUK_TAG_POINTER : {
29472951 flags = DUK_HOBJECT_FLAG_EXTENSIBLE |
2952+ DUK_HOBJECT_FLAG_FASTREFS |
29482953 DUK_HOBJECT_CLASS_AS_FLAGS (DUK_HOBJECT_CLASS_POINTER );
29492954 proto = DUK_BIDX_POINTER_PROTOTYPE ;
29502955 goto create_object ;
@@ -2973,7 +2978,8 @@ DUK_EXTERNAL void duk_to_object(duk_context *ctx, duk_idx_t idx) {
29732978 DUK_ASSERT (!DUK_TVAL_IS_UNUSED (tv ));
29742979 DUK_ASSERT (DUK_TVAL_IS_NUMBER (tv ));
29752980 flags = DUK_HOBJECT_FLAG_EXTENSIBLE |
2976- DUK_HOBJECT_CLASS_AS_FLAGS (DUK_HOBJECT_CLASS_NUMBER );
2981+ DUK_HOBJECT_FLAG_FASTREFS |
2982+ DUK_HOBJECT_CLASS_AS_FLAGS (DUK_HOBJECT_CLASS_NUMBER );
29772983 proto = DUK_BIDX_NUMBER_PROTOTYPE ;
29782984 goto create_object ;
29792985 }
@@ -3376,10 +3382,15 @@ DUK_EXTERNAL duk_bool_t duk_is_bound_function(duk_context *ctx, duk_idx_t idx) {
33763382}
33773383
33783384DUK_EXTERNAL duk_bool_t duk_is_thread (duk_context * ctx , duk_idx_t idx ) {
3385+ duk_hobject * obj ;
3386+
33793387 DUK_ASSERT_CTX_VALID (ctx );
3380- return duk__obj_flag_any_default_false (ctx ,
3381- idx ,
3382- DUK_HOBJECT_FLAG_THREAD );
3388+
3389+ obj = duk_get_hobject (ctx , idx );
3390+ if (obj ) {
3391+ return (DUK_HOBJECT_GET_CLASS_NUMBER (obj ) == DUK_HOBJECT_CLASS_THREAD ? 1 : 0 );
3392+ }
3393+ return 0 ;
33833394}
33843395
33853396DUK_EXTERNAL duk_bool_t duk_is_fixed_buffer (duk_context * ctx , duk_idx_t idx ) {
@@ -4016,6 +4027,7 @@ DUK_EXTERNAL duk_idx_t duk_push_object(duk_context *ctx) {
40164027
40174028 (void ) duk_push_object_helper (ctx ,
40184029 DUK_HOBJECT_FLAG_EXTENSIBLE |
4030+ DUK_HOBJECT_FLAG_FASTREFS |
40194031 DUK_HOBJECT_CLASS_AS_FLAGS (DUK_HOBJECT_CLASS_OBJECT ),
40204032 DUK_BIDX_OBJECT_PROTOTYPE );
40214033 return duk_get_top_index_unsafe (ctx );
@@ -4031,6 +4043,7 @@ DUK_EXTERNAL duk_idx_t duk_push_array(duk_context *ctx) {
40314043 DUK_ASSERT_CTX_VALID (ctx );
40324044
40334045 flags = DUK_HOBJECT_FLAG_EXTENSIBLE |
4046+ DUK_HOBJECT_FLAG_FASTREFS |
40344047 DUK_HOBJECT_FLAG_ARRAY_PART |
40354048 DUK_HOBJECT_FLAG_EXOTIC_ARRAY |
40364049 DUK_HOBJECT_CLASS_AS_FLAGS (DUK_HOBJECT_CLASS_ARRAY );
@@ -4094,7 +4107,6 @@ DUK_EXTERNAL duk_idx_t duk_push_thread_raw(duk_context *ctx, duk_uint_t flags) {
40944107
40954108 obj = duk_hthread_alloc (thr ,
40964109 DUK_HOBJECT_FLAG_EXTENSIBLE |
4097- DUK_HOBJECT_FLAG_THREAD |
40984110 DUK_HOBJECT_CLASS_AS_FLAGS (DUK_HOBJECT_CLASS_THREAD ));
40994111 DUK_ASSERT (obj != NULL );
41004112 obj -> state = DUK_HTHREAD_STATE_INACTIVE ;
@@ -4229,6 +4241,7 @@ DUK_EXTERNAL duk_idx_t duk_push_c_function(duk_context *ctx, duk_c_function func
42294241
42304242 flags = DUK_HOBJECT_FLAG_EXTENSIBLE |
42314243 DUK_HOBJECT_FLAG_CONSTRUCTABLE |
4244+ DUK_HOBJECT_FLAG_FASTREFS |
42324245 DUK_HOBJECT_FLAG_NATFUNC |
42334246 DUK_HOBJECT_FLAG_NEWENV |
42344247 DUK_HOBJECT_FLAG_STRICT |
@@ -4246,6 +4259,7 @@ DUK_INTERNAL void duk_push_c_function_noexotic(duk_context *ctx, duk_c_function
42464259
42474260 flags = DUK_HOBJECT_FLAG_EXTENSIBLE |
42484261 DUK_HOBJECT_FLAG_CONSTRUCTABLE |
4262+ DUK_HOBJECT_FLAG_FASTREFS |
42494263 DUK_HOBJECT_FLAG_NATFUNC |
42504264 DUK_HOBJECT_FLAG_NEWENV |
42514265 DUK_HOBJECT_FLAG_STRICT |
@@ -4261,6 +4275,7 @@ DUK_INTERNAL void duk_push_c_function_noconstruct_noexotic(duk_context *ctx, duk
42614275 DUK_ASSERT_CTX_VALID (ctx );
42624276
42634277 flags = DUK_HOBJECT_FLAG_EXTENSIBLE |
4278+ DUK_HOBJECT_FLAG_FASTREFS |
42644279 DUK_HOBJECT_FLAG_NATFUNC |
42654280 DUK_HOBJECT_FLAG_NEWENV |
42664281 DUK_HOBJECT_FLAG_STRICT |
@@ -4462,6 +4477,7 @@ DUK_EXTERNAL duk_idx_t duk_push_error_object_va_raw(duk_context *ctx, duk_errcod
44624477 proto = duk_error_prototype_from_code (thr , err_code );
44634478 (void ) duk_push_object_helper_proto (ctx ,
44644479 DUK_HOBJECT_FLAG_EXTENSIBLE |
4480+ DUK_HOBJECT_FLAG_FASTREFS |
44654481 DUK_HOBJECT_CLASS_AS_FLAGS (DUK_HOBJECT_CLASS_ERROR ),
44664482 proto );
44674483
@@ -4712,6 +4728,7 @@ DUK_EXTERNAL duk_idx_t duk_push_heapptr(duk_context *ctx, void *ptr) {
47124728DUK_EXTERNAL duk_idx_t duk_push_bare_object (duk_context * ctx ) {
47134729 (void ) duk_push_object_helper (ctx ,
47144730 DUK_HOBJECT_FLAG_EXTENSIBLE |
4731+ DUK_HOBJECT_FLAG_FASTREFS |
47154732 DUK_HOBJECT_CLASS_AS_FLAGS (DUK_HOBJECT_CLASS_OBJECT ),
47164733 -1 ); /* no prototype */
47174734 return duk_get_top_index_unsafe (ctx );
0 commit comments