Skip to content

Commit

Permalink
fixes nim-lang#20807, refs nim-lang#20450, regression with seq infere…
Browse files Browse the repository at this point in the history
  • Loading branch information
metagn authored Nov 12, 2022
1 parent 8e1181b commit 77e58bf
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 1 deletion.
6 changes: 5 additions & 1 deletion compiler/semexprs.nim
Original file line number Diff line number Diff line change
Expand Up @@ -2402,12 +2402,16 @@ proc semMagic(c: PContext, n: PNode, s: PSym, flags: TExprFlags; expectedType: P
markUsed(c, n.info, s)
result = semSizeof(c, setMs(n, s))
of mArrToSeq, mOpenArrayToSeq:
if n.len == 2 and expectedType != nil and (
if expectedType != nil and (
let expected = expectedType.skipTypes(abstractRange-{tyDistinct});
expected.kind in {tySequence, tyOpenArray}):
# seq type inference
var arrayType = newType(tyOpenArray, nextTypeId(c.idgen), expected.owner)
arrayType.rawAddSon(expected[0])
if n[0].kind == nkSym and sfFromGeneric in n[0].sym.flags:
# may have been resolved to `@`[empty] at some point,
# reset to `@` to deal with this
n[0] = newSymNode(n[0].sym.owner, n[0].info)
n[1] = semExpr(c, n[1], flags, arrayType)
result = semDirectOp(c, n, flags, expectedType)
else:
Expand Down
11 changes: 11 additions & 0 deletions tests/types/ttopdowninference.nim
Original file line number Diff line number Diff line change
Expand Up @@ -244,3 +244,14 @@ block: # bug #11777
type S = set[0..5]
var s: S = {1, 2}
doAssert 1 in s

block: # regression #20807
var s: seq[string]
template fail =
s = @[]
template test(body: untyped) =
body
proc test(a: string) = discard
test: fail()
doAssert not (compiles do:
let x: seq[int] = `@`[string]([]))

0 comments on commit 77e58bf

Please sign in to comment.