Change the datastructure for UnwrappedLines.
It was quite convoluted leading to us accidentally introducing O(N^2)
complexity while copying from UnwrappedLine to AnnotatedLine. We might
still want to improve the datastructure in AnnotatedLine (most
importantly not put them in a vector where they need to be copied on
vector resizing but that will be done as a follow-up.
This fixes most of the regression in llvm.org/PR14959.
No formatting changes intended.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@172602 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Format/UnwrappedLineParser.h b/lib/Format/UnwrappedLineParser.h
index 08faff1..21a973d 100644
--- a/lib/Format/UnwrappedLineParser.h
+++ b/lib/Format/UnwrappedLineParser.h
@@ -24,7 +24,7 @@
#include "clang/Format/Format.h"
#include "clang/Lex/Lexer.h"
-#include <vector>
+#include <list>
namespace clang {
@@ -76,11 +76,6 @@
/// This happens for example when a preprocessor directive ended directly
/// before the token.
bool MustBreakBefore;
-
- // FIXME: We currently assume that there is exactly one token in this vector
- // except for the very last token that does not have any children.
- /// \brief All tokens that logically follow this token.
- std::vector<FormatToken> Children;
};
/// \brief An unwrapped line is a sequence of \c Token, that we would like to
@@ -93,8 +88,8 @@
UnwrappedLine() : Level(0), InPPDirective(false) {
}
- /// \brief The \c Token comprising this \c UnwrappedLine.
- FormatToken RootToken;
+ /// \brief The \c Tokens comprising this \c UnwrappedLine.
+ std::list<FormatToken> Tokens;
/// \brief The indent level of the \c UnwrappedLine.
unsigned Level;
@@ -160,8 +155,6 @@
// subtracted from beyond 0. Introduce a method to subtract from Line.Level
// and use that everywhere in the Parser.
OwningPtr<UnwrappedLine> Line;
- bool RootTokenInitialized;
- FormatToken *LastInCurrentLine;
FormatToken FormatTok;
bool MustBreakBeforeNextToken;