Chromium Code Reviews| Index: runtime/lib/byte_array.cc |
| diff --git a/runtime/lib/byte_array.cc b/runtime/lib/byte_array.cc |
| index 2f61030e7a0b75145873cab828df04bebaf4c3d1..10419dfe8090be24a071505e6ce786db417d0205 100644 |
| --- a/runtime/lib/byte_array.cc |
| +++ b/runtime/lib/byte_array.cc |
| @@ -285,6 +285,20 @@ DEFINE_NATIVE_ENTRY(Int8Array_new, 1) { |
| } |
| +DEFINE_NATIVE_ENTRY(Int8Array_newTransferrable, 1) { |
|
Ivan Posva
2012/12/02 14:17:55
The spelling transferable is generally preferred,
|
| + GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); |
| + intptr_t len = length.Value(); |
| + LengthCheck(len, Int8Array::kMaxElements); |
| + int8_t* bytes = OS::AllocateAlignedArray<int8_t>( |
| + len, |
| + ExternalByteArrayData<int8_t>::kAlignment); |
| + return ExternalInt8Array::New(bytes, |
| + len, |
| + bytes, |
| + OS::AlignedFree); |
| +} |
| + |
| + |
| DEFINE_NATIVE_ENTRY(Int8Array_getIndexed, 2) { |
| GETTER(Int8Array, Smi, int8_t); |
| } |
| @@ -305,6 +319,20 @@ DEFINE_NATIVE_ENTRY(Uint8Array_new, 1) { |
| } |
| +DEFINE_NATIVE_ENTRY(Uint8Array_newTransferrable, 1) { |
| + GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); |
| + intptr_t len = length.Value(); |
| + LengthCheck(len, Uint8Array::kMaxElements); |
| + uint8_t* bytes = OS::AllocateAlignedArray<uint8_t>( |
| + len, |
| + ExternalByteArrayData<uint8_t>::kAlignment); |
| + return ExternalUint8Array::New(bytes, |
| + len, |
| + bytes, |
| + OS::AlignedFree); |
| +} |
| + |
| + |
| DEFINE_NATIVE_ENTRY(Uint8Array_getIndexed, 2) { |
| GETTER(Uint8Array, Smi, uint8_t); |
| } |
| @@ -325,6 +353,20 @@ DEFINE_NATIVE_ENTRY(Int16Array_new, 1) { |
| } |
| +DEFINE_NATIVE_ENTRY(Int16Array_newTransferrable, 1) { |
| + GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); |
| + intptr_t len = length.Value(); |
| + LengthCheck(len, Int16Array::kMaxElements); |
| + int16_t* bytes = OS::AllocateAlignedArray<int16_t>( |
| + len, |
| + ExternalByteArrayData<int16_t>::kAlignment); |
| + return ExternalInt16Array::New(bytes, |
| + len, |
| + bytes, |
| + OS::AlignedFree); |
| +} |
| + |
| + |
| DEFINE_NATIVE_ENTRY(Int16Array_getIndexed, 2) { |
| GETTER(Int16Array, Smi, int16_t); |
| } |
| @@ -345,6 +387,20 @@ DEFINE_NATIVE_ENTRY(Uint16Array_new, 1) { |
| } |
| +DEFINE_NATIVE_ENTRY(Uint16Array_newTransferrable, 1) { |
| + GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); |
| + intptr_t len = length.Value(); |
| + LengthCheck(len, Uint16Array::kMaxElements); |
| + uint16_t* bytes = OS::AllocateAlignedArray<uint16_t>( |
|
siva
2012/11/30 22:15:53
The name 'byte' here is not very readable,
why not
cshapiro
2012/11/30 22:18:11
The object.h class calls this value data
:-)
siva
2012/11/30 22:33:21
Sure data is fine too.
On 2012/11/30 22:18:11, cs
|
| + len, |
| + ExternalByteArrayData<uint16_t>::kAlignment); |
| + return ExternalUint16Array::New(bytes, |
| + len, |
| + bytes, |
| + OS::AlignedFree); |
| +} |
| + |
| + |
| DEFINE_NATIVE_ENTRY(Uint16Array_getIndexed, 2) { |
| GETTER(Uint16Array, Smi, uint16_t); |
| } |
| @@ -365,6 +421,20 @@ DEFINE_NATIVE_ENTRY(Int32Array_new, 1) { |
| } |
| +DEFINE_NATIVE_ENTRY(Int32Array_newTransferrable, 1) { |
| + GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); |
| + intptr_t len = length.Value(); |
| + LengthCheck(len, Int32Array::kMaxElements); |
| + int32_t* bytes = OS::AllocateAlignedArray<int32_t>( |
| + len, |
| + ExternalByteArrayData<int32_t>::kAlignment); |
| + return ExternalInt32Array::New(bytes, |
| + len, |
| + bytes, |
| + OS::AlignedFree); |
| +} |
| + |
| + |
| DEFINE_NATIVE_ENTRY(Int32Array_getIndexed, 2) { |
| GETTER(Int32Array, Integer, int32_t); |
| } |
| @@ -385,6 +455,20 @@ DEFINE_NATIVE_ENTRY(Uint32Array_new, 1) { |
| } |
| +DEFINE_NATIVE_ENTRY(Uint32Array_newTransferrable, 1) { |
| + GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); |
| + intptr_t len = length.Value(); |
| + LengthCheck(len, Uint32Array::kMaxElements); |
| + uint32_t* bytes = OS::AllocateAlignedArray<uint32_t>( |
| + len, |
| + ExternalByteArrayData<uint32_t>::kAlignment); |
| + return ExternalUint32Array::New(bytes, |
| + len, |
| + bytes, |
| + OS::AlignedFree); |
| +} |
| + |
| + |
| DEFINE_NATIVE_ENTRY(Uint32Array_getIndexed, 2) { |
| GETTER(Uint32Array, Integer, uint32_t); |
| } |
| @@ -405,6 +489,20 @@ DEFINE_NATIVE_ENTRY(Int64Array_new, 1) { |
| } |
| +DEFINE_NATIVE_ENTRY(Int64Array_newTransferrable, 1) { |
| + GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); |
| + intptr_t len = length.Value(); |
| + LengthCheck(len, Int64Array::kMaxElements); |
| + int64_t* bytes = OS::AllocateAlignedArray<int64_t>( |
| + len, |
| + ExternalByteArrayData<int64_t>::kAlignment); |
| + return ExternalInt64Array::New(bytes, |
| + len, |
| + bytes, |
| + OS::AlignedFree); |
| +} |
| + |
| + |
| DEFINE_NATIVE_ENTRY(Int64Array_getIndexed, 2) { |
| GETTER(Int64Array, Integer, int64_t); |
| } |
| @@ -425,6 +523,20 @@ DEFINE_NATIVE_ENTRY(Uint64Array_new, 1) { |
| } |
| +DEFINE_NATIVE_ENTRY(Uint64Array_newTransferrable, 1) { |
| + GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); |
| + intptr_t len = length.Value(); |
| + LengthCheck(len, Uint64Array::kMaxElements); |
| + uint64_t* bytes = OS::AllocateAlignedArray<uint64_t>( |
| + len, |
| + ExternalByteArrayData<uint64_t>::kAlignment); |
| + return ExternalUint64Array::New(bytes, |
| + len, |
| + bytes, |
| + OS::AlignedFree); |
| +} |
| + |
| + |
| DEFINE_NATIVE_ENTRY(Uint64Array_getIndexed, 2) { |
| GETTER_UINT64(Uint64Array); |
| } |
| @@ -445,6 +557,20 @@ DEFINE_NATIVE_ENTRY(Float32Array_new, 1) { |
| } |
| +DEFINE_NATIVE_ENTRY(Float32Array_newTransferrable, 1) { |
| + GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); |
| + intptr_t len = length.Value(); |
| + LengthCheck(len, Float32Array::kMaxElements); |
| + float* bytes = OS::AllocateAlignedArray<float>( |
| + len, |
| + ExternalByteArrayData<float>::kAlignment); |
| + return ExternalFloat32Array::New(bytes, |
| + len, |
| + bytes, |
| + OS::AlignedFree); |
| +} |
| + |
| + |
| DEFINE_NATIVE_ENTRY(Float32Array_getIndexed, 2) { |
| GETTER(Float32Array, Double, float); |
| } |
| @@ -465,6 +591,20 @@ DEFINE_NATIVE_ENTRY(Float64Array_new, 1) { |
| } |
| +DEFINE_NATIVE_ENTRY(Float64Array_newTransferrable, 1) { |
| + GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0)); |
| + intptr_t len = length.Value(); |
| + LengthCheck(len, Float64Array::kMaxElements); |
| + double* bytes = OS::AllocateAlignedArray<double>( |
| + len, |
| + ExternalByteArrayData<double>::kAlignment); |
| + return ExternalFloat64Array::New(bytes, |
| + len, |
| + bytes, |
| + OS::AlignedFree); |
| +} |
| + |
| + |
| DEFINE_NATIVE_ENTRY(Float64Array_getIndexed, 2) { |
| GETTER(Float64Array, Double, double); |
| } |