diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-dataview-prototype.c b/jerry-core/ecma/builtin-objects/ecma-builtin-dataview-prototype.c
index 79d9717d7..f8a78770b 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-dataview-prototype.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-dataview-prototype.c
@@ -52,6 +52,10 @@ enum
#if ENABLED (JERRY_NUMBER_TYPE_FLOAT64)
ECMA_DATAVIEW_PROTOTYPE_GET_FLOAT64,
#endif /* ENABLED (JERRY_NUMBER_TYPE_FLOAT64) */
+#if ENABLED (JERRY_BUILTIN_BIGINT)
+ ECMA_DATAVIEW_PROTOTYPE_GET_BIGINT64,
+ ECMA_DATAVIEW_PROTOTYPE_GET_BIGUINT64,
+#endif /* ENABLED (JERRY_BUILTIN_BIGINT) */
ECMA_DATAVIEW_PROTOTYPE_SET_INT8,
ECMA_DATAVIEW_PROTOTYPE_SET_UINT8,
ECMA_DATAVIEW_PROTOTYPE_SET_UINT8_CLAMPED, /* unused value */
@@ -63,6 +67,10 @@ enum
#if ENABLED (JERRY_NUMBER_TYPE_FLOAT64)
ECMA_DATAVIEW_PROTOTYPE_SET_FLOAT64,
#endif /* ENABLED (JERRY_NUMBER_TYPE_FLOAT64) */
+#if ENABLED (JERRY_BUILTIN_BIGINT)
+ ECMA_DATAVIEW_PROTOTYPE_SET_BIGINT64,
+ ECMA_DATAVIEW_PROTOTYPE_SET_BIGUINT64,
+#endif /* ENABLED (JERRY_BUILTIN_BIGINT) */
};
#define BUILTIN_INC_HEADER_NAME "ecma-builtin-dataview-prototype.inc.h"
@@ -162,6 +170,10 @@ ecma_builtin_dataview_prototype_dispatch_routine (uint16_t builtin_routine_id, /
case ECMA_DATAVIEW_PROTOTYPE_GET_INT32:
case ECMA_DATAVIEW_PROTOTYPE_GET_UINT16:
case ECMA_DATAVIEW_PROTOTYPE_GET_UINT32:
+#if ENABLED (JERRY_BUILTIN_BIGINT)
+ case ECMA_DATAVIEW_PROTOTYPE_GET_BIGINT64:
+ case ECMA_DATAVIEW_PROTOTYPE_GET_BIGUINT64:
+#endif /* ENABLED (JERRY_BUILTIN_BIGINT) */
{
ecma_value_t little_endian = arguments_number > 1 ? arguments_list_p[1] : ECMA_VALUE_FALSE;
ecma_typedarray_type_t id = (ecma_typedarray_type_t) (builtin_routine_id - ECMA_DATAVIEW_PROTOTYPE_GET_INT8);
@@ -176,6 +188,10 @@ ecma_builtin_dataview_prototype_dispatch_routine (uint16_t builtin_routine_id, /
case ECMA_DATAVIEW_PROTOTYPE_SET_INT32:
case ECMA_DATAVIEW_PROTOTYPE_SET_UINT16:
case ECMA_DATAVIEW_PROTOTYPE_SET_UINT32:
+#if ENABLED (JERRY_BUILTIN_BIGINT)
+ case ECMA_DATAVIEW_PROTOTYPE_SET_BIGINT64:
+ case ECMA_DATAVIEW_PROTOTYPE_SET_BIGUINT64:
+#endif /* ENABLED (JERRY_BUILTIN_BIGINT) */
{
ecma_value_t value_to_set = arguments_number > 1 ? arguments_list_p[1] : ECMA_VALUE_UNDEFINED;
ecma_value_t little_endian = arguments_number > 2 ? arguments_list_p[2] : ECMA_VALUE_FALSE;
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-dataview-prototype.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtin-dataview-prototype.inc.h
index 8f5042d0e..4facc4744 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-dataview-prototype.inc.h
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-dataview-prototype.inc.h
@@ -56,6 +56,12 @@ ROUTINE (LIT_MAGIC_STRING_SET_INT32_UL, ECMA_DATAVIEW_PROTOTYPE_SET_INT32, 2, 2)
ROUTINE (LIT_MAGIC_STRING_SET_UINT8_UL, ECMA_DATAVIEW_PROTOTYPE_SET_UINT8, 2, 2)
ROUTINE (LIT_MAGIC_STRING_SET_UINT16_UL, ECMA_DATAVIEW_PROTOTYPE_SET_UINT16, 2, 2)
ROUTINE (LIT_MAGIC_STRING_SET_UINT32_UL, ECMA_DATAVIEW_PROTOTYPE_SET_UINT32, 2, 2)
+#if ENABLED (JERRY_BUILTIN_BIGINT)
+ROUTINE (LIT_MAGIC_STRING_GET_BIGINT64, ECMA_DATAVIEW_PROTOTYPE_GET_BIGINT64, 2, 1)
+ROUTINE (LIT_MAGIC_STRING_GET_BIGUINT64, ECMA_DATAVIEW_PROTOTYPE_GET_BIGUINT64, 2, 1)
+ROUTINE (LIT_MAGIC_STRING_SET_BIGINT64, ECMA_DATAVIEW_PROTOTYPE_SET_BIGINT64, 2, 2)
+ROUTINE (LIT_MAGIC_STRING_SET_BIGUINT64, ECMA_DATAVIEW_PROTOTYPE_SET_BIGUINT64, 2, 2)
+#endif /* ENABLED (JERRY_BUILTIN_BIGINT) */
/* ECMA-262 v6, 24.2.4.1 */
ACCESSOR_READ_ONLY (LIT_MAGIC_STRING_BUFFER,
diff --git a/jerry-core/ecma/operations/ecma-dataview-object.c b/jerry-core/ecma/operations/ecma-dataview-object.c
index df6c03604..9d2588cc6 100644
--- a/jerry-core/ecma/operations/ecma-dataview-object.c
+++ b/jerry-core/ecma/operations/ecma-dataview-object.c
@@ -16,6 +16,7 @@
#include "jcontext.h"
#include "ecma-function-object.h"
#include "ecma-arraybuffer-object.h"
+#include "ecma-bigint.h"
#include "ecma-builtins.h"
#include "ecma-exceptions.h"
#include "ecma-gc.h"
@@ -264,18 +265,31 @@ ecma_op_dataview_get_set_view_value (ecma_value_t view, /**< the operation's 'vi
return number_index_value;
}
- /* TODO: Add BigInt support for SetViewValue 4 - 5. */
-
- /* SetViewValue 5. */
- ecma_number_t value_to_set_number = 0;
+ /* SetViewValue 4 - 5. */
if (!ecma_is_value_empty (value_to_set))
{
- ecma_value_t value;
- value = ecma_op_to_number (value_to_set, &value_to_set_number);
-
- if (ECMA_IS_VALUE_ERROR (value))
+#if ENABLED (JERRY_BUILTIN_BIGINT)
+ if (ECMA_TYPEDARRAY_IS_BIGINT_TYPE (id))
{
- return value;
+ value_to_set = ecma_bigint_to_bigint (value_to_set, true);
+
+ if (ECMA_IS_VALUE_ERROR (value_to_set))
+ {
+ return value_to_set;
+ }
+ }
+ else
+#endif /* ENABLED (JERRY_BUILTIN_BIGINT) */
+ {
+ ecma_number_t value_to_set_number;
+ ecma_value_t value = ecma_op_to_number (value_to_set, &value_to_set_number);
+
+ if (ECMA_IS_VALUE_ERROR (value))
+ {
+ return value;
+ }
+
+ value_to_set = ecma_make_number_value (value_to_set_number);
}
}
@@ -285,6 +299,7 @@ ecma_op_dataview_get_set_view_value (ecma_value_t view, /**< the operation's 'vi
/* GetViewValue 5 - 6., SetViewValue 7 - 8. */
if (ecma_arraybuffer_is_detached (buffer_p))
{
+ ecma_free_value (value_to_set);
return ecma_raise_type_error (ECMA_ERR_MSG ("ArrayBuffer has been detached."));
}
@@ -300,6 +315,7 @@ ecma_op_dataview_get_set_view_value (ecma_value_t view, /**< the operation's 'vi
/* GetViewValue 10., SetViewValue 12. */
if (get_index + element_size > (ecma_number_t) view_size)
{
+ ecma_free_value (value_to_set);
return ecma_raise_range_error (ECMA_ERR_MSG ("Start offset is outside the bounds of the buffer."));
}
@@ -319,7 +335,6 @@ ecma_op_dataview_get_set_view_value (ecma_value_t view, /**< the operation's 'vi
}
/* SetViewValue 14. */
- value_to_set = ecma_make_number_value (value_to_set_number);
ecma_value_t set_element = ecma_set_typedarray_element (block_p, value_to_set, id);
ecma_free_value (value_to_set);
diff --git a/jerry-core/lit/lit-magic-strings.inc.h b/jerry-core/lit/lit-magic-strings.inc.h
index 54cde1d6f..4c9ac2703 100644
--- a/jerry-core/lit/lit-magic-strings.inc.h
+++ b/jerry-core/lit/lit-magic-strings.inc.h
@@ -768,6 +768,9 @@ LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_CONSTRUCTOR, "constructor")
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_DESCRIPTION, "description")
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_OBJECT_FROM_ENTRIES, "fromEntries")
#endif
+#if ENABLED (JERRY_BUILTIN_BIGINT) && ENABLED (JERRY_BUILTIN_DATAVIEW)
+LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_GET_BIGINT64, "getBigInt64")
+#endif
#if ENABLED (JERRY_BUILTIN_DATE)
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_GET_FULL_YEAR_UL, "getFullYear")
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_GET_UTC_HOURS_UL, "getUTCHours")
@@ -785,6 +788,9 @@ LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_LAST_INDEX_OF_UL, "lastIndexOf")
|| ENABLED (JERRY_BUILTIN_TYPEDARRAY)
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_REDUCE_RIGHT_UL, "reduceRight")
#endif
+#if ENABLED (JERRY_BUILTIN_BIGINT) && ENABLED (JERRY_BUILTIN_DATAVIEW)
+LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_SET_BIGINT64, "setBigInt64")
+#endif
#if ENABLED (JERRY_BUILTIN_DATE)
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_SET_FULL_YEAR_UL, "setFullYear")
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_SET_UTC_HOURS_UL, "setUTCHours")
@@ -839,7 +845,13 @@ LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_CONFIGURABLE, "configurable")
#if ENABLED (JERRY_BUILTIN_STRING)
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_FROM_CHAR_CODE_UL, "fromCharCode")
#endif
+#if ENABLED (JERRY_BUILTIN_BIGINT) && ENABLED (JERRY_BUILTIN_DATAVIEW)
+LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_GET_BIGUINT64, "getBigUint64")
+#endif
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_IS_EXTENSIBLE, "isExtensible")
+#if ENABLED (JERRY_BUILTIN_BIGINT) && ENABLED (JERRY_BUILTIN_DATAVIEW)
+LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_SET_BIGUINT64, "setBigUint64")
+#endif
#if ENABLED (JERRY_BUILTIN_DATE)
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_TO_DATE_STRING_UL, "toDateString")
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_TO_TIME_STRING_UL, "toTimeString")
diff --git a/jerry-core/lit/lit-magic-strings.ini b/jerry-core/lit/lit-magic-strings.ini
index 3d95fd278..66d80b432 100644
--- a/jerry-core/lit/lit-magic-strings.ini
+++ b/jerry-core/lit/lit-magic-strings.ini
@@ -307,12 +307,14 @@ LIT_MAGIC_STRING_UINT32_ARRAY_UL = "Uint32Array"
LIT_MAGIC_STRING_CONSTRUCTOR = "constructor"
LIT_MAGIC_STRING_CODE_POINT_AT = "codePointAt"
LIT_MAGIC_STRING_OBJECT_FROM_ENTRIES = "fromEntries"
+LIT_MAGIC_STRING_GET_BIGINT64 = "getBigInt64"
LIT_MAGIC_STRING_GET_FULL_YEAR_UL = "getFullYear"
LIT_MAGIC_STRING_GET_UTC_HOURS_UL = "getUTCHours"
LIT_MAGIC_STRING_GET_UTC_MONTH_UL = "getUTCMonth"
LIT_MAGIC_STRING_HAS_INSTANCE = "hasInstance"
LIT_MAGIC_STRING_LAST_INDEX_OF_UL = "lastIndexOf"
LIT_MAGIC_STRING_REDUCE_RIGHT_UL = "reduceRight"
+LIT_MAGIC_STRING_SET_BIGINT64 = "setBigInt64"
LIT_MAGIC_STRING_SET_FULL_YEAR_UL = "setFullYear"
LIT_MAGIC_STRING_SET_UTC_HOURS_UL = "setUTCHours"
LIT_MAGIC_STRING_SET_UTC_MONTH_UL = "setUTCMonth"
@@ -333,7 +335,9 @@ LIT_MAGIC_STRING_MAP_ITERATOR_UL = "Map Iterator"
LIT_MAGIC_STRING_CONFIGURABLE = "configurable"
LIT_MAGIC_STRING_FROM_CHAR_CODE_UL = "fromCharCode"
LIT_MAGIC_STRING_FROM_CODE_POINT_UL = "fromCodePoint"
+LIT_MAGIC_STRING_GET_BIGUINT64 = "getBigUint64"
LIT_MAGIC_STRING_IS_EXTENSIBLE = "isExtensible"
+LIT_MAGIC_STRING_SET_BIGUINT64 = "setBigUint64"
LIT_MAGIC_STRING_TO_DATE_STRING_UL = "toDateString"
LIT_MAGIC_STRING_TO_TIME_STRING_UL = "toTimeString"
LIT_MAGIC_STRING_ASYNC_FUNCTION_UL = "AsyncFunction"
diff --git a/tests/jerry/es.next/dataview.js b/tests/jerry/es.next/dataview.js
index 5c6c2aa0c..28401ba6e 100644
--- a/tests/jerry/es.next/dataview.js
+++ b/tests/jerry/es.next/dataview.js
@@ -194,6 +194,8 @@ buffer = new ArrayBuffer (24);
view1 = new DataView (buffer);
view2 = new DataView (buffer, 4, 12);
view3 = new DataView (buffer, 6, 18);
+view4 = new DataView (buffer);
+view5 = new DataView (buffer);
view1.setUint8 (0, 255);
validateResult(view1, 0, false, [-1, 255, -256, 65280, -16777216, 4278190080, -1.7014118346046924e+38, -5.486124068793689e+303]);
@@ -219,6 +221,18 @@ validateResult(view3, 4, true, [65, 65, 2113, 2113, 2113, 2113, 2.96094365511833
validateResult(view2, 4, false, [-48, 208, -12110, 53426, -793624312, 3501342984, -23924850688, -5.411000515087672e+80]);
validateResult(view2, 4, true, [-48, 208, -19760, 45776, 138523344, 138523344, 5.828901796903399e-34, 6.84396254e-316]);
+view4.setBigInt64 (0, 2n);
+assert(view4.getBigInt64(0) === 2n);
+view4.setBigInt64 (1, -2n);
+assert(view4.getBigInt64(1) === -2n);
+assert(view4.getBigUint64(1) === 18446744073709551614n);
+
+view5.setBigUint64 (0, 2n);
+assert(view5.getBigUint64(0) === 2n);
+view5.setBigUint64 (1, -2n);
+assert(view5.getBigUint64(1) === 18446744073709551614n);
+assert(view5.getBigInt64(1) === -2n);
+
/* Second and third arguments can be "undefined" and there should be no error. */
var arrayBufferOk = new ArrayBuffer (12);
diff --git a/tests/test262-esnext-excludelist.xml b/tests/test262-esnext-excludelist.xml
index ebf903426..33fb30f21 100644
--- a/tests/test262-esnext-excludelist.xml
+++ b/tests/test262-esnext-excludelist.xml
@@ -34,44 +34,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-