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
-~----------~----~----~----~------~----~------~--~---

Reply via email to