@@ -460,26 +460,34 @@ str parse_content(document* d)
460460 return res;
461461}
462462
463+typedef struct
464+{
465+ document document;
466+ attr attrs[1000];
467+ node nodes[1000];
468+} buffer;
469+
463470document* document_parse(char* s, int slen)
464471{
465472 if (slen == -1) slen = strlen(s);
466473 assert(s[slen] == 0);
467474 init_parse_table();
468475
469− document* d = malloc(sizeof(document));
476+ buffer* buf = malloc(sizeof(buffer));
477+ document* d = &buf->document;
470478 d->body = s;
471479 d->cursor = s;
472480 d->end = &s[slen];
473481 d->error_message = NULL;
474− d->attrs.size = 0;
482+ d->attrs.size = 1000;
475483 d->attrs.used = 0;
476− d->attrs.attrs = NULL;
484+ d->attrs.attrs = buf->attrs;
477485 d->attrs.alloc = NULL;
478486 d->nodes.size = 1000;
479487 d->nodes.used_back = 0;
480488 d->nodes.used_front = 1;
481− d->nodes.nodes = malloc(sizeof(node) * 1000);
482− d->nodes.alloc = d->nodes.nodes;
489+ d->nodes.nodes = buf->nodes;
490+ d->nodes.alloc = NULL;
483491
484492 d->nodes.nodes[0].name = start_length(0, 0);
485493 d->nodes.nodes[0].outer = start_length(0, slen);