Index: src/interface-descriptors.h |
diff --git a/src/interface-descriptors.h b/src/interface-descriptors.h |
index 9b4bcee967a96918092a3424c79281ffdb2e17e0..328d69c5e3df14915f9ebf192b56800b320971ff 100644 |
--- a/src/interface-descriptors.h |
+++ b/src/interface-descriptors.h |
@@ -69,17 +69,13 @@ class PlatformInterfaceDescriptor; |
class CallInterfaceDescriptorData { |
public: |
CallInterfaceDescriptorData() |
- : stack_paramater_count_(-1), |
- register_param_count_(-1), |
- function_type_(nullptr) {} |
+ : register_param_count_(-1), function_type_(nullptr) {} |
// A copy of the passed in registers and param_representations is made |
// and owned by the CallInterfaceDescriptorData. |
- void InitializePlatformIndependent(int stack_paramater_count, |
- Type::FunctionType* function_type) { |
+ void InitializePlatformIndependent(Type::FunctionType* function_type) { |
function_type_ = function_type; |
- stack_paramater_count_ = stack_paramater_count; |
} |
// TODO(mvstanton): Instead of taking parallel arrays register and |
@@ -92,12 +88,11 @@ class CallInterfaceDescriptorData { |
bool IsInitialized() const { return register_param_count_ >= 0; } |
+ int param_count() const { return function_type_->Arity(); } |
int register_param_count() const { return register_param_count_; } |
Register register_param(int index) const { return register_params_[index]; } |
Register* register_params() const { return register_params_.get(); } |
- Type* register_param_type(int index) const { |
- return function_type_->Parameter(index); |
- } |
+ Type* param_type(int index) const { return function_type_->Parameter(index); } |
PlatformInterfaceDescriptor* platform_specific_descriptor() const { |
return platform_specific_descriptor_; |
} |
@@ -105,7 +100,6 @@ class CallInterfaceDescriptorData { |
Type::FunctionType* function_type() const { return function_type_; } |
private: |
- int stack_paramater_count_; |
int register_param_count_; |
// The Register params are allocated dynamically by the |
@@ -142,6 +136,8 @@ class CallInterfaceDescriptor { |
CallInterfaceDescriptor(Isolate* isolate, CallDescriptors::Key key) |
: data_(isolate->call_descriptor_data(key)) {} |
+ int GetParameterCount() const { return data()->param_count(); } |
+ |
int GetRegisterParameterCount() const { |
return data()->register_param_count(); |
} |
@@ -155,8 +151,8 @@ class CallInterfaceDescriptor { |
} |
Type* GetParameterType(int index) const { |
- DCHECK(index < data()->register_param_count()); |
- return data()->register_param_type(index); |
+ DCHECK(index < data()->param_count()); |
+ return data()->param_type(index); |
} |
// Some platforms have extra information to associate with the descriptor. |
@@ -194,7 +190,7 @@ class CallInterfaceDescriptor { |
Type::FunctionType* function_type = |
BuildCallInterfaceDescriptorFunctionType(isolate, |
d->register_param_count()); |
- d->InitializePlatformIndependent(0, function_type); |
+ d->InitializePlatformIndependent(function_type); |
} |
} |
@@ -254,7 +250,8 @@ class StoreDescriptor : public CallInterfaceDescriptor { |
class StoreTransitionDescriptor : public StoreDescriptor { |
public: |
- DECLARE_DESCRIPTOR(StoreTransitionDescriptor, StoreDescriptor) |
+ DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(StoreTransitionDescriptor, |
+ StoreDescriptor) |
// Extends StoreDescriptor with Map parameter. |
enum ParameterIndices { |
@@ -264,6 +261,8 @@ class StoreTransitionDescriptor : public StoreDescriptor { |
kMapIndex, |
kParameterCount |
}; |
+ |
+ // MapRegister() is no_reg on ia32, instead it's on the stack. |
static const Register MapRegister(); |
}; |