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

Side by Side Diff: src/runtime/runtime-array.cc

Issue 2663033003: [builtins] TurboFan version of Array.prototype.forEach including fast path for FAST_ELEMENTS (Closed)
Patch Set: Review feedback Created 3 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
« no previous file with comments | « src/js/array.js ('k') | test/mjsunit/proto-elements-add-during-foreach.js » ('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 2014 the V8 project authors. All rights reserved. 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 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/runtime/runtime-utils.h" 5 #include "src/runtime/runtime-utils.h"
6 6
7 #include "src/arguments.h" 7 #include "src/arguments.h"
8 #include "src/code-stubs.h" 8 #include "src/code-stubs.h"
9 #include "src/conversions-inl.h" 9 #include "src/conversions-inl.h"
10 #include "src/elements.h" 10 #include "src/elements.h"
(...skipping 19 matching lines...) Expand all
30 prototype->set_elements(isolate->heap()->empty_fixed_array()); 30 prototype->set_elements(isolate->heap()->empty_fixed_array());
31 return Smi::kZero; 31 return Smi::kZero;
32 } 32 }
33 33
34 static void InstallCode( 34 static void InstallCode(
35 Isolate* isolate, Handle<JSObject> holder, const char* name, 35 Isolate* isolate, Handle<JSObject> holder, const char* name,
36 Handle<Code> code, int argc = -1, 36 Handle<Code> code, int argc = -1,
37 BuiltinFunctionId id = static_cast<BuiltinFunctionId>(-1)) { 37 BuiltinFunctionId id = static_cast<BuiltinFunctionId>(-1)) {
38 Handle<String> key = isolate->factory()->InternalizeUtf8String(name); 38 Handle<String> key = isolate->factory()->InternalizeUtf8String(name);
39 Handle<JSFunction> optimized = 39 Handle<JSFunction> optimized =
40 isolate->factory()->NewFunctionWithoutPrototype(key, code); 40 isolate->factory()->NewFunctionWithoutPrototype(key, code, true);
41 if (argc < 0) { 41 if (argc < 0) {
42 optimized->shared()->DontAdaptArguments(); 42 optimized->shared()->DontAdaptArguments();
43 } else { 43 } else {
44 optimized->shared()->set_internal_formal_parameter_count(argc); 44 optimized->shared()->set_internal_formal_parameter_count(argc);
45 } 45 }
46 if (id >= 0) { 46 if (id >= 0) {
47 optimized->shared()->set_builtin_function_id(id); 47 optimized->shared()->set_builtin_function_id(id);
48 } 48 }
49 optimized->shared()->set_language_mode(STRICT);
50 optimized->shared()->set_native(true);
49 JSObject::AddProperty(holder, key, optimized, NONE); 51 JSObject::AddProperty(holder, key, optimized, NONE);
50 } 52 }
51 53
52 static void InstallBuiltin( 54 static void InstallBuiltin(
53 Isolate* isolate, Handle<JSObject> holder, const char* name, 55 Isolate* isolate, Handle<JSObject> holder, const char* name,
54 Builtins::Name builtin_name, int argc = -1, 56 Builtins::Name builtin_name, int argc = -1,
55 BuiltinFunctionId id = static_cast<BuiltinFunctionId>(-1)) { 57 BuiltinFunctionId id = static_cast<BuiltinFunctionId>(-1)) {
56 InstallCode(isolate, holder, name, 58 InstallCode(isolate, holder, name,
57 handle(isolate->builtins()->builtin(builtin_name), isolate), argc, 59 handle(isolate->builtins()->builtin(builtin_name), isolate), argc,
58 id); 60 id);
(...skipping 12 matching lines...) Expand all
71 InstallBuiltin(isolate, holder, "slice", Builtins::kArraySlice); 73 InstallBuiltin(isolate, holder, "slice", Builtins::kArraySlice);
72 InstallBuiltin(isolate, holder, "splice", Builtins::kArraySplice); 74 InstallBuiltin(isolate, holder, "splice", Builtins::kArraySplice);
73 InstallBuiltin(isolate, holder, "includes", Builtins::kArrayIncludes, 2); 75 InstallBuiltin(isolate, holder, "includes", Builtins::kArrayIncludes, 2);
74 InstallBuiltin(isolate, holder, "indexOf", Builtins::kArrayIndexOf, 2); 76 InstallBuiltin(isolate, holder, "indexOf", Builtins::kArrayIndexOf, 2);
75 InstallBuiltin(isolate, holder, "keys", Builtins::kArrayPrototypeKeys, 0, 77 InstallBuiltin(isolate, holder, "keys", Builtins::kArrayPrototypeKeys, 0,
76 kArrayKeys); 78 kArrayKeys);
77 InstallBuiltin(isolate, holder, "values", Builtins::kArrayPrototypeValues, 0, 79 InstallBuiltin(isolate, holder, "values", Builtins::kArrayPrototypeValues, 0,
78 kArrayValues); 80 kArrayValues);
79 InstallBuiltin(isolate, holder, "entries", Builtins::kArrayPrototypeEntries, 81 InstallBuiltin(isolate, holder, "entries", Builtins::kArrayPrototypeEntries,
80 0, kArrayEntries); 82 0, kArrayEntries);
81
82 return *holder; 83 return *holder;
83 } 84 }
84 85
85
86 RUNTIME_FUNCTION(Runtime_FixedArrayGet) { 86 RUNTIME_FUNCTION(Runtime_FixedArrayGet) {
87 SealHandleScope shs(isolate); 87 SealHandleScope shs(isolate);
88 DCHECK_EQ(2, args.length()); 88 DCHECK_EQ(2, args.length());
89 CONVERT_ARG_CHECKED(FixedArray, object, 0); 89 CONVERT_ARG_CHECKED(FixedArray, object, 0);
90 CONVERT_SMI_ARG_CHECKED(index, 1); 90 CONVERT_SMI_ARG_CHECKED(index, 1);
91 return object->get(index); 91 return object->get(index);
92 } 92 }
93 93
94 94
95 RUNTIME_FUNCTION(Runtime_FixedArraySet) { 95 RUNTIME_FUNCTION(Runtime_FixedArraySet) {
(...skipping 573 matching lines...) Expand 10 before | Expand all | Expand 10 after
669 DCHECK(accessor->HasElement(spread_array, i)); 669 DCHECK(accessor->HasElement(spread_array, i));
670 Handle<Object> element = accessor->Get(spread_array, i); 670 Handle<Object> element = accessor->Get(spread_array, i);
671 result->set(i, *element); 671 result->set(i, *element);
672 } 672 }
673 673
674 return *result; 674 return *result;
675 } 675 }
676 676
677 } // namespace internal 677 } // namespace internal
678 } // namespace v8 678 } // namespace v8
OLDNEW
« no previous file with comments | « src/js/array.js ('k') | test/mjsunit/proto-elements-add-during-foreach.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698