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     }