Skip to content

Commit bf8e802

Browse files
author
wingo@igalia.com
committed
Add @@iterator, .entries(), .values(), .keys() support to typed arrays
R=arv@chromium.org, rossberg@chromium.org BUG= Review URL: https://codereview.chromium.org/336403002 git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@21999 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
1 parent 52ef087 commit bf8e802

3 files changed

Lines changed: 69 additions & 1 deletion

File tree

src/array-iterator.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,3 +128,30 @@ function ExtendArrayPrototype() {
128128
%SetProperty($Array.prototype, symbolIterator, ArrayValues, DONT_ENUM);
129129
}
130130
ExtendArrayPrototype();
131+
132+
133+
function ExtendTypedArrayPrototypes() {
134+
%CheckIsBootstrapping();
135+
136+
macro TYPED_ARRAYS(FUNCTION)
137+
FUNCTION(Uint8Array)
138+
FUNCTION(Int8Array)
139+
FUNCTION(Uint16Array)
140+
FUNCTION(Int16Array)
141+
FUNCTION(Uint32Array)
142+
FUNCTION(Int32Array)
143+
FUNCTION(Float32Array)
144+
FUNCTION(Float64Array)
145+
FUNCTION(Uint8ClampedArray)
146+
endmacro
147+
148+
macro EXTEND_TYPED_ARRAY(NAME)
149+
%SetProperty($NAME.prototype, 'entries', ArrayEntries, DONT_ENUM);
150+
%SetProperty($NAME.prototype, 'values', ArrayValues, DONT_ENUM);
151+
%SetProperty($NAME.prototype, 'keys', ArrayKeys, DONT_ENUM);
152+
%SetProperty($NAME.prototype, symbolIterator, ArrayValues, DONT_ENUM);
153+
endmacro
154+
155+
TYPED_ARRAYS(EXTEND_TYPED_ARRAY)
156+
}
157+
ExtendTypedArrayPrototypes();
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
// Copyright 2014 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: --harmony-iteration
6+
7+
8+
var constructors = [Uint8Array, Int8Array,
9+
Uint16Array, Int16Array,
10+
Uint32Array, Int32Array,
11+
Float32Array, Float64Array,
12+
Uint8ClampedArray];
13+
14+
function TestTypedArrayPrototype(constructor) {
15+
assertTrue(constructor.prototype.hasOwnProperty('entries'));
16+
assertTrue(constructor.prototype.hasOwnProperty('values'));
17+
assertTrue(constructor.prototype.hasOwnProperty('keys'));
18+
assertTrue(constructor.prototype.hasOwnProperty(Symbol.iterator));
19+
20+
assertFalse(constructor.prototype.propertyIsEnumerable('entries'));
21+
assertFalse(constructor.prototype.propertyIsEnumerable('values'));
22+
assertFalse(constructor.prototype.propertyIsEnumerable('keys'));
23+
assertFalse(constructor.prototype.propertyIsEnumerable(Symbol.iterator));
24+
25+
assertEquals(Array.prototype.entries, constructor.prototype.entries);
26+
assertEquals(Array.prototype.values, constructor.prototype.values);
27+
assertEquals(Array.prototype.keys, constructor.prototype.keys);
28+
assertEquals(Array.prototype.values, constructor.prototype[Symbol.iterator]);
29+
}
30+
constructors.forEach(TestTypedArrayPrototype);
31+
32+
33+
function TestTypedArrayValues(constructor) {
34+
var array = [1, 2, 3];
35+
var i = 0;
36+
for (var value of new constructor(array)) {
37+
assertEquals(array[i++], value);
38+
}
39+
assertEquals(i, array.length);
40+
}
41+
constructors.forEach(TestTypedArrayValues);

tools/generate-runtime-tests.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151
EXPECTED_FUZZABLE_COUNT = 326
5252
EXPECTED_CCTEST_COUNT = 6
5353
EXPECTED_UNKNOWN_COUNT = 4
54-
EXPECTED_BUILTINS_COUNT = 807
54+
EXPECTED_BUILTINS_COUNT = 808
5555

5656

5757
# Don't call these at all.

0 commit comments

Comments
 (0)