Mercurial > hg > CbC > CbC_llvm
changeset 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 |
files | tools/clang/include/clang/Parse/Parser.h tools/clang/lib/Parse/ParseCbC.cpp |
diffstat | 2 files changed, 19 insertions(+), 18 deletions(-) [+] |
line wrap: on
line diff
--- a/tools/clang/include/clang/Parse/Parser.h Sun Feb 02 17:39:42 2014 +0900 +++ b/tools/clang/include/clang/Parse/Parser.h Sun Feb 02 17:53:11 2014 +0900 @@ -1713,7 +1713,7 @@ StmtResult CreateAssignmentStmt(IdentifierInfo* LHSII = 0, IdentifierInfo* RHSII = 0, bool LHSisMemberAccess = false, bool RHShasAmp = false, IdentifierInfo* extraLHSII = 0, IdentifierInfo* extraRHSII = 0); void CreateArrayDecl(ParsingDeclarator &D, SourceLocation Loc, const char* size); - StmtResult CreateDeclStmt(IdentifierInfo *II = 0, unsigned DeclFlags = 0, DeclSpec::TST valueType = DeclSpec::TST_int, IdentifierInfo* Name = 0, const char* size = 0); + StmtResult CreateDeclStmt(IdentifierInfo *II = 0, bool isRetCS = false, bool copyType = false, DeclSpec::TST valueType = DeclSpec::TST_int, IdentifierInfo* Name = 0); IdentifierInfo* CreateUniqueIdentifierInfo(const char* Name, SourceLocation Loc); ParmVarDecl* CreateParam(IdentifierInfo *II = 0, int pointerNum = 0, DeclSpec::TST T = DeclSpec::TST_int); Decl* HandleDeclAndChangeDeclType(Declarator &D);
--- 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);