void ansi_c_convertt::convert_expr(exprt &expr) { if(expr.id()==ID_sideeffect) { const irep_idt &statement=expr.get(ID_statement); if(statement==ID_statement_expression) { assert(expr.operands().size()==1); convert_code(to_code(expr.op0())); return; // done } } Forall_operands(it, expr) convert_expr(*it); if(expr.id()==ID_symbol) { expr.remove(ID_C_id_class); expr.remove(ID_C_base_name); } else if(expr.id()==ID_sizeof) { if(expr.operands().size()==0) { typet &type=static_cast<typet &>(expr.add(ID_type_arg)); convert_type(type); } } else if(expr.id()==ID_designated_initializer) { exprt &designator=static_cast<exprt &>(expr.add(ID_designator)); convert_expr(designator); } else if(expr.id()==ID_alignof) { if(expr.operands().size()==0) { typet &type=static_cast<typet &>(expr.add(ID_type_arg)); convert_type(type); } } else if(expr.id()==ID_gcc_builtin_va_arg) { convert_type(expr.type()); } else if(expr.id()==ID_generic_selection) { assert(expr.operands().size()==1); irept::subt &generic_associations= expr.add(ID_generic_associations).get_sub(); Forall_irep(it, generic_associations) { convert_expr(static_cast<exprt &>(it->add(ID_value))); convert_type(static_cast<typet &>(it->add(ID_type_arg))); }
/// does not replace object in address_of expressions bool replace_symbol_extt::replace(exprt &dest) const { bool result=true; // first look at type if(have_to_replace(dest.type())) if(!replace_symbolt::replace(dest.type())) result=false; // now do expression itself if(!have_to_replace(dest)) return result; // do not replace object in address_of expressions if(dest.id()==ID_address_of) { const exprt &object = to_address_of_expr(dest).object(); if(object.id()==ID_symbol) { expr_mapt::const_iterator it= expr_map.find(object.get(ID_identifier)); if(it!=expr_map.end()) return false; } } else if(dest.id()==ID_symbol) { expr_mapt::const_iterator it= expr_map.find(dest.get(ID_identifier)); if(it!=expr_map.end()) { dest=it->second; return false; } } Forall_operands(it, dest) if(!replace(*it)) result=false; const irept &c_sizeof_type=dest.find(ID_C_c_sizeof_type); if(c_sizeof_type.is_not_nil() && !replace_symbolt::replace( static_cast<typet&>(dest.add(ID_C_c_sizeof_type)))) result=false; const irept &va_arg_type=dest.find(ID_C_va_arg_type); if(va_arg_type.is_not_nil() && !replace_symbolt::replace(static_cast<typet&>(dest.add(ID_C_va_arg_type)))) result=false; return result; }