Clang import; Fixed getSpelling() and getType()

This commit is contained in:
Daniel Marjamäki 2020-01-10 18:13:47 +01:00
parent f667abacf6
commit c23d33fc0a

View File

@ -236,13 +236,17 @@ namespace clangimport {
std::string clangimport::AstNode::getSpelling() const std::string clangimport::AstNode::getSpelling() const
{ {
if (mExtTokens.back() == "extern") int retTypeIndex = mExtTokens.size() - 1;
return mExtTokens[mExtTokens.size() - 3]; if (nodeType == FunctionDecl) {
if (mExtTokens[mExtTokens.size() - 2].compare(0,4,"col:") == 0) while (mExtTokens[retTypeIndex][0] != '\'')
retTypeIndex--;
}
const std::string &str = mExtTokens[retTypeIndex - 1];
if (str.compare(0,4,"col:") == 0)
return ""; return "";
if ((mExtTokens[mExtTokens.size() - 2].compare(0,8,"<invalid") == 0)) if (str.compare(0,8,"<invalid") == 0)
return ""; return "";
return mExtTokens[mExtTokens.size() - 2]; return str;
} }
std::string clangimport::AstNode::getType() const std::string clangimport::AstNode::getType() const
@ -257,10 +261,12 @@ std::string clangimport::AstNode::getType() const
return unquote(mExtTokens[mExtTokens.size() - 3]); return unquote(mExtTokens[mExtTokens.size() - 3]);
if (nodeType == DeclRefExpr) if (nodeType == DeclRefExpr)
return unquote(mExtTokens.back()); return unquote(mExtTokens.back());
if (nodeType == FunctionDecl) if (nodeType == FunctionDecl) {
return unquote((mExtTokens.back() == "extern") ? int retTypeIndex = mExtTokens.size() - 1;
mExtTokens[mExtTokens.size() - 2] : while (mExtTokens[retTypeIndex][0] != '\'')
mExtTokens.back()); retTypeIndex--;
return unquote(mExtTokens[retTypeIndex]);
}
if (nodeType == IntegerLiteral) if (nodeType == IntegerLiteral)
return unquote(mExtTokens[mExtTokens.size() - 2]); return unquote(mExtTokens[mExtTokens.size() - 2]);
if (nodeType == TypedefDecl) if (nodeType == TypedefDecl)
@ -757,12 +763,8 @@ Token * clangimport::AstNode::createTokensCall(TokenList *tokenList)
void clangimport::AstNode::createTokensFunctionDecl(TokenList *tokenList) void clangimport::AstNode::createTokensFunctionDecl(TokenList *tokenList)
{ {
SymbolDatabase *symbolDatabase = mData->mSymbolDatabase; SymbolDatabase *symbolDatabase = mData->mSymbolDatabase;
const int nameIndex = (mExtTokens.back() == "extern") ? addTypeTokens(tokenList, '\'' + getType() + '\'');
(mExtTokens.size() - 3) : Token *nameToken = addtoken(tokenList, getSpelling() + getTemplateParameters());
(mExtTokens.size() - 2);
const int retTypeIndex = nameIndex + 1;
addTypeTokens(tokenList, mExtTokens[retTypeIndex]);
Token *nameToken = addtoken(tokenList, mExtTokens[nameIndex] + getTemplateParameters());
Scope *nestedIn = const_cast<Scope *>(nameToken->scope()); Scope *nestedIn = const_cast<Scope *>(nameToken->scope());
symbolDatabase->scopeList.push_back(Scope(nullptr, nullptr, nestedIn)); symbolDatabase->scopeList.push_back(Scope(nullptr, nullptr, nestedIn));
Scope &scope = symbolDatabase->scopeList.back(); Scope &scope = symbolDatabase->scopeList.back();