From 20a43a0a4ec0e4a1458e780c62a7f4a50d7bfa0e Mon Sep 17 00:00:00 2001 From: zsofiaschell Date: Tue, 7 Feb 2023 09:22:06 +0100 Subject: [PATCH 1/7] implement TraverseCXXForRangeStmt --- plugins/cpp/parser/src/clangastvisitor.h | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/plugins/cpp/parser/src/clangastvisitor.h b/plugins/cpp/parser/src/clangastvisitor.h index 699d6334f..b2fda0261 100644 --- a/plugins/cpp/parser/src/clangastvisitor.h +++ b/plugins/cpp/parser/src/clangastvisitor.h @@ -141,6 +141,26 @@ class ClangASTVisitor : public clang::RecursiveASTVisitor return b; } + + bool TraverseCXXForRangeStmt (clang::CXXForRangeStmt *forRangeStmt){ + + model::CppAstNodePtr astNode = std::make_shared(); + + astNode->astValue = getSourceText( + _clangSrcMgr, + forRangeStmt->getRangeStmt()->getBeginLoc(), + forRangeStmt->getRangeStmt()->getEndLoc(), + true); + astNode->location = getFileLoc(forRangeStmt->getRangeStmt()->getBeginLoc(), forRangeStmt->getRangeStmt()->getEndLoc()); + astNode->entityHash = util::fnvHash(getUSR(forRangeStmt->getLoopVariable())); + astNode->symbolType = model::CppAstNode::SymbolType::Variable; + astNode->astType = model::CppAstNode::AstType::Read; + astNode->id = model::createIdentifier(*astNode); + + _astNodes.push_back(astNode); + return true; + } + bool TraverseFunctionDecl(clang::FunctionDecl* fd_) { _functionStack.push(std::make_shared()); From 21920e2d6fbe7b3d3c21298c2de0b3755377049a Mon Sep 17 00:00:00 2001 From: zsofiaschell Date: Tue, 7 Feb 2023 13:10:53 +0100 Subject: [PATCH 2/7] update TraverseCXXForRangeStmt --- plugins/cpp/parser/src/clangastvisitor.h | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/plugins/cpp/parser/src/clangastvisitor.h b/plugins/cpp/parser/src/clangastvisitor.h index b2fda0261..7b08d85c9 100644 --- a/plugins/cpp/parser/src/clangastvisitor.h +++ b/plugins/cpp/parser/src/clangastvisitor.h @@ -146,13 +146,12 @@ class ClangASTVisitor : public clang::RecursiveASTVisitor model::CppAstNodePtr astNode = std::make_shared(); - astNode->astValue = getSourceText( - _clangSrcMgr, - forRangeStmt->getRangeStmt()->getBeginLoc(), - forRangeStmt->getRangeStmt()->getEndLoc(), - true); - astNode->location = getFileLoc(forRangeStmt->getRangeStmt()->getBeginLoc(), forRangeStmt->getRangeStmt()->getEndLoc()); - astNode->entityHash = util::fnvHash(getUSR(forRangeStmt->getLoopVariable())); + astNode->astValue = VisitDeclRefExpr(llvm::dyn_cast(forRangeStmt->getRangeInit())); + astNode->location = getFileLoc(forRangeStmt->getBeginLoc(), forRangeStmt->getEndLoc()); + + const clang::VarDecl* vd = llvm::dyn_cast(forRangeStmt->getRangeStmt()->getSingleDecl()); + astNode->entityHash = util::fnvHash(getUSR(vd)); + astNode->symbolType = model::CppAstNode::SymbolType::Variable; astNode->astType = model::CppAstNode::AstType::Read; astNode->id = model::createIdentifier(*astNode); From 389fbeb5c1e5e0721e7a7470932e80ef8c4877a9 Mon Sep 17 00:00:00 2001 From: zsofiaschell Date: Tue, 7 Feb 2023 13:33:35 +0100 Subject: [PATCH 3/7] eliminate astNode from TraverseCXXForRangeStmt --- plugins/cpp/parser/src/clangastvisitor.h | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/plugins/cpp/parser/src/clangastvisitor.h b/plugins/cpp/parser/src/clangastvisitor.h index 7b08d85c9..4b7189ef1 100644 --- a/plugins/cpp/parser/src/clangastvisitor.h +++ b/plugins/cpp/parser/src/clangastvisitor.h @@ -143,20 +143,7 @@ class ClangASTVisitor : public clang::RecursiveASTVisitor bool TraverseCXXForRangeStmt (clang::CXXForRangeStmt *forRangeStmt){ - - model::CppAstNodePtr astNode = std::make_shared(); - - astNode->astValue = VisitDeclRefExpr(llvm::dyn_cast(forRangeStmt->getRangeInit())); - astNode->location = getFileLoc(forRangeStmt->getBeginLoc(), forRangeStmt->getEndLoc()); - - const clang::VarDecl* vd = llvm::dyn_cast(forRangeStmt->getRangeStmt()->getSingleDecl()); - astNode->entityHash = util::fnvHash(getUSR(vd)); - - astNode->symbolType = model::CppAstNode::SymbolType::Variable; - astNode->astType = model::CppAstNode::AstType::Read; - astNode->id = model::createIdentifier(*astNode); - - _astNodes.push_back(astNode); + VisitDeclRefExpr(llvm::dyn_cast(forRangeStmt->getRangeInit())); return true; } From 988b35d8bbdc426f08c8f6069c3240491de411ef Mon Sep 17 00:00:00 2001 From: zsofiaschell Date: Tue, 7 Feb 2023 15:40:58 +0100 Subject: [PATCH 4/7] create VisitCXXForRangeStmt --- plugins/cpp/parser/src/clangastvisitor.h | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/plugins/cpp/parser/src/clangastvisitor.h b/plugins/cpp/parser/src/clangastvisitor.h index 4b7189ef1..5ba4499e3 100644 --- a/plugins/cpp/parser/src/clangastvisitor.h +++ b/plugins/cpp/parser/src/clangastvisitor.h @@ -143,7 +143,27 @@ class ClangASTVisitor : public clang::RecursiveASTVisitor bool TraverseCXXForRangeStmt (clang::CXXForRangeStmt *forRangeStmt){ - VisitDeclRefExpr(llvm::dyn_cast(forRangeStmt->getRangeInit())); + return Base::TraverseCXXForRangeStmt(forRangeStmt); + } + + bool VisitCXXForRangeStmt(clang::CXXForRangeStmt *forRangeStmt) + { + model::CppAstNodePtr astNode = std::make_shared(); + + astNode->astValue = VisitDeclRefExpr(llvm::dyn_cast(forRangeStmt->getRangeInit())); + + astNode->location = getFileLoc(forRangeStmt->getBeginLoc(), forRangeStmt->getEndLoc()); + + const clang::VarDecl* vd = llvm::dyn_cast(forRangeStmt->getRangeStmt()->getSingleDecl()); + astNode->entityHash = util::fnvHash(getUSR(vd)); + + astNode->symbolType = model::CppAstNode::SymbolType::Variable; + + astNode->astType = model::CppAstNode::AstType::Read; + + astNode->id = model::createIdentifier(*astNode); + + _astNodes.push_back(astNode); return true; } From e89339e35b4fffcdfa0deb569f8db83abf9e4f1d Mon Sep 17 00:00:00 2001 From: zsofiaschell Date: Wed, 8 Feb 2023 18:39:30 +0100 Subject: [PATCH 5/7] correct astValue --- plugins/cpp/parser/src/clangastvisitor.h | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/plugins/cpp/parser/src/clangastvisitor.h b/plugins/cpp/parser/src/clangastvisitor.h index 5ba4499e3..9f76be34e 100644 --- a/plugins/cpp/parser/src/clangastvisitor.h +++ b/plugins/cpp/parser/src/clangastvisitor.h @@ -146,11 +146,18 @@ class ClangASTVisitor : public clang::RecursiveASTVisitor return Base::TraverseCXXForRangeStmt(forRangeStmt); } - bool VisitCXXForRangeStmt(clang::CXXForRangeStmt *forRangeStmt) +bool VisitCXXForRangeStmt(clang::CXXForRangeStmt *forRangeStmt) { model::CppAstNodePtr astNode = std::make_shared(); - - astNode->astValue = VisitDeclRefExpr(llvm::dyn_cast(forRangeStmt->getRangeInit())); + + clang::Stmt* stmt = llvm::dyn_cast(forRangeStmt->getRangeInit()); + clang::DeclRefExpr* declRefExpr = llvm::dyn_cast(stmt); + VisitDeclRefExpr(declRefExpr); + astNode->astValue = getSourceText( + _clangSrcMgr, + forRangeStmt->getRangeStmt()->getBeginLoc(), + forRangeStmt->getRangeStmt()->getEndLoc(), + true); astNode->location = getFileLoc(forRangeStmt->getBeginLoc(), forRangeStmt->getEndLoc()); @@ -167,6 +174,7 @@ class ClangASTVisitor : public clang::RecursiveASTVisitor return true; } + bool TraverseFunctionDecl(clang::FunctionDecl* fd_) { _functionStack.push(std::make_shared()); From 97ddbe01604ca9bb79245e76d64440317815718a Mon Sep 17 00:00:00 2001 From: zsofiaschell Date: Thu, 9 Feb 2023 17:29:59 +0100 Subject: [PATCH 6/7] update VisitCXXForRangeStmt --- plugins/cpp/parser/src/clangastvisitor.h | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/plugins/cpp/parser/src/clangastvisitor.h b/plugins/cpp/parser/src/clangastvisitor.h index 9f76be34e..c813213dd 100644 --- a/plugins/cpp/parser/src/clangastvisitor.h +++ b/plugins/cpp/parser/src/clangastvisitor.h @@ -146,13 +146,24 @@ class ClangASTVisitor : public clang::RecursiveASTVisitor return Base::TraverseCXXForRangeStmt(forRangeStmt); } -bool VisitCXXForRangeStmt(clang::CXXForRangeStmt *forRangeStmt) + bool VisitCXXForRangeStmt(clang::CXXForRangeStmt *forRangeStmt) { model::CppAstNodePtr astNode = std::make_shared(); + clang::DeclRefExpr* declRefExpr = llvm::dyn_cast(forRangeStmt->getRangeInit()); + clang::Stmt* stmt = llvm::dyn_cast(forRangeStmt->getRangeInit()); - clang::DeclRefExpr* declRefExpr = llvm::dyn_cast(stmt); - VisitDeclRefExpr(declRefExpr); + + clang::CallExpr* callExpr = llvm::dyn_cast(stmt); + + if(declRefExpr){ //lvalue Var + VisitDeclRefExpr(declRefExpr); + } + + if(callExpr){ //lvalue Function + VisitCallExpr(callExpr); + } + astNode->astValue = getSourceText( _clangSrcMgr, forRangeStmt->getRangeStmt()->getBeginLoc(), @@ -174,7 +185,6 @@ bool VisitCXXForRangeStmt(clang::CXXForRangeStmt *forRangeStmt) return true; } - bool TraverseFunctionDecl(clang::FunctionDecl* fd_) { _functionStack.push(std::make_shared()); From 97602fad5ea37d8ab170b12a77f1c1905094f073 Mon Sep 17 00:00:00 2001 From: zsofiaschell Date: Tue, 14 Feb 2023 16:52:11 +0100 Subject: [PATCH 7/7] remove redundant code parts --- plugins/cpp/parser/src/clangastvisitor.h | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/plugins/cpp/parser/src/clangastvisitor.h b/plugins/cpp/parser/src/clangastvisitor.h index c813213dd..36bc58dff 100644 --- a/plugins/cpp/parser/src/clangastvisitor.h +++ b/plugins/cpp/parser/src/clangastvisitor.h @@ -163,25 +163,6 @@ class ClangASTVisitor : public clang::RecursiveASTVisitor if(callExpr){ //lvalue Function VisitCallExpr(callExpr); } - - astNode->astValue = getSourceText( - _clangSrcMgr, - forRangeStmt->getRangeStmt()->getBeginLoc(), - forRangeStmt->getRangeStmt()->getEndLoc(), - true); - - astNode->location = getFileLoc(forRangeStmt->getBeginLoc(), forRangeStmt->getEndLoc()); - - const clang::VarDecl* vd = llvm::dyn_cast(forRangeStmt->getRangeStmt()->getSingleDecl()); - astNode->entityHash = util::fnvHash(getUSR(vd)); - - astNode->symbolType = model::CppAstNode::SymbolType::Variable; - - astNode->astType = model::CppAstNode::AstType::Read; - - astNode->id = model::createIdentifier(*astNode); - - _astNodes.push_back(astNode); return true; }