diff options
-rw-r--r-- | compiler/semtypes.nim | 2 | ||||
-rw-r--r-- | tests/generics/t6637.nim | 9 |
2 files changed, 10 insertions, 1 deletions
diff --git a/compiler/semtypes.nim b/compiler/semtypes.nim index e4f63a217..7515c52b0 100644 --- a/compiler/semtypes.nim +++ b/compiler/semtypes.nim @@ -330,7 +330,7 @@ proc semArrayIndex(c: PContext, n: PNode): PType = elif e.kind == nkSym and e.typ.kind == tyStatic: if e.sym.ast != nil: return semArrayIndex(c, e.sym.ast) - if not isOrdinalType(e.typ.lastSon): + if e.typ.lastSon.kind != tyGenericParam and not isOrdinalType(e.typ.lastSon): let info = if n.safeLen > 1: n[1].info else: n.info localError(c.config, info, errOrdinalTypeExpected % typeToString(e.typ, preferDesc)) result = makeRangeWithStaticExpr(c, e) diff --git a/tests/generics/t6637.nim b/tests/generics/t6637.nim new file mode 100644 index 000000000..dd4f339a2 --- /dev/null +++ b/tests/generics/t6637.nim @@ -0,0 +1,9 @@ + +type + Grid2D*[I: SomeInteger, w, h: static[I], T] = object + grid: array[w, array[h, T]] + Grid2DIns = Grid2D[int, 2, 3, uint8] + +let a = Grid2DIns() +doAssert a.grid.len == 2 +doAssert a.grid[0].len == 3 |