11fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org// Copyright 2013 the V8 project authors. All rights reserved. 21fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org// Redistribution and use in source and binary forms, with or without 31fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org// modification, are permitted provided that the following conditions are 41fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org// met: 51fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org// 61fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org// * Redistributions of source code must retain the above copyright 71fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org// notice, this list of conditions and the following disclaimer. 81fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org// * Redistributions in binary form must reproduce the above 91fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org// copyright notice, this list of conditions and the following 101fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org// disclaimer in the documentation and/or other materials provided 111fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org// with the distribution. 121fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org// * Neither the name of Google Inc. nor the names of its 131fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org// contributors may be used to endorse or promote products derived 141fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org// from this software without specific prior written permission. 151fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org// 161fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 171fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 181fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 191fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 201fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 211fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 221fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 231fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 241fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 251fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 261fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 271fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 281fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org#include <stdlib.h> 291fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 30196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/v8.h" 314b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org#include "test/cctest/cctest.h" 324b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org 33196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/api.h" 343e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org#include "src/heap/heap.h" 35196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/objects.h" 361fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 371fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgusing namespace v8::internal; 381fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 391fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgstatic Isolate* GetIsolateFrom(LocalContext* context) { 401fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org return reinterpret_cast<Isolate*>((*context)->GetIsolate()); 411fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org} 421fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 431fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 441fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgstatic int CountArrayBuffersInWeakList(Heap* heap) { 451fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org int count = 0; 461fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org for (Object* o = heap->array_buffers_list(); 4741728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org !o->IsUndefined(); 481fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org o = JSArrayBuffer::cast(o)->weak_next()) { 491fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org count++; 501fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org } 511fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org return count; 521fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org} 531fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 541fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 551fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgstatic bool HasArrayBufferInWeakList(Heap* heap, JSArrayBuffer* ab) { 561fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org for (Object* o = heap->array_buffers_list(); 5741728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org !o->IsUndefined(); 581fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org o = JSArrayBuffer::cast(o)->weak_next()) { 591fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org if (ab == o) return true; 601fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org } 611fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org return false; 621fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org} 631fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 641fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 651510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgstatic int CountViews(JSArrayBuffer* array_buffer) { 661fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org int count = 0; 671510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org for (Object* o = array_buffer->weak_first_view(); 6841728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org !o->IsUndefined(); 691510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org o = JSArrayBufferView::cast(o)->weak_next()) { 701fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org count++; 711fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org } 721fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 731fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org return count; 741fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org} 751fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 761510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgstatic bool HasViewInWeakList(JSArrayBuffer* array_buffer, 771510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org JSArrayBufferView* ta) { 781510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org for (Object* o = array_buffer->weak_first_view(); 7941728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org !o->IsUndefined(); 801510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org o = JSArrayBufferView::cast(o)->weak_next()) { 811fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org if (ta == o) return true; 821fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org } 831fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org return false; 841fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org} 851fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 861fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 871fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(WeakArrayBuffersFromApi) { 881fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org v8::V8::Initialize(); 891fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org LocalContext context; 901fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org Isolate* isolate = GetIsolateFrom(&context); 911fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 9290dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org int start = CountArrayBuffersInWeakList(isolate->heap()); 931fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org { 941fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org v8::HandleScope s1(context->GetIsolate()); 959f18d9111f676f2899d9aa2444130c985eb75395machenbach@chromium.org v8::Handle<v8::ArrayBuffer> ab1 = 969f18d9111f676f2899d9aa2444130c985eb75395machenbach@chromium.org v8::ArrayBuffer::New(context->GetIsolate(), 256); 971fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org { 981fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org v8::HandleScope s2(context->GetIsolate()); 999f18d9111f676f2899d9aa2444130c985eb75395machenbach@chromium.org v8::Handle<v8::ArrayBuffer> ab2 = 1009f18d9111f676f2899d9aa2444130c985eb75395machenbach@chromium.org v8::ArrayBuffer::New(context->GetIsolate(), 128); 1011fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 1021fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org Handle<JSArrayBuffer> iab1 = v8::Utils::OpenHandle(*ab1); 1031fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org Handle<JSArrayBuffer> iab2 = v8::Utils::OpenHandle(*ab2); 10490dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org CHECK_EQ(2, CountArrayBuffersInWeakList(isolate->heap()) - start); 1051fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org CHECK(HasArrayBufferInWeakList(isolate->heap(), *iab1)); 1061fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org CHECK(HasArrayBufferInWeakList(isolate->heap(), *iab2)); 1071fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org } 1081510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org isolate->heap()->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask); 10990dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org CHECK_EQ(1, CountArrayBuffersInWeakList(isolate->heap()) - start); 1101fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org { 1111fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org HandleScope scope2(isolate); 1121fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org Handle<JSArrayBuffer> iab1 = v8::Utils::OpenHandle(*ab1); 1131fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 1141fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org CHECK(HasArrayBufferInWeakList(isolate->heap(), *iab1)); 1151fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org } 1161fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org } 1171fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 1181510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org isolate->heap()->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask); 11990dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org CHECK_EQ(start, CountArrayBuffersInWeakList(isolate->heap())); 1201fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org} 1211fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 1221fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 1231fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(WeakArrayBuffersFromScript) { 1241fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org v8::V8::Initialize(); 1251fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org LocalContext context; 1261fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org Isolate* isolate = GetIsolateFrom(&context); 12790dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org int start = CountArrayBuffersInWeakList(isolate->heap()); 1281fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 1291fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org for (int i = 1; i <= 3; i++) { 1301fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org // Create 3 array buffers, make i-th of them garbage, 1311fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org // validate correct state of array buffer weak list. 13290dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org CHECK_EQ(start, CountArrayBuffersInWeakList(isolate->heap())); 1331fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org { 1341fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org v8::HandleScope scope(context->GetIsolate()); 1351fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 1361fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org { 1371fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org v8::HandleScope s1(context->GetIsolate()); 1381fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org CompileRun("var ab1 = new ArrayBuffer(256);" 1391fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org "var ab2 = new ArrayBuffer(256);" 1401fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org "var ab3 = new ArrayBuffer(256);"); 141f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org v8::Handle<v8::ArrayBuffer> ab1 = 142f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org v8::Handle<v8::ArrayBuffer>::Cast(CompileRun("ab1")); 143f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org v8::Handle<v8::ArrayBuffer> ab2 = 144f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org v8::Handle<v8::ArrayBuffer>::Cast(CompileRun("ab2")); 145f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org v8::Handle<v8::ArrayBuffer> ab3 = 146f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org v8::Handle<v8::ArrayBuffer>::Cast(CompileRun("ab3")); 1471fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 14890dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org CHECK_EQ(3, CountArrayBuffersInWeakList(isolate->heap()) - start); 1491fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org CHECK(HasArrayBufferInWeakList(isolate->heap(), 1501fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org *v8::Utils::OpenHandle(*ab1))); 1511fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org CHECK(HasArrayBufferInWeakList(isolate->heap(), 1521fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org *v8::Utils::OpenHandle(*ab2))); 1531fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org CHECK(HasArrayBufferInWeakList(isolate->heap(), 1541fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org *v8::Utils::OpenHandle(*ab3))); 1551fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org } 1561fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 1571fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org i::ScopedVector<char> source(1024); 15870ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org i::SNPrintF(source, "ab%d = null;", i); 1591fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org CompileRun(source.start()); 1601510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org isolate->heap()->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask); 1611fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 16290dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org CHECK_EQ(2, CountArrayBuffersInWeakList(isolate->heap()) - start); 1631fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 1641fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org { 1651fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org v8::HandleScope s2(context->GetIsolate()); 1661fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org for (int j = 1; j <= 3; j++) { 1671fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org if (j == i) continue; 16870ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org i::SNPrintF(source, "ab%d", j); 169f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org v8::Handle<v8::ArrayBuffer> ab = 170f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org v8::Handle<v8::ArrayBuffer>::Cast(CompileRun(source.start())); 1711fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org CHECK(HasArrayBufferInWeakList(isolate->heap(), 1721fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org *v8::Utils::OpenHandle(*ab))); 1731fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org } 1741fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org } 1751fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 1761fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org CompileRun("ab1 = null; ab2 = null; ab3 = null;"); 1771fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org } 1781fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 1791510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org isolate->heap()->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask); 18090dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org CHECK_EQ(start, CountArrayBuffersInWeakList(isolate->heap())); 1811fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org } 1821fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org} 1831fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 1841510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgtemplate <typename View> 1851510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvoid TestViewFromApi() { 1861fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org v8::V8::Initialize(); 1871fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org LocalContext context; 1881fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org Isolate* isolate = GetIsolateFrom(&context); 1891fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 1901fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org v8::HandleScope s1(context->GetIsolate()); 1919f18d9111f676f2899d9aa2444130c985eb75395machenbach@chromium.org v8::Handle<v8::ArrayBuffer> ab = 1929f18d9111f676f2899d9aa2444130c985eb75395machenbach@chromium.org v8::ArrayBuffer::New(context->GetIsolate(), 2048); 1931fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org Handle<JSArrayBuffer> iab = v8::Utils::OpenHandle(*ab); 1941fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org { 1951fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org v8::HandleScope s2(context->GetIsolate()); 1961510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org v8::Handle<View> ta1 = View::New(ab, 0, 256); 1971fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org { 1981fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org v8::HandleScope s3(context->GetIsolate()); 1991510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org v8::Handle<View> ta2 = View::New(ab, 0, 128); 2001fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 2011510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org Handle<JSArrayBufferView> ita1 = v8::Utils::OpenHandle(*ta1); 2021510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org Handle<JSArrayBufferView> ita2 = v8::Utils::OpenHandle(*ta2); 2031510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org CHECK_EQ(2, CountViews(*iab)); 2041510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org CHECK(HasViewInWeakList(*iab, *ita1)); 2051510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org CHECK(HasViewInWeakList(*iab, *ita2)); 2061fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org } 2071510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org isolate->heap()->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask); 2081510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org CHECK_EQ(1, CountViews(*iab)); 2091510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org Handle<JSArrayBufferView> ita1 = v8::Utils::OpenHandle(*ta1); 2101510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org CHECK(HasViewInWeakList(*iab, *ita1)); 2111fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org } 2121510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org isolate->heap()->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask); 2131fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 2141510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org CHECK_EQ(0, CountViews(*iab)); 2151fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org} 2161fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 2171fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 2181fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Uint8ArrayFromApi) { 2191510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org TestViewFromApi<v8::Uint8Array>(); 2201fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org} 2211fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 2221fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 2231fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Int8ArrayFromApi) { 2241510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org TestViewFromApi<v8::Int8Array>(); 2251fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org} 2261fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 2271fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 2281fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Uint16ArrayFromApi) { 2291510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org TestViewFromApi<v8::Uint16Array>(); 2301fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org} 2311fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 2321fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 2331fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Int16ArrayFromApi) { 2341510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org TestViewFromApi<v8::Int16Array>(); 2351fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org} 2361fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 2371fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 2381fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Uint32ArrayFromApi) { 2391510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org TestViewFromApi<v8::Uint32Array>(); 2401fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org} 2411fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 2421fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 2431fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Int32ArrayFromApi) { 2441510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org TestViewFromApi<v8::Int32Array>(); 2451fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org} 2461fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 2471fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 2481fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Float32ArrayFromApi) { 2491510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org TestViewFromApi<v8::Float32Array>(); 2501fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org} 2511fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 2521fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 2531fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Float64ArrayFromApi) { 2541510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org TestViewFromApi<v8::Float64Array>(); 2551fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org} 2561fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 2571fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 2581fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Uint8ClampedArrayFromApi) { 2591510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org TestViewFromApi<v8::Uint8ClampedArray>(); 2601510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org} 2611510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 2621510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 2631510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgTEST(DataViewFromApi) { 2641510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org TestViewFromApi<v8::DataView>(); 2651fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org} 2661fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 2671fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgtemplate <typename TypedArray> 2681fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgstatic void TestTypedArrayFromScript(const char* constructor) { 2691fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org v8::V8::Initialize(); 2701fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org LocalContext context; 2711fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org Isolate* isolate = GetIsolateFrom(&context); 2721fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org v8::HandleScope scope(context->GetIsolate()); 27390dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org int start = CountArrayBuffersInWeakList(isolate->heap()); 2741fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org CompileRun("var ab = new ArrayBuffer(2048);"); 2751fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org for (int i = 1; i <= 3; i++) { 2761fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org // Create 3 typed arrays, make i-th of them garbage, 2771fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org // validate correct state of typed array weak list. 2781fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org v8::HandleScope s0(context->GetIsolate()); 2791fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org i::ScopedVector<char> source(2048); 2801fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 28190dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org CHECK_EQ(1, CountArrayBuffersInWeakList(isolate->heap()) - start); 2821fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 2831fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org { 2841fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org v8::HandleScope s1(context->GetIsolate()); 28570ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org i::SNPrintF(source, 28670ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org "var ta1 = new %s(ab);" 28770ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org "var ta2 = new %s(ab);" 28870ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org "var ta3 = new %s(ab)", 28970ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org constructor, constructor, constructor); 2901fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 2911fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org CompileRun(source.start()); 292f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org v8::Handle<v8::ArrayBuffer> ab = 293f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org v8::Handle<v8::ArrayBuffer>::Cast(CompileRun("ab")); 294f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org v8::Handle<TypedArray> ta1 = 295f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org v8::Handle<TypedArray>::Cast(CompileRun("ta1")); 296f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org v8::Handle<TypedArray> ta2 = 297f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org v8::Handle<TypedArray>::Cast(CompileRun("ta2")); 298f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org v8::Handle<TypedArray> ta3 = 299f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org v8::Handle<TypedArray>::Cast(CompileRun("ta3")); 30090dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org CHECK_EQ(1, CountArrayBuffersInWeakList(isolate->heap()) - start); 3011fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org Handle<JSArrayBuffer> iab = v8::Utils::OpenHandle(*ab); 3021510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org CHECK_EQ(3, CountViews(*iab)); 3031510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org CHECK(HasViewInWeakList(*iab, *v8::Utils::OpenHandle(*ta1))); 3041510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org CHECK(HasViewInWeakList(*iab, *v8::Utils::OpenHandle(*ta2))); 3051510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org CHECK(HasViewInWeakList(*iab, *v8::Utils::OpenHandle(*ta3))); 3061fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org } 3071fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 30870ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org i::SNPrintF(source, "ta%d = null;", i); 3091fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org CompileRun(source.start()); 3101510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org isolate->heap()->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask); 3111fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 31290dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org CHECK_EQ(1, CountArrayBuffersInWeakList(isolate->heap()) - start); 3131fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 3141fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org { 3151fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org v8::HandleScope s2(context->GetIsolate()); 316f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org v8::Handle<v8::ArrayBuffer> ab = 317f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org v8::Handle<v8::ArrayBuffer>::Cast(CompileRun("ab")); 3181fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org Handle<JSArrayBuffer> iab = v8::Utils::OpenHandle(*ab); 3191510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org CHECK_EQ(2, CountViews(*iab)); 3201fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org for (int j = 1; j <= 3; j++) { 3211fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org if (j == i) continue; 32270ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org i::SNPrintF(source, "ta%d", j); 323f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org v8::Handle<TypedArray> ta = 324f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org v8::Handle<TypedArray>::Cast(CompileRun(source.start())); 3251510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org CHECK(HasViewInWeakList(*iab, *v8::Utils::OpenHandle(*ta))); 3261fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org } 3271fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org } 3281fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 3291fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org CompileRun("ta1 = null; ta2 = null; ta3 = null;"); 3301510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org isolate->heap()->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask); 3311fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 33290dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org CHECK_EQ(1, CountArrayBuffersInWeakList(isolate->heap()) - start); 3331fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 3341fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org { 3351fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org v8::HandleScope s3(context->GetIsolate()); 336f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org v8::Handle<v8::ArrayBuffer> ab = 337f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org v8::Handle<v8::ArrayBuffer>::Cast(CompileRun("ab")); 3381fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org Handle<JSArrayBuffer> iab = v8::Utils::OpenHandle(*ab); 3391510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org CHECK_EQ(0, CountViews(*iab)); 3401fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org } 3411fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org } 3421fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org} 3431fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 3441fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 3451fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Uint8ArrayFromScript) { 3461fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org TestTypedArrayFromScript<v8::Uint8Array>("Uint8Array"); 3471fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org} 3481fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 3491fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 3501fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Int8ArrayFromScript) { 3511fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org TestTypedArrayFromScript<v8::Int8Array>("Int8Array"); 3521fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org} 3531fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 3541fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 3551fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Uint16ArrayFromScript) { 3561fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org TestTypedArrayFromScript<v8::Uint16Array>("Uint16Array"); 3571fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org} 3581fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 3591fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 3601fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Int16ArrayFromScript) { 3611fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org TestTypedArrayFromScript<v8::Int16Array>("Int16Array"); 3621fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org} 3631fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 3641fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 3651fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Uint32ArrayFromScript) { 3661fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org TestTypedArrayFromScript<v8::Uint32Array>("Uint32Array"); 3671fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org} 3681fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 3691fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 3701fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Int32ArrayFromScript) { 3711fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org TestTypedArrayFromScript<v8::Int32Array>("Int32Array"); 3721fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org} 3731fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 3741fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 3751fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Float32ArrayFromScript) { 3761fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org TestTypedArrayFromScript<v8::Float32Array>("Float32Array"); 3771fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org} 3781fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 3791fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 3801fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Float64ArrayFromScript) { 3811fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org TestTypedArrayFromScript<v8::Float64Array>("Float64Array"); 3821fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org} 3831fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 3841fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 3851fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Uint8ClampedArrayFromScript) { 3861fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org TestTypedArrayFromScript<v8::Uint8ClampedArray>("Uint8ClampedArray"); 3871fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org} 3881fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 3891510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 3901510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgTEST(DataViewFromScript) { 3911510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org TestTypedArrayFromScript<v8::DataView>("DataView"); 3921510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org} 393