type analysis_result = {
contains_nontail_calls : bool;
(*Whether the function contains non-tail calls to OCaml functions. Calls to C functions don't count.
*)frame_required : bool;
(*Whether the function must allocate a stack frame on entry, for one of the following reasons:
- some local variables are stack-allocated
- the function needs to save its return address on the stack, e.g.: -- it contains a non-tail call to an OCaml function -- it calls a C function -- it contains an allocation or a poll point -- it performs an array bound check (on some ports)
extra_stack_used : int;
(*Amount of stack space used, in bytes, in addition to the initial stack frame. This counts trap handlers and "outgoing" stack slots used for parameter passing.
*)
}
class virtual stackframe_generic : object ... end