// public static native FileSystem getFileSystem() // ()Ljava/io/FileSystem; func getFileSystem(frame *rtda.Frame) { thread := frame.Thread() unixFsClass := frame.ClassLoader().LoadClass("java/io/UnixFileSystem") if unixFsClass.InitializationNotStarted() { frame.SetNextPC(thread.PC()) // undo getFileSystem thread.InitClass(unixFsClass) return } stack := frame.OperandStack() unixFsObj := unixFsClass.NewObj() stack.PushRef(unixFsObj) // call <init> stack.PushRef(unixFsObj) // this constructor := unixFsClass.GetDefaultConstructor() thread.InvokeMethod(constructor) }
// private static native Class<?> forName0(String name, boolean initialize, // ClassLoader loader, // Class<?> caller) // throws ClassNotFoundException; // (Ljava/lang/String;ZLjava/lang/ClassLoader;Ljava/lang/Class;)Ljava/lang/Class; func forName0(frame *rtda.Frame) { vars := frame.LocalVars() jName := vars.GetRef(0) initialize := vars.GetBoolean(1) //jLoader := vars.GetRef(2) goName := rtda.GoString(jName) goName = jutil.ReplaceAll(goName, ".", "/") goClass := frame.ClassLoader().LoadClass(goName) jClass := goClass.JClass() if initialize && goClass.InitializationNotStarted() { // undo forName0 thread := frame.Thread() frame.SetNextPC(thread.PC()) // init class thread.InitClass(goClass) } else { stack := frame.OperandStack() stack.PushRef(jClass) } }
func (self *anewarray) Execute(frame *rtda.Frame) { cp := frame.ConstantPool() kClass := cp.GetConstant(self.index).(*rtc.ConstantClass) componentClass := kClass.Class() if componentClass.InitializationNotStarted() { thread := frame.Thread() frame.SetNextPC(thread.PC()) // undo anewarray thread.InitClass(componentClass) return } stack := frame.OperandStack() count := stack.PopInt() if count < 0 { frame.Thread().ThrowNegativeArraySizeException() } else { arr := rtc.NewRefArray(componentClass, uint(count)) stack.PushRef(arr) } }
func branch(frame *rtda.Frame, offset int) { nextPC := frame.Thread().PC() + offset frame.SetNextPC(nextPC) }