java.lang.Object | |
↳ | com.pnfsoftware.jeb.core.units.code.asm.type.TypeUtil |
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 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 most general sense) 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.
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 most general sense) 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 |