Debugger: Fix various problems in CLanguageExpressionEvaluator.

- Add missing initialization of current type when asked to
  evaluate new expression.
- Fix several problems with power handling.
This commit is contained in:
Rene Gollent
2014-10-27 13:52:31 -04:00
parent 1b629877b1
commit 1cf8b1345e
@@ -527,8 +527,11 @@ CLanguageExpressionEvaluator::~CLanguageExpressionEvaluator()
Number Number
CLanguageExpressionEvaluator::Evaluate(const char* expressionString, type_code type) CLanguageExpressionEvaluator::Evaluate(const char* expressionString,
type_code type)
{ {
fCurrentType = type;
fTokenizer->SetType(type); fTokenizer->SetType(type);
fTokenizer->SetTo(expressionString); fTokenizer->SetTo(expressionString);
@@ -696,9 +699,26 @@ CLanguageExpressionEvaluator::_ParsePower()
Number power = _ParseUnary(); Number power = _ParseUnary();
Number temp = value; Number temp = value;
for (int32 powerValue = power.GetValue().ToInt32(); powerValue > 1; powerValue--) int32 powerValue = power.GetValue().ToInt32();
bool handleNegativePower = false;
if (powerValue < 0) {
powerValue = abs(powerValue);
handleNegativePower = true;
}
if (powerValue == 0)
value.SetTo(fCurrentType, "1");
else {
for (; powerValue > 1; powerValue--)
value *= temp; value *= temp;
} }
if (handleNegativePower) {
temp.SetTo(fCurrentType, "1");
temp /= value;
value = temp;
}
}
} }