scale.clef.type
Class EnumerationType

java.lang.Object
  extended by scale.common.Root
      extended by scale.clef.Node
          extended by scale.clef.type.Type
              extended by scale.clef.type.AtomicType
                  extended by scale.clef.type.NumericType
                      extended by scale.clef.type.EnumerationType
All Implemented Interfaces:
AnnotationInterface, DisplayNode

public class EnumerationType
extends NumericType

This class represents a C style enumeration type.

$Id: EnumerationType.java,v 1.52 2007-08-27 18:13:32 burrill Exp $

Copyright 2008 by the Scale Compiler Group,
Department of Computer Science
University of Massachusetts,
Amherst MA. 01003, USA
All Rights Reserved.


Method Summary
 int bitSize()
          Return the number of bits required to represent the type.
static void cleanup()
          Remove static lists of types.
 boolean compareEnums(EnumerationType et)
          Return true if the bases are the same.
 boolean compareEnums(Vector<EnumElementDecl> enumVals)
          Return true if the elements of the list are "equal" to this type's enumeration.
 boolean compareOrderedEnumerators(EnumerationType t2, boolean name, boolean value)
          Return true if the enums are the same and the order of elements is the same.
 boolean compareUnorderedEnumerators(EnumerationType t2, boolean name, boolean value)
          Return true if the enums are the same even though the order of elements may be different.
static EnumerationType create(Vector<EnumElementDecl> enums)
          Re-use an existing instance of a particular enumeration type.
 boolean equivalent(Type t)
          Return true if the types are equivalent.
 Node getChild(int i)
          Return the specified AST child of this node.
 EnumElementDecl getEnum(int i)
          Return the specified enum element.
 int getNumEnums()
          Return the number of elements in this enum type.
static java.util.Enumeration<EnumerationType> getTypes()
          Return an enumeration of all the different types.
 boolean isEnumerationType()
          Return true if type represents an enumeration value.
 long memorySize(Machine machine)
          Calculate how many addressable memory units are needed to represent the type.
 int numChildren()
          Return the number of AST children of this node.
 EnumerationType returnEnumerationType()
          Return if this is a EnumerationType, return this.
 void visit(Predicate p)
          Process a node by calling its associated routine.
 void visit(TypePredicate p)
          Process a node by calling its associated routine.
 
Methods inherited from class scale.clef.type.NumericType
isNumericType, returnNumericType
 
Methods inherited from class scale.clef.type.AtomicType
alignment, isAtomicType, returnAtomicType
 
Methods inherited from class scale.clef.type.Type
canBeInRegister, elementSize, getCompleteType, getCoreType, getDisplayColorHint, getDisplayLabel, getDisplayShapeHint, getEquivalentType, getNonAttributeType, getNonConstType, getPointedTo, getPointedToCore, getRank, getSignedType, getTag, getType, isAggregateType, isAllocArrayType, isArrayType, isAttributeSet, isBooleanType, isCharacterType, isClassType, isComplexType, isCompositeType, isConst, isFixedArrayType, isFloatType, isFortranCharType, isIncompleteType, isIntegerType, isNamedType, isPointerType, isProcedureType, isRealType, isRefType, isRestricted, isSigned, isUnionType, isVoidType, isVolatile, mapTypeToCString, mapTypeToF77String, memorySizeAsInt, nextVisit, numberOfElements, precedence, registerType, returnAggregateType, returnAllocArrayType, returnArrayType, returnBooleanType, returnCharacterType, returnComplexType, returnCompositeType, returnFixedArrayType, returnFloatType, returnFortranCharType, returnIncompleteType, returnIntegerType, returnPointerType, returnProcedureType, returnRealType, returnRecordType, returnRefType, returnSignedIntegerType, returnUnionType, returnUnsignedIntegerType, returnVoidType, setTag, setVisited, specifyCanBeInRegister, toString, toStringShort, visited
 
Methods inherited from class scale.clef.Node
getDecl, getSourceLineNumber, setAnnotationLevel, setReportLevel, setSourceLineNumber, toString, toStringChildren, toStringSpecial
 
Methods inherited from class scale.common.Root
addAnnotation, allAnnotations, allMatchingAnnotations, getAnnotation, getDisplayName, getDisplayString, getNodeCount, getNodeID, hasAnnotation, hasEqualAnnotation, hashCode, removeAnnotation, removeAnnotations, toStringAnnotations, toStringClass, trace, trace, trace
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Method Detail

