1 cananian 1.1.2.1 // Type.java, created Fri Feb  5 05:16:21 1999 by cananian
 2 cananian 1.1.2.1 // Copyright (C) 1999 C. Scott Ananian <cananian@alumni.princeton.edu>
 3 cananian 1.1.2.1 // Licensed under the terms of the GNU GPL; see COPYING for details.
 4 cananian 1.1.2.1 package harpoon.IR.Tree;
 5 cananian 1.1.2.1 
 6 cananian 1.1.2.1 /**
 7 cananian 1.1.2.1  * <code>Type</code> enumerates the possible Tree expression types.
 8 cananian 1.1.2.1  * 
 9 cananian 1.1.2.1  * @author  C. Scott Ananian <cananian@alumni.princeton.edu>
10 cananian 1.2      * @version $Id: Type.java,v 1.2 2002/02/25 21:05:42 cananian Exp $
11 cananian 1.1.2.1  */
12 cananian 1.1.2.1 public abstract class Type {
13 cananian 1.1.2.1     // enumerated constants.
14 cananian 1.1.2.1     /** 32-bit integer type. */
15 cananian 1.1.2.1     public final static int INT = 0;
16 cananian 1.1.2.1     /** 64-bit integer type. */
17 cananian 1.1.2.1     public final static int LONG = 1;
18 cananian 1.1.2.1     /** 32-bit floating-point type. */
19 cananian 1.1.2.1     public final static int FLOAT = 2;
20 cananian 1.1.2.1     /** 64-bit floating-point type. */
21 cananian 1.1.2.1     public final static int DOUBLE = 3;
22 cananian 1.1.2.1     /** Pointer type.  Bitwidth is machine-dependent. */
23 cananian 1.1.2.1     public final static int POINTER = 4;
24 cananian 1.1.2.1 
25 cananian 1.1.2.1     // Query functions.
26 cananian 1.1.2.2     public final static boolean isDoubleWord(TreeFactory tf, int type) {
27 cananian 1.1.2.2         if (type==POINTER) return tf.getFrame().pointersAreLong();
28 cananian 1.1.2.2         else return type==LONG || type==DOUBLE;
29 cananian 1.1.2.1     }
30 cananian 1.1.2.1     public final static boolean isFloatingPoint(int type) {
31 cananian 1.1.2.1         return type==FLOAT || type==DOUBLE;
32 cananian 1.1.2.1     }
33 cananian 1.1.2.1     public final static boolean isPointer(int type) {
34 cananian 1.1.2.1         return type==POINTER;
35 cananian 1.1.2.2     }
36 cananian 1.1.2.2 
37 cananian 1.1.2.4     public static boolean isValid(int type) {
38 cananian 1.1.2.2         switch(type) {
39 cananian 1.1.2.2         case INT: case LONG: case FLOAT: case DOUBLE: case POINTER:
40 cananian 1.1.2.2             return true;
41 cananian 1.1.2.2         default:
42 cananian 1.1.2.2             return false;
43 cananian 1.1.2.2         }
44 cananian 1.1.2.1     }
45 cananian 1.1.2.1 
46 cananian 1.1.2.1     // human-readability.
47 cananian 1.1.2.5     /** Return a string describing the given enumerated type. */
48 cananian 1.1.2.4     public static String toString(int type) {
49 cananian 1.1.2.1         switch(type) {
50 cananian 1.1.2.1         case INT: return "INT";
51 cananian 1.1.2.1         case LONG: return "LONG";
52 cananian 1.1.2.1         case FLOAT: return "FLOAT";
53 cananian 1.1.2.1         case DOUBLE: return "DOUBLE";
54 cananian 1.1.2.1         case POINTER: return "POINTER";
55 cananian 1.1.2.1         default: throw new RuntimeException("Unknown Type: "+type);
56 cananian 1.1.2.1         }
57 cananian 1.1.2.5     }
58 cananian 1.1.2.5     /** Return a string describing the type of a <code>PreciselyTyped</code>
59 cananian 1.1.2.5      *  expression. */
60 cananian 1.1.2.5     public static String toString(PreciselyTyped pt) {
61 cananian 1.1.2.5         String ty = toString(pt.type());
62 cananian 1.1.2.5         if (pt.isSmall())
63 cananian 1.1.2.5             ty += "["+(pt.signed()?"s":"u")+":"+pt.bitwidth()+"]";
64 cananian 1.1.2.5         return ty;
65 cananian 1.1.2.1     }
66 cananian 1.2     }