]> git.lizzy.rs Git - plan9front.git/blobdiff - sys/src/libregexp/regcomp.c
libregexp: miscellaneous little cleanups
[plan9front.git] / sys / src / libregexp / regcomp.c
index c937ee5c9a007d399127ad312f5eec22a9bd8840..094f947794c3e6b9b275d6ce64c8fdc7881dbee4 100644 (file)
@@ -78,14 +78,17 @@ e2(Parselex *plex)
        Renode *n;
 
        n = e3(plex);
-       if(lex(plex) == LREP) {
+       while(lex(plex) == LREP) {
                switch(plex->rune) {
                case L'*':
-                       return node(plex, TSTAR, n, nil);
+                       n = node(plex, TSTAR, n, nil);
+                       break;
                case L'+':
-                       return node(plex, TPLUS, n, nil);
+                       n = node(plex, TPLUS, n, nil);
+                       break;
                case L'?':
-                       return node(plex, TQUES, n, nil);
+                       n = node(plex, TQUES, n, nil);
+                       break;
                }
        }
        plex->peek = 1;
@@ -153,17 +156,6 @@ 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)
 {
@@ -184,7 +176,7 @@ regcomp1(char *regstr, int nl, int lit)
                return nil;
        }
 
-       maxthr = regstrlen;
+       maxthr = regstrlen + 1;
        parsetr = node(&plex, TSUB, e0(&plex), nil);
 
 //     prtree(parsetr, 0, 1);
@@ -301,12 +293,13 @@ Tailcall:
 static Reinst*
 compile(Renode *parsetr, Reprog *reprog, int nl)
 {
-       Reinst *reinst;
+       Reinst *reinst, *end;
        int sub;
 
        sub = 0;
        reinst = (Reinst*)(reprog+1);
-       compile1(parsetr, reinst, &sub, nl);
+       end = compile1(parsetr, reinst, &sub, nl);
+       assert(end <= reinst + reprog->len);
        return reinst;
 }
 
@@ -315,7 +308,7 @@ getnextr(Parselex *l)
 {
        l->literal = 0;
        if(l->done) {
-               l->rune = 0;
+               l->rune = L'\0';
                return;
        }
        l->rawexp += chartorune(&l->rune, l->rawexp);
@@ -334,7 +327,7 @@ getnextrlit(Parselex *l)
        l->literal = 1;
        if(l->done) {
                l->literal = 0;
-               l->rune = 0;
+               l->rune = L'\0';
                return;
        }
        l->rawexp += chartorune(&l->rune, l->rawexp);
@@ -354,7 +347,7 @@ lex(Parselex *l)
        if(l->literal)
                return l->peeklex = LRUNE;
        switch(l->rune){
-       case 0:
+       case L'\0':
                return l->peeklex = LEND;
        case L'*':
        case L'?':
@@ -382,16 +375,20 @@ lex(Parselex *l)
 static int
 pcmp(void *va, void *vb)
 {
-       vlong n;
        Rune *a, *b;
 
        a = va;
        b = vb;
 
-       n = (vlong)b[0] - (vlong)a[0];
-       if(n)
-               return n;
-       return (vlong)b[1] - (vlong)a[1];
+       if(a[0] < b[0])
+               return 1;
+       if(a[0] > b[0])
+               return -1;
+       if(a[1] < b[1])
+               return 1;
+       if(a[1] > b[1])
+               return -1;
+       return 0;
 }
 
 static void
@@ -467,7 +464,7 @@ getclass(Parselex *l)
        q[2] = 0;
 }
 
-/* classes are in descending order */
+/* classes are in descending order see pcmp */
 static Renode*
 buildclassn(Parselex *l)
 {