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

Side by Side Diff: src/hydrogen.cc

Issue 1090813003: [crankshaft] Fix property access with proxies in prototype chain (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 8 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/objects.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 2013 the V8 project authors. All rights reserved. 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 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/hydrogen.h" 5 #include "src/hydrogen.h"
6 6
7 #include <sstream> 7 #include <sstream>
8 8
9 #include "src/v8.h" 9 #include "src/v8.h"
10 10
(...skipping 5429 matching lines...) Expand 10 before | Expand all | Expand 10 after
5440 expr->pattern(), 5440 expr->pattern(),
5441 expr->flags(), 5441 expr->flags(),
5442 expr->literal_index()); 5442 expr->literal_index());
5443 return ast_context()->ReturnInstruction(instr, expr->id()); 5443 return ast_context()->ReturnInstruction(instr, expr->id());
5444 } 5444 }
5445 5445
5446 5446
5447 static bool CanInlinePropertyAccess(Handle<Map> map) { 5447 static bool CanInlinePropertyAccess(Handle<Map> map) {
5448 if (map->instance_type() == HEAP_NUMBER_TYPE) return true; 5448 if (map->instance_type() == HEAP_NUMBER_TYPE) return true;
5449 if (map->instance_type() < FIRST_NONSTRING_TYPE) return true; 5449 if (map->instance_type() < FIRST_NONSTRING_TYPE) return true;
5450 if (map->instance_type() == JS_PROXY_TYPE) return false;
rossberg 2015/04/16 10:54:13 This isn't actually needed, I assume.
5450 return map->IsJSObjectMap() && !map->is_dictionary_map() && 5451 return map->IsJSObjectMap() && !map->is_dictionary_map() &&
5451 !map->has_named_interceptor() && 5452 !map->has_named_interceptor() &&
5452 // TODO(verwaest): Whitelist contexts to which we have access. 5453 // TODO(verwaest): Whitelist contexts to which we have access.
5453 !map->is_access_check_needed(); 5454 !map->is_access_check_needed();
5454 } 5455 }
5455 5456
5456 5457
5457 // Determines whether the given array or object literal boilerplate satisfies 5458 // Determines whether the given array or object literal boilerplate satisfies
5458 // all limits to be considered for fast deep-copying and computes the total 5459 // all limits to be considered for fast deep-copying and computes the total
5459 // size of all objects that are part of the graph. 5460 // size of all objects that are part of the graph.
(...skipping 602 matching lines...) Expand 10 before | Expand all | Expand 10 after
6062 JSObject::TryMigrateInstance(holder_); 6063 JSObject::TryMigrateInstance(holder_);
6063 } 6064 }
6064 map = Handle<Map>(holder_->map()); 6065 map = Handle<Map>(holder_->map());
6065 if (!CanInlinePropertyAccess(map)) { 6066 if (!CanInlinePropertyAccess(map)) {
6066 NotFound(); 6067 NotFound();
6067 return false; 6068 return false;
6068 } 6069 }
6069 LookupDescriptor(*map, *name_); 6070 LookupDescriptor(*map, *name_);
6070 if (IsFound()) return LoadResult(map); 6071 if (IsFound()) return LoadResult(map);
6071 } 6072 }
6073
6074 if (map->IsJSReceiverMap()) {
rossberg 2015/04/16 10:54:13 You may want to set NotFound in this case as well
6075 return false;
6076 }
6072 NotFound(); 6077 NotFound();
6073 return true; 6078 return true;
6074 } 6079 }
6075 6080
6076 6081
6077 bool HOptimizedGraphBuilder::PropertyAccessInfo::IsIntegerIndexedExotic() { 6082 bool HOptimizedGraphBuilder::PropertyAccessInfo::IsIntegerIndexedExotic() {
6078 InstanceType instance_type = map_->instance_type(); 6083 InstanceType instance_type = map_->instance_type();
6079 return instance_type == JS_TYPED_ARRAY_TYPE && 6084 return instance_type == JS_TYPED_ARRAY_TYPE &&
6080 IsSpecialIndex(isolate()->unicode_cache(), *name_); 6085 IsSpecialIndex(isolate()->unicode_cache(), *name_);
6081 } 6086 }
(...skipping 6837 matching lines...) Expand 10 before | Expand all | Expand 10 after
12919 if (ShouldProduceTraceOutput()) { 12924 if (ShouldProduceTraceOutput()) {
12920 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); 12925 isolate()->GetHTracer()->TraceHydrogen(name(), graph_);
12921 } 12926 }
12922 12927
12923 #ifdef DEBUG 12928 #ifdef DEBUG
12924 graph_->Verify(false); // No full verify. 12929 graph_->Verify(false); // No full verify.
12925 #endif 12930 #endif
12926 } 12931 }
12927 12932
12928 } } // namespace v8::internal 12933 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « no previous file | src/objects.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698