@@ -36,7 +36,10 @@ let cmt_builddir : string ref = ref ""
3636let read_core_type env ctyp =
3737 Cmi. read_type_expr env ctyp.ctyp_type
3838
39- let rec read_pattern env parent doc pat =
39+ let zero_attr_of_ident (_ident , _ , zero_alloc ) =
40+ Doc_attr. lang_value_attr_of_zero_alloc zero_alloc
41+
42+ let rec read_pattern env parent doc vb pat =
4043 let source_loc = None in
4144 let open Signature in
4245 match pat.pat_desc with
@@ -53,8 +56,10 @@ let rec read_pattern env parent doc pat =
5356 Cmi. mark_type_expr pat.pat_type;
5457 let type_ = Cmi. read_type_expr env pat.pat_type in
5558 let value = Abstract in
56- (* TODO read ext_attr out of id *)
57- let ext_attr = [] in
59+ let ext_attr = [vb]
60+ |> let_bound_idents_with_modes_sorts_and_checks
61+ |> List. filter_map zero_attr_of_ident
62+ in
5863 [Value {id; source_loc; doc; type_; value; ext_attr}]
5964#if OCAML_VERSION < (5 ,2 , 0 )
6065 | Tpat_alias (pat , id , _ ) ->
@@ -70,49 +75,52 @@ let rec read_pattern env parent doc pat =
7075 Cmi. mark_type_expr pat.pat_type;
7176 let type_ = Cmi. read_type_expr env pat.pat_type in
7277 let value = Abstract in
73- let ext_attr = [] in
74- Value {id; source_loc; doc; type_; value; ext_attr} :: read_pattern env parent doc pat
78+ let ext_attr = [vb]
79+ |> let_bound_idents_with_modes_sorts_and_checks
80+ |> List. filter_map zero_attr_of_ident
81+ in
82+ Value {id; source_loc; doc; type_; value; ext_attr} :: read_pattern env parent doc vb pat
7583 | Tpat_constant _ -> []
7684 | Tpat_tuple pats ->
7785#if OCAML_VERSION > = (5 , 4 , 0 ) || defined OXCAML
7886 let pats = List. map snd pats (* remove labels *) in
7987#endif
80- List. concat (List. map (read_pattern env parent doc) pats)
88+ List. concat (List. map (read_pattern env parent doc vb ) pats)
8189#if defined OXCAML
8290 | Tpat_unboxed_tuple pats ->
83- List. concat (List. map (fun (_ , p , _ ) -> read_pattern env parent doc p) pats)
91+ List. concat (List. map (fun (_ , p , _ ) -> read_pattern env parent doc vb p) pats)
8492#endif
8593#if OCAML_VERSION < (4 , 13 , 0 )
8694 | Tpat_construct (_ , _ , pats ) ->
8795#else
8896 | Tpat_construct (_ ,_ ,pats ,_ ) ->
8997#endif
90- List. concat (List. map (read_pattern env parent doc) pats)
98+ List. concat (List. map (read_pattern env parent doc vb ) pats)
9199 | Tpat_variant (_ , None, _ ) -> []
92100 | Tpat_variant (_ , Some pat , _ ) ->
93- read_pattern env parent doc pat
101+ read_pattern env parent doc vb pat
94102 | Tpat_record (pats , _ ) ->
95103 List. concat
96104 (List. map
97- (fun (_ , _ , pat ) -> read_pattern env parent doc pat)
105+ (fun (_ , _ , pat ) -> read_pattern env parent doc vb pat)
98106 pats)
99107#if defined OXCAML
100108 | Tpat_record_unboxed_product (pats , _ ) ->
101109 List. concat
102110 (List. map
103- (fun (_ , _ , pat ) -> read_pattern env parent doc pat)
111+ (fun (_ , _ , pat ) -> read_pattern env parent doc vb pat)
104112 pats)
105113 | Tpat_array (_ , _ , pats ) ->
106114#elif OCAML_VERSION < (5 , 4 , 0 )
107115 | Tpat_array pats ->
108116#else
109117 | Tpat_array (_ , pats ) ->
110118#endif
111- List. concat (List. map (read_pattern env parent doc) pats)
119+ List. concat (List. map (read_pattern env parent doc vb ) pats)
112120 | Tpat_or (pat , _ , _ ) ->
113- read_pattern env parent doc pat
121+ read_pattern env parent doc vb pat
114122 | Tpat_lazy pat ->
115- read_pattern env parent doc pat
123+ read_pattern env parent doc vb pat
116124#if OCAML_VERSION > = (4 ,8 ,0 ) && OCAML_VERSION < (4 ,11 ,0 )
117125 | Tpat_exception pat ->
118126 read_pattern env parent doc pat
@@ -125,7 +133,7 @@ let rec read_pattern env parent doc pat =
125133let read_value_binding env parent vb =
126134 let container = (parent : Identifier.Signature.t :> Identifier.LabelParent.t ) in
127135 let doc = Doc_attr. attached_no_tag ~warnings_tag: env.warnings_tag container vb.vb_attributes in
128- read_pattern env parent doc vb.vb_pat
136+ read_pattern env parent doc vb vb .vb_pat
129137
130138let read_value_bindings env parent vbs =
131139 let container = (parent : Identifier.Signature.t :> Identifier.LabelParent.t ) in
0 commit comments