Browse Source

fixed strict mode was never enabled

Alexander Kuzmenko 6 years ago
parent
commit
b5269be625
2 changed files with 11 additions and 5 deletions
  1. 5 5
      src/typing/nullSafety.ml
  2. 6 0
      tests/nullsafety/src/cases/TestStrict.hx

+ 5 - 5
src/typing/nullSafety.ml

@@ -30,7 +30,7 @@ let safety_error () : unit = raise (Safety_error NullSafetyError)
 
 type safety_mode =
 	| SMOff
-	| SMWeak
+	| SMLoose
 	| SMStrict
 
 (**
@@ -379,11 +379,11 @@ let safety_mode (metadata:Ast.metadata) =
 		match mode, meta with
 			| Some SMOff, _
 			| _, [] -> mode
-			| None, (Meta.NullSafety, [(EConst (Ident "Off"), _)], _) :: _ ->
+			| _, (Meta.NullSafety, [(EConst (Ident "Off"), _)], _) :: _ ->
 				Some SMOff
 			| None, (Meta.NullSafety, ([] | [(EConst (Ident "Loose"), _)]), _) :: rest ->
-				traverse (Some SMWeak) rest
-			| Some SMWeak, (Meta.NullSafety, [(EConst (Ident "Strict"), _)], _) :: rest ->
+				traverse (Some SMLoose) rest
+			| _, (Meta.NullSafety, [(EConst (Ident "Strict"), _)], _) :: rest ->
 				traverse (Some SMStrict) rest
 			| _, _ :: rest ->
 				traverse mode rest
@@ -1250,7 +1250,7 @@ class expr_checker mode immediate_execution report =
 class class_checker cls immediate_execution report  =
 	object (self)
 			val is_safe_class = safety_enabled cls.cl_meta
-			val mutable checker = new expr_checker SMWeak immediate_execution report
+			val mutable checker = new expr_checker SMLoose immediate_execution report
 			val mutable mode = None
 		(**
 			Entry point for checking a class

+ 6 - 0
tests/nullsafety/src/cases/TestStrict.hx

@@ -783,6 +783,12 @@ class TestStrict {
 		a = b;
 	}
 
+	function nonFinalField_shouldFail(o:{field:Null<String>}) {
+		if(o.field != null) {
+			shouldFail(var notNullable:String = o.field);
+		}
+	}
+
 	static function anonFinalNullableField_checkedForNull() {
 		var o:{ final ?f:String; } = {};
 		if (o.f != null) {