Skip to content

Commit 8c18ecd

Browse files
Merge pull request #7439 from thomasspriggs/tas/api_piml_refactor
Refactor `api_session_implementationt` to reduce forward declarations
2 parents 220edb2 + 540a60f commit 8c18ecd

File tree

2 files changed

+16
-20
lines changed

2 files changed

+16
-20
lines changed

src/libcprover-cpp/api.cpp

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,24 +19,23 @@
1919

2020
extern configt config;
2121

22-
api_sessiont::api_sessiont()
23-
: message_handler(
24-
util_make_unique<null_message_handlert>(null_message_handlert{})),
25-
options(util_make_unique<optionst>(optionst{}))
22+
struct api_session_implementationt
23+
{
24+
std::unique_ptr<goto_modelt> model;
25+
std::unique_ptr<message_handlert> message_handler;
26+
std::unique_ptr<optionst> options;
27+
};
28+
29+
api_sessiont::api_sessiont() : api_sessiont{api_optionst::create()}
2630
{
27-
// Needed to initialise the language options correctly
28-
cmdlinet cmdline;
29-
// config is global in config.cpp
30-
config.set(cmdline);
31-
// Initialise C language mode
32-
register_language(new_ansi_c_language);
3331
}
3432

3533
api_sessiont::api_sessiont(const api_optionst &options)
36-
: message_handler(
37-
util_make_unique<null_message_handlert>(null_message_handlert{})),
38-
options(options.to_engine_options())
34+
: implementation{util_make_unique<api_session_implementationt>()}
3935
{
36+
implementation->message_handler =
37+
util_make_unique<null_message_handlert>(null_message_handlert{});
38+
implementation->options = options.to_engine_options();
4039
// Needed to initialise the language options correctly
4140
cmdlinet cmdline;
4241
// config is global in config.cpp
@@ -49,6 +48,6 @@ api_sessiont::~api_sessiont() = default;
4948

5049
void api_sessiont::load_model_from_files(const std::vector<std::string> &files)
5150
{
52-
model = util_make_unique<goto_modelt>(
53-
initialize_goto_model(files, *message_handler, *options));
51+
implementation->model = util_make_unique<goto_modelt>(initialize_goto_model(
52+
files, *implementation->message_handler, *implementation->options));
5453
}

src/libcprover-cpp/api.h

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@
88
#include <vector>
99

1010
// Forward declaration of API dependencies
11-
class goto_modelt;
12-
class message_handlert;
11+
struct api_session_implementationt;
1312

1413
// There has been a design decision to allow users to include all of
1514
// the API headers by just including `api.h`, so we want to have an
@@ -34,9 +33,7 @@ struct api_sessiont
3433
void load_model_from_files(const std::vector<std::string> &files);
3534

3635
private:
37-
std::unique_ptr<goto_modelt> model;
38-
std::unique_ptr<message_handlert> message_handler;
39-
std::unique_ptr<optionst> options;
36+
std::unique_ptr<api_session_implementationt> implementation;
4037
};
4138

4239
#endif

0 commit comments

Comments
 (0)