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