Chromium Code Reviews| Index: src/compiler/machine-type.h |
| diff --git a/src/compiler/machine-type.h b/src/compiler/machine-type.h |
| index 6e749abb1596a5d067690ed0819292e96dc991e2..caa35efdb61e7414285083e081d837c846b91cde 100644 |
| --- a/src/compiler/machine-type.h |
| +++ b/src/compiler/machine-type.h |
| @@ -6,6 +6,7 @@ |
| #define V8_COMPILER_MACHINE_TYPE_H_ |
| #include "src/globals.h" |
| +#include "src/zone.h" |
| namespace v8 { |
| namespace internal { |
| @@ -108,32 +109,68 @@ inline int ElementSizeOf(MachineType machine_type) { |
| } |
| } |
| -// Describes the inputs and outputs of a function or call in terms of machine |
| -// types. |
| -class MachineSignature { |
| +// Describes the inputs and outputs of a function or call. |
| +template <typename T> |
| +class Signature : public ZoneObject { |
| public: |
| - MachineSignature(uint8_t return_count, uint16_t param_count, |
| - MachineType* reps) |
| + Signature(uint8_t return_count, uint16_t param_count, T* reps) |
|
Benedikt Meurer
2014/09/02 08:37:41
The Chrome Coding Style says: "Use unsigned intege
titzer
2014/09/02 12:13:53
Done.
|
| : return_count_(return_count), param_count_(param_count), reps_(reps) {} |
| - int GetReturnCount() const { return return_count_; } |
| - int GetParamCount() const { return param_count_; } |
| + int ReturnCount() const { return return_count_; } |
|
Benedikt Meurer
2014/09/02 08:37:42
size_t return_count() const { return return_count_
titzer
2014/09/02 12:13:53
Done.
|
| + int ParamCount() const { return param_count_; } |
|
Benedikt Meurer
2014/09/02 08:37:42
size_t param_count() const { return param_count_;
titzer
2014/09/02 12:13:53
Done.
|
| - MachineType GetParameterType(int index) const { |
| + T GetParam(int index) const { |
|
Benedikt Meurer
2014/09/02 08:37:41
size_t for index
titzer
2014/09/02 12:13:53
Done.
|
| DCHECK(index >= 0 && index < param_count_); |
|
Benedikt Meurer
2014/09/02 08:37:41
DCHECK_LT(index, param_count());
titzer
2014/09/02 12:13:52
Done.
|
| return reps_[return_count_ + index]; |
|
Benedikt Meurer
2014/09/02 08:37:42
reps_[return_count() + index]
titzer
2014/09/02 12:13:53
This is mostly personal preference, but inside the
|
| } |
| - MachineType GetReturnType(int index = 0) const { |
| + T GetReturn(int index = 0) const { |
|
Benedikt Meurer
2014/09/02 08:37:42
size_t for index
titzer
2014/09/02 12:13:53
Done.
|
| DCHECK(index >= 0 && index < return_count_); |
|
Benedikt Meurer
2014/09/02 08:37:42
DCHECK_LT(index, return_count());
titzer
2014/09/02 12:13:53
Done.
|
| return reps_[index]; |
| } |
| + // For incrementally building signatures. |
| + class Builder { |
| + public: |
| + Builder(Zone* zone, int return_count, int param_count) |
| + : return_count_(return_count), |
| + param_count_(param_count), |
| + zone_(zone), |
| + rcursor_(0), |
| + pcursor_(0), |
| + buffer_(zone->NewArray<T>(return_count + param_count)) {} |
| + |
| + const int return_count_; |
|
Benedikt Meurer
2014/09/02 08:37:42
size_t
titzer
2014/09/02 12:13:52
Done.
|
| + const int param_count_; |
|
Benedikt Meurer
2014/09/02 08:37:42
size_t
titzer
2014/09/02 12:13:52
Done.
|
| + |
| + void AddReturn(T val) { |
| + DCHECK_LT(rcursor_, return_count_); |
| + buffer_[rcursor_++] = val; |
| + } |
| + void AddParam(T val) { |
| + DCHECK_LT(pcursor_, param_count_); |
| + buffer_[return_count_ + pcursor_++] = val; |
| + } |
| + Signature<T>* Build() { |
| + DCHECK_EQ(rcursor_, return_count_); |
| + DCHECK_EQ(pcursor_, param_count_); |
| + return new (zone_) Signature<T>(return_count_, param_count_, buffer_); |
| + } |
| + |
| + private: |
| + Zone* zone_; |
| + int rcursor_; |
| + int pcursor_; |
| + T* buffer_; |
| + }; |
| + |
| protected: |
| uint8_t return_count_; |
| uint16_t param_count_; |
| - MachineType* reps_; |
| + T* reps_; |
| }; |
| + |
| +typedef Signature<MachineType> MachineSignature; |
| } // namespace compiler |
| } // namespace internal |
| } // namespace v8 |