scale.clef.type
Class IntegerType

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.IntegerType
All Implemented Interfaces:
AnnotationInterface, DisplayNode
Direct Known Subclasses:
SignedIntegerType, UnsignedIntegerType

public abstract class IntegerType
extends NumericType

The IntegerType class represents a primitive integer type.

$Id: IntegerType.java,v 1.62 2007-03-21 13:31:56 burrill Exp $

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

Examples of integer types are C's short, int, and long types. The size of the type is specified as the minimum number of bits that are required to represent a value of that type.


Field Summary
static boolean cCharsAreSigned
          If true, the default for the C char type is signed.
 
Constructor Summary
IntegerType(int bits)
           
 
Method Summary
 int bitSize()
          Return the number of bits required to represent the type.
 boolean equivalent(Type t)
          Return true if the types are equivalent.
abstract  Type getSignedType()
          Return the equivalent signed type.
 boolean isIntegerType()
          Return true if type represents an integer value.
abstract  java.lang.String mapTypeToCString()
          Map a type to a C string.
abstract  java.lang.String mapTypeToF77String()
          Map a type to a Fortran string.
abstract  long putValueInRange(long value)
          Transform an integer value to be in a suitable range.
 IntegerType returnIntegerType()
          Return if this is a IntegerType return this.
 java.lang.String toStringShort()
           
 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, memorySize, returnAtomicType
 
Methods inherited from class scale.clef.type.Type
canBeInRegister, cleanup, elementSize, getCompleteType, getCoreType, getDisplayColorHint, getDisplayLabel, getDisplayShapeHint, getEquivalentType, getNonAttributeType, getNonConstType, getPointedTo, getPointedToCore, getRank, getTag, getType, isAggregateType, isAllocArrayType, isArrayType, isAttributeSet, isBooleanType, isCharacterType, isClassType, isComplexType, isCompositeType, isConst, isEnumerationType, isFixedArrayType, isFloatType, isFortranCharType, isIncompleteType, isNamedType, isPointerType, isProcedureType, isRealType, isRefType, isRestricted, isSigned, isUnionType, isVoidType, isVolatile, memorySizeAsInt, nextVisit, numberOfElements, precedence, registerType, returnAggregateType, returnAllocArrayType, returnArrayType, returnBooleanType, returnCharacterType, returnComplexType, returnCompositeType, returnEnumerationType, returnFixedArrayType, returnFloatType, returnFortranCharType, returnIncompleteType, returnPointerType, returnProcedureType, returnRealType, returnRecordType, returnRefType, returnSignedIntegerType, returnUnionType, returnUnsignedIntegerType, returnVoidType, setTag, setVisited, specifyCanBeInRegister, toString, visited
 
Methods inherited from class scale.clef.Node
getChild, getDecl, getSourceLineNumber, numChildren, 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
 

Field Detail

cCharsAreSigned

public static boolean cCharsAreSigned
If true, the default for the C char type is signed. If false, the default for the C char type is unsigned.

Constructor Detail

IntegerType

public IntegerType(int bits)
Method Detail

toStringShort

public java.lang.String toStringShort()
Overrides:
toStringShort in class Type

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

getSignedType

public abstract Type getSignedType()
Return the equivalent signed type.

Overrides:
getSignedType in class Type

putValueInRange

public abstract long putValueInRange(long value)
Transform an integer value to be in a suitable range. The value is truncated according the the number of bits in the integer.


mapTypeToCString

public abstract java.lang.String mapTypeToCString()
Map a type to a C string. The string representation is based upon the size of the type.

Overrides:
mapTypeToCString in class Type
Returns:
the string representation of the type

mapTypeToF77String

public abstract java.lang.String mapTypeToF77String()
Map a type to a Fortran string. The string representation is based upon the size of the type.

Overrides:
mapTypeToF77String in class Type
Returns:
the string representation of the type

isIntegerType

public final boolean isIntegerType()
Return true if type represents an integer value.

Overrides:
isIntegerType in class Type

returnIntegerType

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

Overrides:
returnIntegerType in class Type

bitSize

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

Specified by:
bitSize in class AtomicType

equivalent

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

Specified by:
equivalent in class Type