diff options
author | Bryan Newbold <bnewbold@robocracy.org> | 2017-02-20 00:05:29 -0800 |
---|---|---|
committer | Bryan Newbold <bnewbold@robocracy.org> | 2017-02-20 00:05:29 -0800 |
commit | 302e3218b7d487539ec305bf23881a6ee7d5be99 (patch) | |
tree | bf1adafe552a17b3b78522048bb7c24787696dd3 /sys.c | |
parent | c7d035ae1a729232579a0fe41ed5affa131d3623 (diff) | |
download | scm-302e3218b7d487539ec305bf23881a6ee7d5be99.tar.gz scm-302e3218b7d487539ec305bf23881a6ee7d5be99.zip |
Import Upstream version 5e1upstream/5e1
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); } |