301.14: add current-thread-initial-stack-size, change make install to always run setup-plt, clean up debugging GC variants
svn: r2878
This commit is contained in:
parent
3f7a7d28c0
commit
c97a02c0b4
|
@ -1,3 +1,14 @@
|
||||||
|
Version 301.14
|
||||||
|
Added current-thread-initial-stack-size
|
||||||
|
|
||||||
|
Version 301.13
|
||||||
|
Dropped PLTHOME, and instead added support to embed a path to the
|
||||||
|
main "collects" directory within the executable
|
||||||
|
Changed bitwise-{and,ior,xor} to accept 0 arguments
|
||||||
|
Added 'run-file, 'collects-dir, and 'orig-dir modes to find-system-path
|
||||||
|
Changed initial program binding to the result of find-system path
|
||||||
|
with 'run-file instead of 'exec-file
|
||||||
|
|
||||||
Version 301.12
|
Version 301.12
|
||||||
Added char-general-category
|
Added char-general-category
|
||||||
Changed readtable to support "default" parser used for symbols/numbers
|
Changed readtable to support "default" parser used for symbols/numbers
|
||||||
|
|
|
@ -15,9 +15,12 @@ mred-stub: @MAKE_MRED@
|
||||||
mred3m-stub: @MAKE_MRED3M@
|
mred3m-stub: @MAKE_MRED3M@
|
||||||
|
|
||||||
|
|
||||||
install:
|
plain-install:
|
||||||
$(MAKE) install-normal
|
$(MAKE) install-normal
|
||||||
$(MAKE) finish-stub
|
|
||||||
|
install:
|
||||||
|
$(MAKE) plain-install
|
||||||
|
$(MAKE) setup-plt
|
||||||
|
|
||||||
install-normal:
|
install-normal:
|
||||||
if [ ! -d $(prefix) ] ; then mkdir $(prefix) ; fi
|
if [ ! -d $(prefix) ] ; then mkdir $(prefix) ; fi
|
||||||
|
@ -30,16 +33,17 @@ copytree-stub: @MAKE_COPYTREE@
|
||||||
|
|
||||||
mredinstall-stub: @MAKE_MREDINSTALL@
|
mredinstall-stub: @MAKE_MREDINSTALL@
|
||||||
|
|
||||||
finish-stub: @MAKE_FINISH@
|
|
||||||
|
|
||||||
setup-plt:
|
setup-plt:
|
||||||
$(prefix)/bin/mzscheme -mvqM setup
|
$(prefix)/bin/mzscheme -mvqM setup
|
||||||
|
|
||||||
install-3m:
|
plain-install-3m:
|
||||||
$(MAKE) install-normal
|
$(MAKE) install-normal
|
||||||
$(MAKE) mzinstall3m
|
$(MAKE) mzinstall3m
|
||||||
$(MAKE) mredinstall3m-stub
|
$(MAKE) mredinstall3m-stub
|
||||||
$(MAKE) finish-stub
|
|
||||||
|
install-3m:
|
||||||
|
$(MAKE) plain-install-3m
|
||||||
|
$(MAKE) setup-plt
|
||||||
|
|
||||||
mredinstall3m-stub: @MAKE_MREDINSTALL3M@
|
mredinstall3m-stub: @MAKE_MREDINSTALL3M@
|
||||||
|
|
||||||
|
@ -81,13 +85,6 @@ lib-finish:
|
||||||
srcdir = @srcdir@
|
srcdir = @srcdir@
|
||||||
prefix = @prefix@
|
prefix = @prefix@
|
||||||
|
|
||||||
copy-finish:
|
|
||||||
$(MAKE) setup-plt
|
|
||||||
|
|
||||||
inplace-finish:
|
|
||||||
if [ ! -d $(srcdir)/../collects/repos-time-stamp ] ; then $(MAKE) setup-plt ; fi
|
|
||||||
if [ -d $(srcdir)/../collects/repos-time-stamp ] ; then cat $(srcdir)/mzscheme/imsg.txt ; fi
|
|
||||||
|
|
||||||
copytree:
|
copytree:
|
||||||
cp -p -r $(srcdir)/../collects $(prefix)/.
|
cp -p -r $(srcdir)/../collects $(prefix)/.
|
||||||
cp -p -r $(srcdir)/../include $(prefix)/.
|
cp -p -r $(srcdir)/../include $(prefix)/.
|
||||||
|
|
13
src/README
13
src/README
|
@ -147,9 +147,10 @@ the Unix instructions below, but note the following:
|
||||||
the directory plt/bin/mzscheme. For a --prefix, build, the rest of
|
the directory plt/bin/mzscheme. For a --prefix, build, the rest of
|
||||||
the plt tree is also copied to the target directory.
|
the plt tree is also copied to the target directory.
|
||||||
|
|
||||||
Excep for an in-place build from the Subversion archive (see step
|
This step also compiles ".zo" bytecode files for installed Scheme
|
||||||
4), this step also compiles ".zo" bytecode files for installed
|
source, and generates launcher programs like "DrScheme". Use `make
|
||||||
Scheme source.
|
plain-install' to install without compiling ".zo" files or
|
||||||
|
creating launchers.
|
||||||
|
|
||||||
If the installation fails because the target directory cannot be
|
If the installation fails because the target directory cannot be
|
||||||
created, or because the target directory is not the one you
|
created, or because the target directory is not the one you
|
||||||
|
@ -162,12 +163,6 @@ the Unix instructions below, but note the following:
|
||||||
--enabled-shared, beware that you may accumlate many old, unused
|
--enabled-shared, beware that you may accumlate many old, unused
|
||||||
versions of the dynamic libraries in plt/lib.
|
versions of the dynamic libraries in plt/lib.
|
||||||
|
|
||||||
4. ONLY Subversion users with in-place builds: the `make install'
|
|
||||||
step does not automatically build ".zo" files. After an initial
|
|
||||||
in-place install, run `make setup-plt'. For subsequent installs
|
|
||||||
within the same Subversion checkout, you can run either `make
|
|
||||||
setup-plt' or `plt/bin/setup-plt'.
|
|
||||||
|
|
||||||
After an "in-place" install without Subversion, the plt/src directory
|
After an "in-place" install without Subversion, the plt/src directory
|
||||||
is no longer needed, and it can be safely deleted. Build information
|
is no longer needed, and it can be safely deleted. Build information
|
||||||
is recorded in plt/lib/buildinfo.
|
is recorded in plt/lib/buildinfo.
|
||||||
|
|
2
src/configure
vendored
2
src/configure
vendored
|
@ -5058,7 +5058,6 @@ fi
|
||||||
|
|
||||||
if test "${prefix}" = "NONE" ; then
|
if test "${prefix}" = "NONE" ; then
|
||||||
prefix=`cd "${srcdir}/.." && pwd`
|
prefix=`cd "${srcdir}/.." && pwd`
|
||||||
MAKE_FINISH=inplace-finish
|
|
||||||
else
|
else
|
||||||
# Check whether ${prefix} is redundant, because
|
# Check whether ${prefix} is redundant, because
|
||||||
# $prefix/src is $srcdir.
|
# $prefix/src is $srcdir.
|
||||||
|
@ -5075,7 +5074,6 @@ else
|
||||||
echo "----> ${prefix}/man/..."
|
echo "----> ${prefix}/man/..."
|
||||||
echo "----> ${prefix}/notes/..."
|
echo "----> ${prefix}/notes/..."
|
||||||
MAKE_COPYTREE=copytree
|
MAKE_COPYTREE=copytree
|
||||||
MAKE_FINISH=copy-finish
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
|
@ -489,7 +489,7 @@ char *ExeRelativeToAbsolute(char *p)
|
||||||
CFURLRef url;
|
CFURLRef url;
|
||||||
CFStringRef str;
|
CFStringRef str;
|
||||||
char *s, *a;
|
char *s, *a;
|
||||||
long len, len2, len3;
|
long len, len2;
|
||||||
|
|
||||||
appBundle = CFBundleGetMainBundle();
|
appBundle = CFBundleGetMainBundle();
|
||||||
url = CFBundleCopyExecutableURL(appBundle);
|
url = CFBundleCopyExecutableURL(appBundle);
|
||||||
|
|
|
@ -2856,14 +2856,17 @@ void wxTraceDone(void)
|
||||||
|
|
||||||
void wxObjectFinalize(void *o)
|
void wxObjectFinalize(void *o)
|
||||||
{
|
{
|
||||||
if (((wxObject *)o)->__type != -1) {
|
|
||||||
#if 0
|
#if 0
|
||||||
|
/* Not every gc instance is a wxObject instance, now: */
|
||||||
|
if (((wxObject *)o)->__type != -1) {
|
||||||
|
# if 0
|
||||||
/* New non-cleanup flag makes this incorrect: */
|
/* New non-cleanup flag makes this incorrect: */
|
||||||
fprintf(stderr, "ERROR: free wxObject had non-deleted type value!");
|
fprintf(stderr, "ERROR: free wxObject had non-deleted type value!");
|
||||||
#else
|
# else
|
||||||
((wxObject *)o)->__type = -1;
|
((wxObject *)o)->__type = -1;
|
||||||
#endif
|
# endif
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static void set_trace_arg(Scheme_Object *a)
|
static void set_trace_arg(Scheme_Object *a)
|
||||||
|
|
|
@ -705,7 +705,7 @@ static Scheme_Object *wxSchemeGetColourFromUser(int argc, Scheme_Object **argv)
|
||||||
}
|
}
|
||||||
|
|
||||||
cpInfo.dstProfile = NULL; // default Profile (again!)
|
cpInfo.dstProfile = NULL; // default Profile (again!)
|
||||||
cpInfo.flags = NULL;
|
cpInfo.flags = 0;
|
||||||
cpInfo.placeWhere = kCenterOnMainScreen;
|
cpInfo.placeWhere = kCenterOnMainScreen;
|
||||||
cpInfo.dialogOrigin.h = 0;
|
cpInfo.dialogOrigin.h = 0;
|
||||||
cpInfo.dialogOrigin.v = 0;
|
cpInfo.dialogOrigin.v = 0;
|
||||||
|
|
|
@ -123,7 +123,6 @@ fi
|
||||||
|
|
||||||
if test "${prefix}" = "NONE" ; then
|
if test "${prefix}" = "NONE" ; then
|
||||||
prefix=`cd "${srcdir}/.." && pwd`
|
prefix=`cd "${srcdir}/.." && pwd`
|
||||||
MAKE_FINISH=inplace-finish
|
|
||||||
else
|
else
|
||||||
# Check whether ${prefix} is redundant, because
|
# Check whether ${prefix} is redundant, because
|
||||||
# $prefix/src is $srcdir.
|
# $prefix/src is $srcdir.
|
||||||
|
@ -140,7 +139,6 @@ else
|
||||||
echo "----> ${prefix}/man/..."
|
echo "----> ${prefix}/man/..."
|
||||||
echo "----> ${prefix}/notes/..."
|
echo "----> ${prefix}/notes/..."
|
||||||
MAKE_COPYTREE=copytree
|
MAKE_COPYTREE=copytree
|
||||||
MAKE_FINISH=copy-finish
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
|
@ -55,16 +55,18 @@ static int mark_weak_array(void *p)
|
||||||
weak_arrays = a;
|
weak_arrays = a;
|
||||||
|
|
||||||
#if CHECKS
|
#if CHECKS
|
||||||
/* For now, weak arrays only used for symbols and falses: */
|
/* For now, weak arrays only used for symbols, keywords, and falses: */
|
||||||
{
|
{
|
||||||
void **data;
|
void **data;
|
||||||
int i;
|
int i;
|
||||||
data = a->data;
|
data = a->data;
|
||||||
for (i = a->count; i--; ) {
|
for (i = a->count; i--; ) {
|
||||||
if (data[i]
|
if (data[i]
|
||||||
&& (*(short *)(data[i]) != 46)
|
&& (*(short *)(data[i]) != 47)
|
||||||
&& (*(short *)(data[i]) != 56))
|
&& (*(short *)(data[i]) != 48)
|
||||||
|
&& (*(short *)(data[i]) != 57)) {
|
||||||
CRASH(1);
|
CRASH(1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
|
|
||||||
-----------------------------------------------------------
|
|
||||||
>> `make setup-plt' or run `plt/bin/setup-plt' to finish <<
|
|
||||||
-----------------------------------------------------------
|
|
|
@ -1124,6 +1124,7 @@ enum {
|
||||||
MZCONFIG_SCHEDULER_RANDOM_STATE,
|
MZCONFIG_SCHEDULER_RANDOM_STATE,
|
||||||
|
|
||||||
MZCONFIG_THREAD_SET,
|
MZCONFIG_THREAD_SET,
|
||||||
|
MZCONFIG_THREAD_INIT_STACK_SIZE,
|
||||||
|
|
||||||
__MZCONFIG_BUILTIN_COUNT__
|
__MZCONFIG_BUILTIN_COUNT__
|
||||||
};
|
};
|
||||||
|
|
|
@ -14,20 +14,6 @@
|
||||||
|
|
||||||
#ifndef FLAGS_ALREADY_SET
|
#ifndef FLAGS_ALREADY_SET
|
||||||
|
|
||||||
/*************** (BEGIN PLATFORM-INDEPENDENT OPTIONS) *************/
|
|
||||||
|
|
||||||
/*******************************/
|
|
||||||
/* Evaluator Tuning Parameters */
|
|
||||||
/*******************************/
|
|
||||||
|
|
||||||
#define SCHEME_STACK_SIZE 5000
|
|
||||||
|
|
||||||
/* SCHEME_STACK_SIZE <X> sets the size of stack segments for Scheme
|
|
||||||
variables. */
|
|
||||||
|
|
||||||
/**************** (END PLATFORM-INDEPENDENT OPTIONS) **************/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/******** (BEGIN KNOWN ARCHITECTURE/SYSTEM CONFIGURATIONS) ********/
|
/******** (BEGIN KNOWN ARCHITECTURE/SYSTEM CONFIGURATIONS) ********/
|
||||||
|
|
||||||
|
|
|
@ -3027,16 +3027,16 @@ static int trace_path_buffer_pos;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if PAD_BOUNDARY_BYTES
|
#if PAD_BOUNDARY_BYTES
|
||||||
static void bad_pad(char *where, void *s, long sz, long diff, long offset,
|
static void bad_pad(char *where, void *s, int type, long sz, long diff, long offset,
|
||||||
long pd, long expect)
|
long pd, long expect)
|
||||||
{
|
{
|
||||||
FPRINTF(STDERR,
|
FPRINTF(STDERR,
|
||||||
"pad %s violation at %lx, len %ld (diff %ld+%ld): %lx != %lx\n",
|
"pad %s violation at %lx <%d>, len %ld (diff %ld+%ld): %lx != %lx\n",
|
||||||
where, (unsigned long)s, sz, diff, offset, pd, expect);
|
where, (unsigned long)s, type, sz, diff, offset, pd, expect);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void collect_init_chunk(MemoryChunk *c, int uncollectable)
|
static void collect_init_chunk(MemoryChunk *c, int uncollectable, int ty)
|
||||||
{
|
{
|
||||||
for (; c; c = c->next) {
|
for (; c; c = c->next) {
|
||||||
if (uncollectable && TRACE_COLLECT_SWITCH)
|
if (uncollectable && TRACE_COLLECT_SWITCH)
|
||||||
|
@ -3053,20 +3053,20 @@ static void collect_init_chunk(MemoryChunk *c, int uncollectable)
|
||||||
diff = ((long *)s)[1];
|
diff = ((long *)s)[1];
|
||||||
pd = *(long *)s;
|
pd = *(long *)s;
|
||||||
if (pd != PAD_PATTERN)
|
if (pd != PAD_PATTERN)
|
||||||
bad_pad("start", s, sz, diff, 0, pd, PAD_PATTERN);
|
bad_pad("start", s, ty, sz, diff, 0, pd, PAD_PATTERN);
|
||||||
pd = *(long *)INT_TO_PTR(c->end - PAD_END_SIZE);
|
pd = *(long *)INT_TO_PTR(c->end - PAD_END_SIZE);
|
||||||
if (pd != PAD_PATTERN)
|
if (pd != PAD_PATTERN)
|
||||||
bad_pad("end1", s, sz, diff, 0, pd, PAD_PATTERN);
|
bad_pad("end1", s, ty, sz, diff, 0, pd, PAD_PATTERN);
|
||||||
pd = *(long *)INT_TO_PTR(c->end - PAD_END_SIZE + sizeof(long));
|
pd = *(long *)INT_TO_PTR(c->end - PAD_END_SIZE + sizeof(long));
|
||||||
if (pd != PAD_PATTERN)
|
if (pd != PAD_PATTERN)
|
||||||
bad_pad("end2", s, sz, diff, 0, pd, PAD_PATTERN);
|
bad_pad("end2", s, ty, sz, diff, 0, pd, PAD_PATTERN);
|
||||||
if (diff) {
|
if (diff) {
|
||||||
/* Given was bigger than requested; check extra bytes: */
|
/* Given was bigger than requested; check extra bytes: */
|
||||||
unsigned char *ps = ((unsigned char *)s) + sz - PAD_END_SIZE - diff;
|
unsigned char *ps = ((unsigned char *)s) + sz - PAD_END_SIZE - diff;
|
||||||
long d = 0;
|
long d = 0;
|
||||||
while (d < diff) {
|
while (d < diff) {
|
||||||
if (*ps != PAD_FILL_PATTERN) {
|
if (*ps != PAD_FILL_PATTERN) {
|
||||||
bad_pad("extra", s, sz, diff, d, *ps, PAD_FILL_PATTERN);
|
bad_pad("extra", s, ty, sz, diff, d, *ps, PAD_FILL_PATTERN);
|
||||||
}
|
}
|
||||||
ps++;
|
ps++;
|
||||||
d++;
|
d++;
|
||||||
|
@ -3132,7 +3132,7 @@ static void collect_finish_chunk(MemoryChunk **c, GC_Set *set)
|
||||||
high_plausible = local_high_plausible;
|
high_plausible = local_high_plausible;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void collect_init_common(BlockOfMemory **blocks, int uncollectable)
|
static void collect_init_common(BlockOfMemory **blocks, int uncollectable, int ty)
|
||||||
{
|
{
|
||||||
int i, j;
|
int i, j;
|
||||||
int boundary, boundary_val = 0;
|
int boundary, boundary_val = 0;
|
||||||
|
@ -3164,20 +3164,20 @@ static void collect_init_common(BlockOfMemory **blocks, int uncollectable)
|
||||||
pd = *(long *)s;
|
pd = *(long *)s;
|
||||||
diff = ((long *)s)[1];
|
diff = ((long *)s)[1];
|
||||||
if (pd != PAD_PATTERN)
|
if (pd != PAD_PATTERN)
|
||||||
bad_pad("start", s, size, diff, 0, pd, PAD_PATTERN);
|
bad_pad("start", s, ty, size, diff, 0, pd, PAD_PATTERN);
|
||||||
pd = *(long *)INT_TO_PTR(p + size - PAD_END_SIZE);
|
pd = *(long *)INT_TO_PTR(p + size - PAD_END_SIZE);
|
||||||
if (pd != PAD_PATTERN)
|
if (pd != PAD_PATTERN)
|
||||||
bad_pad("end1", s, size, diff, 0, pd, PAD_PATTERN);
|
bad_pad("end1", s, ty, size, diff, 0, pd, PAD_PATTERN);
|
||||||
pd = *(long *)INT_TO_PTR(p + size - PAD_END_SIZE + sizeof(long));
|
pd = *(long *)INT_TO_PTR(p + size - PAD_END_SIZE + sizeof(long));
|
||||||
if (pd != PAD_PATTERN)
|
if (pd != PAD_PATTERN)
|
||||||
bad_pad("end2", s, size, diff, 0, pd, PAD_PATTERN);
|
bad_pad("end2", s, ty, size, diff, 0, pd, PAD_PATTERN);
|
||||||
if (diff) {
|
if (diff) {
|
||||||
/* Given was bigger than requested; check extra bytes: */
|
/* Given was bigger than requested; check extra bytes: */
|
||||||
unsigned char *ps = ((unsigned char *)s) + size - PAD_END_SIZE - diff;
|
unsigned char *ps = ((unsigned char *)s) + size - PAD_END_SIZE - diff;
|
||||||
long d = 0;
|
long d = 0;
|
||||||
while (d < diff) {
|
while (d < diff) {
|
||||||
if (*ps != PAD_FILL_PATTERN) {
|
if (*ps != PAD_FILL_PATTERN) {
|
||||||
bad_pad("extra", s, size, diff, d, *ps, PAD_FILL_PATTERN);
|
bad_pad("extra", s, ty, size, diff, d, *ps, PAD_FILL_PATTERN);
|
||||||
}
|
}
|
||||||
ps++;
|
ps++;
|
||||||
d++;
|
d++;
|
||||||
|
@ -4312,9 +4312,11 @@ static void do_GC_gcollect(void *stack_now)
|
||||||
if (!common_sets[j]->locked) {
|
if (!common_sets[j]->locked) {
|
||||||
# endif
|
# endif
|
||||||
collect_init_chunk(*(common_sets[j]->othersptr),
|
collect_init_chunk(*(common_sets[j]->othersptr),
|
||||||
common_sets[j]->uncollectable);
|
common_sets[j]->uncollectable,
|
||||||
|
j);
|
||||||
collect_init_common(common_sets[j]->blocks,
|
collect_init_common(common_sets[j]->blocks,
|
||||||
common_sets[j]->uncollectable);
|
common_sets[j]->uncollectable,
|
||||||
|
j);
|
||||||
# if ALLOW_SET_LOCKING
|
# if ALLOW_SET_LOCKING
|
||||||
}
|
}
|
||||||
# endif
|
# endif
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -229,8 +229,6 @@ static Scheme_Object *scheme_compile_expand_expr(Scheme_Object *form, Scheme_Com
|
||||||
|
|
||||||
typedef void (*DW_PrePost_Proc)(void *);
|
typedef void (*DW_PrePost_Proc)(void *);
|
||||||
|
|
||||||
#define TAIL_COPY_THRESHOLD 5
|
|
||||||
|
|
||||||
#if defined(UNIX_FIND_STACK_BOUNDS) || defined(WINDOWS_FIND_STACK_BOUNDS) \
|
#if defined(UNIX_FIND_STACK_BOUNDS) || defined(WINDOWS_FIND_STACK_BOUNDS) \
|
||||||
|| defined(MACOS_FIND_STACK_BOUNDS) || defined(ASSUME_FIXED_STACK_SIZE) \
|
|| defined(MACOS_FIND_STACK_BOUNDS) || defined(ASSUME_FIXED_STACK_SIZE) \
|
||||||
|| defined(BEOS_FIND_STACK_BOUNDS) || defined(OSKIT_FIXED_STACK_BOUNDS) \
|
|| defined(BEOS_FIND_STACK_BOUNDS) || defined(OSKIT_FIXED_STACK_BOUNDS) \
|
||||||
|
@ -634,7 +632,7 @@ void scheme_init_stack_check()
|
||||||
int scheme_check_runstack(long size)
|
int scheme_check_runstack(long size)
|
||||||
/* Checks whether the Scheme stack has `size' room left */
|
/* Checks whether the Scheme stack has `size' room left */
|
||||||
{
|
{
|
||||||
return ((MZ_RUNSTACK - MZ_RUNSTACK_START) >= (size + TAIL_COPY_THRESHOLD));
|
return ((MZ_RUNSTACK - MZ_RUNSTACK_START) >= (size + SCHEME_TAIL_COPY_THRESHOLD));
|
||||||
}
|
}
|
||||||
|
|
||||||
void *scheme_enlarge_runstack(long size, void *(*k)())
|
void *scheme_enlarge_runstack(long size, void *(*k)())
|
||||||
|
@ -644,6 +642,7 @@ void *scheme_enlarge_runstack(long size, void *(*k)())
|
||||||
Scheme_Saved_Stack *saved;
|
Scheme_Saved_Stack *saved;
|
||||||
void *v;
|
void *v;
|
||||||
int cont_count;
|
int cont_count;
|
||||||
|
long min_size;
|
||||||
|
|
||||||
saved = MALLOC_ONE_RT(Scheme_Saved_Stack);
|
saved = MALLOC_ONE_RT(Scheme_Saved_Stack);
|
||||||
|
|
||||||
|
@ -655,9 +654,14 @@ void *scheme_enlarge_runstack(long size, void *(*k)())
|
||||||
saved->runstack_start = MZ_RUNSTACK_START;
|
saved->runstack_start = MZ_RUNSTACK_START;
|
||||||
saved->runstack_size = p->runstack_size;
|
saved->runstack_size = p->runstack_size;
|
||||||
|
|
||||||
size += TAIL_COPY_THRESHOLD;
|
size += SCHEME_TAIL_COPY_THRESHOLD;
|
||||||
if (size < SCHEME_STACK_SIZE)
|
|
||||||
size = SCHEME_STACK_SIZE;
|
/* If we keep growing the stack, then probably it
|
||||||
|
needs to be much larger, so at least double the stack size
|
||||||
|
each time: */
|
||||||
|
min_size = 2 * (p->runstack_size);
|
||||||
|
if (size < min_size)
|
||||||
|
size = min_size;
|
||||||
|
|
||||||
p->runstack_saved = saved;
|
p->runstack_saved = saved;
|
||||||
if (p->spare_runstack && (size <= p->spare_runstack_size)) {
|
if (p->spare_runstack && (size <= p->spare_runstack_size)) {
|
||||||
|
@ -4802,7 +4806,7 @@ scheme_do_eval(Scheme_Object *obj, int num_rands, Scheme_Object **rands,
|
||||||
|
|
||||||
if (num_rands >= 0) {
|
if (num_rands >= 0) {
|
||||||
|
|
||||||
if ((RUNSTACK - RUNSTACK_START) < TAIL_COPY_THRESHOLD) {
|
if ((RUNSTACK - RUNSTACK_START) < SCHEME_TAIL_COPY_THRESHOLD) {
|
||||||
/* It's possible that a sequence of primitive _scheme_tail_apply()
|
/* It's possible that a sequence of primitive _scheme_tail_apply()
|
||||||
calls will exhaust the Scheme stack. Watch out for that. */
|
calls will exhaust the Scheme stack. Watch out for that. */
|
||||||
p->ku.k.p1 = (void *)obj;
|
p->ku.k.p1 = (void *)obj;
|
||||||
|
@ -4814,7 +4818,7 @@ scheme_do_eval(Scheme_Object *obj, int num_rands, Scheme_Object **rands,
|
||||||
if (rands == p->tail_buffer)
|
if (rands == p->tail_buffer)
|
||||||
make_tail_buffer_safe();
|
make_tail_buffer_safe();
|
||||||
MZ_CONT_MARK_POS -= 2;
|
MZ_CONT_MARK_POS -= 2;
|
||||||
return scheme_enlarge_runstack(100 * TAIL_COPY_THRESHOLD, (void *(*)(void))do_eval_k);
|
return scheme_enlarge_runstack(SCHEME_TAIL_COPY_THRESHOLD, (void *(*)(void))do_eval_k);
|
||||||
}
|
}
|
||||||
|
|
||||||
apply_top:
|
apply_top:
|
||||||
|
@ -4832,7 +4836,7 @@ scheme_do_eval(Scheme_Object *obj, int num_rands, Scheme_Object **rands,
|
||||||
|
|
||||||
#define VACATE_TAIL_BUFFER_USE_RUNSTACK() \
|
#define VACATE_TAIL_BUFFER_USE_RUNSTACK() \
|
||||||
if (rands == p->tail_buffer) { \
|
if (rands == p->tail_buffer) { \
|
||||||
if (num_rands < TAIL_COPY_THRESHOLD) { \
|
if (num_rands < SCHEME_TAIL_COPY_THRESHOLD) { \
|
||||||
int i; \
|
int i; \
|
||||||
Scheme_Object **quick_rands; \
|
Scheme_Object **quick_rands; \
|
||||||
\
|
\
|
||||||
|
|
|
@ -3102,8 +3102,6 @@ call_with_sema_enable_break(int argc, Scheme_Object *argv[])
|
||||||
return do_call_with_sema("call-with-semaphore/enable-break", 1, argc, argv);
|
return do_call_with_sema("call-with-semaphore/enable-break", 1, argc, argv);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define TOTAL_STACK_SIZE (sizeof(Scheme_Object*) * SCHEME_STACK_SIZE)
|
|
||||||
|
|
||||||
static Scheme_Saved_Stack *copy_out_runstack(Scheme_Thread *p,
|
static Scheme_Saved_Stack *copy_out_runstack(Scheme_Thread *p,
|
||||||
Scheme_Object **runstack,
|
Scheme_Object **runstack,
|
||||||
Scheme_Object **runstack_start,
|
Scheme_Object **runstack_start,
|
||||||
|
|
|
@ -3095,7 +3095,7 @@ module_optimize(Scheme_Object *data, Optimize_Info *info)
|
||||||
|
|
||||||
start_simltaneous_b = m->body;
|
start_simltaneous_b = m->body;
|
||||||
for (b = m->body; !SCHEME_NULLP(b); b = SCHEME_CDR(b)) {
|
for (b = m->body; !SCHEME_NULLP(b); b = SCHEME_CDR(b)) {
|
||||||
/* Optimzie this expression: */
|
/* Optimize this expression: */
|
||||||
e = scheme_optimize_expr(SCHEME_CAR(b), info);
|
e = scheme_optimize_expr(SCHEME_CAR(b), info);
|
||||||
SCHEME_CAR(b) = e;
|
SCHEME_CAR(b) = e;
|
||||||
|
|
||||||
|
@ -3123,7 +3123,7 @@ module_optimize(Scheme_Object *data, Optimize_Info *info)
|
||||||
Scheme_Toplevel *tl;
|
Scheme_Toplevel *tl;
|
||||||
|
|
||||||
tl = (Scheme_Toplevel *)SCHEME_CAR(vars);
|
tl = (Scheme_Toplevel *)SCHEME_CAR(vars);
|
||||||
|
|
||||||
if (!(SCHEME_TOPLEVEL_FLAGS(tl) & SCHEME_TOPLEVEL_MUTATED)) {
|
if (!(SCHEME_TOPLEVEL_FLAGS(tl) & SCHEME_TOPLEVEL_MUTATED)) {
|
||||||
Scheme_Object *e2;
|
Scheme_Object *e2;
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
|
|
||||||
#define USE_COMPILED_STARTUP 1
|
#define USE_COMPILED_STARTUP 1
|
||||||
|
|
||||||
#define EXPECTED_PRIM_COUNT 862
|
#define EXPECTED_PRIM_COUNT 863
|
||||||
|
|
||||||
#ifdef MZSCHEME_SOMETHING_OMITTED
|
#ifdef MZSCHEME_SOMETHING_OMITTED
|
||||||
# undef USE_COMPILED_STARTUP
|
# undef USE_COMPILED_STARTUP
|
||||||
|
|
|
@ -277,6 +277,8 @@ extern volatile int scheme_fuel_counter;
|
||||||
|
|
||||||
extern Scheme_Thread *scheme_main_thread;
|
extern Scheme_Thread *scheme_main_thread;
|
||||||
|
|
||||||
|
#define SCHEME_TAIL_COPY_THRESHOLD 5
|
||||||
|
|
||||||
/* Flags for Scheme_Thread's `running' field: */
|
/* Flags for Scheme_Thread's `running' field: */
|
||||||
#define MZTHREAD_RUNNING 0x1
|
#define MZTHREAD_RUNNING 0x1
|
||||||
#define MZTHREAD_SUSPENDED 0x2
|
#define MZTHREAD_SUSPENDED 0x2
|
||||||
|
|
|
@ -9,6 +9,6 @@
|
||||||
|
|
||||||
|
|
||||||
#define MZSCHEME_VERSION_MAJOR 301
|
#define MZSCHEME_VERSION_MAJOR 301
|
||||||
#define MZSCHEME_VERSION_MINOR 13
|
#define MZSCHEME_VERSION_MINOR 14
|
||||||
|
|
||||||
#define MZSCHEME_VERSION "301.13" _MZ_SPECIAL_TAG
|
#define MZSCHEME_VERSION "301.14" _MZ_SPECIAL_TAG
|
||||||
|
|
|
@ -106,7 +106,8 @@ extern HANDLE scheme_break_semaphore;
|
||||||
|
|
||||||
#include "schfd.h"
|
#include "schfd.h"
|
||||||
|
|
||||||
#define INIT_SCHEME_STACK_SIZE 1000
|
#define DEFAULT_INIT_STACK_SIZE 1000
|
||||||
|
#define MAX_INIT_STACK_SIZE 100000
|
||||||
|
|
||||||
#ifdef SGC_STD_DEBUGGING
|
#ifdef SGC_STD_DEBUGGING
|
||||||
# define SENORA_GC_NO_FREE
|
# define SENORA_GC_NO_FREE
|
||||||
|
@ -315,6 +316,8 @@ static Scheme_Object *make_thread_set(int argc, Scheme_Object *argv[]);
|
||||||
static Scheme_Object *thread_set_p(int argc, Scheme_Object *argv[]);
|
static Scheme_Object *thread_set_p(int argc, Scheme_Object *argv[]);
|
||||||
static Scheme_Object *current_thread_set(int argc, Scheme_Object *argv[]);
|
static Scheme_Object *current_thread_set(int argc, Scheme_Object *argv[]);
|
||||||
|
|
||||||
|
static Scheme_Object *current_thread_initial_stack_size(int argc, Scheme_Object *argv[]);
|
||||||
|
|
||||||
static void adjust_custodian_family(void *pr, void *ignored);
|
static void adjust_custodian_family(void *pr, void *ignored);
|
||||||
|
|
||||||
static Scheme_Object *make_will_executor(int argc, Scheme_Object *args[]);
|
static Scheme_Object *make_will_executor(int argc, Scheme_Object *args[]);
|
||||||
|
@ -717,6 +720,13 @@ void scheme_init_thread(Scheme_Env *env)
|
||||||
"choice-evt",
|
"choice-evt",
|
||||||
0, -1),
|
0, -1),
|
||||||
env);
|
env);
|
||||||
|
|
||||||
|
scheme_add_global_constant("current-thread-initial-stack-size",
|
||||||
|
scheme_register_parameter(current_thread_initial_stack_size,
|
||||||
|
"current-thread-initial-stack-increment",
|
||||||
|
MZCONFIG_THREAD_INIT_STACK_SIZE),
|
||||||
|
env);
|
||||||
|
|
||||||
|
|
||||||
REGISTER_SO(namespace_options);
|
REGISTER_SO(namespace_options);
|
||||||
|
|
||||||
|
@ -1985,14 +1995,36 @@ static Scheme_Thread *make_thread(Scheme_Config *config,
|
||||||
process->tail_buffer = tb;
|
process->tail_buffer = tb;
|
||||||
}
|
}
|
||||||
process->tail_buffer_size = buffer_init_size;
|
process->tail_buffer_size = buffer_init_size;
|
||||||
|
|
||||||
process->runstack_size = INIT_SCHEME_STACK_SIZE;
|
|
||||||
{
|
{
|
||||||
Scheme_Object **sa;
|
int init_stack_size;
|
||||||
sa = scheme_malloc_allow_interior(sizeof(Scheme_Object*) * INIT_SCHEME_STACK_SIZE);
|
Scheme_Object *iss;
|
||||||
process->runstack_start = sa;
|
|
||||||
|
iss = scheme_get_thread_param(config, cells, MZCONFIG_THREAD_INIT_STACK_SIZE);
|
||||||
|
if (SCHEME_INTP(iss))
|
||||||
|
init_stack_size = SCHEME_INT_VAL(iss);
|
||||||
|
else if (SCHEME_BIGNUMP(iss))
|
||||||
|
init_stack_size = 0x7FFFFFFF;
|
||||||
|
else
|
||||||
|
init_stack_size = DEFAULT_INIT_STACK_SIZE;
|
||||||
|
|
||||||
|
/* A too-large stack size won't help performance.
|
||||||
|
A too-small stack size is unsafe for certain kinds of
|
||||||
|
tail calls. */
|
||||||
|
if (init_stack_size > MAX_INIT_STACK_SIZE)
|
||||||
|
init_stack_size = MAX_INIT_STACK_SIZE;
|
||||||
|
if (init_stack_size < SCHEME_TAIL_COPY_THRESHOLD)
|
||||||
|
init_stack_size = SCHEME_TAIL_COPY_THRESHOLD;
|
||||||
|
|
||||||
|
process->runstack_size = init_stack_size;
|
||||||
|
{
|
||||||
|
Scheme_Object **sa;
|
||||||
|
sa = scheme_malloc_allow_interior(sizeof(Scheme_Object*) * init_stack_size);
|
||||||
|
process->runstack_start = sa;
|
||||||
|
}
|
||||||
|
process->runstack = process->runstack_start + init_stack_size;
|
||||||
}
|
}
|
||||||
process->runstack = process->runstack_start + INIT_SCHEME_STACK_SIZE;
|
|
||||||
process->runstack_saved = NULL;
|
process->runstack_saved = NULL;
|
||||||
|
|
||||||
#ifdef RUNSTACK_IS_GLOBAL
|
#ifdef RUNSTACK_IS_GLOBAL
|
||||||
|
@ -5992,6 +6024,8 @@ static void make_initial_config(Scheme_Thread *p)
|
||||||
t_set = create_thread_set(NULL);
|
t_set = create_thread_set(NULL);
|
||||||
init_param(cells, paramz, MZCONFIG_THREAD_SET, (Scheme_Object *)t_set);
|
init_param(cells, paramz, MZCONFIG_THREAD_SET, (Scheme_Object *)t_set);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
init_param(cells, paramz, MZCONFIG_THREAD_INIT_STACK_SIZE, scheme_make_integer(DEFAULT_INIT_STACK_SIZE));
|
||||||
|
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
@ -6113,6 +6147,26 @@ Scheme_Object *scheme_param_config(char *name, Scheme_Object *pos,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Scheme_Object *
|
||||||
|
exact_positive_integer_p (int argc, Scheme_Object *argv[])
|
||||||
|
{
|
||||||
|
Scheme_Object *n = argv[0];
|
||||||
|
if (SCHEME_INTP(n) && (SCHEME_INT_VAL(n) > 0))
|
||||||
|
return scheme_true;
|
||||||
|
if (SCHEME_BIGNUMP(n) && SCHEME_BIGPOS(n))
|
||||||
|
return scheme_true;
|
||||||
|
|
||||||
|
return scheme_false;
|
||||||
|
}
|
||||||
|
|
||||||
|
static Scheme_Object *current_thread_initial_stack_size(int argc, Scheme_Object *argv[])
|
||||||
|
{
|
||||||
|
return scheme_param_config("current-thread-initial-stack-size",
|
||||||
|
scheme_make_integer(MZCONFIG_THREAD_INIT_STACK_SIZE),
|
||||||
|
argc, argv,
|
||||||
|
-1, exact_positive_integer_p, "exact positive integer", 0);
|
||||||
|
}
|
||||||
|
|
||||||
/*========================================================================*/
|
/*========================================================================*/
|
||||||
/* namespaces */
|
/* namespaces */
|
||||||
/*========================================================================*/
|
/*========================================================================*/
|
||||||
|
|
Loading…
Reference in New Issue
Block a user