fixes #13646
This commit is contained in:
parent
3a6b470412
commit
a102eb5ef6
3 changed files with 34 additions and 6 deletions
|
|
@ -232,13 +232,14 @@ proc semConv(c: PContext, n: PNode): PNode =
|
|||
result = newNodeI(nkConv, n.info)
|
||||
|
||||
var targetType = semTypeNode(c, n[0], nil)
|
||||
if targetType.kind == tyTypeDesc:
|
||||
case targetType.kind
|
||||
of tyTypeDesc:
|
||||
internalAssert c.config, targetType.len > 0
|
||||
if targetType.base.kind == tyNone:
|
||||
return semTypeOf(c, n)
|
||||
else:
|
||||
targetType = targetType.base
|
||||
elif targetType.kind == tyStatic:
|
||||
of tyStatic:
|
||||
var evaluated = semStaticExpr(c, n[1])
|
||||
if evaluated.kind == nkType or evaluated.typ.kind == tyTypeDesc:
|
||||
result = n
|
||||
|
|
@ -248,6 +249,7 @@ proc semConv(c: PContext, n: PNode): PNode =
|
|||
return evaluated
|
||||
else:
|
||||
targetType = targetType.base
|
||||
else: discard
|
||||
|
||||
maybeLiftType(targetType, c, n[0].info)
|
||||
|
||||
|
|
@ -268,7 +270,7 @@ proc semConv(c: PContext, n: PNode): PNode =
|
|||
targetType.skipTypes(abstractPtrs).kind == tyObject:
|
||||
localError(c.config, n.info, "object construction uses ':', not '='")
|
||||
var op = semExprWithType(c, n[1])
|
||||
if targetType.isMetaType:
|
||||
if targetType.kind != tyGenericParam and targetType.isMetaType:
|
||||
let final = inferWithMetatype(c, targetType, op, true)
|
||||
result.add final
|
||||
result.typ = final.typ
|
||||
|
|
@ -279,6 +281,10 @@ proc semConv(c: PContext, n: PNode): PNode =
|
|||
# here or needs to be overwritten too then.
|
||||
result.add op
|
||||
|
||||
if targetType.kind == tyGenericParam:
|
||||
result.typ = makeTypeFromExpr(c, copyTree(result))
|
||||
return result
|
||||
|
||||
if not isSymChoice(op):
|
||||
let status = checkConvertible(c, result.typ, op)
|
||||
case status
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue