@@ -459,15 +459,9 @@ let extract_label_names env ty =
459459 with Not_found ->
460460 assert false
461461
462- let has_stack_attr_pat ppat =
463- List. exists
464- (fun attr -> String. equal attr.attr_name.txt " stack" )
465- ppat.ppat_attributes
462+ let has_local_attr_pat ppat = Builtin_attributes. has_local ppat.ppat_attributes
466463
467- let has_stack_attr_exp pexp =
468- List. exists
469- (fun attr -> String. equal attr.attr_name.txt " stack" )
470- pexp.pexp_attributes
464+ let has_local_attr_exp pexp = Builtin_attributes. has_local pexp.pexp_attributes
471465
472466(* Typing of patterns *)
473467
@@ -1698,7 +1692,7 @@ and type_pat_aux
16981692 (* explicitly polymorphic type *)
16991693 assert construction_not_used_in_counterexamples;
17001694 let type_mode =
1701- if has_stack_attr_pat sp then Alloc_mode. Local
1695+ if has_local_attr_pat sp then Alloc_mode. Local
17021696 else Alloc_mode. Global
17031697 in
17041698 let cty, ty, force =
@@ -2114,7 +2108,7 @@ and type_pat_aux
21142108 (* Pretend separate = true *)
21152109 begin_def() ;
21162110 let type_mode =
2117- if has_stack_attr_pat sp then Alloc_mode. Local
2111+ if has_local_attr_pat sp then Alloc_mode. Local
21182112 else Alloc_mode. Global
21192113 in
21202114 let cty, ty, force =
@@ -2841,7 +2835,7 @@ let is_local_returning_expr e =
28412835 let rec loop e =
28422836 match e.pexp_desc with
28432837 | Pexp_apply
2844- ({ pexp_desc = Pexp_extension ({txt = " stack " }, PStr [] ) },
2838+ ({ pexp_desc = Pexp_extension ({txt = " extension.local " }, PStr [] ) },
28452839 [Nolabel , _]) ->
28462840 true , e.pexp_loc
28472841 | Pexp_ident _ | Pexp_constant _ | Pexp_apply _ | Pexp_tuple _
@@ -2934,7 +2928,7 @@ let rec type_approx env sexp =
29342928 Pexp_let (_ , _ , e ) -> type_approx env e
29352929 | Pexp_fun (p , _ , spat , e ) ->
29362930 let marg =
2937- if has_stack_attr_pat spat then Alloc_mode. local
2931+ if has_local_attr_pat spat then Alloc_mode. local
29382932 else Alloc_mode. newvar ()
29392933 in
29402934 let mret = Alloc_mode. newvar () in
@@ -2970,11 +2964,11 @@ let rec type_approx env sexp =
29702964 end ;
29712965 ty2
29722966 | Pexp_apply
2973- ({ pexp_desc = Pexp_extension ({txt = " stack " }, PStr [] ) },
2967+ ({ pexp_desc = Pexp_extension ({txt = " extension.local " }, PStr [] ) },
29742968 [Nolabel , e]) ->
29752969 type_approx env e
29762970 | Pexp_apply
2977- ({ pexp_desc = Pexp_extension ({txt = " escape" }, PStr [] ) },
2971+ ({ pexp_desc = Pexp_extension ({txt = " extension. escape" }, PStr [] ) },
29782972 [Nolabel , e]) ->
29792973 type_approx env e
29802974 | _ -> newvar ()
@@ -3420,7 +3414,7 @@ and type_expect_
34203414 (Pat. construct ~loc: default_loc
34213415 (mknoloc (Longident. (Ldot (Lident " *predef*" , " None" ))))
34223416 None )
3423- (Exp. apply (Exp. extension (mknoloc " escape" , PStr [] ))
3417+ (Exp. apply (Exp. extension (mknoloc " extension. escape" , PStr [] ))
34243418 [Nolabel , default]);
34253419 ]
34263420 in
@@ -3440,12 +3434,12 @@ and type_expect_
34403434 ~attrs: [Attr. mk (mknoloc " #default" ) (PStr [] )]
34413435 [Vb. mk spat smatch] sbody
34423436 in
3443- let has_local = has_stack_attr_pat spat in
3437+ let has_local = has_local_attr_pat spat in
34443438 type_function ?in_function loc sexp.pexp_attributes env
34453439 expected_mode ty_expected_explained
34463440 l has_local [Exp. case pat body]
34473441 | Pexp_fun (l , None, spat , sbody ) ->
3448- let has_local = has_stack_attr_pat spat in
3442+ let has_local = has_local_attr_pat spat in
34493443 type_function ?in_function loc sexp.pexp_attributes env
34503444 expected_mode ty_expected_explained l has_local
34513445 [Ast_helper.Exp. case spat sbody]
@@ -3454,7 +3448,7 @@ and type_expect_
34543448 loc sexp.pexp_attributes env expected_mode
34553449 ty_expected_explained Nolabel false caselist
34563450 | Pexp_apply
3457- ({ pexp_desc = Pexp_extension ({txt = " stack " }, PStr [] ) },
3451+ ({ pexp_desc = Pexp_extension ({txt = " extension.local " }, PStr [] ) },
34583452 [Nolabel , sbody]) ->
34593453 submode ~loc ~env Value_mode. local expected_mode;
34603454 let exp =
@@ -3463,7 +3457,7 @@ and type_expect_
34633457 in
34643458 { exp with exp_loc = loc }
34653459 | Pexp_apply
3466- ({ pexp_desc = Pexp_extension ({txt = " escape" }, PStr [] ) },
3460+ ({ pexp_desc = Pexp_extension ({txt = " extension. escape" }, PStr [] ) },
34673461 [Nolabel , sbody]) ->
34683462 let exp =
34693463 type_expect ?in_function ~recarg env mode_global sbody
@@ -3941,7 +3935,7 @@ and type_expect_
39413935 (* Pretend separate = true, 1% slowdown for lablgtk *)
39423936 begin_def () ;
39433937 let type_mode =
3944- if has_stack_attr_exp sexp then Alloc_mode. Local
3938+ if has_local_attr_exp sexp then Alloc_mode. Local
39453939 else Alloc_mode. Global
39463940 in
39473941 let cty = Typetexp. transl_simple_type env false type_mode sty in
@@ -3965,7 +3959,7 @@ and type_expect_
39653959 (* Also see PR#7199 for a problem with the following:
39663960 let separate = !Clflags.principal || Env.has_local_constraints env in*)
39673961 let type_mode =
3968- if has_stack_attr_exp sexp then Alloc_mode. Local
3962+ if has_local_attr_exp sexp then Alloc_mode. Local
39693963 else Alloc_mode. Global
39703964 in
39713965 let (arg, ty',cty,cty') =
@@ -5761,7 +5755,7 @@ and type_let
57615755 | Pexp_constraint (e, _)
57625756 | Pexp_newtype (_, e)
57635757 | Pexp_apply
5764- ({ pexp_desc = Pexp_extension ({txt = " stack " }, PStr [] ) },
5758+ ({ pexp_desc = Pexp_extension ({txt = " extension.local " }, PStr [] ) },
57655759 [Nolabel , e]) -> sexp_is_fun e
57665760 | _ -> false
57675761 in
0 commit comments