Example #1
0
program build_program(unit_navigator const & un, clang::SourceManager const & sm,
	Visitor visitor, std::string const & static_prefix)
{
	program res;
	res.vfn_map(un.vfn_map());
	res.vfn_param_counts(un.vfn_param_counts());
	for (unit_navigator::fns_const_iterator it = un.fns_begin(); it != un.fns_end(); ++it)
	{
		clang::FunctionDecl const * fn = *it;

		if (!fn->hasBody())
			continue;

		std::string const & fnname = un.nm().make_decl_name(fn, static_prefix);
		if (!visitor.function_started(fnname))
			continue;

		cfg c;
		detail::build_cfg_visitor<Visitor> cfg_visitor(visitor);
		build_cfg(res, c, un.nm(), fn, sm, res.fnames(), cfg_visitor, static_prefix);

		visitor.function_completed(fnname, c);
		res.add_cfg(fnname, c);
	}
	return res;
}