diff tools/clang/lib/Parse/ParseCbC.cpp @ 60:d4de94500cd9

remove decl flags
author Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
date Sun, 02 Feb 2014 17:53:11 +0900
parents 322ba4588e4f
children 7f1f0f7e0569
line wrap: on
line diff
--- a/tools/clang/lib/Parse/ParseCbC.cpp	Sun Feb 02 17:39:42 2014 +0900
+++ b/tools/clang/lib/Parse/ParseCbC.cpp	Sun Feb 02 17:53:11 2014 +0900
@@ -72,16 +72,6 @@
 };
 }
 
-namespace CbCSpace{
-  enum DeclarationFlags {
-    CbCReturnFunc  = 0x04,
-    CopyParentType = 0x08
-  };
-  
-  bool isCbCRetFunc(unsigned F) { return F & CbCReturnFunc; }
-  bool shouldCopyParentsType(unsigned F) { return F & CopyParentType; }
-}
-
 
 ExprResult Parser::Prepare__retForGotoWithTheEnvExpr(){
   StmtResult innerRes;
@@ -96,19 +86,23 @@
   PrettyStackTraceLoc CrashInfo(PP.getSourceManager(),Loc,"in compound statement ('{}')");
   StmtVector CompoundStmts; 
 
+  // create code segment for return to C's function
   if (CreateRetFunction()) { // error check : function type is void or not.
     Diag(Tok, diag::err_cannot_use_goto_with_env);
     return ExprError();
   }
     
-  innerRes = CreateDeclStmt(__CbC_retII, CbCSpace::CbCReturnFunc, DeclSpec::TST___code);
+  // __code (*__CbC_return)();
+  innerRes = CreateDeclStmt(__CbC_retII, true, false, DeclSpec::TST___code);
   if (innerRes.isUsable())
     CompoundStmts.push_back(innerRes.release());
 
+  // __CbC_return = ret;
   innerRes = CreateAssignmentStmt(__CbC_retII, retcsII);
   if (innerRes.isUsable())
     CompoundStmts.push_back(innerRes.release());
 
+  // __CbC_return;
   innerRes = CreateComplexStmtRet(__CbC_retII, false);
   if (innerRes.isUsable())
     CompoundStmts.push_back(innerRes.release());
@@ -133,30 +127,37 @@
   PrettyStackTraceLoc CrashInfo(PP.getSourceManager(),Loc,"in compound statement ('{}')");
   StmtVector CompoundStmts; 
 
-  innerRes = CreateDeclStmt(__CbC_envII, 0, DeclSpec::TST_struct, structII);
+  // struct __CbC_env __CbC_environment;
+  innerRes = CreateDeclStmt(__CbC_envII, false, false, DeclSpec::TST_struct, structII);
   if (innerRes.isUsable())
     CompoundStmts.push_back(innerRes.release());
 
-  innerRes = CreateDeclStmt(retvalII, CbCSpace::CopyParentType);
+  // returnType retval;
+  innerRes = CreateDeclStmt(retvalII, false, true);
   if (innerRes.isUsable())
     CompoundStmts.push_back(innerRes.release());
 
-  innerRes = CreateDeclStmt(bufII, 0, DeclSpec::TST_typename, CreateIdentifierInfo("jmp_buf", Loc));
+  // jmp_buf env_buf;
+  innerRes = CreateDeclStmt(bufII, false, false, DeclSpec::TST_typename, CreateIdentifierInfo("jmp_buf", Loc));
   if (innerRes.isUsable())
     CompoundStmts.push_back(innerRes.release());
 
+  // __CbC_environment.ret_p = &retval;
   innerRes = CreateAssignmentStmt(__CbC_envII, retvalII, true, true, ret_pII);
   if (innerRes.isUsable())
     CompoundStmts.push_back(innerRes.release());
 
+  // __CbC_environment.env = env_buf;
   innerRes = CreateAssignmentStmt(__CbC_envII, bufII, true, false, envII);
   if (innerRes.isUsable())
     CompoundStmts.push_back(innerRes.release());
 
+  // create statements of setjmp
   innerRes = CreateSjForContinuationWithEnv();
   if (innerRes.isUsable())
     CompoundStmts.push_back(innerRes.release());
   
+  // __CbC_environment;
   innerRes = CreateComplexStmtRet(__CbC_envII, true);
   if (innerRes.isUsable())
     CompoundStmts.push_back(innerRes.release());
@@ -209,7 +210,7 @@
   return Actions.ActOnExprStmt(Expr);
 }
 
-StmtResult Parser::CreateDeclStmt(IdentifierInfo *II, unsigned DeclFlags, DeclSpec::TST valueType, IdentifierInfo* Name, const char* size){
+StmtResult Parser::CreateDeclStmt(IdentifierInfo *II, bool isRetCS, bool copyType, DeclSpec::TST valueType, IdentifierInfo* Name){
   SourceLocation Loc = Tok.getLocation();
   DeclGroupPtrTy DeclGPT;
   ParsingDeclSpec DS(*this);
@@ -220,7 +221,7 @@
   ParsingDeclarator D(*this, DS, static_cast<Declarator::TheContext>(Declarator::BlockContext));
   D.SetIdentifier(II, Loc);
     
-  if (CbCSpace::isCbCRetFunc(DeclFlags)) {
+  if (isRetCS) {
     D.setEllipsisLoc(SourceLocation());
     bool hadGroupingParens = D.hasGroupingParens();
     D.setGroupingParens(true);
@@ -276,7 +277,7 @@
   SmallVector<Decl *, 8> DeclsInGroup;
   Decl *FirstDecl;
   
-  if (CbCSpace::shouldCopyParentsType(DeclFlags))
+  if (copyType)
     FirstDecl = HandleDeclAndChangeDeclType(D);
   else
     FirstDecl = ParseDeclarationAfterDeclaratorAndAttributes(D);