scale.clef.type
Class RecordType

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.AggregateType
                      extended by scale.clef.type.RecordType
All Implemented Interfaces:
AnnotationInterface, DisplayNode
Direct Known Subclasses:
UnionType

public class RecordType
extends AggregateType

A class representing a record or structure type.

$Id: RecordType.java,v 1.47 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.

Note that the declarations in a record must be fields (FieldDecl nodes) and not routines.


Field Summary
 
Fields inherited from class scale.clef.type.AggregateType
FT_F32, FT_F64, FT_FP, FT_INT, FT_MIX, FT_START
 
Constructor Summary
protected RecordType(Vector<FieldDecl> fields)
           
 
Method Summary
static void cleanup()
          Remove static lists of types.
static RecordType create(Vector<FieldDecl> fields)
          Re-use an existing instance of a particular record type.
 boolean equivalent(Type t)
          Return true if the types are equivalent.
static java.util.Enumeration<RecordType> getTypes()
          Return an enumeration of all the different types.
 long memorySize(Machine machine)
          Calculate how many addressable memory units are needed to represent the type.
 Type registerType()
          Return the type to use if a variable of this type is in a register.
 RecordType returnRecordType()
          Return if this is a RecordType 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.AggregateType
alignment, allFieldsType, compareFields, compareFields, compareFields, compareUnique, findField, getAgFields, getChild, getField, getFieldFromOffset, getFieldIndex, isAggregateType, isOrdered, numChildren, numFields, returnAggregateType, setFields
 
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, isAllocArrayType, isArrayType, isAtomicType, isAttributeSet, isBooleanType, isCharacterType, isClassType, isComplexType, isConst, isEnumerationType, isFixedArrayType, isFloatType, isFortranCharType, isIncompleteType, isIntegerType, isNamedType, isNumericType, isPointerType, isProcedureType, isRealType, isRefType, isRestricted, isSigned, isUnionType, isVoidType, isVolatile, mapTypeToCString, mapTypeToF77String, memorySizeAsInt, nextVisit, numberOfElements, precedence, returnAllocArrayType, returnArrayType, returnAtomicType, returnBooleanType, returnCharacterType, returnComplexType, returnEnumerationType, returnFixedArrayType, returnFloatType, returnFortranCharType, returnIncompleteType, returnIntegerType, returnNumericType, returnPointerType, returnProcedureType, returnRealType, 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
 

Constructor Detail

RecordType

protected RecordType(Vector<FieldDecl> fields)
Method Detail

create

public static RecordType create(Vector<FieldDecl> fields)
Re-use an existing instance of a particular record type. If no equivalent record type exists, create a new one.

Parameters:
fields - the field declarations

returnRecordType

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

Overrides:
returnRecordType in class Type

registerType

public Type registerType()
Return the type to use if a variable of this type is in a register.

Overrides:
registerType 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 bytes required to represent this 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 AggregateType
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 AggregateType
See Also:
TypePredicate

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


cleanup

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