@@ -11,6 +11,8 @@ module Thir = struct
1111 type generic_param_kind = generic_param_kind_for__decorated_for__expr_kind
1212 type trait_item = trait_item_for__decorated_for__expr_kind
1313 type ty = node_for__ty_kind
14+ type item_ref = node_for__item_ref_contents
15+ type trait_ref = item_ref
1416end
1517
1618open ! Prelude
@@ -505,38 +507,35 @@ end) : EXPR = struct
505507 let then_ = c_expr then ' in
506508 let else_ = Option. map ~f: c_expr else_opt in
507509 If { cond; else_; then_ }
508- | Call
509- {
510- args;
511- fn_span = _;
512- trait;
513- from_hir_call = _;
514- fun';
515- ty = _;
516- generic_args;
517- bounds_impls;
518- } ->
519- let args = List. map ~f: c_expr args in
520- let bounds_impls = List. map ~f: (c_impl_expr e.span) bounds_impls in
521- let c_generic_values = List. map ~f: (c_generic_value e.span) in
522- let generic_args = c_generic_values generic_args in
523- let f =
524- let f = c_expr fun' in
525- match (trait, fun'.contents) with
526- | Some _ , GlobalName { id; _ } ->
527- { f with e = GlobalVar (def_id ~value: true id) }
528- | _ -> f
510+ | Call { args; fn_span = _ ; from_hir_call = _ ; fun'; ty = _ } -> (
511+ let args =
512+ if List. is_empty args then [ unit_expr span ]
513+ else List. map ~f: c_expr args
529514 in
530- let args = if List. is_empty args then [ unit_expr span ] else args in
531- App
532- {
533- f;
534- args;
535- generic_args;
536- bounds_impls;
537- trait =
538- Option. map ~f: (c_impl_expr e.span *** c_generic_values) trait;
539- }
515+ let f = c_expr fun' in
516+ match fun'.contents with
517+ | GlobalName
518+ {
519+ item =
520+ {
521+ value = { def_id = id; generic_args; impl_exprs; in_trait };
522+ _;
523+ };
524+ _;
525+ } ->
526+ let f = { f with e = GlobalVar (def_id ~value: true id) } in
527+ let bounds_impls = List. map ~f: (c_impl_expr e.span) impl_exprs in
528+ let generic_args =
529+ List. map ~f: (c_generic_value e.span) generic_args
530+ in
531+ let in_trait = Option. map ~f: (c_impl_expr e.span) in_trait in
532+ let trait =
533+ Option. map ~f: (fun ie -> (ie, ie.goal.args)) in_trait
534+ in
535+ App { f; args; generic_args; bounds_impls; trait }
536+ | _ ->
537+ App
538+ { f; args; generic_args = [] ; bounds_impls = [] ; trait = None })
540539 | Box { value } ->
541540 (U. call Rust_primitives__hax__box_new [ c_expr value ] span typ).e
542541 | Deref { arg } ->
@@ -645,7 +644,9 @@ end) : EXPR = struct
645644 trait = None (* TODO: see issue #328 *) ;
646645 bounds_impls = [] ;
647646 }
648- | GlobalName { id; constructor = _ } -> GlobalVar (def_id ~value: true id)
647+ | GlobalName { item = { value = { def_id = id; _ }; _ }; constructor = _ }
648+ ->
649+ GlobalVar (def_id ~value: true id)
649650 | UpvarRef { var_hir_id = id ; _ } -> LocalVar (local_ident Expr id)
650651 | Borrow { arg; borrow_kind = kind } ->
651652 let e' = c_expr arg in
@@ -732,9 +733,14 @@ end) : EXPR = struct
732733 typ = TInt { size = S8 ; signedness = Unsigned };
733734 })
734735 l))
735- | NamedConst { def_id = id ; impl; args; _ } ->
736+ | NamedConst
737+ {
738+ item =
739+ { value = { def_id = id; generic_args; in_trait = impl; _ }; _ };
740+ _;
741+ } ->
736742 let f = GlobalVar (def_id ~value: true id) in
737- let args = List. map ~f: (c_generic_value e.span) args in
743+ let args = List. map ~f: (c_generic_value e.span) generic_args in
738744 let const_args =
739745 List. filter_map args ~f: (function GConst e -> Some e | _ -> None )
740746 in
@@ -854,7 +860,7 @@ end) : EXPR = struct
854860 Array { fields = List. map ~f: constant_expr_to_expr fields }
855861 | Tuple { fields } ->
856862 Tuple { fields = List. map ~f: constant_expr_to_expr fields }
857- | GlobalName { id; _ } -> GlobalName { id ; constructor = None }
863+ | GlobalName item -> GlobalName { item ; constructor = None }
858864 | Borrow arg ->
859865 Borrow { arg = constant_expr_to_expr arg; borrow_kind = Thir. Shared }
860866 | ConstRef { id } -> ConstRef { id }
@@ -1024,16 +1030,14 @@ end) : EXPR = struct
10241030 | Float k ->
10251031 TFloat
10261032 (match k with F16 -> F16 | F32 -> F32 | F64 -> F64 | F128 -> F128 )
1027- | Arrow signature
1028- | Closure (_, { untupled_sig = signature; _ })
1029- | FnDef { fn_sig = signature ; _ } ->
1030- let ({ inputs; output; _ } : Thir.ty_fn_sig ) = signature.value in
1033+ | Arrow fn_sig | Closure { fn_sig; _ } | FnDef { fn_sig; _ } ->
1034+ let ({ inputs; output; _ } : Thir.ty_fn_sig ) = fn_sig.value in
10311035 let inputs =
10321036 if List. is_empty inputs then [ U. unit_typ ]
10331037 else List. map ~f: (c_ty span) inputs
10341038 in
10351039 TArrow (inputs, c_ty span output)
1036- | Adt { def_id = id ; generic_args; _ } ->
1040+ | Adt { value = { def_id = id ; generic_args; _ } ; _ } ->
10371041 let ident = def_id ~value: false id in
10381042 let args = List. map ~f: (c_generic_value span) generic_args in
10391043 TApp { ident; args }
@@ -1118,15 +1122,15 @@ end) : EXPR = struct
11181122 let goal = c_trait_ref span ie.trait.value in
11191123 let impl = { kind = c_impl_expr_atom span ie.impl; goal } in
11201124 match ie.impl with
1121- | Concrete { impl_exprs = [] ; _ } -> impl
1122- | Concrete { impl_exprs; _ } ->
1125+ | Concrete { value = { impl_exprs = [] ; _ } ; _ } -> impl
1126+ | Concrete { value = { impl_exprs; _ } ; _ } ->
11231127 let args = List. map ~f: (c_impl_expr span) impl_exprs in
11241128 { kind = ImplApp { impl; args }; goal }
11251129 | _ -> impl
11261130
11271131 and c_trait_ref span (tr : Thir.trait_ref ) : trait_goal =
1128- let trait = Concrete_ident. of_def_id ~value: false tr.def_id in
1129- let args = List. map ~f: (c_generic_value span) tr.generic_args in
1132+ let trait = Concrete_ident. of_def_id ~value: false tr.value. def_id in
1133+ let args = List. map ~f: (c_generic_value span) tr.value. generic_args in
11301134 { trait; args }
11311135
11321136 and c_impl_expr_atom (span : Thir.span ) (ie : Thir.impl_expr_atom ) :
@@ -1140,7 +1144,7 @@ end) : EXPR = struct
11401144 let ident =
11411145 { goal = c_trait_ref span trait_ref; name = predicate_id }
11421146 in
1143- let item = Concrete_ident. of_def_id ~value: false item.def_id in
1147+ let item = Concrete_ident. of_def_id ~value: false item.value. def_id in
11441148 let trait_ref = c_trait_ref span trait_ref in
11451149 Projection
11461150 { impl = { kind = item_kind; goal = trait_ref }; ident; item }
@@ -1153,9 +1157,9 @@ end) : EXPR = struct
11531157 Parent { impl = { kind = item_kind; goal = trait_ref }; ident }
11541158 in
11551159 match ie with
1156- | Concrete { id; generics ; _ } ->
1157- let trait = Concrete_ident. of_def_id ~value: false id in
1158- let args = List. map ~f: (c_generic_value span) generics in
1160+ | Concrete { value = { def_id; generic_args; _ } ; _ } ->
1161+ let trait = Concrete_ident. of_def_id ~value: false def_id in
1162+ let args = List. map ~f: (c_generic_value span) generic_args in
11591163 Concrete { trait; args }
11601164 | LocalBound { predicate_id; path; _ } ->
11611165 let init = LocalBound { id = predicate_id } in
@@ -1250,8 +1254,12 @@ end) : EXPR = struct
12501254 generic_constraint option =
12511255 match kind with
12521256 | Trait { is_positive = true ; trait_ref } ->
1253- let args = List. map ~f: (c_generic_value span) trait_ref.generic_args in
1254- let trait = Concrete_ident. of_def_id ~value: false trait_ref.def_id in
1257+ let args =
1258+ List. map ~f: (c_generic_value span) trait_ref.value.generic_args
1259+ in
1260+ let trait =
1261+ Concrete_ident. of_def_id ~value: false trait_ref.value.def_id
1262+ in
12551263 Some (GCType { goal = { trait; args }; name = id })
12561264 | Projection { impl_expr; assoc_item; ty } ->
12571265 let impl = c_impl_expr span impl_expr in
@@ -1330,7 +1338,7 @@ include struct
13301338
13311339 let import_ty : Types.span -> Types.node_for__ty_kind -> Ast.Rust.ty = c_ty
13321340
1333- let import_trait_ref : Types.span -> Types .trait_ref -> Ast.Rust.trait_goal =
1341+ let import_trait_ref : Types.span -> Thir .trait_ref -> Ast.Rust.trait_goal =
13341342 c_trait_ref
13351343
13361344 let import_clause :
@@ -1778,9 +1786,10 @@ and c_item_unwrapped ~ident ~type_only (item : Thir.item) : item list =
17781786 generics = c_generics generics;
17791787 self_ty = c_ty item.span self_ty;
17801788 of_trait =
1781- ( Concrete_ident. of_def_id ~value: false of_trait.def_id,
1782- List. map ~f: (c_generic_value item.span) of_trait.generic_args
1783- );
1789+ ( Concrete_ident. of_def_id ~value: false of_trait.value.def_id,
1790+ List. map
1791+ ~f: (c_generic_value item.span)
1792+ of_trait.value.generic_args );
17841793 items;
17851794 parent_bounds =
17861795 List. filter_map
0 commit comments