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

Side by Side Diff: src/hydrogen.cc

Issue 253843006: Object::Lookup(), JSObject::*Lookup*() and JSReceiver::*Lookup*() handlified. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Addressing review comments Created 6 years, 7 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 | Annotate | Revision Log
« no previous file with comments | « src/heap-snapshot-generator.cc ('k') | src/ic.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 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 "hydrogen.h" 5 #include "hydrogen.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "v8.h" 9 #include "v8.h"
10 #include "allocation-site-scopes.h" 10 #include "allocation-site-scopes.h"
(...skipping 4829 matching lines...) Expand 10 before | Expand all | Expand 10 after
4840 } 4840 }
4841 4841
4842 4842
4843 HOptimizedGraphBuilder::GlobalPropertyAccess 4843 HOptimizedGraphBuilder::GlobalPropertyAccess
4844 HOptimizedGraphBuilder::LookupGlobalProperty( 4844 HOptimizedGraphBuilder::LookupGlobalProperty(
4845 Variable* var, LookupResult* lookup, PropertyAccessType access_type) { 4845 Variable* var, LookupResult* lookup, PropertyAccessType access_type) {
4846 if (var->is_this() || !current_info()->has_global_object()) { 4846 if (var->is_this() || !current_info()->has_global_object()) {
4847 return kUseGeneric; 4847 return kUseGeneric;
4848 } 4848 }
4849 Handle<GlobalObject> global(current_info()->global_object()); 4849 Handle<GlobalObject> global(current_info()->global_object());
4850 global->Lookup(*var->name(), lookup); 4850 global->Lookup(var->name(), lookup);
4851 if (!lookup->IsNormal() || 4851 if (!lookup->IsNormal() ||
4852 (access_type == STORE && lookup->IsReadOnly()) || 4852 (access_type == STORE && lookup->IsReadOnly()) ||
4853 lookup->holder() != *global) { 4853 lookup->holder() != *global) {
4854 return kUseGeneric; 4854 return kUseGeneric;
4855 } 4855 }
4856 4856
4857 return kUseCell; 4857 return kUseCell;
4858 } 4858 }
4859 4859
4860 4860
(...skipping 464 matching lines...) Expand 10 before | Expand all | Expand 10 after
5325 HValue* checked_object) { 5325 HValue* checked_object) {
5326 // See if this is a load for an immutable property 5326 // See if this is a load for an immutable property
5327 if (checked_object->ActualValue()->IsConstant() && 5327 if (checked_object->ActualValue()->IsConstant() &&
5328 info->lookup()->IsCacheable() && 5328 info->lookup()->IsCacheable() &&
5329 info->lookup()->IsReadOnly() && info->lookup()->IsDontDelete()) { 5329 info->lookup()->IsReadOnly() && info->lookup()->IsDontDelete()) {
5330 Handle<Object> object( 5330 Handle<Object> object(
5331 HConstant::cast(checked_object->ActualValue())->handle(isolate())); 5331 HConstant::cast(checked_object->ActualValue())->handle(isolate()));
5332 5332
5333 if (object->IsJSObject()) { 5333 if (object->IsJSObject()) {
5334 LookupResult lookup(isolate()); 5334 LookupResult lookup(isolate());
5335 Handle<JSObject>::cast(object)->Lookup(*info->name(), &lookup); 5335 Handle<JSObject>::cast(object)->Lookup(info->name(), &lookup);
5336 Handle<Object> value(lookup.GetLazyValue(), isolate()); 5336 Handle<Object> value(lookup.GetLazyValue(), isolate());
5337 5337
5338 if (!value->IsTheHole()) { 5338 if (!value->IsTheHole()) {
5339 return New<HConstant>(value); 5339 return New<HConstant>(value);
5340 } 5340 }
5341 } 5341 }
5342 } 5342 }
5343 5343
5344 HObjectAccess access = info->access(); 5344 HObjectAccess access = info->access();
5345 if (access.representation().IsDouble()) { 5345 if (access.representation().IsDouble()) {
(...skipping 4526 matching lines...) Expand 10 before | Expand all | Expand 10 after
9872 // same. 9872 // same.
9873 Handle<JSFunction> target = Handle<JSFunction>::null(); 9873 Handle<JSFunction> target = Handle<JSFunction>::null();
9874 VariableProxy* proxy = expr->right()->AsVariableProxy(); 9874 VariableProxy* proxy = expr->right()->AsVariableProxy();
9875 bool global_function = (proxy != NULL) && proxy->var()->IsUnallocated(); 9875 bool global_function = (proxy != NULL) && proxy->var()->IsUnallocated();
9876 if (global_function && 9876 if (global_function &&
9877 current_info()->has_global_object() && 9877 current_info()->has_global_object() &&
9878 !current_info()->global_object()->IsAccessCheckNeeded()) { 9878 !current_info()->global_object()->IsAccessCheckNeeded()) {
9879 Handle<String> name = proxy->name(); 9879 Handle<String> name = proxy->name();
9880 Handle<GlobalObject> global(current_info()->global_object()); 9880 Handle<GlobalObject> global(current_info()->global_object());
9881 LookupResult lookup(isolate()); 9881 LookupResult lookup(isolate());
9882 global->Lookup(*name, &lookup); 9882 global->Lookup(name, &lookup);
9883 if (lookup.IsNormal() && lookup.GetValue()->IsJSFunction()) { 9883 if (lookup.IsNormal() && lookup.GetValue()->IsJSFunction()) {
9884 Handle<JSFunction> candidate(JSFunction::cast(lookup.GetValue())); 9884 Handle<JSFunction> candidate(JSFunction::cast(lookup.GetValue()));
9885 // If the function is in new space we assume it's more likely to 9885 // If the function is in new space we assume it's more likely to
9886 // change and thus prefer the general IC code. 9886 // change and thus prefer the general IC code.
9887 if (!isolate()->heap()->InNewSpace(*candidate)) { 9887 if (!isolate()->heap()->InNewSpace(*candidate)) {
9888 target = candidate; 9888 target = candidate;
9889 } 9889 }
9890 } 9890 }
9891 } 9891 }
9892 9892
(...skipping 1773 matching lines...) Expand 10 before | Expand all | Expand 10 after
11666 if (ShouldProduceTraceOutput()) { 11666 if (ShouldProduceTraceOutput()) {
11667 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); 11667 isolate()->GetHTracer()->TraceHydrogen(name(), graph_);
11668 } 11668 }
11669 11669
11670 #ifdef DEBUG 11670 #ifdef DEBUG
11671 graph_->Verify(false); // No full verify. 11671 graph_->Verify(false); // No full verify.
11672 #endif 11672 #endif
11673 } 11673 }
11674 11674
11675 } } // namespace v8::internal 11675 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/heap-snapshot-generator.cc ('k') | src/ic.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698