retdec
Public Member Functions | Private Member Functions | Private Attributes | List of all members
retdec::llvmir2hll::JsonOutputManager< Writer > Class Template Reference

#include <json_manager.h>

Inheritance diagram for retdec::llvmir2hll::JsonOutputManager< Writer >:
Inheritance graph
[legend]
Collaboration diagram for retdec::llvmir2hll::JsonOutputManager< Writer >:
Collaboration graph
[legend]

Public Member Functions

 JsonOutputManager (llvm::raw_ostream &out)
 
virtual void finalize () override
 
virtual void newLine () override
 
virtual void space (const std::string &space=" ") override
 
virtual void punctuation (char p) override
 
virtual void operatorX (const std::string &op) override
 
virtual void globalVariableId (const std::string &id) override
 
virtual void localVariableId (const std::string &id) override
 
virtual void memberId (const std::string &id) override
 
virtual void labelId (const std::string &id) override
 
virtual void functionId (const std::string &id) override
 
virtual void parameterId (const std::string &id) override
 
virtual void keyword (const std::string &k) override
 
virtual void dataType (const std::string &t) override
 
virtual void preprocessor (const std::string &p) override
 
virtual void include (const std::string &i) override
 
virtual void constantBool (const std::string &c) override
 
virtual void constantInt (const std::string &c) override
 
virtual void constantFloat (const std::string &c) override
 
virtual void constantString (const std::string &c) override
 
virtual void constantSymbol (const std::string &c) override
 
virtual void constantPointer (const std::string &c) override
 
virtual void comment (const std::string &comment) override
 
virtual void commentModifier () override
 
virtual void addressPush (Address a) override
 
virtual void addressPop () override
 
- Public Member Functions inherited from retdec::llvmir2hll::OutputManager
virtual ~OutputManager ()
 
void setCommentPrefix (const std::string &prefix)
 
const std::string & getCommentPrefix () const
 
void setOutputLanguage (const std::string &lang)
 
const std::string & getOutputLanguage () const
 
virtual void operatorX (const std::string &op, bool spaceBefore, bool spaceAfter)
 
virtual void comment (const std::string &comment, const std::string &indent)
 
virtual void commentLine (const std::string &comment, const std::string &indent="")
 
virtual void includeLine (const std::string &header, const std::string &indent="", const std::string &comment="")
 
virtual void typedefLine (const std::string &indent, const std::string &t1, const std::string &t2)
 

Private Member Functions

void jsonToken (const std::string &k, const std::string &v)
 
void generateAddressEntry (Address a)
 

Private Attributes

llvm::raw_ostream & _out
 
rapidjson::StringBuffer sb
 
Writer writer
 
std::stack< std::pair< Address, bool > > _addrs
 
std::pair< Address, bool > _addrToGenerate
 
bool _commentModifierOn = false
 
std::string _runningComment
 

Constructor & Destructor Documentation

◆ JsonOutputManager()

template<typename Writer >
retdec::llvmir2hll::JsonOutputManager< Writer >::JsonOutputManager ( llvm::raw_ostream &  out)

Member Function Documentation

◆ addressPop()

template<typename Writer >
void retdec::llvmir2hll::JsonOutputManager< Writer >::addressPop ( )
overridevirtual

Associates all subsequently added tokens with address that was used before the last addressPush(addr).

Implements retdec::llvmir2hll::OutputManager.

◆ addressPush()

template<typename Writer >
void retdec::llvmir2hll::JsonOutputManager< Writer >::addressPush ( Address  a)
overridevirtual

Associates all subsequently added tokens with the passed address. Intended to be used in pair with addressPop(). Every addressPush() must have a corresponding addressPop() that always gets executed (e.g. cannot be skipped because of early function return or similar). Together, these methods are designed to recursively encapsulate token blocks with the same address.

Implements retdec::llvmir2hll::OutputManager.

◆ comment()

template<typename Writer >
void retdec::llvmir2hll::JsonOutputManager< Writer >::comment ( const std::string &  comment)
overridevirtual

◆ commentModifier()

template<typename Writer >
void retdec::llvmir2hll::JsonOutputManager< Writer >::commentModifier
overridevirtual

◆ constantBool()

template<typename Writer >
void retdec::llvmir2hll::JsonOutputManager< Writer >::constantBool ( const std::string &  c)
overridevirtual

◆ constantFloat()

template<typename Writer >
void retdec::llvmir2hll::JsonOutputManager< Writer >::constantFloat ( const std::string &  c)
overridevirtual

◆ constantInt()

template<typename Writer >
void retdec::llvmir2hll::JsonOutputManager< Writer >::constantInt ( const std::string &  c)
overridevirtual

◆ constantPointer()

template<typename Writer >
void retdec::llvmir2hll::JsonOutputManager< Writer >::constantPointer ( const std::string &  c)
overridevirtual

◆ constantString()

template<typename Writer >
void retdec::llvmir2hll::JsonOutputManager< Writer >::constantString ( const std::string &  c)
overridevirtual

◆ constantSymbol()

template<typename Writer >
void retdec::llvmir2hll::JsonOutputManager< Writer >::constantSymbol ( const std::string &  c)
overridevirtual

◆ dataType()

template<typename Writer >
void retdec::llvmir2hll::JsonOutputManager< Writer >::dataType ( const std::string &  t)
overridevirtual

◆ finalize()

template<typename Writer >
void retdec::llvmir2hll::JsonOutputManager< Writer >::finalize
overridevirtual

Reimplemented from retdec::llvmir2hll::OutputManager.

◆ functionId()

template<typename Writer >
void retdec::llvmir2hll::JsonOutputManager< Writer >::functionId ( const std::string &  id)
overridevirtual

◆ generateAddressEntry()

template<typename Writer >
void retdec::llvmir2hll::JsonOutputManager< Writer >::generateAddressEntry ( Address  a)
private

◆ globalVariableId()

template<typename Writer >
void retdec::llvmir2hll::JsonOutputManager< Writer >::globalVariableId ( const std::string &  id)
overridevirtual

◆ include()

template<typename Writer >
void retdec::llvmir2hll::JsonOutputManager< Writer >::include ( const std::string &  i)
overridevirtual

◆ jsonToken()

template<typename Writer >
void retdec::llvmir2hll::JsonOutputManager< Writer >::jsonToken ( const std::string &  k,
const std::string &  v 
)
private

◆ keyword()

template<typename Writer >
void retdec::llvmir2hll::JsonOutputManager< Writer >::keyword ( const std::string &  k)
overridevirtual

◆ labelId()

template<typename Writer >
void retdec::llvmir2hll::JsonOutputManager< Writer >::labelId ( const std::string &  id)
overridevirtual

◆ localVariableId()

template<typename Writer >
void retdec::llvmir2hll::JsonOutputManager< Writer >::localVariableId ( const std::string &  id)
overridevirtual

◆ memberId()

template<typename Writer >
void retdec::llvmir2hll::JsonOutputManager< Writer >::memberId ( const std::string &  id)
overridevirtual

◆ newLine()

template<typename Writer >
void retdec::llvmir2hll::JsonOutputManager< Writer >::newLine
overridevirtual

◆ operatorX()

template<typename Writer >
void retdec::llvmir2hll::JsonOutputManager< Writer >::operatorX ( const std::string &  op)
overridevirtual

◆ parameterId()

template<typename Writer >
void retdec::llvmir2hll::JsonOutputManager< Writer >::parameterId ( const std::string &  id)
overridevirtual

◆ preprocessor()

template<typename Writer >
void retdec::llvmir2hll::JsonOutputManager< Writer >::preprocessor ( const std::string &  p)
overridevirtual

◆ punctuation()

template<typename Writer >
void retdec::llvmir2hll::JsonOutputManager< Writer >::punctuation ( char  p)
overridevirtual

◆ space()

template<typename Writer >
void retdec::llvmir2hll::JsonOutputManager< Writer >::space ( const std::string &  space = " ")
overridevirtual

Member Data Documentation

◆ _addrs

template<typename Writer >
std::stack<std::pair<Address, bool> > retdec::llvmir2hll::JsonOutputManager< Writer >::_addrs
private

◆ _addrToGenerate

template<typename Writer >
std::pair<Address, bool> retdec::llvmir2hll::JsonOutputManager< Writer >::_addrToGenerate
private

◆ _commentModifierOn

template<typename Writer >
bool retdec::llvmir2hll::JsonOutputManager< Writer >::_commentModifierOn = false
private

Used to implement commentModifier():

  1. commentModifier() sets _commentModifierOn flag to true.
  2. All token generators check if the flag is set.
  3. If it is not, they generate JSON token entry as usual.
  4. If it is, instead of generating JSON token entry, they serialize token value to string and concatenate it to _runningComment.
  5. Before generating newline token, the newline() token generator checks the flag and if it is set, it generates comment token from _runningComment and resets the flag and _runningComment.

◆ _out

template<typename Writer >
llvm::raw_ostream& retdec::llvmir2hll::JsonOutputManager< Writer >::_out
private

◆ _runningComment

template<typename Writer >
std::string retdec::llvmir2hll::JsonOutputManager< Writer >::_runningComment
private

◆ sb

template<typename Writer >
rapidjson::StringBuffer retdec::llvmir2hll::JsonOutputManager< Writer >::sb
private

◆ writer

template<typename Writer >
Writer retdec::llvmir2hll::JsonOutputManager< Writer >::writer
private

The documentation for this class was generated from the following files: