coins.sym
Class UnionTypeImpl

java.lang.Object
  extended bycoins.sym.SymImpl
      extended bycoins.sym.TypeImpl
          extended bycoins.sym.UnionTypeImpl
All Implemented Interfaces:
java.lang.Cloneable, HasStringObject, Sym, Sym0, Type, UnionType

public class UnionTypeImpl
extends TypeImpl
implements UnionType

UnionTypeImpl Class


Field Summary
protected  int fAlignment
           
protected  IrList fElemList
           
protected  SymTable fLocalSymTable
           
protected  Sym fTag
           
 
Fields inherited from class coins.sym.TypeImpl
fCompleteType, fConst, fOrigin, fRestrict, fTypeCore, fTypeKind, fVolatile
 
Fields inherited from class coins.sym.SymImpl
fDbgLevel, fDefinedIn, fFlagBox, fKind, fName, fNextSym, fRecordedIn, fSourceInf, fSymInf, fType, fUniqueNameSym, fWork, machineParam, sourceLanguage, symRoot
 
Fields inherited from interface coins.sym.Type
KIND_ADDRESS, KIND_ALIGNMENT, KIND_BASE_LIM, KIND_BOOL, KIND_CHAR, KIND_DEFINED, KIND_DOUBLE, KIND_ENUM, KIND_FLOAT, KIND_FLOAT_LOWER_LIM, KIND_FLOAT_UPPER_LIM, KIND_INT, KIND_INT_UPPER_LIM, KIND_LONG, KIND_LONG_DOUBLE, KIND_LONG_LONG, KIND_OFFSET, KIND_POINTER, KIND_RANKS, KIND_REGION, KIND_SHORT, KIND_STRING, KIND_STRUCT, KIND_SUBP, KIND_U_CHAR, KIND_U_INT, KIND_U_LONG, KIND_U_LONG_LONG, KIND_U_SHORT, KIND_UNDEF, KIND_UNION, KIND_UNSIGNED_LOWER_LIM, KIND_VECTOR, KIND_VOID, KIND_WCHAR
 
Fields inherited from interface coins.sym.Sym
KIND_NAME, VISIBILITY
 
Fields inherited from interface coins.sym.Sym0
FLAG_ADDRESS_TAKEN, FLAG_CASTLESS_SUBP, FLAG_COMMON, FLAG_COMPLEX_STRUCT, FLAG_DERIVED_SYM, FLAG_GENERATED_SYM, FLAG_INCOMPLETE_TYPE, FLAG_POINTER_OPERATION, FLAG_REGION_ELEM, FLAG_RESERVED_NAME, FLAG_SIZEOF_TAKEN, FLAG_UNFIXED_SIZE, FLAG_UNIFORM_SIZE, FLAG_VALUE_IS_ASSIGNED, KIND_AREG, KIND_BOOL_CONST, KIND_CHAR_CONST, KIND_CONST_FIRST, KIND_CONST_LAST, KIND_ELEM, KIND_EXP_ID, KIND_FLOAT_CONST, KIND_INT_CONST, KIND_LABEL, KIND_MREG, KIND_NAMED_CONST, KIND_OTHER, KIND_PARAM, KIND_REMOVED, KIND_STRING_CONST, KIND_TAG, KIND_TYPE, KIND_VAR, SYM_COMPILE_UNIT, SYM_EXTERN, SYM_PRIVATE, SYM_PROTECTED, SYM_PUBLIC
 
Constructor Summary
UnionTypeImpl(SymRoot pSymRoot, java.lang.String pTypeName, IrList pElemList)
          UnionTypeImpl constructor Make an instance of UnionType in symRoot.symTableCurrent.
 
Method Summary
 void addElem(Elem pElem)
          addElem Add element to this union type.
 void finishUnionType(boolean pSeparately)
          finishUnionType Finish to define this union type.
 int getAlignment()
          getAlignment Get alignment value for this type.
 Type getCompleteType()
          getCompleteType Get complete type corresponding to this type.
 IrList getElemList()
          getElemList
 SymTable getSymTable()
           
 Sym getTag()
           
 boolean isCompatibleWith(Type pType)
          isCompatibleWith The origin type of this type and pType are compared to be equal or not.
 void setAlignment(int pAlignment)
          setAlignment Set alignment value to be equal to the pAlignment.
 void setSymTable(SymTable pSymTable)
           
 void setTag(Sym pTag)
           
 java.lang.String toStringDetail()
          toStringDetail Get detailed attributes of this symbol in text which is not interned.
 
