mirror of
https://github.com/justinethier/cyclone.git
synced 2025-05-24 12:35:05 +02:00
WIP version of dispatch_apply_va
This commit is contained in:
parent
c46a8e57f6
commit
67c00ae7ed
2 changed files with 34 additions and 7 deletions
|
@ -126,6 +126,8 @@ object Cyc_get_cvar(object var);
|
||||||
object Cyc_set_cvar(object var, object value);
|
object Cyc_set_cvar(object var, object value);
|
||||||
object apply(void *data, object cont, object func, object args);
|
object apply(void *data, object cont, object func, object args);
|
||||||
void Cyc_apply(void *data, int argc, closure cont, object prim, ...);
|
void Cyc_apply(void *data, int argc, closure cont, object prim, ...);
|
||||||
|
void dispatch_apply_va(void *data, int argc, object clo, object cont, object func, ...);
|
||||||
|
void apply_va(void *data, object cont, int argc, object func, ...);
|
||||||
object Cyc_string_cmp(void *data, object str1, object str2);
|
object Cyc_string_cmp(void *data, object str1, object str2);
|
||||||
void dispatch_string_91append(void *data, int argc, object clo, object cont,
|
void dispatch_string_91append(void *data, int argc, object clo, object cont,
|
||||||
object str1, ...);
|
object str1, ...);
|
||||||
|
|
39
runtime.c
39
runtime.c
|
@ -2893,13 +2893,16 @@ 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);
|
object argc = Cyc_length(data, args);
|
||||||
//dispatch(data, obj_obj2int(argc), (function_type)apply_va, cont, cont, args);
|
|
||||||
|
//fprintf(stdout, "_apply received args: ");
|
||||||
|
//Cyc_display(args, stdout);
|
||||||
|
//fprintf(stdout, "\n");
|
||||||
|
dispatch(data, obj_obj2int(argc), (function_type)dispatch_apply_va, cont, cont, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _assoc(void *data, object cont, object args)
|
void _assoc(void *data, object cont, object args)
|
||||||
|
@ -3227,8 +3230,7 @@ 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
|
void apply_va(void *data, object cont, int argc, object func, ...)
|
||||||
object apply_va(void *data, int argc, object clo, object cont, object func, ...)
|
|
||||||
{
|
{
|
||||||
object tmp = NULL;
|
object tmp = NULL;
|
||||||
int i;
|
int i;
|
||||||
|
@ -3238,6 +3240,29 @@ object apply_va(void *data, int argc, object clo, object cont, object func, ...)
|
||||||
tmp = va_arg(ap, object);
|
tmp = va_arg(ap, object);
|
||||||
}
|
}
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
|
// fprintf(stdout, "DEBUG applying argc %d, func ", argc);
|
||||||
|
// Cyc_display(func, stdout);
|
||||||
|
// fprintf(stdout, " to values ");
|
||||||
|
// Cyc_display(tmp, stdout);
|
||||||
|
// fprintf(stdout, "\n");
|
||||||
|
apply(data, cont, func, tmp);
|
||||||
|
}
|
||||||
|
|
||||||
|
void dispatch_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 - 1; i++) {
|
||||||
|
tmp = va_arg(ap, object);
|
||||||
|
}
|
||||||
|
va_end(ap);
|
||||||
|
// fprintf(stdout, "DEBUG applying argc %d, func ", argc);
|
||||||
|
// Cyc_display(func, stdout);
|
||||||
|
// fprintf(stdout, " to values ");
|
||||||
|
// Cyc_display(tmp, stdout);
|
||||||
|
// fprintf(stdout, "\n");
|
||||||
apply(data, cont, func, tmp);
|
apply(data, cont, func, tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue