Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4)

Side by Side Diff: src/harmony-spread.js

Issue 938443002: [es6] implement spread calls (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Add construct support, clean out some gunk Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2013 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 'use strict';
6
7 // -------------------------------------------------------------------
8
9 function SpreadCall(function, thisArg, spread0) {
arv (Not doing code reviews) 2015/02/18 15:07:06 I'm curious how this will handle? super(...args)
10 if (!IS_SPEC_FUNCTION(function)) {
11 // TODO(caitp): use name of function rather than value
12 throw MakeTypeError("called_non_callable", [function]);
13 }
14
15 var args = new InternalArray();
16
17 var pos = 3;
18 var count = %_ArgumentsLength();
19
20 for (var index = spread0; index < count; ++index) {
21 var nextSpread = %_Arguments(index);
22
23 while (pos < nextSpread) {
24 args.push(%_Arguments(pos++));
25 }
26
27 var collection = %_Arguments(pos++);
28 var iterable = collection[symbolIterator];
29 var iterator = GetIterator(collection, iterable);
30
31 while (true) {
32 var next = iterator.next();
33
34 if (!IS_OBJECT(next)) {
35 throw MakeTypeError("iterator_result_not_an_object", [next]);
36 }
37
38 if (next.done) {
39 break;
40 }
41
42 args.push(next.value);
43 }
44 }
45
46 while (pos < spread0) {
47 args.push(%_Arguments(pos++));
48 }
49
50 return %Apply(function, thisArg, args, 0, args.length);
51 }
52
53
54 function SpreadCallNew(function, spread0) {
55 if (!IS_SPEC_FUNCTION(function)) {
arv (Not doing code reviews) 2015/02/18 15:07:06 How is NewTarget propagated?
caitp (gmail) 2015/02/18 15:32:08 This doesn't deal with any of the new construct pr
56 // TODO(caitp): use name of function rather than value
57 throw MakeTypeError("called_non_callable", [function]);
58 }
59
60 var args = new InternalArray();
61
62 var pos = 2;
63 var count = %_ArgumentsLength();
64
65 for (var index = spread0; index < count; ++index) {
66 var nextSpread = %_Arguments(index);
67
68 while (pos < nextSpread) {
69 args.push(%_Arguments(pos++));
70 }
71
72 var collection = %_Arguments(pos++);
73 var iterable = collection[symbolIterator];
74 var iterator = GetIterator(collection, iterable);
75
76 while (true) {
77 var next = iterator.next();
78
79 if (!IS_OBJECT(next)) {
80 throw MakeTypeError("iterator_result_not_an_object", [next]);
81 }
82
83 if (next.done) {
84 break;
85 }
86
87 args.push(next.value);
88 }
89 }
90
91 while (pos < spread0) {
92 args.push(%_Arguments(pos++));
93 }
94
95 return %ApplyConstruct(function, args, 0, args.length);
arv (Not doing code reviews) 2015/02/18 15:07:05 We might need to provide one more param to %ApplyC
96 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698