| 281 | } |
| 282 | |
| 283 | static int isCallFunction(const Scope *scope, int argnr, const Token *&tok) |
| 284 | { |
| 285 | const Variable * const argvar = scope->function->getArgumentVar(argnr); |
| 286 | if (!argvar->isPointer()) |
| 287 | return -1; |
| 288 | for (const Token *tok2 = scope->bodyStart; tok2 != scope->bodyEnd; tok2 = tok2->next()) { |
| 289 | if (tok2->variable() != argvar) |
| 290 | continue; |
| 291 | if (!Token::Match(tok2->previous(), "[(,] %var% [,)]")) |
| 292 | break; |
| 293 | int argnr2 = 1; |
| 294 | const Token *prev = tok2; |
| 295 | while (prev && prev->str() != "(") { |
| 296 | if (Token::Match(prev,"]|)")) |
| 297 | prev = prev->link(); |
| 298 | else if (prev->str() == ",") |
| 299 | ++argnr2; |
| 300 | prev = prev->previous(); |
| 301 | } |
| 302 | if (!prev || !Token::Match(prev->previous(), "%name% (")) |
| 303 | break; |
| 304 | if (!prev->astOperand1() || !prev->astOperand1()->function()) |
| 305 | break; |
| 306 | tok = prev->previous(); |
| 307 | return argnr2; |
| 308 | } |
| 309 | return -1; |
| 310 | } |
| 311 | |
| 312 | |
| 313 | const CTU::FileInfo *CTU::getFileInfo(const Tokenizer &tokenizer) |
no test coverage detected