diff --git a/extlib/benz/include/picrin/vector.h b/extlib/benz/include/picrin/vector.h index 514ecb4b..2d845308 100644 --- a/extlib/benz/include/picrin/vector.h +++ b/extlib/benz/include/picrin/vector.h @@ -18,8 +18,7 @@ struct pic_vector { #define pic_vec_p(v) (pic_type(v) == PIC_TT_VECTOR) #define pic_vec_ptr(o) ((struct pic_vector *)pic_ptr(o)) -struct pic_vector *pic_make_vec(pic_state *, size_t); -struct pic_vector *pic_make_vec_from_list(pic_state *, pic_value); +pic_vec *pic_make_vec(pic_state *, size_t); #if defined(__cplusplus) } diff --git a/extlib/benz/read.c b/extlib/benz/read.c index 09278225..3c13fd03 100644 --- a/extlib/benz/read.c +++ b/extlib/benz/read.c @@ -643,11 +643,19 @@ read_pair(pic_state *pic, struct pic_port *port, int c) static pic_value read_vector(pic_state *pic, struct pic_port *port, int c) { - pic_value list; + pic_value list, it, elem; + pic_vec *vec; + size_t i = 0; list = read(pic, port, c); - return pic_obj_value(pic_make_vec_from_list(pic, list)); + vec = pic_make_vec(pic, pic_length(pic, list)); + + pic_for_each (elem, list, it) { + vec->data[i++] = elem; + } + + return pic_obj_value(vec); } static pic_value diff --git a/extlib/benz/vector.c b/extlib/benz/vector.c index c3b914c1..a270ad69 100644 --- a/extlib/benz/vector.c +++ b/extlib/benz/vector.c @@ -19,22 +19,6 @@ pic_make_vec(pic_state *pic, size_t len) return vec; } -struct pic_vector * -pic_make_vec_from_list(pic_state *pic, pic_value data) -{ - struct pic_vector *vec; - size_t len, i; - - len = pic_length(pic, data); - - vec = pic_make_vec(pic, len); - for (i = 0; i < len; ++i) { - vec->data[i] = pic_car(pic, data); - data = pic_cdr(pic, data); - } - return vec; -} - static pic_value pic_vec_vector_p(pic_state *pic) {