Nim/tests/ccgbugs/tsamename3.nim
Timothee Cour 840e13deb7
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
2021-04-14 08:50:15 +02:00

111 lines
2 KiB
Nim

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