IDA C++ SDK 9.2
Loading...
Searching...
No Matches
cinsn_t Struct Reference

Ctree item: statement. More...

#include <hexrays.hpp>

Inheritance diagram for cinsn_t:
citem_t ccase_t

Public Member Functions

 cinsn_t ()
 cinsn_t (const cinsn_t &r)
void swap (cinsn_t &r)
cinsn_toperator= (const cinsn_t &r)
cinsn_t &hexapi assign (const cinsn_t &r)
 DECLARE_COMPARISONS (cinsn_t)
 ~cinsn_t ()
void hexapi replace_by (cinsn_t *r)
 Replace the statement.
void hexapi cleanup ()
 Cleanup the statement.
void zero ()
 Overwrite with zeroes without cleaning memory or deleting children.
cinsn_t &hexapi new_insn (ea_t insn_ea)
 Create a new statement.
cif_t &hexapi create_if (cexpr_t *cnd)
 Create a new if-statement.
void hexapi print (int indent, vc_printer_t &vp, use_curly_t use_curly=CALC_CURLY_BRACES) const
 Print the statement into many lines.
void hexapi print1 (qstring *vout, const cfunc_t *func) const
 Print the statement into one line.
bool hexapi is_ordinary_flow () const
 Check if the statement passes execution to the next statement.
bool hexapi contains_insn (ctype_t type, int times=1) const
 Check if the statement contains a statement of the specified type.
bool hexapi collect_free_breaks (cinsnptrvec_t *breaks)
 Collect free break statements.
bool hexapi collect_free_continues (cinsnptrvec_t *continues)
 Collect free continue statements.
bool contains_free_break () const
 Check if the statement has free break statements.
bool contains_free_continue () const
 Check if the statement has free continue statements.
const char *hexapi dstr () const
Public Member Functions inherited from citem_t
 citem_t (ctype_t o=cot_empty)
void swap (citem_t &r)
 Swap two citem_t.
bool is_expr () const
 Is an expression?
bool hexapi contains_expr (const cexpr_t *e) const
 Does the item contain an expression?
bool hexapi contains_label () const
 Does the item contain a label?
const citem_t *hexapi find_parent_of (const citem_t *item) const
 Find parent of the specified item.
citem_tfind_parent_of (const citem_t *item)
citem_t *hexapi find_closest_addr (ea_t _ea)
void print1 (qstring *vout, const cfunc_t *func) const
 Print item into one line.
 ~citem_t ()

Public Attributes

union { 
   cblock_t *   cblock 
 details of block-statement More...
   cexpr_t *   cexpr 
 details of expression-statement More...
   cif_t *   cif 
 details of if-statement More...
   cfor_t *   cfor 
 details of for-statement More...
   cwhile_t *   cwhile 
 details of while-statement More...
   cdo_t *   cdo 
 details of do-statement More...
   cswitch_t *   cswitch 
 details of switch-statement More...
   creturn_t *   creturn 
 details of return-statement More...
   cgoto_t *   cgoto 
 details of goto-statement More...
   casm_t *   casm 
 details of asm-statement More...
   ctry_t *   ctry 
 details of try-statement More...
   cthrow_t *   cthrow 
 details of throw-statement More...
}; 
Public Attributes inherited from citem_t
ea_t ea = BADADDR
 address that corresponds to the item. may be BADADDR
ctype_t op
 item type
int label_num = -1
 label number.
int index = -1
 an index in cfunc_t::treeitems.

Detailed Description

Ctree item: statement.

Depending on the exact statement type, various fields of the union are used.

Constructor & Destructor Documentation

◆ cinsn_t() [1/2]

cinsn_t::cinsn_t ( )
inline

◆ cinsn_t() [2/2]

cinsn_t::cinsn_t ( const cinsn_t & r)
inline

◆ ~cinsn_t()

cinsn_t::~cinsn_t ( )
inline

Member Function Documentation

◆ swap()

void cinsn_t::swap ( cinsn_t & r)
inline

◆ operator=()

cinsn_t & cinsn_t::operator= ( const cinsn_t & r)
inline

◆ assign()

cinsn_t & cinsn_t::assign ( const cinsn_t & r)
inline

◆ DECLARE_COMPARISONS()

cinsn_t::DECLARE_COMPARISONS ( cinsn_t )

◆ replace_by()

void cinsn_t::replace_by ( cinsn_t * r)
inline

Replace the statement.

The children of the statement are abandoned (not freed). The statement pointed by 'r' is moved to 'this' statement

Parameters
rthe source statement. It is deleted after being copied

◆ cleanup()

void cinsn_t::cleanup ( )
inline

Cleanup the statement.

This function properly deletes all children and sets the item type to cit_empty.

◆ zero()

void cinsn_t::zero ( )
inline

Overwrite with zeroes without cleaning memory or deleting children.

◆ new_insn()

cinsn_t & cinsn_t::new_insn ( ea_t insn_ea)
inline

Create a new statement.

The current statement must be a block. The new statement will be appended to it.

Parameters
insn_eastatement address

◆ create_if()

cif_t & cinsn_t::create_if ( cexpr_t * cnd)
inline

Create a new if-statement.

The current statement must be a block. The new statement will be appended to it.

Parameters
cndif condition. It will be deleted after being copied.

◆ print()

void cinsn_t::print ( int indent,
vc_printer_t & vp,
use_curly_t use_curly = CALC_CURLY_BRACES ) const
inline

Print the statement into many lines.

Parameters
indentindention (number of spaces) for the statement
vpprinter helper class which will receive the generated text.
use_curlyif the statement is a block, how should curly braces be printed.

◆ print1()

void cinsn_t::print1 ( qstring * vout,
const cfunc_t * func ) const
inline

Print the statement into one line.

Currently this function is not available.

Parameters
voutoutput buffer
funcparent function. This argument is used to find out the referenced variable names.

◆ is_ordinary_flow()

bool cinsn_t::is_ordinary_flow ( ) const
inline

Check if the statement passes execution to the next statement.

Returns
false if the statement breaks the control flow (like goto, return, etc)

◆ contains_insn()

bool cinsn_t::contains_insn ( ctype_t type,
int times = 1 ) const
inline

Check if the statement contains a statement of the specified type.

Parameters
typestatement opcode to look for
timeshow many times TYPE should be present
Returns
true if the statement has at least TIMES children with opcode == TYPE

◆ collect_free_breaks()

bool cinsn_t::collect_free_breaks ( cinsnptrvec_t * breaks)
inline

Collect free break statements.

This function finds all free break statements within the current statement. A break statement is free if it does not have a loop or switch parent that that is also within the current statement.

Parameters
breakspointer to the variable where the vector of all found free break statements is returned. This argument can be nullptr.
Returns
true if some free break statements have been found

◆ collect_free_continues()

bool cinsn_t::collect_free_continues ( cinsnptrvec_t * continues)
inline

Collect free continue statements.

This function finds all free continue statements within the current statement. A continue statement is free if it does not have a loop parent that that is also within the current statement.

Parameters
continuespointer to the variable where the vector of all found free continue statements is returned. This argument can be nullptr.
Returns
true if some free continue statements have been found

◆ contains_free_break()

bool cinsn_t::contains_free_break ( ) const
inline

Check if the statement has free break statements.

◆ contains_free_continue()

bool cinsn_t::contains_free_continue ( ) const
inline

Check if the statement has free continue statements.

◆ dstr()

const char * cinsn_t::dstr ( ) const
inline

Member Data Documentation

◆ cblock

cblock_t* cinsn_t::cblock

details of block-statement

◆ cexpr

cexpr_t* cinsn_t::cexpr

details of expression-statement

◆ cif

cif_t* cinsn_t::cif

details of if-statement

◆ cfor

cfor_t* cinsn_t::cfor

details of for-statement

◆ cwhile

cwhile_t* cinsn_t::cwhile

details of while-statement

◆ cdo

cdo_t* cinsn_t::cdo

details of do-statement

◆ cswitch

cswitch_t* cinsn_t::cswitch

details of switch-statement

◆ creturn

creturn_t* cinsn_t::creturn

details of return-statement

◆ cgoto

cgoto_t* cinsn_t::cgoto

details of goto-statement

◆ casm

casm_t* cinsn_t::casm

details of asm-statement

◆ ctry

ctry_t* cinsn_t::ctry

details of try-statement

◆ cthrow

cthrow_t* cinsn_t::cthrow

details of throw-statement

◆ [union]

union { ... } cinsn_t

The documentation for this struct was generated from the following file: