forked from OSchip/llvm-project
parent
5ebf2acd84
commit
954a830eca
|
@ -628,15 +628,23 @@ public:
|
|||
val->isTypeDependent(), val->isValueDependent()),
|
||||
L(l), R(r), Val(val) {}
|
||||
|
||||
/// \brief Construct an empty parenthesized expression.
|
||||
explicit ParenExpr(EmptyShell Empty)
|
||||
: Expr(ParenExprClass, Empty) { }
|
||||
|
||||
const Expr *getSubExpr() const { return cast<Expr>(Val); }
|
||||
Expr *getSubExpr() { return cast<Expr>(Val); }
|
||||
void setSubExpr(Expr *E) { Val = E; }
|
||||
|
||||
virtual SourceRange getSourceRange() const { return SourceRange(L, R); }
|
||||
|
||||
/// \brief Get the location of the left parentheses '('.
|
||||
SourceLocation getLParen() const { return L; }
|
||||
void setLParen(SourceLocation Loc) { L = Loc; }
|
||||
|
||||
/// \brief Get the location of the right parentheses ')'.
|
||||
SourceLocation getRParen() const { return R; }
|
||||
void setRParen(SourceLocation Loc) { R = Loc; }
|
||||
|
||||
static bool classof(const Stmt *T) {
|
||||
return T->getStmtClass() == ParenExprClass;
|
||||
|
|
|
@ -383,6 +383,8 @@ namespace clang {
|
|||
EXPR_FLOATING_LITERAL,
|
||||
/// \brief A CharacterLiteral record.
|
||||
EXPR_CHARACTER_LITERAL,
|
||||
/// \brief A ParenExpr record.
|
||||
EXPR_PAREN,
|
||||
/// \brief An ImplicitCastExpr record.
|
||||
EXPR_IMPLICIT_CAST
|
||||
};
|
||||
|
|
|
@ -237,6 +237,7 @@ namespace {
|
|||
unsigned VisitIntegerLiteral(IntegerLiteral *E);
|
||||
unsigned VisitFloatingLiteral(FloatingLiteral *E);
|
||||
unsigned VisitCharacterLiteral(CharacterLiteral *E);
|
||||
unsigned VisitParenExpr(ParenExpr *E);
|
||||
unsigned VisitCastExpr(CastExpr *E);
|
||||
unsigned VisitImplicitCastExpr(ImplicitCastExpr *E);
|
||||
};
|
||||
|
@ -286,6 +287,14 @@ unsigned PCHStmtReader::VisitCharacterLiteral(CharacterLiteral *E) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
unsigned PCHStmtReader::VisitParenExpr(ParenExpr *E) {
|
||||
VisitExpr(E);
|
||||
E->setLParen(SourceLocation::getFromRawEncoding(Record[Idx++]));
|
||||
E->setRParen(SourceLocation::getFromRawEncoding(Record[Idx++]));
|
||||
E->setSubExpr(ExprStack.back());
|
||||
return 1;
|
||||
}
|
||||
|
||||
unsigned PCHStmtReader::VisitCastExpr(CastExpr *E) {
|
||||
VisitExpr(E);
|
||||
E->setSubExpr(ExprStack.back());
|
||||
|
@ -1605,6 +1614,10 @@ Expr *PCHReader::ReadExpr() {
|
|||
E = new (Context) CharacterLiteral(Empty);
|
||||
break;
|
||||
|
||||
case pch::EXPR_PAREN:
|
||||
E = new (Context) ParenExpr(Empty);
|
||||
break;
|
||||
|
||||
case pch::EXPR_IMPLICIT_CAST:
|
||||
E = new (Context) ImplicitCastExpr(Empty);
|
||||
break;
|
||||
|
|
|
@ -449,6 +449,7 @@ namespace {
|
|||
void VisitIntegerLiteral(IntegerLiteral *E);
|
||||
void VisitFloatingLiteral(FloatingLiteral *E);
|
||||
void VisitCharacterLiteral(CharacterLiteral *E);
|
||||
void VisitParenExpr(ParenExpr *E);
|
||||
void VisitCastExpr(CastExpr *E);
|
||||
void VisitImplicitCastExpr(ImplicitCastExpr *E);
|
||||
};
|
||||
|
@ -497,6 +498,14 @@ void PCHStmtWriter::VisitCharacterLiteral(CharacterLiteral *E) {
|
|||
Code = pch::EXPR_CHARACTER_LITERAL;
|
||||
}
|
||||
|
||||
void PCHStmtWriter::VisitParenExpr(ParenExpr *E) {
|
||||
VisitExpr(E);
|
||||
Writer.AddSourceLocation(E->getLParen(), Record);
|
||||
Writer.AddSourceLocation(E->getRParen(), Record);
|
||||
Writer.WriteSubExpr(E->getSubExpr());
|
||||
Code = pch::EXPR_PAREN;
|
||||
}
|
||||
|
||||
void PCHStmtWriter::VisitCastExpr(CastExpr *E) {
|
||||
VisitExpr(E);
|
||||
Writer.WriteSubExpr(E->getSubExpr());
|
||||
|
|
|
@ -11,7 +11,7 @@ typedef typeof(17) integer_literal;
|
|||
typedef typeof(17l) long_literal;
|
||||
|
||||
// FloatingLiteral
|
||||
typedef typeof(42.5) floating_literal;
|
||||
typedef typeof((42.5)) floating_literal;
|
||||
|
||||
// CharacterLiteral
|
||||
typedef typeof('a') char_literal;
|
||||
|
|
Loading…
Reference in New Issue