diff options
author | Manuel Klimek <klimek@google.com> | 2013-01-16 14:55:28 +0000 |
---|---|---|
committer | Manuel Klimek <klimek@google.com> | 2013-01-16 14:55:28 +0000 |
commit | 249981040b9f01e6557b977d94f63e504361dac5 (patch) | |
tree | cec57ad11cb679827487103141073da2ab765787 /clang/lib/Format/Format.cpp | |
parent | 2338264ad970cce047356959899668f5978afe78 (diff) | |
download | bcm5719-llvm-249981040b9f01e6557b977d94f63e504361dac5.tar.gz bcm5719-llvm-249981040b9f01e6557b977d94f63e504361dac5.zip |
Add debugging support for split penalties.
llvm-svn: 172616
Diffstat (limited to 'clang/lib/Format/Format.cpp')
-rw-r--r-- | clang/lib/Format/Format.cpp | 42 |
1 files changed, 41 insertions, 1 deletions
diff --git a/clang/lib/Format/Format.cpp b/clang/lib/Format/Format.cpp index 4b5c2b8f662..ee9b463e903 100644 --- a/clang/lib/Format/Format.cpp +++ b/clang/lib/Format/Format.cpp @@ -16,15 +16,21 @@ /// //===----------------------------------------------------------------------===// -#include "clang/Format/Format.h" +#define DEBUG_TYPE "format-formatter" + #include "UnwrappedLineParser.h" #include "clang/Basic/Diagnostic.h" #include "clang/Basic/OperatorPrecedence.h" #include "clang/Basic/SourceManager.h" +#include "clang/Format/Format.h" #include "clang/Frontend/TextDiagnosticPrinter.h" #include "clang/Lex/Lexer.h" +#include "llvm/Support/Debug.h" #include <string> +// Uncomment to get debug output from tests: +// #define DEBUG_WITH_TYPE(T, X) do { X; } while(0) + namespace clang { namespace format { @@ -246,6 +252,10 @@ public: State.LineContainsContinuedForLoopSection = false; State.StartOfLineLevel = 1; + DEBUG({ + DebugTokenState(*State.NextToken); + }); + // The first token has already been indented and thus consumed. moveStateToNextToken(State); @@ -262,6 +272,18 @@ public: } else { unsigned NoBreak = calcPenalty(State, false, UINT_MAX); unsigned Break = calcPenalty(State, true, NoBreak); + DEBUG({ + if (Break < NoBreak) + llvm::errs() << "\n"; + else + llvm::errs() << " "; + llvm::errs() << "<"; + DebugPenalty(Break, Break < NoBreak); + llvm::errs() << "/"; + DebugPenalty(NoBreak, !(Break < NoBreak)); + llvm::errs() << "> "; + DebugTokenState(*State.NextToken); + }); addTokenToState(Break < NoBreak, false, State); if (State.NextToken != NULL && State.NextToken->Parent->Type == TT_CtorInitializerColon) { @@ -271,10 +293,28 @@ public: } } } + DEBUG(llvm::errs() << "\n"); return State.Column; } private: + void DebugTokenState(const AnnotatedToken &AnnotatedTok) { + const Token &Tok = AnnotatedTok.FormatTok.Tok; + llvm::errs() + << StringRef(SourceMgr.getCharacterData(Tok.getLocation()), + Tok.getLength()); + llvm::errs(); + } + + void DebugPenalty(unsigned Penalty, bool Winner) { + llvm::errs().changeColor(Winner ? raw_ostream::GREEN : raw_ostream::RED); + if (Penalty == UINT_MAX) + llvm::errs() << "MAX"; + else + llvm::errs() << Penalty; + llvm::errs().resetColor(); + } + struct ParenState { ParenState(unsigned Indent, unsigned LastSpace) : Indent(Indent), LastSpace(LastSpace), FirstLessLess(0), |