diff --git a/compiler/semtypes.nim b/compiler/semtypes.nim index 19bb53209a..6b27c80329 100644 --- a/compiler/semtypes.nim +++ b/compiler/semtypes.nim @@ -301,7 +301,8 @@ proc semArrayIndex(c: PContext, n: PNode): PType = localError(c.config, info, errOrdinalTypeExpected) result = makeRangeWithStaticExpr(c, e) if c.inGenericContext > 0: result.flags.incl tfUnresolved - elif e.kind in nkCallKinds and hasGenericArguments(e): + elif e.kind in (nkCallKinds + {nkBracketExpr}) and + hasGenericArguments(e): if not isOrdinalType(e.typ): localError(c.config, n[1].info, errOrdinalTypeExpected) # This is an int returning call, depending on an diff --git a/tests/statictypes/tstatictypes.nim b/tests/statictypes/tstatictypes.nim index a646b61f7f..5234866fa6 100644 --- a/tests/statictypes/tstatictypes.nim +++ b/tests/statictypes/tstatictypes.nim @@ -5,13 +5,39 @@ staticAlialProc instantiated with 6 ''' """ -type - StaticTypeAlias = static[int] +import macros -proc staticAliasProc(s: StaticTypeAlias) = - static: echo "staticAlialProc instantiated with ", s + 1 +proc plus(a, b: int): int = a + b -staticAliasProc 1+2 -staticAliasProc 3 -staticAliasProc 5 +when true: + type + StaticTypeAlias = static[int] + + proc staticAliasProc(s: StaticTypeAlias) = + static: echo "staticAlialProc instantiated with ", s + 1 + echo s + + staticAliasProc 1+2 + staticAliasProc 3 + staticAliasProc 5 + +when true: + type + ArrayWrapper1[S: static int] = object + data: array[S + 1, int] + + ArrayWrapper2[S: static[int]] = object + data: array[S.plus(2), int] + + ArrayWrapper3[S: static[(int, string)]] = object + data: array[S[0], int] + + var aw1: ArrayWrapper1[5] + var aw2: ArrayWrapper2[5] + var aw3: ArrayWrapper3[(10, "str")] + + static: + assert aw1.data.high == 5 + assert aw2.data.high == 6 + assert aw3.data.high == 9