replaced context-sensitive implementation of allowing digits at the beginning of names with a more general implementation (Fixes #1730)

pull/766/head
Marc Zinnschlag 9 years ago
parent c693656307
commit 4d94f38f4b

@ -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=='_')
else if (isStringCharacter (c))
{
error = true;
else if (c=='.' && !error)
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…
Cancel
Save