| Index: src/d8.cc
|
| diff --git a/src/d8.cc b/src/d8.cc
|
| index 26d0bc10e101ad99984c77c9a79ab2f829acc75b..edd201bbdf1f2d40474a999160c4f5d568443ff2 100644
|
| --- a/src/d8.cc
|
| +++ b/src/d8.cc
|
| @@ -315,8 +315,8 @@ static size_t convertToUint(Local<Value> value_in, TryCatch* try_catch) {
|
| }
|
|
|
|
|
| -const char kArrayBufferReferencePropName[] = "_is_array_buffer_";
|
| -const char kArrayBufferMarkerPropName[] = "_array_buffer_ref_";
|
| +const char kArrayBufferMarkerPropName[] = "_is_array_buffer_";
|
| +const char kArrayBufferReferencePropName[] = "_array_buffer_ref_";
|
|
|
| static const int kExternalArrayAllocationHeaderSize = 2;
|
|
|
| @@ -353,10 +353,11 @@ Handle<Value> Shell::CreateExternalArray(const Arguments& args,
|
|
|
| Local<Value> length_value = (args.Length() < 3)
|
| ? (first_arg_is_array_buffer
|
| - ? args[0]->ToObject()->Get(String::New("length"))
|
| + ? args[0]->ToObject()->Get(String::New("byteLength"))
|
| : args[0])
|
| : args[2];
|
| - size_t length = convertToUint(length_value, &try_catch);
|
| + size_t byteLength = convertToUint(length_value, &try_catch);
|
| + size_t length = byteLength;
|
| if (try_catch.HasCaught()) return try_catch.Exception();
|
|
|
| void* data = NULL;
|
| @@ -368,7 +369,7 @@ Handle<Value> Shell::CreateExternalArray(const Arguments& args,
|
| data = derived_from->GetIndexedPropertiesExternalArrayData();
|
|
|
| size_t array_buffer_length = convertToUint(
|
| - derived_from->Get(String::New("length")),
|
| + derived_from->Get(String::New("byteLength")),
|
| &try_catch);
|
| if (try_catch.HasCaught()) return try_catch.Exception();
|
|
|
| @@ -451,10 +452,20 @@ Handle<Value> Shell::CreateExternalArray(const Arguments& args,
|
| array->SetIndexedPropertiesToExternalArrayData(
|
| reinterpret_cast<uint8_t*>(data) + offset, type,
|
| static_cast<int>(length));
|
| - array->Set(String::New("length"),
|
| - Int32::New(static_cast<int32_t>(length)), ReadOnly);
|
| - array->Set(String::New("BYTES_PER_ELEMENT"),
|
| - Int32::New(static_cast<int32_t>(element_size)));
|
| + array->Set(String::New("byteLength"),
|
| + Int32::New(static_cast<int32_t>(byteLength)), ReadOnly);
|
| + if (!is_array_buffer_construct) {
|
| + array->Set(String::New("length"),
|
| + Int32::New(static_cast<int32_t>(length)), ReadOnly);
|
| + array->Set(String::New("byteOffset"),
|
| + Int32::New(static_cast<int32_t>(offset)), ReadOnly);
|
| + array->Set(String::New("BYTES_PER_ELEMENT"),
|
| + Int32::New(static_cast<int32_t>(element_size)));
|
| + // We currently support 'buffer' property only if constructed from a buffer.
|
| + if (first_arg_is_array_buffer) {
|
| + array->Set(String::New("buffer"), args[0], ReadOnly);
|
| + }
|
| + }
|
| return array;
|
| }
|
|
|
|
|