001 /* Copyright 2000, 2001, Compaq Computer Corporation */
002
003 package javafe.ast;
004
005 /**
006 * <code>TagConstants</code> is a class defining a partially-opaque
007 * type for tags used in the AST. "Partially opaque" means that the
008 * representation of this type is known -- it's an <code>int</code> --
009 * but code should not depend on the detailed mapping of operator tags
010 * to integers.
011 *
012 * @see OperatorTags
013 * @see GeneratedTags
014 */
015
016 public class TagConstants extends OperatorTags
017 {
018 /**
019 * Used to indicate that no tag applies, for example, when looking
020 * up the tag associated with a string.
021 */
022 public static final int NULL = -1;
023
024 public static final int IDENT = javafe.ast.OperatorTags.LAST_TAG + 1;
025
026 public static final int ERRORTYPE = IDENT + 1;
027 public static final int BOOLEANTYPE = ERRORTYPE + 1;
028 public static final int CHARTYPE = BOOLEANTYPE + 1;
029 public static final int VOIDTYPE = CHARTYPE + 1;
030 public static final int NULLTYPE = VOIDTYPE + 1;
031 // The following must be in the order of implicit promotion
032 public static final int BYTETYPE = NULLTYPE + 1;
033 public static final int SHORTTYPE = BYTETYPE + 1;
034 public static final int INTTYPE = SHORTTYPE + 1;
035 public static final int LONGTYPE = INTTYPE + 1;
036 public static final int FLOATTYPE = LONGTYPE + 1;
037 public static final int DOUBLETYPE = FLOATTYPE + 1;
038
039 public static final int BOOLEANLIT = DOUBLETYPE +1;
040 public static final int INTLIT = BOOLEANLIT + 1;
041 public static final int LONGLIT = INTLIT + 1;
042 public static final int CHARLIT = LONGLIT + 1;
043 public static final int FLOATLIT = CHARLIT + 1;
044 public static final int DOUBLELIT = FLOATLIT + 1;
045 public static final int STRINGLIT = DOUBLELIT + 1;
046 public static final int NULLLIT = STRINGLIT + 1;
047 public static final int BYTELIT = NULLLIT + 1;
048 public static final int SHORTLIT = BYTELIT + 1;
049
050 public static final int LAST_TAG = NULLLIT;
051
052 //@ private invariant \nonnullelements(tags);
053 private static final /*@ non_null @*/ String[] tags = {
054 "IDENT", "ERRORTYPE",
055 "BOOLEANTYPE", "CHARTYPE", "VOIDTYPE", "NULLTYPE",
056 "BYTETYPE", "SHORTTYPE", "INTTYPE", "LONGTYPE",
057 "FLOATTYPE", "DOUBLETYPE",
058 "BOOLEANLIT", "INTLIT", "LONGLIT", "CHARLIT",
059 "FLOATLIT", "DOUBLELIT", "STRINGLIT", "NULLLIT" };
060
061 //@ requires tag <= LAST_TAG;
062 //@ ensures \result != null;
063 public static /*@non_null*/String toString(int tag) {
064 if (IDENT <= tag && tag <= LAST_TAG)
065 return tags[tag - IDENT];
066
067 return OperatorTags.toString(tag);
068 }
069 }