summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
Diffstat (limited to 'clang')
-rw-r--r--clang/Sema/SemaExpr.cpp4
-rw-r--r--clang/include/clang/AST/Expr.h28
2 files changed, 19 insertions, 13 deletions
diff --git a/clang/Sema/SemaExpr.cpp b/clang/Sema/SemaExpr.cpp
index 88a057930b3..af0e6d4e8e2 100644
--- a/clang/Sema/SemaExpr.cpp
+++ b/clang/Sema/SemaExpr.cpp
@@ -1561,9 +1561,9 @@ Action::ExprResult Sema::ParseBinOp(SourceLocation TokLoc, tok::TokenKind Kind,
if (ResultTy.isNull())
return true;
if (CompTy.isNull())
- return new BinaryOperator(lhs, rhs, Opc, ResultTy);
+ return new BinaryOperator(lhs, rhs, Opc, ResultTy, TokLoc);
else
- return new CompoundAssignOperator(lhs, rhs, Opc, ResultTy, CompTy);
+ return new CompoundAssignOperator(lhs, rhs, Opc, ResultTy, CompTy, TokLoc);
}
// Unary Operators. 'Tok' is the token for the operator.
diff --git a/clang/include/clang/AST/Expr.h b/clang/include/clang/AST/Expr.h
index 8a4f6affbbc..138db62cf95 100644
--- a/clang/include/clang/AST/Expr.h
+++ b/clang/include/clang/AST/Expr.h
@@ -722,15 +722,23 @@ public:
OrAssign,
Comma // [C99 6.5.17] Comma operator.
};
+private:
+ enum { LHS, RHS, END_EXPR };
+ Expr* SubExprs[END_EXPR];
+ Opcode Opc;
+ SourceLocation OpLoc;
+public:
- BinaryOperator(Expr *lhs, Expr *rhs, Opcode opc, QualType ResTy)
- : Expr(BinaryOperatorClass, ResTy), Opc(opc) {
+ BinaryOperator(Expr *lhs, Expr *rhs, Opcode opc, QualType ResTy,
+ SourceLocation opLoc)
+ : Expr(BinaryOperatorClass, ResTy), Opc(opc), OpLoc(opLoc) {
SubExprs[LHS] = lhs;
SubExprs[RHS] = rhs;
assert(!isCompoundAssignmentOp() &&
"Use ArithAssignBinaryOperator for compound assignments");
}
+ SourceLocation getOperatorLoc() const { return OpLoc; }
Opcode getOpcode() const { return Opc; }
Expr *getLHS() const { return SubExprs[LHS]; }
Expr *getRHS() const { return SubExprs[RHS]; }
@@ -764,14 +772,10 @@ public:
virtual child_iterator child_begin();
virtual child_iterator child_end();
-private:
- enum { LHS, RHS, END_EXPR };
- Expr* SubExprs[END_EXPR];
- Opcode Opc;
-
protected:
- BinaryOperator(Expr *lhs, Expr *rhs, Opcode opc, QualType ResTy, bool dead)
- : Expr(CompoundAssignOperatorClass, ResTy), Opc(opc) {
+ BinaryOperator(Expr *lhs, Expr *rhs, Opcode opc, QualType ResTy,
+ SourceLocation oploc, bool dead)
+ : Expr(CompoundAssignOperatorClass, ResTy), Opc(opc), OpLoc(oploc) {
SubExprs[LHS] = lhs;
SubExprs[RHS] = rhs;
}
@@ -787,8 +791,10 @@ class CompoundAssignOperator : public BinaryOperator {
QualType ComputationType;
public:
CompoundAssignOperator(Expr *lhs, Expr *rhs, Opcode opc,
- QualType ResType, QualType CompType)
- : BinaryOperator(lhs, rhs, opc, ResType, true), ComputationType(CompType) {
+ QualType ResType, QualType CompType,
+ SourceLocation OpLoc)
+ : BinaryOperator(lhs, rhs, opc, ResType, OpLoc, true),
+ ComputationType(CompType) {
assert(isCompoundAssignmentOp() &&
"Only should be used for compound assignments");
}
OpenPOWER on IntegriCloud