summaryrefslogtreecommitdiffstats
path: root/source/slang/lexer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/lexer.cpp')
-rw-r--r--source/slang/lexer.cpp59
1 files changed, 16 insertions, 43 deletions
diff --git a/source/slang/lexer.cpp b/source/slang/lexer.cpp
index 5e6d15384..9ea86cc82 100644
--- a/source/slang/lexer.cpp
+++ b/source/slang/lexer.cpp
@@ -393,55 +393,28 @@ namespace Slang
static TokenType maybeLexNumberSuffix(Lexer* lexer, TokenType tokenType)
{
- // First check for suffixes that
- // indicate a floating-point number
- switch(peek(lexer))
- {
- case 'f': case 'F':
- advance(lexer);
- return TokenType::FloatingPointLiteral;
-
- default:
- break;
- }
-
- // Once we've ruled out floating-point
- // suffixes, we can check for the inter cases
-
- // TODO: allow integer suffixes in any order...
-
- // Leading `u` or `U` for unsigned
- switch(peek(lexer))
- {
- default:
- break;
-
- case 'u': case 'U':
- advance(lexer);
- break;
- }
-
- // Optional `l`, `L`, `ll`, or `LL`
- switch(peek(lexer))
+ // Be liberal in what we accept here, so that figuring out
+ // the semantics of a numeric suffix is left up to the parser
+ // and semantic checking logic.
+ //
+ for( ;;)
{
- default:
- break;
+ int c = peek(lexer);
- case 'l': case 'L':
- advance(lexer);
- switch(peek(lexer))
+ // Accept any alphanumeric character, plus underscores.
+ if(('a' <= c ) && (c <= 'z')
+ || ('A' <= c) && (c <= 'Z')
+ || ('0' <= c) && (c <= '9')
+ || (c == '_'))
{
- default:
- break;
-
- case 'l': case 'L':
advance(lexer);
- break;
+ continue;
}
- break;
- }
- return tokenType;
+ // Stop at the first character that isn't
+ // alphanumeric.
+ return tokenType;
+ }
}
static bool isNumberExponent(int c, int base)