Index: test/cctest/compiler/c-signature.h |
diff --git a/test/cctest/compiler/c-signature.h b/test/cctest/compiler/c-signature.h |
index fee8cb946d05fc0e3e6e36b0c581a13af66b5cc3..83b3328a3b4e256274f7a2c898fee26d42825dd7 100644 |
--- a/test/cctest/compiler/c-signature.h |
+++ b/test/cctest/compiler/c-signature.h |
@@ -53,21 +53,50 @@ class CSignature : public MachineSignature { |
public: |
template <typename P1 = void, typename P2 = void, typename P3 = void, |
typename P4 = void, typename P5 = void> |
- void Verify() { |
+ void VerifyParams() { |
// Verifies the C signature against the machine types. Maximum {5} params. |
- CHECK_LT(parameter_count(), 6); |
+ CHECK_LT(parameter_count(), 6u); |
const int kMax = 5; |
MachineType params[] = {MachineTypeForC<P1>(), MachineTypeForC<P2>(), |
MachineTypeForC<P3>(), MachineTypeForC<P4>(), |
MachineTypeForC<P5>()}; |
for (int p = kMax - 1; p >= 0; p--) { |
- if (p < parameter_count()) { |
+ if (p < static_cast<int>(parameter_count())) { |
CHECK_EQ(GetParam(p), params[p]); |
} else { |
CHECK_EQ(kMachNone, params[p]); |
} |
} |
} |
+ |
+ static CSignature* New(Zone* zone, MachineType ret, |
+ MachineType p1 = kMachNone, MachineType p2 = kMachNone, |
+ MachineType p3 = kMachNone, MachineType p4 = kMachNone, |
+ MachineType p5 = kMachNone) { |
+ MachineType* buffer = zone->NewArray<MachineType>(6); |
+ int pos = 0; |
+ size_t return_count = 0; |
+ if (ret != kMachNone) { |
+ buffer[pos++] = ret; |
+ return_count++; |
+ } |
+ buffer[pos++] = p1; |
+ buffer[pos++] = p2; |
+ buffer[pos++] = p3; |
+ buffer[pos++] = p4; |
+ buffer[pos++] = p5; |
+ size_t param_count = 5; |
+ if (p5 == kMachNone) param_count--; |
+ if (p4 == kMachNone) param_count--; |
+ if (p3 == kMachNone) param_count--; |
+ if (p2 == kMachNone) param_count--; |
+ if (p1 == kMachNone) param_count--; |
+ for (size_t i = 0; i < param_count; i++) { |
+ // Check that there are no kMachNone's in the middle of parameters. |
+ CHECK_NE(kMachNone, buffer[return_count + i]); |
+ } |
+ return new (zone) CSignature(return_count, param_count, buffer); |
+ } |
}; |