浏览代码

[typer] fix type parameter checks when comparing methods

closes #9797
Simon Krajewski 5 年之前
父节点
当前提交
f0e8ef8253
共有 2 个文件被更改,包括 22 次插入1 次删除
  1. 7 1
      src/codegen/overloads.ml
  2. 15 0
      tests/unit/src/unit/issues/Issue9797.hx

+ 7 - 1
src/codegen/overloads.ml

@@ -13,7 +13,13 @@ let same_overload_args ?(get_vmtype) t1 t2 f1 f2 =
 			| [],[] ->
 				true
 			| (n1,t1) :: params1,(n2,t2) :: params2 ->
-				n1 = n2 && f_eq t1 t2 && loop params1 params2
+				let constraints_equal t1 t2 = match follow t1,t2 with
+					| TInst({cl_kind = KTypeParameter tl1},_),TInst({cl_kind = KTypeParameter tl2},_) ->
+						Ast.safe_for_all2 f_eq tl1 tl2
+					| _ ->
+						false
+				in
+				n1 = n2 && constraints_equal t1 t2 && loop params1 params2
 			| [],_
 			| _,[] ->
 				false

+ 15 - 0
tests/unit/src/unit/issues/Issue9797.hx

@@ -0,0 +1,15 @@
+package unit.issues;
+
+private abstract class AbstractClass {
+	abstract function test<T>():Void;
+}
+
+private class ConcreteClass extends AbstractClass {
+	override function test<T>():Void {}
+}
+
+class Issue9797 extends unit.Test {
+	function test() {
+		utest.Assert.pass();
+	}
+}