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     }