aboutsummaryrefslogtreecommitdiff
path: root/Lex
AgeCommit message (Collapse)Author
2007-12-17Sink getName into DirectoryLookup to simplify the client in clang.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@45106 91177308-0d34-0410-b5e6-96231b3b80d8
2007-12-17add headermap.cppChris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@45095 91177308-0d34-0410-b5e6-96231b3b80d8
2007-12-17finish stubbing out support for HeaderMap. Now we just need an implementation!Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@45094 91177308-0d34-0410-b5e6-96231b3b80d8
2007-12-17refactor an better comment framework lookup code. This moves it from Chris Lattner
HeaderSearch into DirectoryLookup, as a particular framework lookup is specific to the directory we are currently querying. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@45093 91177308-0d34-0410-b5e6-96231b3b80d8
2007-12-17as it turns out, frameworks and headermaps are orthogonal. Make this so inChris Lattner
the internal representation. This also fixes a bug where -I foo -F foo would not search foo as both a normal and framework include dir. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@45092 91177308-0d34-0410-b5e6-96231b3b80d8
2007-12-17Step #1 in adding headermap support to clang.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@45089 91177308-0d34-0410-b5e6-96231b3b80d8
2007-12-13add a helper method.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44976 91177308-0d34-0410-b5e6-96231b3b80d8
2007-12-12TargetInfo no longer includes a reference to SourceManager.Ted Kremenek
Moved all clients of Diagnostics to use FullSourceLoc instead of SourceLocation. Added many utility methods to FullSourceLoc to provide shorthand for: FullLoc.getManager().someMethod(FullLoc.getLocation()); instead we have: FullLoc.someMethod(); Modified TextDiagnostics (and related classes) to use this short-hand. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44957 91177308-0d34-0410-b5e6-96231b3b80d8
2007-12-11Mega-patch: ripped SourceManager out of Diagnostic/DiagnosticClient. NowTed Kremenek
SourceManager is passed by reference, allowing the SourceManager to be associated with a specific translation unit, and not the entire execution of the driver. Modified all users of Diagnostics to comply with this new interface. Integrated SourceManager as a member variable of TargetInfo. TargetInfo will eventually be associated with a single translation unit (just like SourceManager). Made the SourceManager reference in ASTContext private. Provided accessor getSourceManager() for clients to use instead. Modified clients to comply with new interface. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44878 91177308-0d34-0410-b5e6-96231b3b80d8
2007-12-09Add dumping support for locations, make -dumptokens print out the locationChris Lattner
info of each token. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44741 91177308-0d34-0410-b5e6-96231b3b80d8
2007-11-30start partitioning the diagnostics into two classes: thoseChris Lattner
that are builtin and those that are aren't. This is a bunch of API refactoring that will make this possible, but there is no functionality change yet. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44473 91177308-0d34-0410-b5e6-96231b3b80d8
2007-11-29Support floating point literals of the form "1e-16f" which specify an ↵Christopher Lamb
exponent but no decimal point. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44431 91177308-0d34-0410-b5e6-96231b3b80d8
2007-11-29Removed potential buffer overrun (spotted by Neil Booth) when ↵Ted Kremenek
NumericLiteralParser converts a parsed literal into an APFloat. We are still performing a copy of the string, which hopefully will be removed eventually for performance reasons. This version now is at least safe. Changed rounding in APFloat construction in NumericLiteralParser from rmTowardsZero to rmNearestTiesToEven. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44422 91177308-0d34-0410-b5e6-96231b3b80d8
2007-11-26Added optional pass-by-reference argument "isExact" toTed Kremenek
NumericLiteralParser::GetFloatValue(). Upon method return, this flag has the value true if the returned APFloat can exactly represent the number in the parsed text, and false otherwise. Modified the implementation of GetFloatValue() to parse literals using APFloat's convertFromString method (which allows us to set the value of isExact). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44339 91177308-0d34-0410-b5e6-96231b3b80d8
2007-11-23Fix PR1820, an incredibly subtle macro expansion bug that Neil discovered.Chris Lattner
Neil, please review this fix. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44285 91177308-0d34-0410-b5e6-96231b3b80d8
2007-11-15fix a bug Steve noticed, where a #import of the main file itself would fail.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44178 91177308-0d34-0410-b5e6-96231b3b80d8
2007-11-14Fix a bug handling hex floats in c90 mode, pointed out by Neil.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44120 91177308-0d34-0410-b5e6-96231b3b80d8
2007-11-10Since we are all working on Leopard, change the built-in MacOS X version ↵Steve Naroff
number (__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) to target Leopard. This is only a short term solution, until the clang driver implements the "-mmacosx-version-min" flag (which will compute this value based on the target). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@43981 91177308-0d34-0410-b5e6-96231b3b80d8
2007-10-31Implement a more sensible strategy for ObjC built-in types (addressing a ↵Steve Naroff
long standing FIXME in Sema::GetObjcIdType()). This removes several gross hacks to work around the previous "lazy" behavior. Two notes: - MinimalActions still needs to be taught about the built-in types (This breaks one of the -noop test cases). I started this, then added a FIXME. - I didn't convert Sema::GetObjcProtoType() yet. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@43567 91177308-0d34-0410-b5e6-96231b3b80d8
2007-10-31Checking in some code that is still under construction.Steve Naroff
I need to (finally) change the way Class/id/SEL/IMP are built-in...the current approach of doing it in the preprocessor is "broken". The other problem is Sema::GetObjcIdType/GetObjcSelType/GetObjcClassType, the hooks that initialize ASTContext lazily. These built-in types need to be done up front... git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@43557 91177308-0d34-0410-b5e6-96231b3b80d8
2007-10-31Add some plumbing to help cope with rewriting "id<p>", "Class<p>*".Steve Naroff
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@43543 91177308-0d34-0410-b5e6-96231b3b80d8
2007-10-30Stop pre-defining objc_msgSend/objc_getClass in the preprocessor. Instead, I ↵Steve Naroff
generate these declaration on the fly when rewriting a message expression. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@43529 91177308-0d34-0410-b5e6-96231b3b80d8
2007-10-30Avoid using macro expansions, which causes these to come out in -E mode.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@43505 91177308-0d34-0410-b5e6-96231b3b80d8
2007-10-24Incorporate some feedback from Chris...Steve Naroff
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@43285 91177308-0d34-0410-b5e6-96231b3b80d8
2007-10-23- Add rewrite rule for @class.Steve Naroff
- Add setter/getter to ObjcClassDecl. - Predefined key runtime functions. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@43257 91177308-0d34-0410-b5e6-96231b3b80d8
2007-10-18Silenced a couple of VC++ warnings.Hartmut Kaiser
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@43125 91177308-0d34-0410-b5e6-96231b3b80d8
2007-10-17Move token length calculation out of the diagnostics machinery into Chris Lattner
the lexer, where it can be shared. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@43090 91177308-0d34-0410-b5e6-96231b3b80d8
2007-10-17Add a new type of lexer: a raw lexer, which does not require a preprocessorChris Lattner
object in order to do its thing. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@43084 91177308-0d34-0410-b5e6-96231b3b80d8
2007-10-17Predefine all the ObjC goodies from <objc/objc.h>. Removed all the ObjC ↵Steve Naroff
goodies from the respective test files. Moving forward, it will be very nice to assume these builtin! git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@43077 91177308-0d34-0410-b5e6-96231b3b80d8
2007-10-15Add support for Pascal strings.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@42974 91177308-0d34-0410-b5e6-96231b3b80d8
2007-10-10resolve a fixme, by moving __builtin_va_list to a more logicalChris Lattner
place and making it correctly parameterized on the target. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@42830 91177308-0d34-0410-b5e6-96231b3b80d8
2007-10-09Add a dummy for the id typedef. Steve, plz fill this in. :)Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@42819 91177308-0d34-0410-b5e6-96231b3b80d8
2007-10-09Make a significant change to invert the control flow handlingChris Lattner
predefined macros. Previously, these were handled by the driver, now they are handled by the preprocessor. Some fallout of this: 1. Instead of preprocessing two buffers (the predefines, then the main source file) we now start preprocessing the main source file and inject the predefines as a "psuedo #include" from the main source file. 2. #1 allows us to nuke the Lexer::IsMainFile flag and simplify Preprocessor::isInPrimaryFile. 3. The driver doesn't have to know about standard #defines, the preprocessor knows, which is nice for people wanting to define their own drivers. 4. This allows us to put normal tokens in the predefine buffer, for example a definition for __builtin_va_list that is target-specific, and a typedef for id in objc. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@42818 91177308-0d34-0410-b5e6-96231b3b80d8
2007-10-09Switch lexer/pp over to new Token::is/isNot apiChris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@42799 91177308-0d34-0410-b5e6-96231b3b80d8
2007-10-07move IdentifierTable.h from liblex to libbasic.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@42730 91177308-0d34-0410-b5e6-96231b3b80d8
2007-10-07implement the Token class in the Lexer.cpp file instead of IdentifierInfo.cppChris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@42728 91177308-0d34-0410-b5e6-96231b3b80d8
2007-10-07improve layering:Chris Lattner
Now instead of IdentifierInfo knowing anything about MacroInfo, only the preprocessor knows. This makes MacroInfo truly private to the Lex library (and its direct clients) instead of being accessed in the Basic library. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@42727 91177308-0d34-0410-b5e6-96231b3b80d8
2007-10-07change calls to getMacroInfo into hasMacroDefinition() where possible.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@42726 91177308-0d34-0410-b5e6-96231b3b80d8
2007-10-07add a hasMacroDefinition() method to IdentifierInfo, strength reduce aChris Lattner
call to getMacroInfo to call it. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@42725 91177308-0d34-0410-b5e6-96231b3b80d8
2007-10-07Remove the PPID bitfield from IdentifierInfo, shrinking it by a word Chris Lattner
(because all bitfields now fit in 32 bits). This shrinks the identifier table for carbon.h from 1634428 to 1451424 bytes (12%) and has no impact on compile time. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@42723 91177308-0d34-0410-b5e6-96231b3b80d8
2007-10-07First step to fixing a long lived layering violation: thisChris Lattner
moves the MacroInfo pointer to a side hash table (which currently lives in IdentifierTable.cpp). This removes a pointer from Identifier info, but doesn't shrink it, as it requires a new bit be added. This strange approach with the 'hasmacro' bit is needed to not lose preprocessor performance. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@42722 91177308-0d34-0410-b5e6-96231b3b80d8
2007-10-07simplify the interfaces to create selectors: getSelector can take any Chris Lattner
number of arguments now and does the right thing, but the nullary/unary accessors are preserved as convenience functions. This allows us to slightly simplify clients. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@42716 91177308-0d34-0410-b5e6-96231b3b80d8
2007-10-07simplify some Selector interfaces.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@42715 91177308-0d34-0410-b5e6-96231b3b80d8
2007-10-05Implement DenseMapInfo for Selector, allowing use of DenseMap/DenseSet ofChris Lattner
Selector's instead of requiring void* to be used. I converted one use of DenseSet<void*> over to use DenseSet<Selector> but the others should change as well. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@42645 91177308-0d34-0410-b5e6-96231b3b80d8
2007-10-05Layering refinements for selectors (suggested by Chris). Specifics...Steve Naroff
- Add SelectorTable, which enables us to remove MultiKeywordSelector from the public header. - Remove FoldingSet from IdentifierInfo.h and Preprocessor.h. - Remove Parser::ObjcGetUnarySelector and Parser::ObjcGetKeywordSelector, they are subsumed by SelectorTable. - Add MultiKeywordSelector to IdentifierInfo.cpp. - Move a bunch of selector related methods from ParseObjC.cpp to IdentifierInfo.cpp. - Added some comments. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@42643 91177308-0d34-0410-b5e6-96231b3b80d8
2007-09-28Add some comments to MultiKeywordSelector, make all methods private, add a ↵Steve Naroff
friend, move some methods around. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@42456 91177308-0d34-0410-b5e6-96231b3b80d8
2007-09-28Yesterday I discovered that 78% of all selectors in "Cocoa.h" take 0/1 argument.Steve Naroff
This motivated implementing a devious clattner inspired solution:-) This approach uses a small value "Selector" class to point to an IdentifierInfo for the 0/1 case. For multi-keyword selectors, we instantiate a MultiKeywordSelector object (previously known as SelectorInfo). Now, the incremental cost for selectors is only 24,800 for Cocoa.h! This saves 156,592 bytes, or 86%!! The size reduction is also the result of getting rid of the AST slot, which was not strictly necessary (we will associate a selector with it's method using another table...most likely in Sema). This change was critical to make now, before we have too many clients. I still need to add some comments to the Selector class...will likely add later today/tomorrow. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@42452 91177308-0d34-0410-b5e6-96231b3b80d8
2007-09-27Fix bug in SelectorInfo::getName() - method buffer needs to be passed by ↵Steve Naroff
reference. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@42411 91177308-0d34-0410-b5e6-96231b3b80d8
2007-09-27Add SelectorInfo (similar in spirit to IdentifierInfo). The key difference ↵Steve Naroff
is SelectorInfo is not string-oriented, it is a unique aggregate of IdentifierInfo's (using a folding set). SelectorInfo also has a richer API that simplifies the parser/action interface. 3 noteworthy benefits: #1: It is cleaner. I never "liked" storing keyword selectors (i.e. foo:bar:baz) in the IdentifierTable. #2: It is more space efficient. Since Cocoa keyword selectors can be quite long, this technique is space saving. For Cocoa.h, pulling the keyword selectors out saves ~180k. The cost of the SelectorInfo data is ~100k. Saves ~80k, or 43%. #3: It results in many API simplifications. Here are some highlights: - Removed 3 actions (ActOnKeywordMessage, ActOnUnaryMessage, & one flavor of ObjcBuildMethodDeclaration that was specific to unary messages). - Removed 3 funky structs from DeclSpec.h (ObjcKeywordMessage, ObjcKeywordDecl, and ObjcKeywordInfo). - Removed 2 ivars and 2 constructors from ObjCMessageExpr (fyi, this space savings has not been measured). I am happy with the way it turned out (though it took a bit more hacking than I expected). Given the central role of selectors in ObjC, making sure this is "right" will pay dividends later. Thanks to Chris for talking this through with me and suggesting this approach. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@42395 91177308-0d34-0410-b5e6-96231b3b80d8
2007-09-24If we see an invalid #ifdef directive, enter a conditional compilation regionChris Lattner
so that we don't emit an error on the #endif. Suggestion by Neil. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@42258 91177308-0d34-0410-b5e6-96231b3b80d8