Skip to content

Commit 3270c70

Browse files
committed
languaget is not a messaget
Pass a message handler as an argument to several of its functions, but do not construct a messaget object without a configured message handler as that is deprecated.
1 parent 620858a commit 3270c70

27 files changed

+565
-172
lines changed

jbmc/src/java_bytecode/java_bytecode_language.cpp

Lines changed: 188 additions & 22 deletions
Large diffs are not rendered by default.

jbmc/src/java_bytecode/java_bytecode_language.h

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -274,14 +274,15 @@ struct java_bytecode_language_optionst
274274
class java_bytecode_languaget:public languaget
275275
{
276276
public:
277-
void set_language_options(const optionst &) override;
277+
void set_language_options(const optionst &, message_handlert &) override;
278278

279279
void set_message_handler(message_handlert &message_handler) override;
280280

281281
virtual bool preprocess(
282282
std::istream &instream,
283283
const std::string &path,
284-
std::ostream &outstream) override;
284+
std::ostream &outstream,
285+
message_handlert &message_handler) override;
285286

286287
// This is an extension to languaget
287288
// required because parsing of Java programs can be initiated without
@@ -291,18 +292,21 @@ class java_bytecode_languaget:public languaget
291292

292293
bool parse(
293294
std::istream &instream,
294-
const std::string &path) override;
295+
const std::string &path,
296+
message_handlert &message_handler) override;
295297

296298
bool generate_support_functions(
297-
symbol_tablet &symbol_table) override;
299+
symbol_tablet &symbol_table,
300+
message_handlert &message_handler) override;
298301

299302
bool typecheck(
300303
symbol_tablet &context,
301-
const std::string &module) override;
304+
const std::string &module,
305+
message_handlert &message_handler) override;
302306

303307
virtual bool final(symbol_table_baset &context) override;
304308

305-
void show_parse(std::ostream &out) override;
309+
void show_parse(std::ostream &out, message_handlert &) override;
306310

307311
virtual ~java_bytecode_languaget();
308312
java_bytecode_languaget(
@@ -332,7 +336,8 @@ class java_bytecode_languaget:public languaget
332336
const std::string &code,
333337
const std::string &module,
334338
exprt &expr,
335-
const namespacet &ns) override;
339+
const namespacet &ns,
340+
message_handlert &message_handler) override;
336341

337342
std::unique_ptr<languaget> new_language() override
338343
{ return util_make_unique<java_bytecode_languaget>(); }
@@ -346,32 +351,45 @@ class java_bytecode_languaget:public languaget
346351
methods_provided(std::unordered_set<irep_idt> &methods) const override;
347352
virtual void convert_lazy_method(
348353
const irep_idt &function_id,
349-
symbol_table_baset &symbol_table) override;
354+
symbol_table_baset &symbol_table,
355+
message_handlert &message_handler) override;
350356

351357
protected:
352358
void convert_single_method(
353359
const irep_idt &function_id,
354360
symbol_table_baset &symbol_table,
361+
<<<<<<< HEAD
355362
lazy_class_to_declared_symbols_mapt &class_to_declared_symbols)
363+
=======
364+
message_handlert &message_handler)
365+
>>>>>>> languaget is not a messaget
356366
{
357367
convert_single_method(
358368
function_id,
359369
symbol_table,
360370
optionalt<ci_lazy_methods_neededt>(),
371+
<<<<<<< HEAD
361372
class_to_declared_symbols);
373+
=======
374+
message_handler);
375+
>>>>>>> languaget is not a messaget
362376
}
363377
bool convert_single_method(
364378
const irep_idt &function_id,
365379
symbol_table_baset &symbol_table,
366380
optionalt<ci_lazy_methods_neededt> needed_lazy_methods,
381+
<<<<<<< HEAD
367382
lazy_class_to_declared_symbols_mapt &class_to_declared_symbols);
368383
bool convert_single_method_code(
369384
const irep_idt &function_id,
370385
symbol_table_baset &symbol_table,
371386
optionalt<ci_lazy_methods_neededt> needed_lazy_methods,
372387
lazy_class_to_declared_symbols_mapt &class_to_declared_symbols);
388+
=======
389+
message_handlert &message_handler);
390+
>>>>>>> languaget is not a messaget
373391

374-
bool do_ci_lazy_method_conversion(symbol_tablet &);
392+
bool do_ci_lazy_method_conversion(symbol_tablet &, message_handlert &);
375393
const select_pointer_typet &get_pointer_type_selector() const;
376394

377395
optionalt<java_bytecode_language_optionst> language_options;

jbmc/src/java_bytecode/lazy_goto_model.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,13 +186,18 @@ void lazy_goto_modelt::initialize(
186186
"failed to figure out type of file '" + filename + '\'');
187187
}
188188

189+
<<<<<<< HEAD:jbmc/src/java_bytecode/lazy_goto_model.cpp
189190
languaget &language = *lf.language;
190191
language.set_message_handler(message_handler);
191192
language.set_language_options(options);
193+
=======
194+
languaget &language=*lf.language;
195+
language.set_language_options(options, message_handler);
196+
>>>>>>> languaget is not a messaget:src/goto-programs/lazy_goto_model.cpp
192197

193198
msg.status() << "Parsing " << filename << messaget::eom;
194199

195-
if(language.parse(infile, filename))
200+
if(language.parse(infile, filename, message_handler))
196201
{
197202
throw invalid_source_file_exceptiont("PARSING ERROR");
198203
}

jbmc/src/jbmc/jbmc_parse_options.cpp

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -540,24 +540,53 @@ int jbmc_parse_optionst::doit()
540540
cmdline.args.push_back(cmdline.get_value("gb"));
541541
}
542542

543+
<<<<<<< HEAD
543544
// Shows the parse tree of the main class
544545
if(cmdline.isset("show-parse-tree"))
545546
{
546547
std::unique_ptr<languaget> language = get_language_from_mode(ID_java);
547548
CHECK_RETURN(language != nullptr);
548549
language->set_language_options(options);
549550
language->set_message_handler(ui_message_handler);
551+
=======
552+
language->set_language_options(options, get_message_handler());
553+
>>>>>>> languaget is not a messaget
550554

551555
log.status() << "Parsing ..." << messaget::eom;
552556

557+
<<<<<<< HEAD
553558
if(static_cast<java_bytecode_languaget *>(language.get())->parse())
559+
=======
560+
if(language->parse(infile, filename, get_message_handler()))
561+
>>>>>>> languaget is not a messaget
554562
{
555563
log.error() << "PARSING ERROR" << messaget::eom;
556564
return CPROVER_EXIT_PARSE_ERROR;
557565
}
558566

567+
<<<<<<< HEAD
559568
language->show_parse(std::cout);
560569
return CPROVER_EXIT_SUCCESS;
570+
=======
571+
language->show_parse(std::cout, get_message_handler());
572+
return 0;
573+
}
574+
575+
std::function<void(bmct &, const symbol_tablet &)> configure_bmc = nullptr;
576+
if(options.get_bool_option("java-unwind-enum-static"))
577+
{
578+
configure_bmc = [](bmct &bmc, const symbol_tablet &symbol_table) {
579+
bmc.add_loop_unwind_handler(
580+
[&symbol_table](
581+
const goto_symex_statet::call_stackt &context,
582+
unsigned loop_number,
583+
unsigned unwind,
584+
unsigned &max_unwind) {
585+
return java_enum_static_init_unwind_handler(
586+
context, loop_number, unwind, max_unwind, symbol_table);
587+
});
588+
};
589+
>>>>>>> languaget is not a messaget
561590
}
562591

563592
object_factory_params.set(options);

