diff options
Diffstat (limited to 'compiler')
-rwxr-xr-x | compiler/semtypes.nim | 9 | ||||
-rwxr-xr-x | compiler/sigmatch.nim | 2 |
2 files changed, 9 insertions, 2 deletions
diff --git a/compiler/semtypes.nim b/compiler/semtypes.nim index e9cb8babb..3aafd2492 100755 --- a/compiler/semtypes.nim +++ b/compiler/semtypes.nim @@ -198,7 +198,14 @@ proc semTypeIdent(c: PContext, n: PNode): PSym = return result.typ.sym else: return result.typ.sym - if result.kind != skType: GlobalError(n.info, errTypeExpected) + if result.kind != skType: + # this implements the wanted ``var v: V, x: V`` feature ... + var ov: TOverloadIter + var amb = InitOverloadIter(ov, c, n) + while amb != nil and amb.kind != skType: + amb = nextOverloadIter(ov, c, n) + if amb != nil: result = amb + else: GlobalError(n.info, errTypeExpected) if result.typ.kind != tyGenericParam: # XXX get rid of this hack! reset(n[]) diff --git a/compiler/sigmatch.nim b/compiler/sigmatch.nim index af924bafe..6021d27ab 100755 --- a/compiler/sigmatch.nim +++ b/compiler/sigmatch.nim @@ -249,7 +249,7 @@ proc tupleRel(c: var TCandidate, f, a: PType): TTypeRelation = proc matchTypeClass(c: var TCandidate, f, a: PType): TTypeRelation = for i in countup(0, f.sonsLen - 1): let son = f.sons[i] - var match = son.kind == skipTypes(a, {tyRange}).kind + var match = son.kind == skipTypes(a, {tyRange, tyGenericInst}).kind if not match: case son.kind |