Function mz_ore::stack::maybe_grow

source ·
pub fn maybe_grow<F, R>(f: F) -> Rwhere
    F: FnOnce() -> R,
Available on crate feature stack only.
Expand description

Grows the stack if necessary before invoking f.

This function is intended to be called at manually instrumented points in a program where arbitrarily deep recursion is known to happen. This function will check to see if it is within STACK_RED_ZONE bytes of the end of the stack, and if so it will allocate a new stack of at least STACK_SIZE bytes.

The closure f is guaranteed to run on a stack with at least STACK_RED_ZONE bytes, and it will be run on the current stack if there’s space available.

It is generally better to use CheckedRecursion to enforce a limit on the stack growth. Not all recursive code paths support returning errors, however, in which case unconditionally growing the stack with this function is still preferable to panicking.