aboutsummaryrefslogtreecommitdiff
path: root/libjava
diff options
context:
space:
mode:
authorbothner <bothner@138bc75d-0d04-0410-961f-82ee72b054a4>2001-05-22 04:38:37 +0000
committerbothner <bothner@138bc75d-0d04-0410-961f-82ee72b054a4>2001-05-22 04:38:37 +0000
commit018c51122e27ba1917201542bc88a8e7b8a03996 (patch)
tree3fe6c5a88c43aaae750d120b81f91c5998141dd7 /libjava
parente4c782a134e6adc80f70ed963ef3add0c3b0a631 (diff)
* 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@42419 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava')
-rw-r--r--libjava/ChangeLog13
-rw-r--r--libjava/Makefile.am1
-rw-r--r--libjava/Makefile.in5
-rw-r--r--libjava/gcj/javaprims.h1
-rw-r--r--libjava/java/lang/Integer.java30
-rw-r--r--libjava/java/lang/Long.java2
-rw-r--r--libjava/java/lang/String.java5
-rw-r--r--libjava/java/lang/StringBuffer.java5
-rw-r--r--libjava/java/lang/natString.cc46
-rw-r--r--libjava/java/lang/natStringBuffer.cc30
10 files changed, 98 insertions, 40 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index 69bec3f1a5b..a6b3122af69 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -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.
diff --git a/libjava/Makefile.am b/libjava/Makefile.am
index 8b7bf99f611..2444ae7a255 100644
--- a/libjava/Makefile.am
+++ b/libjava/Makefile.am
@@ -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 \
diff --git a/libjava/Makefile.in b/libjava/Makefile.in
index c942f9707b0..9b3a04d4a5e 100644
--- a/libjava/Makefile.in
+++ b/libjava/Makefile.in
@@ -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 \
diff --git a/libjava/gcj/javaprims.h b/libjava/gcj/javaprims.h
index e13195c7e77..21419c196ec 100644
--- a/libjava/gcj/javaprims.h
+++ b/libjava/gcj/javaprims.h
@@ -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);
diff --git a/libjava/java/lang/Integer.java b/libjava/java/lang/Integer.java
index 88d0769a275..9ddfa312f06 100644
--- a/libjava/java/lang/Integer.java
+++ b/libjava/java/lang/Integer.java
@@ -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)
diff --git a/libjava/java/lang/Long.java b/libjava/java/lang/Long.java
index 2e812f9696d..c33a43b6c2c 100644
--- a/libjava/java/lang/Long.java
+++ b/libjava/java/lang/Long.java
@@ -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;
diff --git a/libjava/java/lang/String.java b/libjava/java/lang/String.java
index b985cf4186c..fa599867fe7 100644
--- a/libjava/java/lang/String.java
+++ b/libjava/java/lang/String.java
@@ -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)
{
diff --git a/libjava/java/lang/StringBuffer.java b/libjava/java/lang/StringBuffer.java
index 16c3863630e..211574a5b7e 100644
--- a/libjava/java/lang/StringBuffer.java
+++ b/libjava/java/lang/StringBuffer.java
@@ -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
diff --git a/libjava/java/lang/natString.cc b/libjava/java/lang/natString.cc
index be0c91cd334..659810f31e7 100644
--- a/libjava/java/lang/natString.cc
+++ b/libjava/java/lang/natString.cc
@@ -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
index 00000000000..bc70f67f25a
--- /dev/null
+++ b/libjava/java/lang/natStringBuffer.cc
@@ -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;
+}