1 cananian 1.1.2.1 // INRuntime.java, created Fri Jan 1 12:17:30 1999 by cananian 2 cananian 1.1.2.3 // Copyright (C) 1998 C. Scott Ananian <cananian@alumni.princeton.edu> 3 cananian 1.1.2.3 // Licensed under the terms of the GNU GPL; see COPYING for details. 4 cananian 1.1.2.1 package harpoon.Interpret.Quads; 5 cananian 1.1.2.1 6 cananian 1.1.2.2 import harpoon.ClassFile.HClass; 7 cananian 1.1.2.2 import harpoon.ClassFile.HField; 8 cananian 1.1.2.2 import harpoon.ClassFile.HMethod; 9 cananian 1.1.2.1 10 cananian 1.1.2.1 /** 11 cananian 1.1.2.1 * <code>INRuntime</code> provides implementations of the native methods in 12 cananian 1.1.2.1 * <code>java.lang.Runtime</code>. 13 cananian 1.1.2.1 * 14 cananian 1.1.2.1 * @author C. Scott Ananian <cananian@alumni.princeton.edu> 15 cananian 1.2 * @version $Id: INRuntime.java,v 1.2 2002/02/25 21:05:46 cananian Exp $ 16 cananian 1.1.2.1 */ 17 cananian 1.1.2.4 public class INRuntime { 18 cananian 1.1.2.1 static final void register(StaticState ss) { 19 cananian 1.1.2.5 ss.registerOverride(privateConstructor(ss)); 20 cananian 1.1.2.4 ss.register(gc(ss)); 21 cananian 1.1.2.5 try { // JDK 1.2 only 22 cananian 1.1.2.5 ss.register(runFinalization0(ss)); 23 cananian 1.1.2.5 } catch (NoSuchMethodError e) { // JDK 1.1 fallback. 24 cananian 1.1.2.5 ss.register(runFinalization(ss)); 25 cananian 1.1.2.5 } 26 cananian 1.1.2.4 ss.register(freeMemory(ss)); 27 cananian 1.1.2.4 ss.register(totalMemory(ss)); 28 cananian 1.1.2.1 } 29 cananian 1.1.2.1 // the runtime for the interpreter is identical to the current runtime. 30 cananian 1.1.2.4 private static final NativeMethod privateConstructor(StaticState ss0) { 31 cananian 1.1.2.4 final HMethod hm = ss0.HCruntime.getConstructor(new HClass[0]); 32 cananian 1.1.2.1 return new NativeMethod() { 33 cananian 1.1.2.1 HMethod getMethod() { return hm; } 34 cananian 1.1.2.1 Object invoke(StaticState ss, Object[] params) { 35 cananian 1.1.2.1 ObjectRef obj = (ObjectRef) params[0]; 36 cananian 1.1.2.1 obj.putClosure(Runtime.getRuntime()); 37 cananian 1.1.2.1 return null; 38 cananian 1.1.2.1 } 39 cananian 1.1.2.1 }; 40 cananian 1.1.2.1 } 41 cananian 1.1.2.4 private static final NativeMethod gc(StaticState ss0) { 42 cananian 1.1.2.4 final HMethod hm=ss0.HCruntime.getMethod("gc","()V"); 43 cananian 1.1.2.1 return new NativeMethod() { 44 cananian 1.1.2.1 HMethod getMethod() { return hm; } 45 cananian 1.1.2.1 Object invoke(StaticState ss, Object[] params) { 46 cananian 1.1.2.1 ObjectRef obj = (ObjectRef) params[0]; 47 cananian 1.1.2.1 Runtime r = (Runtime) obj.getClosure(); 48 cananian 1.1.2.1 r.gc(); 49 cananian 1.1.2.1 return null; 50 cananian 1.1.2.1 } 51 cananian 1.1.2.1 }; 52 cananian 1.1.2.1 } 53 cananian 1.1.2.4 private static final NativeMethod runFinalization(StaticState ss0) { 54 cananian 1.1.2.4 final HMethod hm=ss0.HCruntime.getMethod("runFinalization","()V"); 55 cananian 1.1.2.1 return new NativeMethod() { 56 cananian 1.1.2.1 HMethod getMethod() { return hm; } 57 cananian 1.1.2.1 Object invoke(StaticState ss, Object[] params) { 58 cananian 1.1.2.1 ObjectRef obj = (ObjectRef) params[0]; 59 cananian 1.1.2.1 Runtime r = (Runtime) obj.getClosure(); 60 cananian 1.1.2.1 r.runFinalization(); 61 cananian 1.1.2.1 return null; 62 cananian 1.1.2.5 } 63 cananian 1.1.2.5 }; 64 cananian 1.1.2.5 } 65 cananian 1.1.2.5 // JDK 1.2 stub 66 cananian 1.1.2.5 private static final NativeMethod runFinalization0(StaticState ss0) { 67 cananian 1.1.2.5 final HMethod hm=ss0.HCruntime.getMethod("runFinalization0","()V"); 68 cananian 1.1.2.5 return new NativeMethod() { 69 cananian 1.1.2.5 HMethod getMethod() { return hm; } 70 cananian 1.1.2.5 Object invoke(StaticState ss, Object[] params) { 71 cananian 1.1.2.5 return runFinalization(ss).invoke(ss, params); 72 cananian 1.1.2.1 } 73 cananian 1.1.2.1 }; 74 cananian 1.1.2.1 } 75 cananian 1.1.2.4 private static final NativeMethod freeMemory(StaticState ss0) { 76 cananian 1.1.2.4 final HMethod hm=ss0.HCruntime.getMethod("freeMemory","()J"); 77 cananian 1.1.2.1 return new NativeMethod() { 78 cananian 1.1.2.1 HMethod getMethod() { return hm; } 79 cananian 1.1.2.1 Object invoke(StaticState ss, Object[] params) { 80 cananian 1.1.2.1 ObjectRef obj = (ObjectRef) params[0]; 81 cananian 1.1.2.1 Runtime r = (Runtime) obj.getClosure(); 82 cananian 1.1.2.1 return new Long(r.freeMemory()); 83 cananian 1.1.2.1 } 84 cananian 1.1.2.1 }; 85 cananian 1.1.2.1 } 86 cananian 1.1.2.4 private static final NativeMethod totalMemory(StaticState ss0) { 87 cananian 1.1.2.4 final HMethod hm=ss0.HCruntime.getMethod("totalMemory","()J"); 88 cananian 1.1.2.1 return new NativeMethod() { 89 cananian 1.1.2.1 HMethod getMethod() { return hm; } 90 cananian 1.1.2.1 Object invoke(StaticState ss, Object[] params) { 91 cananian 1.1.2.1 ObjectRef obj = (ObjectRef) params[0]; 92 cananian 1.1.2.1 Runtime r = (Runtime) obj.getClosure(); 93 cananian 1.1.2.1 return new Long(r.totalMemory()); 94 cananian 1.1.2.1 } 95 cananian 1.1.2.1 }; 96 cananian 1.1.2.1 } 97 cananian 1.2 }