diff --git a/Upsilon/BaseTypes/Number/NumberLong.cs b/Upsilon/BaseTypes/Number/NumberLong.cs index 01a5364..e41686b 100644 --- a/Upsilon/BaseTypes/Number/NumberLong.cs +++ b/Upsilon/BaseTypes/Number/NumberLong.cs @@ -5,7 +5,7 @@ namespace Upsilon.BaseTypes.Number public class NumberLong : Number { public long Value { get; } - protected override bool IsFloat { get; } = true; + protected override bool IsFloat { get; } = false; public NumberLong(long val) { diff --git a/Upsilon/Binder/Binder.cs b/Upsilon/Binder/Binder.cs index f6dd792..76900c4 100644 --- a/Upsilon/Binder/Binder.cs +++ b/Upsilon/Binder/Binder.cs @@ -70,9 +70,13 @@ namespace Upsilon.Binder switch (value) { case double d: - type = Type.Number; + type = Type.Number; outValue = new NumberDouble(d); break; + case long l: + type = Type.Number; + outValue = new NumberLong(l); + break; case bool b: type = Type.Boolean; outValue = value; diff --git a/Upsilon/Parser/Lexer.cs b/Upsilon/Parser/Lexer.cs index 1bdc677..0741aa7 100644 --- a/Upsilon/Parser/Lexer.cs +++ b/Upsilon/Parser/Lexer.cs @@ -124,8 +124,13 @@ namespace Upsilon.Parser numStr.Append(Next); _position++; } - var i = double.Parse(numStr.ToString()); - return new SyntaxToken(SyntaxKind.Number, start, numStr.ToString(), i); + + object o; + if (hasDecimalPoint) + o = double.Parse(numStr.ToString()); + else + o = long.Parse(numStr.ToString()); + return new SyntaxToken(SyntaxKind.Number, start, numStr.ToString(), o); } private SyntaxToken LexIdentifierOrKeyword()