diff options
| author | Douglas Gregor <dgregor@apple.com> | 2011-01-04 17:33:58 +0000 |
|---|---|---|
| committer | Douglas Gregor <dgregor@apple.com> | 2011-01-04 17:33:58 +0000 |
| commit | 820ba7ba43a25a9caefb3bf1f9049d1d73935fdb (patch) | |
| tree | 770ce4bc86bcf6df4fef9686843807ca5802dd64 /clang/lib/Serialization/ASTReaderStmt.cpp | |
| parent | 3b264ba91aedb2b7161fd93d1d4a517099be39b5 (diff) | |
| download | bcm5719-llvm-820ba7ba43a25a9caefb3bf1f9049d1d73935fdb.tar.gz bcm5719-llvm-820ba7ba43a25a9caefb3bf1f9049d1d73935fdb.zip | |
Implement the sizeof...(pack) expression to compute the length of a
parameter pack.
Note that we're missing proper libclang support for the new
SizeOfPackExpr expression node.
llvm-svn: 122813
Diffstat (limited to 'clang/lib/Serialization/ASTReaderStmt.cpp')
| -rw-r--r-- | clang/lib/Serialization/ASTReaderStmt.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/clang/lib/Serialization/ASTReaderStmt.cpp b/clang/lib/Serialization/ASTReaderStmt.cpp index 4703c633fbe..5ed6f8e4d5e 100644 --- a/clang/lib/Serialization/ASTReaderStmt.cpp +++ b/clang/lib/Serialization/ASTReaderStmt.cpp @@ -177,6 +177,7 @@ namespace clang { void VisitBinaryTypeTraitExpr(BinaryTypeTraitExpr *E); void VisitCXXNoexceptExpr(CXXNoexceptExpr *E); void VisitPackExpansionExpr(PackExpansionExpr *E); + void VisitSizeOfPackExpr(SizeOfPackExpr *E); void VisitOpaqueValueExpr(OpaqueValueExpr *E); }; @@ -1294,6 +1295,15 @@ void ASTStmtReader::VisitPackExpansionExpr(PackExpansionExpr *E) { E->Pattern = Reader.ReadSubExpr(); } +void ASTStmtReader::VisitSizeOfPackExpr(SizeOfPackExpr *E) { + VisitExpr(E); + E->OperatorLoc = ReadSourceLocation(Record, Idx); + E->PackLoc = ReadSourceLocation(Record, Idx); + E->RParenLoc = ReadSourceLocation(Record, Idx); + E->Length = Record[Idx++]; + E->Pack = cast_or_null<NamedDecl>(Reader.GetDecl(Record[Idx++])); +} + void ASTStmtReader::VisitOpaqueValueExpr(OpaqueValueExpr *E) { VisitExpr(E); } @@ -1820,6 +1830,10 @@ Stmt *ASTReader::ReadStmtFromStream(PerFileData &F) { S = new (Context) PackExpansionExpr(Empty); break; + case EXPR_SIZEOF_PACK: + S = new (Context) SizeOfPackExpr(Empty); + break; + case EXPR_OPAQUE_VALUE: S = new (Context) OpaqueValueExpr(Empty); break; |

