diff options
author | Sergio Martins <iamsergio@gmail.com> | 2019-06-07 12:45:02 +0100 |
---|---|---|
committer | Sergio Martins <iamsergio@gmail.com> | 2019-06-07 12:45:02 +0100 |
commit | 22b8c12a447d60fe576c76094f6ede646dae3cdb (patch) | |
tree | b4ab3a4c20c935367602d7b8a346fb9b319bf82c | |
parent | 849343a794b21e37fa97133c92267ddb4137086b (diff) |
WIP
-rw-r--r-- | src/MiniAstDumper.cpp | 47 | ||||
-rw-r--r-- | src/MiniAstDumper.h | 5 |
2 files changed, 41 insertions, 11 deletions
diff --git a/src/MiniAstDumper.cpp b/src/MiniAstDumper.cpp index af5a9034..a62064e2 100644 --- a/src/MiniAstDumper.cpp +++ b/src/MiniAstDumper.cpp @@ -21,6 +21,7 @@ */ #include "MiniAstDumper.h" +#include "SourceCompatibilityHelpers.h" #include <clang/Frontend/CompilerInstance.h> #include <clang/Frontend/FrontendPluginRegistry.h> @@ -30,6 +31,7 @@ using namespace clang; using namespace std; + MiniAstDumperASTAction::MiniAstDumperASTAction() { } @@ -50,21 +52,16 @@ MiniASTDumperConsumer::MiniASTDumperConsumer(CompilerInstance &ci) auto &sm = m_ci.getASTContext().getSourceManager(); const FileEntry *fileEntry = sm.getFileEntryForID(sm.getMainFileID()); - llvm::errs() << "Found TU: " << fileEntry->getName() << "\n"; + m_cborBuf = (uint8_t*)malloc(m_bufferSize); const std::string currentCppFile = fileEntry->getName(); - - cbor_encoder_init(&m_cborEncoder, m_cborBuf, sizeof(m_cborBuf), 0); + cbor_encoder_init(&m_cborEncoder, m_cborBuf, m_bufferSize, 0); cbor_encoder_create_map(&m_cborEncoder, &m_cborRootMapEncoder, 2); cbor_encode_text_stringz(&m_cborRootMapEncoder, "tu"); cbor_encode_text_stringz(&m_cborRootMapEncoder, currentCppFile.c_str()); cbor_encode_text_stringz(&m_cborRootMapEncoder, "stuff"); cbor_encoder_create_array(&m_cborRootMapEncoder, &m_cborStuffArray, CborIndefiniteLength); - - - //cbor_encode_boolean(&m_cborRootMapEncoder, some_value); - // } MiniASTDumperConsumer::~MiniASTDumperConsumer() @@ -76,6 +73,9 @@ MiniASTDumperConsumer::~MiniASTDumperConsumer() std::ofstream myFile ("data.bin", std::ios::out | ios::binary); myFile.write(reinterpret_cast<char*>(m_cborBuf), long(size)); + + llvm::errs() << "Finished " << m_bufferSize << "\n"; + } bool MiniASTDumperConsumer::VisitDecl(Decl *decl) @@ -92,9 +92,24 @@ bool MiniASTDumperConsumer::VisitDecl(Decl *decl) // This is a template. We'll rather print it's specializations when catching ClassTemplateDecl return true; } - llvm::errs() << "Found record: " << rec->getQualifiedNameAsString() - << "; this=" << rec - << "\n"; + + CborEncoder recordMap; + cbor_encoder_create_map(&m_cborStuffArray, &recordMap, 4); + + cborEncodeString(recordMap, "type"); + cborEncodeInt(recordMap, rec->getDeclKind()); + + cborEncodeString(recordMap, "name"); + cborEncodeString(recordMap, rec->getQualifiedNameAsString().c_str()); + + cborEncodeString(recordMap, "id"); + cborEncodeInt(recordMap, int64_t(rec)); + + cborEncodeString(recordMap, "loc"); + cborEncodeString(recordMap, clazy::getLocStart(rec).printToString(m_ci.getSourceManager()).c_str()); + + cbor_encoder_close_container(&m_cborStuffArray, &recordMap); + } else if (auto ctd = dyn_cast<ClassTemplateDecl>(decl)) { llvm::errs() << "Found template: " << ctd->getNameAsString() << "; this=" << ctd @@ -108,6 +123,8 @@ bool MiniASTDumperConsumer::VisitDecl(Decl *decl) llvm::errs() << "\n"; } } + } else if () { + } return true; @@ -123,5 +140,15 @@ void MiniASTDumperConsumer::HandleTranslationUnit(ASTContext &ctx) TraverseDecl(ctx.getTranslationUnitDecl()); } +void MiniASTDumperConsumer::cborEncodeString(CborEncoder &enc, const char *str) +{ + cbor_encode_text_stringz(&enc, str); +} + +void MiniASTDumperConsumer::cborEncodeInt(CborEncoder &enc, int64_t v) +{ + cbor_encode_int(&enc, v); +} + static FrontendPluginRegistry::Add<MiniAstDumperASTAction> X2("clazyMiniAstDumper", "Clazy Mini AST Dumper plugin"); diff --git a/src/MiniAstDumper.h b/src/MiniAstDumper.h index 257db74d..ad7ceda4 100644 --- a/src/MiniAstDumper.h +++ b/src/MiniAstDumper.h @@ -65,8 +65,11 @@ public: private: MiniASTDumperConsumer(const MiniASTDumperConsumer &) = delete; + void cborEncodeString(CborEncoder&, const char *); + void cborEncodeInt(CborEncoder&, int64_t); - uint8_t m_cborBuf[1600]; + uint8_t *m_cborBuf = nullptr; + int m_bufferSize = 1024 * 1024 * 20; // 20MB to start with CborEncoder m_cborEncoder, m_cborRootMapEncoder, m_cborStuffArray; clang::CompilerInstance &m_ci; }; |