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

Side by Side Diff: src/compiler/js-native-context-specialization.cc

Issue 1416493007: [turbofan] Implement the implicit ToObject for property access. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 1 month 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/compiler/js-native-context-specialization.h ('k') | src/crankshaft/hydrogen.cc » ('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 2015 the V8 project authors. All rights reserved. 1 // 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 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/compiler/js-native-context-specialization.h" 5 #include "src/compiler/js-native-context-specialization.h"
6 6
7 #include "src/accessors.h" 7 #include "src/accessors.h"
8 #include "src/compilation-dependencies.h" 8 #include "src/compilation-dependencies.h"
9 #include "src/compiler/access-builder.h" 9 #include "src/compiler/access-builder.h"
10 #include "src/compiler/js-graph.h" 10 #include "src/compiler/js-graph.h"
(...skipping 16 matching lines...) Expand all
27 27
28 28
29 JSNativeContextSpecialization::JSNativeContextSpecialization( 29 JSNativeContextSpecialization::JSNativeContextSpecialization(
30 Editor* editor, JSGraph* jsgraph, Flags flags, 30 Editor* editor, JSGraph* jsgraph, Flags flags,
31 Handle<GlobalObject> global_object, CompilationDependencies* dependencies, 31 Handle<GlobalObject> global_object, CompilationDependencies* dependencies,
32 Zone* zone) 32 Zone* zone)
33 : AdvancedReducer(editor), 33 : AdvancedReducer(editor),
34 jsgraph_(jsgraph), 34 jsgraph_(jsgraph),
35 flags_(flags), 35 flags_(flags),
36 global_object_(global_object), 36 global_object_(global_object),
37 native_context_(global_object->native_context(), isolate()),
37 dependencies_(dependencies), 38 dependencies_(dependencies),
38 zone_(zone) {} 39 zone_(zone) {}
39 40
40 41
41 Reduction JSNativeContextSpecialization::Reduce(Node* node) { 42 Reduction JSNativeContextSpecialization::Reduce(Node* node) {
42 switch (node->opcode()) { 43 switch (node->opcode()) {
43 case IrOpcode::kJSLoadGlobal: 44 case IrOpcode::kJSLoadGlobal:
44 return ReduceJSLoadGlobal(node); 45 return ReduceJSLoadGlobal(node);
45 case IrOpcode::kJSStoreGlobal: 46 case IrOpcode::kJSStoreGlobal:
46 return ReduceJSStoreGlobal(node); 47 return ReduceJSStoreGlobal(node);
(...skipping 381 matching lines...) Expand 10 before | Expand all | Expand 10 after
428 429
429 // Don't search on the prototype chain for special indices in case of 430 // Don't search on the prototype chain for special indices in case of
430 // integer indexed exotic objects (see ES6 section 9.4.5). 431 // integer indexed exotic objects (see ES6 section 9.4.5).
431 if (map->IsJSTypedArrayMap() && name->IsString() && 432 if (map->IsJSTypedArrayMap() && name->IsString() &&
432 IsSpecialIndex(isolate()->unicode_cache(), String::cast(*name))) { 433 IsSpecialIndex(isolate()->unicode_cache(), String::cast(*name))) {
433 break; 434 break;
434 } 435 }
435 436
436 // Walk up the prototype chain. 437 // Walk up the prototype chain.
437 if (!map->prototype()->IsJSObject()) { 438 if (!map->prototype()->IsJSObject()) {
438 // TODO(bmeurer): Handle the not found case if the prototype is null. 439 // Perform the implicit ToObject for primitives here.
439 break; 440 // Implemented according to ES6 section 7.3.2 GetV (V, P).
441 Handle<JSFunction> constructor;
442 if (Map::GetConstructorFunction(map, native_context())
443 .ToHandle(&constructor)) {
444 map = handle(constructor->initial_map(), isolate());
445 DCHECK(map->prototype()->IsJSObject());
446 } else {
447 // TODO(bmeurer): Handle the not found case if the prototype is null.
448 break;
449 }
440 } 450 }
441 Handle<JSObject> map_prototype(JSObject::cast(map->prototype()), isolate()); 451 Handle<JSObject> map_prototype(JSObject::cast(map->prototype()), isolate());
442 if (map_prototype->map()->is_deprecated()) { 452 if (map_prototype->map()->is_deprecated()) {
443 // Try to migrate the prototype object so we don't embed the deprecated 453 // Try to migrate the prototype object so we don't embed the deprecated
444 // map into the optimized code. 454 // map into the optimized code.
445 JSObject::TryMigrateInstance(map_prototype); 455 JSObject::TryMigrateInstance(map_prototype);
446 } 456 }
447 map = handle(map_prototype->map(), isolate()); 457 map = handle(map_prototype->map(), isolate());
448 holder = map_prototype; 458 holder = map_prototype;
449 } 459 }
(...skipping 436 matching lines...) Expand 10 before | Expand all | Expand 10 after
886 result->immutable = IsImmutableVariableMode(lookup_result.mode); 896 result->immutable = IsImmutableVariableMode(lookup_result.mode);
887 result->index = lookup_result.slot_index; 897 result->index = lookup_result.slot_index;
888 return true; 898 return true;
889 } 899 }
890 900
891 901
892 void JSNativeContextSpecialization::AssumePrototypesStable( 902 void JSNativeContextSpecialization::AssumePrototypesStable(
893 Type* receiver_type, Handle<JSObject> holder) { 903 Type* receiver_type, Handle<JSObject> holder) {
894 // Determine actual holder and perform prototype chain checks. 904 // Determine actual holder and perform prototype chain checks.
895 for (auto i = receiver_type->Classes(); !i.Done(); i.Advance()) { 905 for (auto i = receiver_type->Classes(); !i.Done(); i.Advance()) {
896 Handle<Map> const map = i.Current(); 906 Handle<Map> map = i.Current();
907 // Perform the implicit ToObject for primitives here.
908 // Implemented according to ES6 section 7.3.2 GetV (V, P).
909 Handle<JSFunction> constructor;
910 if (Map::GetConstructorFunction(map, native_context())
911 .ToHandle(&constructor)) {
912 map = handle(constructor->initial_map(), isolate());
913 }
897 for (PrototypeIterator j(map);; j.Advance()) { 914 for (PrototypeIterator j(map);; j.Advance()) {
898 // Check that the {prototype} still has the same map. All prototype 915 // Check that the {prototype} still has the same map. All prototype
899 // maps are guaranteed to be stable, so it's sufficient to add a 916 // maps are guaranteed to be stable, so it's sufficient to add a
900 // stability dependency here. 917 // stability dependency here.
901 Handle<JSReceiver> const prototype = 918 Handle<JSReceiver> const prototype =
902 PrototypeIterator::GetCurrent<JSReceiver>(j); 919 PrototypeIterator::GetCurrent<JSReceiver>(j);
903 dependencies()->AssumeMapStable(handle(prototype->map(), isolate())); 920 dependencies()->AssumeMapStable(handle(prototype->map(), isolate()));
904 // Stop once we get to the holder. 921 // Stop once we get to the holder.
905 if (prototype.is_identical_to(holder)) break; 922 if (prototype.is_identical_to(holder)) break;
906 } 923 }
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
938 } 955 }
939 956
940 957
941 SimplifiedOperatorBuilder* JSNativeContextSpecialization::simplified() const { 958 SimplifiedOperatorBuilder* JSNativeContextSpecialization::simplified() const {
942 return jsgraph()->simplified(); 959 return jsgraph()->simplified();
943 } 960 }
944 961
945 } // namespace compiler 962 } // namespace compiler
946 } // namespace internal 963 } // namespace internal
947 } // namespace v8 964 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/js-native-context-specialization.h ('k') | src/crankshaft/hydrogen.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698