Commit 423de4d7 authored by whesse@chromium.org's avatar whesse@chromium.org

Add CHECK_INT64_EQ function to avoid operand size ambiguities.

Review URL: http://codereview.chromium.org/256048

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@3016 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 359ad562
...@@ -80,17 +80,18 @@ static inline void CheckEqualsHelper(const char* file, int line, ...@@ -80,17 +80,18 @@ static inline void CheckEqualsHelper(const char* file, int line,
} }
} }
#if !V8_HOST_ARCH_64_BIT // Helper function used by the CHECK_INT64_EQ function when given int64_t
// Helper function used by the CHECK_EQ function when given int64_t // arguments. Should not be called directly. We do not overload CHECK_EQ
// arguments. Should not be called directly. // with both 32-bit and 64-bit integers, because it causes ambiguity
static inline void CheckEqualsHelper(const char* file, int line, // with operands of mixed sizes.
const char* expected_source, static inline void CheckInt64EqualsHelper(const char* file, int line,
int64_t expected, const char* expected_source,
const char* value_source, int64_t expected,
int64_t value) { const char* value_source,
int64_t value) {
if (expected != value) { if (expected != value) {
// Sorry, printing int64_t in a fanky hex way, // Print int64_t values in hex, as two int32s,
// that's our mother tongue after all :) // to avoid platform-dependencies.
V8_Fatal(file, line, V8_Fatal(file, line,
"CHECK_EQ(%s, %s) failed\n#" "CHECK_EQ(%s, %s) failed\n#"
" Expected: 0x%08x%08x\n# Found: 0x%08x%08x", " Expected: 0x%08x%08x\n# Found: 0x%08x%08x",
...@@ -99,7 +100,6 @@ static inline void CheckEqualsHelper(const char* file, int line, ...@@ -99,7 +100,6 @@ static inline void CheckEqualsHelper(const char* file, int line,
uint32_t(value >> 32), uint32_t(value)); uint32_t(value >> 32), uint32_t(value));
} }
} }
#endif
// Helper function used by the CHECK_NE function when given int // Helper function used by the CHECK_NE function when given int
...@@ -233,6 +233,9 @@ void CheckEqualsHelper(const char* file, ...@@ -233,6 +233,9 @@ void CheckEqualsHelper(const char* file,
#define CHECK_GT(a, b) CHECK((a) > (b)) #define CHECK_GT(a, b) CHECK((a) > (b))
#define CHECK_GE(a, b) CHECK((a) >= (b)) #define CHECK_GE(a, b) CHECK((a) >= (b))
#define CHECK_INT64_EQ(expected, value) CheckInt64EqualsHelper(__FILE__, \
__LINE__, #expected, expected, #value, value)
// This is inspired by the static assertion facility in boost. This // This is inspired by the static assertion facility in boost. This
// is pretty magical. If it causes you trouble on a platform you may // is pretty magical. If it causes you trouble on a platform you may
......
...@@ -702,18 +702,12 @@ THREADED_TEST(PropertyHandler) { ...@@ -702,18 +702,12 @@ THREADED_TEST(PropertyHandler) {
} }
#if V8_HOST_ARCH_64_BIT
# define CAST_TO_INT64(x) (int(x))
#else
# define CAST_TO_INT64(x) (int64_t(x))
#endif
THREADED_TEST(TinyInteger) { THREADED_TEST(TinyInteger) {
v8::HandleScope scope; v8::HandleScope scope;
LocalContext env; LocalContext env;
int32_t value = 239; int32_t value = 239;
Local<v8::Integer> value_obj = v8::Integer::New(value); Local<v8::Integer> value_obj = v8::Integer::New(value);
CHECK_EQ(CAST_TO_INT64(value), value_obj->Value()); CHECK_INT64_EQ(static_cast<int64_t>(value), value_obj->Value());
} }
...@@ -724,7 +718,7 @@ THREADED_TEST(BigSmiInteger) { ...@@ -724,7 +718,7 @@ THREADED_TEST(BigSmiInteger) {
CHECK(i::Smi::IsValid(value)); CHECK(i::Smi::IsValid(value));
CHECK(!i::Smi::IsValid(value + 1)); CHECK(!i::Smi::IsValid(value + 1));
Local<v8::Integer> value_obj = v8::Integer::New(value); Local<v8::Integer> value_obj = v8::Integer::New(value);
CHECK_EQ(CAST_TO_INT64(value), value_obj->Value()); CHECK_INT64_EQ(static_cast<int64_t>(value), value_obj->Value());
} }
...@@ -734,7 +728,7 @@ THREADED_TEST(BigInteger) { ...@@ -734,7 +728,7 @@ THREADED_TEST(BigInteger) {
int32_t value = (1 << 30) + 1; int32_t value = (1 << 30) + 1;
CHECK(!i::Smi::IsValid(value)); CHECK(!i::Smi::IsValid(value));
Local<v8::Integer> value_obj = v8::Integer::New(value); Local<v8::Integer> value_obj = v8::Integer::New(value);
CHECK_EQ(CAST_TO_INT64(value), value_obj->Value()); CHECK_INT64_EQ(static_cast<int64_t>(value), value_obj->Value());
} }
...@@ -743,7 +737,7 @@ THREADED_TEST(TinyUnsignedInteger) { ...@@ -743,7 +737,7 @@ THREADED_TEST(TinyUnsignedInteger) {
LocalContext env; LocalContext env;
uint32_t value = 239; uint32_t value = 239;
Local<v8::Integer> value_obj = v8::Integer::New(value); Local<v8::Integer> value_obj = v8::Integer::New(value);
CHECK_EQ(CAST_TO_INT64(value), value_obj->Value()); CHECK_INT64_EQ(static_cast<int64_t>(value), value_obj->Value());
} }
...@@ -754,7 +748,7 @@ THREADED_TEST(BigUnsignedSmiInteger) { ...@@ -754,7 +748,7 @@ THREADED_TEST(BigUnsignedSmiInteger) {
CHECK(i::Smi::IsValid(value)); CHECK(i::Smi::IsValid(value));
CHECK(!i::Smi::IsValid(value + 1)); CHECK(!i::Smi::IsValid(value + 1));
Local<v8::Integer> value_obj = v8::Integer::New(value); Local<v8::Integer> value_obj = v8::Integer::New(value);
CHECK_EQ(CAST_TO_INT64(value), value_obj->Value()); CHECK_INT64_EQ(static_cast<int64_t>(value), value_obj->Value());
} }
...@@ -764,7 +758,7 @@ THREADED_TEST(BigUnsignedInteger) { ...@@ -764,7 +758,7 @@ THREADED_TEST(BigUnsignedInteger) {
uint32_t value = (1 << 30) + 1; uint32_t value = (1 << 30) + 1;
CHECK(!i::Smi::IsValid(value)); CHECK(!i::Smi::IsValid(value));
Local<v8::Integer> value_obj = v8::Integer::New(value); Local<v8::Integer> value_obj = v8::Integer::New(value);
CHECK_EQ(CAST_TO_INT64(value), value_obj->Value()); CHECK_INT64_EQ(static_cast<int64_t>(value), value_obj->Value());
} }
...@@ -773,7 +767,7 @@ THREADED_TEST(OutOfSignedRangeUnsignedInteger) { ...@@ -773,7 +767,7 @@ THREADED_TEST(OutOfSignedRangeUnsignedInteger) {
LocalContext env; LocalContext env;
uint32_t value = uint32_t(0xffffffff); uint32_t value = uint32_t(0xffffffff);
Local<v8::Integer> value_obj = v8::Integer::New(value); Local<v8::Integer> value_obj = v8::Integer::New(value);
CHECK_EQ(CAST_TO_INT64(value), value_obj->Value()); CHECK_INT64_EQ(static_cast<int64_t>(value), value_obj->Value());
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment