Jelajahi Sumber

respect abstract casts on function bind (closes #5783)

Simon Krajewski 8 tahun lalu
induk
melakukan
619d7f070a
2 mengubah file dengan 14 tambahan dan 1 penghapusan
  1. 1 1
      src/typing/typer.ml
  2. 13 0
      tests/unit/src/unit/issues/Issue5783.hx

+ 1 - 1
src/typing/typer.ml

@@ -1607,7 +1607,7 @@ let type_bind ctx (e : texpr) params p =
 			loop args params given_args (missing_args @ [v,o]) (ordered_args @ [vexpr v])
 		| (n,o,t) :: args , param :: params ->
 			let e = type_expr ctx param (WithType t) in
-			unify ctx e.etype t p;
+			let e = AbstractCast.cast_or_unify ctx t e p in
 			let v = alloc_var (alloc_name n) t (pos param) in
 			loop args params (given_args @ [v,o,Some e]) missing_args (ordered_args @ [vexpr v])
 	in

+ 13 - 0
tests/unit/src/unit/issues/Issue5783.hx

@@ -0,0 +1,13 @@
+package unit.issues;
+
+private abstract I(Int) from Int to Int {
+	@:from
+	public static function fromString(v:String):I return Std.parseInt(v);
+}
+
+class Issue5783 extends unit.Test {
+	function test() {
+		function add(i:I) return i + 1;
+		var f = add.bind('1');
+	}
+}