1 duncan   1.1.2.5 // InterpreterCachingCodeFactory.java, created Sun May  9 20:01:15 1999 by duncan 
 2 duncan   1.1.2.5 // Copyright (C) 1999 Duncan Bryce <duncan@lcs.mit.edu>
 3 duncan   1.1.2.1 // Licensed under the terms of the GNU GPL; see COPYING for details.
 4 duncan   1.1.2.1 package harpoon.Interpret.Tree;
 5 duncan   1.1.2.1 
 6 duncan   1.1.2.1 import harpoon.ClassFile.CachingCodeFactory;
 7 duncan   1.1.2.1 import harpoon.ClassFile.HCode;
 8 duncan   1.1.2.1 import harpoon.ClassFile.HCodeFactory;
 9 duncan   1.1.2.1 import harpoon.ClassFile.HMethod;
10 duncan   1.1.2.1 
11 duncan   1.1.2.1 
12 duncan   1.1.2.5 /** 
13 duncan   1.1.2.5  * A code factory designed specifically for use by the Tree 
14 duncan   1.1.2.5  * interpreter.  Probably shouldn't be used for anything else.  
15 duncan   1.1.2.5  * The main feature of the <code>InterpreterCachingCodeFactory</code> class
16 duncan   1.1.2.5  * is that its <code>convert()</code> chooses between 2 code factories
17 duncan   1.1.2.5  * based on which method it is converting.  For class initializers, 
18 duncan   1.1.2.5  * it uses a non-caching, non-optimizing codefactory to save memory.  
19 duncan   1.1.2.5  * For all other methods, it uses a caching, optimizing code factory. 
20 duncan   1.1.2.5  *
21 cananian 1.1.2.6  * @author Duncan Bryce <duncan@lcs.mit.edu>
22 cananian 1.2      * @version $Id: InterpreterCachingCodeFactory.java,v 1.2 2002/02/25 21:05:57 cananian Exp $
23 duncan   1.1.2.1  */
24 duncan   1.1.2.5 class InterpreterCachingCodeFactory implements HCodeFactory { 
25 duncan   1.1.2.2     private HCodeFactory factory;
26 duncan   1.1.2.2     private HCodeFactory optimizingFactory;
27 duncan   1.1.2.2 
28 duncan   1.1.2.2     public InterpreterCachingCodeFactory
29 duncan   1.1.2.2         (HCodeFactory factory, HCodeFactory optimizingFactory) {
30 duncan   1.1.2.2         this.factory           = factory;
31 duncan   1.1.2.2         this.optimizingFactory = new CachingCodeFactory(optimizingFactory);
32 duncan   1.1.2.1     }
33 duncan   1.1.2.1 
34 duncan   1.1.2.5     /** Convert a method to an <code>HCode</code>.  If the method is 
35 duncan   1.1.2.5      *  a class initializer, it is neither optimized, nor cached.  
36 duncan   1.1.2.5      *  However, all other methods are both optimized (by this class's
37 duncan   1.1.2.5      *  optimizing code factory) and cached. 
38 duncan   1.1.2.5      */
39 duncan   1.1.2.1     public HCode convert(HMethod m) {
40 duncan   1.1.2.1         HCode hc;
41 duncan   1.1.2.1 
42 duncan   1.1.2.1         if (m.getName().equals("<clinit>")) 
43 duncan   1.1.2.2             hc = factory.convert(m);        
44 duncan   1.1.2.1         else 
45 duncan   1.1.2.2             hc = optimizingFactory.convert(m);
46 duncan   1.1.2.1         
47 duncan   1.1.2.1         return hc;
48 duncan   1.1.2.2     }
49 duncan   1.1.2.2 
50 duncan   1.1.2.2     public String getCodeName() { return optimizingFactory.getCodeName(); } 
51 duncan   1.1.2.2 
52 duncan   1.1.2.5     public void clear(HMethod m) { this.optimizingFactory.clear(m); }
53 cananian 1.2     }