Refactoring MathLib: Report errors through the tokenizer. Ticket: #1839
This commit is contained in:
parent
84e576de04
commit
dd07d82c34
|
@ -406,8 +406,8 @@ void CheckBufferOverrun::parse_for_body(const Token *tok2, const ArrayInfo &arra
|
||||||
//printf("min_index: %s %c %s\n", min_counter_value.c_str(), action, second.c_str());
|
//printf("min_index: %s %c %s\n", min_counter_value.c_str(), action, second.c_str());
|
||||||
//printf("max_index: %s %c %s\n", max_counter_value.c_str(), action, second.c_str());
|
//printf("max_index: %s %c %s\n", max_counter_value.c_str(), action, second.c_str());
|
||||||
|
|
||||||
min_index = std::atoi(MathLib::calculate(min_counter_value, second, action).c_str());
|
min_index = std::atoi(MathLib::calculate(min_counter_value, second, action, _tokenizer).c_str());
|
||||||
max_index = std::atoi(MathLib::calculate(max_counter_value, second, action).c_str());
|
max_index = std::atoi(MathLib::calculate(max_counter_value, second, action, _tokenizer).c_str());
|
||||||
}
|
}
|
||||||
else if (Token::Match(tok2, "%varid% [ %num% +|-|*|/ %var% ]", arrayInfo.varid) &&
|
else if (Token::Match(tok2, "%varid% [ %num% +|-|*|/ %var% ]", arrayInfo.varid) &&
|
||||||
tok2->tokAt(4)->varId() == counter_varid)
|
tok2->tokAt(4)->varId() == counter_varid)
|
||||||
|
@ -418,8 +418,8 @@ void CheckBufferOverrun::parse_for_body(const Token *tok2, const ArrayInfo &arra
|
||||||
//printf("min_index: %s %c %s\n", first.c_str(), action, min_counter_value.c_str());
|
//printf("min_index: %s %c %s\n", first.c_str(), action, min_counter_value.c_str());
|
||||||
//printf("max_index: %s %c %s\n", first.c_str(), action, max_counter_value.c_str());
|
//printf("max_index: %s %c %s\n", first.c_str(), action, max_counter_value.c_str());
|
||||||
|
|
||||||
min_index = std::atoi(MathLib::calculate(first, min_counter_value, action).c_str());
|
min_index = std::atoi(MathLib::calculate(first, min_counter_value, action, _tokenizer).c_str());
|
||||||
max_index = std::atoi(MathLib::calculate(first, max_counter_value, action).c_str());
|
max_index = std::atoi(MathLib::calculate(first, max_counter_value, action, _tokenizer).c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
//printf("min_index = %d, max_index = %d, size = %d\n", min_index, max_index, size);
|
//printf("min_index = %d, max_index = %d, size = %d\n", min_index, max_index, size);
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
|
|
||||||
|
|
||||||
#include "mathlib.h"
|
#include "mathlib.h"
|
||||||
|
#include "tokenize.h"
|
||||||
|
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
@ -245,7 +245,7 @@ std::string MathLib::multiply(const std::string &first, const std::string &secon
|
||||||
return toString<double>(toDoubleNumber(first) * toDoubleNumber(second));
|
return toString<double>(toDoubleNumber(first) * toDoubleNumber(second));
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string MathLib::calculate(const std::string &first, const std::string &second, char action)
|
std::string MathLib::calculate(const std::string &first, const std::string &second, char action, const Tokenizer *tokenizer)
|
||||||
{
|
{
|
||||||
std::string result("0");
|
std::string result("0");
|
||||||
|
|
||||||
|
@ -268,11 +268,7 @@ std::string MathLib::calculate(const std::string &first, const std::string &seco
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
std::cerr << "##### If you see this, there is a bug: "
|
tokenizer->cppcheckError(0);
|
||||||
<< "MathLib::calculate() was called with unknown action '"
|
|
||||||
<< action
|
|
||||||
<< "' #####"
|
|
||||||
<< std::endl;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,8 @@
|
||||||
|
|
||||||
/** @brief simple math functions that uses operands stored in std::string. useful when performing math on tokens. */
|
/** @brief simple math functions that uses operands stored in std::string. useful when performing math on tokens. */
|
||||||
|
|
||||||
|
class Tokenizer;
|
||||||
|
|
||||||
class MathLib
|
class MathLib
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -44,7 +46,7 @@ public:
|
||||||
static std::string subtract(const std::string & first, const std::string & second);
|
static std::string subtract(const std::string & first, const std::string & second);
|
||||||
static std::string multiply(const std::string & first, const std::string & second);
|
static std::string multiply(const std::string & first, const std::string & second);
|
||||||
static std::string divide(const std::string & first, const std::string & second);
|
static std::string divide(const std::string & first, const std::string & second);
|
||||||
static std::string calculate(const std::string & first, const std::string & second, char action);
|
static std::string calculate(const std::string & first, const std::string & second, char action, const Tokenizer *tokenizer);
|
||||||
|
|
||||||
static std::string sin(const std::string & tok);
|
static std::string sin(const std::string & tok);
|
||||||
static std::string cos(const std::string & tok);
|
static std::string cos(const std::string & tok);
|
||||||
|
|
|
@ -5880,9 +5880,9 @@ bool Tokenizer::simplifyCalculations()
|
||||||
if (Token::Match(tok->previous(), "- %num% - %num%"))
|
if (Token::Match(tok->previous(), "- %num% - %num%"))
|
||||||
tok->str(MathLib::add(tok->str(), tok->tokAt(2)->str()));
|
tok->str(MathLib::add(tok->str(), tok->tokAt(2)->str()));
|
||||||
else if (Token::Match(tok->previous(), "- %num% + %num%"))
|
else if (Token::Match(tok->previous(), "- %num% + %num%"))
|
||||||
tok->str(MathLib::sub(tok->str(), tok->tokAt(2)->str()));
|
tok->str(MathLib::subtract(tok->str(), tok->tokAt(2)->str()));
|
||||||
else
|
else
|
||||||
tok->str(MathLib::calculate(tok->str(), tok->tokAt(2)->str(), tok->strAt(1)[0]));
|
tok->str(MathLib::calculate(tok->str(), tok->tokAt(2)->str(), tok->strAt(1)[0], this));
|
||||||
|
|
||||||
Token::eraseTokens(tok, tok->tokAt(3));
|
Token::eraseTokens(tok, tok->tokAt(3));
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue