summaryrefslogtreecommitdiffstats
path: root/clang/lib/Parse/ParseExpr.cpp
Commit message (Collapse)AuthorAgeFilesLines
...
* rename tok::annot_qualtypename -> tok::annot_typename, which is bothChris Lattner2009-01-061-2/+2
| | | | | | shorter and more accurate. The type name might not be qualified. llvm-svn: 61788
* PODness and Type TraitsSebastian Redl2009-01-051-0/+29
| | | | | | | | | | | | | | | Make C++ classes track the POD property (C++ [class]p4) Track the existence of a copy assignment operator. Implicitly declare the copy assignment operator if none is provided. Implement most of the parsing job for the G++ type traits extension. Fully implement the low-hanging fruit of the type traits: __is_pod: Whether a type is a POD. __is_class: Whether a type is a (non-union) class. __is_union: Whether a type is a union. __is_enum: Whether a type is an enum. __is_polymorphic: Whether a type is polymorphic (C++ [class.virtual]p1). llvm-svn: 61746
* remove optimization to avoid looking ahead for cases like ::foo. ThisChris Lattner2009-01-051-14/+10
| | | | | | isn't worth the complexity and the code already does a ton of lookahead. llvm-svn: 61671
* TryAnnotateTypeOrScopeToken and TryAnnotateCXXScopeToken can Chris Lattner2009-01-051-1/+2
| | | | | | | only be called when they might be needed now, so make them assert that their current token is :: or identifier. llvm-svn: 61662
* code simplificationChris Lattner2009-01-041-5/+2
| | | | llvm-svn: 61654
* my previous patch caused sema to drop the global qualifier, makeChris Lattner2009-01-041-17/+18
| | | | | | | sure to pass it down. This makes the code a bit gross, I will clean it up in subsequent commits. llvm-svn: 61650
* sink the call to TryAnnotateTypeOrScopeToken in Chris Lattner2009-01-041-15/+24
| | | | | | | | ParseCastExpression into the switch. This gets it out of the hot path through ParseCastExpression for all the non-identifier and non-:: tokens. llvm-svn: 61643
* simplify control flow by removing a goto.Chris Lattner2009-01-041-7/+8
| | | | llvm-svn: 61641
* eliminate lookahead when parsing ::new / ::delete.Chris Lattner2009-01-041-9/+13
| | | | llvm-svn: 61638
* Don't explicitly represent OverloadedFunctionDecls withinDouglas Gregor2008-12-231-4/+5
| | | | | | | | | | | | | | | | | | | | | | | | DeclContext. Instead, just keep the list of currently-active declarations and only build the OverloadedFunctionDecl when we absolutely need it. This is a half-step toward eliminating the need to explicitly build OverloadedFunctionDecls that store sets of overloaded functions. This was suggested by Argiris a while back, and it's a good thing for several reasons: first, it eliminates the messy logic that currently tries to keep the OverloadedFunctionDecl in sync with the declarations that are being added. Second, it will (eventually) eliminate the need to allocate memory for overload sets, which could help performance. Finally, it helps set us up for when name lookup can return multiple (possibly ambiguous) results, as can happen with lookup of class members in C++. Next steps: make the IdentifierResolver store overloads as separate entries in its list rather than replacing them with an OverloadedFunctionDecl now, then see how far we can go toward eliminating OverloadedFunctionDecl entirely. llvm-svn: 61357
* Convert remaining expression parsers to smart pointers. Now on to the Action ↵Sebastian Redl2008-12-131-19/+19
| | | | | | connection. llvm-svn: 60982
* fix a buggy fall through that caused a crash-on-invalid. rdar://6248081Chris Lattner2008-12-121-5/+5
| | | | llvm-svn: 60961
* minor refactoring of ParseParenExpressionChris Lattner2008-12-121-13/+16
| | | | llvm-svn: 60928
* Convert a big bunch of expression parsers to use smart pointers.Sebastian Redl2008-12-111-11/+11
| | | | llvm-svn: 60906
* Convert some more expression parsers to use smart pointers.Sebastian Redl2008-12-111-78/+77
| | | | llvm-svn: 60904
* Convert selected expression parsers to use smart pointers.Sebastian Redl2008-12-111-84/+83
| | | | llvm-svn: 60900
* Convert a number of statement parsers to smart pointers.Sebastian Redl2008-12-111-2/+2
| | | | llvm-svn: 60888
* Use a scoped object to manage entry/exit from a parser scope rather than ↵Douglas Gregor2008-12-101-4/+2
| | | | | | explicitly calling EnterScope/ExitScope llvm-svn: 60830
* Modify the move emulation according to the excellent design of Howard ↵Sebastian Redl2008-12-101-72/+74
| | | | | | Hinnant. Makes for much nicer syntax when smart pointers are used consistently. Also, start converting internal argument passing of Parser to smart pointers. llvm-svn: 60809
* Kick out the proof-of-concept ASTOwner and replace it with ASTOwningResultSebastian Redl2008-12-091-28/+28
| | | | llvm-svn: 60791
* Consistently use smart pointers for stmt and expr nodes in parser local ↵Sebastian Redl2008-12-091-162/+142
| | | | | | variables. llvm-svn: 60761
* Add support for calls to dependent names within templates, e.g.,Douglas Gregor2008-12-061-1/+2
| | | | | | | | | | | | | | | | | | template<typename T> void f(T x) { g(x); // g is a dependent name, so don't even bother to look it up g(); // error: g is not a dependent name } Note that when we see "g(", we build a CXXDependentNameExpr. However, if none of the call arguments are type-dependent, we will force the resolution of the name "g" and replace the CXXDependentNameExpr with its result. GCC actually produces a nice error message when you make this mistake, and even offers to compile your code with -fpermissive. I'll do the former next, but I don't plan to do the latter. llvm-svn: 60618
* Add better comments to ::new parsing. Thanks to Doug for the review.Sebastian Redl2008-12-021-0/+2
| | | | llvm-svn: 60423
* Make the parser handle ::new and ::delete correctly.Sebastian Redl2008-12-021-1/+6
| | | | llvm-svn: 60421
* Implement the GNU __null extensionDouglas Gregor2008-11-291-0/+4
| | | | llvm-svn: 60235
* Add some comments.Argyrios Kyrtzidis2008-11-261-1/+5
| | | | llvm-svn: 60119
* Use RAII objects to ensure proper destruction of expression and statement ↵Sebastian Redl2008-11-251-31/+49
| | | | | | AST nodes in the parser in most cases, even on error. llvm-svn: 60057
* make the 'to match this' diagnostic a note.Chris Lattner2008-11-231-1/+1
| | | | llvm-svn: 59921
* Convert IdentifierInfo's to be printed the same as DeclarationNames Chris Lattner2008-11-231-1/+1
| | | | | | | | | | | | | | | | | | | | | 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
* Implementation of new and delete parsing and sema.Sebastian Redl2008-11-211-0/+19
| | | | | | This version uses VLAs to represent arrays. I'll try an alternative way next, but I want this safe first. llvm-svn: 59835
* Support overloading of the subscript operator[], including support forDouglas Gregor2008-11-191-1/+2
| | | | | | | | | built-in operator candidates. Test overloading of '&' and ','. In C++, a comma expression is an lvalue if its right-hand subexpression is an lvalue. Update Expr::isLvalue accordingly. llvm-svn: 59643
* Fix <rdar://problem/6150376> [sema] crash on invalid message send.Steve Naroff2008-11-191-1/+2
| | | | | | The core fix in Sema::ActOnClassMessage(). All the other changes have to do with passing down the SourceLocation for the receiver (to properly position the cursor when producing an error diagnostic). llvm-svn: 59639
* Added operator overloading for unary operators, post-increment, andDouglas Gregor2008-11-191-5/+5
| | | | | | | | | | | | | post-decrement, including support for generating all of the built-in operator candidates for these operators. C++ and C have different rules for the arguments to the builtin unary '+' and '-'. Implemented both variants in Sema::ActOnUnaryOp. In C++, pre-increment and pre-decrement return lvalues. Update Expr::isLvalue accordingly. llvm-svn: 59638
* remove uses of IdentifierInfo::getName()Chris Lattner2008-11-191-1/+1
| | | | llvm-svn: 59603
* Change a couple of the Parser::Diag methods to return DiagnosticInfoChris Lattner2008-11-181-4/+4
| | | | | | | | | and let the clients push whatever they want into the DiagnosticInfo instead of hard coding a few forms. Also switch various clients to use Diag(Tok, ...) instead of Diag(Tok.getLocation(), ...) as the canonical form to simplify the code a bit. llvm-svn: 59509
* Introduce a single AST node SizeOfAlignOfExpr for all sizeof and alignof ↵Sebastian Redl2008-11-111-5/+8
| | | | | | expressions, both of values and types. llvm-svn: 59057
* Implement C++ 'typeid' parsing and sema.Sebastian Redl2008-11-111-1/+7
| | | | llvm-svn: 59042
* Implement support for C++ nested-name-specifiers ('foo::bar::x') in the ↵Argyrios Kyrtzidis2008-11-081-22/+17
| | | | | | | | Parser side. No Sema functionality change, just the signatures of the Action/Sema methods. llvm-svn: 58913
* Initial, rudimentary implementation of operator overloading for binaryDouglas Gregor2008-11-061-2/+2
| | | | | | | | | | | | | | | | | | operators. For example, one can now write "x + y" where x or y is a class or enumeration type, and Clang will perform overload resolution for "+" based on the overloaded operators it finds. The other kinds of overloadable operators in C++ will follow this same approach. Three major issues remain: 1) We don't find member operators 2) Since we don't have user-defined conversion operators, we can't call any of the built-in overloaded operators in C++ [over.built]. 3) Once we've done the semantic checks, we drop the overloaded operator on the floor; it doesn't get into the AST at all. llvm-svn: 58821
* Parsing, ASTs, and semantic analysis for the declaration of overloadedDouglas Gregor2008-11-061-1/+24
| | | | | | | | | 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
* Add the remaining C++0x keywordsDouglas Gregor2008-11-061-1/+6
| | | | llvm-svn: 58802
* -Add support for cv-qualifiers after function declarators.Argyrios Kyrtzidis2008-10-241-1/+1
| | | | | | -Add withConst/withVolatile/withRestrict methods to QualType class, that return the QualType plus the respective qualifier. llvm-svn: 58120
* implement a couple fixme's by implementing __extension__ properly.Chris Lattner2008-10-201-4/+2
| | | | llvm-svn: 57806
* Final phase of converting BlockDecls over to DeclContext. This is ↵Steve Naroff2008-10-101-1/+4
| | | | | | unfortunately a largish/complex diff, however it was necessry to pass all the current block tests. llvm-svn: 57337
* Handle ambiguities between expressions and type-ids that occur inside ↵Argyrios Kyrtzidis2008-10-051-1/+1
| | | | | | | | | parentheses, e.g.: sizeof(int()) -> "int()" is type-id sizeof(int()+1) -> "int()+1" is expression. llvm-svn: 57131
* Remove support for BlockExprExpr. For example...Steve Naroff2008-09-161-14/+2
| | | | | | | | ^(expression) or ^(int arg1, float arg2)(expression) ...is no longer supported. All block literals now require a compound statement. llvm-svn: 56257
* Add parser/action support for block literal expressions.Steve Naroff2008-08-281-0/+78
| | | | | | Parser support for blocks is almost complete...just need to add support for the __block() storage class qualifier. llvm-svn: 55495
* Add support for C++'s "type-specifier ( expression-list )" expression:Argyrios Kyrtzidis2008-08-221-2/+44
| | | | | | | | | | -The Parser calls a new "ActOnCXXTypeConstructExpr" action. -Sema, depending on the type and expressions number: -If the type is a class, it will treat it as a class constructor. [TODO] -If there's only one expression (i.e. "int(0.5)" ), creates a new "CXXFunctionalCastExpr" Expr node -If there are no expressions (i.e "int()" ), creates a new "CXXZeroInitValueExpr" Expr node. llvm-svn: 55177
* Fix a minor crash-on-invalid.Eli Friedman2008-08-201-1/+1
| | | | llvm-svn: 55082
* "Remove the 'else' since the code is fallthrough after it." - suggestion by ↵Argyrios Kyrtzidis2008-08-181-2/+2
| | | | | | Chris. llvm-svn: 54952
OpenPOWER on IntegriCloud