improve print implementation
This commit is contained in:
parent
8768bd516c
commit
5c88c8f7c1
@ -438,7 +438,7 @@ struct method_entry class_resolver_lookup_method_from_interfacemethodref_index(i
|
|||||||
assert(class_entry != nullptr);
|
assert(class_entry != nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(!"invokeinterface method does not exist");
|
assert(!"interfacemethodref method does not exist");
|
||||||
}
|
}
|
||||||
|
|
||||||
struct method_entry * class_resolver_lookup_method_from_methodref_index(int class_hash_table_length,
|
struct method_entry * class_resolver_lookup_method_from_methodref_index(int class_hash_table_length,
|
||||||
@ -505,7 +505,8 @@ struct method_entry * class_resolver_lookup_method_from_methodref_index(int clas
|
|||||||
class_entry->class_file->super_class);
|
class_entry->class_file->super_class);
|
||||||
assert(class_entry != nullptr);
|
assert(class_entry != nullptr);
|
||||||
}
|
}
|
||||||
return nullptr;
|
|
||||||
|
assert(!"methodref method does not exist");
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t * class_resolver_lookup_string(int class_hash_table_length,
|
int32_t * class_resolver_lookup_string(int class_hash_table_length,
|
||||||
|
@ -1,7 +1,11 @@
|
|||||||
#include "example/DreamcastVideo2.class.h"
|
#include "example/DreamcastVideo2.class.h"
|
||||||
#include "example/DreamcastVideo.class.h"
|
#include "example/DreamcastVideo.class.h"
|
||||||
#include "java/io/PrintStream.class.h"
|
#include "java/io/PrintStream.class.h"
|
||||||
|
#include "java/lang/DecimalDigits.class.h"
|
||||||
|
#include "java/lang/Double.class.h"
|
||||||
|
#include "java/lang/Float.class.h"
|
||||||
#include "java/lang/Integer.class.h"
|
#include "java/lang/Integer.class.h"
|
||||||
|
#include "java/lang/Long.class.h"
|
||||||
#include "java/lang/Math.class.h"
|
#include "java/lang/Math.class.h"
|
||||||
#include "java/lang/Object.class.h"
|
#include "java/lang/Object.class.h"
|
||||||
#include "java/lang/String.class.h"
|
#include "java/lang/String.class.h"
|
||||||
|
@ -1,7 +1,11 @@
|
|||||||
(const uint8_t *)&_binary_example_DreamcastVideo2_class_start,
|
(const uint8_t *)&_binary_example_DreamcastVideo2_class_start,
|
||||||
(const uint8_t *)&_binary_example_DreamcastVideo_class_start,
|
(const uint8_t *)&_binary_example_DreamcastVideo_class_start,
|
||||||
(const uint8_t *)&_binary_java_io_PrintStream_class_start,
|
(const uint8_t *)&_binary_java_io_PrintStream_class_start,
|
||||||
|
(const uint8_t *)&_binary_java_lang_DecimalDigits_class_start,
|
||||||
|
(const uint8_t *)&_binary_java_lang_Double_class_start,
|
||||||
|
(const uint8_t *)&_binary_java_lang_Float_class_start,
|
||||||
(const uint8_t *)&_binary_java_lang_Integer_class_start,
|
(const uint8_t *)&_binary_java_lang_Integer_class_start,
|
||||||
|
(const uint8_t *)&_binary_java_lang_Long_class_start,
|
||||||
(const uint8_t *)&_binary_java_lang_Math_class_start,
|
(const uint8_t *)&_binary_java_lang_Math_class_start,
|
||||||
(const uint8_t *)&_binary_java_lang_Object_class_start,
|
(const uint8_t *)&_binary_java_lang_Object_class_start,
|
||||||
(const uint8_t *)&_binary_java_lang_String_class_start,
|
(const uint8_t *)&_binary_java_lang_String_class_start,
|
||||||
|
@ -2,7 +2,11 @@ CLASS_PATH = \
|
|||||||
example/DreamcastVideo2.class.o \
|
example/DreamcastVideo2.class.o \
|
||||||
example/DreamcastVideo.class.o \
|
example/DreamcastVideo.class.o \
|
||||||
java/io/PrintStream.class.o \
|
java/io/PrintStream.class.o \
|
||||||
|
java/lang/DecimalDigits.class.o \
|
||||||
|
java/lang/Double.class.o \
|
||||||
|
java/lang/Float.class.o \
|
||||||
java/lang/Integer.class.o \
|
java/lang/Integer.class.o \
|
||||||
|
java/lang/Long.class.o \
|
||||||
java/lang/Math.class.o \
|
java/lang/Math.class.o \
|
||||||
java/lang/Object.class.o \
|
java/lang/Object.class.o \
|
||||||
java/lang/String.class.o \
|
java/lang/String.class.o \
|
||||||
|
@ -12,6 +12,38 @@ public class PrintStream
|
|||||||
|
|
||||||
public static native void write(byte[] buf);
|
public static native void write(byte[] buf);
|
||||||
|
|
||||||
|
public static void write(String s) {
|
||||||
|
write(s.getBytes());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void print(byte[] buf) {
|
||||||
|
write(buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void print(boolean b) {
|
||||||
|
write(String.valueOf(b));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void print(int i) {
|
||||||
|
write(String.valueOf(i));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void print(long l) {
|
||||||
|
write(String.valueOf(l));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void print(float f) {
|
||||||
|
write(String.valueOf(f));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void print(double d) {
|
||||||
|
write(String.valueOf(d));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void print(Object obj) {
|
||||||
|
write(String.valueOf(obj));
|
||||||
|
}
|
||||||
|
|
||||||
public void println() {
|
public void println() {
|
||||||
write(newline);
|
write(newline);
|
||||||
}
|
}
|
||||||
@ -21,25 +53,33 @@ public class PrintStream
|
|||||||
write(newline);
|
write(newline);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void println(String s) {
|
public void println(boolean b) {
|
||||||
write(s.getBytes());
|
write(String.valueOf(b));
|
||||||
write(newline);
|
write(newline);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void println(int n) {
|
public void println(int i) {
|
||||||
write(Integer.toString(n).getBytes());
|
write(String.valueOf(i));
|
||||||
write(newline);
|
write(newline);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void print(byte[] buf) {
|
public void println(long l) {
|
||||||
write(buf);
|
write(String.valueOf(l));
|
||||||
|
write(newline);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void print(String s) {
|
public void println(float f) {
|
||||||
write(s.getBytes());
|
write(String.valueOf(f));
|
||||||
|
write(newline);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void print(int n) {
|
public void println(double d) {
|
||||||
write(Integer.toString(n).getBytes());
|
write(String.valueOf(d));
|
||||||
|
write(newline);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void println(Object obj) {
|
||||||
|
write(String.valueOf(obj));
|
||||||
|
write(newline);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
15
java/lang/DecimalDigits.class.h
Normal file
15
java/lang/DecimalDigits.class.h
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern C {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern uint32_t _binary_java_lang_DecimalDigits_class_start __asm("_binary_java_lang_DecimalDigits_class_start");
|
||||||
|
extern uint32_t _binary_java_lang_DecimalDigits_class_end __asm("_binary_java_lang_DecimalDigits_class_end");
|
||||||
|
extern uint32_t _binary_java_lang_DecimalDigits_class_size __asm("_binary_java_lang_DecimalDigits_class_size");
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
16
java/lang/DecimalDigits.java
Normal file
16
java/lang/DecimalDigits.java
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
package java.lang;
|
||||||
|
|
||||||
|
class DecimalDigits {
|
||||||
|
public static final short[] DIGITS;
|
||||||
|
static {
|
||||||
|
short[] digits = new short[100];
|
||||||
|
for (int h = 0; h < 10; h++) {
|
||||||
|
int high = (h + '0') << 8;
|
||||||
|
for (int l = 0; l < 10; l++) {
|
||||||
|
int low = l + '0';
|
||||||
|
digits[h * 10 + l] = (short)(high | low);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
DIGITS = digits;
|
||||||
|
}
|
||||||
|
}
|
15
java/lang/Double.class.h
Normal file
15
java/lang/Double.class.h
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern C {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern uint32_t _binary_java_lang_Double_class_start __asm("_binary_java_lang_Double_class_start");
|
||||||
|
extern uint32_t _binary_java_lang_Double_class_end __asm("_binary_java_lang_Double_class_end");
|
||||||
|
extern uint32_t _binary_java_lang_Double_class_size __asm("_binary_java_lang_Double_class_size");
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
7
java/lang/Double.java
Normal file
7
java/lang/Double.java
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
package java.lang;
|
||||||
|
|
||||||
|
public class Double {
|
||||||
|
public static String toString(double d) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
15
java/lang/Float.class.h
Normal file
15
java/lang/Float.class.h
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern C {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern uint32_t _binary_java_lang_Float_class_start __asm("_binary_java_lang_Float_class_start");
|
||||||
|
extern uint32_t _binary_java_lang_Float_class_end __asm("_binary_java_lang_Float_class_end");
|
||||||
|
extern uint32_t _binary_java_lang_Float_class_size __asm("_binary_java_lang_Float_class_size");
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
7
java/lang/Float.java
Normal file
7
java/lang/Float.java
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
package java.lang;
|
||||||
|
|
||||||
|
public class Float {
|
||||||
|
public static String toString(float f) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
@ -1,19 +1,8 @@
|
|||||||
package java.lang;
|
package java.lang;
|
||||||
|
|
||||||
public class Integer {
|
import java.lang.DecimalDigits;
|
||||||
public static final short[] DIGITS;
|
|
||||||
static {
|
|
||||||
short[] digits = new short[100];
|
|
||||||
for (int h = 0; h < 10; h++) {
|
|
||||||
int high = (h + '0') << 8;
|
|
||||||
for (int l = 0; l < 10; l++) {
|
|
||||||
int low = l + '0';
|
|
||||||
digits[h * 10 + l] = (short)(high | low);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
DIGITS = digits;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
public class Integer {
|
||||||
public static int stringSize(int n) {
|
public static int stringSize(int n) {
|
||||||
int sign_digits = 0;
|
int sign_digits = 0;
|
||||||
if (n < 0) {
|
if (n < 0) {
|
||||||
@ -46,7 +35,7 @@ public class Integer {
|
|||||||
pos -= 2;
|
pos -= 2;
|
||||||
int mod = n - (div * 100);
|
int mod = n - (div * 100);
|
||||||
|
|
||||||
short digits = DIGITS[mod];
|
short digits = DecimalDigits.DIGITS[mod];
|
||||||
buf[pos] = (byte)(digits >> 8);
|
buf[pos] = (byte)(digits >> 8);
|
||||||
buf[pos+1] = (byte)(digits);
|
buf[pos+1] = (byte)(digits);
|
||||||
|
|
||||||
|
15
java/lang/Long.class.h
Normal file
15
java/lang/Long.class.h
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern C {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern uint32_t _binary_java_lang_Long_class_start __asm("_binary_java_lang_Long_class_start");
|
||||||
|
extern uint32_t _binary_java_lang_Long_class_end __asm("_binary_java_lang_Long_class_end");
|
||||||
|
extern uint32_t _binary_java_lang_Long_class_size __asm("_binary_java_lang_Long_class_size");
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
56
java/lang/Long.java
Normal file
56
java/lang/Long.java
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
package java.lang;
|
||||||
|
|
||||||
|
import java.lang.DecimalDigits;
|
||||||
|
|
||||||
|
public class Long {
|
||||||
|
public static int stringSize(long n) {
|
||||||
|
int sign_digits = 0;
|
||||||
|
if (n < 0) {
|
||||||
|
sign_digits = 1;
|
||||||
|
n = -n;
|
||||||
|
}
|
||||||
|
int digits = 1;
|
||||||
|
int cmp = 10;
|
||||||
|
for (int i = 0; i < 18; i++) {
|
||||||
|
if (n < cmp)
|
||||||
|
return digits + sign_digits;
|
||||||
|
digits += 1;
|
||||||
|
cmp *= 10;
|
||||||
|
}
|
||||||
|
return 19 + sign_digits;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String toString(long n) {
|
||||||
|
int pos = stringSize(n);
|
||||||
|
byte[] buf = new byte[pos];
|
||||||
|
buf[0] = (char)'0';
|
||||||
|
|
||||||
|
boolean sign = n < 0;
|
||||||
|
if (sign) {
|
||||||
|
n = -n;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (n >= 10) {
|
||||||
|
long div = n / 100;
|
||||||
|
pos -= 2;
|
||||||
|
long mod = n - (div * 100);
|
||||||
|
|
||||||
|
short digits = DecimalDigits.DIGITS[(int)mod];
|
||||||
|
buf[pos] = (byte)(digits >> 8);
|
||||||
|
buf[pos+1] = (byte)(digits);
|
||||||
|
|
||||||
|
n = div;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (n != 0) {
|
||||||
|
pos -= 1;
|
||||||
|
buf[pos] = (byte)('0' + n);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sign) {
|
||||||
|
pos -= 1;
|
||||||
|
buf[pos] = (byte)('-');
|
||||||
|
}
|
||||||
|
return new String(buf);
|
||||||
|
}
|
||||||
|
}
|
@ -2,4 +2,8 @@ package java.lang;
|
|||||||
|
|
||||||
public class Object {
|
public class Object {
|
||||||
public Object() {}
|
public Object() {}
|
||||||
|
|
||||||
|
public String toString() {
|
||||||
|
return "Object";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,4 +18,28 @@ public class String {
|
|||||||
public byte[] getBytes() {
|
public byte[] getBytes() {
|
||||||
return this.value;
|
return this.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String valueOf(Object obj) {
|
||||||
|
return (obj == null) ? "null" : obj.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String valueOf(boolean b) {
|
||||||
|
return b ? "true" : "false";
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String valueOf(int i) {
|
||||||
|
return Integer.toString(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String valueOf(long l) {
|
||||||
|
return Long.toString(l);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String valueOf(float f) {
|
||||||
|
return Float.toString(f);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String valueOf(double d) {
|
||||||
|
return Double.toString(d);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
8
p/TestPrintLong.java
Normal file
8
p/TestPrintLong.java
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
package p;
|
||||||
|
|
||||||
|
class TestPrintLong {
|
||||||
|
public static void main() {
|
||||||
|
long l = -7273144631380624066l;
|
||||||
|
System.out.println(l);
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user