@@ -351,13 +351,47 @@ ecma_gc_mark (ecma_object_t *object_p) /**< object to mark from */
351
351
case ECMA_INTERNAL_PROPERTY_NON_INSTANTIATED_BUILT_IN_MASK_0_31: /* an integer (bit-mask) */
352
352
case ECMA_INTERNAL_PROPERTY_NON_INSTANTIATED_BUILT_IN_MASK_32_63: /* an integer (bit-mask) */
353
353
case ECMA_INTERNAL_PROPERTY_REGEXP_BYTECODE:
354
- case ECMA_INTERNAL_PROPERTY_BOUND_FUNCTION_TARGET_FUNCTION:
355
- case ECMA_INTERNAL_PROPERTY_BOUND_FUNCTION_BOUND_THIS:
356
- case ECMA_INTERNAL_PROPERTY_BOUND_FUNCTION_BOUND_ARGS:
357
354
{
358
355
break ;
359
356
}
360
357
358
+ case ECMA_INTERNAL_PROPERTY_BOUND_FUNCTION_BOUND_THIS: /* an ecma-value */
359
+ {
360
+ if (ecma_is_value_object (property_value))
361
+ {
362
+ ecma_object_t *obj_p = ecma_get_object_from_value (property_value);
363
+
364
+ ecma_gc_set_object_visited (obj_p, true );
365
+ }
366
+
367
+ break ;
368
+ }
369
+
370
+ case ECMA_INTERNAL_PROPERTY_BOUND_FUNCTION_BOUND_ARGS: /* a collection of ecma-values */
371
+ {
372
+ ecma_collection_header_t *bound_arg_list_p = ECMA_GET_NON_NULL_POINTER (ecma_collection_header_t ,
373
+ property_value);
374
+
375
+ ecma_collection_iterator_t bound_args_iterator;
376
+ ecma_collection_iterator_init (&bound_args_iterator, bound_arg_list_p);
377
+
378
+ for (ecma_length_t i = 0 ; i < bound_arg_list_p->unit_number ; i++)
379
+ {
380
+ bool is_moved = ecma_collection_iterator_next (&bound_args_iterator);
381
+ JERRY_ASSERT (is_moved);
382
+
383
+ if (ecma_is_value_object (*bound_args_iterator.current_value_p ))
384
+ {
385
+ ecma_object_t *obj_p = ecma_get_object_from_value (*bound_args_iterator.current_value_p );
386
+
387
+ ecma_gc_set_object_visited (obj_p, true );
388
+ }
389
+ }
390
+
391
+ break ;
392
+ }
393
+
394
+ case ECMA_INTERNAL_PROPERTY_BOUND_FUNCTION_TARGET_FUNCTION: /* an object */
361
395
case ECMA_INTERNAL_PROPERTY_SCOPE: /* a lexical environment */
362
396
case ECMA_INTERNAL_PROPERTY_PARAMETERS_MAP: /* an object */
363
397
{
0 commit comments