blob: 0dde61fc277cb2b1a015855824a936dbfd11193d [file] [log] [blame]
Ben Murdoch4a90d5f2016-03-22 12:00:34 +00001// Copyright 2015 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// Flags: --allow-natives-syntax
6
7var a = new Int32Array(100);
8a.__proto__ = null;
9
10function get(a) {
11 return a.length;
12}
13
14assertEquals(undefined, get(a));
15assertEquals(undefined, get(a));
16assertEquals(undefined, get(a));
17%OptimizeFunctionOnNextCall(get);
18assertEquals(undefined, get(a));
19
20get = function(a) {
21 return a.byteLength;
22}
23
24assertEquals(undefined, get(a));
25assertEquals(undefined, get(a));
26assertEquals(undefined, get(a));
27%OptimizeFunctionOnNextCall(get);
28assertEquals(undefined, get(a));
29
30get = function(a) {
31 return a.byteOffset;
32}
33
34assertEquals(undefined, get(a));
35assertEquals(undefined, get(a));
36assertEquals(undefined, get(a));
37%OptimizeFunctionOnNextCall(get);
38assertEquals(undefined, get(a));
39
40(function() {
41 "use strict";
42
43 class MyTypedArray extends Int32Array {
44 get length() {
45 return "length";
46 }
47 }
48
49 a = new MyTypedArray();
50
51 get = function(a) {
52 return a.length;
53 }
54
55 assertEquals("length", get(a));
56 assertEquals("length", get(a));
57 assertEquals("length", get(a));
58 %OptimizeFunctionOnNextCall(get);
59 assertEquals("length", get(a));
60
61 a.__proto__ = null;
62
63 get = function(a) {
64 return a.length;
65 }
66
67 assertEquals(undefined, get(a));
68 assertEquals(undefined, get(a));
69 assertEquals(undefined, get(a));
70 %OptimizeFunctionOnNextCall(get);
71 assertEquals(undefined, get(a));
72})();
73
74(function() {
75 "use strict";
76
77 class MyTypedArray extends Int32Array {
78 constructor(length) {
79 super(length);
80 }
81 }
82
83 a = new MyTypedArray(1024);
84
85 get = function(a) {
86 return a.length;
87 }
88
89 assertEquals(1024, get(a));
90 assertEquals(1024, get(a));
91 assertEquals(1024, get(a));
92 %OptimizeFunctionOnNextCall(get);
93 assertEquals(1024, get(a));
94})();
95
96(function() {
97 "use strict";
98 var a = new Uint8Array(4);
99 Object.defineProperty(a, "length", {get: function() { return "blah"; }});
100 get = function(a) {
101 return a.length;
102 }
103
104 assertEquals("blah", get(a));
105 assertEquals("blah", get(a));
106 assertEquals("blah", get(a));
107 %OptimizeFunctionOnNextCall(get);
108 assertEquals("blah", get(a));
109})();
110
Ben Murdoch61f157c2016-09-16 13:49:30 +0100111// Ensure we can delete length, byteOffset, byteLength.
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000112assertTrue(Int32Array.prototype.__proto__.hasOwnProperty("length"));
113assertTrue(Int32Array.prototype.__proto__.hasOwnProperty("byteOffset"));
114assertTrue(Int32Array.prototype.__proto__.hasOwnProperty("byteLength"));
Ben Murdoch61f157c2016-09-16 13:49:30 +0100115assertTrue(delete Int32Array.prototype.__proto__.length);
116assertTrue(delete Int32Array.prototype.__proto__.byteOffset);
117assertTrue(delete Int32Array.prototype.__proto__.byteLength);
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000118
119a = new Int32Array(100);
120
121get = function(a) {
122 return a.length;
123}
124
Ben Murdoch61f157c2016-09-16 13:49:30 +0100125assertEquals(undefined, get(a));
126assertEquals(undefined, get(a));
127assertEquals(undefined, get(a));
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000128%OptimizeFunctionOnNextCall(get);
Ben Murdoch61f157c2016-09-16 13:49:30 +0100129assertEquals(undefined, get(a));
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000130
131get = function(a) {
132 return a.byteLength;
133}
134
Ben Murdoch61f157c2016-09-16 13:49:30 +0100135assertEquals(undefined, get(a));
136assertEquals(undefined, get(a));
137assertEquals(undefined, get(a));
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000138%OptimizeFunctionOnNextCall(get);
Ben Murdoch61f157c2016-09-16 13:49:30 +0100139assertEquals(undefined, get(a));
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000140
141get = function(a) {
142 return a.byteOffset;
143}
144
Ben Murdoch61f157c2016-09-16 13:49:30 +0100145assertEquals(undefined, get(a));
146assertEquals(undefined, get(a));
147assertEquals(undefined, get(a));
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000148%OptimizeFunctionOnNextCall(get);
Ben Murdoch61f157c2016-09-16 13:49:30 +0100149assertEquals(undefined, get(a));