pic_apply supports multiple arguments
This commit is contained in:
parent
a7df867a55
commit
afffa20785
src
16
src/proc.c
16
src/proc.c
|
@ -1,4 +1,5 @@
|
||||||
#include "picrin.h"
|
#include "picrin.h"
|
||||||
|
#include "picrin/pair.h"
|
||||||
#include "picrin/proc.h"
|
#include "picrin/proc.h"
|
||||||
#include "picrin/irep.h"
|
#include "picrin/irep.h"
|
||||||
|
|
||||||
|
@ -39,15 +40,24 @@ pic_proc_proc_p(pic_state *pic)
|
||||||
static pic_value
|
static pic_value
|
||||||
pic_proc_apply(pic_state *pic)
|
pic_proc_apply(pic_state *pic)
|
||||||
{
|
{
|
||||||
pic_value proc, args;
|
pic_value proc, *args, v;
|
||||||
|
size_t argc;
|
||||||
|
int i;
|
||||||
|
|
||||||
pic_get_args(pic, "oo", &proc, &args);
|
pic_get_args(pic, "o*", &proc, &argc, &args);
|
||||||
|
|
||||||
if (! pic_proc_p(proc)) {
|
if (! pic_proc_p(proc)) {
|
||||||
pic_error(pic, "apply: expected procedure");
|
pic_error(pic, "apply: expected procedure");
|
||||||
}
|
}
|
||||||
|
if (argc == 0) {
|
||||||
|
pic_error(pic, "apply: wrong number of arguments");
|
||||||
|
}
|
||||||
|
v = args[argc - 1];
|
||||||
|
for (i = argc - 2; i >= 0; --i) {
|
||||||
|
v = pic_cons(pic, args[i], v);
|
||||||
|
}
|
||||||
|
|
||||||
return pic_apply(pic, pic_proc_ptr(proc), args);
|
return pic_apply(pic, pic_proc_ptr(proc), v);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
Loading…
Reference in New Issue