avoid creating std::strings in MoveToLine

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@40424 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2007-07-23 06:31:11 +00:00
Родитель e225e378c6
Коммит f063721c4b
1 изменённых файлов: 18 добавлений и 2 удалений

Просмотреть файл

@ -148,6 +148,21 @@ public:
};
}
/// UToStr - Do itoa on the specified number, in-place in the specified buffer.
/// endptr points to the end of the buffer.
static char *UToStr(unsigned N, char *EndPtr) {
// Null terminate the buffer.
*--EndPtr = '\0';
if (N == 0) // Zero is a special case.
*--EndPtr = '0';
while (N) {
*--EndPtr = '0' + char(N % 10);
N /= 10;
}
return EndPtr;
}
/// MoveToLine - Move the output to the source line specified by the location
/// object. We can do this by emitting some number of \n's, or be emitting a
/// #line directive.
@ -182,8 +197,9 @@ void PrintPPOutputPPCallbacks::MoveToLine(SourceLocation Loc) {
OutputChar('#');
OutputChar(' ');
std::string Num = llvm::utostr_32(LineNo);
OutputString(&Num[0], Num.size());
char NumberBuffer[20];
const char *NumStr = UToStr(LineNo, NumberBuffer+20);
OutputString(NumStr, (NumberBuffer+20)-NumStr-1);
OutputChar(' ');
OutputChar('"');
OutputString(&CurFilename[0], CurFilename.size());