aboutsummaryrefslogtreecommitdiff
path: root/include/clang/Lex
AgeCommit message (Collapse)Author
2008-12-15Preprocessor: Allocate MacroInfo objects using a BumpPtrAllocator instead ↵Ted Kremenek
using new/delete. This speeds up -Eonly on Cocoa.h using the regular lexer by 1.8% and the PTHLexer by 3%. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@61042 91177308-0d34-0410-b5e6-96231b3b80d8
2008-12-12Added PTH optimization to not process entire blocks of tokens that appear in ↵Ted Kremenek
skipped preprocessor blocks. This improves PTH speed by 6%. The code for this optimization itself is not very optimized, and will get cleaned up. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@60956 91177308-0d34-0410-b5e6-96231b3b80d8
2008-12-11PTHLexer: Keep track of the location of the last '#' token and provide the ↵Ted Kremenek
means to jump ahead in the token stream. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@60905 91177308-0d34-0410-b5e6-96231b3b80d8
2008-12-11Remove unused ivar CurTokenIdx.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@60896 91177308-0d34-0410-b5e6-96231b3b80d8
2008-12-10PreprocessorLexer (and subclasses):Ted Kremenek
- Added virtual method 'getSourceLocation()' (no arguments) that gets the location of the next "observable" location (e.g., next character, next token). PPLexerChange.cpp: - Implemented FIXME by using PreprocessorLexer::getSourceLocation() to get the location in the file we are returning to after lexing a #included file. This appears to be slightly faster than having the branch (i.e., 'if(CurLexer)'). It's also not a really hot part of the Preprocessor. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@60860 91177308-0d34-0410-b5e6-96231b3b80d8
2008-12-10Declare PerIDCache as IdentifierInfo** instead of void*. This is just ↵Ted Kremenek
cleaner. No performance change. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@60843 91177308-0d34-0410-b5e6-96231b3b80d8
2008-12-03PTH:Ted Kremenek
Use an array instead of a DenseMap to cache persistent IDs -> IdentifierInfo*. This leads to a 4% speedup at -fsyntax-only using PTH. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@60452 91177308-0d34-0410-b5e6-96231b3b80d8
2008-12-03- Remove PTHManager.cpp. Move all of its functions to PTHLexer.cpp since ↵Ted Kremenek
some of the internal methods are used by PTHLexer (their implementations are intertwined.) This enables some important inlining opportunities at -O3. - Don't construct an std::vector<Token> prior to feeding PTH tokens to the Preprocessor. Stream them off the PTH file directly. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@60447 91177308-0d34-0410-b5e6-96231b3b80d8
2008-12-02Preprocessor:Ted Kremenek
- Added method "setPTHManager" that will be called by the driver to install a PTHManager for the Preprocessor. - Fixed some comments. - Added EnterSourceFileWithPTH to mirror EnterSourceFileWithLexer. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@60437 91177308-0d34-0410-b5e6-96231b3b80d8
2008-12-02Added PTHManager, a utility class that will be used by Preprocessor to ↵Ted Kremenek
lazily create PTHLexer objects for pre-tokenized files. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@60436 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-27PTHLexer now owns the Token vector.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@60136 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-26Add setter method PreprocessorLexer::setParsingPreprocessorDirective(). ↵Ted Kremenek
This will be used by the mechanism to generate cached tokens. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@60070 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-22remove the NumericLiteralParser::Diag helper method, inlining it intoChris Lattner
its call sites. This makes it more explicit when the hasError flag is getting set and removes a confusing difference in behavior between PP.Diag and Diag in this code. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59863 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-22Move the Preprocessor::Diag methods inline. This has the interestingChris Lattner
(and carefully calculated) effect of allowing the compiler to reason about the aliasing properties of DiagnosticBuilder object better, allowing the whole thing to be promoted to registers instead of resulting in a ton of stack traffic. While I'm not very concerned about the performance of the Diag() method invocations, I *am* more concerned about their code size and impact on the non-diagnostic code. This patch shrinks the clang executable (in release-asserts mode with gcc-4.2) from 14523980 to 14519816 bytes. This isn't much, but it shrinks the lexer from 38192 to 37776, PPDirectives.o from 31116 to 28868 bytes, etc. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59862 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-22inline a method into its only two call sites.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59860 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-22actually, this version isn't really needed.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59859 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-22remove a sneaky version of Diag hiding in PreprocessorLexer.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59858 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-22Change the Lexer::Diag method to not magically silence warnings,Chris Lattner
force the caller to check instead. This eliminates the need (and the risk!) of weird null DiagnosticBuilder's floating around. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59856 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-22Split the DiagnosticInfo class into two disjoint classes:Chris Lattner
one for building up the diagnostic that is in flight (DiagnosticBuilder) and one for pulling structured information out of the diagnostic when formatting and presenting it. There is no functionality change with this patch. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59849 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-22Fix predicate: we're not in caching mode if CurPPLexer == 0, not CurLexer == 0.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59848 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-21Add comment to IsFileLexer, clean up indentation, and tighten how it's written.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59773 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-21PTHLexer:Ted Kremenek
- Move out logic for handling the end-of-file to LexEndOfFile (to match the Lexer) class. The logic now mirrors the Lexer class more, which allows us to pass most of the Preprocessor test cases. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59768 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-20PTHLexer:Ted Kremenek
- Move PTHLexer::GetToken() to be inside PTHLexer.cpp. - When lexing in raw mode, null out identifiers. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59744 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-20PTHLexer:Ted Kremenek
- Rename 'CurToken' and 'LastToken' to 'CurTokenIdx' and 'LastTokenIdx' respectively. - Add helper methods GetToken(), AdvanceToken(), AtLastToken() to abstract away details of the token stream. This also allows us to easily replace their implementation later. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59733 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-20Rename IsNonPragmaNonMacroLexer to IsFileLexer.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59731 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-20De-unionize fields in Token class.Daniel Dunbar
- This is fairly gross but although the code is conceptually the same, introducting the union causes gcc 4.2 on x86 (darwin, if that matters) to pessimize LexTokenInternal which is critical to our preprocessor performance. This speeds up -Eonly lexing of Cocoa.h by ~4.7% in my timings and reduces the code size of LexTokenInternal by 8.6%. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59725 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-20Added virtual method 'IndirectLex' to PTHLexer. This will likely get ↵Ted Kremenek
removed in the future when we correctly handle #include processing. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59722 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-20Preprocessor::isCurrentLexer() now takes a PreprocessorLexer* argument to ↵Ted Kremenek
match against CurPPLexer instead of CurLexer. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59721 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-20Preprocessor::getCurrentFileLexer() now returns a PreprocessorLexer* instead ofTed Kremenek
a Lexer*. This means it will either return the current (normal) file Lexer or a PTHLexer. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59694 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-20- Default initialize ParsingPreprocessorDirective, ParsingFilename, andTed Kremenek
LexingRawMode in the ctor of PreprocessorLexer. - PTHLexer: Use "LastToken" instead of "NumToken" git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59690 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-19Fix comment.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59673 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-19Add stub for PTHLexer::isNextPPTokenLParen().Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59670 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-19When using a PTHLexer, use DiscardToEndOfLine() instead of ReadToEndOfLine().Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59668 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-19- Move static function IsNonPragmaNonMacroLexer into Preprocessor.h.Ted Kremenek
- Add variants of IsNonPragmaNonMacroLexer to accept an IncludeMacroStack entry (simplifies some uses). - Use IsNonPragmaNonMacroLexer in Preprocessor::LookupFile. - Add 'FileID' to PreprocessorLexer, and have Preprocessor query this fileid when looking up the FileEntry for a file Performance testing of -Eonly on Cocoa.h shows no performance regression because of this patch. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59666 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-19Fix this:Argyrios Kyrtzidis
With this snippet: void f(a::b); An assert is hit: Assertion failed: CachedTokens[CachedLexPos-1].getLocation() == Tok.getAnnotationEndLoc() && "The annotation should be until the most recent cached token", file ..\..\lib\Lex\PPCaching.cpp, line 98 Introduce Preprocessor::RevertCachedTokens that reverts a specific number of tokens when backtracking is enabled. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59636 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-19Remove Preprocessor::CacheTokens boolean data member. The same functionality ↵Argyrios Kyrtzidis
can be provided by using Preprocessor::isBacktrackEnabled(). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59631 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-19Revert 59574 (caused tests to fail).Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59579 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-19- Move static function IsNonPragmaNonMacroLexer into Preprocessor.h.Ted Kremenek
- Add variants of IsNonPragmaNonMacroLexer to accept an IncludeMacroStack entry (simplifies some uses). - Use IsNonPragmaNonMacroLexer in Preprocessor::LookupFile. Performance testing of -Eonly on Cocoa.h shows no performance regression because of this patch. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59574 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-18Remove the last of the old-style Preprocessor::Diag methods.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59554 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-18remove one more Preprocessor::Diag method.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59512 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-18Convert the lexer and start converting the PP over to using canonical Diag ↵Chris Lattner
methods. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59511 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-18Preprocessor::PushIncludeMacroStack() should always zero out CurPPLexer.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59490 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-18- Add Lexer::isPragma() accessor for clients of Lexer that aren't friends.Ted Kremenek
- Add static method to test if the current lexer is a non-macro/non-pragma lexer. - Refactor some code in PPLexerChange to use this static method. - No performance change. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59486 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-18Add hooks to use PTHLexer::Lex instead of Lexer::Lex when CurLexer is null.Ted Kremenek
Performance tests on Cocoa.h (using the regular Lexer) shows no performance difference. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59479 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-18- Add 'CurPPLexer' to Preprocessor to keep track of the currentTed Kremenek
PreprocessorLexer, which will either be a 'Lexer' or 'PTHLexer'. - Added stub field 'CurPTHLexer' to keep track of the current PTHLexer. - Modified IncludeStackInfo to track both the current PTHLexer and current PreprocessorLexer. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59472 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-17Introduction the DeclarationName class, as a single, general method ofDouglas Gregor
representing the names of declarations in the C family of languages. DeclarationName is used in NamedDecl to store the name of the declaration (naturally), and ObjCMethodDecl is now a NamedDecl. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59441 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-13Using llvm::OwningPtr<> for CurLexer and CurTokenLexer. This makes both the ↵Ted Kremenek
ownership semantics of these objects explicit within the Preprocessor and also tightens up the code (explicit deletes not needed). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59249 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-12Move some diagnostic handling to PreprocessorLexer.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59191 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-12Add virtual dtor to PreprocessorLexer.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59188 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-12Add LexIncludeFilename.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59187 91177308-0d34-0410-b5e6-96231b3b80d8