summaryrefslogtreecommitdiffstats
path: root/clang/Sema/SemaExpr.cpp
Commit message (Collapse)AuthorAgeFilesLines
...
* Bug #:Steve Naroff2007-05-171-17/+19
| | | | | | | | | | | | | | | Submitted by: Reviewed by: - Added a getSourceRange() method to all subclasses of Expr. - Changed all the constructors and instantiators. - Only added SourceLocations's when necessary. For example, binary expression *don't* carry the operator location...it isn't necessary to implement getSourceRange(). On the other hand, unary expressions *do* carry the operator location. - Added trivial SourceRange value class to SourceLocation. Note: need to talk to Chris about the FIXME for StringLiteral... llvm-svn: 39452
* Bug #:Steve Naroff2007-05-161-11/+75
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Submitted by: Reviewed by: - Implement type checking for Sema::CheckConditionalOperands. - Fixed crasher in Sema::UsualUnaryConversion (incorrect use of cast<>). - Added a few diagnostics and started passing 2 args! (Thanks Chris!). Here's some diagnostic output that is much nicer than gcc... [dylan:~/llvm/tools/clang] admin% ../../Debug/bin/clang cond.c cond.c:12:14: error: used type 'struct foo' where arithmetic or pointer type is required result = s ? 1 : 2; ^ cond.c:13:14: error: incompatible operand types ('struct foo' and 'struct bar') result = a ? s : s2; ^ cond.c:14:14: warning: pointer type mismatch ('struct foo *' and 'struct bar *') result = a ? ps : ps2; ^ cond.c:14:10: warning: assignment makes integer from pointer without a cast result = a ? ps : ps2; ^ cond.c:15:14: error: incompatible operand types ('struct foo *' and 'struct foo') result = a ? ps : s; ^ cond.c:16:14: warning: pointer type mismatch ('void (*)(int)' and 'void (*)(int, int)') result = a ? func : func2; ^ cond.c:16:10: warning: assignment makes integer from pointer without a cast result = a ? func : func2; ^ 7 diagnostics generated. [dylan:~/llvm/tools/clang] admin% cc -c cond.c cond.c: In function 'main': cond.c:12: error: used struct type value where scalar is required cond.c:13: error: type mismatch in conditional expression cond.c:14: warning: pointer type mismatch in conditional expression cond.c:14: warning: assignment makes integer from pointer without a cast cond.c:15: error: type mismatch in conditional expression cond.c:16: warning: pointer type mismatch in conditional expression cond.c:16: warning: assignment makes integer from pointer without a cast llvm-svn: 39451
* Remove the Sema::Diag helper that takes a type. Convert clients to useChris Lattner2007-05-161-7/+13
| | | | | | the version that takes a string. llvm-svn: 39450
* Rename type::getAsString to getAsStringInternal. Add a newChris Lattner2007-05-161-3/+2
| | | | | | | QualType::getAsString() that returns a string, which is much easier for clients to use. Convert clients to use it. llvm-svn: 39449
* Bug #:Steve Naroff2007-05-151-8/+19
| | | | | | | | | | | | Submitted by: Reviewed by: - Unified isConstantExpr/isIntegerConstantExpr by creating a private function named isConstantExpr (that takes a bool to indicate the flavor). isConstantExpr and isIntegerConstantExpr are now inline wrapper/helper functions. - Fixed bug in expression based sizeof (it needed to make sure the type is constant). - Added Sema::CheckConditionalOperands() stub. Will add contraints in my next commit. llvm-svn: 39446
* Bug #:Steve Naroff2007-05-151-22/+38
| | | | | | | | | | | | | Submitted by: Reviewed by: - Completed Expr::isConstantExpr() and Expr::isIntegerConstantExpr(). - Completed Sema::ParseUnaryOp(), it lacked support for sizeof/alignof. - Added Sema::CheckSizeOfAlignOfOperand(), used by ParseUnaryOp/ParseSizeOfAlignOfTypeExpr. - Fixed a couple bugs in CheckRelationalOperands/CheckEqualityOperands (make sure extensions aren't treated as errors). - Changed a bunch of predicates (in BinaryOperator/UnaryOperator) to member functions (the static members weren't being used). - Added UnaryOperator::isIncrementDecrementOp/isSizeOfAlignOfOp. llvm-svn: 39445
* Bug #:Steve Naroff2007-05-141-3/+3
| | | | | | | | Submitted by: Reviewed by: Some minor cleanup (comments, spec refs, simplied some expressions). llvm-svn: 39444
* Bug #:Steve Naroff2007-05-141-9/+1
| | | | | | | | | | | | | | | | | Submitted by: Reviewed by: Fixed a bug in Sema::CheckAddressOfOperand(). It was (incorrectly) using isModifiableLvalue() instead of isLvalue(). This motivated me to (finally) cleanup methods surrounding lsLvalue/isModifiableLvalue. Cleanup involved: - adding Expr::isLvalue(). - modified Expr::isModifiableLvalue() to use Expr::isLvalue(). - removed Type::isLvalue(), Type::isModifiableLvalue(), and QualType::isModifiableLvalue(). They were confusing...the respective logic is now a part of the Expr member functions... - also added some comments and spec references, since these methods are so central to expressions working properly. llvm-svn: 39443
* Bug #:Steve Naroff2007-05-131-7/+5
| | | | | | | | | | | Submitted by: Reviewed by: Two bug fixes to CheckIncrementDecrementOperand: - removed "constantOne" usage and simply use Context.IntTy. - fix the last constraint check...the lvalue test needs to be on the expression, not the type! (duh). llvm-svn: 39442
* Bug #:Steve Naroff2007-05-111-43/+48
| | | | | | | | | | | | | | Submitted by: Reviewed by: This check-in should finally "nail" complex pointer assignments (involving qualifiers, etc.). - Replaced pointerTypeQualifiersAlign() with CheckPointerTypesForAssignment() This also simplified UsualAssignmentConversions(). - Fixed Type::pointerTypesAreCompatible() and Type::typesAreCompatible() to closely reflect the spec. They were (unfortunately) compensating for some of the missing logic in the assignment checking code. llvm-svn: 39440
* Bug #:Steve Naroff2007-05-111-28/+65
| | | | | | | | | | | | | | | | Submitted by: Reviewed by: - Enhanced UsualAssignmentConversions() to properly handle type qualifiers on pointers. - Added helper function Sema::pointerTypeQualifiersAlign(). - Noticed several errors improperly named "ext_" (fixed). - Combined structureTypesAreCompatible/unionTypesAreCompatible into tagTypesAreCompatible. - Renamed Type::getCanonicalType() to Type::getCanonicalTypeInternal(). It will never confuse/bite me again:-) - Added a couple extension diagnostics for discarded type qualifiers. llvm-svn: 39439
* Bug #:Steve Naroff2007-05-081-9/+13
| | | | | | | | | | | | Submitted by: Reviewed by: Fix a couple bugs in ParseCallExpr(). - check isVariadic(). - make sure an AST isn't created if the number of args don't match but the types do! - rename "n" to something more descriptive:-) llvm-svn: 39438
* Bug #:Steve Naroff2007-05-071-150/+114
| | | | | | | | | | | | | | | | Submitted by: Reviewed by: - Unified CheckSimpleAssignmentOperands/CheckCompoundAssignmentOperands into one function, named CheckAssignmentOperands. One less function to maintain. - Converted the unary check functions (ParseUnaryOp and friends) to have the same API as their binary counterparts. - Implemented CheckIndirectionOperand (was stubbed). While testing, noticed that Expr::isModifiableLvalue was incomplete (fixed and referenced draft). - Added constantOne instance variable to Sema. - Removed CheckArithmeticOperand (the code was so simple that it is now part of ParseUnaryOp). The name wasn't great anyway:-) llvm-svn: 39435
* Bug #:Steve Naroff2007-05-041-173/+308
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Submitted by: Reviewed by: Implemented type checking for compound assignments (*=, /=, etc.). This encouraged me to do a fairly dramatic refactoring of the Check* functions. (since I wanted to reuse the existing work, rather than duplicate the logic). For example, I changed all the Check* functions to return a QualType (instead of returning an Expr). This had a very nice side benefit...there is now only one instantiation point for BinaryOperator()! (A property I've always wanted...separating type checking from AST building is *much* nicer). Another change is to remove "code" from all the Check* functions (this allowed me to remove the weird comment about enums/unsigned:-). Removing the code forced me to add a few functions, however. For example, < ExprResult CheckAdditiveOperands( // C99 6.5.6 < Expr *lex, Expr *rex, SourceLocation OpLoc, unsigned OpCode); > inline QualType CheckAdditionOperands( // C99 6.5.6 > Expr *lex, Expr *rex, SourceLocation OpLoc); > inline QualType CheckSubtractionOperands( // C99 6.5.6 > Expr *lex, Expr *rex, SourceLocation OpLoc); While this isn't as terse, it more closely reflects the differences in the typechecking logic. For example, I disliked having to check the code again in CheckMultiplicativeOperands/CheckAdditiveOperands. Created the following helper functions: - Expr::isNullPointerConstant(). - SemaExpr.cpp: static inline BinaryOperator::Opcode ConvertTokenKindToBinaryOpcode(). This was purely asethetic, since ParseBinOp() is now larger. I didn't feel like looking at 2 huge switch statements. ParseBinOp() now avoids using any of the BinaryOperator predicates (since I switched to a switch statement:-) Only one regret (minor). I couldn't figure out how to avoid having two assign functions, CheckCompoundAssignmentOperands, CheckSimpleAssignmentOperands. Conceptually, the two functions make sense. Unfortunately, their implementation contains a lot of duplication (thought they aren't that be in the first place). llvm-svn: 39433
* Bug #:Steve Naroff2007-05-031-42/+109
| | | | | | | | | | | | | | | Submitted by: Reviewed by: Work on finishing up typechecking for simple assignments (=) and function calls. Here is an overview: - implemented type checking for function calls (in Sema::ParseCallExpr). - refactored UsualAssignmentConversions to return the result of the conversion. This enum will allow all clients to emit different diagnostics based on context. - fixed bug in Expr::isLvalue()...it wasn't handling arrays properly. Also changed the name to isModifiableLvalue, which is consistent with the function on QualType. - Added 6 diagnostics (3 errors, 3 extensions). llvm-svn: 39432
* Bug #:Steve Naroff2007-05-021-14/+20
| | | | | | | | | | | Submitted by: Reviewed by: More refinements to UsualAssignmentConversions(). Added a call to do the UsualUnaryConversion for arrays/functions. I believe this is correct (but subtle). This enabled me to remove code for dealing with arrays/functions explictly (which more closely reflects the spec). llvm-svn: 39431
* Bug #:Steve Naroff2007-05-021-47/+58
| | | | | | | | | | | | Submitted by: Reviewed by: Refactored assignment conversion code. - added Sema::UsualAssignmentConversions(). It will service simple assignment, argument passing, initialization, and return. - simplified Sema::CheckAssignmentOperands() using the previous function. llvm-svn: 39429
* Bug #:Steve Naroff2007-05-021-2/+6
| | | | | | | | | | Submitted by: Reviewed by: - implement Type::functionTypesAreCompatible(). - fix bug in Sema::CheckAssignmentOperands(). Spec allows any pointer type to be assigned to _Bool. llvm-svn: 39428
* Bug #:Steve Naroff2007-05-021-2/+68
| | | | | | | | | | | | | | Submitted by: Reviewed by: Implement CheckAssignmentOperands(). This includes... - Adding 6 static member predicates to Type. - Adding 2 error diagnostics and 3 GCC extensions. - Adding a "getValue" accessor to IntegerLiteral. Still more work to do (including implement compound assignments). llvm-svn: 39427
* Bug #:Steve Naroff2007-04-271-0/+3
| | | | | | | | | | | | | | | Submitted by: Reviewed by: - Disabled -pedantic for now (until it ignores system headers). - Removed convertSignedWithGreaterRankThanUnsigned() and convertFloatingRankToComplexType(). The logic is now inlined in maxIntegerType and maxComplexType(). - Removed getIntegerRank/getFloatingRank from the private interface. These are now really private helpers:-) - Declare maxIntegerType/maxFloatingType static. maxComplexType const. - Added an enum for the floating ranks. - Several fixed to getIntegerRank: add Bool, Char, and a clause for enums. llvm-svn: 39421
* Bug #:Steve Naroff2007-04-271-141/+62
| | | | | | | | | | | | | | | | Submitted by: Reviewed by: More typechecking, refactoring... - Implemented the following routines...CheckAdditiveOperands, CheckCommaOperands, CheckLogicalOperands. - Added maxComplexType, maxFloatingType, & maxIntegerType to ASTContext. Ranking helper functions moved to ASTContext as well (they are private:-) - Simplified UsualArithmeticConversions using the new ASTContext hooks. - Fixed isAssignmentOp()...is was preventing comma exprs from ever being created:-( - Changed a GCC compat extension to truly be an extension (and turned extensions on by default). This now produces a warning by default. llvm-svn: 39418
* Bug #:Steve Naroff2007-04-261-8/+65
| | | | | | | | | | | | | | Submitted by: Reviewed by: Misc. changes driven by getting "carbon.h" to compile... - Added ParseCharacterConstant() hook to Action, Sema, etc. - Added CheckAssignmentOperands() & CheckCommaOperands() to Sema. - Added CharacterLiteral AST node. - Fixed CallExpr instantiation - install the correct type. - Install a bunch of temp types and annotate with FIXME's. llvm-svn: 39416
* Bug #:Steve Naroff2007-04-251-6/+45
| | | | | | | | | | | | | Submitted by: Reviewed by: Implement FIXME's for signed/unsigned operands in UsualArithmeticConversions()... - Added GetIntegerRank() and used it in the appropriate places. - Added ConvertSignedWithGreaterRankThanUnsigned(), with a FIXME. Misc...converted a bunch of static_cast usage to dyn_cast (in Type.cpp) A and handled signed/unsigned combos. llvm-svn: 39415
* Bug #:Steve Naroff2007-04-251-19/+26
| | | | | | | | | | | | | | Submitted by: Reviewed by: A bunch of "small" changes... - Fixed a bug in ConvertFloatingRankToComplexType() that rendered it useless. ASTContext was being copied by default (as the result of declaring the argument incorrectly). Chris gave me the magic potion to disallow this in ASTContext. - Removed a tab:-) - Added some much needed comments to the float/complex promotion madness. - Improved some aesthetics (based on code review w/Chris). llvm-svn: 39414
* Bug #:Steve Naroff2007-04-251-88/+82
| | | | | | | | | | | | | | | Submitted by: Reviewed by: Refactored code that deals with float/complex conversions (the previous commit). - Removed 6 predicates that identify the built-in float/complex types. - Added two helper functions GetFloatingRank() & ConvertFloatingRankToComplexType(). At present, these are static functions in SemaExpr.cpp. Conceptually, they would be nice to move to Type, however there are layering problems with that (i.e. no ASTContext). Another possibility is to move them to ASTContext? - Simplified the logic in UsualArithmeticConversions() considerably. llvm-svn: 39413
* Bug #:Steve Naroff2007-04-241-7/+75
| | | | | | | | | | | | | Submitted by: Reviewed by: -Lot's of detail work in UsualArithmeticConversion(). Needed to expand the code for dealing with floating types. This code still has a couple of FIXME's and could be refactored a bit. -Added a bunch of Type predicates to simplify the float conversions. Used the opportunity to convert a bunch of predicates to dyn_cast (it's cleaner when just dealing with Builtin types). llvm-svn: 39412
* Bug #:Steve Naroff2007-04-241-95/+163
| | | | | | | | | | | | | | | | | Submitted by: Reviewed by: Lot's of changes related to type checking binary expressions. - Changed the name/proto of ImplicitConversion. It is now named UsualUnaryConversion - it takes a type and returns a type. This allowed me to remove the explicit node creation for array/function->pointer conversions. - Added function UsualArithmeticConversions(). - Changed all the "Check" functions for binary ops. They use the new "Usual" functions above. - new predicates on Type, isSignedIntegerType()/isUnsignedIntegerType(). - moved getDecl() out of the Sema class. It is now a static helper function in SemaExpr.cpp. It was also renamed getPrimaryDeclaration(). - Added CheckArithmeticOperand() for consistency with the other unary "Check" functions. Should finish up the binary expressions tomorrow...with a small number of "FIXME's" llvm-svn: 39411
* Bug #:Steve Naroff2007-04-201-14/+31
| | | | | | | | | | Submitted by: Reviewed by: Start hacking on binary ops... Important bug fix...was ignoring the return value from ImplicitConversion. This didn't bother the type checking logic, however the AST was malformed. llvm-svn: 39410
* Bug #:Steve Naroff2007-04-201-7/+49
| | | | | | | | | | Submitted by: Reviewed by: - Added Type::isPromotableIntegerType(). - The unary operators are now largely complete (Sema::ParseUnaryOp and friends). - Implemented ImplicitConversion hook (was a stub). llvm-svn: 39409
* Bug #:Steve Naroff2007-04-191-0/+65
| | | | | | | | | | | | | | Submitted by: Reviewed by: Continue working on type checking for unary operators. Added: - Two 3 private functions to Sema: CheckAddressOfOperand(), CheckIndirectionOperand(), and getDecl(). - Added Expr::isLvalue() - it was needed for CheckAddressOfOperand(). It will also be needed for ++/-- and the assignment operators. - Added a couple diagnostics for invalid lvalues (for & of). llvm-svn: 39408
* Bug #:Steve Naroff2007-04-051-16/+16
| | | | | | | | | | | | Submitted by: Reviewed by: -Changed the name of TypeRef to QualType. Many diffs. -Changed the QualType constructor to require Quals be passed. This makes the code a bit more verbose, however will make the code easier to work on. Given the complexity of types, this should help spot bogosities. -Changed the Expr constructor to require a QualType. Same motivation. llvm-svn: 39395
* Bug #:Steve Naroff2007-04-051-16/+19
| | | | | | | | | | | | | | | | | | | | | | Submitted by: Reviewed by: Fix "FIXME: does this lose qualifiers from the typedef??" in ASTContext::getTypedefType(). This change was fairly pervasive...nevertheless, here are the highlights: - Change the type of Type::CanonicalType to TypeRef (was "Type *"). - Change the implementation of TypeRef::getCanonicalType() to work for typedefs. - Make the implementation of Type::getCanonicalType private (only TypeRef should access). This will force clients to use TypeRef::getCanonicalType (the correct version of the function). Since TypeRef overloads "->", it was very easy to fall into this bug... - Changed many references of "Type *" to "TypeRef"...when the raw type pointer is required, use t.getTypePtr(). - Changed all the *Type classes to take a TypeRef. - Made the Type constructor protected (cleanup). - Removed function Expr::getType(). - Convert functions in SemaExpr to use the above support. This fixed the "const" bug I was originally investigating. I will follow this check-in up with a rename of TypeRef->QualType. I will also make sure the constructor does not default to 0 (which can lead to broken code...). llvm-svn: 39394
* Bug #:Steve Naroff2007-04-031-14/+17
| | | | | | | | | | | | | | | | | | | | | Submitted by: Reviewed by: - Typechecking for ++/-- not operating on canonical type (fixed). - Many changes to Decl.h... -- Changed ObjectDecl->ValueDecl. -- ValueDecl doesn't define a storage class. The storage class is now defined by VarDecl/FunctionDecl. EnumConstant decls don't need a storage class. -- FieldDecl now inherits directly from Decl (it is not a value). - Changed SemaExpr to use the new Decl.h. Also added a couple diagnostics for bogus storage class usage. For example: z.c:6:10: error: illegal storage class on function auto int func(); ^ z.c:7:14: error: illegal storage class on file-scoped variable register int b; ^ llvm-svn: 39379
* Bug #:Steve Naroff2007-04-021-2/+2
| | | | | | | | | | Submitted by: Reviewed by: Avoid including "clang/AST/Expr.h" in Sema.h just to access UnaryOperator::Opcode. While the inclusion wasn't objectionable in terms of layering, it is nice to keep the inclusions as modest as possible. llvm-svn: 39375
* Bug #:Steve Naroff2007-04-021-15/+17
| | | | | | | | | | | | | | | | Submitted by: Reviewed by: Incorporate code review feedback from Chris... - minor restructure of ParseMemberReferenceExpr logic. The last statement is now the instantiation of the AST node (which I like a lot and will conform to throughout Sema). - declare StmtClassNameTable const. - reword an error diagnostic. - install the correct type for ParseSizeOfAlignOfTypeExpr. Added hook in ASTContext. For now, simply return Context.UnsignedLongTy. Added a FIXME to revisit (i.e. compute using TargetInfo). llvm-svn: 39374
* Bug #:Steve Naroff2007-04-011-9/+13
| | | | | | | | | | | | Submitted by: Reviewed by: - ParseMemberReferenceExpr wasn't operating on the canonical type. From now on, I will make sure the prologue to each Parse/Check function has both the qualified type and the canonical type. - More refinements to ParseDeclarator. It was allowing variable declarations to incomplete types (e.g. void, struct foo, where foo wasn't defined). llvm-svn: 39371
* Bug #:Steve Naroff2007-03-301-38/+44
| | | | | | | | | | | | | | Submitted by: Reviewed by: Incorporate feedback from Chris (on the last check-in). - added a shared hook for pre/post ++/-- CheckIncrementDecrementOperand(). - handle invalid arithmetic on incomplete types (void *, struct foo *, where the body isn't in scope). Added a diagnostic for this case. - added some comments and C99 annotations. - Sema.h now includes Expr.h. I'd prefer not to, however it doesn't break any layering. llvm-svn: 39370
* Bug #:Steve Naroff2007-03-301-7/+31
| | | | | | | | | | | | | | | | | | Submitted by: Reviewed by: Implement ++/-- typechecking for pre/post unary expressions. This includes: - added isLvalue, isModifiableLvalue (on TypeRef, Type, and RecordType). - added isRealType, isRealFloatingType, isComplexType. - hacked Diag to take a TypeRef (I was sick of writing the 2 line "setup":-) In addition, this will likely lead to less bugs...I already had written code that was doing a getAsString on "Type" (which is wrong...since it doesn't include any qualifiers). - Changed UnaryOperator to take a TypeRef...pass it the right stuff. - Removed redundant ternary expressions in several predicates. - A couple diagnostics. llvm-svn: 39369
* Bug #:Steve Naroff2007-03-281-6/+20
| | | | | | | | | | | | Submitted by: Reviewed by: Finish up Sema::ParseArraySubscriptExpr. This involved: - adding a couple predicates to Type.h (isObjectType, isDerivedType). - added a diagnostic for subscripting non-object types (e.g. void (*)()). - pass the correct result type...a minor detail:-) - added some spec references to Type.h llvm-svn: 39368
* Bug #:Steve Naroff2007-03-261-14/+11
| | | | | | | | | | | | | Submitted by: Reviewed by: Finish up Sema::ParseMemberReferenceExpr. This involved: - added a getMember() function to RecordDecl. - added stronger typing for "Members" (from Decl->FieldDecl). - added a dignostic for members not found. - changed MemberExpr to install the correct TypeRef. - In general, simplified and cleaned up the routing. llvm-svn: 39364
* Bug #:Steve Naroff2007-03-231-16/+77
| | | | | | | | | | | | | | | | | | | | | | | | | | Submitted by: Reviewed by: Type Checking...round 2. This checkin "breaks" parsing carbon.h. I imagine that this will be true for the next week or so. Nevertheless, this round of changes includes the following: - Hacked various Expr classes to pass the appropriate TypeRef. Still have a few more classes to touch. - Implement type checking for ParseArraySubscriptExpr and ParseMemberReferenceExpr. - Added a debug hook to derive the class name for Stmt/Expr nodes. Currently a linear search...could easily optimize if important. - Changed the name of TaggedType->TagType. Now we have TagType and TagDecl (which are easier to remember). - Fixed a bug in StringLiteral conversion I did a couple weeks ago. hadError was not initialized (oops). - changed Sema::Diag to return true. This streamlines the type checking code considerably. - Added many diagnositics. This should be it! llvm-svn: 39361
* Bug #:Steve Naroff2007-03-211-2/+38
| | | | | | | | | | | | | Submitted by: Reviewed by: Implement type checking. First round of changes are: - Added predicates to Type. - Added predicates to BinExpr. - Added Check hooks that model the categories for Binary ops. - Added TypeRef to Expr. Will lazily eval subclasses... - Misc bug fixes/cleanups. llvm-svn: 39360
* Bug #:Steve Naroff2007-03-131-198/+6
| | | | | | | | | | | Submitted by: Reviewed by: Move string literal parsing from Sema=>LiteralSupport. This consolidates all the quirky parsing code within the Lexer subsystem (yeah!). This simplifies Sema and (more importantly) allows future parsers (i.e. subclasses of Action) to benefit from this code. llvm-svn: 39354
* Bug #:Steve Naroff2007-03-131-9/+12
| | | | | | | | | Submitted by: Reviewed by: Misc. cleanup/polish of NumericLiteralParser and it's two clients, the C preprocessor and AST builder... llvm-svn: 39353
* Bug #:Steve Naroff2007-03-121-7/+5
| | | | | | | | | | Submitted by: Reviewed by: -Converted the preprocessor to use NumericLiteralParser. -Several minor changes to LiteralSupport interface/implementation. -Added an error diagnostic for floating point usage in pp expr's. llvm-svn: 39352
* Bug #:Steve Naroff2007-03-091-198/+26
| | | | | | | | | | | | | Submitted by: Reviewed by: Moved numeric literal support from SemaExpr.cpp to LiteralSupport.[h,cpp] in Lex. This will allow it to be used by both Sema and Preprocessor (and should be the last major refactoring of this sub-system).. Over time, it will be reused by anyone implementing an actions module (i.e. any subclass of llvm::clang::Action. Minor changes to IntegerLiteral in Expr.h. More to come... llvm-svn: 39351
* Bug #:Steve Naroff2007-03-071-113/+102
| | | | | | | | | | | | Submitted by: Reviewed by: Refactored ParseNumericConstant using SkipDigits and friends. This cleaned up the code and removed many "breaks". In the process, I found several bugs that needed to be fixed (proof that this refactoring had real value, not simply aesthetics). Also simplified error handling logic and removed an unused error condition from Diagnostics.def. llvm-svn: 39350
* Bug #:Steve Naroff2007-03-061-5/+228
| | | | | | | | | | | | | | | Submitted by: Reviewed by: More code to parse numeric constants. This checkin includes: - Feedback from Chris. - Support for parsing floating point constants. - Moved the code to "Sema". Changed API in Action. - More/better error diagnostics. At this point, the parsing support should be largely complete. Next step is to work on filling in sensible values (in IntegerLiteral/FloatLiteral). llvm-svn: 39349
* Make Sema's use of the preprocessor explicit (rather than assumeSteve Naroff2007-02-281-2/+2
| | | | | | | | | | | | | | | | the prerocessor will be available via ASTContext). - Removed the public data member "PP" in ASTContext. - Changed ASTContext's contructor to take TargetInfo/IdentifierTable explicitly. - Implicitly create an ASTContext in Sema's constructor. This simplifies the clients job (and makes ASTContext more private). --As a side effect, added a "PrintStats" hook to Sema. To support this level of encapsulation, ASTContext is always dynamically allocated (by Sema). Previously, ASTContext was being allocated on the stack. I don't believe this should be a performance issue (since ASTContext is fairly course grain and tied to the lifetime of Sema currently). llvm-svn: 39345
* Batch search/replace snafu (inadvertantly changed ↵Steve Naroff2007-02-211-7/+7
| | | | | | | | | IntegerConstant->StringLiteral). clang still compiled/linked/ran properly...simply a confusing name regression. From now on I'll make sure I run "cvs diff" before committing any changes! llvm-svn: 39342
OpenPOWER on IntegriCloud