func checkArrayCopy(src, dest *rtc.Obj) bool { srcClass := src.Class() destClass := dest.Class() if !srcClass.IsArray() || !destClass.IsArray() { return false } if srcClass.IsPrimitiveArray() || destClass.IsPrimitiveArray() { return srcClass == destClass } return true }
func (self *Thread) HandleUncaughtException(ex *rtc.Obj) { self.stack.clear() sysClass := rtc.BootLoader().LoadClass("java/lang/System") sysErr := sysClass.GetStaticValue("out", "Ljava/io/PrintStream;").(*rtc.Obj) printStackTrace := ex.Class().GetInstanceMethod("printStackTrace", "(Ljava/io/PrintStream;)V") // call ex.printStackTrace(System.err) newFrame := self.NewFrame(printStackTrace) vars := newFrame.localVars vars.SetRef(0, ex) vars.SetRef(1, sysErr) self.PushFrame(newFrame) // // printString := sysErr.Class().GetInstanceMethod("print", "(Ljava/lang/String;)V") // newFrame = self.NewFrame(printString) // vars = newFrame.localVars // vars.SetRef(0, sysErr) // vars.SetRef(1, JString("Exception in thread \"main\" ", newFrame)) // self.PushFrame(newFrame) }
// todo func isAppClassLoader(loader *rtc.Obj) bool { return loader.Class().Name() == "sun/misc/Launcher$AppClassLoader" }