mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-01-16 19:19:56 +00:00
replaced context-sensitive implementation of allowing digits at the beginning of names with a more general implementation (Fixes #1730)
This commit is contained in:
parent
c693656307
commit
4d94f38f4b
3 changed files with 22 additions and 21 deletions
|
@ -63,7 +63,6 @@ namespace Compiler
|
|||
if (mState==BeginState && keyword==Scanner::K_begin)
|
||||
{
|
||||
mState = NameState;
|
||||
scanner.allowNameStartingwithDigit();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -110,7 +109,6 @@ namespace Compiler
|
|||
scanner.scan (mScriptParser);
|
||||
|
||||
mState = EndNameState;
|
||||
scanner.allowNameStartingwithDigit();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -47,9 +47,6 @@ namespace Compiler
|
|||
|
||||
bool Scanner::scanToken (Parser& parser)
|
||||
{
|
||||
bool allowDigit = mNameStartingWithDigit;
|
||||
mNameStartingWithDigit = false;
|
||||
|
||||
switch (mPutback)
|
||||
{
|
||||
case Putback_Special:
|
||||
|
@ -114,7 +111,6 @@ namespace Compiler
|
|||
else if (isWhitespace (c))
|
||||
{
|
||||
mLoc.mLiteral.clear();
|
||||
mNameStartingWithDigit = allowDigit;
|
||||
return true;
|
||||
}
|
||||
else if (c==':')
|
||||
|
@ -123,7 +119,7 @@ namespace Compiler
|
|||
mLoc.mLiteral.clear();
|
||||
return true;
|
||||
}
|
||||
else if (std::isalpha (c) || c=='_' || c=='"' || (allowDigit && std::isdigit (c)))
|
||||
else if (std::isalpha (c) || c=='_' || c=='"')
|
||||
{
|
||||
bool cont = false;
|
||||
|
||||
|
@ -179,10 +175,18 @@ namespace Compiler
|
|||
{
|
||||
value += c;
|
||||
}
|
||||
else if (std::isalpha (c) || c=='_')
|
||||
error = true;
|
||||
else if (c=='.' && !error)
|
||||
else if (isStringCharacter (c))
|
||||
{
|
||||
error = true;
|
||||
value += c;
|
||||
}
|
||||
else if (c=='.')
|
||||
{
|
||||
if (error)
|
||||
{
|
||||
putback (c);
|
||||
break;
|
||||
}
|
||||
return scanFloat (value, parser, cont);
|
||||
}
|
||||
else
|
||||
|
@ -193,7 +197,15 @@ namespace Compiler
|
|||
}
|
||||
|
||||
if (error)
|
||||
return false;
|
||||
{
|
||||
/// workaround that allows names to begin with digits
|
||||
/// \todo disable
|
||||
TokenLoc loc (mLoc);
|
||||
mLoc.mLiteral.clear();
|
||||
cont = parser.parseName (value, loc, *this);
|
||||
return true;
|
||||
// return false;
|
||||
}
|
||||
|
||||
TokenLoc loc (mLoc);
|
||||
mLoc.mLiteral.clear();
|
||||
|
@ -555,8 +567,7 @@ namespace Compiler
|
|||
Scanner::Scanner (ErrorHandler& errorHandler, std::istream& inputStream,
|
||||
const Extensions *extensions)
|
||||
: mErrorHandler (errorHandler), mStream (inputStream), mExtensions (extensions),
|
||||
mPutback (Putback_None), mPutbackCode(0), mPutbackInteger(0), mPutbackFloat(0),
|
||||
mNameStartingWithDigit (false)
|
||||
mPutback (Putback_None), mPutbackCode(0), mPutbackInteger(0), mPutbackFloat(0)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -608,9 +619,4 @@ namespace Compiler
|
|||
if (mExtensions)
|
||||
mExtensions->listKeywords (keywords);
|
||||
}
|
||||
|
||||
void Scanner::allowNameStartingwithDigit()
|
||||
{
|
||||
mNameStartingWithDigit = true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -124,9 +124,6 @@ namespace Compiler
|
|||
|
||||
void listKeywords (std::vector<std::string>& keywords);
|
||||
///< Append all known keywords to \a kaywords.
|
||||
|
||||
/// For the next token allow names to start with a digit.
|
||||
void allowNameStartingwithDigit();
|
||||
};
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue