diff options
author | Andy Wingo <wingo@pobox.com> | 2012-01-30 19:59:08 +0100 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2012-01-30 20:27:35 +0100 |
commit | dfadcf85cb3ae9133dece6bc39ed03dd25323d6e (patch) | |
tree | 93c918a793ee86c8406fd1bac521ea2b870361cf /libguile/eval.c | |
parent | 252acfe8e70ac4c7d325588ffea1905fcf6f86b2 (diff) | |
parent | e1fbe716e8596b7027af57623ebc72a0c6393187 (diff) | |
download | guile-dfadcf85cb3ae9133dece6bc39ed03dd25323d6e.tar.gz |
Merge remote-tracking branch 'origin/stable-2.0'
Conflicts:
libguile/debug.h
module/ice-9/psyntax-pp.scm
module/ice-9/psyntax.scm
module/language/tree-il/peval.scm
module/language/tree-il/primitives.scm
Diffstat (limited to 'libguile/eval.c')
-rw-r--r-- | libguile/eval.c | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/libguile/eval.c b/libguile/eval.c index ad0a84a58..5a42b1ead 100644 --- a/libguile/eval.c +++ b/libguile/eval.c @@ -24,6 +24,7 @@ #endif #include <alloca.h> +#include <stdarg.h> #include "libguile/__scm.h" @@ -521,11 +522,56 @@ scm_call_6 (SCM proc, SCM arg1, SCM arg2, SCM arg3, SCM arg4, SCM arg5, } SCM +scm_call_7 (SCM proc, SCM arg1, SCM arg2, SCM arg3, SCM arg4, SCM arg5, + SCM arg6, SCM arg7) +{ + SCM args[] = { arg1, arg2, arg3, arg4, arg5, arg6, arg7 }; + return scm_c_vm_run (scm_the_vm (), proc, args, 7); +} + +SCM +scm_call_8 (SCM proc, SCM arg1, SCM arg2, SCM arg3, SCM arg4, SCM arg5, + SCM arg6, SCM arg7, SCM arg8) +{ + SCM args[] = { arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8 }; + return scm_c_vm_run (scm_the_vm (), proc, args, 8); +} + +SCM +scm_call_9 (SCM proc, SCM arg1, SCM arg2, SCM arg3, SCM arg4, SCM arg5, + SCM arg6, SCM arg7, SCM arg8, SCM arg9) +{ + SCM args[] = { arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9 }; + return scm_c_vm_run (scm_the_vm (), proc, args, 9); +} + +SCM scm_call_n (SCM proc, SCM *argv, size_t nargs) { return scm_c_vm_run (scm_the_vm (), proc, argv, nargs); } +SCM +scm_call (SCM proc, ...) +{ + va_list argp; + SCM *argv = NULL; + size_t i, nargs = 0; + + va_start (argp, proc); + while (!SCM_UNBNDP (va_arg (argp, SCM))) + nargs++; + va_end (argp); + + argv = alloca (nargs * sizeof (SCM)); + va_start (argp, proc); + for (i = 0; i < nargs; i++) + argv[i] = va_arg (argp, SCM); + va_end (argp); + + return scm_c_vm_run (scm_the_vm (), proc, argv, nargs); +} + /* Simple procedure applies */ |