From 8ac63738b4afcb7e03099874d9209b4c0cd9dc61 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Tue, 10 Feb 2009 22:16:03 +0000 Subject: [PATCH] use efficient form of getSpelling, this speeds up -dM by 16%. llvm-svn: 64244 --- clang/Driver/PrintPreprocessedOutput.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/clang/Driver/PrintPreprocessedOutput.cpp b/clang/Driver/PrintPreprocessedOutput.cpp index 8bd4e96ae3ba..7aceb7a75028 100644 --- a/clang/Driver/PrintPreprocessedOutput.cpp +++ b/clang/Driver/PrintPreprocessedOutput.cpp @@ -582,11 +582,19 @@ static void PrintMacroDefinition(IdentifierInfo &II, const MacroInfo &MI, if (MI.tokens_empty() || !MI.tokens_begin()->hasLeadingSpace()) OS << ' '; + llvm::SmallVector SpellingBuffer; + for (MacroInfo::tokens_iterator I = MI.tokens_begin(), E = MI.tokens_end(); I != E; ++I) { if (I->hasLeadingSpace()) OS << ' '; - OS << PP.getSpelling(*I); + + // Make sure we have enough space in the spelling buffer. + if (I->getLength() < SpellingBuffer.size()) + SpellingBuffer.resize(I->getLength()); + const char *Buffer = &SpellingBuffer[0]; + unsigned SpellingLen = PP.getSpelling(*I, Buffer); + OS.write(Buffer, SpellingLen); } OS << "\n"; }