summary refs log tree commit diff stats
path: root/lib
diff options
context:
space:
mode:
authorAndreas Rumpf <rumpf_a@web.de>2020-04-01 14:34:24 +0200
committerAndreas Rumpf <rumpf_a@web.de>2020-04-01 19:38:44 +0200
commit484548c784f69cadc1f6480a24e99183a0e6a930 (patch)
treed79ee14aa8cc6ce07690764b6204a81529a6c0d3 /lib
parent66f18037b3d10dca7d32675651ec969217036992 (diff)
downloadNim-484548c784f69cadc1f6480a24e99183a0e6a930.tar.gz
revert stdlib changes which are not required anymore
Diffstat (limited to 'lib')
-rw-r--r--lib/pure/collections/sequtils.nim5
-rw-r--r--lib/pure/collections/sharedtables.nim18
-rw-r--r--lib/pure/ioselects/ioselectors_epoll.nim3
-rw-r--r--lib/pure/ioselects/ioselectors_kqueue.nim3
-rw-r--r--lib/pure/ioselects/ioselectors_select.nim8
-rw-r--r--lib/pure/parsecsv.nim4
6 files changed, 20 insertions, 21 deletions
diff --git a/lib/pure/collections/sequtils.nim b/lib/pure/collections/sequtils.nim
index 893f31389..e32c784c6 100644
--- a/lib/pure/collections/sequtils.nim
+++ b/lib/pure/collections/sequtils.nim
@@ -371,8 +371,9 @@ proc map*[T, S](s: openArray[T], op: proc (x: T): S {.closure.}):
       b = map(a, proc(x: int): string = $x)
     assert b == @["1", "2", "3", "4"]
 
-  result = newSeqOfCap[S](s.len)
-  for elem in s: result.add op(elem)
+  newSeq(result, s.len)
+  for i in 0 ..< s.len:
+    result[i] = op(s[i])
 
 proc apply*[T](s: var openArray[T], op: proc (x: var T) {.closure.})
                                                               {.inline.} =
diff --git a/lib/pure/collections/sharedtables.nim b/lib/pure/collections/sharedtables.nim
index 96f934f50..2a1c0543f 100644
--- a/lib/pure/collections/sharedtables.nim
+++ b/lib/pure/collections/sharedtables.nim
@@ -77,7 +77,8 @@ template withValue*[A, B](t: var SharedTable[A, B], key: A,
   try:
     var hc: Hash
     var index = rawGet(t, key, hc)
-    if index >= 0:
+    let hasKey = index >= 0
+    if hasKey:
       var value {.inject.} = addr(t.data[index].val)
       body
   finally:
@@ -103,7 +104,8 @@ template withValue*[A, B](t: var SharedTable[A, B], key: A,
   try:
     var hc: Hash
     var index = rawGet(t, key, hc)
-    if index >= 0:
+    let hasKey = index >= 0
+    if hasKey:
       var value {.inject.} = addr(t.data[index].val)
       body1
     else:
@@ -117,13 +119,13 @@ proc mget*[A, B](t: var SharedTable[A, B], key: A): var B =
   withLock t:
     var hc: Hash
     var index = rawGet(t, key, hc)
-    if index >= 0:
-      result = t.data[index].val
+    let hasKey = index >= 0
+    if hasKey: result = t.data[index].val
+  if not hasKey:
+    when compiles($key):
+      raise newException(KeyError, "key not found: " & $key)
     else:
-      when compiles($key):
-        raise newException(KeyError, "key not found: " & $key)
-      else:
-        raise newException(KeyError, "key not found")
+      raise newException(KeyError, "key not found")
 
 proc mgetOrPut*[A, B](t: var SharedTable[A, B], key: A, val: B): var B =
   ## retrieves value at ``t[key]`` or puts ``val`` if not present, either way
diff --git a/lib/pure/ioselects/ioselectors_epoll.nim b/lib/pure/ioselects/ioselectors_epoll.nim
index 002bddac5..bf13cc83e 100644
--- a/lib/pure/ioselects/ioselectors_epoll.nim
+++ b/lib/pure/ioselects/ioselectors_epoll.nim
@@ -502,7 +502,8 @@ proc contains*[T](s: Selector[T], fd: SocketHandle|int): bool {.inline.} =
 proc getData*[T](s: Selector[T], fd: SocketHandle|int): var T =
   let fdi = int(fd)
   s.checkFd(fdi)
-  result = s.fds[fdi].data
+  if fdi in s:
+    result = s.fds[fdi].data
 
 proc setData*[T](s: Selector[T], fd: SocketHandle|int, data: T): bool =
   let fdi = int(fd)
diff --git a/lib/pure/ioselects/ioselectors_kqueue.nim b/lib/pure/ioselects/ioselectors_kqueue.nim
index c5e19a011..83e15d479 100644
--- a/lib/pure/ioselects/ioselectors_kqueue.nim
+++ b/lib/pure/ioselects/ioselectors_kqueue.nim
@@ -600,7 +600,8 @@ proc contains*[T](s: Selector[T], fd: SocketHandle|int): bool {.inline.} =
 proc getData*[T](s: Selector[T], fd: SocketHandle|int): var T =
   let fdi = int(fd)
   s.checkFd(fdi)
-  result = s.fds[fdi].data
+  if fdi in s:
+    result = s.fds[fdi].data
 
 proc setData*[T](s: Selector[T], fd: SocketHandle|int, data: T): bool =
   let fdi = int(fd)
diff --git a/lib/pure/ioselects/ioselectors_select.nim b/lib/pure/ioselects/ioselectors_select.nim
index 6a742df99..02a853b42 100644
--- a/lib/pure/ioselects/ioselectors_select.nim
+++ b/lib/pure/ioselects/ioselectors_select.nim
@@ -410,17 +410,11 @@ else:
     body
 
 proc getData*[T](s: Selector[T], fd: SocketHandle|int): var T =
-  # The compiler needs this to prove that all code paths return a value
-  result = (cast[ptr T](0'u))[]
-
   s.withSelectLock():
     let fdi = int(fd)
     for i in 0..<FD_SETSIZE:
       if s.fds[i].ident == fdi:
-        result = s.fds[i].data
-        break
-
-  assert cast[uint](addr(result)) != 0
+        return s.fds[i].data
 
 proc setData*[T](s: Selector[T], fd: SocketHandle|int, data: T): bool =
   s.withSelectLock():
diff --git a/lib/pure/parsecsv.nim b/lib/pure/parsecsv.nim
index a4fdc2887..44703e3f8 100644
--- a/lib/pure/parsecsv.nim
+++ b/lib/pure/parsecsv.nim
@@ -338,8 +338,8 @@ proc rowEntry*(my: var CsvParser, entry: string): var string =
     strm.close()
 
   let index = my.headers.find(entry)
-  assert index >= 0
-  result = my.row[index]
+  if index >= 0:
+    result = my.row[index]
 
 when not defined(testing) and isMainModule:
   import os