mirror of
https://github.com/justinethier/cyclone.git
synced 2025-05-19 05:39:17 +02:00
Port dispatch_apply to new calling convention
This commit is contained in:
parent
eca1956400
commit
b507485f55
2 changed files with 24 additions and 5 deletions
|
@ -176,7 +176,7 @@ object Cyc_global_set_cps(void *thd, object cont, object sym, object * glo, obje
|
|||
/**@{*/
|
||||
object apply(void *data, object cont, object func, object args);
|
||||
void Cyc_apply(void *data, object cont, int argc, object *args);
|
||||
void dispatch_apply_va(void *data, int argc, object clo, object cont, object func, ...);
|
||||
void dispatch_apply_va(void *data, object clo, int argc, object *args);
|
||||
object apply_va(void *data, object cont, int argc, object func, ...);
|
||||
void dispatch(void *data, int argc, function_type func, object clo, object cont,
|
||||
object args);
|
||||
|
|
27
runtime.c
27
runtime.c
|
@ -5645,15 +5645,34 @@ void _call_95cc(void *data, object cont, object args)
|
|||
} \
|
||||
va_end(ap);
|
||||
|
||||
void dispatch_apply_va(void *data, int argc, object clo, object cont, object func, ...)
|
||||
//void dispatch_apply_va(void *data, int argc, object clo, object cont, object func, ...)
|
||||
void dispatch_apply_va(void *data, object clo, int argc, object *args)
|
||||
{
|
||||
list lis = NULL, prev = NULL;
|
||||
object tmp;
|
||||
// cargs TODO: check num args to make this safe
|
||||
object func = args[1];
|
||||
int i;
|
||||
va_list ap;
|
||||
argc = argc - 1; // Required for "dispatch" function
|
||||
do_apply_va
|
||||
apply(data, cont, func, lis);
|
||||
if (argc == 2) {
|
||||
lis = args[2];
|
||||
Cyc_check_pair_or_null(data, lis);
|
||||
} else {
|
||||
lis = alloca(sizeof(pair_type));
|
||||
tmp = args[2];
|
||||
set_pair(lis, tmp, NULL);
|
||||
prev = lis;
|
||||
for (i = 3; i < argc - 1; i++) {
|
||||
pair_type *next = alloca(sizeof(pair_type));
|
||||
tmp = args[i];
|
||||
set_pair(next, tmp, NULL);
|
||||
cdr(prev) = next;
|
||||
prev = next;
|
||||
}
|
||||
tmp = args[argc];
|
||||
cdr(prev) = tmp;
|
||||
}
|
||||
apply(data, clo, func, lis);
|
||||
}
|
||||
|
||||
object apply_va(void *data, object cont, int argc, object func, ...)
|
||||
|
|
Loading…
Add table
Reference in a new issue