scale.clef.type
Class CharacterType

java.lang.Object
  extended by scale.common.Root
      extended by scale.clef.Node
          extended by scale.clef.type.Type
              extended by scale.clef.type.AtomicType
                  extended by scale.clef.type.NumericType
                      extended by scale.clef.type.CharacterType
All Implemented Interfaces:
AnnotationInterface, DisplayNode

public class CharacterType
extends NumericType

This class represents the character type for languages other than C.

$Id: CharacterType.java,v 1.47 2007-08-27 18:13:31 burrill Exp $

Copyright 2008 by the Scale Compiler Group,
Department of Computer Science
University of Massachusetts,
Amherst MA. 01003, USA
All Rights Reserved.

An IntegerType is used for the C char type.

Ideally, the source language should not specify a particular character format. However, many C programs rely on the ANSI character set, and Java prescribes the use of Unicode. Hence, user code may use these attributes to specify the format (and implicitly the size) of the character set. If the language does not require a particular format it may specify Any. The generation interface assumes a default of Any.


Field Summary
static int cAnsi
          Character representation is 8-bit ASCII.
static int cAny
          Character representation is unknown.
static int cEbcdic
          Character representation is 8-bit EBCDIC.
static int cUnicode
          Character representation is 16-bit unicode.
static java.lang.String[] formatMap
          Map from character type to a string representing that type.
 
Method Summary
 int bitSize()
          Return the number of bits required to represent the type.
static void cleanup()
          Remove static lists of types.
static CharacterType create(int format)
          Re-use an existing instance of a particular character type.
 boolean equivalent(Type t)
          Return true if the types are equivalent.
 int getFormat()
           
static java.util.Enumeration<CharacterType> getTypes()
          Return an enumeration of all the different types.
 boolean isCharacterType()
          Return true if type represents a character type.
 java.lang.String mapTypeToCString()
          Map a type to a C string.
 CharacterType returnCharacterType()
          Return if this is a CharacterType, return this.
 java.lang.String toString()
           
 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.NumericType
isNumericType, returnNumericType
 
Methods inherited from class scale.clef.type.AtomicType
alignment, isAtomicType, memorySize, returnAtomicType
 
Methods inherited from class scale.clef.type.Type
canBeInRegister, elementSize, getCompleteType, getCoreType, getDisplayColorHint, getDisplayLabel, getDisplayShapeHint, getEquivalentType, getNonAttributeType, getNonConstType, getPointedTo, getPointedToCore, getRank, getSignedType, getTag, getType, isAggregateType, isAllocArrayType, isArrayType, isAttributeSet, isBooleanType, isClassType, isComplexType, isCompositeType, isConst, isEnumerationType, isFixedArrayType, isFloatType, isFortranCharType, isIncompleteType, isIntegerType, isNamedType, isPointerType, isProcedureType, isRealType, isRefType, isRestricted, isSigned, isUnionType, isVoidType, isVolatile, mapTypeToF77String, memorySizeAsInt, nextVisit, numberOfElements, precedence, registerType, returnAggregateType, returnAllocArrayType, returnArrayType, returnBooleanType, returnComplexType, returnCompositeType, returnEnumerationType, returnFixedArrayType, returnFloatType, returnFortranCharType, returnIncompleteType, returnIntegerType, returnPointerType, returnProcedureType, returnRealType, returnRecordType, returnRefType, returnSignedIntegerType, returnUnionType, returnUnsignedIntegerType, returnVoidType, setTag, setVisited, specifyCanBeInRegister, toStringShort, visited
 
Methods inherited from class scale.clef.Node
getChild, getDecl, getSourceLineNumber, numChildren, 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
 

Field Detail

cAny

public static final int cAny
Character representation is unknown.

See Also:
Constant Field Values

cAnsi

public static final int cAnsi
Character representation is 8-bit ASCII.

See Also:
Constant Field Values

cEbcdic

public static final int cEbcdic
Character representation is 8-bit EBCDIC.

See Also:
Constant Field Values

cUnicode

public static final int cUnicode
Character representation is 16-bit unicode.

See Also:
Constant Field Values

formatMap

public static final java.lang.String[] formatMap
Map from character type to a string representing that type.

Method Detail

create

public static CharacterType create(int format)
Re-use an existing instance of a particular character type. If no equivalent character type exists, create a new one.

Parameters:
format - the type of character format

isCharacterType

public final boolean isCharacterType()
Return true if type represents a character type.

Overrides:
isCharacterType in class Type

returnCharacterType

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

Overrides:
returnCharacterType in class Type

toString

public java.lang.String toString()
Overrides:
toString in class 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 NumericType
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 NumericType
See Also:
TypePredicate

getFormat

public final int getFormat()

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


bitSize

public int bitSize()
Description copied from class: AtomicType
Return the number of bits required to represent the type.

Specified by:
bitSize in class AtomicType

mapTypeToCString

public java.lang.String mapTypeToCString()
Map a type to a C string. The string representation is based upon the size of the type.

Overrides:
mapTypeToCString in class Type
Returns:
the string representation of the type

cleanup

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