@@ -273,35 +273,36 @@ bool astIsContainerString(const Token* tok)
273273 return container->stdStringLike ;
274274}
275275
276- static const Token* getContainerFunction (const Token* tok)
276+ static std::pair< const Token*, const Library::Container*> getContainerFunction (const Token* tok, const Settings* settings )
277277{
278- if (!tok || !tok->valueType () || !tok->valueType ()->container )
279- return nullptr ;
278+ const Library::Container* cont{};
279+ if (!tok || !tok->valueType () || (!tok->valueType ()->container && (!settings || !(cont = settings->library .detectContainerOrIterator (tok->valueType ()->smartPointerTypeToken )))))
280+ return {};
280281 const Token* parent = tok->astParent ();
281282 if (Token::Match (parent, " . %name% (" ) && astIsLHS (tok)) {
282- return parent->next ();
283+ return { parent->next (), cont ? cont : tok-> valueType ()-> container } ;
283284 }
284- return nullptr ;
285+ return {} ;
285286}
286287
287- Library::Container::Action astContainerAction (const Token* tok, const Token** ftok)
288+ Library::Container::Action astContainerAction (const Token* tok, const Token** ftok, const Settings* settings )
288289{
289- const Token* ftok2 = getContainerFunction (tok);
290+ const auto ftokCont = getContainerFunction (tok, settings );
290291 if (ftok)
291- *ftok = ftok2 ;
292- if (!ftok2 )
292+ *ftok = ftokCont. first ;
293+ if (!ftokCont. first )
293294 return Library::Container::Action::NO_ACTION;
294- return tok-> valueType ()-> container -> getAction (ftok2 ->str ());
295+ return ftokCont. second -> getAction (ftokCont. first ->str ());
295296}
296297
297- Library::Container::Yield astContainerYield (const Token* tok, const Token** ftok)
298+ Library::Container::Yield astContainerYield (const Token* tok, const Token** ftok, const Settings* settings )
298299{
299- const Token* ftok2 = getContainerFunction (tok);
300+ const auto ftokCont = getContainerFunction (tok, settings );
300301 if (ftok)
301- *ftok = ftok2 ;
302- if (!ftok2 )
302+ *ftok = ftokCont. first ;
303+ if (!ftokCont. first )
303304 return Library::Container::Yield::NO_YIELD;
304- return tok-> valueType ()-> container -> getYield (ftok2 ->str ());
305+ return ftokCont. second -> getYield (ftokCont. first ->str ());
305306}
306307
307308Library::Container::Yield astFunctionYield (const Token* tok, const Settings& settings, const Token** ftok)
0 commit comments