forked from OSchip/llvm-project
add a sourcelocation to binary operator to keep track of the location of the operator.
llvm-svn: 41550
This commit is contained in:
parent
105efce68f
commit
c11005faa1
|
@ -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.
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue