MCPcopy Create free account
hub / github.com/cppcheck-opensource/cppcheck / iscast

Function iscast

lib/tokenlist.cpp:485–555  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

483}
484
485static bool iscast(const Token *tok, bool cpp)
486{
487 if (!Token::Match(tok, "( ::| %name%"))
488 return false;
489
490 if (Token::simpleMatch(tok->link(), ") ( )"))
491 return false;
492
493 if (Token::Match(tok->link(), ") %assign%|,|..."))
494 return false;
495
496 if (tok->previous() && tok->previous()->isName() && !Token::Match(tok->previous(), "return|case") &&
497 (!cpp || !Token::Match(tok->previous(), "delete|throw")))
498 return false;
499
500 if (Token::simpleMatch(tok->previous(), ">") && tok->linkAt(-1))
501 return false;
502
503 if (Token::Match(tok, "( (| typeof (") && Token::Match(tok->link(), ") %num%"))
504 return true;
505
506 if (Token::Match(tok->link(), ") }|)|]|;"))
507 return false;
508
509 if (Token::Match(tok->link(), ") ++|-- [;)]"))
510 return false;
511
512 if (Token::Match(tok->link(), ") %cop%") && !Token::Match(tok->link(), ") [&*+-~!]"))
513 return false;
514
515 if (Token::Match(tok->previous(), "= ( %name% ) {") && tok->next()->varId() == 0)
516 return true;
517
518 bool type = false;
519 for (const Token *tok2 = tok->next(); tok2; tok2 = tok2->next()) {
520 if (tok2->varId() != 0)
521 return false;
522 if (cpp && !type && tok2->str() == "new")
523 return false;
524
525 while (tok2->link() && Token::Match(tok2, "(|[|<"))
526 tok2 = tok2->link()->next();
527
528 if (tok2->str() == ")") {
529 if (Token::simpleMatch(tok2, ") (") && Token::simpleMatch(tok2->linkAt(1), ") ."))
530 return true;
531 if (Token::simpleMatch(tok2, ") {") && !type) {
532 const Token *tok3 = tok2->linkAt(1);
533 while (tok3 != tok2 && Token::Match(tok3, "[{}]"))
534 tok3 = tok3->previous();
535 return tok3->str() != ";";
536 }
537 const bool res = type || tok2->strAt(-1) == "*" || Token::simpleMatch(tok2, ") ~") ||
538 (Token::Match(tok2, ") %any%") &&
539 (!tok2->next()->isOp() || Token::Match(tok2->next(), "!|~|++|--")) &&
540 !Token::Match(tok2->next(), "[[]);,?:.]"));
541 return res;
542 }

Callers 4

compileTermFunction · 0.85
isPrefixUnaryFunction · 0.85
compilePrecedence2Function · 0.85
compilePrecedence3Function · 0.85

Calls 7

linkAtMethod · 0.80
nextMethod · 0.80
isOpMethod · 0.80
simpleMatchFunction · 0.70
strMethod · 0.45
isStandardTypeMethod · 0.45
tokAtMethod · 0.45

Tested by

no test coverage detected