summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorhlaaftana <10591326+hlaaftana@users.noreply.github.com>2020-05-05 11:34:37 +0300
committerGitHub <noreply@github.com>2020-05-05 10:34:37 +0200
commit6b7b5fb4fa7865d17f2433ddc49bac1483b19a01 (patch)
tree7c4b08bcb436421740a39fba44433d1280183e52
parenteefada8a8816873c6c9c3e1e7c479fefae96c93b (diff)
downloadNim-6b7b5fb4fa7865d17f2433ddc49bac1483b19a01.tar.gz
Clarify JS cstring len (#14184)
-rw-r--r--doc/backends.rst2
-rw-r--r--lib/pure/cstrutils.nim4
-rw-r--r--lib/system.nim13
3 files changed, 10 insertions, 9 deletions
diff --git a/doc/backends.rst b/doc/backends.rst
index 52c16b9f7..d34a06238 100644
--- a/doc/backends.rst
+++ b/doc/backends.rst
@@ -82,7 +82,7 @@ available. This includes:
 * proper 64 bit integer arithmetic
 
 To compensate, the standard library has modules `catered to the JS backend
-<https://nim-lang.org/docs/lib.html#pure-libraries-modules-for-js-backend>`_
+<lib.html#pure-libraries-modules-for-js-backend>`_
 and more support will come in the future (for instance, Node.js bindings
 to get OS info).
 
diff --git a/lib/pure/cstrutils.nim b/lib/pure/cstrutils.nim
index 345a9be7f..601508e2e 100644
--- a/lib/pure/cstrutils.nim
+++ b/lib/pure/cstrutils.nim
@@ -69,7 +69,7 @@ proc cmpIgnoreStyle*(a, b: cstring): int {.noSideEffect,
   ## | > 0 if a > b
   ## 
   ## Not supported for JS backend, use `strutils.cmpIgnoreStyle
-  ## <https://nim-lang.org/docs/strutils.html#cmpIgnoreStyle%2Cstring%2Cstring>`_ instead.
+  ## <strutils.html#cmpIgnoreStyle%2Cstring%2Cstring>`_ instead.
   var i = 0
   var j = 0
   while true:
@@ -91,7 +91,7 @@ proc cmpIgnoreCase*(a, b: cstring): int {.noSideEffect,
   ## | > 0 if a > b
   ## 
   ## Not supported for JS backend, use `strutils.cmpIgnoreCase
-  ## <https://nim-lang.org/docs/strutils.html#cmpIgnoreCase%2Cstring%2Cstring>`_ instead.
+  ## <strutils.html#cmpIgnoreCase%2Cstring%2Cstring>`_ instead.
   var i = 0
   while true:
     var aa = toLowerAscii(a[i])
diff --git a/lib/system.nim b/lib/system.nim
index da44baa10..3f5015542 100644
--- a/lib/system.nim
+++ b/lib/system.nim
@@ -692,6 +692,11 @@ proc len*(x: string): int {.magic: "LengthStr", noSideEffect.}
 proc len*(x: cstring): int {.magic: "LengthStr", noSideEffect.}
   ## Returns the length of a compatible string. This is sometimes
   ## an O(n) operation.
+  ## 
+  ## **Note:** On the JS backend this currently counts UTF-16 code points
+  ## instead of bytes at runtime (not at compile time). For now, if you
+  ## need the byte length of the UTF-8 encoding, convert to string with
+  ## `$` first then call `len`.
   ##
   ## .. code-block:: Nim
   ##   var str: cstring = "Hello world!"
@@ -2137,16 +2142,12 @@ when notJSnotNims:
 
 when not defined(js):
   proc cmp(x, y: string): int =
-    when defined(nimscript):
+    when nimvm:
       if x < y: result = -1
       elif x > y: result = 1
       else: result = 0
     else:
-      when nimvm:
-        if x < y: result = -1
-        elif x > y: result = 1
-        else: result = 0
-      else:
+      when not defined(nimscript): # avoid semantic checking
         let minlen = min(x.len, y.len)
         result = int(nimCmpMem(x.cstring, y.cstring, cast[csize_t](minlen)))
         if result == 0: