summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--changelog.md11
-rw-r--r--lib/system.nim10
2 files changed, 20 insertions, 1 deletions
diff --git a/changelog.md b/changelog.md
index 7aa52ece2..97ce82cd6 100644
--- a/changelog.md
+++ b/changelog.md
@@ -62,3 +62,14 @@ This now needs to be written as:
 .. code-block:: nim
 
   t[ti] = (if exp_negative: '-' else: '+'); inc(ti)
+
+- To make Nim even more robust the system iterators ``..`` and ``countup``
+  now only accept a single generic type ``T``. This means the following code
+  doesn't die with an "out of range" error anymore:
+
+.. code-block:: nim
+
+  var b = 5.Natural
+  var a = -5
+  for i in a..b:
+    echo i
diff --git a/lib/system.nim b/lib/system.nim
index 7c095aa2c..9e6f6c039 100644
--- a/lib/system.nim
+++ b/lib/system.nim
@@ -322,7 +322,7 @@ proc `..`*[T, U](a: T, b: U): HSlice[T, U] {.noSideEffect, inline, magic: "DotDo
   result.b = b
 
 proc `..`*[T](b: T): HSlice[int, T] {.noSideEffect, inline, magic: "DotDot".} =
-  ## `slice`:idx: operator that constructs an interval ``[default(T), b]``
+  ## `slice`:idx: operator that constructs an interval ``[default(int), b]``
   result.b = b
 
 when not defined(niminheritable):
@@ -2014,6 +2014,14 @@ when defined(nimNewRoof):
       while res <= b:
         yield res
         inc(res)
+
+  iterator `..`*(a, b: int64): int64 {.inline.} =
+    ## A special version of `..`` for ``int64`` only.
+    var res = a
+    while res <= b:
+      yield res
+      inc(res)
+
 else:
   iterator countup*[S, T](a: S, b: T, step = 1): T {.inline.} =
     ## Counts from ordinal value `a` up to `b` (inclusive) with the given