summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--lib/system/jssys.nim3
-rw-r--r--tests/js/taddnilstr.nim4
-rw-r--r--tests/js/tnilstrs.nim17
-rw-r--r--tests/js/tstrconcat.nim5
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"