]> matita.cs.unibo.it Git - helm.git/commitdiff
- use an exception to handle empty status nodes
authorStefano Zacchiroli <zack@upsilon.cc>
Wed, 16 Apr 2003 12:51:25 +0000 (12:51 +0000)
committerStefano Zacchiroli <zack@upsilon.cc>
Wed, 16 Apr 2003 12:51:25 +0000 (12:51 +0000)
- removed some ancient comments

helm/hbugs/common/hbugs_messages.ml

index 836008e4041b262f2ba93ca9cf78d1e328a58f52..b7e6f5ddc59a5cd7bdbed32c0d91df5fbe668b17 100644 (file)
@@ -36,6 +36,7 @@ open Pxp_yacc;;
 let debug = true;;
 
 exception Attribute_not_found of string;;
+exception Empty_node;;  (** found a node with no _element_ children *)
 exception No_element_found of string;;
 exception Parse_error of string * string;;  (* parsing subject, reason *)
 exception Unexpected_message of message;;
@@ -47,17 +48,18 @@ let get_attr node name =
     | Value s -> s
     | _ -> raise Not_found)
   with Not_found -> raise (Attribute_not_found name)
+let assert_element n name =
+  match n#node_type with
+  | T_element n when n = name ->
+      ()
+  | _ -> raise (Parse_error ("", "Expected node: " ^ name))
 
   (** given a string representation of a proof asistant state (e.g. the first
   child of the XML root of a State_change or Start_musing message), build from
   it an HBugs view of a proof assistant state *)
 let parse_state (root: ('a node extension as 'a) node) =
-  let assert_element n name =
-    match n#node_type with
-    | T_element n when n = name ->
-        ()
-    | _ -> raise (Parse_error ("", "Expected node: " ^ name))
-  in
+  if (List.filter is_xml_element root#sub_nodes) = [] then
+    raise Empty_node;
   let buf = Buffer.create 10240 in
   let node_to_string (node: ('a node extension as 'a) node) =
     Buffer.clear buf;
@@ -69,15 +71,14 @@ let parse_state (root: ('a node extension as 'a) node) =
   let (goal_node, type_node, body_node) =
     try
       (find_element "CurrentGoal" root,
-       find_element "ConstantType" root,  (* TODO e' sempre ConstantType? *)
+       find_element "ConstantType" root,
        find_element "CurrentProof" root)
     with Not_found ->
       raise (Parse_error ("", "Malformed HBugs status XML document"))
   in
   assert_element root "gTopLevelStatus";
   assert_element goal_node "CurrentGoal";
-  assert_element type_node "ConstantType";  (* TODO: tutti gli xml 'type' hanno
-                                            come root element "ConstantType"? *)
+  assert_element type_node "ConstantType";
   assert_element body_node "CurrentProof";
   goal_node#write (`Out_buffer buf) `Enc_utf8;
   let (type_string, body_string) =
@@ -154,12 +155,7 @@ let msg_of_string' s =
       State_change
         (get_attr root "id",
         match state_node with
-        | Some n ->
-            if n#sub_nodes = [] then  (* TODO don't trust all sub_nodes,
-                                      consider only element sub_nodes *)
-              None
-            else
-              Some (parse_state n)
+        | Some n -> (try Some (parse_state n) with Empty_node -> None)
         | None -> None)
   | T_element "wow" -> Wow (get_attr root "id")