ESBMC
Efficient SMT-based Context-Bounded Model Checker
Loading...
Searching...
No Matches
solidity_language.h
Go to the documentation of this file.
1
9
10#ifndef SOLIDITY_FRONTEND_SOLIDITY_AST_LANGUAGE_H_
11#define SOLIDITY_FRONTEND_SOLIDITY_AST_LANGUAGE_H_
12
15#include <util/lang/language.h>
16#include <fstream>
17#include <sstream>
18#include <nlohmann/json.hpp>
19#include <boost/filesystem.hpp>
20
22{
23public:
25
26 bool parse(const std::string &path) override;
27
28 bool final(contextt &context) override;
29
30 bool typecheck(contextt &context, const std::string &module) override;
31
32 std::string id() const override
33 {
34 return "solidity_ast";
35 }
36
37 void show_parse(std::ostream &out) override;
38
39 // temp file for Clang to parse ESBMC intrinsic symbols
40 std::string temp_path;
41 std::string get_temp_file();
42 bool convert_intrinsics(contextt &context);
43
44 // solc auto-invocation support
45 std::string find_solc() const;
46 std::string get_solc_version(const std::string &solc) const;
47 bool invoke_solc(const std::string &sol_path, std::string &solast_path);
48 bool parse_solast(const std::string &solast_path);
49
50 languaget *new_language() const override
51 {
52 return new solidity_languaget;
53 }
54
55 // contract name for verification, allow multiple inputs.
56 std::string contract_names;
57
58 // function name for verification that requires this information before GOTO
59 // conversion phase.
60 std::string func_name;
61
62 // focus function name: like func_name, but the full contract harness
63 // (constructor + state init) still runs and only this function is
64 // dispatched in the nondet extcall loop. Empty means feature disabled.
65 std::string focus_func_name;
66
67 // smart contract source
68 std::string contract_path;
69
70 // store AST json in nlohmann::json data structure
71 nlohmann::json src_ast_json_array = nlohmann::json::array();
72 nlohmann::json intrinsic_json;
73
75};
76
78
79#endif /* SOLIDITY_FRONTEND_SOLIDITY_AST_LANGUAGE_H_ */
Definition clang_cpp_language.h:10
Definition context.h:57
Definition language.h:16
Definition module.h:60
std::string get_solc_version(const std::string &solc) const
Definition solidity_language.cpp:142
bool convert_intrinsics(contextt &context)
Definition solidity_language.cpp:311
languaget * clang_c_module
Definition solidity_language.h:74
bool parse(const std::string &path) override
Definition solidity_language.cpp:268
std::string get_temp_file()
Definition solidity_language.cpp:83
languaget * new_language() const override
Definition solidity_language.h:50
void show_parse(std::ostream &out) override
Definition solidity_language.cpp:400
bool typecheck(contextt &context, const std::string &module) override
Definition solidity_language.cpp:326
bool invoke_solc(const std::string &sol_path, std::string &solast_path)
Definition solidity_language.cpp:175
std::string func_name
Definition solidity_language.h:60
bool parse_solast(const std::string &solast_path)
Definition solidity_language.cpp:221
nlohmann::json intrinsic_json
Definition solidity_language.h:72
std::string focus_func_name
Definition solidity_language.h:65
std::string id() const override
Definition solidity_language.h:32
std::string find_solc() const
Definition solidity_language.cpp:109
solidity_languaget()
Definition solidity_language.cpp:60
nlohmann::json src_ast_json_array
Definition solidity_language.h:71
std::string contract_names
Definition solidity_language.h:56
std::string contract_path
Definition solidity_language.h:68
std::string temp_path
Definition solidity_language.h:40
Definition path.py:1
languaget * new_solidity_language()
Definition solidity_language.cpp:55