Переглянути джерело

fixed if/switch with no else/default compilation

Nicolas Cannasse 19 роки тому
батько
коміт
8be8227a56
2 змінених файлів з 4 додано та 2 видалено
  1. 1 0
      doc/CHANGES.txt
  2. 3 2
      typer.ml

+ 1 - 0
doc/CHANGES.txt

@@ -14,6 +14,7 @@
 	allowed typedef private field access
 	added Class<T> base class type
 	AsyncConnection.call callback is now optional
+	fixed if/switch with no else/default compilation
 
 2006-11-22: 1.09
 	added neko.vm.Module and neko.vm.Loader

+ 3 - 2
typer.ml

@@ -1358,7 +1358,7 @@ and type_switch ctx e cases def need_val p =
 				| [] -> ()
 				| _ -> display_error ctx ("Some constructors are not matched : " ^ String.concat "," l) p
 			);
-			None
+			if need_val then Some (null p) else None
 		| Some e ->
 			let e = type_expr ctx ~need_val e in
 			if need_val then unify ctx e.etype t e.epos;
@@ -1631,7 +1631,8 @@ and type_expr ctx ?(need_val=true) (e,p) =
 		unify ctx e.etype (t_bool ctx) e.epos;
 		let e1 = type_expr ctx ~need_val e1 in
 		(match e2 with
-		| None -> mk (TIf (e,e1,None)) (t_void ctx) p
+		| None -> 
+			mk (TIf (e,e1,if need_val then Some (null p) else None)) (t_void ctx) p
 		| Some e2 ->
 			let e2 = type_expr ctx ~need_val e2 in
 			let t = if not need_val then t_void ctx else (try