Skip to content

Commit 098ec1e

Browse files
authored
Merge pull request #5587 from tautschnig/messaget-language_filest
language_filest is not a messaget
2 parents c1e83a0 + 45a7102 commit 098ec1e

File tree

7 files changed

+51
-31
lines changed

7 files changed

+51
-31
lines changed

jbmc/src/java_bytecode/lazy_goto_functions_map.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,8 @@ class lazy_goto_functions_mapt final
173173
symbol_table_baset &function_symbol_table) const
174174
{
175175
// Fill in symbol table entry body if not already done
176-
language_files.convert_lazy_method(name, function_symbol_table);
176+
language_files.convert_lazy_method(
177+
name, function_symbol_table, message_handler);
177178

178179
underlying_mapt::iterator it = goto_functions.find(name);
179180
if(it != goto_functions.end())

jbmc/src/java_bytecode/lazy_goto_model.cpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@ lazy_goto_modelt::lazy_goto_modelt(
5757
driver_program_generate_function_body),
5858
message_handler(message_handler)
5959
{
60-
language_files.set_message_handler(message_handler);
6160
}
6261

6362
lazy_goto_modelt::lazy_goto_modelt(lazy_goto_modelt &&other)
@@ -154,7 +153,7 @@ void lazy_goto_modelt::initialize(
154153

155154
msg.status() << "Converting" << messaget::eom;
156155

157-
if(language_files.typecheck(symbol_table))
156+
if(language_files.typecheck(symbol_table, message_handler))
158157
{
159158
throw invalid_input_exceptiont("CONVERSION ERROR");
160159
}

src/goto-cc/compile.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -620,14 +620,14 @@ bool compilet::write_bin_object_file(
620620
optionalt<symbol_tablet> compilet::parse_source(const std::string &file_name)
621621
{
622622
language_filest language_files;
623-
language_files.set_message_handler(log.get_message_handler());
624623

625624
if(parse(file_name, language_files))
626625
return {};
627626

628627
// we just typecheck one file here
629628
symbol_tablet file_symbol_table;
630-
if(language_files.typecheck(file_symbol_table, keep_file_local))
629+
if(language_files.typecheck(
630+
file_symbol_table, keep_file_local, log.get_message_handler()))
631631
{
632632
log.error() << "CONVERSION ERROR" << messaget::eom;
633633
return {};

src/goto-programs/initialize_goto_model.cpp

+1-4
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ void initialize_from_source_files(
111111

112112
msg.status() << "Converting" << messaget::eom;
113113

114-
if(language_files.typecheck(symbol_table))
114+
if(language_files.typecheck(symbol_table, message_handler))
115115
{
116116
throw invalid_input_exceptiont("CONVERSION ERROR");
117117
}
@@ -203,10 +203,7 @@ goto_modelt initialize_goto_model(
203203
}
204204

205205
language_filest language_files;
206-
language_files.set_message_handler(message_handler);
207-
208206
goto_modelt goto_model;
209-
210207
initialize_from_source_files(
211208
sources, options, language_files, goto_model.symbol_table, message_handler);
212209

src/langapi/language_file.cpp

+24-12
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,10 @@ void language_filest::show_parse(std::ostream &out)
4848
file.second.language->show_parse(out);
4949
}
5050

51-
bool language_filest::parse()
51+
bool language_filest::parse(message_handlert &message_handler)
5252
{
53+
messaget log(message_handler);
54+
5355
for(auto &file : file_map)
5456
{
5557
// open file
@@ -58,7 +60,7 @@ bool language_filest::parse()
5860

5961
if(!infile)
6062
{
61-
error() << "Failed to open " << file.first << eom;
63+
log.error() << "Failed to open " << file.first << messaget::eom;
6264
return true;
6365
}
6466

@@ -68,7 +70,7 @@ bool language_filest::parse()
6870

6971
if(language.parse(infile, file.first))
7072
{
71-
error() << "Parsing of " << file.first << " failed" << eom;
73+
log.error() << "Parsing of " << file.first << " failed" << messaget::eom;
7274
return true;
7375
}
7476

@@ -82,7 +84,8 @@ bool language_filest::parse()
8284

8385
bool language_filest::typecheck(
8486
symbol_table_baset &symbol_table,
85-
const bool keep_file_local)
87+
const bool keep_file_local,
88+
message_handlert &message_handler)
8689
{
8790
// typecheck interfaces
8891

@@ -153,7 +156,8 @@ bool language_filest::typecheck(
153156

154157
for(auto &module : module_map)
155158
{
156-
if(typecheck_module(symbol_table, module.second, keep_file_local))
159+
if(typecheck_module(
160+
symbol_table, module.second, keep_file_local, message_handler))
157161
return true;
158162
}
159163

@@ -203,36 +207,43 @@ bool language_filest::interfaces(symbol_table_baset &symbol_table)
203207
bool language_filest::typecheck_module(
204208
symbol_table_baset &symbol_table,
205209
const std::string &module,
206-
const bool keep_file_local)
210+
const bool keep_file_local,
211+
message_handlert &message_handler)
207212
{
208213
// check module map
209214

210215
module_mapt::iterator it=module_map.find(module);
211216

212217
if(it==module_map.end())
213218
{
214-
error() << "found no file that provides module " << module << eom;
219+
messaget log(message_handler);
220+
log.error() << "found no file that provides module " << module
221+
<< messaget::eom;
215222
return true;
216223
}
217224

218-
return typecheck_module(symbol_table, it->second, keep_file_local);
225+
return typecheck_module(
226+
symbol_table, it->second, keep_file_local, message_handler);
219227
}
220228

221229
bool language_filest::typecheck_module(
222230
symbol_table_baset &symbol_table,
223231
language_modulet &module,
224-
const bool keep_file_local)
232+
const bool keep_file_local,
233+
message_handlert &message_handler)
225234
{
226235
// already typechecked?
227236

228237
if(module.type_checked)
229238
return false;
230239

240+
messaget log(message_handler);
241+
231242
// already in progress?
232243

233244
if(module.in_progress)
234245
{
235-
error() << "circular dependency in " << module.name << eom;
246+
log.error() << "circular dependency in " << module.name << messaget::eom;
236247
return true;
237248
}
238249

@@ -249,14 +260,15 @@ bool language_filest::typecheck_module(
249260
it!=dependency_set.end();
250261
it++)
251262
{
252-
module.in_progress = !typecheck_module(symbol_table, *it, keep_file_local);
263+
module.in_progress =
264+
!typecheck_module(symbol_table, *it, keep_file_local, message_handler);
253265
if(module.in_progress == false)
254266
return true;
255267
}
256268

257269
// type check it
258270

259-
status() << "Type-checking " << module.name << eom;
271+
log.status() << "Type-checking " << module.name << messaget::eom;
260272

261273
if(module.file->language->can_keep_file_local())
262274
{

src/langapi/language_file.h

+19-8
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@ Author: Daniel Kroening, [email protected]
1717
#include <string>
1818
#include <unordered_set>
1919

20-
#include <util/message.h>
2120
#include <util/symbol_table_base.h>
2221

22+
class message_handlert;
2323
class language_filet;
2424
class languaget;
2525

@@ -58,7 +58,7 @@ class language_filet final
5858
~language_filet();
5959
};
6060

61-
class language_filest:public messaget
61+
class language_filest
6262
{
6363
private:
6464
typedef std::map<std::string, language_filet> file_mapt;
@@ -101,15 +101,23 @@ class language_filest:public messaget
101101
file_map.clear();
102102
}
103103

104-
bool parse();
104+
bool parse(message_handlert &message_handler);
105105

106106
void show_parse(std::ostream &out);
107107

108108
bool generate_support_functions(symbol_table_baset &symbol_table);
109109

110-
bool typecheck(
110+
bool
111+
112+
typecheck(
111113
symbol_table_baset &symbol_table,
112-
const bool keep_file_local = false);
114+
const bool keep_file_local,
115+
message_handlert &message_handler);
116+
bool
117+
typecheck(symbol_table_baset &symbol_table, message_handlert &message_handler)
118+
{
119+
return typecheck(symbol_table, false, message_handler);
120+
}
113121

114122
bool final(symbol_table_baset &symbol_table);
115123

@@ -120,7 +128,8 @@ class language_filest:public messaget
120128
// for this to be legal.
121129
void convert_lazy_method(
122130
const irep_idt &id,
123-
symbol_table_baset &symbol_table)
131+
symbol_table_baset &symbol_table,
132+
message_handlert &message_handler)
124133
{
125134
PRECONDITION(symbol_table.has_symbol(id));
126135
lazy_method_mapt::iterator it=lazy_method_map.find(id);
@@ -144,12 +153,14 @@ class language_filest:public messaget
144153
bool typecheck_module(
145154
symbol_table_baset &symbol_table,
146155
language_modulet &module,
147-
const bool keep_file_local);
156+
const bool keep_file_local,
157+
message_handlert &message_handler);
148158

149159
bool typecheck_module(
150160
symbol_table_baset &symbol_table,
151161
const std::string &module,
152-
const bool keep_file_local);
162+
const bool keep_file_local,
163+
message_handlert &message_handler);
153164
};
154165

155166
#endif // CPROVER_UTIL_LANGUAGE_FILE_H

unit/testing-utils/get_goto_model_from_c.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ goto_modelt get_goto_model_from_c(std::istream &in)
4444
}
4545

4646
language_filest language_files;
47-
language_files.set_message_handler(null_message_handler);
4847

4948
language_filet &language_file = language_files.add_file("");
5049

@@ -66,7 +65,8 @@ goto_modelt get_goto_model_from_c(std::istream &in)
6665
goto_modelt goto_model;
6766

6867
{
69-
const bool error = language_files.typecheck(goto_model.symbol_table);
68+
const bool error =
69+
language_files.typecheck(goto_model.symbol_table, null_message_handler);
7070

7171
if(error)
7272
throw invalid_input_exceptiont("typechecking failed");

0 commit comments

Comments
 (0)