1 kkz 1.1.2.1 // ContBuilder.java, created Wed Nov 3 20:06:51 1999 by kkz 2 cananian 1.1.2.9 // Copyright (C) 1999 Karen K. Zee <kkz@alum.mit.edu> 3 kkz 1.1.2.1 // Licensed under the terms of the GNU GPL; see COPYING for details. 4 kkz 1.1.2.1 package harpoon.Analysis.ContBuilder; 5 kkz 1.1.2.1 6 kkz 1.1.2.1 import harpoon.Analysis.EnvBuilder.EnvBuilder; 7 kkz 1.1.2.1 import harpoon.Analysis.Quads.DeadCode; 8 cananian 1.1.2.7 import harpoon.ClassFile.CachingCodeFactory; 9 kkz 1.1.2.1 import harpoon.ClassFile.HClass; 10 kkz 1.1.2.1 import harpoon.ClassFile.HCode; 11 kkz 1.1.2.1 import harpoon.ClassFile.HConstructor; 12 kkz 1.1.2.1 import harpoon.ClassFile.HMethod; 13 kkz 1.1.2.1 import harpoon.IR.Quads.Code; 14 kkz 1.1.2.1 import harpoon.IR.Quads.CALL; 15 kkz 1.1.2.1 import harpoon.Temp.Temp; 16 kkz 1.1.2.1 import harpoon.Util.Util; 17 kkz 1.1.2.1 18 kkz 1.1.2.1 /** 19 kkz 1.1.2.1 * <code>ContBuilder</code> builds continuations for a given <code>CALL</code> 20 kkz 1.1.2.1 * using the <code>CALL</code>'s <code>HCode</code>, storing the 21 kkz 1.1.2.1 * <code>Code</code> for the continuation in the 22 cananian 1.1.2.7 * <code>CachingCodeFactory</code>. The generated <code>Code</code> is in 23 kkz 1.1.2.1 * <code>quad-no-ssa</code> form. 24 kkz 1.1.2.1 * 25 cananian 1.1.2.9 * @author Karen K. Zee <kkz@alum.mit.edu> 26 cananian 1.2 * @version $Id: ContBuilder.java,v 1.2 2002/02/25 20:56:16 cananian Exp $ 27 kkz 1.1.2.1 */ 28 kkz 1.1.2.1 public class ContBuilder { 29 cananian 1.1.2.7 protected final CachingCodeFactory ucf; 30 kkz 1.1.2.1 protected final HCode hc; 31 kkz 1.1.2.1 protected final CALL c; 32 kkz 1.1.2.1 protected final HClass env; 33 kkz 1.1.2.1 protected final Temp[] live; 34 kkz 1.1.2.1 35 kkz 1.1.2.1 /** Creates a <code>ContBuilder</code> for the designated 36 kkz 1.1.2.1 * <code>CALL</code>, given the <code>HCode</code> from which it came. 37 kkz 1.1.2.1 * Requires that the <code>HCode</code> be <code>quad-no-ssa</code>. 38 kkz 1.1.2.1 */ 39 cananian 1.1.2.7 public ContBuilder(CachingCodeFactory ucf, HCode hc, CALL c, HClass env, 40 kkz 1.1.2.1 Temp[] live) { 41 kkz 1.1.2.1 this.ucf = ucf; 42 kkz 1.1.2.1 this.hc = hc; 43 kkz 1.1.2.1 this.c = c; 44 kkz 1.1.2.1 this.env = env; 45 kkz 1.1.2.1 this.live = live; 46 kkz 1.1.2.1 } 47 kkz 1.1.2.1 48 kkz 1.1.2.1 /** Builds the continuation. Returns the <code>HClass</code>. 49 kkz 1.1.2.1 * @return the continuation <code>HClass</code> 50 kkz 1.1.2.1 */ 51 kkz 1.1.2.1 52 kkz 1.1.2.1 // Given a type, returns the prefix for 53 kkz 1.1.2.1 // a continuation of that type. 54 kkz 1.1.2.2 public static String getPrefix(HClass t) { 55 kkz 1.1.2.1 if (t == HClass.Boolean) { 56 kkz 1.1.2.1 return "Boolean"; 57 kkz 1.1.2.1 } else if (t == HClass.Byte) { 58 kkz 1.1.2.1 return "Byte"; 59 kkz 1.1.2.1 } else if (t == HClass.Char) { 60 kkz 1.1.2.1 return "Char"; 61 kkz 1.1.2.1 } else if (t == HClass.Double) { 62 kkz 1.1.2.1 return "Double"; 63 kkz 1.1.2.1 } else if (t == HClass.Float) { 64 kkz 1.1.2.1 return "Float"; 65 kkz 1.1.2.1 } else if (t == HClass.Int) { 66 kkz 1.1.2.1 return "Int"; 67 kkz 1.1.2.1 } else if (t == HClass.Long) { 68 kkz 1.1.2.1 return "Long"; 69 kkz 1.1.2.1 } else if (t == HClass.Short) { 70 kkz 1.1.2.1 return "Short"; 71 kkz 1.1.2.1 } else if (t == HClass.Void) { 72 kkz 1.1.2.1 return "Void"; 73 kkz 1.1.2.1 } else { 74 kkz 1.1.2.1 return "Object"; 75 kkz 1.1.2.1 } 76 kkz 1.1.2.1 } 77 kkz 1.1.2.1 78 kkz 1.1.2.1 private void reportException(Throwable t, String methodname, String msg) { 79 kkz 1.1.2.1 System.err.println("Caught exception " + t.toString() + 80 kkz 1.1.2.2 " in harpoon.Analysis.ContBuilder.ContBuilder." + 81 kkz 1.1.2.1 methodname); 82 kkz 1.1.2.1 System.err.println(msg); 83 kkz 1.1.2.1 } 84 cananian 1.2 }