]> granicus.if.org Git - clang/commit
Add a new expression node, CXXOperatorCallExpr, which expresses a
authorDouglas Gregor <dgregor@apple.com>
Fri, 14 Nov 2008 16:09:21 +0000 (16:09 +0000)
committerDouglas Gregor <dgregor@apple.com>
Fri, 14 Nov 2008 16:09:21 +0000 (16:09 +0000)
commitb4609806e9232593ece09ce08b630836e825865c
tree7b70b5d015a0fd6fbf2907a5a0a12596f2760823
parent0aab796da21bfc45381d3ce76c795710cb97acfc
Add a new expression node, CXXOperatorCallExpr, which expresses a
function call created in response to the use of operator syntax that
resolves to an overloaded operator in C++, e.g., "str1 +
str2" that resolves to std::operator+(str1, str2)". We now build a
CXXOperatorCallExpr in C++ when we pick an overloaded operator. (But
only for binary operators, where we actually implement overloading)

I decided *not* to refactor the current CallExpr to make it abstract
(with FunctionCallExpr and CXXOperatorCallExpr as derived
classes). Doing so would allow us to make CXXOperatorCallExpr a little
bit smaller, at the cost of making the argument and callee accessors
virtual. We won't know if this is going to be a win until we can parse
lots of C++ code to determine how much memory we'll save by making
this change vs. the performance penalty due to the extra virtual
calls.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59306 91177308-0d34-0410-b5e6-96231b3b80d8
13 files changed:
include/clang/AST/Expr.h
include/clang/AST/ExprCXX.h
include/clang/AST/StmtNodes.def
include/clang/Basic/OperatorKinds.def
lib/AST/Expr.cpp
lib/AST/ExprCXX.cpp
lib/AST/StmtPrinter.cpp
lib/AST/StmtSerialization.cpp
lib/Analysis/GRExprEngine.cpp
lib/Basic/IdentifierTable.cpp
lib/CodeGen/CGExpr.cpp
lib/Sema/SemaDecl.cpp
lib/Sema/SemaExpr.cpp