Chromium Code Reviews| Index: src/runtime.cc |
| diff --git a/src/runtime.cc b/src/runtime.cc |
| index 7e45753eba89e02bbe5006d92a0e4fc6a9f116f5..afcb586b2796dc7610726c76dbd2c00c2680e0e9 100644 |
| --- a/src/runtime.cc |
| +++ b/src/runtime.cc |
| @@ -777,6 +777,242 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_ArrayBufferSliceImpl) { |
| } |
| +RUNTIME_FUNCTION(MaybeObject*, Runtime_DataViewInitialize) { |
| + HandleScope scope(isolate); |
| + ASSERT(args.length() == 4); |
| + CONVERT_ARG_HANDLE_CHECKED(JSDataView, holder, 0); |
| + CONVERT_ARG_HANDLE_CHECKED(JSArrayBuffer, buffer, 1); |
| + CONVERT_ARG_HANDLE_CHECKED(Object, byte_offset_object, 2); |
| + CONVERT_ARG_HANDLE_CHECKED(Object, byte_length_object, 3); |
| + |
| + holder->set_buffer(*buffer); |
| + holder->set_byte_offset(*byte_offset_object); |
| + holder->set_byte_length(*byte_length_object); |
| + |
| + Handle<Map> map = |
| + isolate->factory()->GetElementsTransitionMap( |
| + holder, EXTERNAL_UNSIGNED_BYTE_ELEMENTS); |
| + holder->set_map(*map); |
|
Dmitry Lomov (no reviews)
2013/06/03 13:09:04
This is completely unneeded. DataViews are not ext
|
| + return isolate->heap()->undefined_value(); |
| +} |
| + |
| + |
| +RUNTIME_FUNCTION(MaybeObject*, Runtime_DataViewGetBuffer) { |
| + HandleScope scope(isolate); |
| + ASSERT(args.length() == 1); |
| + CONVERT_ARG_HANDLE_CHECKED(JSDataView, holder, 0); |
| + return (*holder)->buffer(); |
| +} |
| + |
| + |
| +RUNTIME_FUNCTION(MaybeObject*, Runtime_DataViewGetByteLength) { |
| + HandleScope scope(isolate); |
| + ASSERT(args.length() == 1); |
| + CONVERT_ARG_HANDLE_CHECKED(JSDataView, holder, 0); |
| + return (*holder)->byte_length(); |
| +} |
| + |
| + |
| +RUNTIME_FUNCTION(MaybeObject*, Runtime_DataViewGetByteOffset) { |
| + HandleScope scope(isolate); |
| + ASSERT(args.length() == 1); |
| + CONVERT_ARG_HANDLE_CHECKED(JSDataView, holder, 0); |
| + return (*holder)->byte_offset(); |
| +} |
| + |
| + |
| +RUNTIME_FUNCTION(MaybeObject*, Runtime_DataViewGetInt8) { |
| + HandleScope scope(isolate); |
| + ASSERT(args.length() == 2); |
| + CONVERT_ARG_HANDLE_CHECKED(JSDataView, holder, 0); |
| + CONVERT_SMI_ARG_CHECKED(byte_offset, 1); |
|
Dmitry Lomov (no reviews)
2013/06/03 13:09:04
This is wrong. Even if byte_offset is a result of
|
| + ASSERT(byte_offset >= 0); |
| + return Smi::FromInt((*holder)->Get<int8_t>(byte_offset)); |
| +} |
| + |
| + |
| +RUNTIME_FUNCTION(MaybeObject*, Runtime_DataViewGetUint8) { |
| + HandleScope scope(isolate); |
| + ASSERT(args.length() == 2); |
| + CONVERT_ARG_HANDLE_CHECKED(JSDataView, holder, 0); |
| + CONVERT_SMI_ARG_CHECKED(byte_offset, 1); |
| + ASSERT(byte_offset >= 0); |
| + return Smi::FromInt((*holder)->Get<uint8_t>(byte_offset)); |
| +} |
| + |
| + |
| +RUNTIME_FUNCTION(MaybeObject*, Runtime_DataViewGetInt16) { |
| + HandleScope scope(isolate); |
| + ASSERT(args.length() == 3); |
| + CONVERT_ARG_HANDLE_CHECKED(JSDataView, holder, 0); |
| + CONVERT_SMI_ARG_CHECKED(byte_offset, 1); |
| + ASSERT(byte_offset >= 0); |
| + CONVERT_BOOLEAN_ARG_CHECKED(little_endian, 2); |
| + return Smi::FromInt((*holder)->Get<int16_t>(byte_offset, little_endian)); |
| +} |
| + |
| + |
| +RUNTIME_FUNCTION(MaybeObject*, Runtime_DataViewGetUint16) { |
| + HandleScope scope(isolate); |
| + ASSERT(args.length() == 3); |
| + CONVERT_ARG_HANDLE_CHECKED(JSDataView, holder, 0); |
| + CONVERT_SMI_ARG_CHECKED(byte_offset, 1); |
| + ASSERT(byte_offset >= 0); |
| + CONVERT_BOOLEAN_ARG_CHECKED(little_endian, 2); |
| + return Smi::FromInt((*holder)->Get<uint16_t>(byte_offset, little_endian)); |
| +} |
| + |
| + |
| +RUNTIME_FUNCTION(MaybeObject*, Runtime_DataViewGetInt32) { |
| + HandleScope scope(isolate); |
| + ASSERT(args.length() == 3); |
| + CONVERT_ARG_HANDLE_CHECKED(JSDataView, holder, 0); |
| + CONVERT_SMI_ARG_CHECKED(byte_offset, 1); |
| + ASSERT(byte_offset >= 0); |
| + CONVERT_BOOLEAN_ARG_CHECKED(little_endian, 2); |
| + return isolate->heap()->NumberFromInt32( |
| + (*holder)->Get<int32_t>(byte_offset, little_endian)); |
| +} |
| + |
| + |
| +RUNTIME_FUNCTION(MaybeObject*, Runtime_DataViewGetUint32) { |
| + HandleScope scope(isolate); |
| + ASSERT(args.length() == 3); |
| + CONVERT_ARG_HANDLE_CHECKED(JSDataView, holder, 0); |
| + CONVERT_SMI_ARG_CHECKED(byte_offset, 1); |
| + ASSERT(byte_offset >= 0); |
| + CONVERT_BOOLEAN_ARG_CHECKED(little_endian, 2); |
| + return isolate->heap()->NumberFromUint32( |
| + (*holder)->Get<uint32_t>(byte_offset, little_endian)); |
| +} |
| + |
| + |
| +RUNTIME_FUNCTION(MaybeObject*, Runtime_DataViewGetFloat32) { |
| + HandleScope scope(isolate); |
| + ASSERT(args.length() == 3); |
| + CONVERT_ARG_HANDLE_CHECKED(JSDataView, holder, 0); |
| + CONVERT_SMI_ARG_CHECKED(byte_offset, 1); |
| + ASSERT(byte_offset >= 0); |
| + CONVERT_BOOLEAN_ARG_CHECKED(little_endian, 2); |
| + return isolate->heap()->NumberFromDouble( |
| + (*holder)->Get<float>(byte_offset, little_endian)); |
| +} |
| + |
| + |
| +RUNTIME_FUNCTION(MaybeObject*, Runtime_DataViewGetFloat64) { |
| + HandleScope scope(isolate); |
| + ASSERT(args.length() == 3); |
| + CONVERT_ARG_HANDLE_CHECKED(JSDataView, holder, 0); |
| + CONVERT_SMI_ARG_CHECKED(byte_offset, 1); |
| + ASSERT(byte_offset >= 0); |
| + CONVERT_BOOLEAN_ARG_CHECKED(little_endian, 2); |
| + return isolate->heap()->NumberFromDouble( |
| + (*holder)->Get<double>(byte_offset, little_endian)); |
| +} |
| + |
| + |
| +RUNTIME_FUNCTION(MaybeObject*, Runtime_DataViewSetInt8) { |
| + HandleScope scope(isolate); |
| + ASSERT(args.length() == 3); |
| + CONVERT_ARG_HANDLE_CHECKED(JSDataView, holder, 0); |
| + CONVERT_SMI_ARG_CHECKED(byte_offset, 1); |
| + ASSERT(byte_offset >= 0); |
| + CONVERT_NUMBER_CHECKED(int8_t, value, Int32, args[2]); |
| + (*holder)->Set(byte_offset, value); |
| + return isolate->heap()->undefined_value(); |
| +} |
| + |
| + |
| +RUNTIME_FUNCTION(MaybeObject*, Runtime_DataViewSetUint8) { |
| + HandleScope scope(isolate); |
| + ASSERT(args.length() == 3); |
| + CONVERT_ARG_HANDLE_CHECKED(JSDataView, holder, 0); |
| + CONVERT_SMI_ARG_CHECKED(byte_offset, 1); |
| + ASSERT(byte_offset >= 0); |
| + CONVERT_NUMBER_CHECKED(uint8_t, value, Uint32, args[2]); |
| + (*holder)->Set(byte_offset, value); |
| + return isolate->heap()->undefined_value(); |
| +} |
| + |
| + |
| +RUNTIME_FUNCTION(MaybeObject*, Runtime_DataViewSetInt16) { |
| + HandleScope scope(isolate); |
| + ASSERT(args.length() == 4); |
| + CONVERT_ARG_HANDLE_CHECKED(JSDataView, holder, 0); |
| + CONVERT_SMI_ARG_CHECKED(byte_offset, 1); |
| + ASSERT(byte_offset >= 0); |
| + CONVERT_NUMBER_CHECKED(int16_t, value, Int32, args[2]); |
| + CONVERT_BOOLEAN_ARG_CHECKED(little_endian, 3); |
| + (*holder)->Set(byte_offset, value, little_endian); |
| + return isolate->heap()->undefined_value(); |
| +} |
| + |
| + |
| +RUNTIME_FUNCTION(MaybeObject*, Runtime_DataViewSetUint16) { |
| + HandleScope scope(isolate); |
| + ASSERT(args.length() == 4); |
| + CONVERT_ARG_HANDLE_CHECKED(JSDataView, holder, 0); |
| + CONVERT_SMI_ARG_CHECKED(byte_offset, 1); |
| + ASSERT(byte_offset >= 0); |
| + CONVERT_NUMBER_CHECKED(uint16_t, value, Uint32, args[2]); |
| + CONVERT_BOOLEAN_ARG_CHECKED(little_endian, 3); |
| + (*holder)->Set(byte_offset, value, little_endian); |
| + return isolate->heap()->undefined_value(); |
| +} |
| + |
| + |
| +RUNTIME_FUNCTION(MaybeObject*, Runtime_DataViewSetInt32) { |
| + HandleScope scope(isolate); |
| + ASSERT(args.length() == 4); |
| + CONVERT_ARG_HANDLE_CHECKED(JSDataView, holder, 0); |
| + CONVERT_SMI_ARG_CHECKED(byte_offset, 1); |
| + ASSERT(byte_offset >= 0); |
| + CONVERT_NUMBER_CHECKED(int32_t, value, Int32, args[2]); |
| + CONVERT_BOOLEAN_ARG_CHECKED(little_endian, 3); |
| + (*holder)->Set(byte_offset, value, little_endian); |
| + return isolate->heap()->undefined_value(); |
| +} |
| + |
| + |
| +RUNTIME_FUNCTION(MaybeObject*, Runtime_DataViewSetUint32) { |
| + HandleScope scope(isolate); |
| + ASSERT(args.length() == 4); |
| + CONVERT_ARG_HANDLE_CHECKED(JSDataView, holder, 0); |
| + CONVERT_SMI_ARG_CHECKED(byte_offset, 1); |
| + ASSERT(byte_offset >= 0); |
| + CONVERT_NUMBER_CHECKED(uint32_t, value, Uint32, args[2]); |
| + CONVERT_BOOLEAN_ARG_CHECKED(little_endian, 3); |
| + (*holder)->Set(byte_offset, value, little_endian); |
| + return isolate->heap()->undefined_value(); |
| +} |
| + |
| + |
| +RUNTIME_FUNCTION(MaybeObject*, Runtime_DataViewSetFloat32) { |
| + HandleScope scope(isolate); |
| + ASSERT(args.length() == 4); |
| + CONVERT_ARG_HANDLE_CHECKED(JSDataView, holder, 0); |
| + CONVERT_SMI_ARG_CHECKED(byte_offset, 1); |
| + ASSERT(byte_offset >= 0); |
| + CONVERT_DOUBLE_ARG_CHECKED(value, 2); |
| + CONVERT_BOOLEAN_ARG_CHECKED(little_endian, 3); |
| + (*holder)->Set(byte_offset, static_cast<float>(value), little_endian); |
| + return isolate->heap()->undefined_value(); |
| +} |
| + |
| + |
| +RUNTIME_FUNCTION(MaybeObject*, Runtime_DataViewSetFloat64) { |
| + HandleScope scope(isolate); |
| + ASSERT(args.length() == 4); |
| + CONVERT_ARG_HANDLE_CHECKED(JSDataView, holder, 0); |
| + CONVERT_SMI_ARG_CHECKED(byte_offset, 1); |
| + ASSERT(byte_offset >= 0); |
| + CONVERT_DOUBLE_ARG_CHECKED(value, 2); |
| + CONVERT_BOOLEAN_ARG_CHECKED(little_endian, 3); |
| + (*holder)->Set(byte_offset, value, little_endian); |
| + return isolate->heap()->undefined_value(); |
| +} |
| + |
| + |
| enum TypedArrayId { |
| // arrayIds below should be synchromized with typedarray.js natives. |
| ARRAY_ID_UINT8 = 1, |