WIP - apply with varargs

This commit is contained in:
Justin Ethier 2016-06-28 23:01:50 -04:00
parent 93eff719a7
commit c46a8e57f6

View file

@ -2893,10 +2893,13 @@ void __121_123(void *data, object cont, object args)
args); args);
} }
//object apply_va(void *data, int argc, object clo, object cont, object func, ...);
void _apply(void *data, object cont, object args) void _apply(void *data, object cont, object args)
{ {
Cyc_check_num_args(data, "apply", 2, args); Cyc_check_num_args(data, "apply", 2, args);
apply(data, cont, car(args), cadr(args)); apply(data, cont, car(args), cadr(args));
//object argc = Cyc_length(data, args);
//dispatch(data, obj_obj2int(argc), (function_type)apply_va, cont, cont, args);
} }
void _assoc(void *data, object cont, object args) void _assoc(void *data, object cont, object args)
@ -3224,6 +3227,20 @@ void _call_95cc(void *data, object cont, object args)
return_closcall2(data, __glo_call_95cc_scheme_base, cont, car(args)); return_closcall2(data, __glo_call_95cc_scheme_base, cont, car(args));
} }
// TODO: Experimenting with supporting varargs for (apply). does not work yet
object apply_va(void *data, int argc, object clo, object cont, object func, ...)
{
object tmp = NULL;
int i;
va_list ap;
va_start(ap, func);
for (i = 1; i < argc; i++) {
tmp = va_arg(ap, object);
}
va_end(ap);
apply(data, cont, func, tmp);
}
/* /*
* @param cont - Continuation for the function to call into * @param cont - Continuation for the function to call into
* @param func - Function to execute * @param func - Function to execute