diff options
author | Steve Naroff <snaroff@apple.com> | 2008-10-08 17:01:13 +0000 |
---|---|---|
committer | Steve Naroff <snaroff@apple.com> | 2008-10-08 17:01:13 +0000 |
commit | 415d3d570a5ee2d41fd7ae485395bcd4a41dae64 (patch) | |
tree | 42d12c676fa0876433d7d3fa6da27289eff0589f /clang/lib/AST/StmtPrinter.cpp | |
parent | d83529e8c4d99a053b0128caa79d49dc65f015d4 (diff) | |
download | bcm5719-llvm-415d3d570a5ee2d41fd7ae485395bcd4a41dae64.tar.gz bcm5719-llvm-415d3d570a5ee2d41fd7ae485395bcd4a41dae64.zip |
- Add BlockDecl AST node.
- Modify BlockExpr to reference the BlockDecl.
This is "cleanup" necessary to improve our lookup semantics for blocks (to fix <rdar://problem/6272905> clang block rewriter: parameter to function not imported into block?).
Still some follow-up work to finish this (forthcoming).
llvm-svn: 57298
Diffstat (limited to 'clang/lib/AST/StmtPrinter.cpp')
-rw-r--r-- | clang/lib/AST/StmtPrinter.cpp | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/clang/lib/AST/StmtPrinter.cpp b/clang/lib/AST/StmtPrinter.cpp index 844a3e85601..ba67a97debc 100644 --- a/clang/lib/AST/StmtPrinter.cpp +++ b/clang/lib/AST/StmtPrinter.cpp @@ -895,26 +895,27 @@ void StmtPrinter::VisitObjCMessageExpr(ObjCMessageExpr *Mess) { } void StmtPrinter::VisitBlockExpr(BlockExpr *Node) { + BlockDecl *BD = Node->getBlockDecl(); OS << "^"; const FunctionType *AFT = Node->getFunctionType(); if (isa<FunctionTypeNoProto>(AFT)) { OS << "()"; - } else if (!Node->arg_empty() || cast<FunctionTypeProto>(AFT)->isVariadic()) { - const FunctionTypeProto *FT = cast<FunctionTypeProto>(AFT); + } else if (!BD->param_empty() || cast<FunctionTypeProto>(AFT)->isVariadic()) { OS << '('; std::string ParamStr; - for (BlockExpr::arg_iterator AI = Node->arg_begin(), - E = Node->arg_end(); AI != E; ++AI) { - if (AI != Node->arg_begin()) OS << ", "; + for (BlockDecl::param_iterator AI = BD->param_begin(), + E = BD->param_end(); AI != E; ++AI) { + if (AI != BD->param_begin()) OS << ", "; ParamStr = (*AI)->getName(); (*AI)->getType().getAsStringInternal(ParamStr); OS << ParamStr; } + const FunctionTypeProto *FT = cast<FunctionTypeProto>(AFT); if (FT->isVariadic()) { - if (!Node->arg_empty()) OS << ", "; + if (!BD->param_empty()) OS << ", "; OS << "..."; } OS << ')'; |