From ee6a46f264d41de1d252d1b7e669b7656211a498 Mon Sep 17 00:00:00 2001 From: Andreas Rumpf Date: Mon, 8 Feb 2016 01:43:38 +0100 Subject: [PATCH] some progress on #3832 --- compiler/parampatterns.nim | 3 +++ compiler/semcall.nim | 8 +++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/compiler/parampatterns.nim b/compiler/parampatterns.nim index 978583c14e..f8f1f355cc 100644 --- a/compiler/parampatterns.nim +++ b/compiler/parampatterns.nim @@ -182,6 +182,9 @@ proc isAssignable*(owner: PSym, n: PNode; isUnsafeAddr=false): TAssignableResult ## 'owner' can be nil! result = arNone case n.kind + of nkEmpty: + if n.typ != nil and n.typ.kind == tyVar: + result = arLValue of nkSym: let kinds = if isUnsafeAddr: {skVar, skResult, skTemp, skParam, skLet} else: {skVar, skResult, skTemp} diff --git a/compiler/semcall.nim b/compiler/semcall.nim index a0d0db3ad6..eba1059ef1 100644 --- a/compiler/semcall.nim +++ b/compiler/semcall.nim @@ -420,7 +420,13 @@ proc searchForBorrowProc(c: PContext, startScope: PScope, fn: PSym): PSym = let param = fn.typ.n.sons[i] let t = skipTypes(param.typ, abstractVar-{tyTypeDesc}) if t.kind == tyDistinct or param.typ.kind == tyDistinct: hasDistinct = true - call.add(newNodeIT(nkEmpty, fn.info, t.baseOfDistinct)) + var x: PType + if param.typ.kind == tyVar: + x = newTypeS(tyVar, c) + x.addSonSkipIntLit t.baseOfDistinct + else: + x = t.baseOfDistinct + call.add(newNodeIT(nkEmpty, fn.info, x)) if hasDistinct: var resolved = semOverloadedCall(c, call, call, {fn.kind}) if resolved != nil: