aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoroharboe <oharboe>2009-08-16 11:24:49 +0000
committeroharboe <oharboe>2009-08-16 11:24:49 +0000
commitff7ab6e5a401cd728ab5a440659346bd50e0e9c9 (patch)
treead4ff024b4deb36495495db3f37959f851019248
parent49bad8e52dd1dcd0b9fb921e13c29560f14911a3 (diff)
downloadjimtcl-ff7ab6e5a401cd728ab5a440659346bd50e0e9c9.zip
jimtcl-ff7ab6e5a401cd728ab5a440659346bd50e0e9c9.tar.gz
jimtcl-ff7ab6e5a401cd728ab5a440659346bd50e0e9c9.tar.bz2
2009-08-16 Steve Bennett <steveb@workware.net.au>
* jim.c: Should be able to compare strings for order in expr
-rw-r--r--ChangeLog3
-rw-r--r--jim.c20
2 files changed, 16 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index 902a116..44d1a23 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,6 @@
2009-08-16 Steve Bennett <steveb@workware.net.au>
-
+
+ * jim.c: Should be able to compare strings for order in expr
* jim.c: 'unset ::var' to unset a global var.
It was doing nothing.
diff --git a/jim.c b/jim.c
index 3c74aa2..a1c1f63 100644
--- a/jim.c
+++ b/jim.c
@@ -7030,10 +7030,7 @@ trydouble:
opcode = JIM_EXPROP_STREQ;
goto retry_as_string;
}
- Jim_DecrRefCount(interp, A);
- Jim_DecrRefCount(interp, B);
- error = 1;
- goto err;
+ goto retry_as_string;
}
Jim_DecrRefCount(interp, A);
Jim_DecrRefCount(interp, B);
@@ -7095,6 +7092,14 @@ retry_as_string:
sA = Jim_GetString(A, &Alen);
sB = Jim_GetString(B, &Blen);
switch(opcode) {
+ case JIM_EXPROP_LT:
+ wC = JimStringCompare(sA, Alen, sB, Blen, 0) < 0; break;
+ case JIM_EXPROP_GT:
+ wC = JimStringCompare(sA, Alen, sB, Blen, 0) > 0; break;
+ case JIM_EXPROP_LTE:
+ wC = JimStringCompare(sA, Alen, sB, Blen, 0) <= 0; break;
+ case JIM_EXPROP_GTE:
+ wC = JimStringCompare(sA, Alen, sB, Blen, 0) >= 0; break;
case JIM_EXPROP_STREQ:
if (Alen == Blen && memcmp(sA, sB, Alen) ==0)
wC = 1;
@@ -7108,8 +7113,11 @@ retry_as_string:
wC = 0;
break;
default:
- wC = 0; /* avoid gcc warning */
- break;
+ /* Not a valid string comparison */
+ Jim_DecrRefCount(interp, A);
+ Jim_DecrRefCount(interp, B);
+ error = 1;
+ goto err;
}
Jim_DecrRefCount(interp, A);
Jim_DecrRefCount(interp, B);