本文整理汇总了C++中namespacet类的典型用法代码示例。如果您正苦于以下问题:C++ namespacet类的具体用法?C++ namespacet怎么用?C++ namespacet使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了namespacet类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: get_component_rec
exprt get_component_rec(
const exprt &struct_union,
const irep_idt &component_name,
const namespacet &ns)
{
const struct_union_typet &struct_union_type=
to_struct_union_type(ns.follow(struct_union.type()));
const struct_union_typet::componentst &components=
struct_union_type.components();
for(struct_union_typet::componentst::const_iterator
it=components.begin();
it!=components.end();
it++)
{
const typet &type=ns.follow(it->type());
if(it->get_name()==component_name)
{
return make_member_expr(struct_union, *it, ns);
}
else if(it->get_anonymous() &&
(type.id()==ID_struct || type.id()==ID_union))
{
exprt tmp=make_member_expr(struct_union, *it, ns);
exprt result=get_component_rec(tmp, component_name, ns);
if(result.is_not_nil()) return result;
}
}
return nil_exprt();
}
示例2: ssa_alias_guard
exprt ssa_alias_guard(
const exprt &e1,
const exprt &e2,
const namespacet &ns)
{
exprt a1=address_canonizer(address_of_exprt(e1), ns);
exprt a2=address_canonizer(address_of_exprt(e2), ns);
// in some cases, we can use plain address equality,
// as we assume well-aligned-ness
mp_integer size1=pointer_offset_size(e1.type(), ns);
mp_integer size2=pointer_offset_size(e2.type(), ns);
if(size1>=size2)
{
exprt lhs=a1;
exprt rhs=a2;
if(ns.follow(rhs.type())!=ns.follow(lhs.type()))
rhs=typecast_exprt(rhs, lhs.type());
return equal_exprt(lhs, rhs);
}
return same_object(a1, a2);
}
示例3: ssa_alias_guard
exprt ssa_alias_guard(
const exprt &e1,
const exprt &e2,
const namespacet &ns)
{
exprt a1=address_canonizer(address_of_exprt(e1), ns);
// TODO: We should compare 'base' pointers here because
// we have a higher chance that there was no pointer arithmetic
// on the base pointer than that the result of the pointer
// arithmetic points to a base pointer.
// The following hack does that:
if(a1.id()==ID_plus)
a1=a1.op0();
exprt a2=address_canonizer(address_of_exprt(e2), ns);
// in some cases, we can use plain address equality,
// as we assume well-aligned-ness
mp_integer size1=pointer_offset_size(e1.type(), ns);
mp_integer size2=pointer_offset_size(e2.type(), ns);
if(size1>=size2)
{
exprt lhs=a1;
exprt rhs=a2;
if(ns.follow(rhs.type())!=ns.follow(lhs.type()))
rhs=typecast_exprt(rhs, lhs.type());
return equal_exprt(lhs, rhs);
}
return same_object(a1, a2);
}
示例4: array_name
std::string array_name(
const namespacet &ns,
const exprt &expr)
{
if(expr.id()==ID_index)
{
if(expr.operands().size()!=2)
throw "index takes two operands";
return array_name(ns, expr.op0())+"[]";
}
else if(is_ssa_expr(expr))
{
const symbolt &symbol=
ns.lookup(to_ssa_expr(expr).get_object_name());
return "array `"+id2string(symbol.base_name)+"'";
}
else if(expr.id()==ID_symbol)
{
const symbolt &symbol=ns.lookup(expr);
return "array `"+id2string(symbol.base_name)+"'";
}
else if(expr.id()==ID_string_constant)
{
return "string constant";
}
else if(expr.id()==ID_member)
{
assert(expr.operands().size()==1);
return array_name(ns, expr.op0())+"."+
expr.get_string(ID_component_name);
}
return "array";
}
示例5: type_eq
bool type_eq(const typet &type1, const typet &type2, const namespacet &ns)
{
if(type1 == type2)
return true;
if(type1.id() == "symbol")
{
const symbolt &symbol = ns.lookup(type1);
if(!symbol.is_type)
throw "symbol " + id2string(symbol.name) + " is not a type";
return type_eq(symbol.type, type2, ns);
}
if(type2.id() == "symbol")
{
const symbolt &symbol = ns.lookup(type2);
if(!symbol.is_type)
throw "symbol " + id2string(symbol.name) + " is not a type";
return type_eq(type1, symbol.type, ns);
}
return false;
}
示例6: show_symbol_table_plain
void show_symbol_table_plain(const namespacet &ns, std::ostream &out)
{
out << std::endl << "Symbols:" << std::endl;
out << "Number of symbols: " << ns.get_context().size() << std::endl;
out << std::endl;
ns.get_context().foreach_operand_in_order([&out, &ns](const symbolt &s) {
int mode;
if(s.mode == "")
mode = 0;
else
{
mode = get_mode(id2string(s.mode));
if(mode < 0)
throw "symbol " + id2string(s.name) + " has unknown mode";
}
std::unique_ptr<languaget> p(mode_table[mode].new_language());
std::string type_str, value_str;
if(s.type.is_not_nil())
p->from_type(s.type, type_str, ns);
if(s.value.is_not_nil())
p->from_expr(s.value, value_str, ns);
out << "Symbol......: " << s.name << std::endl;
out << "Pretty name.: " << s.pretty_name << std::endl;
out << "Module......: " << s.module << std::endl;
out << "Base name...: " << s.base_name << std::endl;
out << "Mode........: " << s.mode << " (" << mode << ")" << std::endl;
out << "Type........: " << type_str << std::endl;
out << "Value.......: " << value_str << std::endl;
out << "Flags.......:";
if(s.lvalue)
out << " lvalue";
if(s.static_lifetime)
out << " static_lifetime";
if(s.file_local)
out << " file_local";
if(s.is_type)
out << " type";
if(s.is_extern)
out << " extern";
if(s.is_macro)
out << " macro";
if(s.is_used)
out << " used";
out << std::endl;
out << "Location....: " << s.location << std::endl;
out << std::endl;
});
}
示例7: get_new_name
/// automated variable renaming
/// \par parameters: symbol to be renamed, namespace
/// \return new symbol
void get_new_name(irep_idt &new_name, const namespacet &ns)
{
const symbolt *symbol;
if(ns.lookup(new_name, symbol))
return;
std::string prefix=id2string(new_name)+"_";
new_name=prefix+std::to_string(ns.get_max(prefix)+1);
}
示例8: compute_pointer_offset
mp_integer compute_pointer_offset(
const namespacet &ns,
const exprt &expr)
{
if(expr.id()==ID_symbol)
return 0;
else if(expr.id()==ID_index)
{
assert(expr.operands().size()==2);
const typet &array_type=ns.follow(expr.op0().type());
assert(array_type.id()==ID_array);
mp_integer o=compute_pointer_offset(ns, expr.op0());
if(o!=-1)
{
mp_integer sub_size=
pointer_offset_size(ns, array_type.subtype());
mp_integer i;
if(sub_size!=0 && !to_integer(expr.op1(), i))
return o+i*sub_size;
}
// don't know
}
else if(expr.id()==ID_member)
{
assert(expr.operands().size()==1);
const typet &type=ns.follow(expr.op0().type());
assert(type.id()==ID_struct ||
type.id()==ID_union);
mp_integer o=compute_pointer_offset(ns, expr.op0());
if(o!=-1)
{
if(type.id()==ID_union)
return o;
return o+member_offset(
ns, to_struct_type(type), expr.get(ID_component_name));
}
}
else if(expr.id()==ID_string_constant)
return 0;
return -1; // don't know
}
示例9: cpp_typecheck
bool cpp_typecheck(
exprt &expr,
message_handlert &message_handler,
const namespacet &ns)
{
contextt context;
cpp_parse_treet cpp_parse_tree;
cpp_typecheckt cpp_typecheck(
cpp_parse_tree, context, ns.get_context(), "", message_handler);
try
{
cpp_typecheck.typecheck_expr(expr);
}
catch(int e)
{
cpp_typecheck.error();
}
catch(const char *e)
{
cpp_typecheck.error(e);
}
catch(const std::string &e)
{
cpp_typecheck.error(e);
}
return cpp_typecheck.get_error_found();
}
示例10: get_language
std::unique_ptr<languaget> get_language(
const namespacet &ns,
const irep_idt &identifier)
{
if(identifier=="")
return std::unique_ptr<languaget>(get_default_language());
else
{
const symbolt *symbol;
if(ns.lookup(identifier, symbol))
return std::unique_ptr<languaget>(get_default_language());
else if(symbol->mode=="")
return std::unique_ptr<languaget>(get_default_language());
else
{
languaget *ptr=get_language_from_mode(symbol->mode);
if(ptr==NULL)
throw "symbol `"+id2string(symbol->name)+
"' has unknown mode '"+id2string(symbol->mode)+"'";
return std::unique_ptr<languaget>(ptr);
}
}
}
示例11: has_component_rec
bool has_component_rec(
const typet &type,
const irep_idt &component_name,
const namespacet &ns)
{
const struct_union_typet &struct_union_type=
to_struct_union_type(ns.follow(type));
const struct_union_typet::componentst &components=
struct_union_type.components();
for(struct_union_typet::componentst::const_iterator
it=components.begin();
it!=components.end();
it++)
{
if(it->get_name()==component_name)
{
return true;
}
else if(it->get_anonymous())
{
if(has_component_rec(it->type(), component_name, ns))
return true;
}
}
return false;
}
示例12: ansi_c_typecheck
bool ansi_c_typecheck(
exprt &expr,
message_handlert &message_handler,
const namespacet &ns)
{
symbol_tablet symbol_table;
ansi_c_parse_treet ansi_c_parse_tree;
ansi_c_typecheckt ansi_c_typecheck(
ansi_c_parse_tree, symbol_table,
ns.get_symbol_table(), "", message_handler);
try
{
ansi_c_typecheck.typecheck_expr(expr);
}
catch(int)
{
ansi_c_typecheck.error();
}
catch(const char *e)
{
ansi_c_typecheck.error() << e << messaget::eom;
}
catch(const std::string &e)
{
ansi_c_typecheck.error() << e << messaget::eom;
}
return ansi_c_typecheck.get_error_found();
}
示例13: transform
void uninitialized_domaint::transform(
locationt from,
locationt to,
ai_baset &ai,
const namespacet &ns)
{
if(has_values.is_false())
return;
switch(from->type)
{
case DECL:
{
const irep_idt &identifier=
to_code_decl(from->code).get_identifier();
const symbolt &symbol=ns.lookup(identifier);
if(!symbol.is_static_lifetime)
uninitialized.insert(identifier);
}
break;
default:
{
std::list<exprt> read=expressions_read(*from);
std::list<exprt> written=expressions_written(*from);
forall_expr_list(it, written) assign(*it);
// we only care about the *first* uninitalized use
forall_expr_list(it, read) assign(*it);
}
}
}
示例14: get_destructor
code_function_callt get_destructor(
const namespacet &ns,
const typet &type)
{
if(type.id()==ID_symbol)
{
return get_destructor(ns, ns.follow(type));
}
else if(type.id()==ID_struct)
{
const struct_typet &struct_type=to_struct_type(type);
const struct_typet::componentst &components=
struct_type.components();
for(struct_typet::componentst::const_iterator
it=components.begin();
it!=components.end();
it++)
{
if(it->type().id()==ID_code)
{
const code_typet &code_type=to_code_type(it->type());
if(code_type.return_type().id()==ID_destructor &&
code_type.parameters().size()==1)
{
const typet &arg_type=code_type.parameters().front().type();
if(arg_type.id()==ID_pointer &&
ns.follow(arg_type.subtype())==type)
{
exprt symbol_expr(ID_symbol, it->type());
symbol_expr.set(ID_identifier, it->get(ID_name));
code_function_callt function_call;
function_call.function()=symbol_expr;
return function_call;
}
}
}
}
}
return static_cast<const code_function_callt &>(get_nil_irep());
}
示例15: base_type_rec
void base_type_rec(
typet &type, const namespacet &ns, std::set<irep_idt> &symb)
{
if(type.id()==ID_symbol ||
type.id()==ID_c_enum_tag ||
type.id()==ID_struct_tag ||
type.id()==ID_union_tag)
{
const symbolt *symbol;
if(!ns.lookup(type.get(ID_identifier), symbol) &&
symbol->is_type &&
!symbol->type.is_nil())
{
type=symbol->type;
base_type_rec(type, ns, symb); // recursive call
return;
}
}
else if(type.id()==ID_array)
{
base_type_rec(to_array_type(type).subtype(), ns, symb);
}
else if(type.id()==ID_struct ||
type.id()==ID_union)
{
struct_union_typet::componentst &components=
to_struct_union_type(type).components();
for(auto &component : components)
base_type_rec(component.type(), ns, symb);
}
else if(type.id()==ID_pointer)
{
typet &subtype=to_pointer_type(type).subtype();
// we need to avoid running into an infinite loop
if(subtype.id()==ID_symbol ||
subtype.id()==ID_c_enum_tag ||
subtype.id()==ID_struct_tag ||
subtype.id()==ID_union_tag)
{
const irep_idt &id=subtype.get(ID_identifier);
if(symb.find(id)!=symb.end())
return;
symb.insert(id);
base_type_rec(subtype, ns, symb);
symb.erase(id);
}
else
base_type_rec(subtype, ns, symb);
}
}