coins.sym
Class StructTypeImpl

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

public class StructTypeImpl
extends TypeImpl
implements StructType

StructTypeImpl 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
StructTypeImpl(SymRoot pSymRoot, java.lang.String pTypeName, IrList pElemList)
          StructTypeImpl constructor Make an instance of StructType in symRoot.symTableCurrent.
 
Method Summary
 void addElem(Elem pElem)
          addElem Add element to this struct type.
(package private)  Exp addStructSizeExp(Elem pElem)
           
(package private)  Exp computeStructSizeExp(IrList pElemList)
           
 void finishStructType(boolean pSeparately)
           finishStructType: Finish to define this struct 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()
          Get the symbol table local to this structure.
 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 //##47 Set alignment value to be equal to the pAlignment.
 void setSymTable(SymTable pSymTable)
          Set the symbol table local to this structure.
 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

StructTypeImpl

public StructTypeImpl(SymRoot pSymRoot,
                      java.lang.String pTypeName,
                      IrList pElemList)
StructTypeImpl constructor Make an instance of StructType in symRoot.symTableCurrent. It is not recommended to use this constructor directly but use structType method of HIR because there are several restrictions in using this constructor. The alignment of a struct type is the same to that of its element having the largest alignment among the elements in the structure. Elements of the struct type is aligned according to the alignment of element type. This may cause to place gap between preceeding element. The size of the struct type is multiple of the alignment value of the struct type, thus, there may be a gap at the tail of the struct type if the last element has small alignment value.

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

getSymTable

public SymTable getSymTable()
Description copied from interface: StructType
Get the symbol table local to this structure.

Specified by:
getSymTable in interface StructType
Returns:
the local symbol table.

setSymTable

public void setSymTable(SymTable pSymTable)
Description copied from interface: StructType
Set the symbol table local to this structure.

Specified by:
setSymTable in interface StructType

getElemList

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

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

addElem

public void addElem(Elem pElem)
Description copied from interface: StructType
addElem Add element to this struct type. addElem is called after instantiating StructType without giving element list. After successive call of addElem, finishStructType should be called. See structType of Sym, finishStructType.

Specified by:
addElem in interface StructType
Parameters:
pElem - Element of this struct type.

finishStructType

public void finishStructType(boolean pSeparately)
Description copied from interface: StructType
  finishStructType: Finish to define this struct type.
 After successive call of addElem,
 finishStructType should be called.
 This will make the struct type name and compute displacement
 of each elements, and then compute the size of this struct.
 See structType of Sym, addElem.
 The alignment of a struct type is the same to that of its element
 having the largest alignment among the elements in the structure.
 Elements of the struct type is aligned according to the alignment
 of element type. This may cause to place gap between preceeding element.
 The size of the struct type is multiple of the alignment value of
 the struct type, thus, there may be a gap at the tail of the struct type
 if the last element has small alignment value.
 finishStructType also allocates bit fields (set bit field offset).
 As for the allocation of bit field, see the explanation of
 setBitFieldOffset method of the Elem interface.

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

computeStructSizeExp

Exp computeStructSizeExp(IrList pElemList)

addStructSizeExp

Exp addStructSizeExp(Elem pElem)

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

setAlignment

public void setAlignment(int pAlignment)
Description copied from interface: StructType
setAlignment //##47 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 StructType
Parameters:
pAlignment - alignment value to be set.

getTag

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

setTag

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

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

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