Skip to content

Commit c938b08

Browse files
Encapsulate maps in language_filest
1 parent 87c6b28 commit c938b08

File tree

7 files changed

+37
-54
lines changed

7 files changed

+37
-54
lines changed

src/goto-cc/compile.cpp

+2-9
Original file line numberDiff line numberDiff line change
@@ -483,14 +483,7 @@ bool compilet::parse(const std::string &file_name)
483483

484484
languagep->set_message_handler(get_message_handler());
485485

486-
language_filet language_file;
487-
488-
std::pair<language_filest::file_mapt::iterator, bool>
489-
res=language_files.file_map.insert(
490-
std::pair<std::string, language_filet>(file_name, language_file));
491-
492-
language_filet &lf=res.first->second;
493-
lf.filename=file_name;
486+
language_filet &lf=language_files.add_file(file_name);
494487
lf.language=std::move(languagep);
495488

496489
if(mode==PREPROCESS_ONLY)
@@ -640,7 +633,7 @@ bool compilet::parse_source(const std::string &file_name)
640633
return true;
641634

642635
// so we remove it from the list afterwards
643-
language_files.file_map.erase(file_name);
636+
language_files.remove_file(file_name);
644637
return false;
645638
}
646639

src/goto-programs/initialize_goto_model.cpp

+1-7
Original file line numberDiff line numberDiff line change
@@ -72,13 +72,7 @@ goto_modelt initialize_goto_model(
7272
throw 0;
7373
}
7474

75-
std::pair<language_filest::file_mapt::iterator, bool>
76-
result=language_files.file_map.insert(
77-
std::pair<std::string, language_filet>(filename, language_filet()));
78-
79-
language_filet &lf=result.first->second;
80-
81-
lf.filename=filename;
75+
language_filet &lf=language_files.add_file(filename);
8276
lf.language=get_language_from_filename(filename);
8377

8478
if(lf.language==nullptr)

src/goto-programs/lazy_goto_functions_map.h

-19
Original file line numberDiff line numberDiff line change
@@ -83,25 +83,6 @@ class lazy_goto_functions_mapt final
8383
{
8484
}
8585

86-
/// Gets the number of functions in the map.
87-
/// \return The number of functions in the map.
88-
size_type size() const
89-
{
90-
return language_files.lazy_method_map.size();
91-
}
92-
93-
/// Returns whether the map contains any mappings.
94-
/// \return Whether the map contains any mappings.
95-
bool empty() const { return language_files.lazy_method_map.empty(); }
96-
97-
/// Checks whether a given function exists in the map.
98-
/// \param name: The name of the function to search for.
99-
/// \return True if the map contains the given function.
100-
bool contains(const key_type &name) const
101-
{
102-
return language_files.lazy_method_map.count(name)!=0;
103-
}
104-
10586
/// Gets the body for a given function.
10687
/// \param name: The name of the function to search for.
10788
/// \return The function body corresponding to the given function.

src/goto-programs/lazy_goto_model.cpp

+1-6
Original file line numberDiff line numberDiff line change
@@ -100,12 +100,7 @@ void lazy_goto_modelt::initialize(const cmdlinet &cmdline)
100100
throw 0;
101101
}
102102

103-
std::pair<language_filest::file_mapt::iterator, bool> result =
104-
language_files.file_map.emplace(filename, language_filet());
105-
106-
language_filet &lf=result.first->second;
107-
108-
lf.filename=filename;
103+
language_filet &lf=language_files.add_file(filename);
109104
lf.language=get_language_from_filename(filename);
110105

111106
if(lf.language==nullptr)

src/langapi/language_ui.cpp

+1-7
Original file line numberDiff line numberDiff line change
@@ -58,13 +58,7 @@ bool language_uit::parse(const std::string &filename)
5858
return true;
5959
}
6060

61-
std::pair<language_filest::file_mapt::iterator, bool>
62-
result=language_files.file_map.insert(
63-
std::pair<std::string, language_filet>(filename, language_filet()));
64-
65-
language_filet &lf=result.first->second;
66-
67-
lf.filename=filename;
61+
language_filet &lf=language_files.add_file(filename);
6862
lf.language=get_language_from_filename(filename);
6963

7064
if(lf.language==nullptr)

src/util/language_file.cpp

+4-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,10 @@ language_filet::language_filet(const language_filet &rhs):
2525
/// destructor in the source file, where the full definition is availible.
2626
language_filet::~language_filet()=default;
2727

28-
language_filet::language_filet()=default;
28+
language_filet::language_filet(const std::string &filename)
29+
: filename(filename)
30+
{
31+
}
2932

3033
void language_filet::get_modules()
3134
{

src/util/language_file.h

+28-5
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ Author: Daniel Kroening, [email protected]
1818

1919
#include "message.h"
2020
#include "symbol_table.h"
21+
#include "language.h"
2122

2223
class language_filet;
23-
class languaget;
2424

2525
class language_modulet final
2626
{
@@ -51,29 +51,52 @@ class language_filet final
5151
const irep_idt &id,
5252
symbol_tablet &symbol_table);
5353

54-
language_filet();
54+
explicit language_filet(const std::string &filename);
5555
language_filet(const language_filet &rhs);
5656

5757
~language_filet();
5858
};
5959

6060
class language_filest:public messaget
6161
{
62-
public:
62+
private:
6363
typedef std::map<std::string, language_filet> file_mapt;
6464
file_mapt file_map;
6565

66-
// Contains pointers into file_mapt!
6766
typedef std::map<std::string, language_modulet> module_mapt;
6867
module_mapt module_map;
6968

70-
// Contains pointers into filemapt!
69+
// Contains pointers into file_map!
7170
// This is safe-ish as long as this is std::map.
7271
typedef std::map<irep_idt, language_filet *> lazy_method_mapt;
7372
lazy_method_mapt lazy_method_map;
7473

74+
public:
75+
language_filet &add_file(const std::string &filename)
76+
{
77+
language_filet language_file(filename);
78+
return file_map.emplace(filename, std::move(language_file)).first->second;
79+
}
80+
81+
void remove_file(const std::string &filename)
82+
{
83+
// Clear relevant entries from lazy_method_map
84+
language_filet *language_file = &file_map.at(filename);
85+
id_sett files_methods;
86+
for(const std::pair<irep_idt, language_filet *> &method : lazy_method_map)
87+
{
88+
if(method.second == language_file)
89+
files_methods.insert(method.first);
90+
}
91+
for(const irep_idt &method_name : files_methods)
92+
lazy_method_map.erase(method_name);
93+
94+
file_map.erase(filename);
95+
}
96+
7597
void clear_files()
7698
{
99+
lazy_method_map.clear();
77100
file_map.clear();
78101
}
79102

0 commit comments

Comments
 (0)