type with same name in different scope now works (#17710)
* type with same name in different scope now works * fix tests/enum/tenum.nim which was wrong because it was affected by this bug
This commit is contained in:
parent
fe77c3c72f
commit
840e13deb7
4 changed files with 133 additions and 9 deletions
111
tests/ccgbugs/tsamename3.nim
Normal file
111
tests/ccgbugs/tsamename3.nim
Normal file
|
|
@ -0,0 +1,111 @@
|
|||
block: # bug #15526
|
||||
block:
|
||||
type Foo = ref object
|
||||
x1: int
|
||||
let f1 = Foo(x1: 1)
|
||||
block:
|
||||
type Foo = ref object
|
||||
x2: int
|
||||
let f2 = Foo(x2: 2)
|
||||
|
||||
block: # ditto
|
||||
template fn() =
|
||||
block:
|
||||
type Foo = ref object
|
||||
x1: int
|
||||
let f1 = Foo(x1: 1)
|
||||
doAssert f1.x1 == 1
|
||||
block:
|
||||
type Foo = ref object
|
||||
x2: int
|
||||
let f2 = Foo(x2: 2)
|
||||
doAssert f2.x2 == 2
|
||||
static: fn()
|
||||
fn()
|
||||
|
||||
block: # bug #17162
|
||||
template fn =
|
||||
var ret: string
|
||||
block:
|
||||
type A = enum a0, a1, a2
|
||||
for ai in A:
|
||||
ret.add $ai
|
||||
block:
|
||||
type A = enum b0, b1, b2, b3
|
||||
for ai in A:
|
||||
ret.add $ai
|
||||
doAssert ret == "a0a1a2b0b1b2b3"
|
||||
|
||||
static: fn() # ok
|
||||
fn() # was bug
|
||||
|
||||
block: # ditto
|
||||
proc fn =
|
||||
var ret: string
|
||||
block:
|
||||
type A = enum a0, a1, a2
|
||||
for ai in A:
|
||||
ret.add $ai
|
||||
block:
|
||||
type A = enum b0, b1, b2, b3
|
||||
for ai in A:
|
||||
ret.add $ai
|
||||
doAssert ret == "a0a1a2b0b1b2b3"
|
||||
|
||||
static: fn() # ok
|
||||
fn() # was bug
|
||||
|
||||
block: # bug #5170
|
||||
block:
|
||||
type Foo = object
|
||||
x1: int
|
||||
let f1 = Foo(x1: 1)
|
||||
block:
|
||||
type Foo = object
|
||||
x2: int
|
||||
let f2 = Foo(x2: 2)
|
||||
|
||||
block: # ditto
|
||||
block:
|
||||
type Foo = object
|
||||
bar: bool
|
||||
var f1: Foo
|
||||
|
||||
block:
|
||||
type Foo = object
|
||||
baz: int
|
||||
var f2: Foo
|
||||
doAssert f2.baz == 0
|
||||
|
||||
block:
|
||||
template fn() =
|
||||
block:
|
||||
type Foo = object
|
||||
x1: int
|
||||
let f1 = Foo(x1: 1)
|
||||
doAssert f1.x1 == 1
|
||||
block:
|
||||
type Foo = object
|
||||
x2: int
|
||||
let f2 = Foo(x2: 2)
|
||||
doAssert f2.x2 == 2
|
||||
static: fn()
|
||||
fn()
|
||||
|
||||
when true: # ditto, refs https://github.com/nim-lang/Nim/issues/5170#issuecomment-582712132
|
||||
type Foo1 = object # at top level
|
||||
bar: bool
|
||||
var f1: Foo1
|
||||
|
||||
block:
|
||||
type Foo1 = object
|
||||
baz: int
|
||||
var f2: Foo1
|
||||
doAssert f2.baz == 0
|
||||
|
||||
block: # make sure `hashType` doesn't recurse infinitely
|
||||
type
|
||||
PFoo = ref object
|
||||
a, b: PFoo
|
||||
c: int
|
||||
var a: PFoo
|
||||
Loading…
Add table
Add a link
Reference in a new issue