diff options
author | Jason Beetham <beefers331@gmail.com> | 2021-12-22 23:12:56 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-12-23 07:12:56 +0100 |
commit | fa96e56ad06f0562b5d608cc896a9b17c9512958 (patch) | |
tree | 4cec100b9a5252e2f8a3b9a47969598e66bed922 | |
parent | 81d32cf7e53b244776c4196098be154c1223d726 (diff) | |
download | Nim-fa96e56ad06f0562b5d608cc896a9b17c9512958.tar.gz |
Fixed object field access of static objects in generics (#19283) [backport]
-rw-r--r-- | compiler/semexprs.nim | 2 | ||||
-rw-r--r-- | tests/system/tstatic.nim | 8 |
2 files changed, 9 insertions, 1 deletions
diff --git a/compiler/semexprs.nim b/compiler/semexprs.nim index 0df332689..c593efe55 100644 --- a/compiler/semexprs.nim +++ b/compiler/semexprs.nim @@ -1414,7 +1414,7 @@ proc builtinFieldAccess(c: PContext, n: PNode, flags: TExprFlags): PNode = if ty.kind in tyUserTypeClasses and ty.isResolvedUserTypeClass: ty = ty.lastSon - ty = skipTypes(ty, {tyGenericInst, tyVar, tyLent, tyPtr, tyRef, tyOwned, tyAlias, tySink}) + ty = skipTypes(ty, {tyGenericInst, tyVar, tyLent, tyPtr, tyRef, tyOwned, tyAlias, tySink, tyStatic}) while tfBorrowDot in ty.flags: ty = ty.skipTypes({tyDistinct, tyGenericInst, tyAlias}) var check: PNode = nil if ty.kind == tyObject: diff --git a/tests/system/tstatic.nim b/tests/system/tstatic.nim index 1f1b9dbe3..6e2893e2b 100644 --- a/tests/system/tstatic.nim +++ b/tests/system/tstatic.nim @@ -44,6 +44,14 @@ template main() = proc parseInt(f: static[bool]): int {.used.} = discard doAssert "123".parseInt == 123 + block: + type + MyType = object + field: float32 + AType[T: static MyType] = distinct range[0f32 .. T.field] + var a: AType[MyType(field: 5f32)] + proc n(S: static Slice[int]): range[S.a..S.b] = discard + assert typeof(n 1..2) is range[1..2] static: main() |