games/mix: fix incorrect line numbers

This commit is contained in:
glenda 2018-02-26 22:39:49 -05:00
parent d1c0f53fcd
commit 60befe7df1
3 changed files with 37 additions and 36 deletions

View file

@ -14,7 +14,7 @@ case 0
exit usage exit usage
case 1 case 1
pattern=$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 * case *
pattern=$1 pattern=$1
shift shift

View file

@ -320,6 +320,14 @@ getr(void)
return r; return r;
} }
void
ungetr(Rune r)
{
if(r == '\n')
line--;
Bungetrune(&bin);
}
long long
yylex(void) yylex(void)
{ {
@ -339,22 +347,16 @@ Loop:
case '\t': case '\t':
case ' ': case ' ':
goto Loop; goto Loop;
case '\n': case '\n': case '*': case '+':
case '*': case '-': case ':': case ',':
case '+': case '(': case ')': case '=':
case '-':
case ':':
case ',':
case '(':
case ')':
case '=':
return r; return r;
case '/': case '/':
r = getr(); r = getr();
if(r == '/') { if(r == '/')
return LSS; return LSS;
} else else
Bungetrune(&bin); ungetr(r);
return '/'; return '/';
case '"': case '"':
for(bp = buf; bp < buf+5; bp++) { for(bp = buf; bp < buf+5; bp++) {
@ -369,30 +371,20 @@ Loop:
ep = buf+nelem(buf)-1; ep = buf+nelem(buf)-1;
isnum = 1; isnum = 1;
for(;;) { for(;;) {
if(runetomix(r) == -1) if(runetomix(r) == -1)
yyerror("Invalid character %C", r); yyerror("Invalid character %C", r);
if(bp == ep) if(bp == ep)
yyerror("Symbol or number too long"); yyerror("Symbol or number too long");
*bp++ = r; *bp++ = r;
if(isnum && (r >= Runeself || !isdigit(r))) if(isnum && (r >= Runeself || !isdigit(r)))
isnum = 0; isnum = 0;
r = getr(); switch(r = getr()) {
switch(r) { case Beof: case '\t': case '\n':
case Beof: case '+': case '-': case '*':
case '\t': case ':': case ',': case '(':
case '\n': case ')': case '=': case ' ':
case '+': case '/': case '#':
case '-': ungetr(r);
case '*':
case ':':
case ',':
case '(':
case ')':
case '=':
case ' ':
case '/':
case '#':
Bungetrune(&bin);
*bp = '\0'; *bp = '\0';
goto End; goto End;
} }
@ -407,6 +399,18 @@ End:
return yylval.sym->lex; 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*
sym(char *name) sym(char *name)
{ {
@ -416,11 +420,7 @@ sym(char *name)
s = (Sym*)avllookup(syms, &l, 0); s = (Sym*)avllookup(syms, &l, 0);
if(s != nil) if(s != nil)
return s; return s;
s = getsym(name);
s = emallocz(sizeof(*s) + strlen(name));
strcpy(s->nbuf, name);
s->name = s->nbuf;
s->lex = LSYMREF;
avlinsert(syms, s); avlinsert(syms, s);
return s; return s;
} }

View file

@ -39,6 +39,7 @@ void yyerror(char*, ...);
void vmerror(char*, ...); void vmerror(char*, ...);
void skipto(char); void skipto(char);
Sym *sym(char*); Sym *sym(char*);
Sym *getsym(char*);
void sinit(void); void sinit(void);
int asmfile(char*); int asmfile(char*);
int V(u32int, int); int V(u32int, int);