From 1cf8b1345e699ff0389261a93f47c8e94b454f7b Mon Sep 17 00:00:00 2001 From: Rene Gollent Date: Mon, 27 Oct 2014 13:52:31 -0400 Subject: [PATCH] Debugger: Fix various problems in CLanguageExpressionEvaluator. - Add missing initialization of current type when asked to evaluate new expression. - Fix several problems with power handling. --- .../CLanguageExpressionEvaluator.cpp | 26 ++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/src/apps/debugger/source_language/expression_evaluators/CLanguageExpressionEvaluator.cpp b/src/apps/debugger/source_language/expression_evaluators/CLanguageExpressionEvaluator.cpp index 27a8a9302b..6f75bdf6b6 100644 --- a/src/apps/debugger/source_language/expression_evaluators/CLanguageExpressionEvaluator.cpp +++ b/src/apps/debugger/source_language/expression_evaluators/CLanguageExpressionEvaluator.cpp @@ -527,8 +527,11 @@ CLanguageExpressionEvaluator::~CLanguageExpressionEvaluator() Number -CLanguageExpressionEvaluator::Evaluate(const char* expressionString, type_code type) +CLanguageExpressionEvaluator::Evaluate(const char* expressionString, + type_code type) { + fCurrentType = type; + fTokenizer->SetType(type); fTokenizer->SetTo(expressionString); @@ -696,8 +699,25 @@ CLanguageExpressionEvaluator::_ParsePower() Number power = _ParseUnary(); Number temp = value; - for (int32 powerValue = power.GetValue().ToInt32(); powerValue > 1; powerValue--) - value *= temp; + 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; + } + + if (handleNegativePower) { + temp.SetTo(fCurrentType, "1"); + temp /= value; + value = temp; + } } }