decompiler  1.0.0
Public Member Functions | Protected Types | Protected Member Functions | Static Protected Member Functions | Protected Attributes | Friends | List of all members
Datatype Class Referenceabstract

The base datatype class for the decompiler. More...

#include <type.hh>

Inheritance diagram for Datatype:
TypeArray TypeBase TypeCode TypePointer TypeSpacebase TypeStruct TypeVoid TypeChar TypeEnum TypeUnicode

Public Member Functions

 Datatype (const Datatype &op)
 Construct the base data-type copying low-level properties of another.
 Datatype (int4 s, type_metatype m)
 Construct the base data-type providing size and meta-type.
 Datatype (int4 s, type_metatype m, const string &n)
 Construct the base data-type providing size, meta-type, and name.
virtual ~Datatype (void)
bool isCoreType (void) const
 Is this a core data-type.
bool isCharPrint (void) const
 Does this print as a 'char'.
bool isEnumType (void) const
 Is this an enumerated type.
bool isPowerOfTwo (void) const
 Is this a flag-based enumeration.
bool isASCII (void) const
 Does this print as an ASCII 'char'.
bool isUTF16 (void) const
 Does this print as UTF16 'wchar'.
bool isUTF32 (void) const
 Does this print as UTF32 'wchar'.
uint4 getInheritable (void) const
 Get properties pointers inherit.
type_metatype getMetatype (void) const
 Get the type meta-type.
uint8 getId (void) const
 Get the type id.
int4 getSize (void) const
 Get the type size.
const string & getName (void) const
 Get the type name.
virtual void printRaw (ostream &s) const
 Print a description of the type to stream. More...
virtual DatatypegetSubType (uintb off, uintb *newoff) const
 Recover component data-type one-level down. More...
virtual int4 numDepend (void) const
 Return number of component sub-types.
virtual DatatypegetDepend (int4 index) const
 Return the i-th component sub-type.
virtual void printNameBase (ostream &s) const
 Print name as short prefix.
virtual int4 compare (const Datatype &op, int4 level) const
 Compare for functional equivalence. More...
virtual int4 compareDependency (const Datatype &op) const
 Compare for storage in tree structure. More...
virtual Datatypeclone (void) const =0
 Clone the data-type.
virtual void saveXml (ostream &s) const
 Serialize the data-type to XML. More...
int4 typeOrder (const Datatype &op) const
 Order this with -op- datatype.
void saveXmlBasic (ostream &s) const
 Save basic data-type properties. More...
void saveXmlRef (ostream &s) const
 Write an XML reference of this to stream. More...

Protected Types

