diff options
author | ftrvxmtrx <ftrvxmtrx@gmail.com> | 2016-11-17 23:07:54 +0100 |
---|---|---|
committer | ftrvxmtrx <ftrvxmtrx@gmail.com> | 2016-11-17 23:07:54 +0100 |
commit | ee9b0eef895209023ab7d7cc1808f33318834999 (patch) | |
tree | 39ae64a35ddcf156847fa46b9d5cb23400277e79 /sys/src | |
parent | ed76659c054ce781ae6050e563de9ad40b3d25cd (diff) |
libavl, libregexp: put debug functions back
Diffstat (limited to 'sys/src')
-rw-r--r-- | sys/src/libavl/avl.c | 21 | ||||
-rw-r--r-- | sys/src/libregexp/regcomp.c | 74 |
2 files changed, 95 insertions, 0 deletions
diff --git a/sys/src/libavl/avl.c b/sys/src/libavl/avl.c index ec60df209..59266d36d 100644 --- a/sys/src/libavl/avl.c +++ b/sys/src/libavl/avl.c @@ -204,6 +204,17 @@ _deleteavl(Avl **tp, Avl *p, Avl *rx, int(*cmp)(Avl*,Avl*), Avl **del, return -(ob != 0 && (*tp)->bal == 0); } +static void +checkparents(Avl *a, Avl *p) +{ + if(a == nil) + return; + if(a->p != p) + print("bad parent\n"); + checkparents(a->n[0], a); + checkparents(a->n[1], a); +} + struct Avltree { Avl *root; @@ -413,3 +424,13 @@ endwalk(Avlwalk *w) } free(w); } + +static void +walkavl(Avl *t, void (*f)(Avl*, void*), void *v) +{ + if(t == nil) + return; + walkavl(t->n[0], f, v); + f(t, v); + walkavl(t->n[1], f, v); +} diff --git a/sys/src/libregexp/regcomp.c b/sys/src/libregexp/regcomp.c index 61f9683a6..ad3b8cd96 100644 --- a/sys/src/libregexp/regcomp.c +++ b/sys/src/libregexp/regcomp.c @@ -156,6 +156,17 @@ initplex(Parselex *plex, char *regstr, int lit) return plex; } +static int +maxthreads(Renode *tree) +{ + tree = tree->left; + if(tree->op == TCAT) + tree = tree->left; + if(tree->op == TBOL) + return 2; + return -1; +} + static Reprog* regcomp1(char *regstr, int nl, int lit) { @@ -179,6 +190,7 @@ regcomp1(char *regstr, int nl, int lit) maxthr = regstrlen; parsetr = node(&plex, TSUB, e0(&plex), nil); +// prtree(parsetr, 0, 1); reprog = malloc(sizeof(Reprog) + sizeof(Reinst) * plex.instrs + sizeof(Rethread) * maxthr); @@ -503,3 +515,65 @@ buildclass(Parselex *l) } return n; } + +static void +prtree(Renode *tree, int d, int f) +{ + int i; + + if(tree == nil) + return; + if(f) + for(i = 0; i < d; i++) + print("\t"); + switch(tree->op) { + case TCAT: + prtree(tree->left, d, 0); + prtree(tree->right, d, 1); + break; + case TOR: + print("TOR\n"); + prtree(tree->left, d+1, 1); + for(i = 0; i < d; i++) + print("\t"); + print("|\n"); + prtree(tree->right, d+1, 1); + break; + case TSTAR: + print("*\n"); + prtree(tree->left, d+1, 1); + break; + case TPLUS: + print("+\n"); + prtree(tree->left, d+1, 1); + break; + case TQUES: + print("?\n"); + prtree(tree->left, d+1, 1); + break; + case TANY: + print(".\n"); + prtree(tree->left, d+1, 1); + break; + case TBOL: + print("^\n"); + break; + case TEOL: + print("$\n"); + break; + case TSUB: + print("TSUB\n"); + prtree(tree->left, d+1, 1); + break; + case TRUNE: + print("TRUNE: %C\n", tree->r); + break; + case TNOTNL: + print("TNOTNL: !\\n\n"); + break; + case TCLASS: + print("CLASS: %C-%C\n", tree->r, tree->r1); + prtree(tree->left, d, 1); + break; + } +} |