summary refs log tree commit diff stats
path: root/lib
diff options
context:
space:
mode:
authorDominik Picheta <dominikpicheta@gmail.com>2017-11-26 19:31:59 +0000
committerDominik Picheta <dominikpicheta@gmail.com>2017-11-28 14:33:53 +0000
commitb74a5148a9e7bf646ee6a13cad0ce046d7b9d8b4 (patch)
tree793bf81cee0e457d3d4de8bd476476c3dcc81e15 /lib
parent8fbe37b2d813f00ca934cee2fe17bc2e24f82f88 (diff)
downloadNim-b74a5148a9e7bf646ee6a13cad0ce046d7b9d8b4.tar.gz
Fixes #6223.
Diffstat (limited to 'lib')
-rw-r--r--lib/pure/unicode.nim12
-rw-r--r--lib/system.nim5
2 files changed, 10 insertions, 7 deletions
diff --git a/lib/pure/unicode.nim b/lib/pure/unicode.nim
index 7d9c3108b..257c620f7 100644
--- a/lib/pure/unicode.nim
+++ b/lib/pure/unicode.nim
@@ -293,33 +293,33 @@ proc runeSubStr*(s: string, pos:int, len:int = int.high): string =
   if pos < 0:
     let (o, rl) = runeReverseOffset(s, -pos)
     if len >= rl:
-      result = s[o.. s.len-1]
+      result = s.substr(o, s.len-1)
     elif len < 0:
       let e = rl + len
       if e < 0:
         result = ""
       else:
-        result = s[o.. runeOffset(s, e-(rl+pos) , o)-1]
+        result = s.substr(o, runeOffset(s, e-(rl+pos) , o)-1)
     else:
-      result = s[o.. runeOffset(s, len, o)-1]
+      result = s.substr(o, runeOffset(s, len, o)-1)
   else:
     let o = runeOffset(s, pos)
     if o < 0:
       result = ""
     elif len == int.high:
-      result = s[o.. s.len-1]
+      result = s.substr(o, s.len-1)
     elif len < 0:
       let (e, rl) = runeReverseOffset(s, -len)
       discard rl
       if e <= 0:
         result = ""
       else:
-        result = s[o.. e-1]
+        result = s.substr(o, e-1)
     else:
       var e = runeOffset(s, len, o)
       if e < 0:
         e = s.len
-      result = s[o.. e-1]
+      result = s.substr(o, e-1)
 
 const
   alphaRanges = [
diff --git a/lib/system.nim b/lib/system.nim
index 387973f4b..b9f01c306 100644
--- a/lib/system.nim
+++ b/lib/system.nim
@@ -3529,7 +3529,10 @@ when hasAlloc or defined(nimscript):
     ## .. code-block:: nim
     ##    var s = "abcdef"
     ##    assert s[1..3] == "bcd"
-    result = s.substr(s ^^ x.a, s ^^ x.b)
+    let a = s ^^ x.a
+    let L = (s ^^ x.b) - a + 1
+    result = newString(L)
+    for i in 0 ..< L: result[i] = s[i + a]
 
   proc `[]=`*[T, U](s: var string, x: HSlice[T, U], b: string) =
     ## slice assignment for strings. If