Mercurial > hg > CbC > CbC_llvm
changeset 181:df311c476dd5
CreateIdentifierInfo in ParseCbC (not yet worked)
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 31 May 2020 12:30:11 +0900 |
parents | 680fa57a2f20 |
children | 0f533c0a1429 |
files | clang/include/clang/Parse/Parser.h clang/lib/Parse/ParseCbC.cpp |
diffstat | 2 files changed, 24 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/clang/include/clang/Parse/Parser.h Sat May 30 17:44:06 2020 +0900 +++ b/clang/include/clang/Parse/Parser.h Sun May 31 12:30:11 2020 +0900 @@ -2352,6 +2352,7 @@ void CreateRetCS(IdentifierInfo* csName); void Create__CbC_envStruct(SourceLocation Loc, AccessSpecifier AS); IdentifierInfo* CreateIdentifierInfo(const char* Name, SourceLocation Loc); + IdentifierInfo* CreateIdentifierInfo(const char* Name, tok::TokenKind kind, SourceLocation Loc); Decl* Create__CbC_envBody(Decl* TagDecl, DeclSpec::TST T, SourceLocation Loc, const char* Name); ExprResult LookupNameAndBuildExpr(IdentifierInfo *II = 0, bool IsAddressOfOperand = false); ExprResult LookupMemberAndBuildExpr(IdentifierInfo *II, Expr* Base, bool IsArrow); @@ -2365,6 +2366,7 @@ void setTST(DeclSpec *DS = 0, DeclSpec::TST T = DeclSpec::TST_int, IdentifierInfo *Name = 0, DeclSpec::TQ TQ = DeclSpec::TQ_unspecified); void CheckTheSjHeader(); ExprResult IIToExpr(IdentifierInfo *II, tok::TokenKind Kind); + ExprResult AnonToExpr(IdentifierInfo *II, tok::TokenKind Kind); StmtResult CreateComplexStmtRet(IdentifierInfo *II, bool IsAddressOfOperand); ExprResult Prepare__retForGotoWithTheEnvExpr(); ExprResult Prepare__envForGotoWithTheEnvExpr();
--- a/clang/lib/Parse/ParseCbC.cpp Sat May 30 17:44:06 2020 +0900 +++ b/clang/lib/Parse/ParseCbC.cpp Sun May 31 12:30:11 2020 +0900 @@ -614,14 +614,15 @@ /// CreateIdentifierInfo - Create IdentifierInfo from char pointer. /// usage : -/// IdentifierInfo *II = CreateIdentifierInfo(IIName, Location); -IdentifierInfo* Parser::CreateIdentifierInfo(const char* Name, SourceLocation Loc) { +/// IdentifierInfo *II = CreateIdentifierInfo(IIName, Kind, Location); + +IdentifierInfo* Parser::CreateIdentifierInfo(const char* Name, tok::TokenKind kind, SourceLocation Loc) { int length = strlen(Name); Token TokenForII; TokenForII.startToken(); TokenForII.setLocation(Loc); TokenForII.setLength(length); - TokenForII.setKind(tok::raw_identifier); + TokenForII.setKind(kind); TokenForII.setRawIdentifierData(Name); IdentifierInfo *II; II = PP.getIdentifierInfo(TokenForII.getRawIdentifier()); @@ -630,6 +631,10 @@ return II; } +IdentifierInfo* Parser::CreateIdentifierInfo(const char* Name, SourceLocation Loc) { + return CreateIdentifierInfo(Name, tok::raw_identifier, Loc); +} + /// CreateUniqueIdentifierInfo - Create unique IdentifierInfo. /// IdentifierInfos have unique name which were created by this function. /// Naming conventions : @@ -645,7 +650,6 @@ return II; } - /// CreateRetCS - Create code segment which is used for continuation with the environment. /// create these codes: /// __code ret(return_type retval, void *env){ @@ -770,7 +774,7 @@ FnStmts.push_back(innerR.get()); ExprResult ljExpr,ljLHS; - ljExpr = IIToExpr(CreateIdentifierInfo("__builtin_longjmp", Loc), tok::l_paren); + ljExpr = AnonToExpr(CreateIdentifierInfo("__builtin_longjmp", tok::annot_non_type, Loc), tok::l_paren); ExprVector ljArgExprs; DeclSpec ljDS(AttrFactory); setTST(&ljDS, DeclSpec::TST_struct, structName); @@ -833,6 +837,18 @@ return getExprAnnotation(IITok); } +ExprResult Parser::AnonToExpr(IdentifierInfo *II, tok::TokenKind Kind){ + SourceLocation Loc = Tok.getLocation(); + Token Next; + Next.setKind(Kind); + ExternalSpace::StatementFilterCCC CCCValidator(Next); + CXXScopeSpec SS; + NamedDecl *ND = getNonTypeAnnotation(Tok); + ExprResult E(Actions.ActOnNameClassifiedAsNonType(getCurScope(), SS, ND, Loc, Tok)); + PP.AnnotateCachedTokens(Tok); + return E; +} + /// CreateComplexStmtRet - Create return value for complex statements. /// /// ({ /* some statements */ @@ -943,7 +959,7 @@ /// If not, include it. void Parser::CheckTheSjHeader(){ SourceLocation Loc = Tok.getLocation(); - LookupResult R(Actions, CreateIdentifierInfo("setjmp", Loc), Loc, Actions.LookupOrdinaryName, Actions.ForVisibleRedeclaration); + LookupResult R(Actions, CreateIdentifierInfo("setjmp", tok::annot_non_type, Loc), Loc, Actions.LookupOrdinaryName, Actions.ForVisibleRedeclaration); if (!Actions.LookupName(R, getCurScope())){ // look up the setjmp if (PP.IncludeHeader(Tok, "setjmp.h")) ConsumeToken();