diff options
| author | Maxime Dénès | 2018-06-19 08:27:51 +0200 |
|---|---|---|
| committer | Maxime Dénès | 2018-06-19 08:27:51 +0200 |
| commit | 981864d47efca1d42f43dc5b7c5439638a86f315 (patch) | |
| tree | a835613a0143b6cfc2ab8f94361afda62840954e /plugins | |
| parent | f0ae8e82ea53ce72ddac1fb8f7f40fd1beacf787 (diff) | |
| parent | e43710b391c278ac7fcb808ec28d720b4317660c (diff) | |
Merge PR #7714: Remove primitive-projection related data from the kernel
Diffstat (limited to 'plugins')
| -rw-r--r-- | plugins/extraction/extraction.ml | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/plugins/extraction/extraction.ml b/plugins/extraction/extraction.ml index 5aee70194d..3a61c7747d 100644 --- a/plugins/extraction/extraction.ml +++ b/plugins/extraction/extraction.ml @@ -1065,11 +1065,15 @@ let extract_constant env kn cb = (match cb.const_body with | Undef _ -> warn_info (); mk_typ_ax () | Def c -> - (match cb.const_proj with + (match Environ.is_projection kn env with | false -> mk_typ (get_body c) | true -> let pb = lookup_projection (Projection.make kn false) env in - mk_typ (EConstr.of_constr pb.proj_body)) + (** FIXME: handle mutual records *) + let ind = (pb.Declarations.proj_ind, 0) in + let bodies = Inductiveops.legacy_match_projection env ind in + let body = bodies.(pb.Declarations.proj_arg) in + mk_typ (EConstr.of_constr body)) | OpaqueDef c -> add_opaque r; if access_opaque () then mk_typ (get_opaque env c) @@ -1078,11 +1082,15 @@ let extract_constant env kn cb = (match cb.const_body with | Undef _ -> warn_info (); mk_ax () | Def c -> - (match cb.const_proj with + (match Environ.is_projection kn env with | false -> mk_def (get_body c) | true -> let pb = lookup_projection (Projection.make kn false) env in - mk_def (EConstr.of_constr pb.proj_body)) + (** FIXME: handle mutual records *) + let ind = (pb.Declarations.proj_ind, 0) in + let bodies = Inductiveops.legacy_match_projection env ind in + let body = bodies.(pb.Declarations.proj_arg) in + mk_def (EConstr.of_constr body)) | OpaqueDef c -> add_opaque r; if access_opaque () then mk_def (get_opaque env c) |
