|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||
java.lang.Objectscale.common.Root
scale.clef.Node
scale.clef.type.Type
scale.clef.type.CompositeType
scale.clef.type.AggregateType
scale.clef.type.RecordType
scale.clef.type.UnionType
public class UnionType
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.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 |
|---|
public static UnionType create(Vector<FieldDecl> fields,
boolean dummy)
fields - the list of field declarationsdummy - 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!public final boolean isUnionType()
isUnionType in class Typepublic final UnionType returnUnionType()
Typethis is a UnionType
return this. Otherwise, return null.
returnUnionType in class Typepublic long memorySize(Machine machine)
memorySize in class RecordTypemachine - is the machine-specific data machine
public void visit(Predicate p)
Node
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.
visit in class RecordTypePredicatepublic void visit(TypePredicate p)
Type
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.
visit in class RecordTypeTypePredicatepublic static java.util.Enumeration<RecordType> getTypes()
public static void cleanup()
|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||