Date.protoype.toJSON should look for toISOString once (#3996)

The toJSON method should be searched on the `this` object
only once. In case of normal objects there were no problems
however when a Proxy object is used as the `this` argument
for the Date.prototype.toJSON method the Proxy's `get` method
was invoked twice.

JerryScript-DCO-1.0-Signed-off-by: Peter Gal pgal.usz@partner.samsung.com
This commit is contained in:
Péter Gál
2020-07-15 17:12:55 +02:00
committed by GitHub
parent 8fdbc6a85b
commit c8d15ddbf7
3 changed files with 72 additions and 18 deletions
@@ -162,28 +162,15 @@ ecma_builtin_date_prototype_to_json (ecma_value_t this_arg) /**< this argument *
return ECMA_VALUE_NULL;
}
}
else
{
ecma_free_value (tv);
}
ecma_value_t ret_value = ECMA_VALUE_ERROR;
ecma_object_t *value_obj_p = ecma_get_object_from_value (obj);
/* 4. */
ecma_value_t to_iso = ecma_op_object_get_by_magic_id (value_obj_p, LIT_MAGIC_STRING_TO_ISO_STRING_UL);
if (!ECMA_IS_VALUE_ERROR (to_iso))
{
/* 5. */
if (!ecma_op_is_callable (to_iso))
{
ret_value = ecma_raise_type_error (ECMA_ERR_MSG ("'toISOString' is missing or not a function."));
}
/* 6. */
else
{
ret_value = ecma_op_invoke_by_magic_id (obj, LIT_MAGIC_STRING_TO_ISO_STRING_UL, NULL, 0);
}
ecma_free_value (to_iso);
}
ecma_value_t ret_value = ecma_op_invoke_by_magic_id (obj, LIT_MAGIC_STRING_TO_ISO_STRING_UL, NULL, 0);
ecma_deref_object (value_obj_p);