1 cananian 1.1 // HCodeFactory.java, created Sat Sep 12 18:13:40 1998 by cananian 2 cananian 1.4 // Copyright (C) 1998 C. Scott Ananian <cananian@alumni.princeton.edu> 3 cananian 1.4 // Licensed under the terms of the GNU GPL; see COPYING for details. 4 cananian 1.1 package harpoon.ClassFile; 5 cananian 1.1 6 cananian 1.1 /** 7 cananian 1.1 * An <code>HCodeFactory</code> makes an <code>HCode</code> from an 8 cananian 1.1 * <code>HMethod</code>. For example, an 9 cananian 1.4.2.4 * <code>HCodeFactory</code> may make an <code>harpoon.IR.Quads.QuadSSI</code> 10 cananian 1.2 * from a <code>harpoon.IR.Bytecode.Code</code>, calling 11 cananian 1.1 * <code>HMethod.getCode("bytecode")</code> to get the source representation 12 cananian 1.1 * for the conversion. The <code>HCodeFactory</code> should call 13 cananian 1.1 * <code>HMethod.putCode(this.getCodeName())</code> after conversion 14 cananian 1.1 * to cache the result. 15 cananian 1.1 * 16 cananian 1.1 * @author C. Scott Ananian <cananian@alumni.princeton.edu> 17 cananian 1.5 * @version $Id: HCodeFactory.java,v 1.5 2002/02/25 21:03:03 cananian Exp $ 18 cananian 1.1 */ 19 cananian 1.1 20 cananian 1.1 public interface HCodeFactory { 21 cananian 1.1 /** Make an <code>HCode</code> from an <code>HMethod</code>. 22 cananian 1.4.2.3 * <p> 23 cananian 1.3 * <code>convert</code> is allowed to return null if the requested 24 cananian 1.3 * conversion is impossible; typically this is because it's attempt 25 cananian 1.4.2.3 * to convert a source representation failed -- for 26 cananian 1.3 * example, because <code>m</code> is a native method. 27 cananian 1.3 */ 28 cananian 1.1 public HCode convert(HMethod m); 29 cananian 1.1 /** Returns a string naming the type of the <code>HCode</code> 30 cananian 1.1 * that this factory produces. <p> 31 cananian 1.1 * <code>this.getCodeName()</code> should equal 32 cananian 1.1 * <code>this.convert(m).getName()</code> for every 33 cananian 1.1 * <code>HMethod m</code>. */ 34 cananian 1.1 public String getCodeName(); 35 cananian 1.4.2.3 /** 36 cananian 1.4.2.3 * Removes representation of method <code>m</code> from all caches 37 cananian 1.4.2.3 * in this factory and its parents. 38 cananian 1.4.2.3 */ 39 cananian 1.4.2.3 public void clear(HMethod m); 40 cananian 1.1 }