@@ -3436,9 +3436,6 @@ bool Tokenizer::simplifyTokenList1(const char FileName[])
34363436 // syntax is corrected.
34373437 TemplateSimplifier::cleanupAfterSimplify (list.front ());
34383438
3439- // Simplify the operator "?:"
3440- simplifyConditionOperator ();
3441-
34423439 // Collapse operator name tokens into single token
34433440 // operator = => operator=
34443441 simplifyOperatorName ();
@@ -3670,8 +3667,6 @@ bool Tokenizer::simplifyTokenList2()
36703667 modified |= simplifyCalculations ();
36713668 }
36723669
3673- simplifyConditionOperator ();
3674-
36753670 // simplify redundant for
36763671 removeRedundantFor ();
36773672
@@ -4469,105 +4464,6 @@ void Tokenizer::simplifyCompoundAssignment()
44694464 }
44704465}
44714466
4472- void Tokenizer::simplifyConditionOperator ()
4473- {
4474- for (Token *tok = list.front (); tok; tok = tok->next ()) {
4475- if (tok->str () == " (" || tok->str () == " [" ||
4476- (tok->str () == " {" && tok->previous () && tok->previous ()->str () == " =" ))
4477- tok = tok->link ();
4478-
4479- if (Token::Match (tok, " [{};] *| %var% = %any% ? %any% : %any% ;" ) ||
4480- Token::Match (tok, " [{};] return %any% ? %any% : %any% ;" )) {
4481-
4482- // backup varids so they can be set properly
4483- std::map<std::string, unsigned int > varid;
4484- for (const Token *tok2 = tok->next (); tok2->str () != " ;" ; tok2 = tok2->next ()) {
4485- if (tok2->varId ())
4486- varid[tok2->str ()] = tok2->varId ();
4487- }
4488-
4489- std::string var (tok->next ()->str ());
4490- bool isPointer = false ;
4491- bool isReturn = false ;
4492- if (tok->next ()->str () == " *" ) {
4493- tok = tok->next ();
4494- var = tok->next ()->str ();
4495- isPointer = true ;
4496- } else if (tok->next ()->str () == " return" ) {
4497- isReturn = true ;
4498- }
4499-
4500- Token *tok2 = tok->tokAt (3 - (isReturn ? 1 : 0 ));
4501- if (!tok2->isName () && !tok2->isNumber () && tok2->str ()[0 ] != ' \" ' )
4502- continue ;
4503- const std::string condition (tok2->str ());
4504- tok2 = tok2->tokAt (2 );
4505- if (!tok2->isName () && !tok2->isNumber () && tok2->str ()[0 ] != ' \" ' )
4506- continue ;
4507- const std::string value1 (tok2->str ());
4508- tok2 = tok2->tokAt (2 );
4509- if (!tok2->isName () && !tok2->isNumber () && tok2->str ()[0 ] != ' \" ' )
4510- continue ;
4511- const std::string value2 (tok2->str ());
4512-
4513- if (isPointer) {
4514- tok = tok->previous ();
4515- tok->deleteNext (9 );
4516- } else if (isReturn)
4517- tok->deleteNext (6 );
4518- else
4519- tok->deleteNext (8 );
4520-
4521- Token *starttok = nullptr ;
4522-
4523- std::string str;
4524- if (isReturn)
4525- str = " if ( condition ) { return value1 ; } return value2 ;" ;
4526- else
4527- str = " if ( condition ) { * var = value1 ; } else { * var = value2 ; }" ;
4528-
4529- std::string::size_type pos1 = 0 ;
4530- while (pos1 != std::string::npos) {
4531- if (str[pos1] == ' *' ) {
4532- pos1 += 2 ;
4533- if (isPointer) {
4534- tok->insertToken (" *" );
4535- tok = tok->next ();
4536- }
4537- }
4538- std::string::size_type pos2 = str.find (" " , pos1);
4539- if (pos2 == std::string::npos) {
4540- tok->insertToken (str.substr (pos1));
4541- pos1 = pos2;
4542- } else {
4543- tok->insertToken (str.substr (pos1, pos2 - pos1));
4544- pos1 = pos2 + 1 ;
4545- }
4546- tok = tok->next ();
4547-
4548- // set links.
4549- if (tok->str () == " (" || tok->str () == " {" )
4550- starttok = tok;
4551- else if (starttok && (tok->str () == " )" || tok->str () == " }" )) {
4552- Token::createMutualLinks (starttok, tok);
4553- starttok = 0 ;
4554- } else if (tok->str () == " condition" )
4555- tok->str (condition);
4556- else if (tok->str () == " var" )
4557- tok->str (var);
4558- else if (tok->str () == " value1" )
4559- tok->str (value1);
4560- else if (tok->str () == " value2" )
4561- tok->str (value2);
4562-
4563- // set varid.
4564- if (varid.find (tok->str ()) != varid.end ())
4565- tok->varId (varid[tok->str ()]);
4566- }
4567- }
4568- }
4569- }
4570-
45714467bool Tokenizer::simplifyConditions ()
45724468{
45734469 bool ret = false ;
0 commit comments