diff options
-rw-r--r-- | lib/system/jssys.nim | 3 | ||||
-rw-r--r-- | tests/js/taddnilstr.nim | 4 | ||||
-rw-r--r-- | tests/js/tnilstrs.nim | 17 | ||||
-rw-r--r-- | tests/js/tstrconcat.nim | 5 |
4 files changed, 20 insertions, 9 deletions
diff --git a/lib/system/jssys.nim b/lib/system/jssys.nim index 836ac198d..5ac0ca8b2 100644 --- a/lib/system/jssys.nim +++ b/lib/system/jssys.nim @@ -228,6 +228,7 @@ proc cstrToNimstr(c: cstring): string {.asmNoStackFrame, compilerproc.} = proc toJSStr(s: string): cstring {.asmNoStackFrame, compilerproc.} = asm """ + if (`s` === null) return ""; var len = `s`.length; var asciiPart = new Array(len); var fcc = String.fromCharCode; @@ -330,6 +331,8 @@ proc cmp(x, y: string): int = proc eqStrings(a, b: string): bool {.asmNoStackFrame, compilerProc.} = asm """ if (`a` == `b`) return true; + if (`a` === null && `b`.length == 0) return true; + if (`b` === null && `a`.length == 0) return true; if ((!`a`) || (!`b`)) return false; var alen = `a`.length; if (alen != `b`.length) return false; diff --git a/tests/js/taddnilstr.nim b/tests/js/taddnilstr.nim deleted file mode 100644 index f5b934fdd..000000000 --- a/tests/js/taddnilstr.nim +++ /dev/null @@ -1,4 +0,0 @@ -var x = "foo".cstring -var y: string -add(y, x) -doAssert y == "foo" diff --git a/tests/js/tnilstrs.nim b/tests/js/tnilstrs.nim new file mode 100644 index 000000000..c0048cb24 --- /dev/null +++ b/tests/js/tnilstrs.nim @@ -0,0 +1,17 @@ +block: + var x: string + var y = "foo" + + echo x + doAssert x == "" + doAssert "" == x + + add(x, y) + y[0] = 'm' + doAssert y == "moo" and x == "foo" + +block: + var x = "foo".cstring + var y: string + add(y, x) + doAssert y == "foo" \ No newline at end of file diff --git a/tests/js/tstrconcat.nim b/tests/js/tstrconcat.nim deleted file mode 100644 index 37c8db687..000000000 --- a/tests/js/tstrconcat.nim +++ /dev/null @@ -1,5 +0,0 @@ -var x: string -var y = "foo" -add(x, y) -y[0] = 'm' -doAssert y == "moo" and x == "foo" |