IDA C++ SDK 9.2
|
C++ Try statement. More...
#include <hexrays.hpp>
Public Member Functions | |
DECLARE_COMPARISONS (ctry_t) | |
void | print (const citem_t *parent, int indent, vc_printer_t &vp) const |
Public Member Functions inherited from cblock_t | |
DECLARE_COMPARISONS (cblock_t) | |
Public Member Functions inherited from qlist< cinsn_t > | |
DEFINE_LIST_ITERATOR (iterator,, friend class const_iterator;) DEFINE_LIST_ITERATOR(const_iterator | |
const_iterator (const iterator &x) | |
DEFINE_REVERSE_ITERATOR (reverse_iterator, iterator) DEFINE_REVERSE_ITERATOR(const_reverse_iterator | |
const_iterator | qlist (void) |
Constructor. | |
qlist (const qlist< cinsn_t > &x) | |
Constructor - creates a qlist identical to 'x'. | |
~qlist (void) | |
Destructor. |
Public Attributes | |
ccatchvec_t | catchs |
"catch all", if present, must be the last element. | |
size_t | old_state = 0 |
old state number (internal, MSVC related) | |
size_t | new_state = 0 |
new state number (internal, MSVC related) | |
bool | is_wind = false |
Is C++ wind statement? | |
Public Attributes inherited from qlist< cinsn_t > | |
const |
Additional Inherited Members | |
Public Types inherited from qlist< cinsn_t > | |
typedef cinsn_t | value_type |
C++ Try statement.
This structure is also used to represent wind statements.
ctry_t::DECLARE_COMPARISONS | ( | ctry_t | ) |
void ctry_t::print | ( | const citem_t * | parent, |
int | indent, | ||
vc_printer_t & | vp ) const |
ccatchvec_t ctry_t::catchs |
"catch all", if present, must be the last element.
wind-statements must have "catch all" and nothing else.
size_t ctry_t::old_state = 0 |
old state number (internal, MSVC related)
size_t ctry_t::new_state = 0 |
new state number (internal, MSVC related)
bool ctry_t::is_wind = false |
Is C++ wind statement?
(not part of the C++ language) MSVC generates code like the following to keep track of constructed objects and destroy them upon an exception. Example:
// an object is constructed at this point __wind { // some other code that may throw an exception } __unwind { // this code is executed only if there was an exception // in the __wind block. normally here we destroy the object // after that the exception is passed to the // exception handler, regular control flow is interrupted here. } // regular logic continues here, if there were no exceptions // also the object's destructor is called