(literalchar): Fix the code for escaping \, " and '.

(lex): Avoid trouble when there are many chars
to discard in a char literal with just several chars in it.
This commit is contained in:
Richard M. Stallman
1997-05-24 08:04:42 +00:00
parent 70ddf8972a
commit 5ce94c2964

View File

@@ -268,11 +268,11 @@ literalchar(pp, pcode, term)
so that `\012' and `\n' can be interchangeable. */
p = *pp;
if (code >= 040 && code < 0177)
*p++ = code;
else if (code == '\\') {*p++ = '\\'; *p++ = '\\';}
if (code == '\\') {*p++ = '\\'; *p++ = '\\';}
else if (code == '\'') {*p++ = '\\'; *p++ = '\'';}
else if (code == '\"') {*p++ = '\\'; *p++ = '\"';}
else if (code >= 040 && code < 0177)
*p++ = code;
else if (code == '\t') {*p++ = '\\'; *p++ = 't';}
else if (code == '\n') {*p++ = '\\'; *p++ = 'n';}
else if (code == '\r') {*p++ = '\\'; *p++ = 'r';}
@@ -381,6 +381,7 @@ lex()
{
int code, discode;
char discard[10], *dp;
p = token_buffer;
*p++ = '\'';
literalchar(&p, &code, '\'');
@@ -389,8 +390,12 @@ lex()
if (c != '\'')
{
warn(_("use \"...\" for multi-character literal tokens"));
dp = discard;
while (literalchar(&dp, &discode, '\'')) {}
while (1)
{
dp = discard;
if (! literalchar(&dp, &discode, '\''))
break;
}
}
*p++ = '\'';
*p = 0;