| @@ -62,6 +62,7 @@ size_t l2_io_file_read(struct l2_io_reader *self, void *buf, size_t len); | |||
| struct l2_io_mem_writer { | |||
| struct l2_io_writer w; | |||
| size_t len; | |||
| size_t size; | |||
| void *mem; | |||
| }; | |||
| void l2_io_mem_write(struct l2_io_writer *self, const void *buf, size_t len); | |||
| @@ -103,8 +103,14 @@ size_t l2_io_file_read(struct l2_io_reader *self, void *buf, size_t len) { | |||
| void l2_io_mem_write(struct l2_io_writer *self, const void *buf, size_t len) { | |||
| struct l2_io_mem_writer *w = (struct l2_io_mem_writer *)self; | |||
| size_t idx = w->len; | |||
| if (w->len + len > w->size) { | |||
| if (w->size == 0) w->size = 64; | |||
| while (w->len + len > w->size) w->size *= 2; | |||
| w->mem = realloc(w->mem, w->size); | |||
| } | |||
| w->len += len; | |||
| w->mem = realloc(w->mem, w->len); | |||
| memcpy((char *)w->mem + idx, buf, len); | |||
| } | |||
| @@ -75,8 +75,6 @@ static void check_impl(const char *name) { | |||
| struct l2_io_mem_writer bytecode = { | |||
| .w.write = l2_io_mem_write, | |||
| .len = 0, | |||
| .mem = NULL, | |||
| }; | |||
| struct l2_lexer lexer; | |||