1
0
mirror of https://github.com/golang/go synced 2024-11-26 06:17:57 -07:00

Complain about control characters that are not white space.

Bitten by invisible chars too many times.

R=ken
OCL=24024
CL=24024
This commit is contained in:
Rob Pike 2009-01-31 16:42:10 -08:00
parent 6fdb18f900
commit 2538cf747b

View File

@ -299,6 +299,21 @@ cannedimports(char *file, char *cp)
inimportsys = 1;
}
int
isfrog(int c) {
// complain about possibly invisible control characters
if(c < 0)
return 1;
if(c < ' ') {
if(c == ' ' || c == '\n' || c== '\r' || c == '\t') // good white space
return 0;
return 1;
}
if(0x80 <= c && c <=0xa0) // unicode block including unbreakable space.
return 1;
return 0;
}
int32
yylex(void)
{
@ -645,6 +660,10 @@ lx:
DBG("%L lex: TOKEN %s\n", lineno, lexname(c));
else
DBG("%L lex: TOKEN '%c'\n", lineno, c);
if(isfrog(c)) {
yyerror("illegal character 0x%ux", c);
goto l0;
}
return c;
asop:
@ -661,8 +680,14 @@ talph:
if(c >= Runeself) {
for(c1=0;;) {
cp[c1++] = c;
if(fullrune(cp, c1))
if(fullrune(cp, c1)) {
chartorune(&rune, cp);
if(isfrog(rune)) {
yyerror("illegal character 0x%ux", rune);
goto l0;
}
break;
}
c = getc();
}
cp += c1;