]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/software/components/cic/cicParser.ml
The function uri_of_term now works also if the explciit substitution list
[helm.git] / helm / software / components / cic / cicParser.ml
index a7ad3c9cf1f88c8cc56cfdadad7c119c3098bc45..150fe4ad983f6dab3bad1d117877e6093531b755 100644 (file)
@@ -672,12 +672,19 @@ let end_element ctxt tag =
         | [ "value", "remark"] -> Obj_flavour `Remark
         | [ "value", "theorem"] -> Obj_flavour `Theorem
         | [ "value", "variant"] -> Obj_flavour `Variant
+        | [ "value", "axiom"] -> Obj_flavour `Axiom
         | _ -> attribute_error ())
   | "class" ->
       let class_modifiers = pop_class_modifiers ctxt in
       push ctxt
         (match pop_tag_attrs ctxt with
-        | ["value", "coercion"] -> Obj_class `Coercion
+        | ["value", "coercion"] -> Obj_class (`Coercion 0)
+        | ("value", "coercion")::["arity",n]  
+        | ("arity",n)::["value", "coercion"] -> 
+            let arity = try int_of_string n with Failure _ ->
+              parse_error "\"arity\" must be an integer"
+            in
+            Obj_class (`Coercion arity)
         | ["value", "elim"] ->
             (match class_modifiers with
             | [Cic_term (Cic.ASort (_, sort))] -> Obj_class (`Elim sort)
@@ -690,8 +697,15 @@ let end_element ctxt tag =
                 (function
                   | Obj_field name -> 
                       (match Str.split (Str.regexp " ") name with
-                      | [name] -> name, false
-                      | [name;"coercion"] -> name,true
+                      | [name] -> name, false, 0
+                      | [name;"coercion"] -> name,true,0
+                      | [name;"coercion"; n] -> 
+                          let n = 
+                            try int_of_string n 
+                            with Failure _ -> 
+                              parse_error "int expected after \"coercion\""
+                          in
+                          name,true,n
                       | _ -> 
                           parse_error
                             "wrong \"field\"'s name attribute")
@@ -751,6 +765,7 @@ let parse uri filename =
   | Failure "int_of_string" -> parse_error ctxt "integer number expected"
   | Invalid_argument "bool_of_string" -> parse_error ctxt "boolean expected"
   | P.Parse_error msg -> parse_error ctxt ("parse error: " ^ msg)
+  | Sys.Break
   | Parser_failure _
   | Getter_failure _ as exn ->
       raise exn