Implement ArrayBuffer.isView function (#3403)

JerryScript-DCO-1.0-Signed-off-by: Roland Takacs r.takacs2@partner.samsung.com
This commit is contained in:
Roland Takacs
2019-12-04 15:36:42 +01:00
committed by Robert Fancsik
parent 59eb0787ba
commit 67d677a1bc
5 changed files with 62 additions and 13 deletions
+1 -9
View File
@@ -3743,15 +3743,7 @@ jerry_value_is_dataview (const jerry_value_t value) /**< value to check if it is
jerry_assert_api_available ();
#if ENABLED (JERRY_ES2015_BUILTIN_DATAVIEW)
if (!ecma_is_value_object (value))
{
return false;
}
ecma_dataview_object_t *dataview_object_p = (ecma_dataview_object_t *) ecma_get_object_from_value (value);
return (ecma_get_object_type (&dataview_object_p->header.object) == ECMA_OBJECT_TYPE_CLASS
&& dataview_object_p->header.u.class_prop.class_id == LIT_MAGIC_STRING_DATAVIEW_UL);
return ecma_is_dataview (value);
#else /* !ENABLED (JERRY_ES2015_BUILTIN_DATAVIEW) */
JERRY_UNUSED (value);
return false;
@@ -19,7 +19,9 @@
#include "ecma-globals.h"
#include "ecma-helpers.h"
#include "ecma-arraybuffer-object.h"
#include "ecma-dataview-object.h"
#include "ecma-try-catch-macro.h"
#include "ecma-typedarray-object.h"
#include "jrt.h"
#if ENABLED (JERRY_ES2015_BUILTIN_TYPEDARRAY)
@@ -55,11 +57,8 @@ ecma_builtin_arraybuffer_object_is_view (ecma_value_t this_arg, /**< 'this' argu
ecma_value_t arg) /**< argument 1 */
{
JERRY_UNUSED (this_arg);
JERRY_UNUSED (arg);
/* TODO: if arg has [[ViewArrayBuffer]], return true */
return ECMA_VALUE_FALSE;
return ecma_make_boolean_value (ecma_is_typedarray (arg) || ecma_is_dataview (arg));
} /* ecma_builtin_arraybuffer_object_is_view */
/**
@@ -306,6 +306,26 @@ ecma_op_dataview_get_set_view_value (ecma_value_t view, /**< the operation's 'vi
return ECMA_VALUE_UNDEFINED;
} /* ecma_op_dataview_get_set_view_value */
/**
* Check if the value is dataview
*
* @return true - if value is a DataView object
* false - otherwise
*/
bool
ecma_is_dataview (ecma_value_t value) /**< the target need to be checked */
{
if (!ecma_is_value_object (value))
{
return false;
}
ecma_dataview_object_t *dataview_object_p = (ecma_dataview_object_t *) ecma_get_object_from_value (value);
return (ecma_get_object_type (&dataview_object_p->header.object) == ECMA_OBJECT_TYPE_CLASS
&& dataview_object_p->header.u.class_prop.class_id == LIT_MAGIC_STRING_DATAVIEW_UL);
} /* ecma_is_dataview */
/**
* @}
* @}
@@ -32,6 +32,7 @@ ecma_dataview_object_t *ecma_op_dataview_get_object (ecma_value_t this_arg);
ecma_value_t ecma_op_dataview_get_set_view_value (ecma_value_t view, ecma_value_t request_index,
ecma_value_t little_endian, ecma_value_t value_to_set,
ecma_typedarray_type_t id);
bool ecma_is_dataview (ecma_value_t value);
/**
* @}