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/ASTWriterStmt.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/ASTWriterStmt.cpp')
-rw-r--r-- | clang/lib/Serialization/ASTWriterStmt.cpp | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/clang/lib/Serialization/ASTWriterStmt.cpp b/clang/lib/Serialization/ASTWriterStmt.cpp index 27261dbb2a9..af066bb4257 100644 --- a/clang/lib/Serialization/ASTWriterStmt.cpp +++ b/clang/lib/Serialization/ASTWriterStmt.cpp @@ -151,6 +151,7 @@ namespace clang { void VisitBinaryTypeTraitExpr(BinaryTypeTraitExpr *E); void VisitCXXNoexceptExpr(CXXNoexceptExpr *E); void VisitPackExpansionExpr(PackExpansionExpr *E); + void VisitSizeOfPackExpr(SizeOfPackExpr *E); void VisitOpaqueValueExpr(OpaqueValueExpr *E); }; } @@ -1303,6 +1304,16 @@ void ASTStmtWriter::VisitPackExpansionExpr(PackExpansionExpr *E) { Code = serialization::EXPR_PACK_EXPANSION; } +void ASTStmtWriter::VisitSizeOfPackExpr(SizeOfPackExpr *E) { + VisitExpr(E); + Writer.AddSourceLocation(E->OperatorLoc, Record); + Writer.AddSourceLocation(E->PackLoc, Record); + Writer.AddSourceLocation(E->RParenLoc, Record); + Record.push_back(E->Length); + Writer.AddDeclRef(E->Pack, Record); + Code = serialization::EXPR_SIZEOF_PACK; +} + void ASTStmtWriter::VisitOpaqueValueExpr(OpaqueValueExpr *E) { VisitExpr(E); Code = serialization::EXPR_OPAQUE_VALUE; |