- Contains 20 commits:
- init work of demangler
- add some comments
- add parsing of name, class_name, namespace of objects(class and global)
- refactor
- add parsing of some type codes
- add skeleton of state machine for type code parsing
- add parsing of standard type for type codes state machine
- add parsing of type codes: _{J,K,T,Z,W}
- add parsing of types __m** and union
- add parsing of type codes: _m***, struct *
- add parsing of W type codes: enums...
- refactor getting of namespaces and name variables
- add class type code parsing
- add parsing of long double and bool
- add parsing of X * const volatile
- add parsing of * and & ( Q, R, S, A )
- add parsing of array
- integrate some initial part of microsofr demangler to rabin2
- fix some small bugs
- add parsing of variable storage class and do some small fix
43 lines
1.9 KiB
C
43 lines
1.9 KiB
C
#ifndef DEMANGLER_H
|
|
#define DEMANGLER_H
|
|
|
|
#include "demangler_types.h"
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// Usage of SDemangler:
|
|
// SDemangler *mangler = 0;
|
|
// char *demangled_name = 0;
|
|
// create_demangler(&mangler); // can be checked == eDemanlerErrMemoryAlloc...
|
|
// if (init_demangler(mangler, str) == eDemanglerErrOK) {
|
|
// mangler->demangle(mangler, &demangled_name);
|
|
// }
|
|
// free_demangler(mangler);
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
/// \brief Create object of demangler.
|
|
/// \param demangler Object that will be created
|
|
/// \return Returns eDemangleErrOK if creating of object has been finish with
|
|
/// success, else - eDemanglerErrMemoryAllocation
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
EDemanglerErr create_demangler(SDemangler **demangler);
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
/// \brief Initialize object of demangler
|
|
/// \param demangler Object of demangler that will be initialized
|
|
/// \param sym Symbol that need to be demangled
|
|
/// \return Returns eDemangleErrOK if creating of object has been finish with
|
|
/// success, else one of next errors: eManglingUnsupported,
|
|
/// eDemanglerErrMemoryAllocation, eDemanglerErrUnsupportedMangling,
|
|
/// eDemanglerErrUnkown
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
EDemanglerErr init_demangler(SDemangler *demangler, char *sym);
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
/// \brief Deallocate demangler object
|
|
/// \param demangler Demangler object that will be deallocated
|
|
/// \return Returns void
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
void free_demangler(SDemangler *demangler);
|
|
|
|
#endif // DEMANGLER_H
|