summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--lib/system.nim14
-rw-r--r--tests/iter/tcountup.nim20
2 files changed, 32 insertions, 2 deletions
diff --git a/lib/system.nim b/lib/system.nim
index bf2e156b4..b13419eb9 100644
--- a/lib/system.nim
+++ b/lib/system.nim
@@ -2641,6 +2641,20 @@ when defined(nimNewRoof):
       yield i
       inc i
 
+  template dotdotLessImpl(t) {.dirty.} =
+    iterator `..<`*(a, b: t): t {.inline.} =
+      ## A type specialized version of ``..<`` for convenience so that
+      ## mixing integer types works better.
+      var res = a
+      while res < b:
+        yield res
+        inc(res)
+
+  dotdotLessImpl(int64)
+  dotdotLessImpl(int32)
+  dotdotLessImpl(uint64)
+  dotdotLessImpl(uint32)
+
 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
diff --git a/tests/iter/tcountup.nim b/tests/iter/tcountup.nim
index f93f1536e..5f75e653c 100644
--- a/tests/iter/tcountup.nim
+++ b/tests/iter/tcountup.nim
@@ -1,9 +1,25 @@
 discard """
-  output: "0123456789"
+  output: '''
+0123456789
+0.0
+'''
 """
 
 # Test new countup
 
 for i in 0 ..< 10'i64:
   stdout.write(i)
-echo "\n"
+
+echo()
+
+# 11099
+
+var
+  x: uint32
+  y: float
+
+for i in 0 ..< x:
+  if i == 1: echo i
+  y += 1
+
+echo y