| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
| |
base and data members when they are needed.
llvm-svn: 80967
|
|
|
|
|
|
|
|
|
| |
involve qualified names, e.g., x->Base::f. We now maintain enough
information in the AST to compare the results of the name lookup of
"Base" in the scope of the postfix-expression (determined at template
definition time) and in the type of the object expression.
llvm-svn: 80953
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
x->Base::f
We no longer try to "enter" the context of the type that "x" points
to. Instead, we drag that object type through the parser and pass it
into the Sema routines that need to know how to perform lookup within
member access expressions.
We now implement most of the crazy name lookup rules in C++
[basic.lookup.classref] for non-templated code, including performing
lookup both in the context of the type referred to by the member
access and in the scope of the member access itself and then detecting
ambiguities when the two lookups collide (p1 and p4; p3 and p7 are
still TODO). This change also corrects our handling of name lookup
within template arguments of template-ids inside the
nested-name-specifier (p6; we used to look into the scope of the
object expression for them) and fixes PR4703.
I have disabled some tests that involve member access expressions
where the object expression has dependent type, because we don't yet
have the ability to describe dependent nested-name-specifiers starting
with an identifier.
llvm-svn: 80843
|
|
|
|
| |
llvm-svn: 80719
|
|
|
|
|
|
|
|
|
| |
explicitly-specified template argument lists in member reference
expressions, e.g.,
x->f<int>()
llvm-svn: 80646
|
|
|
|
|
|
|
|
| |
template argument lists, e.g., x.f<int>().
Semantic analysis will be a separate commit.
llvm-svn: 80624
|
|
|
|
| |
llvm-svn: 80608
|
|
|
|
|
|
| |
using class's conversion functions [12.3.2-p2]
llvm-svn: 80433
|
|
|
|
| |
llvm-svn: 80398
|
|
|
|
| |
llvm-svn: 80368
|
|
|
|
|
|
| |
with class type conversion methods. WIP.
llvm-svn: 80365
|
|
|
|
| |
llvm-svn: 80261
|
|
|
|
| |
llvm-svn: 80260
|
|
|
|
|
|
| |
the process.
llvm-svn: 80258
|
|
|
|
| |
llvm-svn: 80256
|
|
|
|
| |
llvm-svn: 80255
|
|
|
|
|
|
| |
methods over to using it instead of bools arguments.
llvm-svn: 80248
|
|
|
|
|
|
| |
instantiated correctly for temporary object expressions.
llvm-svn: 80206
|
|
|
|
|
|
| |
non-abstract before creating any expressions. This assures that any templates are instantiated if necessary.
llvm-svn: 80200
|
|
|
|
| |
llvm-svn: 80182
|
|
|
|
| |
llvm-svn: 80174
|
|
|
|
| |
llvm-svn: 80135
|
|
|
|
| |
llvm-svn: 80129
|
|
|
|
|
|
| |
type convesions of class objects [class.conv]. WIP.
llvm-svn: 80127
|
|
|
|
| |
llvm-svn: 80114
|
|
|
|
| |
llvm-svn: 80055
|
|
|
|
| |
llvm-svn: 79975
|
|
|
|
|
|
|
|
|
|
| |
pointers, by extending the "composite pointer type" logic to include
member pointer types.
Introduce test cases for member pointer comparisons, including those
that involve the builtin operator candidates implemented earlier.
llvm-svn: 79925
|
|
|
|
|
|
| |
Make -ast-dump print out the cast kinds of cast expressions.
llvm-svn: 79787
|
|
|
|
|
|
| |
DeclaratorInfo to get this information.
llvm-svn: 79584
|
|
|
|
| |
llvm-svn: 79395
|
|
|
|
|
|
|
|
|
|
|
|
| |
interfaces.
DeclaratorDecl contains a DeclaratorInfo* to keep type source info.
Subclasses of DeclaratorDecl are FieldDecl, FunctionDecl, and VarDecl.
EnumConstantDecl still inherits from ValueDecl since it has no need for DeclaratorInfo.
Decl/Sema interfaces accept a DeclaratorInfo as parameter but no DeclaratorInfo is created yet.
llvm-svn: 79392
|
|
|
|
| |
llvm-svn: 79200
|
|
|
|
|
|
| |
create the CXXExprWithTemporaries before setting the initializer on the VarDecl.
llvm-svn: 79176
|
|
|
|
| |
llvm-svn: 79149
|
|
|
|
|
|
| |
GetTypeForDeclarator.
llvm-svn: 78644
|
|
|
|
| |
llvm-svn: 78502
|
|
|
|
| |
llvm-svn: 78415
|
|
|
|
| |
llvm-svn: 78331
|
|
|
|
|
|
| |
expressions and a test case.
llvm-svn: 78213
|
|
|
|
|
|
| |
tighten up the static type system.
llvm-svn: 78164
|
|
|
|
| |
llvm-svn: 78102
|
|
|
|
| |
llvm-svn: 77985
|
|
|
|
| |
llvm-svn: 77652
|
|
|
|
|
|
| |
will be :)
llvm-svn: 77650
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Type::getAsReferenceType() -> Type::getAs<ReferenceType>()
Type::getAsRecordType() -> Type::getAs<RecordType>()
Type::getAsPointerType() -> Type::getAs<PointerType>()
Type::getAsBlockPointerType() -> Type::getAs<BlockPointerType>()
Type::getAsLValueReferenceType() -> Type::getAs<LValueReferenceType>()
Type::getAsRValueReferenceType() -> Type::getAs<RValueReferenceType>()
Type::getAsMemberPointerType() -> Type::getAs<MemberPointerType>()
Type::getAsReferenceType() -> Type::getAs<ReferenceType>()
Type::getAsTagType() -> Type::getAs<TagType>()
And remove Type::getAsReferenceType(), etc.
This change is similar to one I made a couple weeks ago, but that was partly
reverted pending some additional design discussion. With Doug's pending smart
pointer changes for Types, it seemed natural to take this approach.
llvm-svn: 77510
|
|
|
|
| |
llvm-svn: 77451
|
|
|
|
|
|
|
|
|
| |
until Doug Gregor's Type smart pointer code lands (or more discussion occurs).
These methods just call the new Type::getAs<XXX> methods, so we still have
reduced implementation redundancy. Having explicit getAsXXXType() methods makes
it easier to set breakpoints in the debugger.
llvm-svn: 76193
|
|
|
|
|
|
| |
Type::getAsMemberPointerType(), Type::getAsTagType(), and Type::getAsRecordType() with their Type::getAs<XXX> equivalents.
llvm-svn: 76139
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This method is intended to eventually replace the individual
Type::getAsXXXType<> methods.
The motivation behind this change is twofold:
1) Reduce redundant implementations of Type::getAsXXXType() methods. Most of
them are basically copy-and-paste.
2) By centralizing the implementation of the getAs<Type> logic we can more
smoothly move over to Doug Gregor's proposed canonical type smart pointer
scheme.
Along with this patch:
a) Removed 'Type::getAsPointerType()'; now clients use getAs<PointerType>.
b) Removed 'Type::getAsBlockPointerTypE()'; now clients use getAs<BlockPointerType>.
llvm-svn: 76098
|