mirror of
https://github.com/nim-lang/Nim.git
synced 2026-01-06 13:07:48 +00:00
Merge pull request #4474 from mbaulch/fix3516
Recursively check literals for tyEmpty.
This commit is contained in:
@@ -411,6 +411,13 @@ proc semUsing(c: PContext; n: PNode): PNode =
|
||||
if a.sons[length-1].kind != nkEmpty:
|
||||
localError(a.info, "'using' sections cannot contain assignments")
|
||||
|
||||
proc hasEmpty(typ: PType): bool =
|
||||
if typ.kind in {tySequence, tyArray, tySet}:
|
||||
result = typ.lastSon.kind == tyEmpty
|
||||
elif typ.kind == tyTuple:
|
||||
for s in typ.sons:
|
||||
result = result or hasEmpty(s)
|
||||
|
||||
proc semVarOrLet(c: PContext, n: PNode, symkind: TSymKind): PNode =
|
||||
var b: PNode
|
||||
result = copyNode(n)
|
||||
@@ -445,8 +452,7 @@ proc semVarOrLet(c: PContext, n: PNode, symkind: TSymKind): PNode =
|
||||
#changeType(def.skipConv, typ, check=true)
|
||||
else:
|
||||
typ = skipIntLit(def.typ)
|
||||
if typ.kind in {tySequence, tyArray, tySet} and
|
||||
typ.lastSon.kind == tyEmpty:
|
||||
if hasEmpty(typ):
|
||||
localError(def.info, errCannotInferTypeOfTheLiteral,
|
||||
($typ.kind).substr(2).toLower)
|
||||
else:
|
||||
|
||||
11
tests/types/tassignemptytuple.nim
Normal file
11
tests/types/tassignemptytuple.nim
Normal file
@@ -0,0 +1,11 @@
|
||||
discard """
|
||||
file: "tassignemptytuple.nim"
|
||||
line: 11
|
||||
errormsg: "cannot infer the type of the tuple"
|
||||
"""
|
||||
|
||||
var
|
||||
foo: seq[int]
|
||||
bar: tuple[a: seq[int], b: set[char]]
|
||||
|
||||
(foo, bar) = (@[], (@[], {}))
|
||||
Reference in New Issue
Block a user