mirror of
https://gitlab.com/embeddable-common-lisp/ecl.git
synced 2026-03-06 04:10:47 -08:00
stacks.d: introduce function `si_reset_margin'
When stack overflow condition is risen, to throw cerror stack limit has to be raised by pre-allocated margin. This function resets stack limit to original value. The only argument is stack designator. Signed-off-by: Daniel Kochmański <dkochmanski@turtle-solutions.eu>
This commit is contained in:
parent
f849b4a99a
commit
44c58e95f7
4 changed files with 19 additions and 0 deletions
|
|
@ -645,6 +645,22 @@ si_get_limit(cl_object type)
|
|||
@(return ecl_make_unsigned_integer(output))
|
||||
}
|
||||
|
||||
cl_object
|
||||
si_reset_margin(cl_object type)
|
||||
{
|
||||
cl_env_ptr env = ecl_process_env();
|
||||
if (type == @'ext::frame-stack')
|
||||
frs_set_size(env, env->frs_limit_size);
|
||||
else if (type == @'ext::binding-stack')
|
||||
ecl_bds_set_size(env, env->bds_limit_size);
|
||||
else if (type == @'ext::c-stack')
|
||||
cs_set_size(env, env->cs_limit_size);
|
||||
else
|
||||
return ECL_NIL;
|
||||
|
||||
return ECL_T;
|
||||
}
|
||||
|
||||
void
|
||||
init_stacks(cl_env_ptr env)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1863,6 +1863,7 @@ cl_symbols[] = {
|
|||
{EXT_ "ILLEGAL-INSTRUCTION", EXT_ORDINARY, NULL, -1, OBJNULL},
|
||||
{EXT_ "SET-LIMIT", EXT_ORDINARY, si_set_limit, 2, OBJNULL},
|
||||
{EXT_ "GET-LIMIT", EXT_ORDINARY, si_get_limit, 1, OBJNULL},
|
||||
{SYS_ "RESET-MARGIN", EXT_ORDINARY, si_reset_margin, 1, OBJNULL},
|
||||
{EXT_ "SEGMENTATION-VIOLATION", EXT_ORDINARY, NULL, -1, OBJNULL},
|
||||
|
||||
{EXT_ "EXTENDED-STRING", EXT_ORDINARY, NULL, -1, OBJNULL},
|
||||
|
|
|
|||
|
|
@ -1863,6 +1863,7 @@ cl_symbols[] = {
|
|||
{EXT_ "ILLEGAL-INSTRUCTION",NULL},
|
||||
{EXT_ "SET-LIMIT","si_set_limit"},
|
||||
{EXT_ "GET-LIMIT","si_get_limit"},
|
||||
{SYS_ "RESET-MARGIN","si_reset_margin"},
|
||||
{EXT_ "SEGMENTATION-VIOLATION",NULL},
|
||||
|
||||
{EXT_ "EXTENDED-STRING",NULL},
|
||||
|
|
|
|||
|
|
@ -471,6 +471,7 @@ extern cl_object ecl_deserialize(uint8_t *data);
|
|||
ecl_stack_pop_values(the_env,__i); }
|
||||
|
||||
extern void ecl_cs_set_org(cl_env_ptr env);
|
||||
extern cl_object si_reset_margin(cl_object type);
|
||||
|
||||
/* threads.d */
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue