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 }