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

Side by Side Diff: src/builtins.cc

Issue 1247243003: The ArrayConcat builtin didn't respect @@isConcatSp (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fix builtin rather than removing it Created 5 years, 4 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
« no previous file with comments | « no previous file | src/elements.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/api.h" 7 #include "src/api.h"
8 #include "src/api-natives.h" 8 #include "src/api-natives.h"
9 #include "src/arguments.h" 9 #include "src/arguments.h"
10 #include "src/base/once.h" 10 #include "src/base/once.h"
(...skipping 926 matching lines...) Expand 10 before | Expand all | Expand 10 after
937 if (!ArrayPrototypeHasNoElements(&iter)) { 937 if (!ArrayPrototypeHasNoElements(&iter)) {
938 AllowHeapAllocation allow_allocation; 938 AllowHeapAllocation allow_allocation;
939 return CallJsBuiltin(isolate, "$arrayConcat", args); 939 return CallJsBuiltin(isolate, "$arrayConcat", args);
940 } 940 }
941 941
942 // Iterate through all the arguments performing checks 942 // Iterate through all the arguments performing checks
943 // and calculating total length. 943 // and calculating total length.
944 bool is_holey = false; 944 bool is_holey = false;
945 for (int i = 0; i < n_arguments; i++) { 945 for (int i = 0; i < n_arguments; i++) {
946 Object* arg = args[i]; 946 Object* arg = args[i];
947 bool fallback = false;
947 PrototypeIterator iter(isolate, arg); 948 PrototypeIterator iter(isolate, arg);
949 if (FLAG_harmony_concat_spreadable) {
950 Handle<Object> obj(arg, isolate);
951 fallback = !IsConcatSpreadable(isolate, obj);
adamk 2015/08/19 19:50:35 As the test failures show, you can't make this cal
952 }
948 if (!arg->IsJSArray() || !JSArray::cast(arg)->HasFastElements() || 953 if (!arg->IsJSArray() || !JSArray::cast(arg)->HasFastElements() ||
949 iter.GetCurrent() != array_proto) { 954 iter.GetCurrent() != array_proto || fallback) {
950 AllowHeapAllocation allow_allocation; 955 AllowHeapAllocation allow_allocation;
951 return CallJsBuiltin(isolate, "$arrayConcat", args); 956 return CallJsBuiltin(isolate, "$arrayConcat", args);
952 } 957 }
953 int len = Smi::cast(JSArray::cast(arg)->length())->value(); 958 int len = Smi::cast(JSArray::cast(arg)->length())->value();
954 959
955 // We shouldn't overflow when adding another len. 960 // We shouldn't overflow when adding another len.
956 const int kHalfOfMaxInt = 1 << (kBitsPerInt - 2); 961 const int kHalfOfMaxInt = 1 << (kBitsPerInt - 2);
957 STATIC_ASSERT(FixedArray::kMaxLength < kHalfOfMaxInt); 962 STATIC_ASSERT(FixedArray::kMaxLength < kHalfOfMaxInt);
958 USE(kHalfOfMaxInt); 963 USE(kHalfOfMaxInt);
959 result_len += len; 964 result_len += len;
(...skipping 655 matching lines...) Expand 10 before | Expand all | Expand 10 after
1615 BUILTIN_LIST_C(DEFINE_BUILTIN_ACCESSOR_C) 1620 BUILTIN_LIST_C(DEFINE_BUILTIN_ACCESSOR_C)
1616 BUILTIN_LIST_A(DEFINE_BUILTIN_ACCESSOR_A) 1621 BUILTIN_LIST_A(DEFINE_BUILTIN_ACCESSOR_A)
1617 BUILTIN_LIST_H(DEFINE_BUILTIN_ACCESSOR_H) 1622 BUILTIN_LIST_H(DEFINE_BUILTIN_ACCESSOR_H)
1618 BUILTIN_LIST_DEBUG_A(DEFINE_BUILTIN_ACCESSOR_A) 1623 BUILTIN_LIST_DEBUG_A(DEFINE_BUILTIN_ACCESSOR_A)
1619 #undef DEFINE_BUILTIN_ACCESSOR_C 1624 #undef DEFINE_BUILTIN_ACCESSOR_C
1620 #undef DEFINE_BUILTIN_ACCESSOR_A 1625 #undef DEFINE_BUILTIN_ACCESSOR_A
1621 1626
1622 1627
1623 } // namespace internal 1628 } // namespace internal
1624 } // namespace v8 1629 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | src/elements.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698