Index: test/cctest/test-api.cc |
diff --git a/test/cctest/test-api.cc b/test/cctest/test-api.cc |
index c8f67de0abfc857747de6893320715eab7601cd1..746244d6d8e14fbeec80c42da5587594d81920d3 100644 |
--- a/test/cctest/test-api.cc |
+++ b/test/cctest/test-api.cc |
@@ -2502,10 +2502,16 @@ THREADED_TEST(ArrayBuffer) { |
v8::HandleScope handle_scope(isolate); |
Local<v8::ArrayBuffer> ab = v8::ArrayBuffer::New(1024); |
+ CHECK_EQ(1024, ab->ByteLength()); |
+ CHECK(!ab->IsExternal()); |
HEAP->CollectAllGarbage(i::Heap::kNoGCFlags); |
- CHECK_EQ(1024, static_cast<int>(ab->ByteLength())); |
- uint8_t* data = static_cast<uint8_t*>(ab->Data()); |
+ v8::ArrayBufferContents ab_contents; |
+ ab->Externalize(&ab_contents); |
+ CHECK(ab->IsExternal()); |
+ |
+ CHECK_EQ(1024, static_cast<int>(ab_contents.ByteLength())); |
+ uint8_t* data = static_cast<uint8_t*>(ab_contents.Data()); |
ASSERT(data != NULL); |
env->Global()->Set(v8_str("ab"), ab); |
@@ -2530,7 +2536,13 @@ THREADED_TEST(ArrayBuffer) { |
"u8_a[1] = 0xFF; u8_a.buffer"); |
Local<v8::ArrayBuffer> ab1 = v8::ArrayBuffer::Cast(*result); |
CHECK_EQ(2, static_cast<int>(ab1->ByteLength())); |
- uint8_t* ab1_data = static_cast<uint8_t*>(ab1->Data()); |
+ CHECK(!ab1->IsExternal()); |
+ v8::ArrayBufferContents ab1_contents; |
+ ab1->Externalize(&ab1_contents); |
+ CHECK(ab1->IsExternal()); |
+ |
+ CHECK_EQ(2, static_cast<int>(ab1_contents.ByteLength())); |
+ uint8_t* ab1_data = static_cast<uint8_t*>(ab1_contents.Data()); |
CHECK_EQ(0xAA, ab1_data[0]); |
CHECK_EQ(0xFF, ab1_data[1]); |
ab1_data[0] = 0xCC; |
@@ -2542,8 +2554,13 @@ THREADED_TEST(ArrayBuffer) { |
memset(my_data, 0, 100); |
Local<v8::ArrayBuffer> ab3 = v8::ArrayBuffer::New(my_data, 100); |
CHECK_EQ(100, static_cast<int>(ab3->ByteLength())); |
- CHECK_EQ(my_data, ab3->Data()); |
+ CHECK(ab3->IsExternal()); |
+ |
env->Global()->Set(v8_str("ab3"), ab3); |
+ |
+ result = CompileRun("ab3.byteLength"); |
+ CHECK_EQ(100, result->Int32Value()); |
+ |
result = CompileRun("var u8_b = new Uint8Array(ab3);" |
"u8_b[0] = 0xBB;" |
"u8_b[1] = 0xCC;" |
@@ -2560,9 +2577,6 @@ THREADED_TEST(ArrayBuffer) { |
} |
- |
- |
- |
THREADED_TEST(HiddenProperties) { |
LocalContext env; |
v8::HandleScope scope(env->GetIsolate()); |
@@ -15460,27 +15474,31 @@ void TypedArrayTestHelper(v8::ExternalArrayType array_type, |
i::FLAG_harmony_array_buffer = true; |
i::FLAG_harmony_typed_arrays = true; |
- LocalContext env; |
- v8::Isolate* isolate = env->GetIsolate(); |
- v8::HandleScope handle_scope(isolate); |
+ ElementType* backing_store = new ElementType[kElementCount+2]; |
Sven Panne
2013/05/23 07:57:01
Using 'ScopedVector<ElementType> backing_store(kEl
Dmitry Lomov (no reviews)
2013/05/23 08:42:15
Done.
|
+ { |
+ LocalContext env; |
+ v8::Isolate* isolate = env->GetIsolate(); |
+ v8::HandleScope handle_scope(isolate); |
- Local<v8::ArrayBuffer> ab = |
- v8::ArrayBuffer::New((kElementCount+2)*sizeof(ElementType)); |
- Local<TypedArray> ta = |
- TypedArray::New(ab, 2*sizeof(ElementType), kElementCount); |
- CHECK_EQ(kElementCount, static_cast<int>(ta->Length())); |
- CHECK_EQ(2*sizeof(ElementType), static_cast<int>(ta->ByteOffset())); |
- CHECK_EQ(kElementCount*sizeof(ElementType), |
- static_cast<int>(ta->ByteLength())); |
- CHECK_EQ(ab, ta->Buffer()); |
- |
- ElementType* data = static_cast<ElementType*>(ab->Data()) + 2; |
- for (int i = 0; i < kElementCount; i++) { |
- data[i] = static_cast<ElementType>(i); |
- } |
+ Local<v8::ArrayBuffer> ab = v8::ArrayBuffer::New( |
+ backing_store, (kElementCount+2)*sizeof(ElementType)); |
+ Local<TypedArray> ta = |
+ TypedArray::New(ab, 2*sizeof(ElementType), kElementCount); |
+ CHECK_EQ(kElementCount, static_cast<int>(ta->Length())); |
+ CHECK_EQ(2*sizeof(ElementType), static_cast<int>(ta->ByteOffset())); |
+ CHECK_EQ(kElementCount*sizeof(ElementType), |
+ static_cast<int>(ta->ByteLength())); |
+ CHECK_EQ(ab, ta->Buffer()); |
+ |
+ ElementType* data = backing_store + 2; |
+ for (int i = 0; i < kElementCount; i++) { |
+ data[i] = static_cast<ElementType>(i); |
+ } |
- ObjectWithExternalArrayTestHelper<ExternalArrayClass, ElementType>( |
- env.local(), ta, kElementCount, array_type, low, high); |
+ ObjectWithExternalArrayTestHelper<ExternalArrayClass, ElementType>( |
+ env.local(), ta, kElementCount, array_type, low, high); |
+ } |
+ delete[] backing_store; |
} |