CLDC 8: Object

This commit is contained in:
Zack Buhman 2025-01-13 21:53:13 -06:00
parent ffb73cefec
commit 33645983ba
5 changed files with 29 additions and 12 deletions

View File

@ -118,19 +118,19 @@ const static struct native_method native_method[] = {
},
{
.class_name = "java/lang/Class",
.method_name = "getClassName",
.method_name = "_getName",
.method_descriptor = "()Ljava/lang/String;",
.func = native_java_lang_class_getclassname_1,
.func = native_java_lang_class_getname_1,
},
{
.class_name = "java/lang/Object",
.method_name = "getClass",
.method_name = "_getClass",
.method_descriptor = "()Ljava/lang/Class;",
.func = native_java_lang_object_getclass_1,
},
{
.class_name = "java/lang/Object",
.method_name = "hashCode",
.method_name = "_hashCode",
.method_descriptor = "()I",
.func = native_java_lang_object_hashcode_1,
},

View File

@ -2,7 +2,7 @@
#include "printf.h"
#include "vm_instance.h"
void native_java_lang_class_getclassname_1(struct vm * vm, uint32_t * args)
void native_java_lang_class_getname_1(struct vm * vm, uint32_t * args)
{
struct objectref * objectref = (struct objectref *)args[0];
assert(objectref != nullptr);

View File

@ -4,4 +4,4 @@
#include "frame.h"
void native_java_lang_class_getclassname_1(struct vm * vm, uint32_t * args);
void native_java_lang_class_getname_1(struct vm * vm, uint32_t * args);

View File

@ -1,17 +1,17 @@
package java.lang;
public class Class {
public final class Class<T> {
private Object object;
private String name;
private Class() {
}
private native String getClassName();
private native String _getName();
public String getName() {
if (this.name == null) {
this.name = getClassName();
this.name = _getName();
}
return this.name;
}

View File

@ -3,11 +3,28 @@ package java.lang;
public class Object {
public Object() {}
public final native Class getClass();
protected Object clone()
throws CloneNotSupportedException {
throw new CloneNotSupportedException();
}
public native int hashCode();
public boolean equals(Object obj) {
return this == obj;
}
private final native Class<?> _getClass();
public final Class<?> getClass() {
return _getClass();
}
private native int _hashCode();
public int hashCode() {
return _hashCode();
}
public String toString() {
return getClass().getName() + "@" + Integer.toString(hashCode());
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
}