]> granicus.if.org Git - clang/commit
Refactor the way we handle operator overloading and template
authorDouglas Gregor <dgregor@apple.com>
Fri, 13 Mar 2009 18:40:31 +0000 (18:40 +0000)
committerDouglas Gregor <dgregor@apple.com>
Fri, 13 Mar 2009 18:40:31 +0000 (18:40 +0000)
commit063daf6e196c51f162e0485478355d8e280eef5c
tree96bfffedbfbbf33d16167cde703b691cf2e2a7dd
parent13135a6171e5eb1dd0b10f49305bb757b8f8b20c
Refactor the way we handle operator overloading and template
instantiation for binary operators. This change moves most of the
operator-overloading code from the parser action ActOnBinOp to a new,
parser-independent semantic checking routine CreateOverloadedBinOp.

Of particular importance is the fact that CreateOverloadedBinOp does
*not* perform any name lookup based on the current parsing context (it
doesn't take a Scope*), since it has to be usable during template
instantiation, when there is no scope information. Rather, it takes a
pre-computed set of functions that are visible from the context or via
argument-dependent lookup, and adds to that set any member operators
and built-in operator candidates. The set of functions is computed in
the parser action ActOnBinOp based on the current context (both
operator name lookup and argument-dependent lookup). Within a
template, the set computed by ActOnBinOp is saved within the
type-dependent AST node and is augmented with the results of
argument-dependent name lookup at instantiation time (see
TemplateExprInstantiator::VisitCXXOperatorCallExpr).

Sadly, we can't fully test this yet. I'll follow up with template
instantiation for sizeof so that the real fun can begin.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@66923 91177308-0d34-0410-b5e6-96231b3b80d8
include/clang/AST/Expr.h
include/clang/AST/ExprCXX.h
include/clang/AST/Type.h
lib/AST/Expr.cpp
lib/AST/ExprCXX.cpp
lib/Sema/Sema.h
lib/Sema/SemaDeclCXX.cpp
lib/Sema/SemaExpr.cpp
lib/Sema/SemaExprCXX.cpp
lib/Sema/SemaOverload.cpp
lib/Sema/SemaTemplateInstantiate.cpp