Bläddra i källkod

fix accessing abstract fields in nested local functions (fixes #8376)

Aleksandr Kuzmenko 6 år sedan
förälder
incheckning
b00aef6a94
2 ändrade filer med 19 tillägg och 1 borttagningar
  1. 2 1
      src/typing/typer.ml
  2. 17 0
      tests/unit/src/unit/issues/Issue8376.hx

+ 2 - 1
src/typing/typer.ml

@@ -2005,7 +2005,8 @@ and type_local_function ctx name inline f with_type p =
 	) in
 	let curfun = match ctx.curfun with
 		| FunStatic -> FunStatic
-		| FunMemberAbstract -> FunMemberAbstractLocal
+		| FunMemberAbstract
+		| FunMemberAbstractLocal -> FunMemberAbstractLocal
 		| _ -> FunMemberClassLocal
 	in
 	let e , fargs = TypeloadFunction.type_function ctx args rt curfun f ctx.in_display p in

+ 17 - 0
tests/unit/src/unit/issues/Issue8376.hx

@@ -0,0 +1,17 @@
+package unit.issues;
+
+class Issue8376 extends unit.Test {
+	function test() {
+		eq(5, ("hello":Foo).foo(5));
+	}
+}
+
+private abstract Foo(String) from String {
+	public function foo(i:Int) {
+		return (function() {
+			return (function() return baz(i))();
+		})();
+	}
+
+	function baz(i:Int) return i;
+}