summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--lib/system.nim2
-rw-r--r--tests/array/tarraylen.nim18
2 files changed, 19 insertions, 1 deletions
diff --git a/lib/system.nim b/lib/system.nim
index a4460570a..efffeaeca 100644
--- a/lib/system.nim
+++ b/lib/system.nim
@@ -718,7 +718,7 @@ proc len*[TOpenArray: openArray|varargs](x: TOpenArray): int {.
   magic: "LengthOpenArray", noSideEffect.}
 proc len*(x: string): int {.magic: "LengthStr", noSideEffect.}
 proc len*(x: cstring): int {.magic: "LengthStr", noSideEffect.}
-proc len*[I, T](x: array[I, T]): int {.magic: "LengthArray", noSideEffect.}
+proc len*(x: (type array)|array): int {.magic: "LengthArray", noSideEffect.}
 proc len*[T](x: seq[T]): int {.magic: "LengthSeq", noSideEffect.}
   ## returns the length of an array, an openarray, a sequence or a string.
   ## This is roughly the same as ``high(T)-low(T)+1``, but its resulting type is
diff --git a/tests/array/tarraylen.nim b/tests/array/tarraylen.nim
new file mode 100644
index 000000000..e9612de58
--- /dev/null
+++ b/tests/array/tarraylen.nim
@@ -0,0 +1,18 @@
+discard """
+  output: ""
+"""
+var a: array[0, int]
+doAssert a.len == 0
+doAssert array[0..0, int].len == 1
+doAssert array[0..0, int]([1]).len == 1
+doAssert array[1..1, int].len == 1
+doAssert array[1..1, int]([1]).len == 1
+doAssert array[2, int].len == 2
+doAssert array[2, int]([1, 2]).len == 2
+doAssert array[1..3, int].len == 3
+doAssert array[1..3, int]([1, 2, 3]).len == 3
+doAssert array[0..2, int].len == 3
+doAssert array[0..2, int]([1, 2, 3]).len == 3
+doAssert array[-2 .. -2, int].len == 1
+doAssert([1, 2, 3].len == 3)
+doAssert([42].len == 1)
\ No newline at end of file