aboutsummaryrefslogtreecommitdiffhomepage
path: root/interp/constrintern.ml
diff options
context:
space:
mode:
Diffstat (limited to 'interp/constrintern.ml')
-rw-r--r--interp/constrintern.ml32
1 files changed, 31 insertions, 1 deletions
diff --git a/interp/constrintern.ml b/interp/constrintern.ml
index 74740abce..e7db4afe4 100644
--- a/interp/constrintern.ml
+++ b/interp/constrintern.ml
@@ -105,7 +105,7 @@ let add_glob loc ref =
in
let s = string_of_dirpath (find_module dir) in
i*)
- let sp = Nametab.sp_of_global None ref in
+ let sp = Nametab.sp_of_global ref in
let id = let _,id = repr_path sp in string_of_id id in
let dp = string_of_dirpath (Declare.library_part ref) in
dump_string (Printf.sprintf "R%d %s.%s\n" (fst loc) dp id)
@@ -418,6 +418,8 @@ let internalise isarity sigma env allow_soapp lvar c =
| CLetIn (loc,(_,na),c1,c2) ->
RLetIn (loc, na, intern false env c1,
intern false (name_fold Idset.add na ids,impls,scopes) c2)
+ | CNotation (loc,"- _",[CNumeral(_,Bignat.POS p)]) ->
+ Symbols.interp_numeral loc (Bignat.NEG p) scopes
| CNotation (loc,ntn,args) ->
let scopes = if isarity then Symbols.type_scope::scopes else scopes in
let (ids,c) = Symbols.interp_notation ntn scopes in
@@ -665,10 +667,38 @@ let rec pat_of_raw metas vars lvar = function
PCase (st,option_app (pat_of_raw metas vars lvar) po,
pat_of_raw metas vars lvar c,
Array.map (pat_of_raw metas vars lvar) br)
+ | RCases (loc,po,[c],br) ->
+ PCase (Term.RegularStyle,option_app (pat_of_raw metas vars lvar) po,
+ pat_of_raw metas vars lvar c,
+ Array.init (List.length br)
+ (pat_of_raw_branch loc metas vars lvar br))
| r ->
let loc = loc_of_rawconstr r in
user_err_loc (loc,"pattern_of_rawconstr", str "Not supported pattern")
+and pat_of_raw_branch loc metas vars lvar brs i =
+ let bri = List.filter
+ (function
+ (_,_,[PatCstr(_,c,lv,_)],_) -> snd c = i+1
+ | (loc,_,_,_) ->
+ user_err_loc (loc,"pattern_of_rawconstr",
+ str "Not supported pattern")) brs in
+ match bri with
+ [(_,_,[PatCstr(_,_,lv,_)],br)] ->
+ let lna =
+ List.map
+ (function PatVar(_,na) -> na
+ | PatCstr(loc,_,_,_) ->
+ user_err_loc (loc,"pattern_of_rawconstr",
+ str "Not supported pattern")) lv in
+ let vars' = List.rev lna @ vars in
+ List.fold_right (fun na b -> PLambda(na,PMeta None,b)) lna
+ (pat_of_raw metas vars' lvar br)
+ | _ -> user_err_loc (loc,"pattern_of_rawconstr",
+ str "No unique branch for " ++ int (i+1) ++
+ str"-th constructor")
+
+
let pattern_of_rawconstr lvar c =
let metas = ref [] in
let p = pat_of_raw metas [] lvar c in