diff --git a/lib/system/jssys.nim b/lib/system/jssys.nim index 8065f22555..8c3175eac4 100644 --- a/lib/system/jssys.nim +++ b/lib/system/jssys.nim @@ -417,11 +417,11 @@ proc cmpStrings(a, b: string): int {.asmNoStackFrame, compilerProc.} = if (`a` == `b`) return 0; if (!`a`) return -1; if (!`b`) return 1; - for (var i = 0; i < `a`.length-1; ++i) { + for (var i = 0; i < `a`.length - 1 && i < `b`.length - 1; i++) { var result = `a`[i] - `b`[i]; if (result != 0) return result; } - return 0; + return `a`.length - `b`.length; """ proc cmp(x, y: string): int = diff --git a/tests/js/tstringitems.nim b/tests/js/tstringitems.nim index 20aed6e8bf..ff016642e3 100644 --- a/tests/js/tstringitems.nim +++ b/tests/js/tstringitems.nim @@ -76,3 +76,12 @@ block: # String case of case s of "Привет!": discard else: doAssert(false) + +block: # String cmp + var a, b: string + doAssert(cmp(a, b) == 0) + doAssert(cmp("foo", "foo") == 0) + doAssert(cmp("foobar", "foo") == 3) + doAssert(cmp("foo", "foobar") == -3) + doAssert(cmp("fooz", "foog") == 19) + doAssert(cmp("foog", "fooz") == -19)