Re-allow non-language characters in ES 100 comments, including '\', except for '\' just before a new line.
git-svn-id: https://cvs.khronos.org/svn/repos/ogl/trunk/ecosystem/public/sdk/tools/glslang@24331 e7fa87d3-cd2b-0410-9028-fcbf551c1848
This commit is contained in:
parent
34bd4fbef7
commit
e1f0f5b31f
11 changed files with 56 additions and 91 deletions
|
|
@ -188,7 +188,7 @@ int TPpContext::CPPdefine(TPpToken* ppToken)
|
|||
if (token == '\\') {
|
||||
parseContext.lineContinuationCheck(ppToken->loc);
|
||||
token = currentInput->scan(this, currentInput, ppToken);
|
||||
if (token == '\n')
|
||||
if (token == '\n' || token == '\r')
|
||||
token = currentInput->scan(this, currentInput, ppToken);
|
||||
}
|
||||
RecordToken(mac.body, token, ppToken);
|
||||
|
|
|
|||
|
|
@ -93,46 +93,48 @@ TPpContext::TPpContext(TParseContext& pc) :
|
|||
for (elsetracker = 0; elsetracker < maxIfNesting; elsetracker++)
|
||||
elseSeen[elsetracker] = false;
|
||||
elsetracker = 0;
|
||||
|
||||
// The following identifies all legal characters in GLSL:
|
||||
|
||||
for (int c = 0; c < 256; ++c)
|
||||
languageCharacters[c] = false;
|
||||
for (int c = 'a'; c <= 'z'; ++c)
|
||||
languageCharacters[c] = true;
|
||||
for (int c = 'A'; c <= 'Z'; ++c)
|
||||
languageCharacters[c] = true;
|
||||
languageCharacters['_'] = true;
|
||||
for (int c = '0'; c <= '9'; ++c)
|
||||
languageCharacters[c] = true;
|
||||
languageCharacters['.'] = true;
|
||||
languageCharacters['+'] = true;
|
||||
languageCharacters['-'] = true;
|
||||
languageCharacters['/'] = true;
|
||||
languageCharacters['*'] = true;
|
||||
languageCharacters['%'] = true;
|
||||
languageCharacters['<'] = true;
|
||||
languageCharacters['>'] = true;
|
||||
languageCharacters['['] = true;
|
||||
languageCharacters[']'] = true;
|
||||
languageCharacters['('] = true;
|
||||
languageCharacters[')'] = true;
|
||||
languageCharacters['{'] = true;
|
||||
languageCharacters['}'] = true;
|
||||
languageCharacters['^'] = true;
|
||||
languageCharacters['|'] = true;
|
||||
languageCharacters['&'] = true;
|
||||
languageCharacters['~'] = true;
|
||||
languageCharacters['='] = true;
|
||||
languageCharacters['!'] = true;
|
||||
languageCharacters[':'] = true;
|
||||
languageCharacters[';'] = true;
|
||||
languageCharacters[','] = true;
|
||||
languageCharacters['?'] = true;
|
||||
languageCharacters['#'] = true;
|
||||
//for (int c = 0; c < 256; ++c)
|
||||
// languageCharacters[c] = false;
|
||||
//for (int c = 'a'; c <= 'z'; ++c)
|
||||
// languageCharacters[c] = true;
|
||||
//for (int c = 'A'; c <= 'Z'; ++c)
|
||||
// languageCharacters[c] = true;
|
||||
//languageCharacters['_'] = true;
|
||||
//for (int c = '0'; c <= '9'; ++c)
|
||||
// languageCharacters[c] = true;
|
||||
//languageCharacters['.'] = true;
|
||||
//languageCharacters['+'] = true;
|
||||
//languageCharacters['-'] = true;
|
||||
//languageCharacters['/'] = true;
|
||||
//languageCharacters['*'] = true;
|
||||
//languageCharacters['%'] = true;
|
||||
//languageCharacters['<'] = true;
|
||||
//languageCharacters['>'] = true;
|
||||
//languageCharacters['['] = true;
|
||||
//languageCharacters[']'] = true;
|
||||
//languageCharacters['('] = true;
|
||||
//languageCharacters[')'] = true;
|
||||
//languageCharacters['{'] = true;
|
||||
//languageCharacters['}'] = true;
|
||||
//languageCharacters['^'] = true;
|
||||
//languageCharacters['|'] = true;
|
||||
//languageCharacters['&'] = true;
|
||||
//languageCharacters['~'] = true;
|
||||
//languageCharacters['='] = true;
|
||||
//languageCharacters['!'] = true;
|
||||
//languageCharacters[':'] = true;
|
||||
//languageCharacters[';'] = true;
|
||||
//languageCharacters[','] = true;
|
||||
//languageCharacters['?'] = true;
|
||||
//languageCharacters['#'] = true;
|
||||
|
||||
// white space
|
||||
languageCharacters[' '] = true;
|
||||
for (int c = 9; c <= 13; ++c)
|
||||
languageCharacters[c] = true;
|
||||
//// white space
|
||||
//languageCharacters[' '] = true;
|
||||
//for (int c = 9; c <= 13; ++c)
|
||||
// languageCharacters[c] = true;
|
||||
}
|
||||
|
||||
TPpContext::~TPpContext()
|
||||
|
|
|
|||
|
|
@ -209,8 +209,6 @@ protected:
|
|||
InputSrc *currentInput;
|
||||
bool errorOnVersion;
|
||||
|
||||
bool languageCharacters[256];
|
||||
|
||||
//
|
||||
// from Pp.cpp
|
||||
//
|
||||
|
|
|
|||
|
|
@ -638,17 +638,16 @@ int TPpContext::sourceScan(TPpContext* pp, InputSrc*, TPpToken* ppToken)
|
|||
ch = pp->currentInput->getch(pp, pp->currentInput, ppToken);
|
||||
if (ch == '\\') {
|
||||
// allow an escaped newline, otherwise escapes in comments are meaningless
|
||||
pp->parseContext.lineContinuationCheck(ppToken->loc);
|
||||
ch = pp->currentInput->getch(pp, pp->currentInput, ppToken);
|
||||
if (ch == '\r' || ch == '\n') {
|
||||
pp->parseContext.lineContinuationCheck(ppToken->loc);
|
||||
int nextch = pp->currentInput->getch(pp, pp->currentInput, ppToken);
|
||||
if (ch == '\r' && nextch == '\n')
|
||||
ch = pp->currentInput->getch(pp, pp->currentInput, ppToken);
|
||||
else
|
||||
ch = nextch;
|
||||
}
|
||||
} else if (ch > 0 && ! pp->languageCharacters[ch])
|
||||
pp->parseContext.commentCharacterCheck(ppToken->loc, ch);
|
||||
}
|
||||
} while (ch != '\n' && ch != EOF);
|
||||
if (ch == EOF)
|
||||
return EOF;
|
||||
|
|
@ -664,8 +663,7 @@ int TPpContext::sourceScan(TPpContext* pp, InputSrc*, TPpToken* ppToken)
|
|||
pp->parseContext.error(ppToken->loc, "EOF in comment", "comment", "");
|
||||
|
||||
return EOF;
|
||||
} else if (! pp->languageCharacters[ch])
|
||||
pp->parseContext.commentCharacterCheck(ppToken->loc, ch);
|
||||
}
|
||||
ch = pp->currentInput->getch(pp, pp->currentInput, ppToken);
|
||||
}
|
||||
ch = pp->currentInput->getch(pp, pp->currentInput, ppToken);
|
||||
|
|
@ -673,8 +671,7 @@ int TPpContext::sourceScan(TPpContext* pp, InputSrc*, TPpToken* ppToken)
|
|||
pp->parseContext.error(ppToken->loc, "EOF in comment", "comment", "");
|
||||
|
||||
return EOF;
|
||||
} else if (! pp->languageCharacters[ch])
|
||||
pp->parseContext.commentCharacterCheck(ppToken->loc, ch);
|
||||
}
|
||||
} while (ch != '/');
|
||||
if (nlcount)
|
||||
return '\n';
|
||||
|
|
@ -692,9 +689,8 @@ int TPpContext::sourceScan(TPpContext* pp, InputSrc*, TPpToken* ppToken)
|
|||
if (ch == '\\') {
|
||||
pp->parseContext.lineContinuationCheck(ppToken->loc);
|
||||
ch = pp->currentInput->getch(pp, pp->currentInput, ppToken);
|
||||
if (ch == '\n' || ch == EOF) {
|
||||
if (ch == '\n' || ch == '\r' || ch == EOF)
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (len < TPpToken::maxTokenLength) {
|
||||
tokenText[len] = ch;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue