Skip to content

Commit 46001c6

Browse files
author
Zsolt Borbély
committed
Function.prototype.bind: incorrect behaviour of ecma_gc_mark()
Related issue: #531 JerryScript-DCO-1.0-Signed-off-by: Zsolt Borbély zsborbely.u-szeged@partner.samsung.com
1 parent bf780ad commit 46001c6

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed

jerry-core/ecma/base/ecma-gc.cpp

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -352,9 +352,43 @@ ecma_gc_mark (ecma_object_t *object_p) /**< object to mark from */
352352
case ECMA_INTERNAL_PROPERTY_NON_INSTANTIATED_BUILT_IN_MASK_32_63: /* an integer (bit-mask) */
353353
case ECMA_INTERNAL_PROPERTY_REGEXP_BYTECODE:
354354
case ECMA_INTERNAL_PROPERTY_BOUND_FUNCTION_TARGET_FUNCTION:
355+
{
356+
break;
357+
}
358+
355359
case ECMA_INTERNAL_PROPERTY_BOUND_FUNCTION_BOUND_THIS:
360+
{
361+
if (ecma_is_value_object (property_value))
362+
{
363+
ecma_object_t *obj_p = ecma_get_object_from_value (property_value);
364+
365+
ecma_gc_set_object_visited (obj_p, true);
366+
}
367+
368+
break;
369+
}
370+
356371
case ECMA_INTERNAL_PROPERTY_BOUND_FUNCTION_BOUND_ARGS:
357372
{
373+
ecma_collection_header_t *bound_arg_list_p = ECMA_GET_NON_NULL_POINTER (ecma_collection_header_t,
374+
property_value);
375+
376+
ecma_collection_iterator_t bound_args_iterator;
377+
ecma_collection_iterator_init (&bound_args_iterator, bound_arg_list_p);
378+
379+
for (ecma_length_t i = 0; i < bound_arg_list_p->unit_number; i++)
380+
{
381+
bool is_moved = ecma_collection_iterator_next (&bound_args_iterator);
382+
JERRY_ASSERT (is_moved);
383+
384+
if (ecma_is_value_object (*bound_args_iterator.current_value_p))
385+
{
386+
ecma_object_t *obj_p = ecma_get_object_from_value (*bound_args_iterator.current_value_p);
387+
388+
ecma_gc_set_object_visited (obj_p, true);
389+
}
390+
}
391+
358392
break;
359393
}
360394

0 commit comments

Comments
 (0)