@@ -11,6 +11,8 @@ module Thir = struct
11
11
type generic_param_kind = generic_param_kind_for__decorated_for__expr_kind
12
12
type trait_item = trait_item_for__decorated_for__expr_kind
13
13
type ty = node_for__ty_kind
14
+ type item_ref = node_for__item_ref_contents
15
+ type trait_ref = item_ref
14
16
end
15
17
16
18
open ! Prelude
@@ -505,38 +507,35 @@ end) : EXPR = struct
505
507
let then_ = c_expr then ' in
506
508
let else_ = Option. map ~f: c_expr else_opt in
507
509
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
529
514
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 })
540
539
| Box { value } ->
541
540
(U. call Rust_primitives__hax__box_new [ c_expr value ] span typ).e
542
541
| Deref { arg } ->
@@ -645,7 +644,9 @@ end) : EXPR = struct
645
644
trait = None (* TODO: see issue #328 *) ;
646
645
bounds_impls = [] ;
647
646
}
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)
649
650
| UpvarRef { var_hir_id = id ; _ } -> LocalVar (local_ident Expr id)
650
651
| Borrow { arg; borrow_kind = kind } ->
651
652
let e' = c_expr arg in
@@ -732,9 +733,14 @@ end) : EXPR = struct
732
733
typ = TInt { size = S8 ; signedness = Unsigned };
733
734
})
734
735
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
+ } ->
736
742
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
738
744
let const_args =
739
745
List. filter_map args ~f: (function GConst e -> Some e | _ -> None )
740
746
in
@@ -854,7 +860,7 @@ end) : EXPR = struct
854
860
Array { fields = List. map ~f: constant_expr_to_expr fields }
855
861
| Tuple { fields } ->
856
862
Tuple { fields = List. map ~f: constant_expr_to_expr fields }
857
- | GlobalName { id; _ } -> GlobalName { id ; constructor = None }
863
+ | GlobalName item -> GlobalName { item ; constructor = None }
858
864
| Borrow arg ->
859
865
Borrow { arg = constant_expr_to_expr arg; borrow_kind = Thir. Shared }
860
866
| ConstRef { id } -> ConstRef { id }
@@ -1024,16 +1030,14 @@ end) : EXPR = struct
1024
1030
| Float k ->
1025
1031
TFloat
1026
1032
(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
1031
1035
let inputs =
1032
1036
if List. is_empty inputs then [ U. unit_typ ]
1033
1037
else List. map ~f: (c_ty span) inputs
1034
1038
in
1035
1039
TArrow (inputs, c_ty span output)
1036
- | Adt { def_id = id ; generic_args; _ } ->
1040
+ | Adt { value = { def_id = id ; generic_args; _ } ; _ } ->
1037
1041
let ident = def_id ~value: false id in
1038
1042
let args = List. map ~f: (c_generic_value span) generic_args in
1039
1043
TApp { ident; args }
@@ -1118,15 +1122,15 @@ end) : EXPR = struct
1118
1122
let goal = c_trait_ref span ie.trait.value in
1119
1123
let impl = { kind = c_impl_expr_atom span ie.impl; goal } in
1120
1124
match ie.impl with
1121
- | Concrete { impl_exprs = [] ; _ } -> impl
1122
- | Concrete { impl_exprs; _ } ->
1125
+ | Concrete { value = { impl_exprs = [] ; _ } ; _ } -> impl
1126
+ | Concrete { value = { impl_exprs; _ } ; _ } ->
1123
1127
let args = List. map ~f: (c_impl_expr span) impl_exprs in
1124
1128
{ kind = ImplApp { impl; args }; goal }
1125
1129
| _ -> impl
1126
1130
1127
1131
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
1130
1134
{ trait; args }
1131
1135
1132
1136
and c_impl_expr_atom (span : Thir.span ) (ie : Thir.impl_expr_atom ) :
@@ -1140,7 +1144,7 @@ end) : EXPR = struct
1140
1144
let ident =
1141
1145
{ goal = c_trait_ref span trait_ref; name = predicate_id }
1142
1146
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
1144
1148
let trait_ref = c_trait_ref span trait_ref in
1145
1149
Projection
1146
1150
{ impl = { kind = item_kind; goal = trait_ref }; ident; item }
@@ -1153,9 +1157,9 @@ end) : EXPR = struct
1153
1157
Parent { impl = { kind = item_kind; goal = trait_ref }; ident }
1154
1158
in
1155
1159
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
1159
1163
Concrete { trait; args }
1160
1164
| LocalBound { predicate_id; path; _ } ->
1161
1165
let init = LocalBound { id = predicate_id } in
@@ -1250,8 +1254,12 @@ end) : EXPR = struct
1250
1254
generic_constraint option =
1251
1255
match kind with
1252
1256
| 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
1255
1263
Some (GCType { goal = { trait; args }; name = id })
1256
1264
| Projection { impl_expr; assoc_item; ty } ->
1257
1265
let impl = c_impl_expr span impl_expr in
@@ -1330,7 +1338,7 @@ include struct
1330
1338
1331
1339
let import_ty : Types.span -> Types.node_for__ty_kind -> Ast.Rust.ty = c_ty
1332
1340
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 =
1334
1342
c_trait_ref
1335
1343
1336
1344
let import_clause :
@@ -1778,9 +1786,10 @@ and c_item_unwrapped ~ident ~type_only (item : Thir.item) : item list =
1778
1786
generics = c_generics generics;
1779
1787
self_ty = c_ty item.span self_ty;
1780
1788
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 );
1784
1793
items;
1785
1794
parent_bounds =
1786
1795
List. filter_map
0 commit comments