jbmc/unit/java-testing-utils/load_java_class.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -123,11 +123,11 @@ goto_modelt load_goto_model_from_java_class(
123123
parse_java_language_options(command_line, options);
124124

125125
// Configure the language, load the class files
126-
language.set_message_handler(null_message_handler);
127-
language.set_language_options(options);
128-
language.parse(java_code_stream, filename);
129-
language.typecheck(lazy_goto_model.symbol_table, "");
130-
language.generate_support_functions(lazy_goto_model.symbol_table);
126+
language.set_language_options(options, null_message_handler);
127+
language.parse(java_code_stream, filename, null_message_handler);
128+
language.typecheck(lazy_goto_model.symbol_table, "", null_message_handler);
129+
language.generate_support_functions(
130+
lazy_goto_model.symbol_table, null_message_handler);
131131
language.final(lazy_goto_model.symbol_table);
132132

133133
lazy_goto_model.load_all_functions();

jbmc/unit/java_bytecode/java_bytecode_parser/parse_java_annotations.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -174,14 +174,18 @@ SCENARIO(
174174
command_line.add_flag("no-lazy-methods");
175175
command_line.add_flag("no-refine-strings");
176176
test_java_bytecode_languaget language;
177-
language.set_message_handler(null_message_handler);
178177
optionst options;
179178
parse_java_language_options(command_line, options);
179+
<<<<<<< HEAD
180180
language.set_language_options(options);
181181
config.java.main_class = "AnnotationsEverywhere";
182+
=======
183+
language.set_language_options(options, null_message_handler);
184+
>>>>>>> languaget is not a messaget
182185

183186
std::istringstream java_code_stream("ignored");
184-
language.parse(java_code_stream, "AnnotationsEverywhere.class");
187+
language.parse(
188+
java_code_stream, "AnnotationsEverywhere.class", null_message_handler);
185189
const java_class_loadert::parse_tree_with_overlayst &parse_trees =
186190
language.get_parse_trees_for_class("AnnotationsEverywhere");
187191
REQUIRE(parse_trees.size() == 1);

src/ansi-c/ansi_c_language.cpp

Lines changed: 26 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -40,26 +40,33 @@ void ansi_c_languaget::modules_provided(std::set<std::string> &modules)
4040
bool ansi_c_languaget::preprocess(
4141
std::istream &instream,
4242
const std::string &path,
43-
std::ostream &outstream)
43+
std::ostream &outstream,
44+
message_handlert &message_handler)
4445
{
4546
// stdin?
47+
<<<<<<< HEAD
4648
if(path.empty())
4749
return c_preprocess(instream, outstream, get_message_handler());
50+
=======
51+
if(path=="")
52+
return c_preprocess(instream, outstream, message_handler);
53+
>>>>>>> languaget is not a messaget
4854

49-
return c_preprocess(path, outstream, get_message_handler());
55+
return c_preprocess(path, outstream, message_handler);
5056
}
5157

5258
bool ansi_c_languaget::parse(
5359
std::istream &instream,
54-
const std::string &path)
60+
const std::string &path,
61+
message_handlert &message_handler)
5562
{
5663
// store the path
5764
parse_path=path;
5865

5966
// preprocessing
6067
std::ostringstream o_preprocessed;
6168

62-
if(preprocess(instream, path, o_preprocessed))
69+
if(preprocess(instream, path, o_preprocessed, message_handler))
6370
return true;
6471

6572
std::istringstream i_preprocessed(o_preprocessed.str());
@@ -73,7 +80,7 @@ bool ansi_c_languaget::parse(
7380
ansi_c_parser.clear();
7481
ansi_c_parser.set_file(ID_built_in);
7582
ansi_c_parser.in=&codestr;
76-
ansi_c_parser.set_message_handler(get_message_handler());
83+
ansi_c_parser.set_message_handler(message_handler);
7784
ansi_c_parser.for_has_scope=config.ansi_c.for_has_scope;
7885
ansi_c_parser.ts_18661_3_Floatn_types=config.ansi_c.ts_18661_3_Floatn_types;
7986
ansi_c_parser.cpp98=false; // it's not C++
@@ -105,37 +112,38 @@ bool ansi_c_languaget::parse(
105112
bool ansi_c_languaget::typecheck(
106113
symbol_tablet &symbol_table,
107114
const std::string &module,
115+
<<<<<<< HEAD
108116
const bool keep_file_local)
117+
=======
118+
message_handlert &message_handler)
119+
>>>>>>> languaget is not a messaget
109120
{
110121
symbol_tablet new_symbol_table;
111122

112-
if(ansi_c_typecheck(
113-
parse_tree,
114-
new_symbol_table,
115-
module,
116-
get_message_handler()))
123+
if(ansi_c_typecheck(parse_tree, new_symbol_table, module, message_handler))
117124
{
118125
return true;
119126
}
120127

121128
remove_internal_symbols(
122129
new_symbol_table, this->get_message_handler(), keep_file_local);
123130

124-
if(linking(symbol_table, new_symbol_table, get_message_handler()))
131+
if(linking(symbol_table, new_symbol_table, message_handler))
125132
return true;
126133

127134
return false;
128135
}
129136

130137
bool ansi_c_languaget::generate_support_functions(
131-
symbol_tablet &symbol_table)
138+
symbol_tablet &symbol_table,
139+
message_handlert &message_handler)
132140
{
133141
// This creates __CPROVER_start and __CPROVER_initialize:
134142
return ansi_c_entry_point(
135-
symbol_table, get_message_handler(), object_factory_params);
143+
symbol_table, message_handler, object_factory_params);
136144
}
137145

