From ee6a46f264d41de1d252d1b7e669b7656211a498 Mon Sep 17 00:00:00 2001 From: Andreas Rumpf Date: Mon, 8 Feb 2016 01:43:38 +0100 Subject: some progress on #3832 --- compiler/parampatterns.nim | 3 +++ compiler/semcall.nim | 8 +++++++- 2 files changed, 10 insertions(+), 1 deletion(-) (limited to 'compiler') diff --git a/compiler/parampatterns.nim b/compiler/parampatterns.nim index 978583c14..f8f1f355c 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 a0d0db3ad..eba1059ef 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: -- cgit 1.4.1-2-gfad0 Nim/diff/tests/stdlib/t9754.nim?h=devel&id=ab4278d2179639f19967431a7aa1be858046f7a7'>diff stats
path: root/tests/stdlib/t9754.nim
blob: 971b5a8fbe897e194e6b73fb1db582991138a673 (plain) (blame)
1
2
3
4
5
6