summary refs log tree commit diff stats
path: root/compiler
diff options
context:
space:
mode:
authorjcosborn <jcosborn@users.noreply.github.com>2020-08-18 01:23:19 -0500
committerGitHub <noreply@github.com>2020-08-18 08:23:19 +0200
commite194cb41a4502d3d8b5e4426fbd72e8d80513c3b (patch)
tree236cdad9cc77c9d1036b748de3a5ddca1a0e5e35 /compiler
parente9df8ebcfd475a715756d24e1718a5c1455689d2 (diff)
downloadNim-e194cb41a4502d3d8b5e4426fbd72e8d80513c3b.tar.gz
fix overloading issue with generic invocation (#15135)
* fix overloading issue with generic alias

* add test for inheritance depth
Diffstat (limited to 'compiler')
-rw-r--r--compiler/sigmatch.nim15
1 files changed, 1 insertions, 14 deletions
diff --git a/compiler/sigmatch.nim b/compiler/sigmatch.nim
index 786cca01f..1d648c32a 100644
--- a/compiler/sigmatch.nim
+++ b/compiler/sigmatch.nim
@@ -579,7 +579,7 @@ proc procParamTypeRel(c: var TCandidate, f, a: PType): TTypeRelation =
     if f.isMetaType:
       # We are matching a generic proc (as proc param)
       # to another generic type appearing in the proc
-      # signature. There is a change that the target
+      # signature. There is a chance that the target
       # type is already fully-determined, so we are
       # going to try resolve it
       if c.call != nil:
@@ -1496,7 +1496,6 @@ proc typeRel(c: var TCandidate, f, aOrig: PType,
       #echo "inferred ", typeToString(inst), " for ", f
       return typeRel(c, inst, a)
 
-    var depth = 0
     if x.kind == tyGenericInvocation or f[0].kind != tyGenericBody:
       #InternalError("typeRel: tyGenericInvocation -> tyGenericInvocation")
       # simply no match for now:
@@ -1510,18 +1509,6 @@ proc typeRel(c: var TCandidate, f, aOrig: PType,
           # Workaround for regression #4589
           if f[i].kind != tyTypeDesc: return
       result = isGeneric
-    elif x.kind == tyGenericInst and isGenericSubtype(c, x, f, depth, f) and
-          (x.len - 1 == f.len):
-      # do not recurse here in order to not K bind twice for this code:
-      #
-      # type
-      #   BaseFruit[T] = object of RootObj
-      #   Banana[T] = object of BaseFruit[uint32] # Concrete type here, not T!
-      # proc setColor[K](self: var BaseFruit[K])
-      # var x: Banana[float64]
-      # x.setColor()
-      c.inheritancePenalty += depth
-      result = isGeneric
     else:
       let genericBody = f[0]
       var askip = skippedNone