diff options
author | Chris Lattner <sabre@nondot.org> | 2009-03-28 19:18:32 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2009-03-28 19:18:32 +0000 |
commit | 83f095cc7e24c6735753c1f2951fabe98d3f3953 (patch) | |
tree | b617e7dd8950123d7781e7c1c2c6bc93c66cd2da /clang/lib/Sema/ParseAST.cpp | |
parent | b7de9b77040010e5a91ba9d55b99f9bd45984322 (diff) | |
download | bcm5719-llvm-83f095cc7e24c6735753c1f2951fabe98d3f3953.tar.gz bcm5719-llvm-83f095cc7e24c6735753c1f2951fabe98d3f3953.zip |
Introduce a new OpaquePtr<N> struct type, which is a simple POD wrapper for a
pointer. Its purpose in life is to be a glorified void*, but which does not
implicitly convert to void* or other OpaquePtr's with a different UID.
Introduce Action::DeclPtrTy which is a typedef for OpaquePtr<0>. Change the
entire parser/sema interface to use DeclPtrTy instead of DeclTy*. This
makes the C++ compiler enforce that these aren't convertible to other opaque
types.
We should also convert ExprTy, StmtTy, TypeTy, AttrTy, BaseTy, etc,
but I don't plan to do that in the short term.
The one outstanding known problem with this patch is that we lose the
bitmangling optimization where ActionResult<DeclPtrTy> doesn't know how to
bitmangle the success bit into the low bit of DeclPtrTy. I will rectify
this with a subsequent patch.
llvm-svn: 67952
Diffstat (limited to 'clang/lib/Sema/ParseAST.cpp')
-rw-r--r-- | clang/lib/Sema/ParseAST.cpp | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/clang/lib/Sema/ParseAST.cpp b/clang/lib/Sema/ParseAST.cpp index fdc57b6e248..59a04dad64e 100644 --- a/clang/lib/Sema/ParseAST.cpp +++ b/clang/lib/Sema/ParseAST.cpp @@ -44,14 +44,14 @@ void clang::ParseAST(Preprocessor &PP, ASTConsumer *Consumer, Consumer->Initialize(Ctx); - Parser::DeclTy *ADecl; + Parser::DeclPtrTy ADecl; while (!P.ParseTopLevelDecl(ADecl)) { // Not end of file. // If we got a null return and something *was* parsed, ignore it. This // is due to a top-level semicolon, an action override, or a parse error // skipping something. if (ADecl) { - Decl* D = static_cast<Decl*>(ADecl); + Decl *D = ADecl.getAs<Decl>(); Consumer->HandleTopLevelDecl(D); } }; |