scale.clef.type
Class FortranCharType

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

public class FortranCharType
extends CompositeType

The FortranCharType class represents the Fortran CHARACTER type.

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

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


Method Summary
 int alignment(Machine machine)
          Calculate the alignment needed for this data type.
static void cleanup()
          Remove static lists of types.
static FortranCharType create(int length)
          Re-use an existing instance of a particular CHARACTER type.
 boolean equivalent(Type t)
          Return true if the types are equivalent.
 int getLength()
          Return the number of characters in this CHARACTER type.
 boolean isFortranCharType()
          Return true if type represents a Fortran CHARACTER type.
 java.lang.String mapTypeToCString()
          Map a type to a C string.
 java.lang.String mapTypeToF77String()
          Map a type to a Fortran string.
 long memorySize(Machine machine)
          Calculate how many addressable memory units are needed to represent the type.
 int precedence()
          Return a precedence value for types.
 FortranCharType returnFortranCharType()
          Return if this is a FortranCharType, return this.
 java.lang.String toString()
           
 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.CompositeType
isCompositeType, returnCompositeType
 
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, isAtomicType, isAttributeSet, isBooleanType, isCharacterType, isClassType, isComplexType, isConst, isEnumerationType, isFixedArrayType, isFloatType, isIncompleteType, isIntegerType, isNamedType, isNumericType, isPointerType, isProcedureType, isRealType, isRefType, isRestricted, isSigned, isUnionType, isVoidType, isVolatile, memorySizeAsInt, nextVisit, numberOfElements, registerType, returnAggregateType, returnAllocArrayType, returnArrayType, returnAtomicType, returnBooleanType, returnCharacterType, returnComplexType, returnEnumerationType, returnFixedArrayType, returnFloatType, returnIncompleteType, returnIntegerType, returnNumericType, returnPointerType, returnProcedureType, returnRealType, returnRecordType, returnRefType, returnSignedIntegerType, returnUnionType, returnUnsignedIntegerType, returnVoidType, setTag, setVisited, specifyCanBeInRegister, toStringShort, 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
 

Method Detail

create

public static FortranCharType create(int length)
Re-use an existing instance of a particular CHARACTER type. If no equivalent CHARACTER type exists, create a new one.

Parameters:
length - is the number of length in characters

returnFortranCharType

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

Overrides:
returnFortranCharType in class Type

isFortranCharType

public final boolean isFortranCharType()
Description copied from class: Type
Return true if type represents a Fortran CHARACTER type.

Overrides:
isFortranCharType in class Type

getLength

public int getLength()
Return the number of characters in this CHARACTER type. A length of 0 indicates that the length is not known.


toString

public java.lang.String toString()
Overrides:
toString 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 CompositeType
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 CompositeType
See Also:
TypePredicate

mapTypeToCString

public 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 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

equivalent

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

Specified by:
equivalent in class Type

memorySize

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

Specified by:
memorySize in class Type
Parameters:
machine - is the machine-specific data machine
Returns:
the number of addressable memory units required to represent this type

alignment

public int alignment(Machine machine)
Calculate the alignment needed for this data type.

Specified by:
alignment in class Type

precedence

public int precedence()
Return a precedence value for types. We assign precendence values to declarators that use operators (e.g., arrays, functions, pointers). The precendence values are relative to the other operators - larger values mean higher precedence.

Overrides:
precedence in class Type
Returns:
an integer representing the precendence value for the type relative to the other values.

cleanup

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