Preprocessor: Allow '\' as a token, which gets actual use in #error, but should have no other use.

This is just for '\' that's not before a new line.
Note the specification says it has no use other than as line continuation,
but #error is a grey area. (There are no escape sequences.)
This commit is contained in:
John Kessenich 2015-07-25 17:34:32 -06:00
parent f330f08129
commit aead93aafd
4 changed files with 24 additions and 4 deletions

View File

@ -82,8 +82,17 @@ ERROR: 12:9014: '=' : cannot convert from 'temp float' to 'global int'
ERROR: 12:9015: 'macro expansion' : expected '(' following FOOOM
ERROR: 12:9016: 'preprocessor evaluation' : can't evaluate expression
ERROR: 12:9016: 'preprocessor evaluation' : bad expression
ERROR: 12:9500: 'preprocessor evaluation' : bad expression
ERROR: 12:9500: '#if' : unexpected tokens following directive
ERROR: 12:9502: 'preprocessor evaluation' : bad expression
ERROR: 12:9502: '#if' : unexpected tokens following directive
ERROR: 12:9504: 'preprocessor evaluation' : bad expression
ERROR: 12:9504: '#if' : unexpected tokens following directive
ERROR: 12:9506: '#error' : \ 377
ERROR: 12:9507: '#error' : \ 376
ERROR: 12:9508: '#error' : \ 377
ERROR: 12:10002: '' : missing #endif
ERROR: 79 compilation errors. No code generated.
ERROR: 88 compilation errors. No code generated.
Shader version: 400

View File

@ -326,6 +326,17 @@ int aoeua = FOOOM;
#if FOOOM
#endif
#line 9500
#if\376
#endif
#if \376
#endif
#if \377
#endif
#error\377
#error \ 376
#error \377
#line 10000
#if 1
#else

View File

@ -462,8 +462,8 @@ int TPpContext::eval(int token, int precedence, bool shortCircuit, int& res, boo
token = scanToken(ppToken);
}
} else {
int op;
for (op = NUM_ELEMENTS(unop) - 1; op >= 0; op--) {
int op = NUM_ELEMENTS(unop) - 1;
for (; op >= 0; op--) {
if (unop[op].token == token)
break;
}

View File

@ -175,7 +175,7 @@ void TPpContext::AddAtomFixed(const char* s, int atom)
void TPpContext::InitAtomTable()
{
// Add single character tokens to the atom table:
const char* s = "~!%^&*()-+=|,.<>/?;:[]{}#";
const char* s = "~!%^&*()-+=|,.<>/?;:[]{}#\\";
char t[2];
t[1] = '\0';