| java.lang.Object | |
| ↳ | com.pnfsoftware.jeb.core.units.code.asm.type.TypeUtil |
Utility routines for native types.
| Constants | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| String | CPP_PACKAGE_SEPARATOR | ||||||||||
| int | TYPESOURCE_ALL | ||||||||||
| int | TYPESOURCE_INUSE | ||||||||||
| int | TYPESOURCE_TYPELIBS | ||||||||||
| Fields | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| public static final Pattern | CPP_TEMPLATE_REGEXP | ||||||||||
| public static final Set<String> | keywords | ||||||||||
| Public Constructors | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| TypeUtil() | |||||||||||
| Public Methods | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| static boolean | areBitfielTypesEquivalent(INativeType a, INativeType b) | ||||||||||
| static INativeType |
buildArrayType(ITypeManager typeman, String lowestElementSignature, int... dimensions)
Convenience routine to create an array type, possibly multi-dimensional.
| ||||||||||
| static String | buildFullyQualifiedTypeNameFromElements(List<String> elements) | ||||||||||
| static INativeType | buildQuick(ITypeManager typeman, String signature) | ||||||||||
| static IPrototypeItem |
buildQuickPrototype(ITypeManager typeman, String protoString)
Generate a simple prototype item from a prototype string.
| ||||||||||
| static INativeType |
buildQuickType(ITypeManager typeman, String signature)
Create an array or reference type using an existing base type.
| ||||||||||
| static boolean |
checkAliasedType(INativeType t, INativeType expectedType)
Check if a type aliases another type.
| ||||||||||
| static List<INativeType> | collectTypes(IPrototypeItem proto) | ||||||||||
| static boolean |
containsCppSeparator(String name)
Fast check, equivalent to
string.contains(CPP_PACKAGE_SEPARATOR). | ||||||||||
| static INativeType |
findShorterForm(INativeType _t)
Attempt to retrieve a type equivalent to the provided input type, but whose string
representation is shorter.
| ||||||||||
| static List<INativeType> |
findType(Collection<? extends INativeType> types, String pattern, boolean earlyExitOnFirstMatch)
Find a type by pattern (partial name or signature, original or effective).
| ||||||||||
| static String |
generateRoutineSignature(String name, IPrototypeItem proto)
Generate a routine signature given a prototype and a routine name.
| ||||||||||
| static INativeType |
getBaseType(INativeType type)
Provide the base type of a type.
| ||||||||||
| static INativeType |
getFirstSimpleType(INativeType type)
Get the first simple type embedded in the given type.
| ||||||||||
| static TypeLayoutInfo | getLayoutInfo(INativeType t) | ||||||||||
| static <T extends INativeType> T | getNonAlias(INativeType t, Class<T> expected) | ||||||||||
| static INativeType | getNonAlias(INativeType t) | ||||||||||
| static IStructureTypeField |
getStructureField(INativeType t, String fieldName)
Given a structure type (or an alias to one), retrieve the field with the provided name.
| ||||||||||
| static IStructureTypeField |
getStructureField(INativeType t, int fieldStartOffset)
Given a structure type (or an alias to one), retrieve the field at the provided offset.
| ||||||||||
| static boolean | isAlias(INativeType t) | ||||||||||
| static boolean | isBitfieldCompatible(INativeType t) | ||||||||||
| static boolean | isCharacter(INativeType t) | ||||||||||
| static boolean |
isCompositeType(INativeType t)
Determine if the (unaliased) type is an array or a structure type.
| ||||||||||
| static boolean | isFloat(INativeType t) | ||||||||||
| static boolean |
isFunctionPointer(INativeType t)
Determine if the provided type is a function pointer, that is, a reference (aliased or not)
to a prototype item.
| ||||||||||
| static boolean |
isFunctionPointer(INativeType t, IPrototypeItem[] aproto)
Determine if the provided type is a function pointer, that is, a reference (aliased or not)
to a prototype item.
| ||||||||||
| static boolean | isInteger(INativeType t) | ||||||||||
| static boolean | isKeyword(String s) | ||||||||||
| static boolean |
isPointer(INativeType t)
Determine if the (unaliased) type is a reference type.
| ||||||||||
| static boolean |
isPointerToPointer(INativeType t)
Determine if the (unaliased) type is a reference to a reference type.
| ||||||||||
| static boolean | isPrimitive(INativeType t) | ||||||||||
| static boolean | isPrototype(INativeType t) | ||||||||||
| static boolean | isReference(INativeType t) | ||||||||||
| static boolean | isReservedLiteral(String s) | ||||||||||
| static boolean | isSignedInteger(INativeType t) | ||||||||||
| static boolean | isSimple(INativeType t) | ||||||||||
| static boolean | isUnsignedInteger(INativeType t) | ||||||||||
| static boolean |
isValidFullyQualifiedName(String basesig, List<String> elements, String[] aname)
Parse and validate the elements of a normalized signature (aka fully-qualified name).
| ||||||||||
| static boolean | isValidPackageName(String s) | ||||||||||
| static boolean | isValidTypeName(String s) | ||||||||||
| static boolean | isVoid(INativeType t) | ||||||||||
| static boolean | isVoidPointer(INativeType t) | ||||||||||
| static String |
normalizeSignature(boolean alreadyPreNormalized, String signature, List<String> elements, int[] counts)
Normalize a type signature (including reference types).
| ||||||||||
| static String | preNormalizeSignature(String signature) | ||||||||||
| static String |
processSignature(String signature, int[] counts)
Process non array or single-dimension arrays of reference or non-reference types.
| ||||||||||
| static List<INativeType> | retrieveAvailableTypes(INativeCodeUnit<?> unit, int sourceFlags) | ||||||||||
| static List<INativeType> | retrieveAvailableTypes(INativeCodeUnit<?> unit, int sourceFlags, ISimpleFilter<INativeType> filter) | ||||||||||
| static boolean | same(INativeType a, INativeType b) | ||||||||||
| static List<String> |
splitCppName(String fullName)
Split a C++ name using
CPP_PACKAGE_SEPARATOR as separator. | ||||||||||
| static List<String> |
splitCppParameters(String parameters)
Split a list of C++ parameters separated by comma.
| ||||||||||
| static boolean |
structureInStructure(IStructureType structType, INativeType type)
Detect structure cycles: Determine if the second parameter type is or contains the structure
type provided as the first parameter.
| ||||||||||
|
[Expand]
Inherited Methods | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
From class
java.lang.Object
| |||||||||||
Convenience routine to create an array type, possibly multi-dimensional.
| lowestElementSignature | finest element type (ideally, should be a non-array) |
|---|---|
| dimensions | highest dimensions first, eg, (2, 3, 4) -> type[2][3][4] |
Generate a simple prototype item from a prototype string. Complex prototypes cannot be parsed
by this routine. Prototypes attributes other than var-arg (via `...`) are not supported
either. Refer to TypeStringParser for a full-blown C type and prototype parser.
Format:
[<calling-convention>]returnType([param1Type[, param2Type[, ...]]])Examples:
void() int() unsigned int(char) <cdecl>char(int, int, int)
| protoString | see format above |
|---|
Create an array or reference type using an existing base type. This method is for convenience only, and by no means exhaustive. Proper type building requires adequate parsing; refer to TLGen. (TODO: bindings to support string type parsing provided by TLGen).
| signature | accepted signatures: abc, abc*, abc**, abc[6], abc*[10], abc**[20]; other type signatures are not accepted (eg, abc[2][4], abc[4]*, abc**[12], etc.) |
|---|
Check if a type aliases another type.
| t | the type to be checked |
|---|---|
| expectedType | the other type, supposedly aliased by the first parameter |
Fast check, equivalent to string.contains(CPP_PACKAGE_SEPARATOR).
| name | Potential CPP name with pacakges |
|---|
splitCppName(String) to
retrieve CPP elements.
Attempt to retrieve a type equivalent to the provided input type, but whose string representation is shorter.
| _t | an input type |
|---|
Find a type by pattern (partial name or signature, original or effective). Does not include primitives.
| types | input types |
|---|---|
| pattern | type "pattern" (partial name or signature) |
| earlyExitOnFirstMatch | exit on first match: the returned list will contain one element |
Generate a routine signature given a prototype and a routine name.
Provide the base type of a type. The base type of a pointer type is its non-pointer type; the base type of an array type is its dimension-less type. Primitive, class, structure, union, enumeration and alias types, as well as prototypes, are all considered base types.
Get the first simple type embedded in the given type.
Given a structure type (or an alias to one), retrieve the field with the provided name.
| t | a type whose non-alias should be a structure |
|---|---|
| fieldName | a field name |
Given a structure type (or an alias to one), retrieve the field at the provided offset.
| t | a type whose non-alias should be a structure |
|---|---|
| fieldStartOffset | a field offset |
Determine if the (unaliased) type is an array or a structure type.
Determine if the provided type is a function pointer, that is, a reference (aliased or not) to a prototype item.
Determine if the provided type is a function pointer, that is, a reference (aliased or not) to a prototype item.
| t | input type |
|---|---|
| aproto | optional 1-element array receiving the prototype object on success |
Determine if the (unaliased) type is a reference type.
Determine if the (unaliased) type is a reference to a reference type.
Parse and validate the elements of a normalized signature (aka fully-qualified name).
| basesig | normalized signature, dimension-less, reference-less |
|---|---|
| elements | optional (output elements) |
| aname | optional (output name) |
Normalize a type signature (including reference types).
What it does: Make sure the type separator is {@value #CPP_PACKAGE_SEPARATOR} (not '.' or '/'). Remove header and trailer whitespace. Remove header {@value #CPP_PACKAGE_SEPARATOR} if any. Validate signature elements.
| alreadyPreNormalized | true if the signature has been
pre-normalized |
|---|---|
| signature | a non-canonical type signature |
| elements | optional output list to hold the signature elements of the base type signature |
| counts | optional output two-element array, will hold the reference count and the
dimension count of the provided signature; refer to
processSignature(String, int[]) |
Process non array or single-dimension arrays of reference or non-reference types.
| signature | a pre-normalized signature of the type |
|---|---|
| counts | optional output array, contains the reference count (0 if none) and the single-dimension array count (-1 if none) |
Split a C++ name using CPP_PACKAGE_SEPARATOR as separator.
For example, 'std
Split a list of C++ parameters separated by comma. Start/End Parentheses are optional.
For example, 'std
Detect structure cycles: Determine if the second parameter type is or contains the structure type provided as the first parameter.
| structType | the input structure |
|---|---|
| type | the type to be vetted against the provided structure |