From d601921b71ed44835e8d4fa6f13ff7aefcf7649d Mon Sep 17 00:00:00 2001 From: Tim Foley Date: Wed, 28 Jun 2017 10:20:16 -0700 Subject: 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. --- source/slang/syntax.cpp | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'source/slang/syntax.cpp') diff --git a/source/slang/syntax.cpp b/source/slang/syntax.cpp index f78d3c8ec..6b9a74f7d 100644 --- a/source/slang/syntax.cpp +++ b/source/slang/syntax.cpp @@ -1397,6 +1397,11 @@ namespace Slang return sBuiltinTypes[(int)BaseType::Float].GetValue().Ptr(); } + ExpressionType* ExpressionType::getDoubleType() + { + return sBuiltinTypes[(int)BaseType::Double].GetValue().Ptr(); + } + ExpressionType* ExpressionType::GetInt() { return sBuiltinTypes[(int)BaseType::Int].GetValue().Ptr(); -- cgit v1.2.3