ESBMC
Efficient SMT-based Context-Bounded Model Checker
Loading...
Searching...
No Matches
module.h
Go to the documentation of this file.
1#pragma once
2
3#include <memory>
4#include <string>
5#include <unordered_set>
6#include <vector>
7#include <nlohmann/json.hpp>
8
9class module;
10
12{
13 std::string name_;
14 std::string return_type_;
15
16 bool operator==(const function &other) const
17 {
18 return name_ == other.name_;
19 }
20};
21
23{
24 std::size_t operator()(const function &f) const
25 {
26 return std::hash<std::string>()(f.name_);
27 }
28};
29
30using FunctionsList = std::unordered_set<function, function_hash>;
31/* Keeping submodules as shared_ptr since ownership needs to be shared in
32 * module_manager::get_module_from_dir */
33using SubmodulesList = std::unordered_set<std::shared_ptr<module>>;
34
35using OverloadList = std::vector<nlohmann::json>;
36
38{
39 std::string name_;
40 std::vector<std::string> bases_;
41 std::vector<std::string> methods_;
42
44 {
45 return name_ == other.name_;
46 }
47};
48
50{
51 std::size_t operator()(const class_definition &c) const
52 {
53 return std::hash<std::string>()(c.name_);
54 }
55};
56
57using ClassesList = std::unordered_set<class_definition, class_definition_hash>;
58
59class module
60{
61public:
62 module(const std::string &name) : name_(name)
63 {
64 }
65
75 void add_source(std::string json_path)
76 {
77 sources_.push_back(std::move(json_path));
78 }
79
80 const std::vector<std::string> &sources() const
81 {
82 return sources_;
83 }
84
85 bool hydrated() const
86 {
87 return hydrated_;
88 }
89
91 {
92 hydrated_ = true;
93 }
94
96 bool readable() const
97 {
98 return readable_;
99 }
100
101 void set_readable(bool yes)
102 {
103 readable_ = yes;
104 }
105
106 const std::string &name() const
107 {
108 return name_;
109 }
110
111 void add_function(const function &func)
112 {
113 functions_.insert(func);
114 }
115
116 void add_submodule(const std::shared_ptr<module> mod)
117 {
118 submodules_.insert(mod);
119 }
120
121 void add_overload(const nlohmann::json &ast)
122 {
123 overloads_.push_back(ast);
124 }
125
127 {
128 classes_.insert(cls);
129 }
130
135 class_definition get_class(const std::string &class_name) const
136 {
138 key.name_ = class_name;
139 auto it = classes_.find(key);
140
141 if (it != classes_.end())
142 return *it;
143
144 return {};
145 }
146
151 function get_function(const std::string &func_name) const
152 {
154 key.name_ = func_name;
155 auto it = functions_.find(key);
156
157 if (it != functions_.end())
158 return *it;
159
160 return {};
161 }
162
164 {
165 return functions_;
166 }
167
169 {
170 return submodules_;
171 }
172
173 const OverloadList &overloads() const
174 {
175 return overloads_;
176 }
177
178 const ClassesList &classes() const
179 {
180 return classes_;
181 }
182
184 {
185 mentions_dunder_all_ = true;
186 }
187
190 bool star_import_binds(const std::string &name) const
191 {
192 return !mentions_dunder_all_ && name.rfind('_', 0) != 0;
193 }
194
195private:
196 std::string name_;
197 FunctionsList functions_;
198 SubmodulesList submodules_;
199 OverloadList overloads_;
200 ClassesList classes_;
201 std::vector<std::string> sources_;
202 bool hydrated_ = false;
203 bool readable_ = true;
204 bool mentions_dunder_all_ = false;
205};
Definition module.h:60
const SubmodulesList & submodules() const
Definition module.h:168
const std::string & name() const
Definition module.h:106
void mark_hydrated()
Definition module.h:90
void add_submodule(const std::shared_ptr< module > mod)
Definition module.h:116
void add_overload(const nlohmann::json &ast)
Definition module.h:121
bool readable() const
False once hydration has run and every source failed to parse.
Definition module.h:96
class_definition get_class(const std::string &class_name) const
Retrieve a class definition by name.
Definition module.h:135
function get_function(const std::string &func_name) const
Retrieve a function definition by name.
Definition module.h:151
const std::vector< std::string > & sources() const
Definition module.h:80
const ClassesList & classes() const
Definition module.h:178
const FunctionsList & functions() const
Definition module.h:163
bool star_import_binds(const std::string &name) const
Whether from <this module> import * binds name: a public name, and no mention of __all__,...
Definition module.h:190
module(const std::string &name)
Definition module.h:62
void set_mentions_dunder_all()
Definition module.h:183
bool hydrated() const
Definition module.h:85
void add_class(const class_definition &cls)
Definition module.h:126
void add_function(const function &func)
Definition module.h:111
void add_source(std::string json_path)
Record a JSON AST this module's contents come from.
Definition module.h:75
void set_readable(bool yes)
Definition module.h:101
const OverloadList & overloads() const
Definition module.h:173
@ other
Definition converter_compare.cpp:887
std::vector< nlohmann::json > OverloadList
Definition module.h:35
std::unordered_set< class_definition, class_definition_hash > ClassesList
Definition module.h:57
std::unordered_set< std::shared_ptr< module > > SubmodulesList
Definition module.h:33
std::unordered_set< function, function_hash > FunctionsList
Definition module.h:30
uint256_t key
Definition solidity_mapping.c:1
Definition module.h:50
std::size_t operator()(const class_definition &c) const
Definition module.h:51
Definition module.h:38
std::string name_
Definition module.h:39
std::vector< std::string > bases_
Definition module.h:40
bool operator==(const class_definition &other) const
Definition module.h:43
std::vector< std::string > methods_
Definition module.h:41
Definition module.h:23
std::size_t operator()(const function &f) const
Definition module.h:24
Definition module.h:12
bool operator==(const function &other) const
Definition module.h:16
std::string name_
Definition module.h:13
std::string return_type_
Definition module.h:14