From a20472dccc64b943dede1174b04d8a6ec81a9ec3 Mon Sep 17 00:00:00 2001 From: guy Date: Mon, 3 Oct 1994 11:23:56 +0000 Subject: [PATCH] Adeguata valutazione della funzione mid con TString::mid git-svn-id: svn://10.65.10.50/trunk@305 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- include/expr.cpp | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/include/expr.cpp b/include/expr.cpp index 4fbc45322..0b1fc905b 100755 --- a/include/expr.cpp +++ b/include/expr.cpp @@ -455,12 +455,13 @@ void TExpression::eval() evalstack.push(s1); break; case _mid: - o2 = (real&) evalstack.pop(); - o1 = (real&) evalstack.pop(); - o1 -= 1.00; - s2 = (TString&) evalstack.pop(); - s1 = s2.mid((int)o1.integer(), (int)o2.integer()); - evalstack.push(s1); + { + int count = (int)((const real&)evalstack.pop()).integer(); + if (count == 0) count--; + const int from = (int)((const real&)evalstack.pop()).integer() - 1; + const TString& s = ((const TString&)evalstack.pop()).mid(from, count); + evalstack.push(s); + } break; case _pow: o2 = (real&) evalstack.pop(); @@ -468,8 +469,8 @@ void TExpression::eval() evalstack.push(pow(o1, o2)); break; case _min: - o2 = (real&) evalstack.pop(); - o1 = (real&) evalstack.pop(); + o2 = (real&)evalstack.pop(); + o1 = (real&)evalstack.pop(); evalstack.push(fnc_min(o1, o2)); break; case _max: @@ -837,7 +838,7 @@ bool TExpression::compile(const char* expression, TTypeexp type) else { const int n2 = atoi(s2); - sc << format(" mid(%s,%d,%d)", _tok, n1, (n2 < n1) ? -1 : n2 - n1 + 1); + sc << format(" mid(%s,%d,%d)", _tok, n1, (n2 < n1) ? 0 : n2 - n1 + 1); } } }