| Index: runtime/lib/byte_array.cc
|
| ===================================================================
|
| --- runtime/lib/byte_array.cc (revision 15918)
|
| +++ runtime/lib/byte_array.cc (working copy)
|
| @@ -43,111 +43,112 @@
|
| }
|
|
|
|
|
| -#define GETTER_ARGUMENTS(ArrayT, ValueT) \
|
| - GET_NATIVE_ARGUMENT(ArrayT, array, arguments->NativeArgAt(0)); \
|
| - GET_NATIVE_ARGUMENT(Smi, index, arguments->NativeArgAt(1));
|
| +#define GETTER_ARGUMENTS(ArrayT, ValueT) \
|
| + GET_NON_NULL_NATIVE_ARGUMENT(ArrayT, array, arguments->NativeArgAt(0)); \
|
| + GET_NON_NULL_NATIVE_ARGUMENT(Smi, index, arguments->NativeArgAt(1));
|
|
|
|
|
| -#define SETTER_ARGUMENTS(ArrayT, ObjectT, ValueT) \
|
| - GET_NATIVE_ARGUMENT(ArrayT, array, arguments->NativeArgAt(0)); \
|
| - GET_NATIVE_ARGUMENT(Smi, index, arguments->NativeArgAt(1)); \
|
| - GET_NATIVE_ARGUMENT(ObjectT, value_object, arguments->NativeArgAt(2));
|
| +#define SETTER_ARGUMENTS(ArrayT, ObjectT, ValueT) \
|
| + GET_NON_NULL_NATIVE_ARGUMENT(ArrayT, array, arguments->NativeArgAt(0)); \
|
| + GET_NON_NULL_NATIVE_ARGUMENT(Smi, index, arguments->NativeArgAt(1)); \
|
| + GET_NON_NULL_NATIVE_ARGUMENT( \
|
| + ObjectT, value_object, arguments->NativeArgAt(2));
|
|
|
|
|
| -#define GETTER(ArrayT, ObjectT, ValueT) \
|
| - GETTER_ARGUMENTS(ArrayT, ValueT); \
|
| - RangeCheck(array, index.Value() * sizeof(ValueT), sizeof(ValueT)); \
|
| - ValueT result = array.At(index.Value()); \
|
| +#define GETTER(ArrayT, ObjectT, ValueT) \
|
| + GETTER_ARGUMENTS(ArrayT, ValueT); \
|
| + RangeCheck(array, index.Value() * sizeof(ValueT), sizeof(ValueT)); \
|
| + ValueT result = array.At(index.Value()); \
|
| return ObjectT::New(result);
|
|
|
|
|
| -#define SETTER(ArrayT, ObjectT, Getter, ValueT) \
|
| - SETTER_ARGUMENTS(ArrayT, ObjectT, ValueT); \
|
| - RangeCheck(array, index.Value() * sizeof(ValueT), sizeof(ValueT)); \
|
| - ValueT value = value_object.Getter(); \
|
| - array.SetAt(index.Value(), value); \
|
| +#define SETTER(ArrayT, ObjectT, Getter, ValueT) \
|
| + SETTER_ARGUMENTS(ArrayT, ObjectT, ValueT); \
|
| + RangeCheck(array, index.Value() * sizeof(ValueT), sizeof(ValueT)); \
|
| + ValueT value = value_object.Getter(); \
|
| + array.SetAt(index.Value(), value); \
|
| return Object::null();
|
|
|
|
|
| -#define UNALIGNED_GETTER(ArrayT, ObjectT, ValueT) \
|
| - GETTER_ARGUMENTS(ArrayT, ValueT); \
|
| - RangeCheck(array, index.Value(), sizeof(ValueT)); \
|
| - ValueT result; \
|
| - ByteArray::Copy(&result, array, index.Value(), sizeof(ValueT)); \
|
| +#define UNALIGNED_GETTER(ArrayT, ObjectT, ValueT) \
|
| + GETTER_ARGUMENTS(ArrayT, ValueT); \
|
| + RangeCheck(array, index.Value(), sizeof(ValueT)); \
|
| + ValueT result; \
|
| + ByteArray::Copy(&result, array, index.Value(), sizeof(ValueT)); \
|
| return ObjectT::New(result);
|
|
|
|
|
| -#define UNALIGNED_SETTER(ArrayT, ObjectT, Getter, ValueT) \
|
| - SETTER_ARGUMENTS(ArrayT, ObjectT, ValueT); \
|
| - RangeCheck(array, index.Value(), sizeof(ValueT)); \
|
| - ValueT src = value_object.Getter(); \
|
| - ByteArray::Copy(array, index.Value(), &src, sizeof(ValueT)); \
|
| +#define UNALIGNED_SETTER(ArrayT, ObjectT, Getter, ValueT) \
|
| + SETTER_ARGUMENTS(ArrayT, ObjectT, ValueT); \
|
| + RangeCheck(array, index.Value(), sizeof(ValueT)); \
|
| + ValueT src = value_object.Getter(); \
|
| + ByteArray::Copy(array, index.Value(), &src, sizeof(ValueT)); \
|
| return Integer::New(index.Value() + sizeof(ValueT));
|
|
|
|
|
| -#define UINT64_TO_INTEGER(value, integer) \
|
| - if (value > static_cast<uint64_t>(Mint::kMaxValue)) { \
|
| - result = BigintOperations::NewFromUint64(value); \
|
| - } else if (value > static_cast<uint64_t>(Smi::kMaxValue)) { \
|
| - result = Mint::New(value); \
|
| - } else { \
|
| - result = Smi::New(value); \
|
| +#define UINT64_TO_INTEGER(value, integer) \
|
| + if (value > static_cast<uint64_t>(Mint::kMaxValue)) { \
|
| + result = BigintOperations::NewFromUint64(value); \
|
| + } else if (value > static_cast<uint64_t>(Smi::kMaxValue)) { \
|
| + result = Mint::New(value); \
|
| + } else { \
|
| + result = Smi::New(value); \
|
| }
|
|
|
|
|
| -#define GETTER_UINT64(ArrayT) \
|
| - GETTER_ARGUMENTS(ArrayT, uint64_t); \
|
| - intptr_t size = sizeof(uint64_t); \
|
| - RangeCheck(array, index.Value() * size, size); \
|
| - uint64_t value = array.At(index.Value()); \
|
| - Integer& result = Integer::Handle(); \
|
| - UINT64_TO_INTEGER(value, result); \
|
| +#define GETTER_UINT64(ArrayT) \
|
| + GETTER_ARGUMENTS(ArrayT, uint64_t); \
|
| + intptr_t size = sizeof(uint64_t); \
|
| + RangeCheck(array, index.Value() * size, size); \
|
| + uint64_t value = array.At(index.Value()); \
|
| + Integer& result = Integer::Handle(); \
|
| + UINT64_TO_INTEGER(value, result); \
|
| return result.raw();
|
|
|
|
|
| -#define UNALIGNED_GETTER_UINT64(ArrayT) \
|
| - GETTER_ARGUMENTS(ArrayT, uint64_t); \
|
| - RangeCheck(array, index.Value(), sizeof(uint64_t)); \
|
| - uint64_t value; \
|
| - ByteArray::Copy(&value, array, index.Value(), sizeof(uint64_t)); \
|
| - Integer& result = Integer::Handle(); \
|
| - UINT64_TO_INTEGER(value, result); \
|
| +#define UNALIGNED_GETTER_UINT64(ArrayT) \
|
| + GETTER_ARGUMENTS(ArrayT, uint64_t); \
|
| + RangeCheck(array, index.Value(), sizeof(uint64_t)); \
|
| + uint64_t value; \
|
| + ByteArray::Copy(&value, array, index.Value(), sizeof(uint64_t)); \
|
| + Integer& result = Integer::Handle(); \
|
| + UINT64_TO_INTEGER(value, result); \
|
| return result.raw();
|
|
|
|
|
| -#define INTEGER_TO_UINT64(integer, uint64) \
|
| - if (integer.IsBigint()) { \
|
| - Bigint& bigint = Bigint::Handle(); \
|
| - bigint ^= integer.raw(); \
|
| - ASSERT(BigintOperations::FitsIntoUint64(bigint)); \
|
| - value = BigintOperations::AbsToUint64(bigint); \
|
| - } else { \
|
| - ASSERT(integer.IsMint() || integer.IsSmi()); \
|
| - value = integer.AsInt64Value(); \
|
| - } \
|
| +#define INTEGER_TO_UINT64(integer, uint64) \
|
| + if (integer.IsBigint()) { \
|
| + Bigint& bigint = Bigint::Handle(); \
|
| + bigint ^= integer.raw(); \
|
| + ASSERT(BigintOperations::FitsIntoUint64(bigint)); \
|
| + value = BigintOperations::AbsToUint64(bigint); \
|
| + } else { \
|
| + ASSERT(integer.IsMint() || integer.IsSmi()); \
|
| + value = integer.AsInt64Value(); \
|
| + } \
|
|
|
|
|
| -#define SETTER_UINT64(ArrayT) \
|
| - SETTER_ARGUMENTS(ArrayT, Integer, uint64_t); \
|
| - intptr_t size = sizeof(uint64_t); \
|
| - RangeCheck(array, index.Value() * size, size); \
|
| - uint64_t value; \
|
| - INTEGER_TO_UINT64(value_object, value); \
|
| - array.SetAt(index.Value(), value); \
|
| +#define SETTER_UINT64(ArrayT) \
|
| + SETTER_ARGUMENTS(ArrayT, Integer, uint64_t); \
|
| + intptr_t size = sizeof(uint64_t); \
|
| + RangeCheck(array, index.Value() * size, size); \
|
| + uint64_t value; \
|
| + INTEGER_TO_UINT64(value_object, value); \
|
| + array.SetAt(index.Value(), value); \
|
| return Object::null();
|
|
|
|
|
| -#define UNALIGNED_SETTER_UINT64(ArrayT) \
|
| - SETTER_ARGUMENTS(ArrayT, Integer, uint64_t); \
|
| - RangeCheck(array, index.Value(), sizeof(uint64_t)); \
|
| - uint64_t value; \
|
| - INTEGER_TO_UINT64(value_object, value); \
|
| - ByteArray::Copy(array, index.Value(), &value, sizeof(uint64_t)); \
|
| +#define UNALIGNED_SETTER_UINT64(ArrayT) \
|
| + SETTER_ARGUMENTS(ArrayT, Integer, uint64_t); \
|
| + RangeCheck(array, index.Value(), sizeof(uint64_t)); \
|
| + uint64_t value; \
|
| + INTEGER_TO_UINT64(value_object, value); \
|
| + ByteArray::Copy(array, index.Value(), &value, sizeof(uint64_t)); \
|
| return Integer::New(index.Value() + sizeof(uint64_t));
|
|
|
|
|
| DEFINE_NATIVE_ENTRY(ByteArray_getLength, 1) {
|
| - GET_NATIVE_ARGUMENT(ByteArray, array, arguments->NativeArgAt(0));
|
| + GET_NON_NULL_NATIVE_ARGUMENT(ByteArray, array, arguments->NativeArgAt(0));
|
| return Smi::New(array.Length());
|
| }
|
|
|
| @@ -254,10 +255,10 @@
|
|
|
| DEFINE_NATIVE_ENTRY(ByteArray_setRange, 5) {
|
| ByteArray& dst = ByteArray::CheckedHandle(arguments->NativeArgAt(0));
|
| - GET_NATIVE_ARGUMENT(Smi, dst_start, arguments->NativeArgAt(1));
|
| - GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(2));
|
| - GET_NATIVE_ARGUMENT(ByteArray, src, arguments->NativeArgAt(3));
|
| - GET_NATIVE_ARGUMENT(Smi, src_start, arguments->NativeArgAt(4));
|
| + GET_NON_NULL_NATIVE_ARGUMENT(Smi, dst_start, arguments->NativeArgAt(1));
|
| + GET_NON_NULL_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(2));
|
| + GET_NON_NULL_NATIVE_ARGUMENT(ByteArray, src, arguments->NativeArgAt(3));
|
| + GET_NON_NULL_NATIVE_ARGUMENT(Smi, src_start, arguments->NativeArgAt(4));
|
| intptr_t length_value = length.Value();
|
| intptr_t src_start_value = src_start.Value();
|
| intptr_t dst_start_value = dst_start.Value();
|
| @@ -278,7 +279,7 @@
|
| // Int8Array
|
|
|
| DEFINE_NATIVE_ENTRY(Int8Array_new, 1) {
|
| - GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
|
| + GET_NON_NULL_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
|
| intptr_t len = length.Value();
|
| LengthCheck(len, Int8Array::kMaxElements);
|
| return Int8Array::New(len);
|
| @@ -286,7 +287,7 @@
|
|
|
|
|
| DEFINE_NATIVE_ENTRY(Int8Array_newTransferable, 1) {
|
| - GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
|
| + GET_NON_NULL_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
|
| intptr_t len = length.Value();
|
| LengthCheck(len, Int8Array::kMaxElements);
|
| int8_t* bytes = OS::AllocateAlignedArray<int8_t>(
|
| @@ -312,7 +313,7 @@
|
| // Uint8Array
|
|
|
| DEFINE_NATIVE_ENTRY(Uint8Array_new, 1) {
|
| - GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
|
| + GET_NON_NULL_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
|
| intptr_t len = length.Value();
|
| LengthCheck(len, Uint8Array::kMaxElements);
|
| return Uint8Array::New(len);
|
| @@ -320,7 +321,7 @@
|
|
|
|
|
| DEFINE_NATIVE_ENTRY(Uint8Array_newTransferable, 1) {
|
| - GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
|
| + GET_NON_NULL_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
|
| intptr_t len = length.Value();
|
| LengthCheck(len, Uint8Array::kMaxElements);
|
| uint8_t* bytes = OS::AllocateAlignedArray<uint8_t>(
|
| @@ -346,7 +347,7 @@
|
| // Uint8ClampedArray
|
|
|
| DEFINE_NATIVE_ENTRY(Uint8ClampedArray_new, 1) {
|
| - GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
|
| + GET_NON_NULL_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
|
| intptr_t len = length.Value();
|
| LengthCheck(len, Uint8ClampedArray::kMaxElements);
|
| return Uint8ClampedArray::New(len);
|
| @@ -354,7 +355,7 @@
|
|
|
|
|
| DEFINE_NATIVE_ENTRY(Uint8ClampedArray_newTransferable, 1) {
|
| - GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
|
| + GET_NON_NULL_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
|
| intptr_t len = length.Value();
|
| LengthCheck(len, Uint8ClampedArray::kMaxElements);
|
| uint8_t* bytes = OS::AllocateAlignedArray<uint8_t>(
|
| @@ -380,7 +381,7 @@
|
| // Int16Array
|
|
|
| DEFINE_NATIVE_ENTRY(Int16Array_new, 1) {
|
| - GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
|
| + GET_NON_NULL_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
|
| intptr_t len = length.Value();
|
| LengthCheck(len, Int16Array::kMaxElements);
|
| return Int16Array::New(len);
|
| @@ -388,7 +389,7 @@
|
|
|
|
|
| DEFINE_NATIVE_ENTRY(Int16Array_newTransferable, 1) {
|
| - GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
|
| + GET_NON_NULL_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
|
| intptr_t len = length.Value();
|
| LengthCheck(len, Int16Array::kMaxElements);
|
| int16_t* bytes = OS::AllocateAlignedArray<int16_t>(
|
| @@ -414,7 +415,7 @@
|
| // Uint16Array
|
|
|
| DEFINE_NATIVE_ENTRY(Uint16Array_new, 1) {
|
| - GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
|
| + GET_NON_NULL_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
|
| intptr_t len = length.Value();
|
| LengthCheck(len, Uint16Array::kMaxElements);
|
| return Uint16Array::New(len);
|
| @@ -422,7 +423,7 @@
|
|
|
|
|
| DEFINE_NATIVE_ENTRY(Uint16Array_newTransferable, 1) {
|
| - GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
|
| + GET_NON_NULL_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
|
| intptr_t len = length.Value();
|
| LengthCheck(len, Uint16Array::kMaxElements);
|
| uint16_t* bytes = OS::AllocateAlignedArray<uint16_t>(
|
| @@ -448,7 +449,7 @@
|
| // Int32Array
|
|
|
| DEFINE_NATIVE_ENTRY(Int32Array_new, 1) {
|
| - GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
|
| + GET_NON_NULL_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
|
| intptr_t len = length.Value();
|
| LengthCheck(len, Int32Array::kMaxElements);
|
| return Int32Array::New(len);
|
| @@ -456,7 +457,7 @@
|
|
|
|
|
| DEFINE_NATIVE_ENTRY(Int32Array_newTransferable, 1) {
|
| - GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
|
| + GET_NON_NULL_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
|
| intptr_t len = length.Value();
|
| LengthCheck(len, Int32Array::kMaxElements);
|
| int32_t* bytes = OS::AllocateAlignedArray<int32_t>(
|
| @@ -482,7 +483,7 @@
|
| // Uint32Array
|
|
|
| DEFINE_NATIVE_ENTRY(Uint32Array_new, 1) {
|
| - GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
|
| + GET_NON_NULL_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
|
| intptr_t len = length.Value();
|
| LengthCheck(len, Uint32Array::kMaxElements);
|
| return Uint32Array::New(len);
|
| @@ -490,7 +491,7 @@
|
|
|
|
|
| DEFINE_NATIVE_ENTRY(Uint32Array_newTransferable, 1) {
|
| - GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
|
| + GET_NON_NULL_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
|
| intptr_t len = length.Value();
|
| LengthCheck(len, Uint32Array::kMaxElements);
|
| uint32_t* bytes = OS::AllocateAlignedArray<uint32_t>(
|
| @@ -516,7 +517,7 @@
|
| // Int64Array
|
|
|
| DEFINE_NATIVE_ENTRY(Int64Array_new, 1) {
|
| - GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
|
| + GET_NON_NULL_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
|
| intptr_t len = length.Value();
|
| LengthCheck(len, Int64Array::kMaxElements);
|
| return Int64Array::New(len);
|
| @@ -524,7 +525,7 @@
|
|
|
|
|
| DEFINE_NATIVE_ENTRY(Int64Array_newTransferable, 1) {
|
| - GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
|
| + GET_NON_NULL_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
|
| intptr_t len = length.Value();
|
| LengthCheck(len, Int64Array::kMaxElements);
|
| int64_t* bytes = OS::AllocateAlignedArray<int64_t>(
|
| @@ -550,7 +551,7 @@
|
| // Uint64Array
|
|
|
| DEFINE_NATIVE_ENTRY(Uint64Array_new, 1) {
|
| - GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
|
| + GET_NON_NULL_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
|
| intptr_t len = length.Value();
|
| LengthCheck(len, Uint64Array::kMaxElements);
|
| return Uint64Array::New(len);
|
| @@ -558,7 +559,7 @@
|
|
|
|
|
| DEFINE_NATIVE_ENTRY(Uint64Array_newTransferable, 1) {
|
| - GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
|
| + GET_NON_NULL_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
|
| intptr_t len = length.Value();
|
| LengthCheck(len, Uint64Array::kMaxElements);
|
| uint64_t* bytes = OS::AllocateAlignedArray<uint64_t>(
|
| @@ -584,7 +585,7 @@
|
| // Float32Array
|
|
|
| DEFINE_NATIVE_ENTRY(Float32Array_new, 1) {
|
| - GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
|
| + GET_NON_NULL_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
|
| intptr_t len = length.Value();
|
| LengthCheck(len, Float32Array::kMaxElements);
|
| return Float32Array::New(len);
|
| @@ -592,7 +593,7 @@
|
|
|
|
|
| DEFINE_NATIVE_ENTRY(Float32Array_newTransferable, 1) {
|
| - GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
|
| + GET_NON_NULL_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
|
| intptr_t len = length.Value();
|
| LengthCheck(len, Float32Array::kMaxElements);
|
| float* bytes = OS::AllocateAlignedArray<float>(
|
| @@ -618,7 +619,7 @@
|
| // Float64Array
|
|
|
| DEFINE_NATIVE_ENTRY(Float64Array_new, 1) {
|
| - GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
|
| + GET_NON_NULL_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
|
| intptr_t len = length.Value();
|
| LengthCheck(len, Float64Array::kMaxElements);
|
| return Float64Array::New(len);
|
| @@ -626,7 +627,7 @@
|
|
|
|
|
| DEFINE_NATIVE_ENTRY(Float64Array_newTransferable, 1) {
|
| - GET_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
|
| + GET_NON_NULL_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(0));
|
| intptr_t len = length.Value();
|
| LengthCheck(len, Float64Array::kMaxElements);
|
| double* bytes = OS::AllocateAlignedArray<double>(
|
|
|