Handle tuples with unnamed fields, symbols, and more. Less duplication.

This commit is contained in:
Matthew Baulch
2016-07-15 20:36:11 +10:00
parent 05486957d4
commit 915185dd11
2 changed files with 6 additions and 5 deletions

View File

@@ -198,11 +198,8 @@ proc semConv(c: PContext, n: PNode): PNode =
# separate proc from fitNode?
if op.kind == nkSym and op.sym.isGenericRoutine:
result.sons[1] = fitNode(c, result.typ, result.sons[1])
elif op.kind == nkPar and targetType.kind == tyTuple and
op.sons.len > 0 and op.sons[0].kind == nkExprColonExpr:
# Tuple conversion: set field types in case any are tyEmpty (eg. `@[]`)
for i in 0..<op.sons.len:
op.sons[i][1].typ = targetType.sons[i]
elif op.kind == nkPar and targetType.kind == tyTuple:
op = fitNode(c, targetType, op)
of convNotNeedeed:
message(n.info, hintConvFromXtoItselfNotNeeded, result.typ.typeToString)
of convNotLegal:

View File

@@ -17,3 +17,7 @@ var bar = (
strings: @[],
ints: @[],
).MyTuple
var fooUnnamed = MyTuple((7, @[], @[]))
var n = 7
var fooSym = MyTuple((num: n, strings: @[], ints: @[]))