summaryrefslogtreecommitdiffstats
path: root/sys.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys.c')
-rw-r--r--sys.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/sys.c b/sys.c
index 0ace3a5..8308fba 100644
--- a/sys.c
+++ b/sys.c
@@ -61,13 +61,14 @@ SCM *loc_try_create_file;
#ifndef STDC_HEADERS
char *ttyname P((int fd));
char *tmpnam P((char *s));
- sizet fwrite ();
# ifdef sun
# ifndef __SVR4
int fputs P((char *s, FILE* stream));
int fputc P((char c, FILE* stream));
int fflush P((FILE* stream));
# endif
+# else
+ sizet fwrite ();
# endif
int fgetc P((FILE* stream));
int fclose P((FILE* stream));
@@ -1679,9 +1680,9 @@ SCM scm_make_cont()
return cont;
}
static char s_sstale[] = "strangely stale";
-void scm_dynthrow(tocont, val)
+void scm_dynthrow(tocont, arg1, arg2, rest)
SCM tocont;
- SCM val;
+ SCM arg1, arg2, rest;
{
CONTINUATION *cont = CONT(tocont);
if (cont->stkbse != CONT(rootcont)->stkbse)
@@ -1708,9 +1709,14 @@ void scm_dynthrow(tocont, val)
scm_trace_env = cont->other.stkframe[2];
scm_trace = cont->other.stkframe[3];
#endif
+ if (!UNBNDP(arg2) && IM_VALUES_TOKEN == scm_env_tmp) {
+ scm_env_cons(arg2, rest);
+ arg2 = UNDEFINED;
+ }
ALLOW_INTS;
}
- throw_to_continuation(cont, val, CONT(rootcont));
+ if (!UNBNDP(arg2)) return; /* eval will signal wrong number of args */
+ throw_to_continuation(cont, arg1, CONT(rootcont));
wta(tocont, s_sstale, s_cont);
}