retdec
json_manager.h
Go to the documentation of this file.
1 
7 #ifndef RETDEC_LLVMIR2HLL_HLL_OUTPUT_MANAGERS_JSON_MANAGER_H
8 #define RETDEC_LLVMIR2HLL_HLL_OUTPUT_MANAGERS_JSON_MANAGER_H
9 
10 #include <stack>
11 
12 #include <rapidjson/writer.h>
13 #include <rapidjson/prettywriter.h>
14 #include <rapidjson/stringbuffer.h>
15 #include <rapidjson/encodings.h>
16 
17 #include <llvm/Support/raw_ostream.h>
18 
20 
21 namespace retdec {
22 namespace llvmir2hll {
23 
24 class OutputManager;
25 
26 template <typename Writer>
28 {
29  public:
30  JsonOutputManager(llvm::raw_ostream& out);
31  virtual void finalize() override;
32 
33  public:
34  virtual void newLine() override;
35  virtual void space(const std::string& space = " ") override;
36  virtual void punctuation(char p) override;
37  virtual void operatorX(const std::string& op) override;
38  virtual void globalVariableId(const std::string& id) override;
39  virtual void localVariableId(const std::string& id) override;
40  virtual void memberId(const std::string& id) override;
41  virtual void labelId(const std::string& id) override;
42  virtual void functionId(const std::string& id) override;
43  virtual void parameterId(const std::string& id) override;
44  virtual void keyword(const std::string& k) override;
45  virtual void dataType(const std::string& t) override;
46  virtual void preprocessor(const std::string& p) override;
47  virtual void include(const std::string& i) override;
48  virtual void constantBool(const std::string& c) override;
49  virtual void constantInt(const std::string& c) override;
50  virtual void constantFloat(const std::string& c) override;
51  virtual void constantString(const std::string& c) override;
52  virtual void constantSymbol(const std::string& c) override;
53  virtual void constantPointer(const std::string& c) override;
54  virtual void comment(const std::string& comment) override;
55 
56  public:
57  virtual void commentModifier() override;
58  virtual void addressPush(Address a) override;
59  virtual void addressPop() override;
60 
61  private:
62  void jsonToken(const std::string& k, const std::string& v);
64 
65  private:
66  llvm::raw_ostream& _out;
67 
68  rapidjson::StringBuffer sb;
69  Writer writer;
70 
71  std::stack<std::pair<Address, bool>> _addrs;
72  std::pair<Address, bool> _addrToGenerate;
85  bool _commentModifierOn = false;
86  std::string _runningComment;
87 };
88 
91 
94 
95 } // namespace llvmir2hll
96 } // namespace retdec
97 
98 #endif
Definition: address.h:21
Definition: json_manager.h:28
Writer writer
Definition: json_manager.h:69
virtual void punctuation(char p) override
Definition: json_manager.cpp:111
virtual void constantBool(const std::string &c) override
Definition: json_manager.cpp:195
virtual void labelId(const std::string &id) override
Definition: json_manager.cpp:146
virtual void space(const std::string &space=" ") override
Definition: json_manager.cpp:104
bool _commentModifierOn
Definition: json_manager.h:85
virtual void include(const std::string &i) override
Definition: json_manager.cpp:188
JsonOutputManager(llvm::raw_ostream &out)
Definition: json_manager.cpp:60
void generateAddressEntry(Address a)
Definition: json_manager.cpp:315
virtual void constantFloat(const std::string &c) override
Definition: json_manager.cpp:209
std::pair< Address, bool > _addrToGenerate
Definition: json_manager.h:72
virtual void addressPop() override
Definition: json_manager.cpp:290
virtual void localVariableId(const std::string &id) override
Definition: json_manager.cpp:132
void jsonToken(const std::string &k, const std::string &v)
Definition: json_manager.cpp:326
virtual void constantPointer(const std::string &c) override
Definition: json_manager.cpp:230
virtual void finalize() override
Definition: json_manager.cpp:73
virtual void addressPush(Address a) override
Definition: json_manager.cpp:255
virtual void globalVariableId(const std::string &id) override
Definition: json_manager.cpp:125
virtual void constantInt(const std::string &c) override
Definition: json_manager.cpp:202
virtual void constantSymbol(const std::string &c) override
Definition: json_manager.cpp:223
virtual void operatorX(const std::string &op) override
Definition: json_manager.cpp:118
virtual void keyword(const std::string &k) override
Definition: json_manager.cpp:167
virtual void comment(const std::string &comment) override
Definition: json_manager.cpp:237
llvm::raw_ostream & _out
Definition: json_manager.h:66
virtual void preprocessor(const std::string &p) override
Definition: json_manager.cpp:181
virtual void newLine() override
Definition: json_manager.cpp:86
virtual void memberId(const std::string &id) override
Definition: json_manager.cpp:139
virtual void dataType(const std::string &t) override
Definition: json_manager.cpp:174
virtual void constantString(const std::string &c) override
Definition: json_manager.cpp:216
virtual void commentModifier() override
Definition: json_manager.cpp:249
virtual void functionId(const std::string &id) override
Definition: json_manager.cpp:153
std::string _runningComment
Definition: json_manager.h:86
std::stack< std::pair< Address, bool > > _addrs
Definition: json_manager.h:71
virtual void parameterId(const std::string &id) override
Definition: json_manager.cpp:160
rapidjson::StringBuffer sb
Definition: json_manager.h:68
Definition: output_manager.h:21
A library providing API for working with back-end IR.
Definition: archive_wrapper.h:19
A base class of all output managers.