@@ -118,6 +118,10 @@ let c_attr (attr : Thir.attribute) : attr option =
118
118
in
119
119
let kind = DocComment { kind; body = comment } in
120
120
Some { kind; span = Span. of_thir span }
121
+ | Parsed (AutomaticallyDerived span ) ->
122
+ (* Restore behavior before PR #1534 *)
123
+ let kind = Tool { path = " automatically_derived" ; tokens = " " } in
124
+ Some { kind; span = Span. of_thir span }
121
125
| Unparsed { args = Eq { expr = { symbol; _ } ; _ } ; path = "doc" ; span; _ } ->
122
126
(* Looks for `#[doc = "something"]` *)
123
127
let kind = DocComment { kind = DCKLine ; body = symbol } in
@@ -1105,8 +1109,6 @@ end) : EXPR = struct
1105
1109
match non_traits with
1106
1110
| [] -> TDyn { witness = W. dyn; goals }
1107
1111
| _ -> assertion_failure [ span ] " type Dyn with non trait predicate" )
1108
- | Dynamic (_ , _ , DynStar) ->
1109
- unimplemented ~issue_id: 931 [ span ] " type DynStar"
1110
1112
| Coroutine _ ->
1111
1113
unimplemented ~issue_id: 924 [ span ]
1112
1114
" Got type `Coroutine`: coroutines are not supported by hax"
@@ -1377,7 +1379,7 @@ let is_automatically_derived (attrs : Thir.attribute list) =
1377
1379
~f: (function
1378
1380
(* This will break once these attributes get properly parsed. It will
1379
1381
then be very easy to parse them correctly *)
1380
- | Unparsed { path; _ } -> String. equal path " automatically_derived "
1382
+ | Parsed (AutomaticallyDerived _ ) -> true
1381
1383
| _ -> false )
1382
1384
attrs
1383
1385
@@ -1516,7 +1518,7 @@ and c_item_unwrapped ~ident ~type_only (item : Thir.item) : item list =
1516
1518
in
1517
1519
(* TODO: things might be unnamed (e.g. constants) *)
1518
1520
match (item.kind : Thir.item_kind ) with
1519
- | Const (_ , _ , generics , body ) ->
1521
+ | Const (_ , generics , _ , body ) ->
1520
1522
mk
1521
1523
@@ Fn
1522
1524
{
@@ -1526,14 +1528,14 @@ and c_item_unwrapped ~ident ~type_only (item : Thir.item) : item list =
1526
1528
params = [] ;
1527
1529
safety = Safe ;
1528
1530
}
1529
- | Static (_ , _ , true , _ ) ->
1531
+ | Static (true , _ , _ , _ ) ->
1530
1532
unimplemented ~issue_id: 1343 [ item.span ]
1531
1533
" Mutable static items are not supported."
1532
- | Static (_ , _ty , false , body ) ->
1534
+ | Static (false , _ , _ty , body ) ->
1533
1535
let name = Concrete_ident. of_def_id ~value: true (assert_item_def_id () ) in
1534
1536
let generics = { params = [] ; constraints = [] } in
1535
1537
mk (Fn { name; generics; body = c_body body; params = [] ; safety = Safe })
1536
- | TyAlias (_ , ty , generics ) ->
1538
+ | TyAlias (_ , generics , ty ) ->
1537
1539
mk
1538
1540
@@ TyAlias
1539
1541
{
@@ -1552,13 +1554,13 @@ and c_item_unwrapped ~ident ~type_only (item : Thir.item) : item list =
1552
1554
params = c_fn_params item.span params;
1553
1555
safety = c_header_safety safety;
1554
1556
}
1555
- | (Enum (_ , _ , generics , _ ) | Struct (_ , _ , generics )) when erased ->
1557
+ | (Enum (_ , generics , _ , _ ) | Struct (_ , generics , _ )) when erased ->
1556
1558
let generics = c_generics generics in
1557
1559
let is_struct = match item.kind with Struct _ -> true | _ -> false in
1558
1560
let def_id = assert_item_def_id () in
1559
1561
let name = Concrete_ident. of_def_id ~value: false def_id in
1560
1562
mk @@ Type { name; generics; variants = [] ; is_struct }
1561
- | Enum (_ , variants , generics , repr ) ->
1563
+ | Enum (_ , generics , variants , repr ) ->
1562
1564
let def_id = assert_item_def_id () in
1563
1565
let generics = c_generics generics in
1564
1566
let is_struct = false in
@@ -1616,7 +1618,7 @@ and c_item_unwrapped ~ident ~type_only (item : Thir.item) : item list =
1616
1618
mk_one (Type { name; generics; variants; is_struct }) :: discs
1617
1619
in
1618
1620
if is_primitive then cast_fun :: result else result
1619
- | Struct (_ , v , generics ) ->
1621
+ | Struct (_ , generics , v ) ->
1620
1622
let generics = c_generics generics in
1621
1623
let def_id = assert_item_def_id () in
1622
1624
let is_struct = true in
@@ -1643,7 +1645,7 @@ and c_item_unwrapped ~ident ~type_only (item : Thir.item) : item list =
1643
1645
let variants = [ v ] in
1644
1646
let name = Concrete_ident. of_def_id ~value: false def_id in
1645
1647
mk @@ Type { name; generics; variants; is_struct }
1646
- | Trait (No, safety , _ , generics , _bounds , items ) ->
1648
+ | Trait (NotConst, No, safety , _ , generics , _bounds , items ) ->
1647
1649
let items =
1648
1650
List. filter
1649
1651
~f: (fun { attributes; _ } -> not (should_skip attributes))
@@ -1666,8 +1668,10 @@ and c_item_unwrapped ~ident ~type_only (item : Thir.item) : item list =
1666
1668
let items = List. map ~f: c_trait_item items in
1667
1669
let safety = csafety safety in
1668
1670
mk @@ Trait { name; generics; items; safety }
1669
- | Trait (Yes, _ , _ , _ , _ , _ ) ->
1671
+ | Trait (_ , Yes, _ , _ , _ , _ , _ ) ->
1670
1672
unimplemented ~issue_id: 930 [ item.span ] " Auto trait"
1673
+ | Trait (Const, _ , _ , _ , _ , _ , _ ) ->
1674
+ unimplemented ~issue_id: 930 [ item.span ] " Const trait"
1671
1675
| Impl { of_trait = None ; generics; items; _ } ->
1672
1676
let items =
1673
1677
List. filter
@@ -1814,7 +1818,9 @@ and c_item_unwrapped ~ident ~type_only (item : Thir.item) : item list =
1814
1818
{
1815
1819
path = List. map ~f: (fun x -> fst x.ident) segments;
1816
1820
is_external =
1817
- List. exists ~f: (function Err -> true | _ -> false ) res;
1821
+ List. exists
1822
+ ~f: (function None | Some Err -> true | _ -> false )
1823
+ res;
1818
1824
(* TODO: this should represent local/external? *)
1819
1825
rename;
1820
1826
}
0 commit comments