@@ -636,8 +636,8 @@ let rec remove_unit = function
636636 Ctrywith (remove_unit body, exn , remove_unit handler, dbg)
637637 | Clet (id , c1 , c2 ) ->
638638 Clet (id, c1, remove_unit c2)
639- | Cop (Capply _mty , args , dbg ) ->
640- Cop (Capply typ_void, args, dbg)
639+ | Cop (Capply( _mty , pos ) , args , dbg ) ->
640+ Cop (Capply ( typ_void, pos) , args, dbg)
641641 | Cop (Cextcall(proc , _ty_res , ty_args , alloc ), args , dbg ) ->
642642 Cop (Cextcall (proc, typ_void, ty_args, alloc), args, dbg)
643643 | Cexit (_ ,_ ) as c -> c
@@ -807,11 +807,11 @@ let lookup_label obj lab dbg =
807807 let table = Cop (Cload (Word_val , Mutable ), [obj], dbg) in
808808 addr_array_ref table lab dbg)
809809
810- let call_cached_method obj tag cache pos args dbg =
810+ let call_cached_method obj tag cache pos args apos dbg =
811811 let arity = List. length args in
812812 let cache = array_indexing log2_size_addr cache pos dbg in
813813 Compilenv. need_send_fun arity;
814- Cop (Capply typ_val,
814+ Cop (Capply ( typ_val, apos) ,
815815 Cconst_symbol (" caml_send" ^ Int. to_string arity, dbg) ::
816816 obj :: tag :: cache :: args,
817817 dbg)
@@ -1713,35 +1713,35 @@ let ptr_offset ptr offset dbg =
17131713 then ptr
17141714 else Cop (Caddv , [ptr; Cconst_int (offset * size_addr, dbg)], dbg)
17151715
1716- let direct_apply lbl args dbg =
1717- Cop (Capply typ_val, Cconst_symbol (lbl, dbg) :: args, dbg)
1716+ let direct_apply lbl args pos dbg =
1717+ Cop (Capply ( typ_val, pos) , Cconst_symbol (lbl, dbg) :: args, dbg)
17181718
1719- let generic_apply mut clos args dbg =
1719+ let generic_apply mut clos args pos dbg =
17201720 match args with
17211721 | [arg] ->
17221722 bind " fun" clos (fun clos ->
1723- Cop (Capply typ_val, [get_field_gen mut clos 0 dbg; arg; clos],
1723+ Cop (Capply ( typ_val, pos) , [get_field_gen mut clos 0 dbg; arg; clos],
17241724 dbg))
17251725 | _ ->
17261726 let arity = List. length args in
17271727 let cargs =
17281728 Cconst_symbol (apply_function_sym arity, dbg) :: args @ [clos]
17291729 in
1730- Cop (Capply typ_val, cargs, dbg)
1730+ Cop (Capply ( typ_val, pos) , cargs, dbg)
17311731
1732- let send kind met obj args dbg =
1732+ let send kind met obj args apos dbg =
17331733 let call_met obj args clos =
17341734 (* met is never a simple expression, so it never gets turned into an
17351735 Immutable load *)
1736- generic_apply Asttypes. Mutable clos (obj :: args) dbg
1736+ generic_apply Asttypes. Mutable clos (obj :: args) apos dbg
17371737 in
17381738 bind " obj" obj (fun obj ->
17391739 match (kind : Lambda.meth_kind ), args with
17401740 Self , _ ->
17411741 bind " met" (lookup_label obj met dbg)
17421742 (call_met obj args)
17431743 | Cached , cache :: pos :: args ->
1744- call_cached_method obj met cache pos args dbg
1744+ call_cached_method obj met cache pos args apos dbg
17451745 | _ ->
17461746 bind " met" (lookup_tag obj met dbg)
17471747 (call_met obj args))
@@ -1811,9 +1811,9 @@ let region e =
18111811 (* [Cregion e] is equivalent to [e] if [e] contains no local allocs *)
18121812 let rec check_local_allocs = function
18131813 | Cregion _ ->
1814- (* Assume any already-existing Cregion contains a local alloc .
1815- This prevents O(n^2) behaviour with many nested regions *)
1816- raise Exit
1814+ (* Local allocations within a nested region do not affect this region .
1815+ Note this prevents O(n^2) behaviour with many nested regions. *)
1816+ ()
18171817 | Cop (Calloc Alloc_local , _, _)
18181818 | Cop ((Cextcall _ | Capply _ ), _ , _ ) ->
18191819 raise Exit
@@ -1847,15 +1847,15 @@ let apply_function_body arity =
18471847 let clos = V. create_local " clos" in
18481848 let rec app_fun clos n =
18491849 if n = arity-1 then
1850- Cop (Capply typ_val,
1850+ Cop (Capply ( typ_val, Apply_nontail ) ,
18511851 [get_field_gen Asttypes. Mutable (Cvar clos) 0 (dbg () );
18521852 Cvar arg.(n);
18531853 Cvar clos],
18541854 dbg () )
18551855 else begin
18561856 let newclos = V. create_local " clos" in
18571857 Clet (VP. create newclos,
1858- Cop (Capply typ_val,
1858+ Cop (Capply ( typ_val, Apply_nontail ) ,
18591859 [get_field_gen Asttypes. Mutable (Cvar clos) 0 (dbg () );
18601860 Cvar arg.(n); Cvar clos], dbg () ),
18611861 app_fun newclos (n+ 1 ))
@@ -1870,7 +1870,7 @@ let apply_function_body arity =
18701870 Cconst_int (pos_arity_in_closinfo, dbg() )], dbg() );
18711871 Cconst_int (arity, dbg() )], dbg() ),
18721872 dbg () ,
1873- Cop (Capply typ_val,
1873+ Cop (Capply ( typ_val, Apply_nontail ) ,
18741874 get_field_gen Asttypes. Mutable (Cvar clos) 2 (dbg () )
18751875 :: List. map (fun s -> Cvar s) all_args,
18761876 dbg () ),
@@ -1961,7 +1961,7 @@ let tuplify_function arity =
19611961 {fun_name;
19621962 fun_args = [VP. create arg, typ_val; VP. create clos, typ_val];
19631963 fun_body =
1964- Cop (Capply typ_val,
1964+ Cop (Capply ( typ_val, Apply_nontail ) ,
19651965 get_field_gen Asttypes. Mutable (Cvar clos) 2 (dbg () )
19661966 :: access_components 0 @ [Cvar clos],
19671967 (dbg () ));
@@ -2004,7 +2004,7 @@ let final_curry_function ~nlocal ~arity =
20042004 let last_clos = V. create_local " clos" in
20052005 let rec curry_fun args clos n =
20062006 if n = 0 then
2007- Cop (Capply typ_val,
2007+ Cop (Capply ( typ_val, Apply_nontail ) ,
20082008 get_field_gen Asttypes. Mutable (Cvar clos) 2 (dbg () ) ::
20092009 args @ [Cvar last_arg; Cvar clos],
20102010 dbg () )
@@ -2088,7 +2088,7 @@ let rec intermediate_curry_functions ~nlocal ~arity num =
20882088 let direct_args = iter (num+ 2 ) in
20892089 let rec iter i args clos =
20902090 if i = 0 then
2091- Cop (Capply typ_val,
2091+ Cop (Capply ( typ_val, Apply_nontail ) ,
20922092 (get_field_gen Asttypes. Mutable (Cvar clos) 2 (dbg () ))
20932093 :: args @ [Cvar clos],
20942094 dbg () )
@@ -2645,7 +2645,7 @@ let entry_point namelist =
26452645 List. fold_right
26462646 (fun name next ->
26472647 let entry_sym = Compilenv. make_symbol ~unitname: name (Some " entry" ) in
2648- Csequence (Cop (Capply typ_void,
2648+ Csequence (Cop (Capply ( typ_void, Apply_nontail ) ,
26492649 [cconst_symbol entry_sym], dbg () ),
26502650 Csequence (incr_global_inited () , next)))
26512651 namelist (cconst_int 1 ) in
0 commit comments