1 cananian 1.1.2.1 // INObject.java, created Thu Dec 31 17:25:09 1998 by cananian 2 cananian 1.1.2.4 // Copyright (C) 1998 C. Scott Ananian <cananian@alumni.princeton.edu> 3 cananian 1.1.2.4 // 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.HMethod; 8 cananian 1.1.2.1 9 cananian 1.1.2.1 /** 10 cananian 1.1.2.1 * <code>INObject</code> provides implementations of the native methods in 11 cananian 1.1.2.1 * <code>java.lang.Object</code>. 12 cananian 1.1.2.1 * 13 cananian 1.1.2.1 * @author C. Scott Ananian <cananian@alumni.princeton.edu> 14 cananian 1.2 * @version $Id: INObject.java,v 1.2 2002/02/25 21:05:46 cananian Exp $ 15 cananian 1.1.2.1 */ 16 cananian 1.1.2.6 public class INObject { 17 cananian 1.1.2.1 static final void register(StaticState ss) { 18 cananian 1.1.2.6 ss.register(_getClass_(ss)); 19 cananian 1.1.2.6 ss.register(_hashCode_(ss)); 20 cananian 1.1.2.6 ss.register(_clone_(ss)); 21 cananian 1.1.2.5 // JDK 1.2 only 22 cananian 1.1.2.6 try { ss.register(registerNatives(ss)); } catch (NoSuchMethodError e){} 23 cananian 1.1.2.1 } 24 cananian 1.1.2.1 // Object.getClass() 25 cananian 1.1.2.6 private static final NativeMethod _getClass_(StaticState ss0) { 26 cananian 1.1.2.6 final HMethod hm = ss0.HCobject.getMethod("getClass", new HClass[0]); 27 cananian 1.1.2.1 return new NativeMethod() { 28 cananian 1.1.2.1 HMethod getMethod() { return hm; } 29 cananian 1.1.2.1 Object invoke(StaticState ss, Object[] params) { 30 cananian 1.1.2.3 Ref obj = (Ref) params[0]; 31 cananian 1.1.2.1 return INClass.forClass(ss, obj.type); 32 cananian 1.1.2.1 } 33 cananian 1.1.2.1 }; 34 cananian 1.1.2.1 } 35 cananian 1.1.2.1 // Object.hashCode() 36 cananian 1.1.2.6 private static final NativeMethod _hashCode_(StaticState ss0) { 37 cananian 1.1.2.6 final HMethod hm = ss0.HCobject.getMethod("hashCode", new HClass[0]); 38 cananian 1.1.2.1 return new NativeMethod() { 39 cananian 1.1.2.1 HMethod getMethod() { return hm; } 40 cananian 1.1.2.1 Object invoke(StaticState ss, Object[] params) { 41 cananian 1.1.2.3 Ref obj = (Ref) params[0]; 42 cananian 1.1.2.1 return new Integer(obj.hashCode()); 43 cananian 1.1.2.1 } 44 cananian 1.1.2.1 }; 45 cananian 1.1.2.1 } 46 cananian 1.1.2.1 // Object.clone() 47 cananian 1.1.2.6 private static final NativeMethod _clone_(StaticState ss0) { 48 cananian 1.1.2.6 final HMethod hm = ss0.HCobject.getMethod("clone", new HClass[0]); 49 cananian 1.1.2.1 return new NativeMethod() { 50 cananian 1.1.2.1 HMethod getMethod() { return hm; } 51 cananian 1.1.2.1 Object invoke(StaticState ss, Object[] params) { 52 cananian 1.1.2.3 Ref obj = (Ref) params[0]; 53 cananian 1.1.2.1 // throw exception if doesn't implement Cloneable 54 cananian 1.1.2.6 if (!obj.type.isInstanceOf(ss.HCcloneable)) { 55 cananian 1.1.2.6 obj = ss.makeThrowable(ss.HCclonenotsupportedE, 56 cananian 1.1.2.1 obj.type.toString()); 57 cananian 1.1.2.3 throw new InterpretedThrowable((ObjectRef)obj, ss); 58 cananian 1.1.2.1 } 59 cananian 1.1.2.1 return obj.clone(); 60 cananian 1.1.2.1 } 61 cananian 1.1.2.1 }; 62 cananian 1.1.2.5 } 63 cananian 1.1.2.5 // JDK 1.2 only: Object.registerNatives() 64 cananian 1.1.2.6 private static final NativeMethod registerNatives(StaticState ss0) { 65 cananian 1.1.2.5 final HMethod hm = 66 cananian 1.1.2.6 ss0.HCobject.getMethod("registerNatives",new HClass[0]); 67 cananian 1.1.2.5 return new NullNativeMethod(hm); 68 cananian 1.1.2.1 } 69 cananian 1.2 }