=proto int duk_check_stack(duk_context *ctx, unsigned int extra); =summary
Ensure that the value stack has at least extra
reserved
(allocated) elements for caller's use. Returns 1 if successful, 0
otherwise. If the call is successful, the caller is guaranteed that
extra
elements can be pushed to the value stack without a
value stack related error (other errors like out-of-memory can still
occur). The caller MUST NOT rely on being able to push more than
extra
values; although this is possible, such elements are
reserved for Duktape's internal use.
Upon entry to a Duktape/C function and when outside any call there is an automatic reserve (of XXX elements) allocated for the caller. If more value stack space is needed, the caller must reserve more space explicitly either in the beginning of the function (e.g. if the number of elements required is known or can be computed based on arguments) or dynamically (e.g. inside a loop). Note that an attempt to push a value beyond the currently allocated value stack causes an error: it does not cause the value stack to be automatically extended. This simplifies the internal implementation.
In addition to user reserved elements, Duktape keeps an automatic
internal value stack reserve to ensure all API calls have enough
value stack space to work without further allocations. The value stack
is also extended in somewhat large steps to minimize memory reallocation
activity. As a result the internal number of value stack elements
available beyond the caller specified extra
varies considerably.
The caller does not need to take this into account and should never
rely on any additional elements being available.
As a general rule
duk_require_stack()
should be
used instead of this function to reserve more stack space. If value stack
cannot be extended, there is almost never a useful recovery strategy except
to throw an error and unwind.