// private static native long getEntryCrc(long jzentry); // (J)J func getEntryCrc(frame *rtda.Frame) { entry := _getEntryPop(frame) crc := int64(entry.CRC32) stack := frame.OperandStack() stack.PushLong(crc) }
// private static native int getEntryFlag(long jzentry); // (J)I func getEntryFlag(frame *rtda.Frame) { entry := _getEntryPop(frame) flag := int32(entry.Flags) stack := frame.OperandStack() stack.PushInt(flag) }
// private static native long getEntrySize(long jzentry); // (J)J func getEntrySize(frame *rtda.Frame) { entry := _getEntryPop(frame) size := int64(entry.UncompressedSize64) stack := frame.OperandStack() stack.PushLong(size) }
func (self *frem) Execute(frame *rtda.Frame) { stack := frame.OperandStack() v2 := stack.PopFloat() v1 := stack.PopFloat() result := float32(math.Mod(float64(v1), float64(v2))) // todo stack.PushFloat(result) }
func (self *fadd) Execute(frame *rtda.Frame) { stack := frame.OperandStack() v2 := stack.PopFloat() v1 := stack.PopFloat() result := v1 + v2 stack.PushFloat(result) }
//private native int socketRead0(FileDescriptor fd, byte b[], int off, int len, int timeout) // java/net/SocketInputStream~socketRead0~(Ljava/io/FileDescriptor;[BIII)I func sis_socketRead0(frame *rtda.Frame) { vars := frame.LocalVars() //this := vars.GetThis() fd := vars.GetRef(1) buf := vars.GetRef(2) off := vars.GetInt(3) _len := vars.GetInt(4) conn := fd.Extra().(net.Conn) _timeout := vars.GetInt(5) if _timeout > 0 { conn.SetDeadline(time.Now().Add(time.Duration(_timeout) * time.Millisecond)) } goBuf := buf.GoBytes() goBuf = goBuf[off : off+_len] n, err := conn.Read(goBuf) if err == nil || n > 0 || err == io.EOF { frame.OperandStack().PushInt(int32(n)) } else { // todo panic(err.Error()) //frame.Thread().ThrowIOException(err.Error()) } }
// public native int addressSize(); // ()I func addressSize(frame *rtda.Frame) { // vars := frame.LocalVars() // vars.GetRef(0) // this stack := frame.OperandStack() stack.PushInt(8) // todo unsafe.Sizeof(int) }
func (self *dadd) Execute(frame *rtda.Frame) { stack := frame.OperandStack() v1 := stack.PopDouble() v2 := stack.PopDouble() result := v1 + v2 stack.PushDouble(result) }
// public native int getModifiers(); // ()I func getModifiers(frame *rtda.Frame) { class := _popClass(frame) modifiers := class.GetAccessFlags() stack := frame.OperandStack() stack.PushInt(int32(modifiers)) }
func (self *ixor) Execute(frame *rtda.Frame) { stack := frame.OperandStack() v1 := stack.PopInt() v2 := stack.PopInt() result := v1 ^ v2 stack.PushInt(result) }
//(Ljava/lang/String;)[Ljava/net/InetAddress; func i6di_lookupAllHostAddr(frame *rtda.Frame) { vars := frame.LocalVars() host := rtda.GoString(vars.GetRef(1)) address, _ := net.LookupHost(host) constructorCount := uint(len(address)) inetAddress := rtc.BootLoader().LoadClass("java/net/InetAddress") inetAddressArr := inetAddress.NewArray(constructorCount) stack := frame.OperandStack() stack.PushRef(inetAddressArr) //TODO //getByName descriptor:(Ljava/lang/String;)Ljava/net/InetAddress; //if constructorCount > 0 { // thread := frame.Thread() // constructorObjs := inetAddressArr.Refs() // inetAddressGetByNameMethod := inetAddress.GetStaticMethod("getByName", "(Ljava/lang/String;)Ljava/net/InetAddress;") // fmt.Println(constructorObjs[0]) // fmt.Println(inetAddressGetByNameMethod) // fmt.Println(thread) // thread.InvokeMethodWithShim(inetAddressGetByNameMethod, []Any{ // constructorObjs[0], // rtda.JString(host), // }) //} }
func (self *lxor) Execute(frame *rtda.Frame) { stack := frame.OperandStack() v1 := stack.PopLong() v2 := stack.PopLong() result := v1 ^ v2 stack.PushLong(result) }
// private static native String getVersion0(); // ()Ljava/lang/String; func getVersion0(frame *rtda.Frame) { // todo version := rtda.JString("0") stack := frame.OperandStack() stack.PushRef(version) }
func (self *swap) Execute(frame *rtda.Frame) { stack := frame.OperandStack() val1 := stack.PopSlot() val2 := stack.PopSlot() stack.PushSlot(val1) stack.PushSlot(val2) }
func (self *drem) Execute(frame *rtda.Frame) { stack := frame.OperandStack() v2 := stack.PopDouble() v1 := stack.PopDouble() result := math.Mod(v1, v2) // todo stack.PushDouble(result) }
// public native long getStartupTime(); // ()J func getStartupTime(frame *rtda.Frame) { // todo startupTime := int64(0) stack := frame.OperandStack() stack.PushLong(startupTime) }
// private native long getUptime0(); // ()J func getUptime0(frame *rtda.Frame) { // todo uptime := int64(0) stack := frame.OperandStack() stack.PushLong(uptime) }
// private static native int findSignal(String string); // (Ljava/lang/String;)I func findSignal(frame *rtda.Frame) { vars := frame.LocalVars() vars.GetRef(0) // name stack := frame.OperandStack() stack.PushInt(0) // todo }
// Due to oddities SO_REUSEADDR on windows reuse is ignored // private static native int socket0(boolean preferIPv6, boolean stream, boolean reuse); func net_socket0(frame *rtda.Frame) { //vars := frame.LocalVars() //preferIPv6 := vars.GetBoolean(0) //stream := vars.GetBoolean(1) //reuse := vars.GetBoolean(2) frame.OperandStack().PushInt(100) }
// public static native Class<?> getCallerClass(int i); // (I)Ljava/lang/Class; func getCallerClass(frame *rtda.Frame) { // top0 is sun/reflect/Reflection // top1 is the caller of getCallerClass() // top2 is the caller of method callerFrame := frame.Thread().TopFrameN(2) callerClass := callerFrame.Method().Class().JClass() frame.OperandStack().PushRef(callerClass) }
func (self *ishl) Execute(frame *rtda.Frame) { stack := frame.OperandStack() v2 := stack.PopInt() v1 := stack.PopInt() s := uint32(v2) & 0x1f result := v1 << s stack.PushInt(result) }
// public native Class<?> getComponentType(); // ()Ljava/lang/Class; func getComponentType(frame *rtda.Frame) { class := _popClass(frame) componentClass := class.ComponentClass() componentClassObj := componentClass.JClass() stack := frame.OperandStack() stack.PushRef(componentClassObj) }
// private native String getName0(); // ()Ljava/lang/String; func getName0(frame *rtda.Frame) { class := _popClass(frame) name := class.NameJlsFormat() nameObj := rtda.JString(name) stack := frame.OperandStack() stack.PushRef(nameObj) }
// public final native Class<?> getClass(); // ()Ljava/lang/Class; func getClass(frame *rtda.Frame) { vars := frame.LocalVars() this := vars.GetThis() class := this.Class().JClass() stack := frame.OperandStack() stack.PushRef(class) }
func (self *iushr) Execute(frame *rtda.Frame) { stack := frame.OperandStack() v2 := stack.PopInt() v1 := stack.PopInt() s := uint32(v2) & 0x1f result := int32(uint32(v1) >> s) stack.PushInt(result) }
// public native long freeMemory(); // ()J func freeMemory(frame *rtda.Frame) { var memStats runtime.MemStats runtime.ReadMemStats(&memStats) frees := memStats.Frees stack := frame.OperandStack() stack.PushLong(int64(frees)) }
// protected native Object clone() throws CloneNotSupportedException; // ()Ljava/lang/Object; func clone(frame *rtda.Frame) { vars := frame.LocalVars() this := vars.GetThis() // todo stack := frame.OperandStack() stack.PushRef(this.Clone()) }
func (self *lushr) Execute(frame *rtda.Frame) { stack := frame.OperandStack() v2 := stack.PopInt() v1 := stack.PopLong() s := uint32(v2) & 0x3f result := int64(uint64(v1) >> s) stack.PushLong(result) }
// public native int hashCode(); // ()I func hashCode(frame *rtda.Frame) { vars := frame.LocalVars() this := vars.GetThis() hash := int32(uintptr(unsafe.Pointer(this))) stack := frame.OperandStack() stack.PushInt(hash) }
// private static native int getEntryMethod(long jzentry); // (J)I func getEntryMethod(frame *rtda.Frame) { // entry := _getEntryPop(frame) // method := int32(entry.Method) // todo stack := frame.OperandStack() stack.PushInt(0) }