[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