Просмотр исходного кода

don't choke if there is no position when decoding a catch

Simon Krajewski 9 лет назад
Родитель
Сommit
1fb3f6a23e
1 измененных файлов с 6 добавлено и 2 удалено
  1. 6 2
      src/macro/interp.ml

+ 6 - 2
src/macro/interp.ml

@@ -4233,8 +4233,12 @@ let decode_import_mode t =
 
 let decode_import t = (List.map (fun o -> ((dec_string (field o "name")), (decode_pos (field o "pos")))) (dec_array (field t "path")), decode_import_mode (field t "mode"))
 
+let maybe_decode_pos v = match v with
+	| VAbstract (APos p) -> p
+	| _ -> null_pos
+
 let decode_placed_name vp v =
-	dec_string v,(match vp with VAbstract (APos p) -> p | _ -> null_pos)
+	dec_string v,maybe_decode_pos vp
 
 let rec decode_path t =
 	{
@@ -4383,7 +4387,7 @@ let rec decode_expr v =
 			ESwitch (loop e,cases,opt decode_null_expr eo)
 		| 18, [e;catches] ->
 			let catches = List.map (fun c ->
-				((decode_placed_name (field c "name_pos") (field c "name")),(decode_ctype (field c "type")),loop (field c "expr"),decode_pos (field c "pos"))
+				((decode_placed_name (field c "name_pos") (field c "name")),(decode_ctype (field c "type")),loop (field c "expr"),maybe_decode_pos (field c "pos"))
 			) (dec_array catches) in
 			ETry (loop e, catches)
 		| 19, [e] ->