未验证 提交 5d717b5e 编写于 作者: T Tomáš Matoušek 提交者: GitHub

Keep the version of languages used in EE current (#32799)

上级 606f9468
......@@ -340,6 +340,8 @@ public static LanguageVersion MapSpecifiedToEffectiveVersion(this LanguageVersio
}
}
internal static LanguageVersion CurrentVersion => LanguageVersion.CSharp8;
/// <summary>Inference of tuple element names was added in C# 7.1</summary>
internal static bool DisallowInferredTupleElementNames(this LanguageVersion self)
{
......
......@@ -8,13 +8,13 @@ public partial class CSharpSyntaxTree
{
private class DebuggerSyntaxTree : ParsedSyntaxTree
{
public DebuggerSyntaxTree(CSharpSyntaxNode root, SourceText text)
public DebuggerSyntaxTree(CSharpSyntaxNode root, SourceText text, CSharpParseOptions options)
: base(
text,
text.Encoding,
text.ChecksumAlgorithm,
path: "",
options: CSharpParseOptions.Default,
options: options,
root: root,
directives: Syntax.InternalSyntax.DirectiveStack.Empty)
{
......
......@@ -327,11 +327,11 @@ public static SyntaxTree Create(CSharpSyntaxNode root, CSharpParseOptions option
/// Creates a new syntax tree from a syntax node with text that should correspond to the syntax node.
/// </summary>
/// <remarks>This is used by the ExpressionEvaluator.</remarks>
internal static SyntaxTree CreateForDebugger(CSharpSyntaxNode root, SourceText text)
internal static SyntaxTree CreateForDebugger(CSharpSyntaxNode root, SourceText text, CSharpParseOptions options)
{
Debug.Assert(root != null);
return new DebuggerSyntaxTree(root, text);
return new DebuggerSyntaxTree(root, text, options);
}
/// <summary>
......
......@@ -3,6 +3,7 @@
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Linq;
using Microsoft.CodeAnalysis.CSharp.Test.Utilities;
using Roslyn.Test.Utilities;
using Xunit;
......
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Linq;
using Xunit;
namespace Microsoft.CodeAnalysis.CSharp.UnitTests
{
public class LanguageVersionTests
{
[Fact]
public void CurrentVersion()
{
var highest = Enum.
GetValues(typeof(LanguageVersion)).
Cast<LanguageVersion>().
Where(x => x != LanguageVersion.Latest).
Max();
Assert.Equal(LanguageVersionFacts.CurrentVersion, highest);
}
}
}
......@@ -89,6 +89,12 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
End Select
End Function
Friend ReadOnly Property CurrentVersion As LanguageVersion
Get
Return LanguageVersion.VisualBasic16
End Get
End Property
''' <summary>
''' Displays the version number in the format understood on the command-line (/langver flag).
''' For instance, "9", "15", "latest".
......
' Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
Public Class LanguageVersionTests
<Fact>
Public Sub CurrentVersion()
Dim highest = System.Enum.
GetValues(GetType(LanguageVersion)).
Cast(Of LanguageVersion).
Where(Function(x) x <> LanguageVersion.Latest).
Max()
Assert.Equal(LanguageVersionFacts.CurrentVersion, highest)
End Sub
End Class
......@@ -13,6 +13,8 @@ namespace Microsoft.CodeAnalysis.CSharp.ExpressionEvaluator
{
internal static class SyntaxHelpers
{
internal static readonly CSharpParseOptions ParseOptions = CSharpParseOptions.Default.WithLanguageVersion(LanguageVersionFacts.CurrentVersion);
/// <summary>
/// Parse expression. Returns null if there are any errors.
/// </summary>
......@@ -195,11 +197,9 @@ private static ExpressionSyntax ParseDebuggerExpression(string text, bool consum
return expression.MakeDebuggerExpression(source);
}
static readonly CSharpParseOptions s_CSharpParseOptions = CSharpParseOptions.Default.WithLanguageVersion(LanguageVersion.Latest);
private static InternalSyntax.ExpressionSyntax ParseDebuggerExpressionInternal(SourceText source, bool consumeFullText)
{
using (var lexer = new InternalSyntax.Lexer(source, s_CSharpParseOptions, allowPreprocessorDirectives: false))
using (var lexer = new InternalSyntax.Lexer(source, ParseOptions, allowPreprocessorDirectives: false))
{
using (var parser = new InternalSyntax.LanguageParser(lexer, oldTree: null, changes: null, lexerMode: InternalSyntax.LexerMode.DebuggerSyntax))
{
......@@ -213,7 +213,7 @@ private static InternalSyntax.ExpressionSyntax ParseDebuggerExpressionInternal(S
private static StatementSyntax ParseDebuggerStatement(string text)
{
var source = SourceText.From(text);
using (var lexer = new InternalSyntax.Lexer(source, s_CSharpParseOptions))
using (var lexer = new InternalSyntax.Lexer(source, ParseOptions))
{
using (var parser = new InternalSyntax.LanguageParser(lexer, oldTree: null, changes: null, lexerMode: InternalSyntax.LexerMode.DebuggerSyntax))
{
......@@ -226,7 +226,7 @@ private static StatementSyntax ParseDebuggerStatement(string text)
private static SyntaxTree CreateSyntaxTree(this InternalSyntax.CSharpSyntaxNode root, SourceText text)
{
return CSharpSyntaxTree.CreateForDebugger((CSharpSyntaxNode)root.CreateRed(), text);
return CSharpSyntaxTree.CreateForDebugger((CSharpSyntaxNode)root.CreateRed(), text, ParseOptions);
}
private static ExpressionSyntax MakeDebuggerExpression(this InternalSyntax.ExpressionSyntax expression, SourceText text)
......
......@@ -304,10 +304,9 @@ internal static (Guid ModuleVersionId, ISymUnmanagedReader SymReader, int Method
string methodName,
string expr,
int atLineNumber = -1,
bool includeSymbols = true,
LanguageVersion langVersion = LanguageVersion.Default)
bool includeSymbols = true)
{
var result = Evaluate(source, outputKind, methodName, expr, out _, out string error, atLineNumber, includeSymbols, langVersion);
var result = Evaluate(source, outputKind, methodName, expr, out _, out string error, atLineNumber, includeSymbols);
Assert.Null(error);
return result;
}
......@@ -332,12 +331,11 @@ internal static (Guid ModuleVersionId, ISymUnmanagedReader SymReader, int Method
out ResultProperties resultProperties,
out string error,
int atLineNumber = -1,
bool includeSymbols = true,
LanguageVersion langVersion = LanguageVersion.Default)
bool includeSymbols = true)
{
var compilation = CreateCompilation(
source,
parseOptions: CSharpParseOptions.Default.WithLanguageVersion(langVersion),
parseOptions: SyntaxHelpers.ParseOptions,
options: (outputKind == OutputKind.DynamicallyLinkedLibrary) ? TestOptions.DebugDll : TestOptions.DebugExe);
return Evaluate(compilation, methodName, expr, out resultProperties, out error, atLineNumber, includeSymbols);
......
......@@ -6685,8 +6685,7 @@ .locals init (System.Guid V_0)
}");
}
[Fact(Skip = "https://github.com/dotnet/roslyn/issues/30436")]
[WorkItem(30436, "https://github.com/dotnet/roslyn/issues/30436")]
[Fact]
public void IndexExpression()
{
var source = TestSources.Index + @"
......@@ -6697,8 +6696,7 @@ static void Main()
var x = ^1;
}
}";
var langVersion = LanguageVersion.CSharp8;
Evaluate(source, OutputKind.ConsoleApplication, "C.Main", "x", langVersion: langVersion).GetMethodData("<>x.<>m0").VerifyIL(
Evaluate(source, OutputKind.ConsoleApplication, "C.Main", "x").GetMethodData("<>x.<>m0").VerifyIL(
@"{
// Code size 2 (0x2)
.maxstack 1
......@@ -6707,7 +6705,7 @@ .maxstack 1
IL_0001: ret
}");
Evaluate(source, OutputKind.ConsoleApplication, "C.Main", "x.Value", langVersion: langVersion).GetMethodData("<>x.<>m0").VerifyIL(
Evaluate(source, OutputKind.ConsoleApplication, "C.Main", "x.Value").GetMethodData("<>x.<>m0").VerifyIL(
@"{
// Code size 8 (0x8)
.maxstack 1
......@@ -6717,7 +6715,7 @@ .maxstack 1
IL_0007: ret
}");
Evaluate(source, OutputKind.ConsoleApplication, "C.Main", "^2", langVersion: langVersion).GetMethodData("<>x.<>m0").VerifyIL(
Evaluate(source, OutputKind.ConsoleApplication, "C.Main", "^2").GetMethodData("<>x.<>m0").VerifyIL(
@"{
// Code size 8 (0x8)
.maxstack 2
......@@ -6729,8 +6727,7 @@ .maxstack 2
}");
}
[Fact(Skip = "https://github.com/dotnet/roslyn/issues/30436")]
[WorkItem(30436, "https://github.com/dotnet/roslyn/issues/30436")]
[Fact]
public void RangeExpression_None()
{
var source = TestSources.Index + TestSources.Range + @"
......@@ -6741,8 +6738,7 @@ static void Main()
var x = ..;
}
}";
var langVersion = LanguageVersion.CSharp8;
Evaluate(source, OutputKind.ConsoleApplication, "C.Main", "x", langVersion: langVersion).GetMethodData("<>x.<>m0").VerifyIL(
Evaluate(source, OutputKind.ConsoleApplication, "C.Main", "x").GetMethodData("<>x.<>m0").VerifyIL(
@"{
// Code size 2 (0x2)
.maxstack 1
......@@ -6751,7 +6747,7 @@ .maxstack 1
IL_0001: ret
}");
Evaluate(source, OutputKind.ConsoleApplication, "C.Main", "x.Start.Value", langVersion: langVersion).GetMethodData("<>x.<>m0").VerifyIL(
Evaluate(source, OutputKind.ConsoleApplication, "C.Main", "x.Start.Value").GetMethodData("<>x.<>m0").VerifyIL(
@"{
// Code size 16 (0x10)
.maxstack 1
......@@ -6765,7 +6761,7 @@ .maxstack 1
IL_000f: ret
}");
Evaluate(source, OutputKind.ConsoleApplication, "C.Main", "..", langVersion: langVersion).GetMethodData("<>x.<>m0").VerifyIL(
Evaluate(source, OutputKind.ConsoleApplication, "C.Main", "..").GetMethodData("<>x.<>m0").VerifyIL(
@"{
// Code size 6 (0x6)
.maxstack 1
......@@ -6775,8 +6771,7 @@ .maxstack 1
}");
}
[Fact(Skip = "https://github.com/dotnet/roslyn/issues/30436")]
[WorkItem(30436, "https://github.com/dotnet/roslyn/issues/30436")]
[Fact]
public void RangeExpression_Left()
{
var source = TestSources.Index + TestSources.Range + @"
......@@ -6787,8 +6782,7 @@ static void Main()
var x = 1..;
}
}";
var langVersion = LanguageVersion.CSharp8;
Evaluate(source, OutputKind.ConsoleApplication, "C.Main", "x", langVersion: langVersion).GetMethodData("<>x.<>m0").VerifyIL(
Evaluate(source, OutputKind.ConsoleApplication, "C.Main", "x").GetMethodData("<>x.<>m0").VerifyIL(
@"{
// Code size 2 (0x2)
.maxstack 1
......@@ -6797,7 +6791,7 @@ .maxstack 1
IL_0001: ret
}");
Evaluate(source, OutputKind.ConsoleApplication, "C.Main", "x.Start.Value", langVersion: langVersion).GetMethodData("<>x.<>m0").VerifyIL(
Evaluate(source, OutputKind.ConsoleApplication, "C.Main", "x.Start.Value").GetMethodData("<>x.<>m0").VerifyIL(
@"{
// Code size 16 (0x10)
.maxstack 1
......@@ -6811,7 +6805,7 @@ .maxstack 1
IL_000f: ret
}");
Evaluate(source, OutputKind.ConsoleApplication, "C.Main", "2..", langVersion: langVersion).GetMethodData("<>x.<>m0").VerifyIL(
Evaluate(source, OutputKind.ConsoleApplication, "C.Main", "2..").GetMethodData("<>x.<>m0").VerifyIL(
@"{
// Code size 12 (0xc)
.maxstack 1
......@@ -6823,8 +6817,7 @@ .maxstack 1
}");
}
[Fact(Skip = "https://github.com/dotnet/roslyn/issues/30436")]
[WorkItem(30436, "https://github.com/dotnet/roslyn/issues/30436")]
[Fact]
public void RangeExpression_Right()
{
var source = TestSources.Index + TestSources.Range + @"
......@@ -6835,8 +6828,7 @@ static void Main()
var x = ..1;
}
}";
var langVersion = LanguageVersion.CSharp8;
Evaluate(source, OutputKind.ConsoleApplication, "C.Main", "x", langVersion: langVersion).GetMethodData("<>x.<>m0").VerifyIL(
Evaluate(source, OutputKind.ConsoleApplication, "C.Main", "x").GetMethodData("<>x.<>m0").VerifyIL(
@"{
// Code size 2 (0x2)
.maxstack 1
......@@ -6845,7 +6837,7 @@ .maxstack 1
IL_0001: ret
}");
Evaluate(source, OutputKind.ConsoleApplication, "C.Main", "x.Start.Value", langVersion: langVersion).GetMethodData("<>x.<>m0").VerifyIL(
Evaluate(source, OutputKind.ConsoleApplication, "C.Main", "x.Start.Value").GetMethodData("<>x.<>m0").VerifyIL(
@"{
// Code size 16 (0x10)
.maxstack 1
......@@ -6859,7 +6851,7 @@ .maxstack 1
IL_000f: ret
}");
Evaluate(source, OutputKind.ConsoleApplication, "C.Main", "..2", langVersion: langVersion).GetMethodData("<>x.<>m0").VerifyIL(
Evaluate(source, OutputKind.ConsoleApplication, "C.Main", "..2").GetMethodData("<>x.<>m0").VerifyIL(
@"{
// Code size 12 (0xc)
.maxstack 1
......@@ -6871,8 +6863,7 @@ .maxstack 1
}");
}
[Fact(Skip = "https://github.com/dotnet/roslyn/issues/30436")]
[WorkItem(30436, "https://github.com/dotnet/roslyn/issues/30436")]
[Fact]
public void RangeExpression_Both()
{
var source = TestSources.Index + TestSources.Range + @"
......@@ -6883,8 +6874,7 @@ static void Main()
var x = 1..2;
}
}";
var langVersion = LanguageVersion.CSharp8;
Evaluate(source, OutputKind.ConsoleApplication, "C.Main", "x", langVersion: langVersion).GetMethodData("<>x.<>m0").VerifyIL(
Evaluate(source, OutputKind.ConsoleApplication, "C.Main", "x").GetMethodData("<>x.<>m0").VerifyIL(
@"{
// Code size 2 (0x2)
.maxstack 1
......@@ -6893,7 +6883,7 @@ .maxstack 1
IL_0001: ret
}");
Evaluate(source, OutputKind.ConsoleApplication, "C.Main", "x.Start.Value", langVersion: langVersion).GetMethodData("<>x.<>m0").VerifyIL(
Evaluate(source, OutputKind.ConsoleApplication, "C.Main", "x.Start.Value").GetMethodData("<>x.<>m0").VerifyIL(
@"{
// Code size 16 (0x10)
.maxstack 1
......@@ -6907,7 +6897,7 @@ .maxstack 1
IL_000f: ret
}");
Evaluate(source, OutputKind.ConsoleApplication, "C.Main", "3..4", langVersion: langVersion).GetMethodData("<>x.<>m0").VerifyIL(
Evaluate(source, OutputKind.ConsoleApplication, "C.Main", "3..4").GetMethodData("<>x.<>m0").VerifyIL(
@"{
// Code size 18 (0x12)
.maxstack 2
......
......@@ -10,6 +10,8 @@ Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
Namespace Microsoft.CodeAnalysis.VisualBasic.ExpressionEvaluator
Friend Module SyntaxHelpers
Friend ReadOnly ParseOptions As VisualBasicParseOptions = VisualBasicParseOptions.Default.WithLanguageVersion(LanguageVersionFacts.CurrentVersion)
''' <summary>
''' Parse expression. Returns null if there are any errors.
''' </summary>
......@@ -152,7 +154,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.ExpressionEvaluator
End Function
Private Function ParseDebuggerExpressionInternal(source As SourceText, consumeFullText As Boolean) As InternalSyntax.ExpressionSyntax
Using scanner As New InternalSyntax.Scanner(source, VisualBasicParseOptions.Default, isScanningForExpressionCompiler:=True) ' NOTE: Default options should be enough
Using scanner As New InternalSyntax.Scanner(source, ParseOptions, isScanningForExpressionCompiler:=True) ' NOTE: Default options should be enough
Using p = New InternalSyntax.Parser(scanner)
p.GetNextToken()
Dim node = p.ParseExpression()
......@@ -163,7 +165,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.ExpressionEvaluator
End Function
Private Function ParseDebuggerStatement(text As String) As StatementSyntax
Using scanner As New InternalSyntax.Scanner(SourceText.From(text), VisualBasicParseOptions.Default, isScanningForExpressionCompiler:=True) ' NOTE: Default options should be enough
Using scanner As New InternalSyntax.Scanner(SourceText.From(text), ParseOptions, isScanningForExpressionCompiler:=True) ' NOTE: Default options should be enough
Using p = New InternalSyntax.Parser(scanner)
p.GetNextToken()
Dim node = p.ParseStatementInMethodBody()
......@@ -176,7 +178,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.ExpressionEvaluator
<Extension>
Private Function CreateSyntaxTree(root As InternalSyntax.VisualBasicSyntaxNode) As SyntaxTree
Return VisualBasicSyntaxTree.Create(DirectCast(root.CreateRed(Nothing, 0), VisualBasicSyntaxNode))
Return VisualBasicSyntaxTree.Create(DirectCast(root.CreateRed(Nothing, 0), VisualBasicSyntaxNode), ParseOptions)
End Function
<Extension>
......
......@@ -317,7 +317,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.ExpressionEvaluator.UnitTests
Optional includeSymbols As Boolean = True) As CompilationTestData
Dim compilation0 = CreateEmptyCompilationWithReferences(
{Parse(source)},
{Parse(source, SyntaxHelpers.ParseOptions)},
{MscorlibRef_v4_0_30316_17626, SystemRef, MsvbRef},
options:=If(outputKind = OutputKind.DynamicallyLinkedLibrary, TestOptions.DebugDll, TestOptions.DebugExe))
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册