diff --git a/c/main_hosted.c b/c/main_hosted.c index aacc7c4..2c7a997 100644 --- a/c/main_hosted.c +++ b/c/main_hosted.c @@ -1,7 +1,7 @@ #include #include -#include +#include "printf.h" #include "frame.h" #include "class_resolver.h" #include "string.h" @@ -13,7 +13,7 @@ static struct hash_table_entry * load_from_filenames(const char * filenames[], i size_t file_size[length]; for (int i = 0; i < length; i++) { - printf("load class: %s\n", filenames[i]); + debugf("load class: %s\n", filenames[i]); buffers[i] = file_read(filenames[i], &file_size[i]); } diff --git a/java/lang/Double.java b/java/lang/Double.java index c9e8795..f11e42c 100644 --- a/java/lang/Double.java +++ b/java/lang/Double.java @@ -1,7 +1,30 @@ package java.lang; public class Double { - public static String toString(double d) { - return ""; + public static String toString(double f) { + long integer = (long)f; + double frac = (f - (double)integer) * 10000.0; + long fraction = (long)frac; + + byte[] int_s = Long.toString(integer).getBytes(); + byte[] frac_s = Long.toString(fraction).getBytes(); + int length = int_s.length + frac_s.length + 1; + byte[] buf = new byte[length]; + + int ix = 0; + for (int i = 0; i < int_s.length; i++) { + buf[ix] = int_s[i]; + ix += 1; + } + + buf[ix] = (byte)'.'; + ix += 1; + + for (int i = 0; i < frac_s.length; i++) { + buf[ix] = frac_s[i]; + ix += 1; + } + + return new String(buf); } } diff --git a/java/lang/Float.java b/java/lang/Float.java index a26e9bf..e0a43f6 100644 --- a/java/lang/Float.java +++ b/java/lang/Float.java @@ -2,6 +2,29 @@ package java.lang; public class Float { public static String toString(float f) { - return ""; + int integer = (int)f; + float frac = (f - (float)integer) * 10000.0f; + int fraction = (int)frac; + + byte[] int_s = Integer.toString(integer).getBytes(); + byte[] frac_s = Integer.toString(fraction).getBytes(); + int length = int_s.length + frac_s.length + 1; + byte[] buf = new byte[length]; + + int ix = 0; + for (int i = 0; i < int_s.length; i++) { + buf[ix] = int_s[i]; + ix += 1; + } + + buf[ix] = (byte)'.'; + ix += 1; + + for (int i = 0; i < frac_s.length; i++) { + buf[ix] = frac_s[i]; + ix += 1; + } + + return new String(buf); } } diff --git a/java/lang/String.java b/java/lang/String.java index 82b7cd2..3bdcd2f 100644 --- a/java/lang/String.java +++ b/java/lang/String.java @@ -23,6 +23,10 @@ public class String { return this; } + public int length() { + return value.length; + } + public static String valueOf(boolean b) { return b ? "true" : "false"; } diff --git a/p/TestFloatPrint.java b/p/TestFloatPrint.java new file mode 100644 index 0000000..b59d543 --- /dev/null +++ b/p/TestFloatPrint.java @@ -0,0 +1,11 @@ +package p; + +class TestFloatPrint { + public static void main() { + float f = 1234.5678f; + System.out.println(f); + + double d = 1234.5678; + System.out.println(d); + } +}