| Index: runtime/lib/byte_array.cc | 
| =================================================================== | 
| --- runtime/lib/byte_array.cc	(revision 17469) | 
| +++ runtime/lib/byte_array.cc	(working copy) | 
| @@ -22,7 +22,7 @@ | 
| if (!Utils::RangeCheck(index, num_bytes, array.ByteLength())) { | 
| const String& error = String::Handle(String::NewFormatted( | 
| "index (%"Pd") must be in the range [0..%"Pd")", | 
| -        index, (array.ByteLength() / num_bytes))); | 
| +        (index / num_bytes), (array.ByteLength() / num_bytes))); | 
| const Array& args = Array::Handle(Array::New(1)); | 
| args.SetAt(0, error); | 
| Exceptions::ThrowByType(Exceptions::kRange, args); | 
| @@ -86,6 +86,23 @@ | 
| return Integer::New(index.Value() + sizeof(ValueT)); | 
|  | 
|  | 
| +#define SCALED_UNALIGNED_GETTER(ArrayT, ObjectT, ValueT)                       \ | 
| +  GETTER_ARGUMENTS(ArrayT, ValueT);                                            \ | 
| +  RangeCheck(array, index.Value() * sizeof(ValueT), sizeof(ValueT));           \ | 
| +  ValueT result;                                                               \ | 
| +  ByteArray::Copy(&result, array,                                              \ | 
| +      index.Value() * sizeof(ValueT), sizeof(ValueT));                         \ | 
| +  return ObjectT::New(result); | 
| + | 
| + | 
| +#define SCALED_UNALIGNED_SETTER(ArrayT, ObjectT, Getter, ValueT)               \ | 
| +  SETTER_ARGUMENTS(ArrayT, ObjectT, ValueT);                                   \ | 
| +  RangeCheck(array, index.Value() * sizeof(ValueT), sizeof(ValueT));           \ | 
| +  ValueT src = value_object.Getter();                                          \ | 
| +  ByteArray::Copy(array, index.Value() * sizeof(ValueT), &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);                           \ | 
| @@ -665,24 +682,24 @@ | 
| // ExternalUint8Array | 
|  | 
| DEFINE_NATIVE_ENTRY(ExternalUint8Array_getIndexed, 2) { | 
| -  UNALIGNED_GETTER(ExternalUint8Array, Smi, uint8_t); | 
| +  SCALED_UNALIGNED_GETTER(ExternalUint8Array, Smi, uint8_t); | 
| } | 
|  | 
|  | 
| DEFINE_NATIVE_ENTRY(ExternalUint8Array_setIndexed, 3) { | 
| -  UNALIGNED_SETTER(ExternalUint8Array, Smi, Value, uint8_t); | 
| +  SCALED_UNALIGNED_SETTER(ExternalUint8Array, Smi, Value, uint8_t); | 
| } | 
|  | 
|  | 
| // ExternalUint8ClampedArray | 
|  | 
| DEFINE_NATIVE_ENTRY(ExternalUint8ClampedArray_getIndexed, 2) { | 
| -  UNALIGNED_GETTER(ExternalUint8ClampedArray, Smi, uint8_t); | 
| +  SCALED_UNALIGNED_GETTER(ExternalUint8ClampedArray, Smi, uint8_t); | 
| } | 
|  | 
|  | 
| DEFINE_NATIVE_ENTRY(ExternalUint8ClampedArray_setIndexed, 3) { | 
| -  UNALIGNED_SETTER(ExternalUint8ClampedArray, Smi, Value, uint8_t); | 
| +  SCALED_UNALIGNED_SETTER(ExternalUint8ClampedArray, Smi, Value, uint8_t); | 
| } | 
|  | 
|  | 
| @@ -701,12 +718,12 @@ | 
| // ExternalUint16Array | 
|  | 
| DEFINE_NATIVE_ENTRY(ExternalUint16Array_getIndexed, 2) { | 
| -  UNALIGNED_GETTER(ExternalUint16Array, Smi, uint16_t); | 
| +  SCALED_UNALIGNED_GETTER(ExternalUint16Array, Smi, uint16_t); | 
| } | 
|  | 
|  | 
| DEFINE_NATIVE_ENTRY(ExternalUint16Array_setIndexed, 3) { | 
| -  UNALIGNED_SETTER(ExternalUint16Array, Smi, Value, uint16_t); | 
| +  SCALED_UNALIGNED_SETTER(ExternalUint16Array, Smi, Value, uint16_t); | 
| } | 
|  | 
|  | 
| @@ -725,12 +742,12 @@ | 
| // ExternalUint32Array | 
|  | 
| DEFINE_NATIVE_ENTRY(ExternalUint32Array_getIndexed, 2) { | 
| -  UNALIGNED_GETTER(ExternalUint32Array, Integer, uint32_t); | 
| +  SCALED_UNALIGNED_GETTER(ExternalUint32Array, Integer, uint32_t); | 
| } | 
|  | 
|  | 
| DEFINE_NATIVE_ENTRY(ExternalUint32Array_setIndexed, 3) { | 
| -  UNALIGNED_SETTER(ExternalUint32Array, Integer, AsInt64Value, uint32_t); | 
| +  SCALED_UNALIGNED_SETTER(ExternalUint32Array, Integer, AsInt64Value, uint32_t); | 
| } | 
|  | 
|  | 
|  |