17 language(rhs.language==nullptr?nullptr:rhs.language->new_language()),
18 filename(rhs.filename)
42 language->convert_lazy_method(
id, symbol_table);
48 file.second.language->show_parse(out);
56 for(file_mapt::value_type &language_file_entry :
file_map)
58 auto &language=*language_file_entry.second.language;
59 language.set_should_generate_opaque_method_stubs(stubs_enabled);
69 std::ifstream infile(
file.first);
83 error() <<
"Parsing of " <<
file.first <<
" failed" <<
eom;
89 file.second.get_modules();
101 if(
file.second.language->interfaces(symbol_table))
107 unsigned collision_counter=0;
114 for(language_filet::modulest::const_iterator
115 mo_it=modules.begin();
116 mo_it!=modules.end();
120 std::string module_name=*mo_it;
130 module.
name=module_name;
132 std::pair<std::string, language_modulet>(module.
name, module));
140 if(
file.second.modules.empty())
142 if(
file.second.language->typecheck(symbol_table,
""))
147 std::unordered_set<irep_idt> lazy_method_ids;
148 file.second.language->methods_provided(lazy_method_ids);
149 for(
const auto &
id : lazy_method_ids)
173 if(
file.second.language->generate_support_functions(symbol_table))
187 if(
file.second.language->final(symbol_table))
199 if(
file.second.language->interfaces(symbol_table))
208 const std::string &module)
212 module_mapt::iterator it=
module_map.find(module);
216 error() <<
"found no file that provides module " << module <<
eom;
236 error() <<
"circular dependency in " << module.
name <<
eom;
244 std::set<std::string> dependency_set;
248 for(std::set<std::string>::const_iterator it=
249 dependency_set.begin();
250 it!=dependency_set.end();
void convert_lazy_method(const irep_idt &id, symbol_table_baset &symbol_table)
bool final(symbol_table_baset &symbol_table)
void show_parse(std::ostream &out)
bool interfaces(symbol_tablet &symbol_table)
std::set< std::string > modulest
static mstreamt & eom(mstreamt &m)
std::unique_ptr< languaget > language
bool typecheck_module(symbol_tablet &symbol_table, language_modulet &module)
Abstract interface to support a programming language.
bool typecheck(symbol_tablet &symbol_table)
lazy_method_mapt lazy_method_map
language_filet(const std::string &filename)
void set_should_generate_opaque_method_stubs(bool stubs_enabled)
Turn on or off stub generation for all the languages.
~language_filet()
To avoid compiler errors, the complete definition of a pointed-to type must be visible at the point a...
mstreamt & status() const
The symbol table base class interface.
std::string to_string(const string_constraintt &expr)
Used for debug printing.
virtual bool parse(std::istream &instream, const std::string &path)=0
bool generate_support_functions(symbol_tablet &symbol_table)