From eb633003465532edc8fbd2d56aa3cbd75a3785f4 Mon Sep 17 00:00:00 2001 From: Maxime Buyse Date: Wed, 27 Nov 2024 15:22:31 +0100 Subject: [PATCH] Allow opaque types even without interface mode. --- engine/backends/fstar/fstar_backend.ml | 29 +++++++------------------- 1 file changed, 8 insertions(+), 21 deletions(-) diff --git a/engine/backends/fstar/fstar_backend.ml b/engine/backends/fstar/fstar_backend.ml index 0f9fc288c..46cd5f3e5 100644 --- a/engine/backends/fstar/fstar_backend.ml +++ b/engine/backends/fstar/fstar_backend.ml @@ -995,27 +995,14 @@ struct ty ); ] ) | Type { name; generics; _ } when is_erased -> - if not ctx.interface_mode then - Error.raise - @@ { - kind = - AttributeRejected - { - reason = - "a type cannot be opaque if its module is not extracted \ - as an interface"; - }; - span = e.span; - } - else - let generics = FStarBinder.of_generics e.span generics in - let ty = F.type0_term in - let arrow_typ = - F.term - @@ F.AST.Product (List.map ~f:FStarBinder.to_binder generics, ty) - in - let name = F.id @@ U.Concrete_ident_view.to_definition_name name in - [ F.decl ~fsti:true (F.AST.Val (name, arrow_typ)) ] + let generics = FStarBinder.of_generics e.span generics in + let ty = F.type0_term in + let arrow_typ = + F.term + @@ F.AST.Product (List.map ~f:FStarBinder.to_binder generics, ty) + in + let name = F.id @@ U.Concrete_ident_view.to_definition_name name in + [ F.decl ~fsti:true (F.AST.Val (name, arrow_typ)) ] | Type { name;