Index: src/compiler/linkage.h |
diff --git a/src/compiler/linkage.h b/src/compiler/linkage.h |
index 9fe02183ec4bdc8448415e2793f75d3d9c56652b..5e887b7d8efb0fe6934fb8ed0b87fa89b342fa02 100644 |
--- a/src/compiler/linkage.h |
+++ b/src/compiler/linkage.h |
@@ -43,7 +43,12 @@ class CallDescriptor : public ZoneObject { |
// or an address--all of which require different machine sequences to call. |
enum Kind { kCallCodeObject, kCallJSFunction, kCallAddress }; |
- enum DeoptimizationSupport { kCanDeoptimize, kCannotDeoptimize }; |
+ // TODO(jarin) kLazyDeoptimization and kNeedsFrameState should be unified. |
+ enum DeoptimizationSupport { |
+ kNoDeoptimization = 0, |
+ kLazyDeoptimization = 1, |
+ kNeedsFrameState = 2 |
+ }; |
CallDescriptor(Kind kind, int8_t return_count, int16_t parameter_count, |
int16_t input_count, LinkageLocation* locations, |
@@ -74,8 +79,18 @@ class CallDescriptor : public ZoneObject { |
int InputCount() const { return input_count_; } |
+ int FrameStateCount() const { return NeedsFrameState() ? 1 : 0; } |
+ |
bool CanLazilyDeoptimize() const { |
- return deoptimization_support_ == kCanDeoptimize; |
+ return (deoptimization_support() & kLazyDeoptimization) != 0; |
+ } |
+ |
+ bool NeedsFrameState() const { |
+ return (deoptimization_support() & kNeedsFrameState) != 0; |
+ } |
+ |
+ DeoptimizationSupport deoptimization_support() const { |
+ return deoptimization_support_; |
} |
LinkageLocation GetReturnLocation(int index) { |
@@ -141,7 +156,7 @@ class Linkage : public ZoneObject { |
Runtime::FunctionId function, int parameter_count, |
Operator::Property properties, |
CallDescriptor::DeoptimizationSupport can_deoptimize = |
- CallDescriptor::kCannotDeoptimize); |
+ CallDescriptor::kNoDeoptimization); |
static CallDescriptor* GetRuntimeCallDescriptor( |
Runtime::FunctionId function, int parameter_count, |
Operator::Property properties, |
@@ -150,7 +165,7 @@ class Linkage : public ZoneObject { |
CallDescriptor* GetStubCallDescriptor( |
CodeStubInterfaceDescriptor* descriptor, int stack_parameter_count = 0, |
CallDescriptor::DeoptimizationSupport can_deoptimize = |
- CallDescriptor::kCannotDeoptimize); |
+ CallDescriptor::kNoDeoptimization); |
static CallDescriptor* GetStubCallDescriptor( |
CodeStubInterfaceDescriptor* descriptor, int stack_parameter_count, |
CallDescriptor::DeoptimizationSupport can_deoptimize, Zone* zone); |