本文整理汇总了C++中typet::has_subtype方法的典型用法代码示例。如果您正苦于以下问题:C++ typet::has_subtype方法的具体用法?C++ typet::has_subtype怎么用?C++ typet::has_subtype使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类typet
的用法示例。
在下文中一共展示了typet::has_subtype方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: replace
bool replace_symbolt::replace(typet &dest)
{
if(dest.has_subtype())
replace(dest.subtype());
Forall_subtypes(it, dest)
replace(*it);
if(dest.id()=="struct" ||
dest.id()=="union")
{
struct_typet &struct_type = to_struct_type(dest);
struct_typet::componentst &components = struct_type.components();
for (struct_typet::componentst::iterator it = components.begin();
it!=components.end();
it++)
replace(*it);
}
else if(dest.is_code())
{
code_typet &code_type=to_code_type(dest);
code_typet::argumentst &arguments=code_type.arguments();
for (code_typet::argumentst::iterator it = arguments.begin();
it!=arguments.end();
it++)
replace(*it);
}
if(dest.id()=="symbol")
{
type_mapt::const_iterator it=
type_map.find(dest.identifier());
if(it!=type_map.end())
{
dest=it->second;
return false;
}
}
return true;
}
示例2: read_rec
void ansi_c_convert_typet::read_rec(const typet &type)
{
if(type.id()==ID_merged_type)
{
forall_subtypes(it, type)
read_rec(*it);
}
else if(type.id()==ID_signed)
signed_cnt++;
else if(type.id()==ID_unsigned)
unsigned_cnt++;
else if(type.id()==ID_ptr32)
c_qualifiers.is_ptr32=true;
else if(type.id()==ID_ptr64)
c_qualifiers.is_ptr64=true;
else if(type.id()==ID_volatile)
c_qualifiers.is_volatile=true;
else if(type.id()==ID_asm)
{
if(type.has_subtype() &&
type.subtype().id()==ID_string_constant)
c_storage_spec.asm_label=type.subtype().get(ID_value);
}
else if(type.id()==ID_section &&
type.has_subtype() &&
type.subtype().id()==ID_string_constant)
{
c_storage_spec.section=type.subtype().get(ID_value);
}
else if(type.id()==ID_const)
c_qualifiers.is_constant=true;
else if(type.id()==ID_restrict)
c_qualifiers.is_restricted=true;
else if(type.id()==ID_atomic)
c_qualifiers.is_atomic=true;
else if(type.id()==ID_atomic_type_specifier)
{
// this gets turned into the qualifier, uh
c_qualifiers.is_atomic=true;
read_rec(type.subtype());
}
else if(type.id()==ID_char)
char_cnt++;
else if(type.id()==ID_int)
int_cnt++;
else if(type.id()==ID_int8)
int8_cnt++;
else if(type.id()==ID_int16)
int16_cnt++;
else if(type.id()==ID_int32)
int32_cnt++;
else if(type.id()==ID_int64)
int64_cnt++;
else if(type.id()==ID_gcc_float128)
gcc_float128_cnt++;
else if(type.id()==ID_gcc_int128)
gcc_int128_cnt++;
else if(type.id()==ID_gcc_attribute_mode)
{
gcc_attribute_mode=type;
}
else if(type.id()==ID_msc_based)
{
const exprt &as_expr=
static_cast<const exprt &>(static_cast<const irept &>(type));
assert(as_expr.operands().size()==1);
msc_based=as_expr.op0();
}
else if(type.id()==ID_custom_bv)
{
bv_cnt++;
const exprt &size_expr=
static_cast<const exprt &>(type.find(ID_size));
bv_width=size_expr;
}
else if(type.id()==ID_custom_floatbv)
{
floatbv_cnt++;
const exprt &size_expr=
static_cast<const exprt &>(type.find(ID_size));
const exprt &fsize_expr=
static_cast<const exprt &>(type.find(ID_f));
bv_width=size_expr;
fraction_width=fsize_expr;
}
else if(type.id()==ID_custom_fixedbv)
{
fixedbv_cnt++;
const exprt &size_expr=
static_cast<const exprt &>(type.find(ID_size));
const exprt &fsize_expr=
static_cast<const exprt &>(type.find(ID_f));
bv_width=size_expr;
fraction_width=fsize_expr;
}
//.........这里部分代码省略.........
示例3: if
//.........这里部分代码省略.........
result+="S" + type.get_string(ID_width);
else if(type.id()==ID_unsignedbv)
result+="U" + type.get_string(ID_width);
else if(type.id()==ID_bool)
result+="B";
else if(type.id()==ID_integer)
result+="I";
else if(type.id()==ID_real)
result+="R";
else if(type.id()==ID_complex)
result+="C";
else if(type.id()==ID_floatbv)
result+="F" + type.get_string(ID_width);
else if(type.id()==ID_fixedbv)
result+="X" + type.get_string(ID_width);
else if(type.id()==ID_natural)
result+="N";
else if(type.id()==ID_pointer)
result+="*";
else if(type.id()==ID_reference)
result+="&";
else if(type.id()==ID_code)
{
const code_typet &t=to_code_type(type);
const code_typet::argumentst arguments=t.arguments();
result+="P(";
for(code_typet::argumentst::const_iterator it=arguments.begin();
it!=arguments.end();
it++)
{
result+=type2name(it->type());
result+="'" + id2string(it->get_identifier()) + "'|";
}
result.resize(result.size()-1);
result+=")";
}
else if(type.id()==ID_array)
{
const array_typet &t=to_array_type(type);
if(t.size().is_nil())
result+="ARR?";
else
result+="ARR"+t.size().get_string(ID_value);
}
else if(type.id()==ID_symbol)
{
result+="SYM#"+type.get_string(ID_identifier)+"#";
}
else if(type.id()==ID_struct ||
type.id()==ID_union)
{
if(type.id()==ID_struct) result+="ST";
if(type.id()==ID_union) result+="UN";
const struct_union_typet &t=to_struct_union_type(type);
const struct_union_typet::componentst &components = t.components();
result+="[";
for(struct_union_typet::componentst::const_iterator
it=components.begin();
it!=components.end();
it++)
{
if(it!=components.begin()) result+="|";
result+=type2name(it->type());
result+="'"+it->get_string(ID_name)+"'|";
}
result+="]";
}
else if(type.id()==ID_incomplete_struct)
result +="ST?";
else if(type.id()==ID_incomplete_union)
result +="UN?";
else if(type.id()==ID_c_enum)
result +="EN"+type.get_string(ID_width);
else if(type.id()==ID_incomplete_c_enum)
result +="EN?";
else if(type.id()==ID_c_bitfield)
result+="BF"+type.get_string(ID_size);
else if(type.id()==ID_vector)
result+="VEC"+type.get_string(ID_size);
else
throw (std::string("Unknown type '") +
type.id_string() +
"' encountered.");
if(type.has_subtype())
{
result+="{";
result+=type2name(type.subtype());
result+="}";
}
if(type.has_subtypes())
{
result+="$";
forall_subtypes(it, type)
{
result+=type2name(*it);
result+="|";
}