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 }