| OLD | NEW | 
|---|
| 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 9538 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 9549 | 9549 | 
| 9550   int args_to_drop = argument_count + (expression->IsCall() ? 2 : 1); | 9550   int args_to_drop = argument_count + (expression->IsCall() ? 2 : 1); | 
| 9551   Drop(args_to_drop); | 9551   Drop(args_to_drop); | 
| 9552   ast_context()->ReturnValue(new_object); | 9552   ast_context()->ReturnValue(new_object); | 
| 9553 } | 9553 } | 
| 9554 | 9554 | 
| 9555 | 9555 | 
| 9556 // Checks whether allocation using the given constructor can be inlined. | 9556 // Checks whether allocation using the given constructor can be inlined. | 
| 9557 static bool IsAllocationInlineable(Handle<JSFunction> constructor) { | 9557 static bool IsAllocationInlineable(Handle<JSFunction> constructor) { | 
| 9558   return constructor->has_initial_map() && | 9558   return constructor->has_initial_map() && | 
| 9559       constructor->initial_map()->instance_type() == JS_OBJECT_TYPE && | 9559          constructor->initial_map()->instance_type() == JS_OBJECT_TYPE && | 
| 9560       constructor->initial_map()->instance_size() < HAllocate::kMaxInlineSize && | 9560          constructor->initial_map()->instance_size() < | 
| 9561       constructor->initial_map()->InitialPropertiesLength() == 0; | 9561              HAllocate::kMaxInlineSize; | 
| 9562 } | 9562 } | 
| 9563 | 9563 | 
| 9564 | 9564 | 
| 9565 bool HOptimizedGraphBuilder::IsCallArrayInlineable( | 9565 bool HOptimizedGraphBuilder::IsCallArrayInlineable( | 
| 9566     int argument_count, | 9566     int argument_count, | 
| 9567     Handle<AllocationSite> site) { | 9567     Handle<AllocationSite> site) { | 
| 9568   Handle<JSFunction> caller = current_info()->closure(); | 9568   Handle<JSFunction> caller = current_info()->closure(); | 
| 9569   Handle<JSFunction> target = array_function(); | 9569   Handle<JSFunction> target = array_function(); | 
| 9570   // We should have the function plus array arguments on the environment stack. | 9570   // We should have the function plus array arguments on the environment stack. | 
| 9571   DCHECK(environment()->length() >= (argument_count + 1)); | 9571   DCHECK(environment()->length() >= (argument_count + 1)); | 
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 9637     // Force completion of inobject slack tracking before generating | 9637     // Force completion of inobject slack tracking before generating | 
| 9638     // allocation code to finalize instance size. | 9638     // allocation code to finalize instance size. | 
| 9639     if (constructor->IsInobjectSlackTrackingInProgress()) { | 9639     if (constructor->IsInobjectSlackTrackingInProgress()) { | 
| 9640       constructor->CompleteInobjectSlackTracking(); | 9640       constructor->CompleteInobjectSlackTracking(); | 
| 9641     } | 9641     } | 
| 9642 | 9642 | 
| 9643     // Calculate instance size from initial map of constructor. | 9643     // Calculate instance size from initial map of constructor. | 
| 9644     DCHECK(constructor->has_initial_map()); | 9644     DCHECK(constructor->has_initial_map()); | 
| 9645     Handle<Map> initial_map(constructor->initial_map()); | 9645     Handle<Map> initial_map(constructor->initial_map()); | 
| 9646     int instance_size = initial_map->instance_size(); | 9646     int instance_size = initial_map->instance_size(); | 
| 9647     DCHECK(initial_map->InitialPropertiesLength() == 0); |  | 
| 9648 | 9647 | 
| 9649     // Allocate an instance of the implicit receiver object. | 9648     // Allocate an instance of the implicit receiver object. | 
| 9650     HValue* size_in_bytes = Add<HConstant>(instance_size); | 9649     HValue* size_in_bytes = Add<HConstant>(instance_size); | 
| 9651     HAllocationMode allocation_mode; | 9650     HAllocationMode allocation_mode; | 
| 9652     if (FLAG_pretenuring_call_new) { | 9651     if (FLAG_pretenuring_call_new) { | 
| 9653       if (FLAG_allocation_site_pretenuring) { | 9652       if (FLAG_allocation_site_pretenuring) { | 
| 9654         // Try to use pretenuring feedback. | 9653         // Try to use pretenuring feedback. | 
| 9655         Handle<AllocationSite> allocation_site = expr->allocation_site(); | 9654         Handle<AllocationSite> allocation_site = expr->allocation_site(); | 
| 9656         allocation_mode = HAllocationMode(allocation_site); | 9655         allocation_mode = HAllocationMode(allocation_site); | 
| 9657         // Take a dependency on allocation site. | 9656         // Take a dependency on allocation site. | 
| (...skipping 3587 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 13245     isolate()->GetHTracer()->TraceHydrogen(name(), graph_); | 13244     isolate()->GetHTracer()->TraceHydrogen(name(), graph_); | 
| 13246   } | 13245   } | 
| 13247 | 13246 | 
| 13248 #ifdef DEBUG | 13247 #ifdef DEBUG | 
| 13249   graph_->Verify(false);  // No full verify. | 13248   graph_->Verify(false);  // No full verify. | 
| 13250 #endif | 13249 #endif | 
| 13251 } | 13250 } | 
| 13252 | 13251 | 
| 13253 }  // namespace internal | 13252 }  // namespace internal | 
| 13254 }  // namespace v8 | 13253 }  // namespace v8 | 
| OLD | NEW | 
|---|