Example #1
0
        private bool TryParseNumber([NotNullWhen(true)] out ExpressionSyntax?literalSyntax)
        {
            literalSyntax = null;

            if (_lexer.PeekTokenType() == TokenType.Number)
            {
                var numberToken = ReadTokenIntoString();
                if (ulong.TryParse(numberToken, NumberStyles.None, CultureInfo.InvariantCulture,
                                   out var number))
                {
                    literalSyntax = new IntegerLiteralSyntax(number, _lexer.LastPosition);
                    return(true);
                }
                else
                {
                    _diagnosticSink.Add(DiagnosticCode.InvalidNumericLiteral, _lexer.LastPosition, numberToken);
                    return(false);
                }
            }
            else
            {
                _diagnosticSink.Add(DiagnosticCode.ExpectedExpression, _lexer.Position, ReadTokenIntoString());
                return(false);
            }
        }
Example #2
0
 public override void VisitIntegerLiteralSyntax(IntegerLiteralSyntax syntax)
 {
     // syntax.Value is always positive and can't be greater than the greatest 64 bit integer
     if (syntax.Value > long.MaxValue)
     {
         diagnosticWriter.Write(DiagnosticBuilder.ForPosition(syntax).InvalidInteger());
     }
     base.VisitIntegerLiteralSyntax(syntax);
 }
Example #3
0
        public void Integer_literal_that_is_too_large_fails()
        {
            var position     = new TextPosition(10, 3, 4);
            var syntax       = new IntegerLiteralSyntax((ulong)int.MaxValue + 1, position);
            var method       = new CompiledMethod("Test::Method");
            var builder      = new BasicBlockGraphBuilder().GetInitialBlockBuilder();
            var nameResolver = new TestingResolver(new ScopedVariableMap());
            var diagnostics  = new TestingDiagnosticSink();

            var localIndex = ExpressionCompiler.TryCompileExpression(
                syntax, SimpleType.Int32, method, builder, nameResolver, diagnostics);

            Assert.That(localIndex, Is.EqualTo(-1));
            diagnostics.AssertDiagnosticAt(DiagnosticCode.TypeMismatch, position)
            .WithActual("uint32").WithExpected("int32");
        }
 public virtual void VisitIntegerLiteral(IntegerLiteralSyntax node)
 {
 }