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
301fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org#include "v8.h"
311fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org#include "api.h"
321fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org#include "heap.h"
331fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org#include "objects.h"
341fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
351fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org#include "cctest.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
921fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  CHECK_EQ(0, CountArrayBuffersInWeakList(isolate->heap()));
931fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  {
941fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    v8::HandleScope s1(context->GetIsolate());
951fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    v8::Handle<v8::ArrayBuffer> ab1 = v8::ArrayBuffer::New(256);
961fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    {
971fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      v8::HandleScope s2(context->GetIsolate());
981fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      v8::Handle<v8::ArrayBuffer> ab2 = v8::ArrayBuffer::New(128);
991fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
1001fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      Handle<JSArrayBuffer> iab1 = v8::Utils::OpenHandle(*ab1);
1011fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      Handle<JSArrayBuffer> iab2 = v8::Utils::OpenHandle(*ab2);
1021fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      CHECK_EQ(2, CountArrayBuffersInWeakList(isolate->heap()));
1031fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      CHECK(HasArrayBufferInWeakList(isolate->heap(), *iab1));
1041fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      CHECK(HasArrayBufferInWeakList(isolate->heap(), *iab2));
1051fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    }
1061510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    isolate->heap()->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask);
1071fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    CHECK_EQ(1, CountArrayBuffersInWeakList(isolate->heap()));
1081fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    {
1091fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      HandleScope scope2(isolate);
1101fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      Handle<JSArrayBuffer> iab1 = v8::Utils::OpenHandle(*ab1);
1111fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
1121fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      CHECK(HasArrayBufferInWeakList(isolate->heap(), *iab1));
1131fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    }
1141fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  }
1151fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
1161510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  isolate->heap()->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask);
1171fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  CHECK_EQ(0, CountArrayBuffersInWeakList(isolate->heap()));
1181fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org}
1191fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
1201fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
1211fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(WeakArrayBuffersFromScript) {
1221fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  v8::V8::Initialize();
1231fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  LocalContext context;
1241fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  Isolate* isolate = GetIsolateFrom(&context);
1251fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
1261fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  for (int i = 1; i <= 3; i++) {
1271fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    // Create 3 array buffers, make i-th of them garbage,
1281fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    // validate correct state of array buffer weak list.
1291fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    CHECK_EQ(0, CountArrayBuffersInWeakList(isolate->heap()));
1301fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    {
1311fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      v8::HandleScope scope(context->GetIsolate());
1321fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
1331fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      {
1341fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org        v8::HandleScope s1(context->GetIsolate());
1351fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org        CompileRun("var ab1 = new ArrayBuffer(256);"
1361fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org                   "var ab2 = new ArrayBuffer(256);"
1371fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org                   "var ab3 = new ArrayBuffer(256);");
138f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org        v8::Handle<v8::ArrayBuffer> ab1 =
139f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org            v8::Handle<v8::ArrayBuffer>::Cast(CompileRun("ab1"));
140f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org        v8::Handle<v8::ArrayBuffer> ab2 =
141f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org            v8::Handle<v8::ArrayBuffer>::Cast(CompileRun("ab2"));
142f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org        v8::Handle<v8::ArrayBuffer> ab3 =
143f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org            v8::Handle<v8::ArrayBuffer>::Cast(CompileRun("ab3"));
1441fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
1451fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org        CHECK_EQ(3, CountArrayBuffersInWeakList(isolate->heap()));
1461fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org        CHECK(HasArrayBufferInWeakList(isolate->heap(),
1471fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org              *v8::Utils::OpenHandle(*ab1)));
1481fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org        CHECK(HasArrayBufferInWeakList(isolate->heap(),
1491fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org              *v8::Utils::OpenHandle(*ab2)));
1501fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org        CHECK(HasArrayBufferInWeakList(isolate->heap(),
1511fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org              *v8::Utils::OpenHandle(*ab3)));
1521fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      }
1531fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
1541fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      i::ScopedVector<char> source(1024);
1551fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      i::OS::SNPrintF(source, "ab%d = null;", i);
1561fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      CompileRun(source.start());
1571510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org      isolate->heap()->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask);
1581fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
1591fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      CHECK_EQ(2, CountArrayBuffersInWeakList(isolate->heap()));
1601fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
1611fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      {
1621fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org        v8::HandleScope s2(context->GetIsolate());
1631fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org        for (int j = 1; j <= 3; j++) {
1641fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org          if (j == i) continue;
1651fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org          i::OS::SNPrintF(source, "ab%d", j);
166f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org          v8::Handle<v8::ArrayBuffer> ab =
167f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org              v8::Handle<v8::ArrayBuffer>::Cast(CompileRun(source.start()));
1681fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org          CHECK(HasArrayBufferInWeakList(isolate->heap(),
1691fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org                *v8::Utils::OpenHandle(*ab)));
1701fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org          }
1711fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      }
1721fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
1731fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      CompileRun("ab1 = null; ab2 = null; ab3 = null;");
1741fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    }
1751fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
1761510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    isolate->heap()->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask);
1771fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    CHECK_EQ(0, CountArrayBuffersInWeakList(isolate->heap()));
1781fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  }
1791fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org}
1801fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
1811510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgtemplate <typename View>
1821510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvoid TestViewFromApi() {
1831fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  v8::V8::Initialize();
1841fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  LocalContext context;
1851fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  Isolate* isolate = GetIsolateFrom(&context);
1861fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
1871fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  v8::HandleScope s1(context->GetIsolate());
1881fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  v8::Handle<v8::ArrayBuffer> ab = v8::ArrayBuffer::New(2048);
1891fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  Handle<JSArrayBuffer> iab = v8::Utils::OpenHandle(*ab);
1901fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  {
1911fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    v8::HandleScope s2(context->GetIsolate());
1921510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    v8::Handle<View> ta1 = View::New(ab, 0, 256);
1931fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    {
1941fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      v8::HandleScope s3(context->GetIsolate());
1951510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org      v8::Handle<View> ta2 = View::New(ab, 0, 128);
1961fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
1971510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org      Handle<JSArrayBufferView> ita1 = v8::Utils::OpenHandle(*ta1);
1981510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org      Handle<JSArrayBufferView> ita2 = v8::Utils::OpenHandle(*ta2);
1991510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org      CHECK_EQ(2, CountViews(*iab));
2001510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org      CHECK(HasViewInWeakList(*iab, *ita1));
2011510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org      CHECK(HasViewInWeakList(*iab, *ita2));
2021fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    }
2031510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    isolate->heap()->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask);
2041510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    CHECK_EQ(1, CountViews(*iab));
2051510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    Handle<JSArrayBufferView> ita1 = v8::Utils::OpenHandle(*ta1);
2061510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    CHECK(HasViewInWeakList(*iab, *ita1));
2071fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  }
2081510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  isolate->heap()->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask);
2091fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
2101510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  CHECK_EQ(0, CountViews(*iab));
2111fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org}
2121fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
2131fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
2141fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Uint8ArrayFromApi) {
2151510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  TestViewFromApi<v8::Uint8Array>();
2161fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org}
2171fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
2181fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
2191fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Int8ArrayFromApi) {
2201510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  TestViewFromApi<v8::Int8Array>();
2211fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org}
2221fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
2231fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
2241fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Uint16ArrayFromApi) {
2251510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  TestViewFromApi<v8::Uint16Array>();
2261fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org}
2271fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
2281fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
2291fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Int16ArrayFromApi) {
2301510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  TestViewFromApi<v8::Int16Array>();
2311fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org}
2321fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
2331fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
2341fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Uint32ArrayFromApi) {
2351510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  TestViewFromApi<v8::Uint32Array>();
2361fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org}
2371fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
2381fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
2391fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Int32ArrayFromApi) {
2401510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  TestViewFromApi<v8::Int32Array>();
2411fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org}
2421fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
2431fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
2441fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Float32ArrayFromApi) {
2451510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  TestViewFromApi<v8::Float32Array>();
2461fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org}
2471fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
2481fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
2491fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Float64ArrayFromApi) {
2501510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  TestViewFromApi<v8::Float64Array>();
2511fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org}
2521fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
2531fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
2541fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Uint8ClampedArrayFromApi) {
2551510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  TestViewFromApi<v8::Uint8ClampedArray>();
2561510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org}
2571510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
2581510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
2591510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgTEST(DataViewFromApi) {
2601510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  TestViewFromApi<v8::DataView>();
2611fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org}
2621fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
2631fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgtemplate <typename TypedArray>
2641fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgstatic void TestTypedArrayFromScript(const char* constructor) {
2651fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  v8::V8::Initialize();
2661fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  LocalContext context;
2671fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  Isolate* isolate = GetIsolateFrom(&context);
2681fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  v8::HandleScope scope(context->GetIsolate());
2691fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  CompileRun("var ab = new ArrayBuffer(2048);");
2701fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  for (int i = 1; i <= 3; i++) {
2711fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    // Create 3 typed arrays, make i-th of them garbage,
2721fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    // validate correct state of typed array weak list.
2731fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    v8::HandleScope s0(context->GetIsolate());
2741fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    i::ScopedVector<char> source(2048);
2751fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
2761fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    CHECK_EQ(1, CountArrayBuffersInWeakList(isolate->heap()));
2771fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
2781fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    {
2791fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      v8::HandleScope s1(context->GetIsolate());
2801fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      i::OS::SNPrintF(source,
2811fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org                  "var ta1 = new %s(ab);"
2821fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org                  "var ta2 = new %s(ab);"
2831fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org                  "var ta3 = new %s(ab)",
2841fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org                  constructor, constructor, constructor);
2851fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
2861fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      CompileRun(source.start());
287f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org      v8::Handle<v8::ArrayBuffer> ab =
288f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org          v8::Handle<v8::ArrayBuffer>::Cast(CompileRun("ab"));
289f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org      v8::Handle<TypedArray> ta1 =
290f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org          v8::Handle<TypedArray>::Cast(CompileRun("ta1"));
291f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org      v8::Handle<TypedArray> ta2 =
292f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org          v8::Handle<TypedArray>::Cast(CompileRun("ta2"));
293f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org      v8::Handle<TypedArray> ta3 =
294f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org          v8::Handle<TypedArray>::Cast(CompileRun("ta3"));
2951fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      CHECK_EQ(1, CountArrayBuffersInWeakList(isolate->heap()));
2961fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      Handle<JSArrayBuffer> iab = v8::Utils::OpenHandle(*ab);
2971510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org      CHECK_EQ(3, CountViews(*iab));
2981510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org      CHECK(HasViewInWeakList(*iab, *v8::Utils::OpenHandle(*ta1)));
2991510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org      CHECK(HasViewInWeakList(*iab, *v8::Utils::OpenHandle(*ta2)));
3001510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org      CHECK(HasViewInWeakList(*iab, *v8::Utils::OpenHandle(*ta3)));
3011fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    }
3021fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
3031fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    i::OS::SNPrintF(source, "ta%d = null;", i);
3041fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    CompileRun(source.start());
3051510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    isolate->heap()->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask);
3061fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
3071fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    CHECK_EQ(1, CountArrayBuffersInWeakList(isolate->heap()));
3081fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
3091fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    {
3101fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      v8::HandleScope s2(context->GetIsolate());
311f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org      v8::Handle<v8::ArrayBuffer> ab =
312f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org          v8::Handle<v8::ArrayBuffer>::Cast(CompileRun("ab"));
3131fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      Handle<JSArrayBuffer> iab = v8::Utils::OpenHandle(*ab);
3141510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org      CHECK_EQ(2, CountViews(*iab));
3151fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      for (int j = 1; j <= 3; j++) {
3161fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org        if (j == i) continue;
3171fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org        i::OS::SNPrintF(source, "ta%d", j);
318f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org        v8::Handle<TypedArray> ta =
319f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org            v8::Handle<TypedArray>::Cast(CompileRun(source.start()));
3201510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        CHECK(HasViewInWeakList(*iab, *v8::Utils::OpenHandle(*ta)));
3211fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      }
3221fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    }
3231fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
3241fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    CompileRun("ta1 = null; ta2 = null; ta3 = null;");
3251510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    isolate->heap()->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask);
3261fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
3271fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    CHECK_EQ(1, CountArrayBuffersInWeakList(isolate->heap()));
3281fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
3291fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    {
3301fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      v8::HandleScope s3(context->GetIsolate());
331f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org      v8::Handle<v8::ArrayBuffer> ab =
332f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org          v8::Handle<v8::ArrayBuffer>::Cast(CompileRun("ab"));
3331fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      Handle<JSArrayBuffer> iab = v8::Utils::OpenHandle(*ab);
3341510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org      CHECK_EQ(0, CountViews(*iab));
3351fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    }
3361fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  }
3371fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org}
3381fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
3391fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
3401fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Uint8ArrayFromScript) {
3411fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  TestTypedArrayFromScript<v8::Uint8Array>("Uint8Array");
3421fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org}
3431fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
3441fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
3451fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Int8ArrayFromScript) {
3461fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  TestTypedArrayFromScript<v8::Int8Array>("Int8Array");
3471fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org}
3481fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
3491fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
3501fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Uint16ArrayFromScript) {
3511fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  TestTypedArrayFromScript<v8::Uint16Array>("Uint16Array");
3521fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org}
3531fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
3541fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
3551fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Int16ArrayFromScript) {
3561fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  TestTypedArrayFromScript<v8::Int16Array>("Int16Array");
3571fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org}
3581fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
3591fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
3601fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Uint32ArrayFromScript) {
3611fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  TestTypedArrayFromScript<v8::Uint32Array>("Uint32Array");
3621fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org}
3631fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
3641fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
3651fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Int32ArrayFromScript) {
3661fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  TestTypedArrayFromScript<v8::Int32Array>("Int32Array");
3671fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org}
3681fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
3691fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
3701fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Float32ArrayFromScript) {
3711fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  TestTypedArrayFromScript<v8::Float32Array>("Float32Array");
3721fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org}
3731fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
3741fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
3751fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Float64ArrayFromScript) {
3761fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  TestTypedArrayFromScript<v8::Float64Array>("Float64Array");
3771fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org}
3781fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
3791fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
3801fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Uint8ClampedArrayFromScript) {
3811fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  TestTypedArrayFromScript<v8::Uint8ClampedArray>("Uint8ClampedArray");
3821fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org}
3831fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
3841510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
3851510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgTEST(DataViewFromScript) {
3861510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  TestTypedArrayFromScript<v8::DataView>("DataView");
3871510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org}
388