parent
8a19ac2070
commit
bbb6d2c69d
2 changed files with 41 additions and 2 deletions
|
|
@ -222,9 +222,11 @@ proc isRecursiveType(t: PType, cycleDetector: var IntSet): bool =
|
||||||
|
|
||||||
proc fitDefaultNode(c: PContext, n: PNode): PType =
|
proc fitDefaultNode(c: PContext, n: PNode): PType =
|
||||||
let expectedType = if n[^2].kind != nkEmpty: semTypeNode(c, n[^2], nil) else: nil
|
let expectedType = if n[^2].kind != nkEmpty: semTypeNode(c, n[^2], nil) else: nil
|
||||||
|
let oldType = n[^1].typ
|
||||||
n[^1] = semConstExpr(c, n[^1], expectedType = expectedType)
|
n[^1] = semConstExpr(c, n[^1], expectedType = expectedType)
|
||||||
|
n[^1].flags.incl nfSem
|
||||||
if n[^2].kind != nkEmpty:
|
if n[^2].kind != nkEmpty:
|
||||||
if expectedType != nil:
|
if expectedType != nil and oldType != expectedType:
|
||||||
n[^1] = fitNodeConsiderViewType(c, expectedType, n[^1], n[^1].info)
|
n[^1] = fitNodeConsiderViewType(c, expectedType, n[^1], n[^1].info)
|
||||||
result = n[^1].typ
|
result = n[^1].typ
|
||||||
else:
|
else:
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ discard """
|
||||||
targets: "c cpp js"
|
targets: "c cpp js"
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import std/[times, macros]
|
import std/[times, macros, tables]
|
||||||
|
|
||||||
type
|
type
|
||||||
Guess = object
|
Guess = object
|
||||||
|
|
@ -236,6 +236,7 @@ template main {.dirty.} =
|
||||||
doAssert x.obj.name.scale == 1
|
doAssert x.obj.name.scale == 1
|
||||||
|
|
||||||
when nimvm:
|
when nimvm:
|
||||||
|
# todo
|
||||||
discard "fixme"
|
discard "fixme"
|
||||||
else:
|
else:
|
||||||
when defined(gcArc) or defined(gcOrc):
|
when defined(gcArc) or defined(gcOrc):
|
||||||
|
|
@ -523,5 +524,41 @@ template main {.dirty.} =
|
||||||
|
|
||||||
discard oToEither(O())
|
discard oToEither(O())
|
||||||
|
|
||||||
|
block: # bug #20695
|
||||||
|
type
|
||||||
|
Default = object
|
||||||
|
tabs: Table[string, int] = initTable[string, int]()
|
||||||
|
|
||||||
|
let d = default(Default)
|
||||||
|
doAssert d.tabs.len == 0
|
||||||
|
|
||||||
|
block:
|
||||||
|
type
|
||||||
|
Default = object
|
||||||
|
tabs: Table[string, int] = Table[string, int]()
|
||||||
|
|
||||||
|
let d = default(Default)
|
||||||
|
doAssert d.tabs.len == 0
|
||||||
|
|
||||||
|
|
||||||
|
block:
|
||||||
|
type DjangoDateTime = distinct DateTime
|
||||||
|
|
||||||
|
type Default = object
|
||||||
|
data: DjangoDateTime = DjangoDateTime(DateTime())
|
||||||
|
|
||||||
|
let x = default(Default)
|
||||||
|
doAssert x.data is DjangoDateTime
|
||||||
|
|
||||||
|
block:
|
||||||
|
type DjangoDateTime = distinct DateTime
|
||||||
|
|
||||||
|
type Default = object
|
||||||
|
data = DjangoDateTime(DateTime())
|
||||||
|
|
||||||
|
let x = default(Default)
|
||||||
|
doAssert x.data is DjangoDateTime
|
||||||
|
|
||||||
|
|
||||||
static: main()
|
static: main()
|
||||||
main()
|
main()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue