@@ -288,130 +288,121 @@ ecma_gc_mark (ecma_object_t *object_p) /**< object to mark from */
288
288
next_property_p = ECMA_GET_POINTER (ecma_property_t ,
289
289
property_p -> next_property_p );
290
290
291
- switch (( ecma_property_type_t ) property_p -> type )
291
+ if ( property_p -> flags & ECMA_PROPERTY_FLAG_NAMEDDATA )
292
292
{
293
- case ECMA_PROPERTY_NAMEDDATA :
294
- {
295
- ecma_value_t value = ecma_get_named_data_property_value (property_p );
293
+ ecma_value_t value = ecma_get_named_data_property_value (property_p );
296
294
297
- if (ecma_is_value_object (value ))
298
- {
299
- ecma_object_t * value_obj_p = ecma_get_object_from_value (value );
295
+ if (ecma_is_value_object (value ))
296
+ {
297
+ ecma_object_t * value_obj_p = ecma_get_object_from_value (value );
300
298
301
- ecma_gc_set_object_visited (value_obj_p , true);
302
- }
299
+ ecma_gc_set_object_visited (value_obj_p , true);
300
+ }
301
+ }
302
+ else if (property_p -> flags & ECMA_PROPERTY_FLAG_NAMEDACCESSOR )
303
+ {
304
+ ecma_object_t * getter_obj_p = ecma_get_named_accessor_property_getter (property_p );
305
+ ecma_object_t * setter_obj_p = ecma_get_named_accessor_property_setter (property_p );
303
306
304
- break ;
307
+ if (getter_obj_p != NULL )
308
+ {
309
+ ecma_gc_set_object_visited (getter_obj_p , true);
305
310
}
306
311
307
- case ECMA_PROPERTY_NAMEDACCESSOR :
312
+ if ( setter_obj_p != NULL )
308
313
{
309
- ecma_object_t * getter_obj_p = ecma_get_named_accessor_property_getter (property_p );
310
- ecma_object_t * setter_obj_p = ecma_get_named_accessor_property_setter (property_p );
314
+ ecma_gc_set_object_visited (setter_obj_p , true);
315
+ }
316
+ }
317
+ else
318
+ {
319
+ JERRY_ASSERT (property_p -> flags & ECMA_PROPERTY_FLAG_INTERNAL );
320
+
321
+ ecma_internal_property_id_t property_id = (ecma_internal_property_id_t ) property_p -> h .internal_property_type ;
322
+ uint32_t property_value = property_p -> v .internal_property .value ;
311
323
312
- if (getter_obj_p != NULL )
324
+ switch (property_id )
325
+ {
326
+ case ECMA_INTERNAL_PROPERTY_NUMBER_INDEXED_ARRAY_VALUES : /* a collection of ecma values */
327
+ case ECMA_INTERNAL_PROPERTY_STRING_INDEXED_ARRAY_VALUES : /* a collection of ecma values */
313
328
{
314
- ecma_gc_set_object_visited ( getter_obj_p , true );
329
+ JERRY_UNIMPLEMENTED ( "Indexed array storage is not implemented yet." );
315
330
}
316
331
317
- if (setter_obj_p != NULL )
332
+ case ECMA_INTERNAL_PROPERTY_PROTOTYPE : /* the property's value is located in ecma_object_t
333
+ (see above in the routine) */
334
+ case ECMA_INTERNAL_PROPERTY_EXTENSIBLE : /* the property's value is located in ecma_object_t
335
+ (see above in the routine) */
336
+ case ECMA_INTERNAL_PROPERTY__COUNT : /* not a real internal property type,
337
+ * but number of the real internal property types */
318
338
{
319
- ecma_gc_set_object_visited ( setter_obj_p , true );
339
+ JERRY_UNREACHABLE ( );
320
340
}
321
341
322
- break ;
323
- }
324
-
325
- case ECMA_PROPERTY_INTERNAL :
326
- {
327
- ecma_internal_property_id_t property_id = (ecma_internal_property_id_t ) property_p -> u .internal_property .type ;
328
- uint32_t property_value = property_p -> u .internal_property .value ;
342
+ case ECMA_INTERNAL_PROPERTY_PRIMITIVE_STRING_VALUE : /* compressed pointer to a ecma_string_t */
343
+ case ECMA_INTERNAL_PROPERTY_PRIMITIVE_NUMBER_VALUE : /* compressed pointer to a ecma_number_t */
344
+ case ECMA_INTERNAL_PROPERTY_PRIMITIVE_BOOLEAN_VALUE : /* a simple boolean value */
345
+ case ECMA_INTERNAL_PROPERTY_CLASS : /* an enum */
346
+ case ECMA_INTERNAL_PROPERTY_CODE_BYTECODE : /* compressed pointer to a bytecode array */
347
+ case ECMA_INTERNAL_PROPERTY_NATIVE_CODE : /* an external pointer */
348
+ case ECMA_INTERNAL_PROPERTY_NATIVE_HANDLE : /* an external pointer */
349
+ case ECMA_INTERNAL_PROPERTY_FREE_CALLBACK : /* an object's native free callback */
350
+ case ECMA_INTERNAL_PROPERTY_BUILT_IN_ID : /* an integer */
351
+ case ECMA_INTERNAL_PROPERTY_BUILT_IN_ROUTINE_DESC : /* an integer */
352
+ case ECMA_INTERNAL_PROPERTY_EXTENSION_ID : /* an integer */
353
+ case ECMA_INTERNAL_PROPERTY_NON_INSTANTIATED_BUILT_IN_MASK_0_31 : /* an integer (bit-mask) */
354
+ case ECMA_INTERNAL_PROPERTY_NON_INSTANTIATED_BUILT_IN_MASK_32_63 : /* an integer (bit-mask) */
355
+ case ECMA_INTERNAL_PROPERTY_REGEXP_BYTECODE :
356
+ {
357
+ break ;
358
+ }
329
359
330
- switch ( property_id )
360
+ case ECMA_INTERNAL_PROPERTY_BOUND_FUNCTION_BOUND_THIS : /* an ecma value */
331
361
{
332
- case ECMA_INTERNAL_PROPERTY_NUMBER_INDEXED_ARRAY_VALUES : /* a collection of ecma values */
333
- case ECMA_INTERNAL_PROPERTY_STRING_INDEXED_ARRAY_VALUES : /* a collection of ecma values */
362
+ if (ecma_is_value_object (property_value ))
334
363
{
335
- JERRY_UNIMPLEMENTED ("Indexed array storage is not implemented yet." );
336
- }
364
+ ecma_object_t * obj_p = ecma_get_object_from_value (property_value );
337
365
338
- case ECMA_INTERNAL_PROPERTY_PROTOTYPE : /* the property's value is located in ecma_object_t
339
- (see above in the routine) */
340
- case ECMA_INTERNAL_PROPERTY_EXTENSIBLE : /* the property's value is located in ecma_object_t
341
- (see above in the routine) */
342
- case ECMA_INTERNAL_PROPERTY__COUNT : /* not a real internal property type,
343
- * but number of the real internal property types */
344
- {
345
- JERRY_UNREACHABLE ();
346
- }
347
-
348
- case ECMA_INTERNAL_PROPERTY_PRIMITIVE_STRING_VALUE : /* compressed pointer to a ecma_string_t */
349
- case ECMA_INTERNAL_PROPERTY_PRIMITIVE_NUMBER_VALUE : /* compressed pointer to a ecma_number_t */
350
- case ECMA_INTERNAL_PROPERTY_PRIMITIVE_BOOLEAN_VALUE : /* a simple boolean value */
351
- case ECMA_INTERNAL_PROPERTY_CLASS : /* an enum */
352
- case ECMA_INTERNAL_PROPERTY_CODE_BYTECODE : /* compressed pointer to a bytecode array */
353
- case ECMA_INTERNAL_PROPERTY_NATIVE_CODE : /* an external pointer */
354
- case ECMA_INTERNAL_PROPERTY_NATIVE_HANDLE : /* an external pointer */
355
- case ECMA_INTERNAL_PROPERTY_FREE_CALLBACK : /* an object's native free callback */
356
- case ECMA_INTERNAL_PROPERTY_BUILT_IN_ID : /* an integer */
357
- case ECMA_INTERNAL_PROPERTY_BUILT_IN_ROUTINE_DESC : /* an integer */
358
- case ECMA_INTERNAL_PROPERTY_EXTENSION_ID : /* an integer */
359
- case ECMA_INTERNAL_PROPERTY_NON_INSTANTIATED_BUILT_IN_MASK_0_31 : /* an integer (bit-mask) */
360
- case ECMA_INTERNAL_PROPERTY_NON_INSTANTIATED_BUILT_IN_MASK_32_63 : /* an integer (bit-mask) */
361
- case ECMA_INTERNAL_PROPERTY_REGEXP_BYTECODE :
362
- {
363
- break ;
366
+ ecma_gc_set_object_visited (obj_p , true);
364
367
}
365
368
366
- case ECMA_INTERNAL_PROPERTY_BOUND_FUNCTION_BOUND_THIS : /* an ecma value */
367
- {
368
- if (ecma_is_value_object (property_value ))
369
- {
370
- ecma_object_t * obj_p = ecma_get_object_from_value (property_value );
369
+ break ;
370
+ }
371
371
372
- ecma_gc_set_object_visited (obj_p , true);
373
- }
372
+ case ECMA_INTERNAL_PROPERTY_BOUND_FUNCTION_BOUND_ARGS : /* a collection of ecma values */
373
+ {
374
+ ecma_collection_header_t * bound_arg_list_p = ECMA_GET_NON_NULL_POINTER (ecma_collection_header_t ,
375
+ property_value );
374
376
375
- break ;
376
- }
377
+ ecma_collection_iterator_t bound_args_iterator ;
378
+ ecma_collection_iterator_init ( & bound_args_iterator , bound_arg_list_p );
377
379
378
- case ECMA_INTERNAL_PROPERTY_BOUND_FUNCTION_BOUND_ARGS : /* a collection of ecma values */
380
+ for ( ecma_length_t i = 0 ; i < bound_arg_list_p -> unit_number ; i ++ )
379
381
{
380
- ecma_collection_header_t * bound_arg_list_p = ECMA_GET_NON_NULL_POINTER (ecma_collection_header_t ,
381
- property_value );
382
-
383
- ecma_collection_iterator_t bound_args_iterator ;
384
- ecma_collection_iterator_init (& bound_args_iterator , bound_arg_list_p );
382
+ bool is_moved = ecma_collection_iterator_next (& bound_args_iterator );
383
+ JERRY_ASSERT (is_moved );
385
384
386
- for ( ecma_length_t i = 0 ; i < bound_arg_list_p -> unit_number ; i ++ )
385
+ if ( ecma_is_value_object ( * bound_args_iterator . current_value_p ) )
387
386
{
388
- bool is_moved = ecma_collection_iterator_next (& bound_args_iterator );
389
- JERRY_ASSERT (is_moved );
387
+ ecma_object_t * obj_p = ecma_get_object_from_value (* bound_args_iterator .current_value_p );
390
388
391
- if (ecma_is_value_object (* bound_args_iterator .current_value_p ))
392
- {
393
- ecma_object_t * obj_p = ecma_get_object_from_value (* bound_args_iterator .current_value_p );
394
-
395
- ecma_gc_set_object_visited (obj_p , true);
396
- }
389
+ ecma_gc_set_object_visited (obj_p , true);
397
390
}
398
-
399
- break ;
400
391
}
401
392
402
- case ECMA_INTERNAL_PROPERTY_BOUND_FUNCTION_TARGET_FUNCTION : /* an object */
403
- case ECMA_INTERNAL_PROPERTY_SCOPE : /* a lexical environment */
404
- case ECMA_INTERNAL_PROPERTY_PARAMETERS_MAP : /* an object */
405
- {
406
- ecma_object_t * obj_p = ECMA_GET_NON_NULL_POINTER (ecma_object_t , property_value );
393
+ break ;
394
+ }
407
395
408
- ecma_gc_set_object_visited (obj_p , true);
396
+ case ECMA_INTERNAL_PROPERTY_BOUND_FUNCTION_TARGET_FUNCTION : /* an object */
397
+ case ECMA_INTERNAL_PROPERTY_SCOPE : /* a lexical environment */
398
+ case ECMA_INTERNAL_PROPERTY_PARAMETERS_MAP : /* an object */
399
+ {
400
+ ecma_object_t * obj_p = ECMA_GET_NON_NULL_POINTER (ecma_object_t , property_value );
409
401
410
- break ;
411
- }
412
- }
402
+ ecma_gc_set_object_visited (obj_p , true);
413
403
414
- break ;
404
+ break ;
405
+ }
415
406
}
416
407
}
417
408
}
0 commit comments