diff options
author | Ted Kremenek <kremenek@apple.com> | 2008-04-16 04:38:45 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2008-04-16 04:38:45 +0000 |
commit | fdbe6799cae249c8b29cb7f7d4032d2f2468df06 (patch) | |
tree | a1a514bc54e41bb381a2ce6f8d55341032bdd823 /Driver/HTMLPrint.cpp | |
parent | 8570f0b0fde7ca812f8d37f52305f3df4dd2ce01 (diff) |
Remove "--html-test" driver option and its corresponding code; all of this
functionality has been migrated into "--emit-html" and "--html-diags".
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@49776 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'Driver/HTMLPrint.cpp')
-rw-r--r-- | Driver/HTMLPrint.cpp | 183 |
1 files changed, 2 insertions, 181 deletions
diff --git a/Driver/HTMLPrint.cpp b/Driver/HTMLPrint.cpp index 165689d143..a0a76a566e 100644 --- a/Driver/HTMLPrint.cpp +++ b/Driver/HTMLPrint.cpp @@ -1,4 +1,4 @@ -//===--- HTMLPrint.cpp - Playground for the HTML code rewriter ------------===// +//===--- HTMLPrint.cpp - Source code -> HTML pretty-printing --------------===// // // The LLVM Compiler Infrastructure // @@ -7,7 +7,7 @@ // //===----------------------------------------------------------------------===// // -// Hacks and fun related to the code rewriter. +// Pretty-printing of source code to HTML. // //===----------------------------------------------------------------------===// @@ -16,12 +16,7 @@ #include "clang/Rewrite/Rewriter.h" #include "clang/Rewrite/HTMLRewrite.h" #include "clang/Basic/SourceManager.h" -#include "llvm/Support/MemoryBuffer.h" #include "clang/AST/ASTContext.h" -#include "clang/Basic/Diagnostic.h" -#include "clang/Analysis/LocalCheckers.h" -#include "clang/AST/CFG.h" -#include <sstream> using namespace clang; @@ -62,177 +57,3 @@ HTMLPrinter::~HTMLPrinter() { free(Buffer); } } - -//===----------------------------------------------------------------------===// -// Other HTML pretty-printing code used to test new features. -//===----------------------------------------------------------------------===// - -namespace { - class HTMLTest : public ASTConsumer { - Rewriter R; - ASTContext* Ctx; - public: - HTMLTest() : Ctx(NULL) {} - virtual ~HTMLTest(); - virtual void HandleTopLevelDecl(Decl* D); - - void Initialize(ASTContext &context); - void ProcessBody(Stmt* S); - }; -} - -ASTConsumer* clang::CreateHTMLTest() { return new HTMLTest(); } - -void HTMLTest::Initialize(ASTContext &context) { - Ctx = &context; - R.setSourceMgr(context.getSourceManager()); -} - -void HTMLTest::HandleTopLevelDecl(Decl* D) { - if (FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) - if (Stmt* B = FD->getBody()) { - SourceLocation L = B->getLocStart(); - - if (L.isFileID() && L.getFileID() == R.getSourceMgr().getMainFileID()) - ProcessBody(B); - } -} - -HTMLTest::~HTMLTest() { - - unsigned FileID = R.getSourceMgr().getMainFileID(); - html::EscapeText(R, FileID); - html::AddLineNumbers(R, FileID); - html::AddHeaderFooterInternalBuiltinCSS(R, FileID); - - // Emit the HTML. - - if (const RewriteBuffer *RewriteBuf = R.getRewriteBufferFor(FileID)) { - std::string S(RewriteBuf->begin(), RewriteBuf->end()); - printf("%s\n", S.c_str()); - } -} - -namespace { - class HTMLDiagnostic : public DiagnosticClient { - Rewriter& R; - public: - HTMLDiagnostic(Rewriter& r) : R(r) {} - virtual void HandleDiagnostic(Diagnostic &Diags, - Diagnostic::Level DiagLevel, - FullSourceLoc Pos, - diag::kind ID, - const std::string *Strs, - unsigned NumStrs, - const SourceRange *Ranges, - unsigned NumRanges); - }; -} - -void HTMLTest::ProcessBody(Stmt* S) { - CFG* cfg = CFG::buildCFG(S); - - if (!cfg) - return; - - HTMLDiagnostic HD(R); - Diagnostic D(HD); - - CheckDeadStores(*cfg, *Ctx, D); -} - -void HTMLDiagnostic::HandleDiagnostic(Diagnostic &Diags, - Diagnostic::Level DiagLevel, - FullSourceLoc Pos, - diag::kind ID, - const std::string *Strs, - unsigned NumStrs, - const SourceRange *Ranges, - unsigned NumRanges) { - - // For now, just draw a box above the line in question, and emit the - // warning. - - if (!Pos.isValid()) - return; - - SourceManager& SM = R.getSourceMgr(); - - FullSourceLoc LPos = Pos.getLogicalLoc(); - unsigned FileID = SM.getCanonicalFileID(LPos.getLocation()); - - assert (&LPos.getManager() == &SM && "SourceManagers are different!"); - - if (!SM.isFromMainFile(LPos.getLocation())) - return; - - // Compute the column number. Rewind from the current position to the start - // of the line. - - unsigned ColNo = LPos.getColumnNumber(); - const char *TokLogicalPtr = LPos.getCharacterData(); - const char *LineStart = TokLogicalPtr-ColNo; - - // Ripped from TextDiagnostics::FormatDiagnostic: - - std::string Msg = Diags.getDescription(ID); - - for (unsigned i = 0; i < Msg.size() - 1; ++i) { - if (Msg[i] == '%' && isdigit(Msg[i + 1])) { - unsigned StrNo = Msg[i + 1] - '0'; - Msg = std::string(Msg.begin(), Msg.begin() + i) + - (StrNo < NumStrs ? Strs[StrNo] : "<<<INTERNAL ERROR>>>") + - std::string(Msg.begin() + i + 2, Msg.end()); - } - } - - // Create the html for the message. - - std::ostringstream os; - - os << "\n<tr><td class=\"num\"></td><td class=\"line\">" - << "<div class=\"msg\" style=\"margin-left:" - << ColNo << "ex\">"; - - switch (DiagLevel) { - default: assert(0 && "Unknown diagnostic type!"); - case Diagnostic::Note: os << "note: "; break; - case Diagnostic::Warning: os << "warning: "; break; - case Diagnostic::Error: os << "error: "; break; - case Diagnostic::Fatal: os << "fatal error: "; break; - break; - } - - os << Msg << "</div></td></tr>"; - - // Insert the new html. - - const llvm::MemoryBuffer *Buf = SM.getBuffer(FileID); - const char* FileStart = Buf->getBufferStart(); - - R.InsertStrBefore(SourceLocation::getFileLoc(FileID, LineStart - FileStart), - os.str()); - - // Now highlight the ranges. - - for (unsigned i = 0; i < NumRanges; ++i) { - - SourceLocation B = SM.getLogicalLoc(Ranges->getBegin()); - SourceLocation E = SM.getLogicalLoc(Ranges->getEnd()); - - // We do this because the position seems to point to the beginning of - // the last character. FIXME: Is this what is suppose to happen? - std::pair<unsigned,unsigned> X = SM.getDecomposedFileLoc(E); - E = SourceLocation::getFileLoc(X.first, X.second+1); - - ++Ranges; - - if (!SM.isFromMainFile(B) || !SM.isFromMainFile(E)) - continue; - - // Highlight the range. Make the span tag the outermost tag for the - // selected range. - R.InsertCStrBefore(B, "<span class=\"mrange\">"); - R.InsertCStrAfter(E, "</span>"); - } -} |