Skip to content

Commit

Permalink
fix 13452
Browse files Browse the repository at this point in the history
  • Loading branch information
ludviggunne committed Jan 22, 2025
1 parent 204c821 commit b4b09b6
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 10 deletions.
27 changes: 22 additions & 5 deletions lib/library.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1339,17 +1339,34 @@ const Library::Container* Library::detectContainerInternal(const Token* const ty
const int offset = (withoutStd && startsWith(container.startPattern2, "std :: ")) ? 7 : 0;

// If endPattern is undefined, it will always match, but itEndPattern has to be defined.
if (detect != IteratorOnly && container.endPattern.empty()) {
if (!Token::Match(typeStart, container.startPattern2.c_str() + offset))
continue;

if (detect != IteratorOnly && container.endPattern.empty() &&
Token::Match(typeStart, container.startPattern2.c_str() + offset)) {
if (isIterator)
*isIterator = false;
return &container;
}

if (!firstLinkedTok)
if (!firstLinkedTok) {
if (detect != ContainerOnly && !container.itEndPattern.empty()) {
const std::string pattern = container.startPattern + " " + container.itEndPattern;
if (Token::Match(typeStart, pattern.c_str() + offset)) {
if (isIterator)
*isIterator = true;
return &container;
}
}

if (detect != IteratorOnly && !container.endPattern.empty()) {
const std::string pattern = container.startPattern + " " + container.endPattern;
if (Token::Match(typeStart, pattern.c_str() + offset)) {
if (isIterator)
*isIterator = false;
return &container;
}
}

continue;
}

const bool matchedStartPattern = Token::Match(typeStart, container.startPattern2.c_str() + offset);
if (!matchedStartPattern)
Expand Down
10 changes: 5 additions & 5 deletions test/testlibrary.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -978,10 +978,10 @@ class TestLibrary : public TestFixture {
{
const SimpleTokenizer var(*this, "std::F::iterator I;");
ASSERT(!library.detectContainer(var.tokens()));
TODO_ASSERT(library.detectIterator(var.tokens()));
ASSERT(library.detectIterator(var.tokens()));
bool isIterator = false;
TODO_ASSERT_EQUALS((intptr_t)&F, 0, (intptr_t)library.detectContainerOrIterator(var.tokens(), &isIterator));
TODO_ASSERT(isIterator);
ASSERT_EQUALS((intptr_t)&F, (intptr_t)library.detectContainerOrIterator(var.tokens(), &isIterator));
ASSERT(isIterator);
}

{
Expand All @@ -990,8 +990,8 @@ class TestLibrary : public TestFixture {
ASSERT(!library.detectIterator(var.tokens()));
ASSERT(!library.detectContainerOrIterator(var.tokens()));
bool isIterator = false;
TODO_ASSERT_EQUALS((intptr_t)&F, 0, (intptr_t)library.detectContainerOrIterator(var.tokens(), &isIterator, true));
TODO_ASSERT(isIterator);
ASSERT_EQUALS((intptr_t)&F, (intptr_t)library.detectContainerOrIterator(var.tokens(), &isIterator, true));
ASSERT(isIterator);
}
}

Expand Down

0 comments on commit b4b09b6

Please sign in to comment.