Clang import; MaterializeTemporaryExpr
This commit is contained in:
parent
78fcf93342
commit
bdc621b7a3
|
@ -64,6 +64,7 @@ static const std::string ImplicitCastExpr = "ImplicitCastExpr";
|
||||||
static const std::string InitListExpr = "InitListExpr";
|
static const std::string InitListExpr = "InitListExpr";
|
||||||
static const std::string IntegerLiteral = "IntegerLiteral";
|
static const std::string IntegerLiteral = "IntegerLiteral";
|
||||||
static const std::string LabelStmt = "LabelStmt";
|
static const std::string LabelStmt = "LabelStmt";
|
||||||
|
static const std::string MaterializeTemporaryExpr = "MaterializeTemporaryExpr";
|
||||||
static const std::string MemberExpr = "MemberExpr";
|
static const std::string MemberExpr = "MemberExpr";
|
||||||
static const std::string NamespaceDecl = "NamespaceDecl";
|
static const std::string NamespaceDecl = "NamespaceDecl";
|
||||||
static const std::string NullStmt = "NullStmt";
|
static const std::string NullStmt = "NullStmt";
|
||||||
|
@ -756,20 +757,8 @@ Token *clangimport::AstNode::createTokens(TokenList *tokenList)
|
||||||
child->createTokens(tokenList);
|
child->createTokens(tokenList);
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
if (nodeType == NullStmt)
|
if (nodeType == MaterializeTemporaryExpr)
|
||||||
return addtoken(tokenList, ";");
|
return children[0]->createTokens(tokenList);
|
||||||
if (nodeType == NamespaceDecl) {
|
|
||||||
if (children.empty())
|
|
||||||
return nullptr;
|
|
||||||
Token *defToken = addtoken(tokenList, "namespace");
|
|
||||||
Token *nameToken = (mExtTokens[mExtTokens.size() - 2].compare(0,4,"col:") == 0) ?
|
|
||||||
addtoken(tokenList, mExtTokens.back()) : nullptr;
|
|
||||||
Scope *scope = createScope(tokenList, Scope::ScopeType::eNamespace, children);
|
|
||||||
scope->classDef = defToken;
|
|
||||||
if (nameToken)
|
|
||||||
scope->className = nameToken->str();
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
if (nodeType == MemberExpr) {
|
if (nodeType == MemberExpr) {
|
||||||
Token *s = children[0]->createTokens(tokenList);
|
Token *s = children[0]->createTokens(tokenList);
|
||||||
Token *dot = addtoken(tokenList, ".");
|
Token *dot = addtoken(tokenList, ".");
|
||||||
|
@ -788,6 +777,20 @@ Token *clangimport::AstNode::createTokens(TokenList *tokenList)
|
||||||
dot->astOperand2(member);
|
dot->astOperand2(member);
|
||||||
return dot;
|
return dot;
|
||||||
}
|
}
|
||||||
|
if (nodeType == NamespaceDecl) {
|
||||||
|
if (children.empty())
|
||||||
|
return nullptr;
|
||||||
|
Token *defToken = addtoken(tokenList, "namespace");
|
||||||
|
Token *nameToken = (mExtTokens[mExtTokens.size() - 2].compare(0,4,"col:") == 0) ?
|
||||||
|
addtoken(tokenList, mExtTokens.back()) : nullptr;
|
||||||
|
Scope *scope = createScope(tokenList, Scope::ScopeType::eNamespace, children);
|
||||||
|
scope->classDef = defToken;
|
||||||
|
if (nameToken)
|
||||||
|
scope->className = nameToken->str();
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
if (nodeType == NullStmt)
|
||||||
|
return addtoken(tokenList, ";");
|
||||||
if (nodeType == ParenExpr) {
|
if (nodeType == ParenExpr) {
|
||||||
Token *par1 = addtoken(tokenList, "(");
|
Token *par1 = addtoken(tokenList, "(");
|
||||||
Token *expr = children[0]->createTokens(tokenList);
|
Token *expr = children[0]->createTokens(tokenList);
|
||||||
|
|
|
@ -255,6 +255,7 @@ unsigned int CppCheck::check(const std::string &path)
|
||||||
|
|
||||||
const std::string clang = Path::isCPP(path) ? "clang++" : "clang";
|
const std::string clang = Path::isCPP(path) ? "clang++" : "clang";
|
||||||
const std::string temp = mSettings.buildDir + "/__temp__.c";
|
const std::string temp = mSettings.buildDir + "/__temp__.c";
|
||||||
|
const std::string clangcmd = AnalyzerInformation::getAnalyzerInfoFile(mSettings.buildDir, path, "") + ".clang-cmd";
|
||||||
const std::string clangStderr = AnalyzerInformation::getAnalyzerInfoFile(mSettings.buildDir, path, "") + ".clang-stderr";
|
const std::string clangStderr = AnalyzerInformation::getAnalyzerInfoFile(mSettings.buildDir, path, "") + ".clang-stderr";
|
||||||
|
|
||||||
/* Experimental: import clang ast dump */
|
/* Experimental: import clang ast dump */
|
||||||
|
@ -279,12 +280,14 @@ unsigned int CppCheck::check(const std::string &path)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//std::cout << "Clang flags: " << flags << std::endl;
|
|
||||||
|
|
||||||
for (const std::string &i: mSettings.includePaths)
|
for (const std::string &i: mSettings.includePaths)
|
||||||
flags += "-I" + i + " ";
|
flags += "-I" + i + " ";
|
||||||
|
|
||||||
const std::string cmd = clang + " -cc1 -ast-dump " + flags + path + " 2> " + clangStderr;
|
const std::string cmd = clang + " -cc1 -ast-dump " + flags + path + " 2> " + clangStderr;
|
||||||
|
std::ofstream fout(clangcmd);
|
||||||
|
fout << cmd << std::endl;
|
||||||
|
fout.close();
|
||||||
|
|
||||||
std::pair<bool, std::string> res = executeCommand(cmd);
|
std::pair<bool, std::string> res = executeCommand(cmd);
|
||||||
if (!res.first) {
|
if (!res.first) {
|
||||||
std::cerr << "Failed to execute '" + cmd + "'" << std::endl;
|
std::cerr << "Failed to execute '" + cmd + "'" << std::endl;
|
||||||
|
|
Loading…
Reference in New Issue