Browse Source

[typer] support AKResolve calls

closes #9745
Simon Krajewski 5 years ago
parent
commit
cca9ac7857
2 changed files with 18 additions and 2 deletions
  1. 4 2
      src/typing/calls.ml
  2. 14 0
      tests/unit/src/unit/issues/Issue9745.hx

+ 4 - 2
src/typing/calls.ml

@@ -842,9 +842,11 @@ let build_call ?(mode=MGet) ctx acc el (with_type:WithType.t) p =
 	| AKUsingField sea ->
 		let eparam = sea.se_this in
 		dispatch#field_call sea.se_access [eparam] el
-	| AKNo _ | AKAccess _ | AKResolve _ ->
+	| AKResolve(sea,name) ->
+		dispatch#expr_call (dispatch#resolve_call sea name) el
+	| AKNo _ | AKAccess _ ->
 		ignore(acc_get ctx acc p);
-		die "" __LOC__
+		error ("Unexpected access mode, please report this: " ^ (s_access_kind acc)) p
 	| AKAccessor fa ->
 		let e = dispatch#field_call fa [] [] in
 		dispatch#expr_call e el

+ 14 - 0
tests/unit/src/unit/issues/Issue9745.hx

@@ -0,0 +1,14 @@
+package unit.issues;
+
+private abstract A(String) from String {
+	@:resolve function resolve(s:String) {
+		return () -> s;
+	}
+}
+
+class Issue9745 extends unit.Test {
+	function test() {
+		var a:A = "foo";
+		eq("field", a.field());
+	}
+}