va_start(ap, func); \
if (argc == 2) { \
lis = va_arg(ap, object); \
Cyc_check_pair_or_null(data, lis); \
} else { \
tmp = va_arg(ap, object); \
set_pair(lis, tmp, NULL); \
prev = lis; \
for (i = 2; i < argc - 1; i++) { \
pair_type *next = alloca(
sizeof(
pair_type)); \
tmp = va_arg(ap, object); \
set_pair(next, tmp, NULL); \
cdr(prev) = next; \
prev = next; \
} \
tmp = va_arg(ap, object); \
cdr(prev) = tmp; \
} \
va_end(ap);