create

public static EnumerationType create(Vector<EnumElementDecl> enums)
Re-use an existing instance of a particular enumeration type. If no equivalent enumeration type exists, create a new one.

Parameters:
enums - is a vector of EnumElementDecl instances

isEnumerationType

public boolean isEnumerationType()
Return true if type represents an enumeration value.

Overrides:
isEnumerationType in class Type

returnEnumerationType

public final EnumerationType returnEnumerationType()
Description copied from class: Type
Return if this is a EnumerationType, return this. Otherwise, return null.

Overrides:
returnEnumerationType in class Type

compareEnums

public boolean compareEnums(EnumerationType et)
Return true if the bases are the same.


compareEnums

public boolean compareEnums(Vector<EnumElementDecl> enumVals)
Return true if the elements of the list are "equal" to this type's enumeration.


getNumEnums

public int getNumEnums()
Return the number of elements in this enum type.


getEnum

public EnumElementDecl getEnum(int i)
Return the specified enum element.


visit

public void visit(Predicate p)
Description copied from class: Node
Process a node by calling its associated routine. See the "visitor" design pattern in Design Patterns: Elements of Reusable Object-Oriented Software by E. Gamma, et al, Addison Wesley, ISBN 0-201-63361-2.

Each class has a visit(Predicate p) method. For example, in class ABC:

   public void visit(Predicate p)
   {
     p.visitABC(this);
   }
 
and the class that implements Predicate has a method
   public void visitABC(Node n)
   {
     ABC a = (ABC) n;
     ...
   }
 
Thus, the class that implements Predicate can call
   n.visit(this);
 
where n is a Node sub-class without determining which specific sub-class n is. The visit pattern basically avoids implementing a large switch statement or defining different methods in each class for some purpose.

Overrides:
visit in class NumericType
See Also:
Predicate

visit

public void visit(TypePredicate p)
Description copied from class: Type
Process a node by calling its associated routine. See the "visitor" design pattern in Design Patterns: Elements of Reusable Object-Oriented Software by E. Gamma, et al, Addison Wesley, ISBN 0-201-63361-2.

Each type class has a visit(TypePredicate p) method. For example, in class ABC:

   public void visit(Predicate p)
   {
     p.visitABC(this);
   }
 
and the class that implements Predicate has a method
   public void visitABC(Node n)
   {
     ABC a = (ABC) n;
     ...
   }
 
Thus, the class that implements TypePredicate can call
   n.visit(this);
 
where n is a Node sub-class without determining which specific sub-class n is. The visit pattern basically avoids implementing a large switch statement or defining different methods in each class for some purpose.

Overrides:
visit in class NumericType
See Also:
TypePredicate

getChild

public Node getChild(int i)
Return the specified AST child of this node.

Overrides:
getChild in class Node

numChildren

public int numChildren()
Return the number of AST children of this node.

Overrides:
numChildren in class Node

compareUnorderedEnumerators

public boolean compareUnorderedEnumerators(EnumerationType t2,
                                           boolean name,
                                           boolean value)
Return true if the enums are the same even though the order of elements may be different.

Parameters:
t2 - is the other enum
name - is true if the enum names should be compared
value - is true if the enum values should be compared

compareOrderedEnumerators

public boolean compareOrderedEnumerators(EnumerationType t2,
                                         boolean name,
                                         boolean value)
Return true if the enums are the same and the order of elements is the same.

Parameters:
t2 - is the other enum
name - is true if the enum names should be compared
value - is true if the enum values should be compared

equivalent

public boolean equivalent(Type t)
Return true if the types are equivalent.

Specified by:
equivalent in class Type

getTypes

public static java.util.Enumeration<EnumerationType> getTypes()
Return an enumeration of all the different types.


bitSize

public int bitSize()
Description copied from class: AtomicType
Return the number of bits required to represent the type.

Specified by:
bitSize in class AtomicType

memorySize

public long memorySize(Machine machine)
Calculate how many addressable memory units are needed to represent the type.

Overrides:
memorySize in class AtomicType
Parameters:
machine - is the machine-specific data machine
Returns:
the number of bytes required to represent this type

cleanup

public static void cleanup()
Remove static lists of types.