Browse Source

minor fix for empty case expression (type as void instead of {} )

Nicolas Cannasse 16 years ago
parent
commit
fa3c372a1f
2 changed files with 6 additions and 3 deletions
  1. 2 2
      parser.ml
  2. 4 1
      typer.ml

+ 2 - 2
parser.ml

@@ -622,12 +622,12 @@ and expr_next e1 = parser
 
 
 and parse_switch_cases eswitch cases = parser
 and parse_switch_cases eswitch cases = parser
 	| [< '(Kwd Default,p1); '(DblDot,_); s >] ->
 	| [< '(Kwd Default,p1); '(DblDot,_); s >] ->
-		let b = (try block1 s with Display e -> display (ESwitch (eswitch,cases,Some e),p1)) in
+		let b = EBlock (try block [] s with Display e -> display (ESwitch (eswitch,cases,Some e),p1)) in		
 		let l , def = parse_switch_cases eswitch cases s in
 		let l , def = parse_switch_cases eswitch cases s in
 		(match def with None -> () | Some (e,p) -> error Duplicate_default p);
 		(match def with None -> () | Some (e,p) -> error Duplicate_default p);
 		l , Some (b,p1)
 		l , Some (b,p1)
 	| [< '(Kwd Case,p1); el = psep Comma expr; '(DblDot,_); s >] ->
 	| [< '(Kwd Case,p1); el = psep Comma expr; '(DblDot,_); s >] ->
-		let b = (try block1 s with Display e -> display (ESwitch (eswitch,List.rev ((el,e) :: cases),None),p1)) in
+		let b = EBlock (try block [] s with Display e -> display (ESwitch (eswitch,List.rev ((el,e) :: cases),None),p1)) in
 		parse_switch_cases eswitch ((el,(b,p1)) :: cases) s
 		parse_switch_cases eswitch ((el,(b,p1)) :: cases) s
 	| [< >] ->
 	| [< >] ->
 		List.rev cases , None
 		List.rev cases , None

+ 4 - 1
typer.ml

@@ -965,7 +965,10 @@ and type_switch ctx e cases def need_val p =
 			v
 			v
 		) el in
 		) el in
 		if el = [] then error "Case must match at least one expression" (pos e2);
 		if el = [] then error "Case must match at least one expression" (pos e2);
-		let e2 = type_expr ctx ~need_val e2 in
+		let e2 = (match fst e2 with 
+			| EBlock [] -> mk (TConst TNull) ctx.api.tvoid (pos e2)
+			| _ -> type_expr ctx ~need_val e2
+		) in
 		locals();
 		locals();
 		unify_val e2;
 		unify_val e2;
 		(el,e2)
 		(el,e2)