Reviewers: Lasse Reichstein, plesner, Description: Add a temporary hack to FmtElm to truncate 64-bit pointers to 32-bits.
We will have to do some more work to get the code to handle pointers correctly. Also clean up the constructors, and reduce the long lines. Please review this at http://codereview.chromium.org/109021 Affected files: M src/string-stream.h Index: src/string-stream.h diff --git a/src/string-stream.h b/src/string-stream.h index 901f376a5aff5b735c7e498575c3b374b4f92da1..6836b5450d41f0941a7204acecb59e3e9d54e05a 100644 --- a/src/string-stream.h +++ b/src/string-stream.h @@ -72,13 +72,35 @@ class NoAllocationStringAllocator: public StringAllocator { class FmtElm { public: - FmtElm(int value) : type_(INT) { data_.u_int_ = value; } // NOLINT - explicit FmtElm(double value) : type_(DOUBLE) { data_.u_double_ = value; } // NOLINT - FmtElm(const char* value) : type_(C_STR) { data_.u_c_str_ = value; } // NOLINT - FmtElm(const Vector<const uc16>& value) : type_(LC_STR) { data_.u_lc_str_ = &value; } // NOLINT - FmtElm(Object* value) : type_(OBJ) { data_.u_obj_ = value; } // NOLINT - FmtElm(Handle<Object> value) : type_(HANDLE) { data_.u_handle_ = value.location(); } // NOLINT - FmtElm(void* value) : type_(INT) { data_.u_int_ = reinterpret_cast<int>(value); } // NOLINT + FmtElm(int value) : type_(INT) { // NOLINT + data_.u_int_ = value; + } + explicit FmtElm(double value) : type_(DOUBLE) { + data_.u_double_ = value; + } + FmtElm(const char* value) : type_(C_STR) { // NOLINT + data_.u_c_str_ = value; + } + FmtElm(const Vector<const uc16>& value) : type_(LC_STR) { // NOLINT + data_.u_lc_str_ = &value; + } + FmtElm(Object* value) : type_(OBJ) { // NOLINT + data_.u_obj_ = value; + } + FmtElm(Handle<Object> value) : type_(HANDLE) { // NOLINT + data_.u_handle_ = value.location(); + } + FmtElm(void* value) : type_(INT) { // NOLINT +#if V8_HOST_ARCH_64_BIT + // TODO(x64): FmtElm needs to treat pointers as pointers, and not as + // ints. This will require adding a pointer type, etc. For now just + // hack it and truncate the pointer. + // http://code.google.com/p/v8/issues/detail?id=335 + data_.u_int_ = reinterpret_cast<intptr_t>(value) & 0xffffffff; +#else + data_.u_int_ = reinterpret_cast<int>(value); +#endif + } private: friend class StringStream; enum Type { INT, DOUBLE, C_STR, LC_STR, OBJ, HANDLE }; --~--~---------~--~----~------------~-------~--~----~ v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev -~----------~----~----~----~------~----~------~--~---
