scale.clef.type
Class PointerType

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.PointerType
All Implemented Interfaces:
AnnotationInterface, DisplayNode

public class PointerType
extends AtomicType

The PointerType represents the type address of some other type.

$Id: PointerType.java,v 1.58 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.


Constructor Summary
protected PointerType(Type pointedTo)
           
 
Method Summary
static int addressableMemorySize(Machine machine)
          Return the number of bytes required to represent this type.
 int bitSize()
          Return the number of bits required to represent the type.
static void cleanup()
          Remove static lists of types.
static PointerType create(Type pointedTo)
          Re-use an existing instance of a particular pointer type.
 boolean equivalent(Type t)
          Return true if the types are equivalent.
 Node getChild(int i)
          Return the specified AST child of this node.
static int getMinBitSize()
          Specify the size of a pointer in bits.
 Type getPointedTo()
          Return the type of the thing pointed to.
static java.util.Enumeration<PointerType> getTypes()
          Return an enumeration of all the different types.
 boolean isPointerType()
          Return true if type represents an address.
 java.lang.String mapTypeToCString()
          Map a type to a C string.
 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.
static int pAlignment(Machine machine)
          Calculate the alignment needed for this data type.
 PointerType returnPointerType()
          Return if this is a PointerType return this.
static void setMinBitSize(int bitSize)
          Specify the size of a pointer in bits.
 java.lang.String toString()
           
 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.AtomicType
alignment, isAtomicType, returnAtomicType
 
Methods inherited from class scale.clef.type.Type
canBeInRegister, elementSize, getCompleteType, getCoreType, getDisplayColorHint, getDisplayLabel, getDisplayShapeHint, getEquivalentType, getNonAttributeType, getNonConstType, getPointedToCore, getRank, getSignedType, getTag, getType, isAggregateType, isAllocArrayType, isArrayType, isAttributeSet, isBooleanType, isCharacterType, isClassType, isComplexType, isCompositeType, isConst, isEnumerationType, isFixedArrayType, isFloatType, isFortranCharType, isIncompleteType, isIntegerType, isNamedType, isNumericType, isProcedureType, isRealType, isRefType, isRestricted, isSigned, isUnionType, isVoidType, isVolatile, mapTypeToF77String, memorySizeAsInt, nextVisit, numberOfElements, precedence, registerType, returnAggregateType, returnAllocArrayType, returnArrayType, returnBooleanType, returnCharacterType, returnComplexType, returnCompositeType, returnEnumerationType, returnFixedArrayType, returnFloatType, returnFortranCharType, returnIncompleteType, returnIntegerType, returnNumericType, returnProcedureType, returnRealType, returnRecordType, returnRefType, returnSignedIntegerType, returnUnionType, returnUnsignedIntegerType, returnVoidType, setTag, setVisited, specifyCanBeInRegister, 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
 

Constructor Detail

PointerType

protected PointerType(Type pointedTo)
Method Detail

setMinBitSize

public static void setMinBitSize(int bitSize)
Specify the size of a pointer in bits.


getMinBitSize

public static int getMinBitSize()
Specify the size of a pointer in bits.


create

public static PointerType create(Type pointedTo)
Re-use an existing instance of a particular pointer type. If no equivalent pointer type exists, create a new one.

Parameters:
pointedTo - the type pointed to

getPointedTo

public final Type getPointedTo()
Description copied from class: Type
Return the type of the thing pointed to.

Overrides:
getPointedTo in class Type

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

addressableMemorySize

public static int addressableMemorySize(Machine machine)
Return the number of bytes required to represent this type.


isPointerType

public boolean isPointerType()
Return true if type represents an address.

Overrides:
isPointerType in class Type

returnPointerType

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

Overrides:
returnPointerType in class Type

toString

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

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

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<PointerType> getTypes()
Return an enumeration of all the different types.


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 addressable memory units required to represent this type

pAlignment

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


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

cleanup

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