diff options
author | oharboe <oharboe> | 2009-08-16 11:24:49 +0000 |
---|---|---|
committer | oharboe <oharboe> | 2009-08-16 11:24:49 +0000 |
commit | ff7ab6e5a401cd728ab5a440659346bd50e0e9c9 (patch) | |
tree | ad4ff024b4deb36495495db3f37959f851019248 | |
parent | 49bad8e52dd1dcd0b9fb921e13c29560f14911a3 (diff) | |
download | jimtcl-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-- | ChangeLog | 3 | ||||
-rw-r--r-- | jim.c | 20 |
2 files changed, 16 insertions, 7 deletions
@@ -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. @@ -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); |