[cfe-commits] r46558 - in /cfe/trunk: AST/StmtPrinter.cpp Parse/ParseObjc.cpp include/clang/AST/Stmt.h
Fariborz Jahanian
fjahanian at apple.com
Wed Jan 30 09:38:29 PST 2008
Author: fjahanian
Date: Wed Jan 30 11:38:29 2008
New Revision: 46558
URL: http://llvm.org/viewvc/llvm-project?rev=46558&view=rev
Log:
Fixed misc. issues raised by Chris L. on @synchronized implementation.
Modified:
cfe/trunk/AST/StmtPrinter.cpp
cfe/trunk/Parse/ParseObjc.cpp
cfe/trunk/include/clang/AST/Stmt.h
Modified: cfe/trunk/AST/StmtPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/AST/StmtPrinter.cpp?rev=46558&r1=46557&r2=46558&view=diff
==============================================================================
--- cfe/trunk/AST/StmtPrinter.cpp (original)
+++ cfe/trunk/AST/StmtPrinter.cpp Wed Jan 30 11:38:29 2008
@@ -446,7 +446,7 @@
Indent() << "@catch (...) { /* todo */ } \n";
}
-void StmtPrinter::VisitObjCAtThrowStmt (ObjCAtThrowStmt *Node) {
+void StmtPrinter::VisitObjCAtThrowStmt(ObjCAtThrowStmt *Node) {
Indent() << "@throw";
if (Node->getThrowExpr()) {
OS << " ";
@@ -455,15 +455,12 @@
OS << ";\n";
}
-void StmtPrinter::VisitObjCAtSynchronizedStmt (ObjCAtSynchronizedStmt *Node) {
+void StmtPrinter::VisitObjCAtSynchronizedStmt(ObjCAtSynchronizedStmt *Node) {
Indent() << "@synchronized (";
PrintExpr(Node->getSynchExpr());
OS << ")";
- if (CompoundStmt *CS = dyn_cast<CompoundStmt>(Node->getSynchBody()))
- {
- PrintRawCompoundStmt(CS);
- OS << "\n";
- }
+ PrintRawCompoundStmt(Node->getSynchBody());
+ OS << "\n";
}
//===----------------------------------------------------------------------===//
Modified: cfe/trunk/Parse/ParseObjc.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Parse/ParseObjc.cpp?rev=46558&r1=46557&r2=46558&view=diff
==============================================================================
--- cfe/trunk/Parse/ParseObjc.cpp (original)
+++ cfe/trunk/Parse/ParseObjc.cpp Wed Jan 30 11:38:29 2008
@@ -1110,26 +1110,29 @@
}
/// objc-synchronized-statement:
-/// @synchronized '(' expression ')'
+/// @synchronized '(' expression ')' compound-statement
///
Parser::StmtResult Parser::ParseObjCSynchronizedStmt(SourceLocation atLoc) {
- ExprResult Res;
ConsumeToken(); // consume synchronized
if (Tok.isNot(tok::l_paren)) {
Diag (Tok, diag::err_expected_lparen_after, "@synchronized");
return true;
}
ConsumeParen(); // '('
- Res = ParseExpression();
+ ExprResult Res = ParseExpression();
if (Res.isInvalid) {
SkipUntil(tok::semi);
return true;
}
if (Tok.isNot(tok::r_paren)) {
- Diag (Tok, diag::err_expected_rparen);
+ Diag (Tok, diag::err_expected_lbrace);
return true;
}
ConsumeParen(); // ')'
+ if (Tok.isNot(tok::l_brace)) {
+ Diag (Tok, diag::err_expected_lbrace);
+ return true;
+ }
StmtResult SynchBody = ParseCompoundStatementBody();
if (SynchBody.isInvalid)
SynchBody = Actions.ActOnNullStmt(Tok.getLocation());
Modified: cfe/trunk/include/clang/AST/Stmt.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/Stmt.h?rev=46558&r1=46557&r2=46558&view=diff
==============================================================================
--- cfe/trunk/include/clang/AST/Stmt.h (original)
+++ cfe/trunk/include/clang/AST/Stmt.h Wed Jan 30 11:38:29 2008
@@ -934,6 +934,9 @@
};
/// ObjCAtSynchronizedStmt - This is for objective-c's @synchronized statement.
+/// Example: @synchronized (sem) {
+/// do-somthing;
+/// }
///
class ObjCAtSynchronizedStmt : public Stmt {
private:
@@ -950,8 +953,12 @@
AtSynchronizedLoc = atSynchronizedLoc;
}
- const Stmt *getSynchBody() const { return SubStmts[SYNC_BODY]; }
- Stmt *getSynchBody() { return SubStmts[SYNC_BODY]; }
+ const CompoundStmt *getSynchBody() const {
+ return reinterpret_cast<CompoundStmt*>(SubStmts[SYNC_BODY]);
+ }
+ CompoundStmt *getSynchBody() {
+ return reinterpret_cast<CompoundStmt*>(SubStmts[SYNC_BODY]);
+ }
const Expr *getSynchExpr() const {
return reinterpret_cast<Expr*>(SubStmts[SYNC_EXPR]);
More information about the cfe-commits
mailing list