diff options
author | metagn <metagngn@gmail.com> | 2023-06-17 10:24:32 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-06-17 15:24:32 +0800 |
commit | 6d2163724550ed3a115d22e00f9d40150534a8b9 (patch) | |
tree | 9e5c411a3ba7065c8bafec1703807b694988a550 /tests | |
parent | 647d9611ae81c7af2c86af5b33a14787254896b5 (diff) | |
download | Nim-6d2163724550ed3a115d22e00f9d40150534a8b9.tar.gz |
fix scoping regression with calls in generic bodies (#22115)
refs #22029, refs https://github.com/status-im/nim-libp2p/actions/runs/5263850340/jobs/9514434659
Diffstat (limited to 'tests')
-rw-r--r-- | tests/generics/muninstantiatedgenericcalls.nim | 26 | ||||
-rw-r--r-- | tests/generics/tuninstantiatedgenericcalls.nim | 8 |
2 files changed, 34 insertions, 0 deletions
diff --git a/tests/generics/muninstantiatedgenericcalls.nim b/tests/generics/muninstantiatedgenericcalls.nim new file mode 100644 index 000000000..caed07c98 --- /dev/null +++ b/tests/generics/muninstantiatedgenericcalls.nim @@ -0,0 +1,26 @@ +import std/bitops + +const + lengths = block: + var v: array[64, int8] + for i in 0..<64: + v[i] = int8((i + 7) div 7) + v + +type + Leb128* = object + +{.push checks: off.} +func len(T: type Leb128, x: SomeUnsignedInt): int8 = + if x == 0: 1 + else: lengths[fastLog2(x)] +{.pop.} + +# note private to test scoping issue: +func maxLen(T: type Leb128, I: type): int8 = + Leb128.len(I.high) + +type + Leb128Buf*[T: SomeUnsignedInt] = object + data*: array[maxLen(Leb128, T), byte] + len*: int8 diff --git a/tests/generics/tuninstantiatedgenericcalls.nim b/tests/generics/tuninstantiatedgenericcalls.nim index c4d95a0fb..b12a33fe7 100644 --- a/tests/generics/tuninstantiatedgenericcalls.nim +++ b/tests/generics/tuninstantiatedgenericcalls.nim @@ -70,3 +70,11 @@ block thardcases: doAssert high(f2.data3) == 4 # length of int8 doAssert f2.data3[0] is float + +import muninstantiatedgenericcalls + +block: + var x: Leb128Buf[uint32] + doAssert x.data.len == 5 + var y: Leb128Buf[uint16] + doAssert y.data.len == 3 |