34 std::unique_ptr<languaget> l(
factory());
35 languages.back().factory=
factory;
37 languages.back().mode=l->
id();
42 for(languagest::const_iterator it=languages.begin();
53 std::size_t ext_pos=filename.rfind(
'.');
55 if(ext_pos==std::string::npos)
58 std::string extension=
59 std::string(filename, ext_pos+1, std::string::npos);
64 for(languagest::const_iterator
65 l_it=languages.begin();
66 l_it!=languages.end();
70 for(std::set<std::string>::const_iterator
71 e_it=l_it->extensions.begin();
72 e_it!=l_it->extensions.end();
74 if(_stricmp(extension.c_str(), e_it->c_str())==0)
75 return l_it->factory();
77 if(l_it->extensions.find(extension)!=l_it->extensions.end())
78 return l_it->factory();
87 assert(!languages.empty());
88 return languages.front().factory();
virtual std::set< std::string > extensions() const
virtual std::string id() const
Abstract interface to support a programming language.
languaget * get_default_language()
languaget * get_language_from_mode(const irep_idt &mode)
language_factoryt factory
languaget * get_language_from_filename(const std::string &filename)
std::list< language_entryt > languagest
void register_language(language_factoryt factory)
languaget *(* language_factoryt)()
std::set< std::string > extensions