summaryrefslogtreecommitdiff
path: root/source/slang/lexer.h
diff options
context:
space:
mode:
authorTim Foley <tfoley@nvidia.com>2017-06-28 10:20:16 -0700
committerTim Foley <tfoley@nvidia.com>2017-06-28 11:08:03 -0700
commitd601921b71ed44835e8d4fa6f13ff7aefcf7649d (patch)
tree79b9227ef038d173d780a440035e616dc31104bb /source/slang/lexer.h
parent4b3936e2983dcecd36a3437bd6c7eef8d5fbbffa (diff)
Actually respect suffixes on numeric literals.
- Add logic to extract the value and suffix from a numeric literal - This duplicates some of the lexing logic, but this is hard to avoid without redundant runtime work - Note that I'm not using and stdlib string-to-number code. This should be more robust once it is working, but it is obviously error prone in the near term. The main up-sides to this are: - We can handle binary integer literals - We can handle hexadecimal floating-point literals without stdlib support - We can hypothetically support digit separators, if we ever wanted - The parser looks at the suffix characters sliced off by the lexer, and tries to pick a type to use for a literal - It uses `NULL` if there is no suffix, to avoid some nasty order dependencies where the stdlib might need to parse a number before it has seen the definition of `int` - Right now I only handle a few cases, so there may be bugs lurking here - The emit logic needs to handle the fact that a literal node in the AST might have a non-default type attached. - Right now I just quickly check for the most likely types, and emit the literal with a matching suffix. This doesn't seem robust if any source language supports a suffix for a type where a target has no corresponding suffix. In the long term some amount of casting is probably required.
Diffstat (limited to 'source/slang/lexer.h')
-rw-r--r--source/slang/lexer.h6
1 files changed, 6 insertions, 0 deletions
diff --git a/source/slang/lexer.h b/source/slang/lexer.h
index 5bcfc0f4a..53bfc0999 100644
--- a/source/slang/lexer.h
+++ b/source/slang/lexer.h
@@ -91,6 +91,12 @@ namespace Slang
// Helper routines for extracting values from tokens
String getStringLiteralTokenValue(Token const& token);
String getFileNameTokenValue(Token const& token);
+
+ typedef unsigned long long IntegerLiteralValue;
+ typedef double FloatingPointLiteralValue;
+
+ IntegerLiteralValue getIntegerLiteralValue(Token const& token, String* outSuffix = 0);
+ FloatingPointLiteralValue getFloatingPointLiteralValue(Token const& token, String* outSuffix = 0);
}
#endif \ No newline at end of file