clang import: try to handle CXXFunctionalCastExpr

This commit is contained in:
Daniel Marjamäki 2020-09-01 19:59:41 +02:00
parent 770bd6cb73
commit 1f8896e51c
2 changed files with 21 additions and 1 deletions

View File

@ -48,6 +48,7 @@ static const std::string CXXDefaultArgExpr = "CXXDefaultArgExpr";
static const std::string CXXDeleteExpr = "CXXDeleteExpr"; static const std::string CXXDeleteExpr = "CXXDeleteExpr";
static const std::string CXXDestructorDecl = "CXXDestructorDecl"; static const std::string CXXDestructorDecl = "CXXDestructorDecl";
static const std::string CXXForRangeStmt = "CXXForRangeStmt"; static const std::string CXXForRangeStmt = "CXXForRangeStmt";
static const std::string CXXFunctionalCastExpr = "CXXFunctionalCastExpr";
static const std::string CXXMemberCallExpr = "CXXMemberCallExpr"; static const std::string CXXMemberCallExpr = "CXXMemberCallExpr";
static const std::string CXXMethodDecl = "CXXMethodDecl"; static const std::string CXXMethodDecl = "CXXMethodDecl";
static const std::string CXXNewExpr = "CXXNewExpr"; static const std::string CXXNewExpr = "CXXNewExpr";
@ -712,7 +713,7 @@ Token *clangimport::AstNode::createTokens(TokenList *tokenList)
createTokensForCXXRecord(tokenList); createTokensForCXXRecord(tokenList);
return nullptr; return nullptr;
} }
if (nodeType == CXXStaticCastExpr) { if (nodeType == CXXStaticCastExpr || nodeType == CXXFunctionalCastExpr) {
Token *cast = addtoken(tokenList, getSpelling()); Token *cast = addtoken(tokenList, getSpelling());
Token *par1 = addtoken(tokenList, "("); Token *par1 = addtoken(tokenList, "(");
Token *expr = children[0]->createTokens(tokenList); Token *expr = children[0]->createTokens(tokenList);

View File

@ -50,6 +50,7 @@ private:
TEST_CASE(cxxDestructorDecl); TEST_CASE(cxxDestructorDecl);
TEST_CASE(cxxForRangeStmt1); TEST_CASE(cxxForRangeStmt1);
TEST_CASE(cxxForRangeStmt2); TEST_CASE(cxxForRangeStmt2);
TEST_CASE(cxxFunctionalCastExpr);
TEST_CASE(cxxMemberCall); TEST_CASE(cxxMemberCall);
TEST_CASE(cxxMethodDecl1); TEST_CASE(cxxMethodDecl1);
TEST_CASE(cxxMethodDecl2); TEST_CASE(cxxMethodDecl2);
@ -433,6 +434,24 @@ private:
parse(clang)); parse(clang));
} }
void cxxFunctionalCastExpr() {
const char clang[] = "`-FunctionDecl 0x156fe98 <line:1:1, line:3:1> line:1:5 main 'int (int, char **)'\n"
" |-ParmVarDecl 0x156fd00 <col:10, col:14> col:14 argc 'int'\n"
" |-ParmVarDecl 0x156fdb8 <col:20, col:27> col:27 argv 'char **'\n"
" `-CompoundStmt 0x1596410 <line:2:1, line:2:1>\n"
" |-DeclStmt 0x15946a8 <line:2:15, line:2:29>\n"
" | `-VarDecl 0x1570118 <line:2:15, line:2:28> col:11 used setCode 'MyVar<int>':'MyVar<int>' cinit\n"
" | `-ExprWithCleanups 0x1594690 <line:2:15, line:3:28> 'MyVar<int>':'MyVar<int>'\n"
" | `-CXXConstructExpr 0x1594660 <line:2:15, line:3:28> 'MyVar<int>':'MyVar<int>' 'void (MyVar<int> &&) noexcept' elidable\n"
" | `-MaterializeTemporaryExpr 0x1592b68 <line:2:15, line:3:28> 'MyVar<int>':'MyVar<int>' xvalue\n"
" | `-CXXFunctionalCastExpr 0x1592b40 <line:2:15, line:3:28> 'MyVar<int>':'MyVar<int>' functional cast to MyVar<int> <ConstructorConversion>\n"
" | `-CXXConstructExpr 0x15929f0 <line:2:15, line:3:28> 'MyVar<int>':'MyVar<int>' 'void (int)'\n"
" | `-IntegerLiteral 0x1570248 <col:27> 'int' 5\n";
ASSERT_EQUALS("int main ( int argc@1 , char ** argv@2 ) {\n"
"MyVar<int> setCode@3 = MyVar<int> ( 5 ) ; }",
parse(clang));
}
void cxxMemberCall() { void cxxMemberCall() {
const char clang[] = "`-FunctionDecl 0x320dc80 <line:2:1, col:33> col:6 bar 'void ()'\n" const char clang[] = "`-FunctionDecl 0x320dc80 <line:2:1, col:33> col:6 bar 'void ()'\n"
" `-CompoundStmt 0x323bb08 <col:12, col:33>\n" " `-CompoundStmt 0x323bb08 <col:12, col:33>\n"