Compare commits

...
4 changed files with 43 additions and 6 deletions
+36
View File
@@ -5378,9 +5378,42 @@ TEBCresume(
case INST_STR_NEQ: /* String (in)equality check */
case INST_STR_CMP: /* String compare. */
stringCompare:
{
ClientData ptr1;
int type1;
value2Ptr = OBJ_AT_TOS;
valuePtr = OBJ_UNDER_TOS;
GetNumberFromObj(NULL, valuePtr, &ptr1, &type1);
GetNumberFromObj(NULL, value2Ptr, &ptr1, &type1);
if (valuePtr->typePtr == &tclDoubleType
|| valuePtr->typePtr == &tclIntType
#ifndef TCL_WIDE_INT_IS_LONG
|| valuePtr->typePtr == &tclWideIntType
#endif
|| valuePtr->typePtr == &tclBignumType
) {
valuePtr = Tcl_DuplicateObj(valuePtr);
TclInvalidateStringRep(valuePtr);
TclGetString(valuePtr);
}
if (value2Ptr->typePtr == &tclDoubleType
|| value2Ptr->typePtr == &tclIntType
#ifndef TCL_WIDE_INT_IS_LONG
|| value2Ptr->typePtr == &tclWideIntType
#endif
|| value2Ptr->typePtr == &tclBignumType
) {
value2Ptr = Tcl_DuplicateObj(value2Ptr);
TclInvalidateStringRep(value2Ptr);
TclGetString(value2Ptr);
}
Tcl_IncrRefCount(valuePtr);
Tcl_IncrRefCount(value2Ptr);
if (valuePtr == value2Ptr) {
match = 0;
} else {
@@ -5501,7 +5534,10 @@ TEBCresume(
TRACE(("\"%.20s\" \"%.20s\" => %d\n", O2S(valuePtr), O2S(value2Ptr),
(match < 0 ? -1 : match > 0 ? 1 : 0)));
Tcl_DecrRefCount(valuePtr);
Tcl_DecrRefCount(value2Ptr);
JUMP_PEEPHOLE_F(match, 1, 2);
}
case INST_STR_LEN:
valuePtr = OBJ_AT_TOS;
+1 -1
View File
@@ -317,7 +317,7 @@ test compExpr-old-7.13 {CompileBitAndExpr: runtime error in bitand arm} {
test compExpr-old-8.1 {CompileEqualityExpr: just relational expr} {expr 3>=2} 1
test compExpr-old-8.2 {CompileEqualityExpr: just relational expr} {expr 2<=2.1} 1
test compExpr-old-8.3 {CompileEqualityExpr: just relational expr} {expr 3.2>"2.2"} 1
test compExpr-old-8.4 {CompileEqualityExpr: just relational expr} {expr {"0y"<"0x12"}} 0
test compExpr-old-8.4 {CompileEqualityExpr: just relational expr} {expr {"0y"<"0x12"}} 1
test compExpr-old-8.5 {CompileEqualityExpr: error in relational expr} -body {
expr x>3
} -returnCodes error -match glob -result *
+1 -1
View File
@@ -244,7 +244,7 @@ test expr-old-4.13 {string operators} {expr {"abc" == "abd"}} 0
test expr-old-4.14 {string operators} {expr {"abd" == "abd"}} 1
test expr-old-4.15 {string operators} {expr {"abc" != "abd"}} 1
test expr-old-4.16 {string operators} {expr {"abd" != "abd"}} 0
test expr-old-4.17 {string operators} {expr {"0y" < "0x12"}} 0
test expr-old-4.17 {string operators} {expr {"0y" < "0x12"}} 1
test expr-old-4.18 {string operators} {expr {"." < " "}} 0
test expr-old-4.19 {string operators} {expr {"abc" eq "abd"}} 0
test expr-old-4.20 {string operators} {expr {"abd" eq "abd"}} 1
+5 -4
View File
@@ -341,7 +341,8 @@ test expr-7.20 {CompileBitAndExpr: error in equality expr} -body {
test expr-8.1 {CompileEqualityExpr: just relational expr} {expr 3>=2} 1
test expr-8.2 {CompileEqualityExpr: just relational expr} {expr 2<=2.1} 1
test expr-8.3 {CompileEqualityExpr: just relational expr} {expr 3.2>"2.2"} 1
test expr-8.4 {CompileEqualityExpr: just relational expr} {expr {"0y"<"0x12"}} 0
test expr-8.4 {CompileEqualityExpr: just relational expr} {expr {"0y"<"0x12"}} 1
test expr-8.4a {CompileEqualityExpr: just relational expr} {expr {"0y"<0x12}} 1
test expr-8.5 {CompileEqualityExpr: error in relational expr} -body {
expr x>3
} -returnCodes error -match glob -result *
@@ -360,7 +361,7 @@ test expr-8.13 {CompileBitAndExpr: equality expr} {expr {"\374" eq [set s \u00fc
test expr-8.14 {CompileBitAndExpr: equality expr} {expr 3eq2} 0
test expr-8.15 {CompileBitAndExpr: equality expr} {expr 2.0eq2} 0
test expr-8.16 {CompileBitAndExpr: equality expr} {expr 3.2ne2.2} 1
test expr-8.17 {CompileBitAndExpr: equality expr} {expr 01eq1} 0
test expr-8.17 {CompileBitAndExpr: equality expr} {expr 01eq1} 1
test expr-8.18 {CompileBitAndExpr: equality expr} {expr {"abc" eq "abd"}} 0
test expr-8.19 {CompileBitAndExpr: equality expr} {expr {"abc" ne "abd"}} 1
test expr-8.20 {CompileBitAndExpr: error in equality expr} -body {
@@ -385,7 +386,7 @@ test expr-8.25 {CompileEqualityExpr: simple equality exprs} {
} 1
test expr-8.26 {CompileEqualityExpr: simple equality exprs} {
expr {"0x12 " eq "0x12"}
} 0
} 1
test expr-8.27 {CompileEqualityExpr: simple equality exprs} {
expr {"1.0e100000000" == "0.0"}
} 0
@@ -397,7 +398,7 @@ test expr-8.29 {CompileEqualityExpr: just relational expr} {
set v1 "0y"
set v2 "0x12"
expr {$v1 < $v2}
} 0
} 1
test expr-8.30 {CompileEqualityExpr: simple equality exprs} {
expr {"fake" != "bob"}
} 1