aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSergio Martins <iamsergio@gmail.com>2019-06-07 12:45:02 +0100
committerSergio Martins <iamsergio@gmail.com>2019-06-07 12:45:02 +0100
commit22b8c12a447d60fe576c76094f6ede646dae3cdb (patch)
treeb4ab3a4c20c935367602d7b8a346fb9b319bf82c
parent849343a794b21e37fa97133c92267ddb4137086b (diff)
WIP
-rw-r--r--src/MiniAstDumper.cpp47
-rw-r--r--src/MiniAstDumper.h5
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;
};