javaprims.h (_Jv_FormatInt): New declaration.
authorPer Bothner <per@bothner.com>
Tue, 22 May 2001 04:38:37 +0000 (21:38 -0700)
committerPer Bothner <bothner@gcc.gnu.org>
Tue, 22 May 2001 04:38:37 +0000 (21:38 -0700)
* gcj/javaprims.h (_Jv_FormatInt):  New declaration.
* java/lang/natString.cc (_JvFormatInt):  New primitive, with logic
taken from old Integer.toString code.
(Integer::valueOf):  Use _Jv_FormatInt.
* java/lang/Integer.java (toString):  Just use call String.valueOf.
* java/lang/Long.java (toString):  Fix typo in comment.
* java/lang/String.java (valueOf(int)):  Make native.
* java/lang/StringBuffer.java (append(int)):  Make native.
* java/lang/natStringBuffer.cc:  New file, for append(jint).
* Makefile.am (ant_source_files):  Add java/lang/natStringBuffer.cc.

From-SVN: r42419

libjava/ChangeLog
libjava/Makefile.am
libjava/Makefile.in
libjava/gcj/javaprims.h
libjava/java/lang/Integer.java
libjava/java/lang/Long.java
libjava/java/lang/String.java
libjava/java/lang/StringBuffer.java
libjava/java/lang/natString.cc
libjava/java/lang/natStringBuffer.cc [new file with mode: 0644]

index 69bec3f1a5b6ed2b1d8fa9adf85e49d1f4097db1..a6b3122af695ab08860136b16db075654e1d48c3 100644 (file)
@@ -1,3 +1,16 @@
+2001-05-21  Per Bothner  <per@bothner.com>
+
+       * gcj/javaprims.h (_Jv_FormatInt):  New declaration.
+       * java/lang/natString.cc (_JvFormatInt):  New primitive, with logic
+       taken from old Integer.toString code.
+       (Integer::valueOf):  Use _Jv_FormatInt.
+       * java/lang/Integer.java (toString):  Just use call String.valueOf.
+       * java/lang/Long.java (toString):  Fix typo in comment.
+       * java/lang/String.java (valueOf(int)):  Make native.
+       * java/lang/StringBuffer.java (append(int)):  Make native.
+       * java/lang/natStringBuffer.cc:  New file, for append(jint).
+       * Makefile.am (ant_source_files):  Add java/lang/natStringBuffer.cc.
+
 2001-05-21  Tom Tromey  <tromey@redhat.com>
 
        * gnu/gcj/runtime/VMClassLoader.java (VMClassLoader): Now public.
index 8b7bf99f6114085e12854a69a326c04ebed4817b..2444ae7a255e43c53bf5000773e9abd69cd82118 100644 (file)
@@ -1324,6 +1324,7 @@ java/lang/natMath.cc \
 java/lang/natObject.cc \
 java/lang/natRuntime.cc        \
 java/lang/natString.cc \
+java/lang/natStringBuffer.cc \
 java/lang/natSystem.cc \
 java/lang/natThread.cc \
 java/lang/natThrowable.cc \
index c942f9707b0f809285eba112117cbff1018d6e34..9b3a04d4a5eb4a967820feb625841db6b9beb559 100644 (file)
@@ -1068,6 +1068,7 @@ java/lang/natMath.cc \
 java/lang/natObject.cc \
 java/lang/natRuntime.cc        \
 java/lang/natString.cc \
+java/lang/natStringBuffer.cc \
 java/lang/natSystem.cc \
 java/lang/natThread.cc \
 java/lang/natThrowable.cc \
@@ -1224,7 +1225,7 @@ java/io/natObjectOutputStream.lo java/lang/natCharacter.lo \
 java/lang/natClass.lo java/lang/natClassLoader.lo \
 java/lang/natConcreteProcess.lo java/lang/natDouble.lo \
 java/lang/natFloat.lo java/lang/natMath.lo java/lang/natObject.lo \
