summaryrefslogtreecommitdiffstats
path: root/clang/lib/Parse/ParseExpr.cpp
Commit message (Collapse)AuthorAgeFilesLines
* 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
* Put (argument)-expression-list parsing in a separate function so that it can ↵Argyrios Kyrtzidis2008-08-161-14/+30
| | | | | | be re-used. llvm-svn: 54851
* C++ casts, (static_cast. dynamic_cast, etc.) can have postfix-expression pieces.Argyrios Kyrtzidis2008-08-161-1/+3
| | | | llvm-svn: 54850
* Move handling of postfix-expression suffixes out of ParseCXXThis and into ↵Argyrios Kyrtzidis2008-08-161-1/+3
| | | | | | | | ParseCastExpression. No functionality change, this follows the convention of how postfix-expressions are handled. llvm-svn: 54849
* rename PreDefinedExpr -> PredefinedExprChris Lattner2008-08-101-1/+1
| | | | llvm-svn: 54605
* Add 'this' in the comments of Parser::ParseCastExpression to indicate that ↵Argyrios Kyrtzidis2008-07-161-0/+1
| | | | | | it is handled. llvm-svn: 53665
* Simplify the parser a bit by looking at the next token without consuming it ↵Argyrios Kyrtzidis2008-07-091-63/+0
| | | | | | | | | (by Preprocessor::LookNext): -Remove ParseExpressionWithLeadingIdentifier and ParseAssignmentExprWithLeadingIdentifier. -Separate ParseLabeledStatement from ParseIdentifierStatement. llvm-svn: 53376
* Add parsing support for C++ classes.Argyrios Kyrtzidis2008-06-241-0/+2
| | | | | | | Note that Parser::ParseCXXMemberSpecification is temporarily disabled until the Sema support is in place. Once ParseCXXMemberSpecification is enabled, the Parser/cxx-class.cpp test will pass. llvm-svn: 52694
* handle the full assignment-expression grammar when using an Chris Lattner2008-06-021-0/+21
| | | | | | objc message send in an initializer expression. llvm-svn: 51882
* Don't call into objc front-end when not parsing objc code. This avoidsChris Lattner2008-05-091-1/+3
| | | | | | crashes because objc types aren't set up right. llvm-svn: 50884
* Use token lookahead to simplify some code that is rarely executed.Chris Lattner2008-04-061-36/+0
| | | | | | | Since it is rare, the cost is not significant and we enjoy the simplification. llvm-svn: 49263
OpenPOWER on IntegriCloud