From 43228a704f555a771ae2c40616de4bd0f2b5ca2f Mon Sep 17 00:00:00 2001 From: Araq Date: Wed, 25 Mar 2015 13:21:50 +0100 Subject: [PATCH] fixes #2404 --- compiler/semexprs.nim | 2 +- tests/concepts/mvarconcept.nim | 13 +++++++++++++ tests/concepts/tvarconcept.nim | 18 ++++++------------ 3 files changed, 20 insertions(+), 13 deletions(-) create mode 100644 tests/concepts/mvarconcept.nim diff --git a/compiler/semexprs.nim b/compiler/semexprs.nim index c2db11236e..a56de1028d 100644 --- a/compiler/semexprs.nim +++ b/compiler/semexprs.nim @@ -2011,7 +2011,7 @@ proc semExpr(c: PContext, n: PNode, flags: TExprFlags = {}): PNode = case n.kind of nkIdent, nkAccQuoted: var s = lookUp(c, n) - semCaptureSym(s, c.p.owner) + if c.inTypeClass == 0: semCaptureSym(s, c.p.owner) result = semSym(c, n, s, flags) if s.kind in {skProc, skMethod, skConverter}+skIterators: #performProcvarCheck(c, n, s) diff --git a/tests/concepts/mvarconcept.nim b/tests/concepts/mvarconcept.nim new file mode 100644 index 0000000000..0f9d0beff6 --- /dev/null +++ b/tests/concepts/mvarconcept.nim @@ -0,0 +1,13 @@ +type RNG* = concept var rng + rng.randomUint32() is uint32 + +type MersenneTwister* = object + +proc randomUint32*(self: var MersenneTwister): uint32 = 5 + +proc randomInt*(rng: var RNG; max: Positive): Natural = 5 + +var mersenneTwisterInst = MersenneTwister() + +proc randomInt*(max: Positive): Natural = + mersenneTwisterInst.randomInt(max) diff --git a/tests/concepts/tvarconcept.nim b/tests/concepts/tvarconcept.nim index e33686b054..203ef3cdc8 100644 --- a/tests/concepts/tvarconcept.nim +++ b/tests/concepts/tvarconcept.nim @@ -1,15 +1,9 @@ +discard """ + output: "5" +""" -# bug #2346 +# bug #2346, bug #2404 -type RNG64 = concept var rng - rng.randomUint64() is uint64 +import mvarconcept -proc randomInt*(rng: var RNG64; max: int): int = 4 - - -type MyRNG* = object - -proc randomUint64*(self: var MyRNG): uint64 = 4 - -var r = MyRNG() -echo r.randomInt(5) +echo randomInt(5)