-java/lang/natRuntime.lo java/lang/natString.lo java/lang/natSystem.lo \
+java/lang/natRuntime.lo java/lang/natString.lo java/lang/natStringBuffer.lo java/lang/natSystem.lo \
 java/lang/natThread.lo java/lang/natThrowable.lo \
 java/lang/reflect/natArray.lo java/lang/reflect/natConstructor.lo \
 java/lang/reflect/natField.lo java/lang/reflect/natMethod.lo \
@@ -1632,7 +1633,7 @@ DEP_FILES =  .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
 .deps/java/lang/natClassLoader.P .deps/java/lang/natConcreteProcess.P \
 .deps/java/lang/natDouble.P .deps/java/lang/natFloat.P \
 .deps/java/lang/natMath.P .deps/java/lang/natObject.P \
-.deps/java/lang/natRuntime.P .deps/java/lang/natString.P \
+.deps/java/lang/natRuntime.P .deps/java/lang/natString.P .deps/java/lang/natStringBuffer.P \
 .deps/java/lang/natSystem.P .deps/java/lang/natThread.P \
 .deps/java/lang/natThrowable.P .deps/java/lang/ref/PhantomReference.P \
 .deps/java/lang/ref/Reference.P .deps/java/lang/ref/ReferenceQueue.P \
index e13195c7e77ec4b75406dae0677759000499b4e3..21419c196ec926ec54bc09bdeecf2726b775ae70 100644 (file)
@@ -371,6 +371,7 @@ extern "C" jboolean _Jv_IsInstanceOf(jobject, jclass);
 extern "C" jstring _Jv_AllocString(jsize) __attribute__((__malloc__));
 extern "C" jstring _Jv_NewString (const jchar*, jsize)
   __attribute__((__malloc__));
+extern jint _Jv_FormatInt (jchar* bufend, jint num);
 extern "C" jchar* _Jv_GetStringChars (jstring str);
 extern "C" jint _Jv_MonitorEnter (jobject);
 extern "C" jint _Jv_MonitorExit (jobject);
index 88d0769a275c0f982bb35a812508f62ab19cd672..9ddfa312f06fa1bb42c3d2dde0d4e53e798b1dbd 100644 (file)
@@ -267,35 +267,7 @@ public final class Integer extends Number implements Comparable
 
   public static String toString(int num)
   {
-    // Use an arrary large enough for "-2147483648"; i.e. 11 chars.
-    char[] buffer = new char[11];
-    int i = 11;
-    boolean isNeg;
-    if (num < 0)
-      {
-        isNeg = true;
-        num = -(num);
-        if (num < 0)
-          {
-            // Must be MIN_VALUE, so handle this special case.
-            buffer[--i] = '8';
-            num = 214748364;
-          }
-      }
-    else
-      isNeg = false;
-
-    do
-      {
-        buffer[--i] = (char) ((int) '0' + (num % 10));
-        num /= 10;
-      }
-    while (num > 0);
-
-    if (isNeg)
-      buffer[--i] = '-';
-
-    return String.valueOf(buffer, i, 11-i);
+    return String.valueOf (num);
   }
 
   public static String toString(int num, int radix)
index 2e812f9696d8bf245d21247c3a229387685aaf97..c33a43b6c2cb44cfd5ab4077ff4db23705256ef7 100644 (file)
@@ -273,7 +273,7 @@ public final class Long extends Number implements Comparable
     if (num <= Integer.MAX_VALUE && num >= Integer.MIN_VALUE)
       return Integer.toString((int) num);
 
-    // Use an arrary large enough for "-9223372036854775808"; i.e. 11 chars.
+    // Use an array large enough for "-9223372036854775808"; i.e. 20 chars.
     char[] buffer = new char[20];
     int i = 20;
     boolean isNeg;
index b985cf4186cb1165fbc6de99741615e0bf0ec6a3..fa599867fe72c66cf586ad1e7568c0a41d00d10f 100644 (file)
@@ -319,10 +319,7 @@ public final class String implements Serializable, Comparable
 
   public static native String valueOf (char c);
 
-  public static String valueOf (int i)
-  {
-    return Integer.toString(i);
-  }
+  public static native String valueOf (int i);
 
   public static String valueOf (long l)
   {
index 16c3863630e65a185efdde11308c77e0241589e6..211574a5b7eb25fadc7693fae950ffd9c631eb49 100644 (file)
@@ -89,10 +89,7 @@ public final class StringBuffer implements Serializable
    *  @return this <code>StringBuffer</code>.
    *  @see java.lang.String#valueOf(int)
    */
-  public StringBuffer append (int inum)
-  {
-    return append (String.valueOf(inum));
-  }
+  public native StringBuffer append (int inum);
 
   /** Append the <code>String</code> value of the argument to this <code>StringBuffer</code>.
    *  Uses <code>String.valueOf()</code> to convert to
index be0c91cd3343042dfccbb124e34ba7a9e60a82bb..659810f31e7245434d237876e5855670fc97938f 100644 (file)
@@ -341,6 +341,52 @@ _Jv_GetStringUTFRegion (jstring str, jsize start, jsize len, char *buf)
   return dptr - buf;
 }
 
+/* Put printed (decimal) representation of NUM in a buffer.
+   BUFEND marks the end of the buffer, which must be at least 11 jchars long.
+   Returns the COUNT of jchars written.  The result is in
+   (BUFEND - COUNT) (inclusive) upto (BUFEND) (exclusive). */
+
+jint
+_Jv_FormatInt (jchar* bufend, jint num)
+{
+  register jchar* ptr = bufend;
+  jboolean isNeg;
+  if (num < 0)
+    {
+      isNeg = true;
+      num = -(num);
+      if (num < 0)
+       {
+         // Must be MIN_VALUE, so handle this special case.
+         // FIXME use 'unsigned jint' for num.
+         *--ptr = '8';
+         num = 214748364;
+       }
+      }
+    else
+      isNeg = false;
+
+    do
+      {
+        *--ptr = (jchar) ((int) '0' + (num % 10));
+        num /= 10;
+      }
+    while (num > 0);
+
+    if (isNeg)
+      *--ptr = '-';
+    return bufend - ptr;
+}
+
+jstring
+java::lang::String::valueOf (jint num)
+{
+  // Use an array large enough for "-2147483648"; i.e. 11 chars.
+  jchar buffer[11];
+  int i = _Jv_FormatInt (buffer+11, num);
+  return _Jv_NewString (buffer+11-i, i);
+}
+
 jstring
 _Jv_AllocString(jsize len)
 {
diff --git a/libjava/java/lang/natStringBuffer.cc b/libjava/java/lang/natStringBuffer.cc
new file mode 100644 (file)
index 0000000..bc70f67
--- /dev/null
@@ -0,0 +1,30 @@
+// natStringBuffer.cc - Implementation of java.lang.StringBuffer native methods.
+
+/* Copyright (C) 2001  Free Software Foundation
+
+   This file is part of libgcj.
+
+This software is copyrighted work licensed under the terms of the
+Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
+details.  */
+
+#include <config.h>
+#include <gcj/cni.h>
+#include <java/lang/StringBuffer.h>
+
+java::lang::StringBuffer*
+java::lang::StringBuffer::append (jint num)
+{
+  // Use an array large enough for "-2147483648"; i.e. 11 chars.
+  jchar buffer[11];
+  int i = _Jv_FormatInt (buffer+11, num);
+  JvSynchronize dummy (this);
+  jint needed = count + i;
+  ensureCapacity_unsynchronized (needed);
+  jchar* dst = elements (value) + count;
+  jchar* src = buffer+11-i;
+  while (--i >= 0)
+    *dst++ = *src++;
+  count = needed;
+  return this;
+}