mirror of
https://github.com/golang/go
synced 2024-11-25 22:57:58 -07:00
more nihan
SVN=121622
This commit is contained in:
parent
9abf9e8a37
commit
f9c58c25e0
@ -387,7 +387,7 @@ void lexinit(void);
|
|||||||
char* lexname(int);
|
char* lexname(int);
|
||||||
long getr(void);
|
long getr(void);
|
||||||
int getnsc(void);
|
int getnsc(void);
|
||||||
int escchar(int, vlong*);
|
int escchar(int, int*, vlong*);
|
||||||
int getc(void);
|
int getc(void);
|
||||||
void ungetc(int);
|
void ungetc(int);
|
||||||
void mkpackage(char*);
|
void mkpackage(char*);
|
||||||
|
@ -175,6 +175,7 @@ yylex(void)
|
|||||||
vlong v;
|
vlong v;
|
||||||
char *cp;
|
char *cp;
|
||||||
Rune rune;
|
Rune rune;
|
||||||
|
int escflag;
|
||||||
Sym *s;
|
Sym *s;
|
||||||
|
|
||||||
l0:
|
l0:
|
||||||
@ -224,19 +225,19 @@ l0:
|
|||||||
|
|
||||||
caseq:
|
caseq:
|
||||||
for(;;) {
|
for(;;) {
|
||||||
if(escchar('"', &v))
|
if(escchar('"', &escflag, &v))
|
||||||
break;
|
break;
|
||||||
if(v >= Runeself) {
|
if(escflag || v < Runeself) {
|
||||||
|
cp = remal(cp, c1, 1);
|
||||||
|
cp[c1++] = v;
|
||||||
|
} else {
|
||||||
// botch - this limits size of runes
|
// botch - this limits size of runes
|
||||||
rune = v;
|
rune = v;
|
||||||
c = runelen(rune);
|
c = runelen(rune);
|
||||||
cp = remal(cp, c1, c);
|
cp = remal(cp, c1, c);
|
||||||
runetochar(cp+c1, &rune);
|
runetochar(cp+c1, &rune);
|
||||||
c1 += c;
|
c1 += c;
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
cp = remal(cp, c1, 1);
|
|
||||||
cp[c1++] = v;
|
|
||||||
}
|
}
|
||||||
goto catem;
|
goto catem;
|
||||||
|
|
||||||
@ -281,9 +282,9 @@ l0:
|
|||||||
|
|
||||||
case '\'':
|
case '\'':
|
||||||
/* '.' */
|
/* '.' */
|
||||||
if(escchar('\'', &v))
|
if(escchar('\'', &escflag, &v))
|
||||||
v = '\''; // allow '''
|
v = '\''; // allow '''
|
||||||
if(!escchar('\'', &v)) {
|
if(!escchar('\'', &escflag, &v)) {
|
||||||
yyerror("missing '");
|
yyerror("missing '");
|
||||||
ungetc(v);
|
ungetc(v);
|
||||||
}
|
}
|
||||||
@ -695,12 +696,13 @@ getnsc(void)
|
|||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
escchar(int e, vlong *val)
|
escchar(int e, int *escflg, vlong *val)
|
||||||
{
|
{
|
||||||
int i;
|
int i, c;
|
||||||
long c;
|
|
||||||
vlong l;
|
vlong l;
|
||||||
|
|
||||||
|
*escflg = 0;
|
||||||
|
|
||||||
loop:
|
loop:
|
||||||
c = getr();
|
c = getr();
|
||||||
if(c == '\n') {
|
if(c == '\n') {
|
||||||
@ -720,6 +722,7 @@ loop:
|
|||||||
goto loop;
|
goto loop;
|
||||||
|
|
||||||
case 'x':
|
case 'x':
|
||||||
|
*escflg = 1; // it's a byte
|
||||||
i = 2;
|
i = 2;
|
||||||
goto hex;
|
goto hex;
|
||||||
|
|
||||||
@ -739,6 +742,7 @@ loop:
|
|||||||
case '5':
|
case '5':
|
||||||
case '6':
|
case '6':
|
||||||
case '7':
|
case '7':
|
||||||
|
*escflg = 1; // it's a byte
|
||||||
goto oct;
|
goto oct;
|
||||||
|
|
||||||
case 'a': c = '\a'; break;
|
case 'a': c = '\a'; break;
|
||||||
@ -793,6 +797,7 @@ oct:
|
|||||||
}
|
}
|
||||||
if(l > 255)
|
if(l > 255)
|
||||||
warn("oct escape value > 255: %d", l);
|
warn("oct escape value > 255: %d", l);
|
||||||
|
|
||||||
*val = l;
|
*val = l;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user