mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-11 14:21:10 +02:00
add GUILE_STACK_SIZE environment variable
* libguile/vm.c (initialize_default_stack_size): New helper. (scm_bootstrap_vm): Call initialize_default_stack_size. * doc/ref/guile-invoke.texi (Environment Variables): Add docs. Based on a patch by Stefan Israelsson Tampe.
This commit is contained in:
parent
d0ecf8eb9e
commit
aab9d46c83
2 changed files with 28 additions and 2 deletions
|
@ -307,6 +307,18 @@ characters. However, for compatibility with previous Guile 2.0
|
||||||
releases, this option is off by default. The next stable release series
|
releases, this option is off by default. The next stable release series
|
||||||
of Guile (the 2.2 series) will install locales by default.
|
of Guile (the 2.2 series) will install locales by default.
|
||||||
|
|
||||||
|
@item GUILE_STACK_SIZE
|
||||||
|
@vindex GUILE_STACK_SIZE
|
||||||
|
Guile currently has a limited stack size for Scheme computations.
|
||||||
|
Attempting to call too many nested functions will signal an error. This
|
||||||
|
is good to detect infinite recursion, but sometimes the limit is reached
|
||||||
|
for normal computations. This environment variable, if set to a
|
||||||
|
positive integer, specifies the number of Scheme value slots to allocate
|
||||||
|
for the stack.
|
||||||
|
|
||||||
|
In the future we will implement stacks that can grow and shrink, but for
|
||||||
|
now this hack will have to do.
|
||||||
|
|
||||||
@item GUILE_LOAD_COMPILED_PATH
|
@item GUILE_LOAD_COMPILED_PATH
|
||||||
@vindex GUILE_LOAD_COMPILED_PATH
|
@vindex GUILE_LOAD_COMPILED_PATH
|
||||||
This variable may be used to augment the path that is searched for
|
This variable may be used to augment the path that is searched for
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* Copyright (C) 2001, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
|
/* Copyright (C) 2001, 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public License
|
* modify it under the terms of the GNU Lesser General Public License
|
||||||
|
@ -37,6 +37,8 @@
|
||||||
#include "programs.h"
|
#include "programs.h"
|
||||||
#include "vm.h"
|
#include "vm.h"
|
||||||
|
|
||||||
|
#include "private-gc.h" /* scm_getenv_int */
|
||||||
|
|
||||||
static int vm_default_engine = SCM_VM_REGULAR_ENGINE;
|
static int vm_default_engine = SCM_VM_REGULAR_ENGINE;
|
||||||
|
|
||||||
/* Unfortunately we can't snarf these: snarfed things are only loaded up from
|
/* Unfortunately we can't snarf these: snarfed things are only loaded up from
|
||||||
|
@ -633,7 +635,17 @@ resolve_variable (SCM what, SCM program_module)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define VM_MIN_STACK_SIZE (1024)
|
||||||
#define VM_DEFAULT_STACK_SIZE (64 * 1024)
|
#define VM_DEFAULT_STACK_SIZE (64 * 1024)
|
||||||
|
static size_t vm_stack_size = VM_DEFAULT_STACK_SIZE;
|
||||||
|
|
||||||
|
static void
|
||||||
|
initialize_default_stack_size (void)
|
||||||
|
{
|
||||||
|
int size = scm_getenv_int ("GUILE_STACK_SIZE", vm_stack_size);
|
||||||
|
if (size >= VM_MIN_STACK_SIZE)
|
||||||
|
vm_stack_size = size;
|
||||||
|
}
|
||||||
|
|
||||||
#define VM_NAME vm_regular_engine
|
#define VM_NAME vm_regular_engine
|
||||||
#define FUNC_NAME "vm-regular-engine"
|
#define FUNC_NAME "vm-regular-engine"
|
||||||
|
@ -670,7 +682,7 @@ make_vm (void)
|
||||||
|
|
||||||
vp = scm_gc_malloc (sizeof (struct scm_vm), "vm");
|
vp = scm_gc_malloc (sizeof (struct scm_vm), "vm");
|
||||||
|
|
||||||
vp->stack_size = VM_DEFAULT_STACK_SIZE;
|
vp->stack_size= vm_stack_size;
|
||||||
|
|
||||||
#ifdef VM_ENABLE_PRECISE_STACK_GC_SCAN
|
#ifdef VM_ENABLE_PRECISE_STACK_GC_SCAN
|
||||||
vp->stack_base = (SCM *)
|
vp->stack_base = (SCM *)
|
||||||
|
@ -1086,6 +1098,8 @@ scm_bootstrap_vm (void)
|
||||||
"scm_init_vm",
|
"scm_init_vm",
|
||||||
(scm_t_extension_init_func)scm_init_vm, NULL);
|
(scm_t_extension_init_func)scm_init_vm, NULL);
|
||||||
|
|
||||||
|
initialize_default_stack_size ();
|
||||||
|
|
||||||
sym_vm_run = scm_from_latin1_symbol ("vm-run");
|
sym_vm_run = scm_from_latin1_symbol ("vm-run");
|
||||||
sym_vm_error = scm_from_latin1_symbol ("vm-error");
|
sym_vm_error = scm_from_latin1_symbol ("vm-error");
|
||||||
sym_keyword_argument_error = scm_from_latin1_symbol ("keyword-argument-error");
|
sym_keyword_argument_error = scm_from_latin1_symbol ("keyword-argument-error");
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue