1 #include <cstdint> 2 #include <cstddef> 3 #include <string> 4 #include <ostream> 5 #include <sstream> 6 #include <stack> 7 #include "ruby.pb.h" 8 9 namespace ruby_fuzzer { 10 class protoConverter 11 { 12 public: protoConverter()13 protoConverter() { 14 m_numLiveVars = 1; 15 m_numVarsPerScope.push(m_numLiveVars); 16 } protoConverter(protoConverter const & x)17 protoConverter(protoConverter const& x) { 18 m_numLiveVars = x.m_numLiveVars; 19 m_numVarsPerScope = x.m_numVarsPerScope; 20 } ~protoConverter()21 ~protoConverter() {} 22 std::string FunctionToString(Function const& _input); 23 24 private: 25 void visit(ArrType const&); 26 void visit(Array const&); 27 void visit(AssignmentStatement const&); 28 void visit(BinaryOp const&); 29 void visit(BuiltinFuncs const&); 30 void visit(Const const&); 31 void visit(Function const&); 32 void visit(HashType const&); 33 void visit(IfElse const&); 34 void visit(KVPair const&); 35 void visit(MathConst const&); 36 void visit(MathOps const&); 37 void visit(MathType const&); 38 void visit(ObjectSpace const&); 39 void visit(Rvalue const&); 40 void visit(Statement const&); 41 void visit(StatementSeq const&); 42 void visit(StringExtNoArg const&); 43 void visit(Ternary const&); 44 void visit(Time const&); 45 void visit(VarRef const&); 46 template <class T> 47 void visit(google::protobuf::RepeatedPtrField<T> const& _repeated_field); 48 49 std::string removeSpecial(const std::string &x); 50 51 std::ostringstream m_output; 52 std::stack<uint8_t> m_numVarsPerScope; 53 int32_t m_numLiveVars; 54 }; 55 } 56