Lines Matching refs:stack

225  from tre-stack.c and tre-stack.h
230 /* Creates a new stack object. `size' is initial size in bytes, `max_size'
232 allocated with realloc() if all space gets used up. Returns the stack
237 /* Frees the stack object. */
241 /* Returns the current number of objects in the stack. */
246 `value' on top of stack `s'. Returns REG_ESPACE if out of memory.
256 element off of stack `s' and returns it. The stack must not be
297 union tre_stack_item *stack;
309 s->stack = xmalloc(sizeof(*s->stack) * size);
310 if (s->stack == NULL)
326 xfree(s->stack);
341 s->stack[s->ptr] = value;
357 new_buffer = xrealloc(s->stack, sizeof(*new_buffer) * new_size);
364 s->stack = new_buffer;
383 return s->stack[--s->ptr].typetag ## _value; \
399 tre_stack_t *stack;
965 tre_stack_t *stack = ctx->stack;
967 PUSHINT(err, stack, subid++);
971 PUSHPTR(err, stack, nunion);
972 PUSHPTR(err, stack, nbranch);
973 PUSHINT(err, stack, subid++);
1067 err = marksub(ctx, nunion, tre_stack_pop_int(stack));
1076 nbranch = tre_stack_pop_voidptr(stack);
1077 nunion = tre_stack_pop_voidptr(stack);
1092 - Fix tre_ast_to_tnfa() to recurse using a stack instead of recursive
1203 tre_add_tags(tre_mem_t mem, tre_stack_t *stack, tre_ast_node_t *tree,
1209 int bottom = tre_stack_num_objects(stack);
1257 STACK_PUSH(stack, voidptr, node);
1258 STACK_PUSH(stack, int, ADDTAGS_RECURSE);
1260 while (tre_stack_num_objects(stack) > bottom)
1265 symbol = (tre_addtags_symbol_t)tre_stack_pop_int(stack);
1271 int id = tre_stack_pop_int(stack);
1279 /* Pop this submatch from the parents stack. */
1286 node = tre_stack_pop_voidptr(stack);
1321 STACK_PUSHX(stack, int, node->submatch_id);
1322 STACK_PUSHX(stack, int, ADDTAGS_SET_SUBMATCH_END);
1379 STACK_PUSHX(stack, voidptr, node);
1380 STACK_PUSHX(stack, int, ADDTAGS_AFTER_CAT_RIGHT);
1383 STACK_PUSHX(stack, voidptr, right);
1384 STACK_PUSHX(stack, int, ADDTAGS_RECURSE);
1387 STACK_PUSHX(stack, int, next_tag + left->num_tags);
1394 STACK_PUSHX(stack, int, reserved_tag);
1395 STACK_PUSHX(stack, int, ADDTAGS_AFTER_CAT_LEFT);
1398 STACK_PUSHX(stack, voidptr, left);
1399 STACK_PUSHX(stack, int, ADDTAGS_RECURSE);
1409 STACK_PUSHX(stack, int, regset[0] >= 0 || iter->minimal);
1413 STACK_PUSHX(stack, int, tag);
1414 STACK_PUSHX(stack, int, iter->minimal);
1416 STACK_PUSHX(stack, voidptr, node);
1417 STACK_PUSHX(stack, int, ADDTAGS_AFTER_ITERATION);
1419 STACK_PUSHX(stack, voidptr, iter->arg);
1420 STACK_PUSHX(stack, int, ADDTAGS_RECURSE);
1473 STACK_PUSHX(stack, int, right_tag);
1474 STACK_PUSHX(stack, int, left_tag);
1475 STACK_PUSHX(stack, voidptr, regset);
1476 STACK_PUSHX(stack, int, regset[0] >= 0);
1477 STACK_PUSHX(stack, voidptr, node);
1478 STACK_PUSHX(stack, voidptr, right);
1479 STACK_PUSHX(stack, voidptr, left);
1480 STACK_PUSHX(stack, int, ADDTAGS_AFTER_UNION_RIGHT);
1483 STACK_PUSHX(stack, voidptr, right);
1484 STACK_PUSHX(stack, int, ADDTAGS_RECURSE);
1487 STACK_PUSHX(stack, int, ADDTAGS_AFTER_UNION_LEFT);
1490 STACK_PUSHX(stack, voidptr, left);
1491 STACK_PUSHX(stack, int, ADDTAGS_RECURSE);
1534 /* Push this submatch on the parents stack. */
1546 node = tre_stack_pop_voidptr(stack);
1550 + tre_stack_pop_int(stack);
1555 minimal = tre_stack_pop_int(stack);
1556 enter_tag = tre_stack_pop_int(stack);
1573 int new_tag = tre_stack_pop_int(stack);
1574 next_tag = tre_stack_pop_int(stack);
1583 node = tre_stack_pop_voidptr(stack);
1601 tre_ast_node_t *left = tre_stack_pop_voidptr(stack);
1602 tre_ast_node_t *right = tre_stack_pop_voidptr(stack);
1603 node = tre_stack_pop_voidptr(stack);
1604 added_tags = tre_stack_pop_int(stack);
1611 regset = tre_stack_pop_voidptr(stack);
1612 tag_left = tre_stack_pop_int(stack);
1613 tag_right = tre_stack_pop_int(stack);
1645 } /* end while(tre_stack_num_objects(stack) > bottom) */
1687 tre_copy_ast(tre_mem_t mem, tre_stack_t *stack, tre_ast_node_t *ast,
1692 int bottom = tre_stack_num_objects(stack);
1698 STACK_PUSH(stack, voidptr, ast);
1699 STACK_PUSH(stack, int, COPY_RECURSE);
1701 while (status == REG_OK && tre_stack_num_objects(stack) > bottom)
1707 symbol = (tre_copyast_symbol_t)tre_stack_pop_int(stack);
1711 result = tre_stack_pop_voidptr(stack);
1714 node = tre_stack_pop_voidptr(stack);
1769 STACK_PUSHX(stack, voidptr, uni->right);
1770 STACK_PUSHX(stack, int, COPY_RECURSE);
1771 STACK_PUSHX(stack, voidptr, &tmp->right);
1772 STACK_PUSHX(stack, int, COPY_SET_RESULT_PTR);
1773 STACK_PUSHX(stack, voidptr, uni->left);
1774 STACK_PUSHX(stack, int, COPY_RECURSE);
1792 STACK_PUSHX(stack, voidptr, cat->right);
1793 STACK_PUSHX(stack, int, COPY_RECURSE);
1794 STACK_PUSHX(stack, voidptr, &tmp->right);
1795 STACK_PUSHX(stack, int, COPY_SET_RESULT_PTR);
1796 STACK_PUSHX(stack, voidptr, cat->left);
1797 STACK_PUSHX(stack, int, COPY_RECURSE);
1803 STACK_PUSHX(stack, voidptr, iter->arg);
1804 STACK_PUSHX(stack, int, COPY_RECURSE);
1835 tre_expand_ast(tre_mem_t mem, tre_stack_t *stack, tre_ast_node_t *ast,
1839 int bottom = tre_stack_num_objects(stack);
1845 STACK_PUSHR(stack, voidptr, ast);
1846 STACK_PUSHR(stack, int, EXPAND_RECURSE);
1847 while (status == REG_OK && tre_stack_num_objects(stack) > bottom)
1855 symbol = (tre_expand_ast_symbol_t)tre_stack_pop_int(stack);
1856 node = tre_stack_pop_voidptr(stack);
1876 STACK_PUSHX(stack, voidptr, uni->right);
1877 STACK_PUSHX(stack, int, EXPAND_RECURSE);
1878 STACK_PUSHX(stack, voidptr, uni->left);
1879 STACK_PUSHX(stack, int, EXPAND_RECURSE);
1885 STACK_PUSHX(stack, voidptr, cat->right);
1886 STACK_PUSHX(stack, int, EXPAND_RECURSE);
1887 STACK_PUSHX(stack, voidptr, cat->left);
1888 STACK_PUSHX(stack, int, EXPAND_RECURSE);
1894 STACK_PUSHX(stack, int, pos_add);
1895 STACK_PUSHX(stack, voidptr, node);
1896 STACK_PUSHX(stack, int, EXPAND_AFTER_ITER);
1897 STACK_PUSHX(stack, voidptr, iter->arg);
1898 STACK_PUSHX(stack, int, EXPAND_RECURSE);
1916 pos_add = tre_stack_pop_int(stack);
1933 status = tre_copy_ast(mem, stack, iter->arg, flags,
1950 status = tre_copy_ast(mem, stack, iter->arg, 0,
1964 status = tre_copy_ast(mem, stack, iter->arg, 0,
2134 tre_match_empty(tre_stack_t *stack, tre_ast_node_t *node, int *tags,
2142 int bottom = tre_stack_num_objects(stack);
2147 status = tre_stack_push_voidptr(stack, node);
2150 while (status == REG_OK && tre_stack_num_objects(stack) > bottom)
2152 node = tre_stack_pop_voidptr(stack);
2199 STACK_PUSHX(stack, voidptr, uni->left)
2201 STACK_PUSHX(stack, voidptr, uni->right)
2211 STACK_PUSHX(stack, voidptr, cat->left);
2212 STACK_PUSHX(stack, voidptr, cat->right);
2220 STACK_PUSHX(stack, voidptr, iter->arg);
2244 tre_compute_nfl(tre_mem_t mem, tre_stack_t *stack, tre_ast_node_t *tree)
2246 int bottom = tre_stack_num_objects(stack);
2248 STACK_PUSHR(stack, voidptr, tree);
2249 STACK_PUSHR(stack, int, NFL_RECURSE);
2251 while (tre_stack_num_objects(stack) > bottom)
2256 symbol = (tre_nfl_stack_symbol_t)tre_stack_pop_int(stack);
2257 node = tre_stack_pop_voidptr(stack);
2317 STACK_PUSHR(stack, voidptr, node);
2318 STACK_PUSHR(stack, int, NFL_POST_UNION);
2319 STACK_PUSHR(stack, voidptr, ((tre_union_t *)node->obj)->right);
2320 STACK_PUSHR(stack, int, NFL_RECURSE);
2321 STACK_PUSHR(stack, voidptr, ((tre_union_t *)node->obj)->left);
2322 STACK_PUSHR(stack, int, NFL_RECURSE);
2328 STACK_PUSHR(stack, voidptr, node);
2329 STACK_PUSHR(stack, int, NFL_POST_CATENATION);
2330 STACK_PUSHR(stack, voidptr, ((tre_catenation_t *)node->obj)->right);
2331 STACK_PUSHR(stack, int, NFL_RECURSE);
2332 STACK_PUSHR(stack, voidptr, ((tre_catenation_t *)node->obj)->left);
2333 STACK_PUSHR(stack, int, NFL_RECURSE);
2339 STACK_PUSHR(stack, voidptr, node);
2340 STACK_PUSHR(stack, int, NFL_POST_ITERATION);
2341 STACK_PUSHR(stack, voidptr, ((tre_iteration_t *)node->obj)->arg);
2342 STACK_PUSHR(stack, int, NFL_RECURSE);
2388 status = tre_match_empty(stack, cat->left,
2400 status = tre_match_empty(stack, cat->left, tags,
2425 status = tre_match_empty(stack, cat->right,
2437 status = tre_match_empty(stack, cat->right, tags,
2632 /* XXX - recurse using a stack!. */
2693 tre_stack_t *stack;
2708 /* Allocate a stack used throughout the compilation process for various
2710 stack = tre_stack_new(512, 1024000, 128);
2711 if (!stack)
2717 tre_stack_destroy(stack);
2724 parse_ctx.stack = stack;
2756 errcode = tre_add_tags(NULL, stack, tree, tnfa);
2781 errcode = tre_add_tags(mem, stack, tree, tnfa);
2788 errcode = tre_expand_ast(mem, stack, tree, &parse_ctx.position,
2806 errcode = tre_compute_nfl(mem, stack, tree);
2882 tre_stack_destroy(stack);
2892 if (stack != NULL)
2893 tre_stack_destroy(stack);