diff options
author | Sebastian Redl <sebastian.redl@getdesigned.at> | 2008-11-11 17:56:53 +0000 |
---|---|---|
committer | Sebastian Redl <sebastian.redl@getdesigned.at> | 2008-11-11 17:56:53 +0000 |
commit | 0518999d3adcc289997bd974dce90cc97f5c1c44 (patch) | |
tree | b37c751f8fee36d162d7bf009aaa64d22e64910c /lib/AST/StmtSerialization.cpp | |
parent | 8f5aab696173cc6e9c9963635d91dc2e83d54442 (diff) |
Introduce a single AST node SizeOfAlignOfExpr for all sizeof and alignof expressions, both of values and types.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59057 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/AST/StmtSerialization.cpp')
-rw-r--r-- | lib/AST/StmtSerialization.cpp | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/lib/AST/StmtSerialization.cpp b/lib/AST/StmtSerialization.cpp index 3982881576..f71b88b46f 100644 --- a/lib/AST/StmtSerialization.cpp +++ b/lib/AST/StmtSerialization.cpp @@ -136,8 +136,8 @@ Stmt* Stmt::Create(Deserializer& D, ASTContext& C) { case ReturnStmtClass: return ReturnStmt::CreateImpl(D, C); - case SizeOfAlignOfTypeExprClass: - return SizeOfAlignOfTypeExpr::CreateImpl(D, C); + case SizeOfAlignOfExprClass: + return SizeOfAlignOfExpr::CreateImpl(D, C); case StmtExprClass: return StmtExpr::CreateImpl(D, C); @@ -795,22 +795,33 @@ ReturnStmt* ReturnStmt::CreateImpl(Deserializer& D, ASTContext& C) { return new ReturnStmt(RetLoc,RetExpr); } -void SizeOfAlignOfTypeExpr::EmitImpl(Serializer& S) const { +void SizeOfAlignOfExpr::EmitImpl(Serializer& S) const { S.EmitBool(isSizeof); - S.Emit(Ty); + S.EmitBool(isType); + if (isType) + S.Emit(getArgumentType()); + else + S.EmitOwnedPtr(getArgumentExpr()); S.Emit(getType()); S.Emit(OpLoc); S.Emit(RParenLoc); } -SizeOfAlignOfTypeExpr* SizeOfAlignOfTypeExpr::CreateImpl(Deserializer& D, ASTContext& C) { +SizeOfAlignOfExpr* +SizeOfAlignOfExpr::CreateImpl(Deserializer& D, ASTContext& C) { bool isSizeof = D.ReadBool(); - QualType Ty = QualType::ReadVal(D); + bool isType = D.ReadBool(); + void *Argument; + if (isType) + Argument = QualType::ReadVal(D).getAsOpaquePtr(); + else + Argument = D.ReadOwnedPtr<Expr>(C); QualType Res = QualType::ReadVal(D); SourceLocation OpLoc = SourceLocation::ReadVal(D); SourceLocation RParenLoc = SourceLocation::ReadVal(D); - return new SizeOfAlignOfTypeExpr(isSizeof,Ty,Res,OpLoc,RParenLoc); + return new SizeOfAlignOfExpr(isSizeof, isType, Argument, Res, + OpLoc, RParenLoc); } void StmtExpr::EmitImpl(Serializer& S) const { |