Skip to content

Commit 5fc12b7

Browse files
author
thk123
committed
Introduce overloads for getting a goto model out of load_java_class
This can be used when you need both the symbol table and the goto functions map, or when you have whole goto_model passes.
1 parent 3705a60 commit 5fc12b7

File tree

2 files changed

+50
-13
lines changed

2 files changed

+50
-13
lines changed

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

Lines changed: 38 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -58,18 +58,8 @@ symbol_tablet load_java_class(
5858
const std::string &class_path,
5959
const std::string &main)
6060
{
61-
free_form_cmdlinet command_line;
62-
command_line.add_flag("no-lazy-methods");
63-
command_line.add_flag("no-refine-strings");
64-
65-
register_language(new_java_bytecode_language);
66-
67-
return load_java_class(
68-
java_class_name,
69-
class_path,
70-
main,
71-
get_language_from_mode(ID_java),
72-
command_line);
61+
return load_goto_model_from_java_class(java_class_name, class_path, main)
62+
->get_symbol_table();
7363
}
7464

7565
/// Go through the process of loading, type-checking and finalising loading a
@@ -89,6 +79,22 @@ symbol_tablet load_java_class(
8979
const std::string &main,
9080
std::unique_ptr<languaget> &&java_lang,
9181
const cmdlinet &command_line)
82+
{
83+
return load_goto_model_from_java_class(
84+
java_class_name,
85+
class_path,
86+
main,
87+
std::move(java_lang),
88+
command_line)
89+
->get_symbol_table();
90+
}
91+
92+
std::unique_ptr<goto_modelt> load_goto_model_from_java_class(
93+
const std::string &java_class_name,
94+
const std::string &class_path,
95+
const std::string &main,
96+
std::unique_ptr<languaget> &&java_lang,
97+
const cmdlinet &command_line)
9298
{
9399
// We expect the name of the class without the .class suffix to allow us to
94100
// check it
@@ -153,7 +159,7 @@ symbol_tablet load_java_class(
153159
// Check your working directory and the class path is correctly configured
154160
// as this often indicates that one of these is wrong.
155161
REQUIRE_FALSE(class_type.get_bool(ID_incomplete_class));
156-
return std::move(maybe_goto_model->symbol_table);
162+
return maybe_goto_model;
157163
}
158164

159165
symbol_tablet load_java_class(
@@ -173,3 +179,22 @@ symbol_tablet load_java_class(
173179
return load_java_class(
174180
java_class_name, class_path, main, std::move(java_lang), command_line);
175181
}
182+
183+
std::unique_ptr<goto_modelt> load_goto_model_from_java_class(
184+
const std::string &java_class_name,
185+
const std::string &class_path,
186+
const std::string &main)
187+
{
188+
free_form_cmdlinet command_line;
189+
command_line.add_flag("no-lazy-methods");
190+
command_line.add_flag("no-refine-strings");
191+
192+
register_language(new_java_bytecode_language);
193+
194+
return load_goto_model_from_java_class(
195+
java_class_name,
196+
class_path,
197+
main,
198+
get_language_from_mode(ID_java),
199+
command_line);
200+
}

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,11 @@ symbol_tablet load_java_class(
2525
const std::string &class_path,
2626
const std::string &main = "");
2727

28+
std::unique_ptr<goto_modelt> load_goto_model_from_java_class(
29+
const std::string &java_class_name,
30+
const std::string &class_path,
31+
const std::string &main = "");
32+
2833
symbol_tablet load_java_class(
2934
const std::string &java_class_name,
3035
const std::string &class_path,
@@ -38,6 +43,13 @@ symbol_tablet load_java_class(
3843
std::unique_ptr<languaget> &&java_lang,
3944
const cmdlinet &command_line);
4045

46+
std::unique_ptr<goto_modelt> load_goto_model_from_java_class(
47+
const std::string &java_class_name,
48+
const std::string &class_path,
49+
const std::string &main,
50+
std::unique_ptr<languaget> &&java_lang,
51+
const cmdlinet &command_line);
52+
4153
symbol_tablet load_java_class_lazy(
4254
const std::string &java_class_name,
4355
const std::string &class_path,

0 commit comments

Comments
 (0)