Port runtime functions for (bytevector)

This commit is contained in:
Justin Ethier 2021-02-23 22:54:16 -05:00
parent 085860ac51
commit 5e9def9dbf

View file

@ -3027,40 +3027,51 @@ object Cyc_make_bytevector(void *data, object cont, int argc, object len, ...)
_return_closcall1(data, cont, bv); _return_closcall1(data, cont, bv);
} }
#define Cyc_bytevector_va_list(argc) { \ void dispatch_bytevector(void *data, object clo, int _argc, object *args)
int i = 0, val; \ {
va_list ap; \ int argc = _argc - 1;
object tmp; \ int i, val;
char *buffer; \ object tmp;
make_empty_bytevector(bv); \ char *buffer;
if (argc > 0) { \ make_empty_bytevector(bv);
Cyc_check_num(data, bval); \ if (argc > 0) {
buffer = alloca(sizeof(char) * argc); \ buffer = alloca(sizeof(char) * argc);
val = unbox_number(bval); \ for(i = 0; i < argc; i++) {
buffer[i] = val; \ tmp = args[i];
va_start(ap, bval); \ Cyc_check_num(data, tmp);
for(i = 1; i < argc; i++) { \ val = unbox_number(tmp);
tmp = va_arg(ap, object); \ buffer[i] = (unsigned char)val;
Cyc_check_num(data, tmp); \ }
val = unbox_number(tmp); \ bv.len = argc;
buffer[i] = (unsigned char)val; \ bv.data = buffer;
} \ }
va_end(ap); \ return_closcall1(data, clo, &bv);
bv.len = argc; \
bv.data = buffer; \
} \
_return_closcall1(data, cont, &bv); \
} }
object dispatch_bytevector(void *data, int _argc, object clo, object cont, object Cyc_bytevector(void *data, object cont, int argc, object bval, ...)
object bval, ...)
{ {
Cyc_bytevector_va_list((_argc - 1)); int i = 0, val;
} va_list ap;
object tmp;
object Cyc_bytevector(void *data, object cont, int _argc, object bval, ...) char *buffer;
{ make_empty_bytevector(bv);
Cyc_bytevector_va_list(_argc); if (argc > 0) {
Cyc_check_num(data, bval);
buffer = alloca(sizeof(char) * argc);
val = unbox_number(bval);
buffer[i] = val;
va_start(ap, bval);
for(i = 1; i < argc; i++) {
tmp = va_arg(ap, object);
Cyc_check_num(data, tmp);
val = unbox_number(tmp);
buffer[i] = (unsigned char)val;
}
va_end(ap);
bv.len = argc;
bv.data = buffer;
}
_return_closcall1(data, cont, &bv);
} }
#define Cyc_bytevector_append_va_list(argc) { \ #define Cyc_bytevector_append_va_list(argc) { \