@@ -62,7 +62,7 @@ let get_inline_attribute l =
62
62
let attr, _ = find_attribute is_inline_attribute l in
63
63
parse_inline_attribute attr
64
64
65
- let add_inline_attribute (expr : Lambda.lambda ) loc attributes =
65
+ let rec add_inline_attribute (expr : Lambda.lambda ) loc attributes =
66
66
match (expr, get_inline_attribute attributes) with
67
67
| expr , Default_inline -> expr
68
68
| Lfunction ({ attr = { stub = false } as attr } as funct ), inline ->
@@ -72,8 +72,13 @@ let add_inline_attribute (expr : Lambda.lambda) loc attributes =
72
72
Location. prerr_warning loc (Warnings. Duplicated_attribute " inline" ));
73
73
let attr = { attr with inline } in
74
74
Lfunction { funct with attr }
75
- | expr , (Always_inline | Never_inline ) ->
76
- Location. prerr_warning loc (Warnings. Misplaced_attribute " inline" );
75
+ | Lprim (Pccall {prim_name = "#fn_mk" | "#fn_mk_unit" } as p , [e], l ), _ ->
76
+ Lambda. Lprim (p, [add_inline_attribute e loc attributes], l)
77
+ | expr , (Always_inline) ->
78
+ Location. prerr_warning loc (Warnings. Misplaced_attribute " inline1" );
79
+ expr
80
+ | expr , (Never_inline) ->
81
+ Location. prerr_warning loc (Warnings. Misplaced_attribute " inline2" );
77
82
expr
78
83
79
84
(* Get the [@inlined] attribute payload (or default if not present).
0 commit comments