enum  {
  coretype = 1, chartype = 2, enumtype = 4, poweroftwo = 8,
  utf16 = 16, utf32 = 32
 Boolean properties of datatypes. More...

Protected Member Functions

void restoreXmlBasic (const Element *el)
 Recover basic data-type properties. More...
virtual void restoreXml (const Element *el, TypeFactory &typegrp)
 Restore data-type from XML. More...

Static Protected Member Functions

static uint8 hashName (const string &nm)
 Produce a data-type id by hashing the type name. More...

Protected Attributes

int4 size
 Size (of variable holding a value of this type)
string name
 Name of type.
type_metatype metatype
 Meta-type - type disregarding size.
uint4 flags
 Boolean properties of the type.
uint8 id
 A unique id for the type (or 0 if an id is not assigned)


class TypeFactory
struct DatatypeCompare

Detailed Description

The base datatype class for the decompiler.

Used for symbols, function prototypes, type propagation etc.

Member Enumeration Documentation

◆ anonymous enum

anonymous enum

Boolean properties of datatypes.


This is a basic type which will never be redefined.


ASCII character data.


An enumeration type (as well as an integer)


An enumeration type where all values are of 2^^n form.


16-bit wide chars in unicode UTF16


32-bit wide chars in unicode UTF32

Member Function Documentation

◆ compare()

int4 Datatype::compare ( const Datatype op,
int4  level 
) const

Compare for functional equivalence.

Compare this with another data-type. 0 (equality) means the data-types are functionally equivalent (even if names differ) Smaller types come earlier. More specific types come earlier.

opis the data-type to compare with this
levelis maximum level to descend when recursively comparing
negative, 0, positive depending on ordering of types

Reimplemented in TypeSpacebase, TypeCode, TypeStruct, TypeEnum, TypeArray, and TypePointer.

References compareDependency().

Referenced by TypePointer::compare(), and typeOrder().

◆ compareDependency()

int4 Datatype::compareDependency ( const Datatype op) const

Compare for storage in tree structure.

Ordering of data-types for the main TypeFactory container. Comparison only goes down one-level in the component structure, before just comparing pointers.

opis the data-type to compare with this
negative, 0, positive depending on ordering of types

Reimplemented in TypeSpacebase, TypeCode, TypeStruct, TypeEnum, TypeArray, and TypePointer.

References chartype, coretype, flags, metatype, and size.

Referenced by compare(), TypeFactory::findAdd(), DatatypeCompare::operator()(), and TypeFactory::restoreXmlTypeNoRef().

◆ getSubType()

Datatype * Datatype::getSubType ( uintb  off,
uintb *  newoff 
) const

Recover component data-type one-level down.

Given an offset into this data-type, return the component data-type at that offset. Also, pass back a "renormalized" offset suitable for recursize getSubType() calls: i.e. if the original offset hits the exact start of the sub-type, 0 is passed back. If there is no valid component data-type at the offset, return NULL and pass back the original offset

offis the offset into this data-type
newoffis a pointer to the passed-back offset
a pointer to the component data-type or NULL

Reimplemented in TypeSpacebase, TypeStruct, and TypeArray.

Referenced by RuleStructOffset0::applyOp(), RulePtrsubUndo::applyOp(), TypeFactory::downChain(), SymbolEntry::getSizedType(), ActionInferTypes::propagateRef(), RulePtrArith::transformPtr(), and Funcdata::updateFlags().

◆ hashName()

uint8 Datatype::hashName ( const string &  nm)

Produce a data-type id by hashing the type name.

If a type id is explicitly provided for a data-type, this routine is used to produce an id based on a hash of the name. IDs produced this way will have their sign-bit set to distinguish it from other IDs.

nmis the type name to be hashed

Referenced by TypeFactory::getBase(), TypeFactory::getTypeChar(), TypeFactory::getTypeCode(), TypeFactory::getTypeEnum(), TypeFactory::getTypeStruct(), TypeFactory::getTypeUnicode(), TypeFactory::getTypeVoid(), restoreXmlBasic(), TypeFactory::restoreXmlType(), TypeFactory::restoreXmlTypeNoRef(), and TypeFactory::setName().

◆ printRaw()

void Datatype::printRaw ( ostream &  s) const

Print a description of the type to stream.

Print a raw description of the type to stream. Intended for debugging. Not intended to produce parsable C.

sis the output stream

Reimplemented in TypeCode, TypeArray, and TypePointer.

References name, and size.

Referenced by TypeFactory::findAdd(), SymbolEntry::printEntry(), HighVariable::printInfo(), Varnode::printInfo(), TypePointer::printRaw(), and FuncProto::printRaw().

◆ restoreXml()

void Datatype::restoreXml ( const Element el,
TypeFactory typegrp 

Restore data-type from XML.

Restore a Datatype object from an XML element

elis the XML element
typegrpis the underlying TypeFactory that will hold the new object

Reimplemented in TypeSpacebase, TypeCode, TypeStruct, TypeEnum, TypeArray, TypePointer, and TypeUnicode.

References restoreXmlBasic().

Referenced by TypeFactory::restoreXmlTypeNoRef().

◆ restoreXmlBasic()

void Datatype::restoreXmlBasic ( const Element el)

Recover basic data-type properties.

Restore the basic properties (name,size,id) of a data-type from an XML element Properties are read from the attributes of the element

elis the XML element

References coretype, flags, hashName(), id, metatype, name, size, and string2metatype().

Referenced by restoreXml(), TypeUnicode::restoreXml(), and TypeFactory::restoreXmlTypeWithCodeFlags().

◆ saveXml()

void Datatype::saveXml ( ostream &  s) const

Serialize the data-type to XML.

Write out a formal description of the data-type as an XML <type> tag. For composite data-types, the description goes down one level, describing the component types only by reference.

sis the stream to write to

Reimplemented in TypeSpacebase, TypeCode, TypeStruct, TypeEnum, TypeArray, TypePointer, TypeVoid, TypeUnicode, and TypeChar.

References saveXmlBasic().

Referenced by CPoolRecord::saveXml(), ProtoStoreInternal::saveXml(), FuncProto::saveXml(), TypeFactory::saveXmlCoreTypes(), and saveXmlRef().

◆ saveXmlBasic()

void Datatype::saveXmlBasic ( ostream &  s) const

Save basic data-type properties.

Write out basic data-type properties (name,size,id) as XML attributes. This routine presumes the initial tag is already written to the stream.

sis the stream to write to

References coretype, flags, metatype, metatype2string(), name, and size.

Referenced by saveXml(), TypeChar::saveXml(), TypeUnicode::saveXml(), and TypePointer::saveXml().

◆ saveXmlRef()

void Datatype::saveXmlRef ( ostream &  s) const

Write an XML reference of this to stream.

Write a simple reference to this data-type as an XML <typeref> tag, which only encodes the name and id.

sis the stream to write to

References metatype, name, saveXml(), and TYPE_VOID.

Referenced by Symbol::saveXmlBody().

The documentation for this class was generated from the following files: