本文整理汇总了C++中FunctionDefinition::get_function_name方法的典型用法代码示例。如果您正苦于以下问题:C++ FunctionDefinition::get_function_name方法的具体用法?C++ FunctionDefinition::get_function_name怎么用?C++ FunctionDefinition::get_function_name使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类FunctionDefinition
的用法示例。
在下文中一共展示了FunctionDefinition::get_function_name方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: find_functions
/**
*
* @param function_def function that contains function calls that will be inlined.
* This means that this function will is actually the callsite
* of the called functions, and that this is the place were
* the code (from the inlined functions) will be written to
* @param scope_link
*/
void InlinePhase::find_functions(FunctionDefinition function_def, ScopeLink scope_link) {
FunctionCallsPred function_calls_pred(scope_link);
Statement function_body = function_def.get_function_body();
ObjectList<AST_t> list_of_calls = function_body.get_ast().depth_subtrees(function_calls_pred);
for (ObjectList<AST_t>::iterator it = list_of_calls.begin(); it != list_of_calls.end(); it++, _callNum++) {
// cout<<_callNum<<endl;
AST_t element = *it;
Expression expr(element, scope_link);
// We already know it is a function call, no need to check again
Expression _function_call = expr.get_called_expression();
Expression last_function_call = _function_call;
set_FCall(&_function_call);
// cin.get();
if (_function_call.is_id_expression()) {
IdExpression id_expr = _function_call.get_id_expression();
Symbol called_sym = id_expr.get_symbol();
Symbol last_called_sym = called_sym;
set_FSym(&called_sym);
if (called_sym.is_valid() && called_sym.is_function() && called_sym.is_defined()) {
// cout << "\nFinding if necessary forward inline for function '" << id_expr << "' in " << element.get_locus() << "\n";
_functionName = called_sym.get_name();
_rowOfCall = element.get_line();
int fnd = 0;
for(int fN = 0; fN<_inlinedFunctions.size(); ++fN) {
if(_inlinedFunctions[fN].get_name().compare(std::string(_functionName))==0) {
fnd = 1;
break;
}
}
if(!fnd) {
_inlinedFunctions.push_back(called_sym);
// cout << "\nForward inline of "<<called_sym.get_name()<<" called on: "<<function_def.get_function_name().get_symbol().get_name()<<" \n";
ObjectList<AST_t> list_of_fun_defs = _translation_unit.depth_subtrees(_function_def_pred);
for (ObjectList<AST_t>::iterator it = list_of_fun_defs.begin(); it != list_of_fun_defs.end(); it++) {
FunctionDefinition function_defNF(*it, scope_link);
TL::Symbol function_sym = function_defNF.get_function_symbol();
if(function_sym.get_name().compare(called_sym.get_name())==0) {
find_functions(function_defNF,scope_link);
set_FCall(&last_function_call);
set_FSym(&last_called_sym);
}
}
}
// cout << "\nApplying inlining for function" << called_sym.get_name() << "\n {";
inlineFunction(called_sym, expr);
// cout<<"} \n";
} else if(called_sym.is_defined()) {
cerr << "************************************"<<
"\n You can not use "<<called_sym.get_name()<<"inside HMPP codelet.\n"
<< "************************************";
exit(-1);
}
}
}
if(list_of_calls.size()==0) {
cout<<"No function calls in : "<<function_def.get_function_name().get_symbol().get_name()<<endl;
} else {
cout<<function_def.get_function_name().get_symbol().get_name()<< " finished -------------"<<endl;
}
}