Quellcode durchsuchen

[matcher] don't forget switch type when optimizing single-case matches (closes #6561)

Simon Krajewski vor 8 Jahren
Ursprung
Commit
269d2a0fa8
2 geänderte Dateien mit 20 neuen und 1 gelöschten Zeilen
  1. 1 1
      src/typing/matcher.ml
  2. 19 0
      tests/unit/src/unit/issues/Issue6561.hx

+ 1 - 1
src/typing/matcher.ml

@@ -1356,7 +1356,7 @@ module TexprConverter = struct
 				in
 				begin match cases with
 					| [_,e2] when e_default = None && (match finiteness with RunTimeFinite -> true | _ -> false) ->
-						e2
+						{e2 with etype = t_switch}
 					| [[e1],e2] when (with_type = NoValue || e_default <> None) && ctx.com.platform <> Java (* TODO: problem with TestJava.hx:285 *) ->
 						let e_op = mk (TBinop(OpEq,e_subject,e1)) ctx.t.tbool e_subject.epos in
 						mk (TIf(e_op,e2,e_default)) t_switch dt.dt_pos

+ 19 - 0
tests/unit/src/unit/issues/Issue6561.hx

@@ -0,0 +1,19 @@
+package unit.issues;
+
+private enum Log<A> {
+	Log(msg:String):Log<String>;
+}
+
+
+class Issue6561 extends unit.Test {
+	function test() {
+		eq("hello", apply(Log("hello")));
+	}
+
+  	static function apply<A>(f:Log<A>):A {
+		return switch f {
+			case Log(msg):
+      			msg;
+		}
+  	}
+}