138-
void ansi_c_languaget::show_parse(std::ostream &out)
146+
void ansi_c_languaget::show_parse(std::ostream &out, message_handlert &)
139147
{
140148
parse_tree.output(out);
141149
}
@@ -176,7 +184,8 @@ bool ansi_c_languaget::to_expr(
176184
const std::string &code,
177185
const std::string &,
178186
exprt &expr,
179-
const namespacet &ns)
187+
const namespacet &ns,
188+
message_handlert &message_handler)
180189
{
181190
expr.make_nil();
182191

@@ -190,7 +199,7 @@ bool ansi_c_languaget::to_expr(
190199
ansi_c_parser.clear();
191200
ansi_c_parser.set_file(irep_idt());
192201
ansi_c_parser.in=&i_preprocessed;
193-
ansi_c_parser.set_message_handler(get_message_handler());
202+
ansi_c_parser.set_message_handler(message_handler);
194203
ansi_c_parser.mode=config.ansi_c.mode;
195204
ansi_c_parser.ts_18661_3_Floatn_types=config.ansi_c.ts_18661_3_Floatn_types;
196205
ansi_c_scanner_init();
@@ -204,7 +213,7 @@ bool ansi_c_languaget::to_expr(
204213
expr=ansi_c_parser.parse_tree.items.front().declarator().value();
205214

206215
// typecheck it
207-
result=ansi_c_typecheck(expr, get_message_handler(), ns);
216+
result = ansi_c_typecheck(expr, message_handler, ns);
208217
}
209218

210219
// save some memory

src/ansi-c/ansi_c_language.h

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,26 +34,31 @@ Author: Daniel Kroening, [email protected]
3434
class ansi_c_languaget:public languaget
3535
{
3636
public:
37-
void set_language_options(const optionst &options) override
37+
void
38+
set_language_options(const optionst &options, message_handlert &) override
3839
{
3940
object_factory_params.set(options);
4041
}
4142

4243
bool preprocess(
4344
std::istream &instream,
4445
const std::string &path,
45-
std::ostream &outstream) override;
46+
std::ostream &outstream,
47+
message_handlert &message_handler) override;
4648

4749
bool parse(
4850
std::istream &instream,
49-
const std::string &path) override;
51+
const std::string &path,
52+
message_handlert &message_handler) override;
5053

5154
bool generate_support_functions(
52-
symbol_tablet &symbol_table) override;
55+
symbol_tablet &symbol_table,
56+
message_handlert &message_handler) override;
5357

5458
bool typecheck(
5559
symbol_tablet &symbol_table,
5660
const std::string &module,
61+
<<<<<<< HEAD
5762
const bool keep_file_local) override;
5863

5964
bool can_keep_file_local() override
@@ -66,8 +71,11 @@ class ansi_c_languaget:public languaget
6671
{
6772
return typecheck(symbol_table, module, true);
6873
}
74+
=======
75+
message_handlert &message_handler) override;
76+
>>>>>>> languaget is not a messaget
6977

70-
void show_parse(std::ostream &out) override;
78+
void show_parse(std::ostream &out, message_handlert &) override;
7179

7280
~ansi_c_languaget() override;
7381
ansi_c_languaget() { }
@@ -91,7 +99,8 @@ class ansi_c_languaget:public languaget
9199
const std::string &code,
92100
const std::string &module,
93101
exprt &expr,
94-
const namespacet &ns) override;
102+
const namespacet &ns,
103+
message_handlert &message_handler) override;
95104

96105
std::unique_ptr<languaget> new_language() override
97106
{ return util_make_unique<ansi_c_languaget>(); }

0 commit comments

Comments
 (0)