scale.clef.type
Class UnionType

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

public class UnionType
extends RecordType

A class representing a C union type.

$Id: UnionType.java,v 1.42 2007-08-27 18:13:33 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 union 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
 
Method Summary
static void cleanup()
          Remove static lists of types.
static UnionType create(Vector<FieldDecl> fields, boolean dummy)
          Re-use an existing instance of a particular union type.
static java.util.Enumeration<RecordType> getTypes()
          Return an enumeration of all the different types.
 boolean isUnionType()
          Return true if type represents a union.
 long memorySize(Machine machine)
          Return the number of addressable memory units required to represent this type.
 UnionType returnUnionType()
          Return if this is a UnionType 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.RecordType
create, equivalent, registerType, returnRecordType
 
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, 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, 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 UnionType create(Vector<FieldDecl> fields,
                               boolean dummy)
Re-use an existing instance of a particular union type. If no equivalent union type exists, create a new one.

Parameters:
fields - the list of field declarations
dummy - is a dummy parameter required because Java is unable to disambiguate between static methods with the same name and parameters in parent and child classes!

isUnionType

public final boolean isUnionType()
Return true if type represents a union.

Overrides:
isUnionType in class Type

returnUnionType

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

Overrides:
returnUnionType in class Type

memorySize

public long memorySize(Machine machine)
Return the number of addressable memory units required to represent this type.

Overrides:
memorySize in class RecordType
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 RecordType
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 RecordType
See Also:
TypePredicate

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.