]> git.lizzy.rs Git - plan9front.git/commitdiff
games/mix: fix incorrect line numbers
authorglenda <glenda@cirno.localdomain>
Tue, 27 Feb 2018 03:39:49 +0000 (22:39 -0500)
committerglenda <glenda@cirno.localdomain>
Tue, 27 Feb 2018 03:39:49 +0000 (22:39 -0500)
rc/bin/g
sys/src/games/mix/mix.c
sys/src/games/mix/mix.h

index 69656dfccbe23d24175ece1557ebaef0230d7b9f..d3505e3d4defc2b5ac48c307b9e364ec06d17d78 100755 (executable)
--- a/rc/bin/g
+++ b/rc/bin/g
@@ -14,7 +14,7 @@ case 0
          exit usage 
 case 1 
          pattern=$1 
-         files=(`{ls *.[bcChlmsy] *.asm *.awk *.cc *.cgi *.cpp *.cs *.go *.goc *.java *.lx *.ms *.pl *.py *.rc *.tex *.xy >[2]/dev/null}) 
+         files=(`{ls *.[bcChlmsy] *.ml[iyl] *.ml *.asm *.awk *.cc *.cgi *.cpp *.cs *.go *.goc *.java *.lx *.ms *.pl *.py *.rc *.tex *.xy >[2]/dev/null}) 
 case * 
          pattern=$1 
          shift 
index 2eb993fcab7a6d2236378a1a91dec347b33a242d..b7f451c0cea120e085253c49941be9598b1d1454 100644 (file)
@@ -320,6 +320,14 @@ getr(void)
        return r;
 }
 
+void
+ungetr(Rune r)
+{
+       if(r == '\n')
+               line--;
+       Bungetrune(&bin);
+}
+
 long
 yylex(void)
 {
@@ -339,22 +347,16 @@ Loop:
        case '\t':
        case ' ':
                goto Loop;
-       case '\n':
-       case '*':
-       case '+':
-       case '-':
-       case ':':
-       case ',':
-       case '(':
-       case ')':
-       case '=':
+       case '\n': case '*': case '+':
+       case '-': case ':': case ',':
+       case '(': case ')': case '=':
                return r;
        case '/':
                r = getr();
-               if(r == '/') {
+               if(r == '/')
                        return LSS;
-               else
-                       Bungetrune(&bin);
+               else
+                       ungetr(r);
                return '/';
        case '"':
                for(bp = buf; bp < buf+5; bp++) {
@@ -369,30 +371,20 @@ Loop:
        ep = buf+nelem(buf)-1;
        isnum = 1;
        for(;;) {
-               if(runetomix(r) == -1) 
+               if(runetomix(r) == -1)
                        yyerror("Invalid character %C", r);
                if(bp == ep)
                        yyerror("Symbol or number too long");
                *bp++ = r;
                if(isnum && (r >= Runeself || !isdigit(r)))
                        isnum = 0;
-               r = getr();
-               switch(r) {
-               case Beof:
-               case '\t':
-               case '\n':
-               case '+':
-               case '-':
-               case '*':
-               case ':':
-               case ',':
-               case '(':
-               case ')':
-               case '=':
-               case ' ':
-               case '/':
-               case '#':
-                       Bungetrune(&bin);
+               switch(r = getr()) {
+               case Beof: case '\t': case '\n':
+               case '+': case '-': case '*':
+               case ':': case ',': case '(':
+               case ')': case '=': case ' ':
+               case '/': case '#':
+                       ungetr(r);
                        *bp = '\0';
                        goto End;
                }
@@ -407,6 +399,18 @@ End:
        return yylval.sym->lex;
 }
 
+Sym*
+getsym(char *name)
+{
+       Sym *s;
+
+       s = emallocz(sizeof(*s) + strlen(name));
+       strcpy(s->nbuf, name);
+       s->name = s->nbuf;
+       s->lex = LSYMREF;
+       return s;
+}
+
 Sym*
 sym(char *name)
 {
@@ -416,11 +420,7 @@ sym(char *name)
        s = (Sym*)avllookup(syms, &l, 0);
        if(s != nil)
                return s;
-
-       s = emallocz(sizeof(*s) + strlen(name));
-       strcpy(s->nbuf, name);
-       s->name = s->nbuf;
-       s->lex = LSYMREF;
+       s = getsym(name);
        avlinsert(syms, s);
        return s;
 }
index 59e1c70c51e4600ace8460dc428df2c594f455c0..197ad1b36f7cde988cda39a659241f1b168d330a 100644 (file)
@@ -39,6 +39,7 @@ void yyerror(char*, ...);
 void vmerror(char*, ...);
 void skipto(char);
 Sym *sym(char*);
+Sym *getsym(char*);
 void sinit(void);
 int asmfile(char*);
 int V(u32int, int);