本文整理汇总了C++中locationt::get_function方法的典型用法代码示例。如果您正苦于以下问题:C++ locationt::get_function方法的具体用法?C++ locationt::get_function怎么用?C++ locationt::get_function使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类locationt
的用法示例。
在下文中一共展示了locationt::get_function方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: xml
xmlt xml(const locationt &location)
{
xmlt result;
result.name="location";
// these will go away
result.new_element("file").data=id2string(location.get_file());
result.new_element("line").data=id2string(location.get_line());
result.new_element("function").data=id2string(location.get_function());
// these are to stay
if(location.get_file()!="")
result.set_attribute("file", id2string(location.get_file()));
if(location.get_line()!="")
result.set_attribute("line", id2string(location.get_line()));
if(location.get_function()!="")
result.set_attribute("function", id2string(location.get_function()));
return result;
}
示例2: print
void message_handlert::print(
unsigned level,
const std::string &message,
int sequence_number,
const locationt &location)
{
std::string dest;
const irep_idt &file=location.get_file();
const irep_idt &line=location.get_line();
const irep_idt &column=location.get_column();
const irep_idt &function=location.get_function();
if(file!="") { if(dest!="") dest+=" "; dest+="file "+id2string(file); }
if(line!="") { if(dest!="") dest+=" "; dest+="line "+id2string(line); }
if(column!="") { if(dest!="") dest+=" "; dest+="column "+id2string(column); }
if(function!="") { if(dest!="") dest+=" "; dest+="function "+id2string(function); }
if(dest!="") dest+=": ";
dest+=message;
print(level, dest);
}
示例3: parameter_assignments
void goto_inlinet::parameter_assignments(
const locationt &location,
const code_typet &code_type,
const exprt::operandst &arguments,
goto_programt &dest)
{
// iterates over the operands
exprt::operandst::const_iterator it1=arguments.begin();
goto_programt::local_variablest local_variables;
const code_typet::argumentst &argument_types=
code_type.arguments();
// iterates over the types of the arguments
for(code_typet::argumentst::const_iterator
it2=argument_types.begin();
it2!=argument_types.end();
it2++)
{
// if you run out of actual arguments there was a mismatch
if(it1==arguments.end())
{
err_location(location);
throw "function call: not enough arguments";
}
const exprt &argument=static_cast<const exprt &>(*it2);
// this is the type the n-th argument should be
const typet &arg_type=ns.follow(argument.type());
const irep_idt &identifier=argument.cmt_identifier();
if(identifier=="")
{
err_location(location);
throw "no identifier for function argument";
}
{
const symbolt &symbol=ns.lookup(identifier);
goto_programt::targett decl=dest.add_instruction();
decl->make_other();
exprt tmp = code_declt(symbol_expr(symbol));
migrate_expr(tmp, decl->code);
decl->location=location;
decl->function=location.get_function();
decl->local_variables=local_variables;
}
local_variables.insert(identifier);
// nil means "don't assign"
if(it1->is_nil())
{
}
else
{
// this is the actual parameter
exprt actual(*it1);
// it should be the same exact type
type2tc arg_type_2, actual_type_2;
migrate_type(arg_type, arg_type_2);
migrate_type(actual.type(), actual_type_2);
if (!base_type_eq(arg_type_2, actual_type_2, ns))
{
const typet &f_argtype = ns.follow(arg_type);
const typet &f_acttype = ns.follow(actual.type());
// we are willing to do some conversion
if((f_argtype.id()=="pointer" &&
f_acttype.id()=="pointer") ||
(f_argtype.is_array() &&
f_acttype.id()=="pointer" &&
f_argtype.subtype()==f_acttype.subtype()))
{
actual.make_typecast(arg_type);
}
else if((f_argtype.id()=="signedbv" ||
f_argtype.id()=="unsignedbv" ||
f_argtype.is_bool()) &&
(f_acttype.id()=="signedbv" ||
f_acttype.id()=="unsignedbv" ||
f_acttype.is_bool()))
{
actual.make_typecast(arg_type);
}
else
{
err_location(location);
str << "function call: argument `" << identifier
<< "' type mismatch: got "
<< from_type(ns, identifier, it1->type())
<< ", expected "
<< from_type(ns, identifier, arg_type);
throw 0;
//.........这里部分代码省略.........