|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object scale.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 Type
public final UnionType returnUnionType()
Type
this
is a UnionType
return this
. Otherwise, return null
.
returnUnionType
in class Type
public long memorySize(Machine machine)
memorySize
in class RecordType
machine
- 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 RecordType
Predicate
public 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 RecordType
TypePredicate
public 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 |