char* lexname(int);
long getr(void);
int getnsc(void);
-int escchar(int, int*, vlong*);
+int escchar(int, vlong*);
int getc(void);
void ungetc(int);
void mkpackage(char*);
vlong v;
char *cp;
Rune rune;
- int escflag;
Sym *s;
l0:
caseq:
for(;;) {
- if(escchar('"', &escflag, &v))
+ if(escchar('"', &v))
break;
- if(escflag) {
- cp = remal(cp, c1, 1);
- cp[c1++] = v;
- } else {
+ if(v >= Runeself) {
// botch - this limits size of runes
rune = v;
c = runelen(rune);
cp = remal(cp, c1, c);
runetochar(cp+c1, &rune);
c1 += c;
+ continue;
}
+ cp = remal(cp, c1, 1);
+ cp[c1++] = v;
}
goto catem;
case '\'':
/* '.' */
- if(escchar('\'', &escflag, &v))
+ if(escchar('\'', &v))
v = '\''; // allow '''
- if(!escchar('\'', &escflag, &v)) {
+ if(!escchar('\'', &v)) {
yyerror("missing '");
ungetc(v);
}
int
-escchar(int e, int *escflg, vlong *val)
+escchar(int e, vlong *val)
{
- int i, c;
+ int i;
+ long c;
vlong l;
- *escflg = 0;
-
loop:
c = getr();
if(c == '\n') {
ungetc(c);
break;
}
- *escflg = 1;
*val = l;
return 0;
}
if(l > 255)
warn("oct escape value > 255: %d", l);
- *escflg = 1;
*val = l;
return 0;
}