diff options
| author | Pierre-Marie Pédrot | 2018-04-17 16:07:37 +0200 |
|---|---|---|
| committer | Pierre-Marie Pédrot | 2018-06-23 01:38:33 +0200 |
| commit | 6007579ade085a60664e6b0d4596ff98c51aabf9 (patch) | |
| tree | 58c0b5ae6c6f77b31df07e0bd906f56c23ec044a /kernel/cClosure.ml | |
| parent | c3318ad8408b1ceb0bfd4c2bfedec63ce9324698 (diff) | |
Using more general information for primitive records.
This brings more compatibility with handling of mutual primitive records
in the kernel.
Diffstat (limited to 'kernel/cClosure.ml')
| -rw-r--r-- | kernel/cClosure.ml | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/kernel/cClosure.ml b/kernel/cClosure.ml index c9362bce65..1d5142a5c2 100644 --- a/kernel/cClosure.ml +++ b/kernel/cClosure.ml @@ -820,10 +820,12 @@ let drop_parameters depth n argstk = constructor is partially applied. *) let eta_expand_ind_stack env ind m s (f, s') = + let open Declarations in let mib = lookup_mind (fst ind) env in match mib.Declarations.mind_record with - | Some (Some (_,projs,pbs)) when + | PrimRecord infos when mib.Declarations.mind_finite == Declarations.BiFinite -> + let (_, projs, _) = infos.(snd ind) in (* (Construct, pars1 .. parsm :: arg1...argn :: []) ~= (f, s') -> arg1..argn ~= (proj1 t...projn t) where t = zip (f,s') *) let pars = mib.Declarations.mind_nparams in @@ -834,7 +836,7 @@ let eta_expand_ind_stack env ind m s (f, s') = let hstack = Array.map (fun p -> { norm = Red; (* right can't be a constructor though *) term = FProj (Projection.make p true, right) }) projs in argss, [Zapp hstack] - | _ -> raise Not_found (* disallow eta-exp for non-primitive records *) + | PrimRecord _ | NotRecord | FakeRecord -> raise Not_found (* disallow eta-exp for non-primitive records *) let rec project_nth_arg n argstk = match argstk with |
