48 friend class TestSimplifyTokens;
49 friend class TestSimplifyTypedef;
50 friend class TestTokenizer;
77 bool IsScopeNoReturn(
const Token *endScopeToken,
bool *unknown =
nullptr)
const;
79 bool createTokens(std::istream &code,
const std::string& FileName);
80 void createTokens(
const simplecpp::TokenList *tokenList);
82 bool simplifyTokens1(
const std::string &configuration);
104 bool tokenize(std::istream &code,
105 const char FileName[],
110 void setVarIdPass1();
111 void setVarIdPass2();
122 bool simplifyTokenList1(
const char FileName[]);
124 void SimplifyNamelessRValueReferences();
132 bool simplifyTokenList2();
149 static void eraseDeadCode(
Token *begin,
const Token *end);
155 void simplifyMulAndParens();
170 bool isFunctionParameterPassedByValue(
const Token *fpar)
const;
174 void simplifyAssignmentInFunctionCall();
177 void simplifyAssignmentBlock();
184 bool simplifyCalculations();
191 void simplifyOffsetPointerDereference();
197 void simplifyOffsetPointerReference();
204 void simplifyLabelsCaseDefault();
208 void simplifyCaseRange();
211 void removeMacrosInGlobalScope();
217 void removeMacroInClassDef();
220 void removeMacroInVarDecl();
223 void removeRedundantAssignment();
229 void simplifyRealloc();
232 void sizeofAddParentheses();
239 bool simplifySizeof();
245 void simplifyVarDecl(
const bool only_k_r_fpar);
246 void simplifyVarDecl(
Token * tokBegin,
const Token *
const tokEnd,
const bool only_k_r_fpar);
252 void simplifyInitVar();
260 void simplifyPlatformTypes();
268 bool simplifyConstTernaryOp();
274 void simplifyCompoundAssignment();
282 void simplifyStaticConst();
290 void simplifyIfAndWhileAssign();
296 void simplifyVariableMultipleAssign();
305 bool simplifyCAlternativeTokens();
313 void simplifyComma();
318 bool simplifyAddBraces();
326 Token * simplifyAddBracesToCommand(
Token * tok);
334 Token * simplifyAddBracesPair(
Token *tok,
bool commandWithCondition);
344 void simplifyTypedef();
349 void simplifyCasts();
354 void simplifyUndefinedSizeArray();
363 bool simplifyKnownVariables();
369 static bool simplifyKnownVariablesGetData(
unsigned int varid,
Token **_tok2,
Token **_tok3, std::string &value,
unsigned int &valueVarId,
bool &valueIsPointer,
bool floatvar);
375 bool simplifyKnownVariablesSimplify(
Token **tok2,
Token *tok3,
unsigned int varid,
const std::string &structname, std::string &value,
unsigned int valueVarId,
bool valueIsPointer,
const Token *
const valueToken,
int indentlevel)
const;
378 void simplifyEmptyNamespaces();
383 void simplifyFlowControl();
386 void simplifyNestedStrcat();
395 bool simplifyConditions();
402 bool removeRedundantConditions();
408 void removeRedundantFor();
414 void removeRedundantSemicolons();
420 bool simplifyFunctionReturn();
426 void simplifyStructDecl();
437 bool simplifyRedundantParentheses();
439 void simplifyCharAt();
442 void simplifyReference();
448 void simplifyFunctionParameters();
453 void simplifyTemplates();
455 void simplifyDoublePlusAndDoubleMinus();
457 void simplifyRedundantConsecutiveBraces();
459 void simplifyArrayAccessSyntax();
461 void simplifyParameterVoid();
463 void fillTypeSizes();
465 void combineOperators();
467 void combineStringAndCharLiterals();
469 void concatenateNegativeNumberAndAnyPositive();
471 void simplifyExternC();
473 void simplifyRoundCurlyParentheses();
477 void checkForEnumsWithTypedef();
479 void findComplicatedSyntaxErrorsInTemplates();
484 void simplifyMathFunctions();
489 void simplifyMathExpressions();
497 static std::string simplifyString(
const std::string &source);
521 void simplifyWhile0();
526 void simplifyErrNoInWhile();
531 void simplifyFuncInWhile();
539 void simplifyPointerToStandardType();
542 void simplifyFunctionPointers();
548 void cppcheckError(
const Token *tok)
const;
563 void syntaxError(
const Token *tok)
const;
566 void syntaxError(
const Token *tok,
char c)
const;
569 void syntaxErrorC(
const Token *tok,
const std::string &what)
const;
574 void unhandled_macro_class_x_y(
const Token *tok)
const;
577 void checkConfiguration()
const;
578 void macroWithSemicolonError(
const Token *tok,
const std::string ¯oName)
const;
583 void validateC()
const;
592 void findGarbageCode()
const;
595 static bool isGarbageExpr(
const Token *start,
const Token *end);
600 void simplifyDeclspec();
605 void simplifyCallingConvention();
610 void simplifyAttribute();
615 void simplifyKeyword();
630 void simplifyBitfields();
635 void removeUnnecessaryQualification();
640 void simplifyNamespaceStd();
649 void simplifyMicrosoftMemoryFunctions();
655 void simplifyMicrosoftStringFunctions();
660 void simplifyBorland();
665 void simplifyQtSignalsSlots();
671 void simplifyOperatorName();
676 void simplifyCPPAttribute();
682 bool simplifyStrlen();
687 void prepareTernaryOpForAST();
692 static bool duplicateDefinition(
Token **tokPtr);
697 void reportError(
const Token* tok,
const Severity::SeverityType severity,
const std::string&
id,
const std::string& msg,
bool inconclusive =
false)
const;
698 void reportError(
const std::list<const Token*>& callstack,
Severity::SeverityType severity,
const std::string&
id,
const std::string& msg,
bool inconclusive =
false)
const;
700 bool duplicateTypedef(
Token **tokPtr,
const Token *name,
const Token *typeDef)
const;
702 void unsupportedTypedef(
const Token *tok)
const;
704 void setVarIdClassDeclaration(
const Token *
const startToken,
705 const std::map<std::string, unsigned int> &variableId,
706 const unsigned int scopeStartVarId,
707 std::map<
unsigned int, std::map<std::string,unsigned int> >& structMembers);
714 void simplifyReturnStrncat();
719 void printUnknownTypes()
const;
722 static const Token *findSQLBlockEnd(
const Token *tokSQLStart);
728 return _codeWithTemplates;
734 list.setSettings(settings);
738 return _symbolDatabase;
740 void createSymbolDatabase();
741 void deleteSymbolDatabase();
748 void printDebugOutput(
unsigned int simplification)
const;
750 void dump(std::ostream &out)
const;
776 static bool isZeroNumber(
const std::string &s);
783 static bool isOneNumber(
const std::string &s);
790 static bool isTwoNumber(
const std::string &s);
798 static const Token * startOfExecutableScope(
const Token * tok);
801 bool isMaxTime()
const {
802 return (std::time(0) > maxtime);
816 Token *processFunc(
Token *tok2,
bool inOperator)
const;