.. java:import:: fr.inria.tapenade.utils ILLang .. java:import:: fr.inria.tapenade.utils TapPair .. java:import:: fr.inria.tapenade.utils TapTriplet .. java:import:: fr.inria.tapenade.utils ToBool .. java:import:: fr.inria.tapenade.utils ToObject .. java:import:: fr.inria.tapenade.utils Tree ModifiedTypeSpec ================ .. java:package:: fr.inria.tapenade.representation :noindex: .. java:type:: public final class ModifiedTypeSpec extends TypeSpec A type with additional modifications, e.g. size. Fields ------ sizeModifier ^^^^^^^^^^^^ .. java:field:: public Tree sizeModifier :outertype: ModifiedTypeSpec The tree of the expression that modifies the size of this type (if any). sizeModifierResolved ^^^^^^^^^^^^^^^^^^^^ .. java:field:: protected Tree sizeModifierResolved :outertype: ModifiedTypeSpec The size modifier, resolved as much as possible (if any and computable). typeSign ^^^^^^^^ .. java:field:: protected int typeSign :outertype: ModifiedTypeSpec SymbolTableConstants.SIGNED for "signed", SymbolTableConstants.UNSIGNED for "unsigned", SymbolTableConstants.UNSPECIFIED_SIGNED if unspecified. Constructors ------------ ModifiedTypeSpec ^^^^^^^^^^^^^^^^ .. java:constructor:: public ModifiedTypeSpec(WrapperTypeSpec elementType, Tree sizeModifier, SymbolTable symbolTable) :outertype: ModifiedTypeSpec Create a modified type around the given elementType, with given modifiers. ModifiedTypeSpec ^^^^^^^^^^^^^^^^ .. java:constructor:: public ModifiedTypeSpec(WrapperTypeSpec elementType, ModifiedTypeSpec model) :outertype: ModifiedTypeSpec Create a modified type around the given elementType, following the given model modified type. Methods ------- acceptsMultiDirDimension ^^^^^^^^^^^^^^^^^^^^^^^^ .. java:method:: @Override public boolean acceptsMultiDirDimension() :outertype: ModifiedTypeSpec addMultiDirDimension ^^^^^^^^^^^^^^^^^^^^ .. java:method:: @Override protected TypeSpec addMultiDirDimension(ArrayDim dimension) :outertype: ModifiedTypeSpec addUsedSymbolsInType ^^^^^^^^^^^^^^^^^^^^ .. java:method:: @Override public void addUsedSymbolsInType(TapList toDependsOn, SymbolTable symbolTable) :outertype: ModifiedTypeSpec baseTypeName ^^^^^^^^^^^^ .. java:method:: @Override protected String baseTypeName() :outertype: ModifiedTypeSpec baseTypeSpec ^^^^^^^^^^^^ .. java:method:: @Override public WrapperTypeSpec baseTypeSpec(boolean stopOnPointer) :outertype: ModifiedTypeSpec buildConstantOne ^^^^^^^^^^^^^^^^ .. java:method:: @Override public Tree buildConstantOne() :outertype: ModifiedTypeSpec buildConstantZero ^^^^^^^^^^^^^^^^^ .. java:method:: @Override public Tree buildConstantZero() :outertype: ModifiedTypeSpec checkTypeSpecValidity ^^^^^^^^^^^^^^^^^^^^^ .. java:method:: @Override protected boolean checkTypeSpecValidity(TapList dejaVu) :outertype: ModifiedTypeSpec cloneAsUndefinedNumeric ^^^^^^^^^^^^^^^^^^^^^^^ .. java:method:: @Override protected TypeSpec cloneAsUndefinedNumeric(boolean undefined) :outertype: ModifiedTypeSpec collectUsedTrees ^^^^^^^^^^^^^^^^ .. java:method:: @Override public void collectUsedTrees(TapList toUsedTrees, TapList toDejaVu) :outertype: ModifiedTypeSpec compareModifiersWith ^^^^^^^^^^^^^^^^^^^^ .. java:method:: protected static boolean compareModifiersWith(int leftModifierInteger, Tree leftModifierTree, int rightModifierInteger, Tree rightModifierTree, int comparison) :outertype: ModifiedTypeSpec .. parsed-literal:: Convention: integer size modifiers may be: n>0 for a known size in bytes, -> in this case the "Tree" modifier is the size expression, that could be evaluated to n 0 for unmodified base type size (but not explicited because compiler_dependent) -> in this case the "Tree" modifier is null, since there was no modifier! -1 for unknown size value (specified by Tree T) -> in this case the "Tree" modifier is the size expression, which could not be evaluated -2 for double base type size -> in this case the "Tree" modifier is op_intCst:-2 meaning "double" or "long" -3 for short, -> in this case the "Tree" modifier is op_intCst:-3 meaning "short" -4 for double double base type size. -> in this case the "Tree" modifier is op_intCst:-4 meaning "long double" or "long long" In the tables below, leftmodifier is on the left, rightmodifier on the top, tt means ok, ff means not-ok, * means acceptable but possible accuracy problem :param leftModifierInteger: :param leftModifierTree: :param rightModifierInteger: :param rightModifierTree: :param comparison: complexDuplModifier ^^^^^^^^^^^^^^^^^^^ .. java:method:: public Tree complexDuplModifier() :outertype: ModifiedTypeSpec Given the size modifier of this ModifiedTypeSpec, which is assumedly applied to a non-complex type, tries to build a size modifier Tree that would apply to a complex that has this type of real/imaginary parts. complexHalfModifier ^^^^^^^^^^^^^^^^^^^ .. java:method:: public Tree complexHalfModifier() :outertype: ModifiedTypeSpec Given the size modifier of this ModifiedTypeSpec, which is assumedly applied to a complex type, tries to build a size modifier Tree that would apply to either the real or imaginary part. computeSize ^^^^^^^^^^^ .. java:method:: @Override protected int computeSize() :outertype: ModifiedTypeSpec containsAPointer ^^^^^^^^^^^^^^^^ .. java:method:: @Override public boolean containsAPointer() :outertype: ModifiedTypeSpec containsMetaType ^^^^^^^^^^^^^^^^ .. java:method:: @Override protected boolean containsMetaType(TapList dejaVu) :outertype: ModifiedTypeSpec containsUnknownDimension ^^^^^^^^^^^^^^^^^^^^^^^^ .. java:method:: @Override public boolean containsUnknownDimension() :outertype: ModifiedTypeSpec copy ^^^^ .. java:method:: @Override public TypeSpec copy() :outertype: ModifiedTypeSpec copyStopOnComposite ^^^^^^^^^^^^^^^^^^^ .. java:method:: @Override public TypeSpec copyStopOnComposite(Unit publishedUnit) :outertype: ModifiedTypeSpec cumulActiveParts ^^^^^^^^^^^^^^^^ .. java:method:: @Override protected void cumulActiveParts(TapList diffInfos, SymbolTable symbolTable) :outertype: ModifiedTypeSpec differentiateTypeSpec ^^^^^^^^^^^^^^^^^^^^^ .. java:method:: @Override public WrapperTypeSpec differentiateTypeSpec(SymbolTable symbolTable, SymbolTable srcSymbolTable, int diffUnitSort, String fSuffix, boolean localDecl, boolean multiDirMode, ArrayDim multiDirDimensionMax, String hintArrayNameInText, String hintArrayNameInIdent, Tree hintArrayNameTree, Tree nameTree) :outertype: ModifiedTypeSpec doUpdateAfterImports ^^^^^^^^^^^^^^^^^^^^ .. java:method:: @Override public void doUpdateAfterImports(SymbolTable symbolTable, TapList dejaVu) :outertype: ModifiedTypeSpec dump ^^^^ .. java:method:: @Override public void dump() throws java.io.IOException :outertype: ModifiedTypeSpec elementType ^^^^^^^^^^^ .. java:method:: @Override public WrapperTypeSpec elementType() :outertype: ModifiedTypeSpec The unmodified type inside. generateTree ^^^^^^^^^^^^ .. java:method:: @Override public Tree generateTree(SymbolTable symbolTable, TapList dependsOn, TapList shortNames, boolean useShortNames, TapList dejaVu) :outertype: ModifiedTypeSpec getModifierFrom ^^^^^^^^^^^^^^^ .. java:method:: protected void getModifierFrom(ModifiedTypeSpec model) :outertype: ModifiedTypeSpec Set the modifier of this modified type, following the given model modified type. hasCbindingModifier ^^^^^^^^^^^^^^^^^^^ .. java:method:: public boolean hasCbindingModifier() :outertype: ModifiedTypeSpec hasCbindingModifier ^^^^^^^^^^^^^^^^^^^ .. java:method:: public boolean hasCbindingModifier(String cModifier) :outertype: ModifiedTypeSpec hasKindEqual ^^^^^^^^^^^^ .. java:method:: public boolean hasKindEqual() :outertype: ModifiedTypeSpec hasUndefinedSize ^^^^^^^^^^^^^^^^ .. java:method:: @Override protected boolean hasUndefinedSize() :outertype: ModifiedTypeSpec intToReal ^^^^^^^^^ .. java:method:: @Override public TypeSpec intToReal(TapList> dejaVu, SymbolTable symbolTable) :outertype: ModifiedTypeSpec isArray ^^^^^^^ .. java:method:: @Override public boolean isArray() :outertype: ModifiedTypeSpec isCharacter ^^^^^^^^^^^ .. java:method:: @Override public boolean isCharacter() :outertype: ModifiedTypeSpec isDifferentiated ^^^^^^^^^^^^^^^^ .. java:method:: @Override public boolean isDifferentiated(TapList dejaVu) :outertype: ModifiedTypeSpec isPointer ^^^^^^^^^ .. java:method:: @Override public boolean isPointer() :outertype: ModifiedTypeSpec isString ^^^^^^^^ .. java:method:: @Override public boolean isString() :outertype: ModifiedTypeSpec isTarget ^^^^^^^^ .. java:method:: @Override public boolean isTarget() :outertype: ModifiedTypeSpec isUndefinedNumeric ^^^^^^^^^^^^^^^^^^ .. java:method:: @Override protected boolean isUndefinedNumeric() :outertype: ModifiedTypeSpec localize ^^^^^^^^ .. java:method:: @Override protected TypeSpec localize(TapList> toAlreadyCopied, ToBool containsMeta) :outertype: ModifiedTypeSpec needsADiffType ^^^^^^^^^^^^^^ .. java:method:: @Override public boolean needsADiffType(TapList dejaVu) :outertype: ModifiedTypeSpec nestedLevelType ^^^^^^^^^^^^^^^ .. java:method:: @Override public TypeSpec nestedLevelType() :outertype: ModifiedTypeSpec peelPointer ^^^^^^^^^^^ .. java:method:: @Override protected TypeSpec peelPointer() :outertype: ModifiedTypeSpec preciseDimensions ^^^^^^^^^^^^^^^^^ .. java:method:: @Override public TypeSpec preciseDimensions(TypeSpec complementType, TapList> dejaVu, SymbolTable symbolTable) :outertype: ModifiedTypeSpec precisionSize ^^^^^^^^^^^^^ .. java:method:: @Override public int precisionSize() :outertype: ModifiedTypeSpec :return: the size in bytes of this numeric type, or -1 for unknown, or -2, -3, or -4 for double,short,or quadruple. realToComplex ^^^^^^^^^^^^^ .. java:method:: @Override protected TypeSpec realToComplex(TapList> dejaVu, WrapperTypeSpec complexTypeSpec) :outertype: ModifiedTypeSpec resolveSizeModifier ^^^^^^^^^^^^^^^^^^^ .. java:method:: protected void resolveSizeModifier(SymbolTable symbolTable) :outertype: ModifiedTypeSpec Tries to evaluate the sizeModifier expression tree that is used to declare this modified type. If sizeModifier is null (e.g. modifier is only an "unsigned") then evaluation returns null. Else if the expression is "double", "long", "long long", etc then the evaluation returns intCst -2 or -4. Else if the expression evaluates to an integer value, then the evaluation returns this value in an intCst. Else if the expression is a constant with an initial value, returns the evaluation of this initial value. Else returns the sizeModifier itself. setHasUndefinedSize ^^^^^^^^^^^^^^^^^^^ .. java:method:: @Override protected void setHasUndefinedSize(boolean val) :outertype: ModifiedTypeSpec setUndefinedNumeric ^^^^^^^^^^^^^^^^^^^ .. java:method:: @Override protected void setUndefinedNumeric(boolean value) :outertype: ModifiedTypeSpec setWrappedType ^^^^^^^^^^^^^^ .. java:method:: @Override public void setWrappedType(TypeSpec type) :outertype: ModifiedTypeSpec showType ^^^^^^^^ .. java:method:: @Override public String showType() :outertype: ModifiedTypeSpec sizeModifierIntegerSmaller ^^^^^^^^^^^^^^^^^^^^^^^^^^ .. java:method:: protected static boolean sizeModifierIntegerSmaller(int smallSize, int largeSize) :outertype: ModifiedTypeSpec sizeModifierValue ^^^^^^^^^^^^^^^^^ .. java:method:: public int sizeModifierValue() :outertype: ModifiedTypeSpec :return: the size of this modified type, if statically known, else returns -1. If size is a dynamic variable, returns -1. If the size is defined relatively (e.g. "double"), then doesn't compute the final, compiler-dependent value, and instead returns -2 or -4 for "long double". testComparesWith ^^^^^^^^^^^^^^^^ .. java:method:: @Override protected boolean testComparesWith(TypeSpec other, int comparison, TypeSpec toThis, TypeSpec toOther, TapList> dejaVu) :outertype: ModifiedTypeSpec toString ^^^^^^^^ .. java:method:: @Override public String toString() :outertype: ModifiedTypeSpec weakenForInference ^^^^^^^^^^^^^^^^^^ .. java:method:: @Override protected TypeSpec weakenForInference(int comparison) :outertype: ModifiedTypeSpec wrappedType ^^^^^^^^^^^ .. java:method:: @Override public TypeSpec wrappedType() :outertype: ModifiedTypeSpec