@@ -1412,9 +1412,10 @@ ecma_regexp_exec_helper (ecma_value_t regexp_value, /**< RegExp object */
1412
1412
re_set_result_array_properties (result_array_obj_p, input_str_p, re_ctx.num_of_captures / 2 , index);
1413
1413
ecma_deref_ecma_string (input_str_p);
1414
1414
1415
- for (uint32_t i = 0 ; i < re_ctx.num_of_captures ; i += 2 )
1415
+ for (uint32_t i = 0 ; ecma_is_completion_value_empty (ret_value) && i < re_ctx.num_of_captures ; i += 2 )
1416
1416
{
1417
1417
ecma_string_t *index_str_p = ecma_new_ecma_string_from_uint32 (i / 2 );
1418
+ ecma_value_t capture_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_UNDEFINED);
1418
1419
1419
1420
if (((re_ctx.saved_p [i] && re_ctx.saved_p [i + 1 ])
1420
1421
&& re_ctx.saved_p [i + 1 ] >= re_ctx.saved_p [i]))
@@ -1431,19 +1432,30 @@ ecma_regexp_exec_helper (ecma_value_t regexp_value, /**< RegExp object */
1431
1432
{
1432
1433
capture_str_p = ecma_get_magic_string (LIT_MAGIC_STRING__EMPTY);
1433
1434
}
1434
- ecma_op_object_put (result_array_obj_p, index_str_p, ecma_make_string_value (capture_str_p), true );
1435
- ecma_deref_ecma_string (capture_str_p);
1436
- }
1437
- else
1438
- {
1439
- ecma_op_object_put (result_array_obj_p,
1440
- index_str_p,
1441
- ecma_make_simple_value (ECMA_SIMPLE_VALUE_UNDEFINED),
1442
- true );
1435
+
1436
+ capture_value = ecma_make_string_value (capture_str_p);
1443
1437
}
1438
+
1439
+ ECMA_TRY_CATCH (put_value,
1440
+ ecma_op_object_put (result_array_obj_p,
1441
+ index_str_p,
1442
+ capture_value,
1443
+ true ),
1444
+ ret_value);
1445
+ ECMA_FINALIZE (put_value);
1446
+
1447
+ ecma_free_value (capture_value, true );
1444
1448
ecma_deref_ecma_string (index_str_p);
1445
1449
}
1446
- ret_value = result_array;
1450
+
1451
+ if (ecma_is_completion_value_empty (ret_value))
1452
+ {
1453
+ ret_value = result_array;
1454
+ }
1455
+ else
1456
+ {
1457
+ ecma_deref_object (result_array_obj_p);
1458
+ }
1447
1459
}
1448
1460
else
1449
1461
{
0 commit comments