Implement DataView builtin (#2804)

New API functions:
 - jerry_create_dataview
 - jerry_value_is_dataview
 - jerry_get_dataview_buffer

JerryScript-DCO-1.0-Signed-off-by: Robert Fancsik frobert@inf.u-szeged.hu
This commit is contained in:
Robert Fancsik
2019-04-16 08:26:39 +02:00
committed by László Langó
parent b3f4aa6816
commit 5c72d995e4
24 changed files with 1583 additions and 63 deletions
+171
View File
@@ -63,6 +63,7 @@ Possible compile time enabled feature types:
- JERRY_FEATURE_LINE_INFO - line info available
- JERRY_FEATURE_LOGGING - logging
- JERRY_FEATURE_SYMBOL - symbol support
- JERRY_FEATURE_DATAVIEW - DataView support
## jerry_regexp_flags_t
@@ -1296,6 +1297,56 @@ jerry_value_is_constructor (const jerry_value_t value)
- [jerry_release_value](#jerry_release_value)
## jerry_value_is_dataview
**Summary**
Returns whether the given `jerry_value_t` is a DataView object value.
**Prototype**
```c
bool
jerry_value_is_dataview (const jerry_value_t value)
```
- `value` - API value
- return value
- true, if the given `jerry_value_t` is a DataView object
- false, otherwise
**Example**
[doctest]: # ()
```c
#include "jerryscript.h"
int
main (void)
{
jerry_init (JERRY_INIT_EMPTY);
jerry_value_t arraybuffer = jerry_create_arraybuffer (16);
jerry_value_t dataview = jerry_create_dataview (arraybuffer, 0, 16);
if (jerry_value_is_dataview (dataview))
{
// usage of dataview
}
jerry_release_value (dataview);
jerry_release_value (arraybuffer);
jerry_cleanup ();
}
```
**See also**
- [jerry_release_value](#jerry_release_value)
## jerry_value_is_error
**Summary**
@@ -3246,6 +3297,62 @@ jerry_create_error_sz (jerry_error_t error_type,
- [jerry_create_error](#jerry_create_error)
## jerry_create_dataview
**Summary**
Create new JavaScript DataView object.
*Note*: This API depends on the ES2015-subset profile.
*Note*: Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
is no longer needed.
**Prototype**
```c
jerry_value_t
jerry_create_dataview (const jerry_value_t array_buffer,
const jerry_length_t byte_offset,
const jerry_length_t byte_length)
```
- `array_buffer` - arrayBuffer to create DataView from
- `byte_offset` - offset in bytes, to the first byte in the buffer
- `byte_length` - number of elements in the byte array
- return value
- value of the constructed DataView object - if success
- created error - otherwise
**Example**
[doctest]: # ()
```c
#include "jerryscript.h"
int
main (void)
{
jerry_init (JERRY_INIT_EMPTY);
jerry_value_t arraybuffer = jerry_create_arraybuffer (16);
jerry_value_t dataview = jerry_create_dataview (arraybuffer, 0, 16);
// usage of dataview
jerry_release_value (dataview);
jerry_release_value (arraybuffer);
jerry_cleanup ();
}
```
**See also**
- [jerry_value_is_dataview](#jerry_value_is_dataview)
- [jerry_create_arraybuffer](#jerry_create_arraybuffer)
## jerry_create_external_function
**Summary**
@@ -6254,6 +6361,70 @@ jerry_get_arraybuffer_pointer (const jerry_value_t value);
- [jerry_create_arraybuffer_external](#jerry_create_arraybuffer_external)
## jerry_get_dataview_buffer
**Summary**
Get the ArrayBuffer object used by a DataView object.
Additionally returns the byteLength and byteOffset properties
of the DataView object.
For the returned ArrayBuffer the [jerry_release_value](#jerry_release_value)
must be called when it is no longer needed.
**Prototype**
```c
jerry_value_t
jerry_get_dataview_buffer (const jerry_value_t value,
jerry_length_t *byteOffset,
jerry_length_t *byteLength);
```
- `value` - DataView to get the ArrayBuffer from
- `byteOffset` - (Optional) returns the start offset of the ArrayBuffer for the DataView
- `byteLength` - (Optional) returns the number of bytes used from the ArrayBuffer for the DataView
- return
- DataView object's underlying ArrayBuffer object
- TypeError if the `value` is not a DataView object
**Example**
[doctest]: # ()
```c
#include "jerryscript.h"
int
main (void)
{
jerry_init (JERRY_INIT_EMPTY);
jerry_value_t arraybuffer = jerry_create_arraybuffer (16);
jerry_value_t dataview = jerry_create_dataview (arraybuffer, 0, 16);
jerry_length_t byteOffset = 0;
jerry_length_t byteLength = 0;
jerry_value_t buffer = jerry_get_dataview_buffer (dataview, &byteOffset, &byteLength);
// buffer is an ArrayBuffer object and ArrayBuffer operations can be performed on it
// byteOffset is 0
// byteLength is 16
// usage of buffer
jerry_release_value (buffer);
jerry_release_value (dataview);
jerry_release_value (arraybuffer);
jerry_cleanup ();
}
```
**See also**
- [jerry_create_dataview](#jerry_create_dataview)
## jerry_get_typedarray_type
**Summary**