|
|||||||||
| 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
public class RecordType
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.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 |
|---|
protected RecordType(Vector<FieldDecl> fields)
| Method Detail |
|---|
public static RecordType create(Vector<FieldDecl> fields)
fields - the field declarationspublic final RecordType returnRecordType()
Typethis is a RecordType
return this. Otherwise, return null.
returnRecordType in class Typepublic Type registerType()
registerType in class Typepublic long memorySize(Machine machine)
memorySize in class Typemachine - 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 AggregateTypePredicatepublic 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 AggregateTypeTypePredicatepublic boolean equivalent(Type t)
equivalent in class Typepublic 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 | ||||||||