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 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 |
isComplexType(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 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
![]() |
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.) |
---|
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.
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 |