Methods inherited from class coins.sym.TypeImpl
getAlignmentGap, getDimension, getElemListString, getElemListString, getEnumListString, getFinalOrigin, getOrigin, getPointedType, getSizeExp, getSizeValue, getTypeKind, getTypeRank, getUnqualifiedType, isBasicType, isConst, isFloating, isInteger, isRestrict, isScalar, isSizeEvaluable, isUnsigned, isVolatile, makeConstType, makeRestrictType, makeVolatileType, searchTypeCompatibleWithThis, setOrigin, setSizeExp, setSizeValue, setStaticTable, toString, toStringShort
 
Methods inherited from class coins.sym.SymImpl
bareStringConst, baseType, boolConst, charConst, charConst, charConst, definedType, definedType, defineElem, defineLabel, defineParam, defineRegionVar, defineSubp, defineVar, defineVar, derivedSym, enumType, enumType, floatConst, floatConst, getDefinedColumn, getDefinedFile, getDefinedIn, getDefinedInName, getDefinedLine, getFlag, getInf, getName, getNameOrNull, getNextSym, getOrAddInf, getOriginalSym, getOriginalSym, getPureName, getRecordedIn, getSourceInf, getSymKind, getSymKindName, getSymType, getUniqueName, getWork, intConst, intConst, intObject, isGlobal, isHIR, isRemoved, isSym, linkSym, makeCstring, makeCstringWithTrailing0, makeEnumTypeName, makeExpString, makeJavaString, makeStructUnionTypeName, makeSubpTypeName, makeSubpTypeName, makeVectorTypeName, makeVectorTypeName, makeVectorTypeName, namedConst, namedConst, pointerType, pointerType, pointerType, pointerType, pointerType, print, print, regionType, regionType, remove, setDefinedFile, setDefinedIn, setDefinedLine, setFlag, setOriginalSym, setParameters, setRecordedIn, setSourceInf, setSymKind, setSymType, setUniqueNameSym, setWork, stringConst, stringConstFromQuotedString, structType, structType, subpType, subpType, symbol, unionType, unionType, vectorType, vectorType, vectorType, vectorType, vectorTypeUnfixed, vectorTypeUnfixed
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface coins.sym.Type
getAlignmentGap, getDimension, getElemListString, getFinalOrigin, getOrigin, getPointedType, getSizeExp, getSizeValue, getTypeKind, getTypeRank, getUnqualifiedType, isBasicType, isConst, isFloating, isInteger, isRestrict, isScalar, isSizeEvaluable, isUnsigned, isVolatile, makeConstType, makeRestrictType, makeVolatileType, setOrigin, setSizeExp, setSizeValue
 
Methods inherited from interface coins.sym.Sym
baseType, boolConst, charConst, defineVar, derivedSym, floatConst, getDefinedColumn, getDefinedInName, getDefinedLine, getInf, getNameOrNull, getOrAddInf, getOriginalSym, getOriginalSym, getPureName, getSymKindName, getWork, intConst, intObject, isRemoved, makeCstring, makeCstringWithTrailing0, makeEnumTypeName, makeJavaString, makeStructUnionTypeName, makeSubpTypeName, makeVectorTypeName, makeVectorTypeName, makeVectorTypeName, namedConst, pointerType, pointerType, pointerType, regionType, remove, setDefinedFile, setDefinedIn, setDefinedLine, setRecordedIn, setSymKind, setSymType, setUniqueNameSym, setWork, stringConstFromQuotedString, symbol, toStringShort, vectorType, vectorType, vectorType, vectorTypeUnfixed
 
Methods inherited from interface coins.sym.Sym0
charConst, definedType, defineElem, defineLabel, defineParam, defineSubp, defineVar, enumType, floatConst, getDefinedFile, getDefinedIn, getFlag, getName, getNextSym, getRecordedIn, getSymKind, getSymType, getUniqueName, intConst, isGlobal, namedConst, pointerType, setFlag, stringConst, structType, subpType, unionType, vectorType, vectorTypeUnfixed
 

Field Detail

fElemList

protected IrList fElemList

fLocalSymTable

protected SymTable fLocalSymTable

fTag

protected Sym fTag

fAlignment

protected int fAlignment
Constructor Detail

UnionTypeImpl

public UnionTypeImpl(SymRoot pSymRoot,
                     java.lang.String pTypeName,
                     IrList pElemList)
UnionTypeImpl constructor Make an instance of UnionType in symRoot.symTableCurrent. It is not recommended to use this constructor directly but use unionType method of HIR because there are several restrictions in using this constructor.

Parameters:
pSymRoot - SymRoot instance to be passed to the resultant type.
pTypeName - Name of the union type. It shoul be where tagName is the tag name the union. If it has no tag name, generate it by generateTag() of SymTable.
pElemList - List of elements of the union. If it is not known, then give null and later addElem() and finishUnionType().
Method Detail

getSymTable

public SymTable getSymTable()
Specified by:
getSymTable in interface UnionType

setSymTable

public void setSymTable(SymTable pSymTable)
Specified by:
setSymTable in interface UnionType

getElemList

public IrList getElemList()
Description copied from interface: UnionType
getElemList

Specified by:
getElemList in interface UnionType
Overrides:
getElemList in class TypeImpl

addElem

public void addElem(Elem pElem)
Description copied from interface: UnionType
addElem Add element to this union type. finishUnionType Finish to define this union type. addElem is called after instantiating UnionType without giving element list. After successive call of addElem, finishUnionType should be called. See unionType of Sym.

Specified by:
addElem in interface UnionType
Parameters:
pElem - Element of this union type.

finishUnionType

public void finishUnionType(boolean pSeparately)
Description copied from interface: UnionType
finishUnionType Finish to define this union type. After successive call of addElem, finishUnionType should be called. This will make the union type name and then compute the size of this union. See unionType of Sym, addElem.

Specified by:
finishUnionType in interface UnionType
Parameters:
pSeparately - false if UnionType is constructed with complete element list, true if UnionType is constructed as incomplete and sequence of addElem call is performed and then finishUnionType is called.

getAlignment

public int getAlignment()
Description copied from interface: Type
getAlignment Get alignment value for this type. It depends on target machine. For basic types, the alignment value is a byte count specified in MachineParam.java. The default value of alignment of VectorType is the alignment of element type which may differ vector by vector. The defalut alignment value of StructType or UnionType is set to that of its element with the largest alignment value which may differ struct by struct or union by union. The alignment value of StructType, UnionType, or VectorType should be set by setAlignment method of corresponding type when the type is defined. As for subprogram, if alignment of return value is required, get it by subp.getReturnValueType().getAlignment(), and if alignment of subprogram object code is required, get it by symRoot.machineParam.getAlignment(Type.KIND_SUBP). //##67

Specified by:
getAlignment in interface Type
Overrides:
getAlignment in class TypeImpl

getTag

public Sym getTag()
Specified by:
getTag in interface UnionType

setTag

public void setTag(Sym pTag)
Specified by:
setTag in interface UnionType

isCompatibleWith

public boolean isCompatibleWith(Type pType)
Description copied from interface: Type
isCompatibleWith The origin type of this type and pType are compared to be equal or not. Strict type compatibility check sh ould be done in the semantic analyzer of each language. This method can not afford to do strict semantic check considering language specifications.

Specified by:
isCompatibleWith in interface Type
Overrides:
isCompatibleWith in class TypeImpl
Returns:
true if this type is compatible with pType.

getCompleteType

public Type getCompleteType()
Description copied from interface: Type
getCompleteType Get complete type corresponding to this type. If this is a complete type, return this type. If this is incomplete, find complete type corresponding to this type. If no complete type is found for this type, return null. If the type is neither VectorType, StructType, UnionType, nore EnumType, then return this type.

Specified by:
getCompleteType in interface Type
Overrides:
getCompleteType in class TypeImpl

setAlignment

public void setAlignment(int pAlignment)
Description copied from interface: UnionType
setAlignment Set alignment value to be equal to the pAlignment. Default value of alignment is set to the alignment of element type with the largest alignment value.

Specified by:
setAlignment in interface UnionType
Parameters:
pAlignment - alignment value to be set.

toStringDetail

public java.lang.String toStringDetail()
Description copied from interface: Sym
toStringDetail Get detailed attributes of this symbol in text which is not interned.

Specified by:
toStringDetail in interface Sym
Overrides:
toStringDetail in class TypeImpl