]> git.lizzy.rs Git - plan9front.git/commitdiff
libavl, libregexp: put debug functions back
authorftrvxmtrx <ftrvxmtrx@gmail.com>
Thu, 17 Nov 2016 22:07:54 +0000 (23:07 +0100)
committerftrvxmtrx <ftrvxmtrx@gmail.com>
Thu, 17 Nov 2016 22:07:54 +0000 (23:07 +0100)
sys/src/libavl/avl.c
sys/src/libregexp/regcomp.c

index ec60df209138e1bffd2030bd146842031f058137..59266d36dcc66bb889367657d3b9189060179f5f 100644 (file)
@@ -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);
+}
index 61f9683a663d46ce152930f857aa34b82a22079c..ad3b8cd96218fc5bf0bacc04ea74ebeeb53aacb0 100644 (file)
@@ -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;
+       }
+}