mirror of
https://github.com/cc65/cc65.git
synced 2025-03-03 09:32:33 +00:00
Fixed a escape char const problem
git-svn-id: svn://svn.cc65.org/cc65/trunk@3235 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
parent
21ff65dddc
commit
0e0183020d
@ -250,9 +250,8 @@ static void SetTok (int tok)
|
||||
static int ParseChar (void)
|
||||
/* Parse a character. Converts escape chars into character codes. */
|
||||
{
|
||||
int I;
|
||||
unsigned Val;
|
||||
int C;
|
||||
int HadError;
|
||||
|
||||
/* Check for escape chars */
|
||||
if (CurC == '\\') {
|
||||
@ -294,20 +293,23 @@ static int ParseChar (void)
|
||||
case 'x':
|
||||
case 'X':
|
||||
/* Hex character constant */
|
||||
NextChar ();
|
||||
if (!IsXDigit (CurC)) {
|
||||
if (!IsXDigit (NextC)) {
|
||||
Error ("\\x used with no following hex digits");
|
||||
C = ' ';
|
||||
}
|
||||
I = 0;
|
||||
C = 0;
|
||||
while (IsXDigit (CurC)) {
|
||||
if (++I <= 2) {
|
||||
C = (C << 4) | HexVal (CurC);
|
||||
} else if (I == 3) {
|
||||
Error ("Too many digits in hex character constant");
|
||||
} else {
|
||||
HadError = 0;
|
||||
C = 0;
|
||||
while (IsXDigit (NextC)) {
|
||||
if ((C << 4) >= 256) {
|
||||
if (!HadError) {
|
||||
Error ("Hex character constant out of range");
|
||||
HadError = 1;
|
||||
}
|
||||
} else {
|
||||
C = (C << 4) | HexVal (NextC);
|
||||
}
|
||||
NextChar ();
|
||||
}
|
||||
NextChar ();
|
||||
}
|
||||
break;
|
||||
case '0':
|
||||
@ -318,22 +320,24 @@ static int ParseChar (void)
|
||||
case '5':
|
||||
case '6':
|
||||
case '7':
|
||||
/* Octal constant ### FIXME: Eat all available octal chars! */
|
||||
I = 0;
|
||||
Val = CurC - '0';
|
||||
while (IsODigit (NextC) && ++I <= 3) {
|
||||
NextChar ();
|
||||
Val = (Val << 3) | (CurC - '0');
|
||||
}
|
||||
C = (int) Val;
|
||||
if (Val >= 256) {
|
||||
Error ("Character constant out of range: %u", Val);
|
||||
C = ' ';
|
||||
}
|
||||
break;
|
||||
/* Octal constant */
|
||||
HadError = 0;
|
||||
C = HexVal (CurC);
|
||||
while (IsODigit (NextC)) {
|
||||
if ((C << 3) >= 256) {
|
||||
if (!HadError) {
|
||||
Error ("Octal character constant out of range");
|
||||
HadError = 1;
|
||||
}
|
||||
} else {
|
||||
C = (C << 3) | HexVal (NextC);
|
||||
}
|
||||
NextChar ();
|
||||
}
|
||||
break;
|
||||
default:
|
||||
Error ("Illegal character constant");
|
||||
C = ' ';
|
||||
C = ' ';
|
||||
/* Try to do error recovery, otherwise the compiler will spit
|
||||
* out thousands of errors in this place and abort.
|
||||
*/
|
||||
|
Loading…
x
Reference in New Issue
Block a user