diff options
Diffstat (limited to 'sys.c')
-rw-r--r-- | sys.c | 14 |
1 files changed, 10 insertions, 4 deletions
@@ -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); } |