diff --git a/runtime.c b/runtime.c index cd5a771e..6ef0f96b 100644 --- a/runtime.c +++ b/runtime.c @@ -2893,10 +2893,13 @@ void __121_123(void *data, object cont, object args) args); } +//object apply_va(void *data, int argc, object clo, object cont, object func, ...); void _apply(void *data, object cont, object args) { Cyc_check_num_args(data, "apply", 2, 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) @@ -3224,6 +3227,20 @@ void _call_95cc(void *data, object cont, object 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 func - Function to execute