summaryrefslogtreecommitdiffstats
path: root/clang/lib/Basic
Commit message (Collapse)AuthorAgeFilesLines
* Fix order of evaluation.Sebastian Redl2008-11-271-1/+1
| | | | llvm-svn: 60160
* Rename Selector::getName() to Selector::getAsString(), and addChris Lattner2008-11-241-1/+1
| | | | | | | | | | | | | a new NamedDecl::getAsString() method. Change uses of Selector::getName() to just pass in a Selector where possible (e.g. to diagnostics) instead of going through an std::string. This also adds new formatters for objcinstance and objcclass as described in the dox. llvm-svn: 59933
* Convert IdentifierInfo's to be printed the same as DeclarationNames Chris Lattner2008-11-231-6/+11
| | | | | | | | | | | | | | | | | | | | | with implicit quotes around them. This has a bunch of follow-on effects and requires tweaking to a whole lot of code. This causes a regression in two tests (xfailed) by causing it to emit things like: Line 10: duplicate interface declaration for category 'MyClass1' ('Category1') instead of: Line 10: duplicate interface declaration for category 'MyClass1(Category1)' I will fix this in a follow-up commit. As part of this, I had to start switching stuff to use ->getDeclName() instead of Decl::getName() for consistency. This is good, but I was planning to do this as an independent patch. There will be several follow-on patches to clean up some of the mess, but this patch is already too big. llvm-svn: 59917
* add support for inserting a DeclarationName into a diagnostic directlyChris Lattner2008-11-231-0/+1
| | | | | | | without calling getAsString(). This implicitly puts quotes around the name, so diagnostics need to be tweaked to accommodate this. llvm-svn: 59916
* Genericize the qualtype formating callback to support any diag argument.Chris Lattner2008-11-231-8/+9
| | | | | | No functionality change. llvm-svn: 59908
* Add support for sending QualType's directly into diags and convert twoChris Lattner2008-11-231-8/+25
| | | | | | | | | | diags over to use this. QualTypes implicitly print single quotes around them for uniformity and future extension. Doing this requires a little function pointer dance to prevent libbasic from depending on libast. llvm-svn: 59907
* Implement a %plural modifier for complex plural forms in diagnostics. Use it ↵Sebastian Redl2008-11-221-0/+126
| | | | | | in the overload diagnostics. llvm-svn: 59871
* Split the DiagnosticInfo class into two disjoint classes:Chris Lattner2008-11-221-7/+9
| | | | | | | | | | 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. llvm-svn: 59849
* Add the concept of "modifiers" to the clang diagnostic format Chris Lattner2008-11-211-25/+121
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | strings. This allows us to have considerable flexibility in how these things are displayed and provides extra information that allows us to merge away diagnostics that are very similar. Diagnostic modifiers are a string of characters with the regex [-a-z]+ that occur between the % and digit. They may optionally have an argument that can parameterize them. For now, I've added two example modifiers. One is a very useful tool that allows you to factor commonality across diagnostics that need single words or phrases combined. Basically you can use %select{a|b|c}4 with with an integer argument that selects either a/b/c based on an integer value in the range [0..3). The second modifier is also an integer modifier, aimed to help English diagnostics handle plurality. "%s3" prints to 's' if integer argument #3 is not 1, otherwise it prints to nothing. I'm fully aware that 's' is an English concept and doesn't apply to all situations (mouse vs mice). However, this is very useful and we can add other crazy modifiers once we add support for polish! ;-) I converted a couple C++ diagnostics over to use this as an example, I'd appreciate it if others could merge the other likely candiates. If you have other modifiers that you want, lets talk on cfe-dev. llvm-svn: 59803
* Allow sending IdentifierInfo*'s into Diagnostics without turning them into ↵Chris Lattner2008-11-191-0/+6
| | | | | | | | strings first. This should allow removal of a bunch of II->getName() calls. llvm-svn: 59601
* add direct support for signed and unsigned integer arguments to diagnostics.Chris Lattner2008-11-191-0/+13
| | | | llvm-svn: 59598
* rewrite FormatDiagnostic to be less gross and a lot more efficient.Chris Lattner2008-11-191-14/+35
| | | | | | | This also makes it illegal to have bare '%'s in diagnostics. If you want a % in a diagnostic, use %%. llvm-svn: 59596
* implement a transparent optimization with the diagnostics stuff:Chris Lattner2008-11-191-1/+2
| | | | | | | | | | const char*'s are now not converted to std::strings when the diagnostic is formed, we just hold onto their pointer and format as needed. This commit makes DiagnosticClient::FormatDiagnostic even more of a mess, I'll fix it in the next commit. llvm-svn: 59593
* Extend DeclarationName to support C++ overloaded operators, e.g.,Douglas Gregor2008-11-181-22/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | operator+, directly, using the same mechanism as all other special names. Removed the "special" identifiers for the overloaded operators from the identifier table and IdentifierInfo data structure. IdentifierInfo is back to representing only real identifiers. Added a new Action, ActOnOperatorFunctionIdExpr, that builds an expression from an parsed operator-function-id (e.g., "operator +"). ActOnIdentifierExpr used to do this job, but operator-function-ids are no longer represented by IdentifierInfo's. Extended Declarator to store overloaded operator names. Sema::GetNameForDeclarator now knows how to turn the operator name into a DeclarationName for the overloaded operator. Except for (perhaps) consolidating the functionality of ActOnIdentifier, ActOnOperatorFunctionIdExpr, and ActOnConversionFunctionExpr into a common routine that builds an appropriate DeclRefExpr by looking up a DeclarationName, all of the work on normalizing declaration names should be complete with this commit. llvm-svn: 59526
* This reworks some of the Diagnostic interfaces a bit to change how diagnosticsChris Lattner2008-11-181-33/+19
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | are formed. In particular, a diagnostic with all its strings and ranges is now packaged up and sent to DiagnosticClients as a DiagnosticInfo instead of as a ton of random stuff. This has the benefit of simplifying the interface, making it more extensible, and allowing us to do more checking for things like access past the end of the various arrays passed in. In addition to introducing DiagnosticInfo, this also substantially changes how Diagnostic::Report works. Instead of being passed in all of the info required to issue a diagnostic, Report now takes only the required info (a location and ID) and returns a fresh DiagnosticInfo *by value*. The caller is then free to stuff strings and ranges into the DiagnosticInfo with the << operator. When the dtor runs on the DiagnosticInfo object (which should happen at the end of the statement), the diagnostic is actually emitted with all of the accumulated information. This is a somewhat tricky dance, but it means that the accumulated DiagnosticInfo is allowed to keep pointers to other expression temporaries without those pointers getting invalidated. This is just the minimal change to get this stuff working, but this will allow us to eliminate the zillions of variant "Diag" methods scattered throughout (e.g.) sema. For example, instead of calling: Diag(BuiltinLoc, diag::err_overload_no_match, typeNames, SourceRange(BuiltinLoc, RParenLoc)); We will soon be able to just do: Diag(BuiltinLoc, diag::err_overload_no_match) << typeNames << SourceRange(BuiltinLoc, RParenLoc)); This scales better to support arbitrary types being passed in (not just strings) in a type-safe way. Go operator overloading?! llvm-svn: 59502
* SourceManager::getLineNumber is logically const except for caching.Chris Lattner2008-11-181-1/+1
| | | | | | Use mutable to make it so. llvm-svn: 59498
* Change the diagnostics interface to take an array of pointers to Chris Lattner2008-11-181-3/+3
| | | | | | | | strings instead of array of strings. This reduces string copying in some not-very-important cases, but paves the way for future improvements. llvm-svn: 59494
* Eliminate all of the placeholder identifiers used for constructors,Douglas Gregor2008-11-171-28/+2
| | | | | | | | | destructors, and conversion functions. The placeholders were used to work around the fact that the parser and some of Sema really wanted declarators to have simple identifiers; now, the code that deals with declarators will use DeclarationNames. llvm-svn: 59469
* Introduction the DeclarationName class, as a single, general method ofDouglas Gregor2008-11-171-11/+11
| | | | | | | | 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. llvm-svn: 59441
* Fix PR3077: tokens that come from macro expansions whose macro wasChris Lattner2008-11-161-1/+1
| | | | | | | defined in a system header should be treated as system header tokens even if they are instantiated in a different place. llvm-svn: 59418
* Add a new expression node, CXXOperatorCallExpr, which expresses aDouglas Gregor2008-11-141-1/+12
| | | | | | | | | | | | | | | | | | | function call created in response to the use of operator syntax that resolves to an overloaded operator in C++, e.g., "str1 + str2" that resolves to std::operator+(str1, str2)". We now build a CXXOperatorCallExpr in C++ when we pick an overloaded operator. (But only for binary operators, where we actually implement overloading) I decided *not* to refactor the current CallExpr to make it abstract (with FunctionCallExpr and CXXOperatorCallExpr as derived classes). Doing so would allow us to make CXXOperatorCallExpr a little bit smaller, at the cost of making the argument and callee accessors virtual. We won't know if this is going to be a win until we can parse lots of C++ code to determine how much memory we'll save by making this change vs. the performance penalty due to the extra virtual calls. llvm-svn: 59306
* Don't build identifiers for C++ constructors, destructors, orDouglas Gregor2008-11-121-2/+29
| | | | | | | | | | | | | | conversion functions. Instead, we just use a placeholder identifier for these (e.g., "<constructor>") and override NamedDecl::getName() to provide a human-readable name. This is one potential solution to the problem; another solution would be to replace the use of IdentifierInfo* in NamedDecl with a different class that deals with identifiers better. I'm also prototyping that to see how it compares, but this commit is better than what we had previously. llvm-svn: 59193
* Some cleanups to the declaration/checking of overloaded operators in C++. ↵Douglas Gregor2008-11-101-1/+1
| | | | | | Thanks to Sebastian for the review llvm-svn: 58986
* Parsing, ASTs, and semantic analysis for the declaration of overloadedDouglas Gregor2008-11-061-0/+11
| | | | | | | | | operators in C++. Overloaded operators can be called directly via their operator-function-ids, e.g., "operator+(foo, bar)", but we don't yet implement the semantics of operator overloading to handle, e.g., "foo + bar". llvm-svn: 58817
* Reclaim some bits in IdentifierInfo, for later use as overloaded operator names.Douglas Gregor2008-11-061-2/+1
| | | | llvm-svn: 58806
* More fallout from r58501: primary fix is some more corrections to make Eli Friedman2008-11-022-9/+20
| | | | | | | | | | | | | | | | | the types for size_t and ptrdiff_t more accurate. I think all of these are correct, but please compare the defines for __PTRDIFF_TYPE__ and __SIZE_TYPE__ to gcc to double-check; this particularly applies to those on BSD variants, since I'm not sure what they do here; I assume here that they're the same as on Linux. Fixes wchar_t to be "int", not "unsigned int" (which I think is correct on everything but Windows). Fixes ptrdiff_t to be "int" rather than "short" on PIC16; "short" is an somewhat strange choice because it normally gets promoted, and it's not consistent with the choice for size_t. llvm-svn: 58556
* Fix a bug that was introduced in 58501. Ideally I think we should force all ↵Anders Carlsson2008-10-311-1/+1
| | | | | | targets to set these values and not have defaults. llvm-svn: 58511
* Made the mechanism of defining preprocessor defs for maxint, ptrdiff_t, wcharSanjiv Gupta2008-10-312-4/+15
| | | | | | | | | | etc more generic. For some targets, long may not be equal to pointer size. For example: PIC16 has int as i16, ptr as i16 but long as i32. Also fixed a few build warnings in assert() functions in CFRefCount.cpp, CGDecl.cpp, SemaDeclCXX.cpp and ParseDeclCXX.cpp. llvm-svn: 58501
* Rename Characteristic_t to CharacteristicKindChris Lattner2008-10-271-1/+1
| | | | llvm-svn: 58224
* Fix the definition of __builtin_va_list on PPC, which was set to the V4 ABI, ↵Chris Lattner2008-10-271-2/+4
| | | | | | | | not the darwin or AIX abis. This fixes PR2904. llvm-svn: 58222
* CMake: Builds and installs clang binary and libs (no docs yet). ItOscar Fuentes2008-10-261-0/+13
| | | | | | must be under the `tools' subdirectory of the LLVM *source* tree. llvm-svn: 58180
* fix rdar://6288301: custom warnings don't respect -Werror.Chris Lattner2008-10-171-2/+8
| | | | llvm-svn: 57731
* Add basic FreeBSD target support, patch by Roman Divacky!Chris Lattner2008-10-161-0/+51
| | | | llvm-svn: 57645
* Add 'x' constraint character.Anders Carlsson2008-10-061-0/+1
| | | | llvm-svn: 57198
* Add the 'y' assembler constraint.Anders Carlsson2008-10-061-0/+1
| | | | llvm-svn: 57144
* miscellaneous cleanupsChris Lattner2008-10-051-22/+30
| | | | llvm-svn: 57140
* move __FLT_EVAL_METHOD__, __FLT_RADIX__, and __DECIMAL_DIG__ intoChris Lattner2008-10-051-14/+1
| | | | | | target indep code. llvm-svn: 57139
* it helps when I save the file before testing and committing.Chris Lattner2008-10-051-27/+1
| | | | llvm-svn: 57138
* suck the rest of the FP macros out of the targets into the PPChris Lattner2008-10-051-99/+9
| | | | llvm-svn: 57137
* start moving fp macros overChris Lattner2008-10-051-20/+0
| | | | llvm-svn: 57134
* move a bunch more integer sizing out of target-specific code intoChris Lattner2008-10-051-41/+1
| | | | | | | | | | target indep code. Note that this changes functionality on PIC16: it defines __INT_MAX__ correctly for it, and it changes sizeof(long) to 16-bits (to match the size of pointer). llvm-svn: 57132
* eliminate __USER_LABEL_PREFIX__ from the Targets.cpp file, start movingChris Lattner2008-10-051-16/+2
| | | | | | integer size #defines over to the Preprocessor. llvm-svn: 57130
* Implement PR2773, support for __USER_LABEL_PREFIX__Chris Lattner2008-10-051-0/+1
| | | | llvm-svn: 57127
* Handle minor version numbers in __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__Chris Lattner2008-09-301-7/+19
| | | | | | like "10.3.9" llvm-svn: 56873
* Add missing include for use of atoi.Nick Lewycky2008-09-301-0/+1
| | | | llvm-svn: 56836
* The definition of __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ followsChris Lattner2008-09-301-7/+21
| | | | | | | the target triple on darwin. For example i386-apple-darwin9 -> 1050 because darwin9 is "10.5". llvm-svn: 56826
* define __PASCAL_STRINGS__ whenever -fpascal-strings is enabled.Chris Lattner2008-09-301-4/+1
| | | | llvm-svn: 56824
* __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ is a darwin-specific #defineChris Lattner2008-09-301-1/+2
| | | | llvm-svn: 56822
* Make some methods const, add some helpers to FullSourceLoc,Chris Lattner2008-09-291-5/+39
| | | | | | and add a dump method to FullSourceLoc! Patch by Nico Weber! llvm-svn: 56806
* whitespace and comment changes, to fix grammar and 80 col violationsNico Weber2008-09-291-4/+4
| | | | llvm-svn: 56776
OpenPOWER on IntegriCloud