Fix float/double crash on Firefox with max values.

1) Fix debug printing code from %f (which can overflow a buffer) to %g (which won't).
2) Compile out more debugging code anyway to avoid calling Value.toString() at all.

Review by: jat (desk)

git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@7205 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/plugins/common/Value.h b/plugins/common/Value.h
index 4401893..bcea639 100644
--- a/plugins/common/Value.h
+++ b/plugins/common/Value.h
@@ -301,7 +301,7 @@
   }
 
   std::string toString() const {
-    char buf[30];
+    char buf[64];
     switch (type) {
       case NULL_TYPE:
         return "null";
@@ -326,10 +326,10 @@
             static_cast<long long>(getLong()));
         return std::string(buf);
       case FLOAT:
-        snprintf(buf, sizeof(buf), "float(%f)", getFloat());
+        snprintf(buf, sizeof(buf), "float(%g)", getFloat());
         return std::string(buf);
       case DOUBLE:
-        snprintf(buf, sizeof(buf), "double(%lf)", getDouble());
+        snprintf(buf, sizeof(buf), "double(%g)", getDouble());
         return std::string(buf);
       case STRING:
         snprintf(buf, sizeof(buf), "string(%.20s)", getString().c_str());
@@ -381,7 +381,10 @@
 };
 
 inline Debug::DebugStream& operator<<(Debug::DebugStream& dbg, const Value& val) {
-  return dbg << val.toString();
+  if (dbg.isActive()) {
+    dbg << val.toString();
+  }
+  return dbg;
 }
 
 #endif
diff --git a/user/test/com/google/gwt/dev/jjs/test/HostedTest.java b/user/test/com/google/gwt/dev/jjs/test/HostedTest.java
index 73bd9bf..fdc19cf 100644
--- a/user/test/com/google/gwt/dev/jjs/test/HostedTest.java
+++ b/user/test/com/google/gwt/dev/jjs/test/HostedTest.java
@@ -276,12 +276,7 @@
     assertEquals("VAL3-foo", TestEnum.VAL3.foo());
   }
 
-  /**
-   * Returning Float.MAX_VALUE or Double.MAX_VALUE causes firefox to crash on
-   * Windows in dev mode
-   * TODO (jat): Enable this test before shipping GWT 2.0.
-   */
-  public void disabledTestFloat() {
+  public void testFloat() {
     storeFloat(Float.MIN_VALUE);
     float f = getFloat();
     assertTrue(f == Float.MIN_VALUE);
@@ -415,12 +410,8 @@
   /**
    * More test cases resulting from issue 2426 to show that primitives can be
    * passed through JSNI methods unmolested.
-   * 
-   * Returning Float.MAX_VALUE or Double.MAX_VALUE causes firefox to crash on
-   * Windows in dev mode
-   * TODO(jat): Enable this test before shipping GWT 2.0. 
    */
-  public void disabledTestJsniPassthroughPrimitives() {
+  public void testJsniPassthroughPrimitives() {
     class Inner {
       native boolean nativeBoolean(boolean param) /*-{
         return param;