@@ -223,23 +223,26 @@ let inline_constructors ctx original_e =
223223 The id is incremented each time and is used later in the final_map phase to identify the correct inline_object.
224224 *)
225225 let rec mark_ctors ?(force_inline =false ) e : texpr =
226- let is_meta_inline = match e.eexpr with (TMeta ((Meta. Inline ,_ ,_ ),e )) -> true | _ -> false in
227- let e = Type. map_expr (mark_ctors ~force_inline: is_meta_inline) e in
228- let mark() =
229- incr curr_io_id;
230- let id_expr = (EConst (Int (string_of_int ! curr_io_id, None )), e.epos) in
231- let meta = (Meta. InlineObject , [id_expr], e.epos) in
232- mk (TMeta (meta, e)) e.etype e.epos
233- in
234- match e.eexpr, force_inline with
235- | TObjectDecl _, _
236- | TArrayDecl _, _
237- | TNew _ , true ->
238- mark()
239- | TNew ({ cl_constructor = Some ({cf_kind = Method MethInline ; cf_expr = Some ({eexpr = TFunction _ } )} as cf )} as c ,_ ,_ ), _ ->
240- if needs_inline ctx (Some c) cf then mark()
241- else e
242- | _ -> e
226+ match e.eexpr with
227+ | TMeta ((Meta. InlineConstructorArgument _ ,_ ,_ ),_ ) -> e
228+ | _ ->
229+ let is_meta_inline = match e.eexpr with (TMeta ((Meta. Inline ,_ ,_ ),e )) -> true | _ -> false in
230+ let e = Type. map_expr (mark_ctors ~force_inline: is_meta_inline) e in
231+ let mark() =
232+ incr curr_io_id;
233+ let id_expr = (EConst (Int (string_of_int ! curr_io_id, None )), e.epos) in
234+ let meta = (Meta. InlineObject , [id_expr], e.epos) in
235+ mk (TMeta (meta, e)) e.etype e.epos
236+ in
237+ match e.eexpr, force_inline with
238+ | TObjectDecl _, _
239+ | TArrayDecl _, _
240+ | TNew _ , true ->
241+ mark()
242+ | TNew ({ cl_constructor = Some ({cf_kind = Method MethInline ; cf_expr = Some ({eexpr = TFunction _ } )} as cf )} as c ,_ ,_ ), _ ->
243+ if needs_inline ctx (Some c) cf then mark()
244+ else e
245+ | _ -> e
243246 in
244247
245248 (*
0 commit comments