add column number to TokenList::addtoken (#2939)
This commit is contained in:
parent
bcc7945540
commit
6103da59be
|
@ -484,8 +484,7 @@ void clangimport::AstNode::setLocations(TokenList *tokenList, int file, int line
|
||||||
Token *clangimport::AstNode::addtoken(TokenList *tokenList, const std::string &str, bool valueType)
|
Token *clangimport::AstNode::addtoken(TokenList *tokenList, const std::string &str, bool valueType)
|
||||||
{
|
{
|
||||||
const Scope *scope = getNestedInScope(tokenList);
|
const Scope *scope = getNestedInScope(tokenList);
|
||||||
tokenList->addtoken(str, mLine, mFile);
|
tokenList->addtoken(str, mLine, mCol, mFile);
|
||||||
tokenList->back()->column(mCol);
|
|
||||||
tokenList->back()->scope(scope);
|
tokenList->back()->scope(scope);
|
||||||
if (valueType)
|
if (valueType)
|
||||||
setValueType(tokenList->back());
|
setValueType(tokenList->back());
|
||||||
|
|
|
@ -1481,14 +1481,14 @@ void SymbolDatabase::setArrayDimensionsUsingValueFlow()
|
||||||
// In template arguments, there might not be AST
|
// In template arguments, there might not be AST
|
||||||
// Determine size by using the "raw tokens"
|
// Determine size by using the "raw tokens"
|
||||||
TokenList tokenList(mSettings);
|
TokenList tokenList(mSettings);
|
||||||
tokenList.addtoken(";", 0, 0, false);
|
tokenList.addtoken(";", 0, 0, 0, false);
|
||||||
bool fail = false;
|
bool fail = false;
|
||||||
for (const Token *tok = dimension.tok; tok && !Token::Match(tok, "[,>]"); tok = tok->next()) {
|
for (const Token *tok = dimension.tok; tok && !Token::Match(tok, "[,>]"); tok = tok->next()) {
|
||||||
if (!tok->isName())
|
if (!tok->isName())
|
||||||
tokenList.addtoken(tok->str(), 0, 0, false);
|
tokenList.addtoken(tok->str(), 0, 0, 0, false);
|
||||||
|
|
||||||
else if (tok->hasKnownIntValue())
|
else if (tok->hasKnownIntValue())
|
||||||
tokenList.addtoken(std::to_string(tok->getKnownIntValue()), 0, 0, false);
|
tokenList.addtoken(std::to_string(tok->getKnownIntValue()), 0, 0, 0, false);
|
||||||
|
|
||||||
else {
|
else {
|
||||||
fail = true;
|
fail = true;
|
||||||
|
@ -1499,7 +1499,7 @@ void SymbolDatabase::setArrayDimensionsUsingValueFlow()
|
||||||
if (fail)
|
if (fail)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
tokenList.addtoken(";", 0, 0, false);
|
tokenList.addtoken(";", 0, 0, 0, false);
|
||||||
|
|
||||||
for (Token *tok = tokenList.front(); tok;) {
|
for (Token *tok = tokenList.front(); tok;) {
|
||||||
if (TemplateSimplifier::simplifyNumericCalculations(tok, false))
|
if (TemplateSimplifier::simplifyNumericCalculations(tok, false))
|
||||||
|
@ -5860,11 +5860,11 @@ static const Token * parsedecl(const Token *type, ValueType * const valuetype, V
|
||||||
do {
|
do {
|
||||||
std::string::size_type pos2 = type->str().find("::", pos1);
|
std::string::size_type pos2 = type->str().find("::", pos1);
|
||||||
if (pos2 == std::string::npos) {
|
if (pos2 == std::string::npos) {
|
||||||
typeTokens.addtoken(type->str().substr(pos1), 0, 0, false);
|
typeTokens.addtoken(type->str().substr(pos1), 0, 0, 0, false);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
typeTokens.addtoken(type->str().substr(pos1, pos2 - pos1), 0, 0, false);
|
typeTokens.addtoken(type->str().substr(pos1, pos2 - pos1), 0, 0, 0, false);
|
||||||
typeTokens.addtoken("::", 0, 0, false);
|
typeTokens.addtoken("::", 0, 0, 0, false);
|
||||||
pos1 = pos2 + 2;
|
pos1 = pos2 + 2;
|
||||||
} while (pos1 < type->str().size());
|
} while (pos1 < type->str().size());
|
||||||
const Library::Container *container = settings->library.detectContainer(typeTokens.front());
|
const Library::Container *container = settings->library.detectContainer(typeTokens.front());
|
||||||
|
|
|
@ -1534,7 +1534,7 @@ void TemplateSimplifier::addNamespace(const TokenAndName &templateDeclaration, c
|
||||||
if (insert)
|
if (insert)
|
||||||
mTokenList.back()->tokAt(offset)->insertToken(token, "");
|
mTokenList.back()->tokAt(offset)->insertToken(token, "");
|
||||||
else
|
else
|
||||||
mTokenList.addtoken(token, tok->linenr(), tok->fileIndex());
|
mTokenList.addtoken(token, tok->linenr(), tok->column(), tok->fileIndex());
|
||||||
}
|
}
|
||||||
start = end + 1;
|
start = end + 1;
|
||||||
}
|
}
|
||||||
|
@ -1549,10 +1549,10 @@ void TemplateSimplifier::addNamespace(const TokenAndName &templateDeclaration, c
|
||||||
mTokenList.back()->tokAt(offset)->insertToken("::", "");
|
mTokenList.back()->tokAt(offset)->insertToken("::", "");
|
||||||
} else {
|
} else {
|
||||||
if (!inTemplate)
|
if (!inTemplate)
|
||||||
mTokenList.addtoken(templateDeclaration.scope().substr(start), tok->linenr(), tok->fileIndex());
|
mTokenList.addtoken(templateDeclaration.scope().substr(start), tok->linenr(), tok->column(), tok->fileIndex());
|
||||||
else
|
else
|
||||||
mTokenList.back()->str(mTokenList.back()->str() + templateDeclaration.scope().substr(start));
|
mTokenList.back()->str(mTokenList.back()->str() + templateDeclaration.scope().substr(start));
|
||||||
mTokenList.addtoken("::", tok->linenr(), tok->fileIndex());
|
mTokenList.addtoken("::", tok->linenr(), tok->column(), tok->fileIndex());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1906,7 +1906,7 @@ void TemplateSimplifier::expandTemplate(
|
||||||
if (copy) {
|
if (copy) {
|
||||||
if (!templateDeclaration.scope().empty() && tok5->strAt(-1) != "::")
|
if (!templateDeclaration.scope().empty() && tok5->strAt(-1) != "::")
|
||||||
addNamespace(templateDeclaration, tok5);
|
addNamespace(templateDeclaration, tok5);
|
||||||
mTokenList.addtoken(newName, tok5->linenr(), tok5->fileIndex());
|
mTokenList.addtoken(newName, tok5->linenr(), tok5->column(), tok5->fileIndex());
|
||||||
tok5 = tok5->next()->findClosingBracket();
|
tok5 = tok5->next()->findClosingBracket();
|
||||||
} else {
|
} else {
|
||||||
tok5->str(newName);
|
tok5->str(newName);
|
||||||
|
@ -1992,7 +1992,7 @@ void TemplateSimplifier::expandTemplate(
|
||||||
if (copy) {
|
if (copy) {
|
||||||
if (!templateDeclaration.scope().empty() && tok3->strAt(-1) != "::")
|
if (!templateDeclaration.scope().empty() && tok3->strAt(-1) != "::")
|
||||||
addNamespace(templateDeclaration, tok3);
|
addNamespace(templateDeclaration, tok3);
|
||||||
mTokenList.addtoken(newName, tok3->linenr(), tok3->fileIndex());
|
mTokenList.addtoken(newName, tok3->linenr(), tok3->column(), tok3->fileIndex());
|
||||||
}
|
}
|
||||||
|
|
||||||
while (tok3 && tok3->str() != "::")
|
while (tok3 && tok3->str() != "::")
|
||||||
|
@ -2204,7 +2204,7 @@ void TemplateSimplifier::expandTemplate(
|
||||||
Token::createMutualLinks(brackets.top(), mTokenList.back());
|
Token::createMutualLinks(brackets.top(), mTokenList.back());
|
||||||
if (tok3->strAt(1) == ";") {
|
if (tok3->strAt(1) == ";") {
|
||||||
const Token * tokSemicolon = tok3->next();
|
const Token * tokSemicolon = tok3->next();
|
||||||
mTokenList.addtoken(tokSemicolon, tokSemicolon->linenr(), tokSemicolon->fileIndex());
|
mTokenList.addtoken(tokSemicolon, tokSemicolon->linenr(), tokSemicolon->column(), tokSemicolon->fileIndex());
|
||||||
}
|
}
|
||||||
brackets.pop();
|
brackets.pop();
|
||||||
if (brackets.empty() && !Token::Match(tok3, "} >|,|{|%cop%")) {
|
if (brackets.empty() && !Token::Match(tok3, "} >|,|{|%cop%")) {
|
||||||
|
|
|
@ -187,7 +187,7 @@ void TokenList::deleteTokens(Token *tok)
|
||||||
// add a token.
|
// add a token.
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
void TokenList::addtoken(std::string str, const nonneg int lineno, const nonneg int fileno, bool split)
|
void TokenList::addtoken(std::string str, const nonneg int lineno, const nonneg int column, const nonneg int fileno, bool split)
|
||||||
{
|
{
|
||||||
if (str.empty())
|
if (str.empty())
|
||||||
return;
|
return;
|
||||||
|
@ -198,11 +198,11 @@ void TokenList::addtoken(std::string str, const nonneg int lineno, const nonneg
|
||||||
size_t end = 0;
|
size_t end = 0;
|
||||||
while ((end = str.find("##", begin)) != std::string::npos) {
|
while ((end = str.find("##", begin)) != std::string::npos) {
|
||||||
addtoken(str.substr(begin, end - begin), lineno, fileno, false);
|
addtoken(str.substr(begin, end - begin), lineno, fileno, false);
|
||||||
addtoken("##", lineno, fileno, false);
|
addtoken("##", lineno, column, fileno, false);
|
||||||
begin = end+2;
|
begin = end+2;
|
||||||
}
|
}
|
||||||
if (begin != 0) {
|
if (begin != 0) {
|
||||||
addtoken(str.substr(begin), lineno, fileno, false);
|
addtoken(str.substr(begin), lineno, column, fileno, false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -216,6 +216,7 @@ void TokenList::addtoken(std::string str, const nonneg int lineno, const nonneg
|
||||||
}
|
}
|
||||||
|
|
||||||
mTokensFrontBack.back->linenr(lineno);
|
mTokensFrontBack.back->linenr(lineno);
|
||||||
|
mTokensFrontBack.back->column(column);
|
||||||
mTokensFrontBack.back->fileIndex(fileno);
|
mTokensFrontBack.back->fileIndex(fileno);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -237,7 +238,7 @@ void TokenList::addtoken(std::string str, const Token *locationTok)
|
||||||
mTokensFrontBack.back->fileIndex(locationTok->fileIndex());
|
mTokensFrontBack.back->fileIndex(locationTok->fileIndex());
|
||||||
}
|
}
|
||||||
|
|
||||||
void TokenList::addtoken(const Token * tok, const nonneg int lineno, const nonneg int fileno)
|
void TokenList::addtoken(const Token * tok, const nonneg int lineno, const nonneg int column, const nonneg int fileno)
|
||||||
{
|
{
|
||||||
if (tok == nullptr)
|
if (tok == nullptr)
|
||||||
return;
|
return;
|
||||||
|
@ -253,6 +254,7 @@ void TokenList::addtoken(const Token * tok, const nonneg int lineno, const nonne
|
||||||
}
|
}
|
||||||
|
|
||||||
mTokensFrontBack.back->linenr(lineno);
|
mTokensFrontBack.back->linenr(lineno);
|
||||||
|
mTokensFrontBack.back->column(column);
|
||||||
mTokensFrontBack.back->fileIndex(fileno);
|
mTokensFrontBack.back->fileIndex(fileno);
|
||||||
mTokensFrontBack.back->flags(tok->flags());
|
mTokensFrontBack.back->flags(tok->flags());
|
||||||
}
|
}
|
||||||
|
|
|
@ -68,10 +68,10 @@ public:
|
||||||
*/
|
*/
|
||||||
static void deleteTokens(Token *tok);
|
static void deleteTokens(Token *tok);
|
||||||
|
|
||||||
void addtoken(std::string str, const nonneg int lineno, const nonneg int fileno, bool split = false);
|
void addtoken(std::string str, const nonneg int lineno, const nonneg int column, const nonneg int fileno, bool split = false);
|
||||||
void addtoken(std::string str, const Token *locationTok);
|
void addtoken(std::string str, const Token *locationTok);
|
||||||
|
|
||||||
void addtoken(const Token *tok, const nonneg int lineno, const nonneg int fileno);
|
void addtoken(const Token *tok, const nonneg int lineno, const nonneg int column, const nonneg int fileno);
|
||||||
void addtoken(const Token *tok, const Token *locationTok);
|
void addtoken(const Token *tok, const Token *locationTok);
|
||||||
void addtoken(const Token *tok);
|
void addtoken(const Token *tok);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue