1b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Copyright 2014 the V8 project authors. All rights reserved.
2b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// found in the LICENSE file.
4b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch
5b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Flags: --allow-natives-syntax
6b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch
7b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvar buffer1 = new ArrayBuffer(100 * 1024);
8b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch
9b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvar array1 = new Uint8Array(buffer1, {valueOf : function() {
10b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch  %ArrayBufferNeuter(buffer1);
11b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch  return 0;
12b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}});
13b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch
14b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochassertEquals(0, array1.length);
15b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch
16b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvar buffer2 = new ArrayBuffer(100 * 1024);
17b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch
18b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochassertThrows(function() {
19b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch  var array2 = new Uint8Array(buffer2, 0, {valueOf : function() {
20b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch      %ArrayBufferNeuter(buffer2);
21b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch      return 100 * 1024;
22b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch  }});
23b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}, RangeError);
24b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch
25b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch
26b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvar buffer3 = new ArrayBuffer(100 * 1024 * 1024);
27b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvar dataView1 = new DataView(buffer3, {valueOf : function() {
28b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch  %ArrayBufferNeuter(buffer3);
29b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch  return 0;
30b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}});
31b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch
32b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochassertEquals(0, dataView1.byteLength);
33b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch
34b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvar buffer4 = new ArrayBuffer(100 * 1024);
35b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochassertThrows(function() {
36b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch  var dataView2 = new DataView(buffer4, 0, {valueOf : function() {
37b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch    %ArrayBufferNeuter(buffer4);
38b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch    return 100 * 1024 * 1024;
39b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch  }});
40b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}, RangeError);
41b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch
42b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch
43b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvar buffer5 = new ArrayBuffer(100 * 1024);
44537ba893e2530051ec7f296e769fdd37bb4ae4a0Ben MurdochassertThrows(function() {
45537ba893e2530051ec7f296e769fdd37bb4ae4a0Ben Murdoch  buffer5.slice({valueOf : function() {
46537ba893e2530051ec7f296e769fdd37bb4ae4a0Ben Murdoch    %ArrayBufferNeuter(buffer5);
47537ba893e2530051ec7f296e769fdd37bb4ae4a0Ben Murdoch    return 0;
48537ba893e2530051ec7f296e769fdd37bb4ae4a0Ben Murdoch  }}, 100 * 1024 * 1024);
49537ba893e2530051ec7f296e769fdd37bb4ae4a0Ben Murdoch}, TypeError);
50b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch
51b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch
52b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvar buffer7 = new ArrayBuffer(100 * 1024 * 1024);
53537ba893e2530051ec7f296e769fdd37bb4ae4a0Ben MurdochassertThrows(function() {
54537ba893e2530051ec7f296e769fdd37bb4ae4a0Ben Murdoch  buffer7.slice(0, {valueOf : function() {
55537ba893e2530051ec7f296e769fdd37bb4ae4a0Ben Murdoch    %ArrayBufferNeuter(buffer7);
56537ba893e2530051ec7f296e769fdd37bb4ae4a0Ben Murdoch    return 100 * 1024 * 1024;
57537ba893e2530051ec7f296e769fdd37bb4ae4a0Ben Murdoch  }});
58537ba893e2530051ec7f296e769fdd37bb4ae4a0Ben Murdoch}, TypeError);
59b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch
60b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvar buffer9 = new ArrayBuffer(1024);
61b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvar array9 = new Uint8Array(buffer9);
62b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvar array10 = array9.subarray({valueOf : function() {
63b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch    %ArrayBufferNeuter(buffer9);
64b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch    return 0;
65b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch  }}, 1024);
66b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochassertEquals(0, array9.length);
67b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochassertEquals(0, array10.length);
68b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch
69b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvar buffer11 = new ArrayBuffer(1024);
70b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvar array11 = new Uint8Array(buffer11);
71b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvar array12 = array11.subarray(0, {valueOf : function() {
72b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch      %ArrayBufferNeuter(buffer11);
73b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch      return 1024;
74b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch    }});
75b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochassertEquals(0, array11.length);
76b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochassertEquals(0, array12.length);
77