diff tools/clang/lib/Parse/ParseCbC.cpp @ 59:322ba4588e4f

remove assignment flags
author Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
date Sun, 02 Feb 2014 17:39:42 +0900
parents 01c954c1b51b
children d4de94500cd9
line wrap: on
line diff
--- a/tools/clang/lib/Parse/ParseCbC.cpp	Sun Feb 02 17:07:04 2014 +0900
+++ b/tools/clang/lib/Parse/ParseCbC.cpp	Sun Feb 02 17:39:42 2014 +0900
@@ -73,27 +73,11 @@
 }
 
 namespace CbCSpace{
-  enum AssignmentFlags {
-    HasStar   = 0x01,
-    HasAmp    = 0x02,
-    HasPeriod = 0x04,
-    HasArrow  = 0x08
-  };
-  
-  bool hasStar(unsigned F) { return F & HasStar; }
-  bool hasAmp(unsigned F) { return F & HasAmp; }
-  bool hasPeriod(unsigned F) { return F & HasPeriod; }
-  bool hasArrow(unsigned F) { return F & HasArrow; }
-
   enum DeclarationFlags {
-    ArrayType     = 0x01,
-    PointerType   = 0x02,
     CbCReturnFunc  = 0x04,
     CopyParentType = 0x08
   };
   
-  bool isArray(unsigned F) { return F & ArrayType; }
-  bool isPointer(unsigned F) { return F & PointerType; }
   bool isCbCRetFunc(unsigned F) { return F & CbCReturnFunc; }
   bool shouldCopyParentsType(unsigned F) { return F & CopyParentType; }
 }
@@ -161,11 +145,11 @@
   if (innerRes.isUsable())
     CompoundStmts.push_back(innerRes.release());
 
-  innerRes = CreateAssignmentStmt(__CbC_envII, retvalII, CbCSpace::HasPeriod, CbCSpace::HasAmp, ret_pII);
+  innerRes = CreateAssignmentStmt(__CbC_envII, retvalII, true, true, ret_pII);
   if (innerRes.isUsable())
     CompoundStmts.push_back(innerRes.release());
 
-  innerRes = CreateAssignmentStmt(__CbC_envII, bufII, CbCSpace::HasPeriod, 0, envII);
+  innerRes = CreateAssignmentStmt(__CbC_envII, bufII, true, false, envII);
   if (innerRes.isUsable())
     CompoundStmts.push_back(innerRes.release());
 
@@ -182,8 +166,18 @@
   return Actions.ActOnStmtExpr(Loc, CompoundStmtRes.take(), Loc);
 }
 
-StmtResult Parser::CreateAssignmentStmt(IdentifierInfo* LHSII,IdentifierInfo* RHSII,unsigned LHSFlags,unsigned RHSFlags,
-					IdentifierInfo* extraLHSII,IdentifierInfo* extraRHSII){
+/// CreateAssignmentStmt - Create assignment statement such as "aaa = bbb;", "auaua = llll;", etc.
+/// It can create  kinds of statement.
+/// 1. common assignment statement:
+///         variable '=' variable ';'
+/// 2. LHS variable is member of struct:
+///         structVar '.' member '=' variable ';'
+/// 3. RHS variable is address of operand:
+///         variable '=' '&' variable ';'
+/// 4. 2+3:
+///         structVar '.' member '=' '&' variable ';'
+StmtResult Parser::CreateAssignmentStmt(IdentifierInfo* LHSII, IdentifierInfo* RHSII, bool LHSisMemberAccess, bool RHShasAmp,
+					IdentifierInfo* extraLHSII, IdentifierInfo* extraRHSII){
   ExprResult Expr,LHS,RHS;
   
   Token Next,LHSToken;
@@ -203,18 +197,13 @@
   
   LHS = getExprAnnotation(LHSToken);
 
-  if ( CbCSpace::hasPeriod(LHSFlags) ) 
+  if (LHSisMemberAccess) 
     LHS = LookupMemberAndBuildExpr(extraLHSII, LHS.take(), false);
-  else if ( CbCSpace::hasArrow(LHSFlags) ) 
-    LHS = LookupMemberAndBuildExpr(extraLHSII, LHS.take(), true); // It is not sure.
   
   RHS = LookupAndDeclareName(RHSII);
-  if ( CbCSpace::hasAmp(RHSFlags) )
+  if (RHShasAmp)
     RHS = Actions.ActOnUnaryOp(getCurScope(), Loc, tok::amp, RHS.get());
 
-  else if ( CbCSpace::hasStar(RHSFlags) )
-    RHS = Actions.ActOnUnaryOp(getCurScope(), Loc, tok::star, RHS.get()); // It is not sure.
-
   Expr = Actions.ActOnBinOp(getCurScope(), Loc,tok::equal,LHS.take(),RHS.take());
   
   return Actions.ActOnExprStmt(Expr);
@@ -283,8 +272,6 @@
     PrototypeScope.Exit();
     DSp = &FDS;
   }
-  if (CbCSpace::isArray(DeclFlags))
-    CreateArrayDecl(D, Loc, size);
   
   SmallVector<Decl *, 8> DeclsInGroup;
   Decl *FirstDecl;