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);
57 std::ifstream infile(file.first);
61 error() <<
"Failed to open " << file.first <<
eom;
67 languaget &language=*(file.second.language);
69 if(language.
parse(infile, file.first))
71 error() <<
"Parsing of " << file.first <<
" failed" <<
eom;
77 file.second.get_modules();
85 const bool keep_file_local)
91 if(file.second.language->interfaces(symbol_table))
97 unsigned collision_counter=0;
104 for(language_filet::modulest::const_iterator
105 mo_it=modules.begin();
106 mo_it!=modules.end();
110 std::string module_name=*mo_it;
119 module.
file=&file.second;
120 module.
name=module_name;
122 std::pair<std::string, language_modulet>(module.
name, module));
130 if(file.second.modules.empty())
132 if(file.second.language->can_keep_file_local())
134 if(file.second.language->typecheck(symbol_table,
"", keep_file_local))
139 if(file.second.language->typecheck(symbol_table,
""))
145 std::unordered_set<irep_idt> lazy_method_ids;
146 file.second.language->methods_provided(lazy_method_ids);
147 for(
const auto &
id : lazy_method_ids)
170 if(
languages.insert(file.second.language->id()).second)
171 if(file.second.language->generate_support_functions(symbol_table))
184 if(
languages.insert(file.second.language->id()).second)
185 if(file.second.language->final(symbol_table))
197 if(file.second.language->interfaces(symbol_table))
206 const std::string &module,
207 const bool keep_file_local)
211 module_mapt::iterator it=
module_map.find(module);
215 error() <<
"found no file that provides module " << module <<
eom;
225 const bool keep_file_local)
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();
265 symbol_table, module.
name, keep_file_local);