Parcourir la source

do not try to resolve enum abstract constants when the value is null (closes #3181)

Simon Krajewski il y a 11 ans
Parent
commit
3176a5062d
2 fichiers modifiés avec 13 ajouts et 1 suppressions
  1. 1 1
      matcher.ml
  2. 12 0
      tests/unit/issues/Issue3181.hx

+ 1 - 1
matcher.ml

@@ -1336,7 +1336,7 @@ let match_expr ctx e cases def with_type p =
 		let pat = match follow st.st_type with
 			| TAbstract({a_impl = Some cl} as a,_) when Meta.has Meta.Enum a.a_meta ->
 				let rec s_pat pat = match pat.p_def with
-					| PCon ({c_def = CConst c},[]) ->
+					| PCon ({c_def = CConst c},[]) when c <> TNull ->
 						let cf = List.find (fun cf ->
 							match cf.cf_expr with
 							| Some ({eexpr = TConst c2 | TCast({eexpr = TConst c2},None)}) -> c = c2

+ 12 - 0
tests/unit/issues/Issue3181.hx

@@ -0,0 +1,12 @@
+package unit.issues;
+
+@:enum private abstract A(Int) { }
+
+class Issue3181 extends Test {
+	function test() {
+		var a:Null<A> = cast 1;
+		t(unit.TestType.typeError(
+			switch(a) { }
+		));
+	}
+}