未验证 提交 d38b110b 编写于 作者: A AlekseyTs 提交者: GitHub

For tuple types, NamedTypeSymbol.GetFieldsToEmit API should return symbols for...

For tuple types, NamedTypeSymbol.GetFieldsToEmit API should return symbols for tuple underlying fields. (#43552)

Fixes #43524.
Related to #43549.

Also, ensure nested type is generated for a fixed size buffer declared within a tuple type.

Related to #43621.
上级 50fc72f1
......@@ -541,7 +541,8 @@ private void CompileNamedType(NamedTypeSymbol containingType)
case SymbolKind.Field:
{
FieldSymbol fieldSymbol = member as FieldSymbol;
var field = (FieldSymbol)member;
var fieldSymbol = (field.TupleUnderlyingField ?? field) as SourceMemberFieldSymbol;
if ((object)fieldSymbol != null)
{
if (fieldSymbol.IsConst)
......
......@@ -407,6 +407,7 @@ IEnumerable<Cci.IFieldDefinition> Cci.ITypeDefinition.GetFields(EmitContext cont
foreach (var f in GetFieldsToEmit())
{
Debug.Assert((object)(f.TupleUnderlyingField ?? f) == f);
if (isStruct || f.ShouldInclude(context))
{
yield return f;
......
......@@ -271,19 +271,26 @@ internal sealed override IEnumerable<Cci.INestedTypeDefinition> GetSynthesizedNe
break;
case SymbolKind.Property:
AddSymbolLocation(result, member);
break;
case SymbolKind.Field:
// NOTE: Dev11 does not add synthesized backing fields for properties,
// but adds backing fields for events, Roslyn adds both
AddSymbolLocation(result, member);
{
var field = (FieldSymbol)member;
AddSymbolLocation(result, field.TupleUnderlyingField ?? field);
}
break;
case SymbolKind.Event:
AddSymbolLocation(result, member);
// event backing fields do not show up in GetMembers
FieldSymbol field = ((EventSymbol)member).AssociatedField;
if ((object)field != null)
{
AddSymbolLocation(result, field);
FieldSymbol field = ((EventSymbol)member).AssociatedField;
if ((object)field != null)
{
AddSymbolLocation(result, field.TupleUnderlyingField ?? field);
}
}
break;
......@@ -1003,7 +1010,7 @@ internal static Cci.IGenericParameterReference Translate(TypeParameterSymbol par
bool needDeclaration = false)
{
Debug.Assert(fieldSymbol.IsDefinitionOrDistinct());
Debug.Assert(!fieldSymbol.IsVirtualTupleField, "virtual tuple fields should be rewritten to underlying by now");
Debug.Assert(!fieldSymbol.IsVirtualTupleField && (object)(fieldSymbol.TupleUnderlyingField ?? fieldSymbol) == fieldSymbol, "tuple fields should be rewritten to underlying by now");
if (!fieldSymbol.IsDefinition)
{
......
......@@ -878,7 +878,7 @@ internal override IEnumerable<FieldSymbol> GetFieldsToEmit()
else
{
// If there are any non-event fields, they are at the very beginning.
IEnumerable<FieldSymbol> nonEventFields = GetMembers<FieldSymbol>(this.GetMembers(), SymbolKind.Field, offset: 0);
IEnumerable<FieldSymbol> nonEventFields = GetMembers<FieldSymbol>(this.GetMembers(), SymbolKind.Field, offset: 0).Select(f => f.TupleUnderlyingField ?? f);
// Event backing fields are not part of the set returned by GetMembers. Let's add them manually.
ArrayBuilder<FieldSymbol> eventFields = null;
......@@ -889,6 +889,9 @@ internal override IEnumerable<FieldSymbol> GetFieldsToEmit()
if ((object)associatedField != null)
{
Debug.Assert((object)associatedField.AssociatedSymbol != null);
associatedField = associatedField.TupleUnderlyingField ?? associatedField;
Debug.Assert(!nonEventFields.Contains(associatedField));
if (eventFields == null)
......
......@@ -1279,13 +1279,14 @@ internal override IEnumerable<FieldSymbol> GetFieldsToEmit()
switch (m.Kind)
{
case SymbolKind.Field:
yield return (FieldSymbol)m;
var field = (FieldSymbol)m;
yield return field.TupleUnderlyingField ?? field;
break;
case SymbolKind.Event:
FieldSymbol associatedField = ((EventSymbol)m).AssociatedField;
if ((object)associatedField != null)
{
yield return associatedField;
yield return associatedField.TupleUnderlyingField ?? associatedField;
}
break;
}
......
......@@ -26462,6 +26462,7 @@ void verifyTupleTypeWithErrorUnderlyingType(CSharpCompilation compilation, bool
[Fact]
[WorkItem(41207, "https://github.com/dotnet/roslyn/issues/41207")]
[WorkItem(1056281, "https://dev.azure.com/devdiv/DevDiv/_workitems/edit/1056281")]
[WorkItem(43549, "https://github.com/dotnet/roslyn/issues/43549")]
public void CustomFields_01()
{
var source0 = @"
......@@ -26508,25 +26509,44 @@ public static void Main()
}
";
var comp1 = CreateCompilation(source0 + source1, targetFramework: TargetFramework.Mscorlib46, options: TestOptions.DebugExe);
var comp1 = CreateCompilation(source0 + source1, targetFramework: TargetFramework.Mscorlib40, options: TestOptions.DebugExe);
CompileAndVerify(comp1, expectedOutput: "123");
verifyField(comp1);
var comp1Ref = new[] { comp1.ToMetadataReference() };
var comp1ImageRef = new[] { comp1.EmitToImageReference() };
var comp4 = CreateCompilation(source0 + source2, targetFramework: TargetFramework.Mscorlib46, options: TestOptions.DebugExe);
var comp4 = CreateCompilation(source0 + source2, targetFramework: TargetFramework.Mscorlib40, options: TestOptions.DebugExe);
CompileAndVerify(comp4, expectedOutput: "123");
var comp5 = CreateCompilation(source2, targetFramework: TargetFramework.Mscorlib46, options: TestOptions.DebugExe, references: comp1Ref);
var comp5 = CreateCompilation(source2, targetFramework: TargetFramework.Mscorlib40, options: TestOptions.DebugExe, references: comp1Ref);
CompileAndVerify(comp5, expectedOutput: "123");
verifyField(comp5);
var comp6 = CreateCompilation(source2, targetFramework: TargetFramework.Mscorlib46, options: TestOptions.DebugExe, references: comp1ImageRef);
var comp6 = CreateCompilation(source2, targetFramework: TargetFramework.Mscorlib40, options: TestOptions.DebugExe, references: comp1ImageRef);
CompileAndVerify(comp6, expectedOutput: "123");
verifyField(comp6);
// Uncomment after https://github.com/dotnet/roslyn/issues/43549 is fixed.
//var comp7 = CreateCompilation(source2, targetFramework: TargetFramework.Mscorlib46, options: TestOptions.DebugExe, references: comp1Ref);
//CompileAndVerify(comp7, expectedOutput: "123");
//verifyField(comp7);
void verifyField(CSharpCompilation comp)
{
var field = comp.GetMember<FieldSymbol>("System.ValueTuple.F1");
Assert.NotNull(field.TupleUnderlyingField);
Assert.NotSame(field, field.TupleUnderlyingField);
var toEmit = field.ContainingType.GetFieldsToEmit().Where(f => f.Name == "F1").Single();
Assert.Same(toEmit, toEmit.TupleUnderlyingField);
Assert.Same(field.TupleUnderlyingField, toEmit);
}
}
[Fact]
[WorkItem(41207, "https://github.com/dotnet/roslyn/issues/41207")]
[WorkItem(1056281, "https://dev.azure.com/devdiv/DevDiv/_workitems/edit/1056281")]
[WorkItem(43549, "https://github.com/dotnet/roslyn/issues/43549")]
public void CustomFields_02()
{
var source0 = @"
......@@ -26574,20 +26594,224 @@ public static void Main()
}
";
var comp1 = CreateCompilation(source0 + source1, targetFramework: TargetFramework.Mscorlib46, options: TestOptions.DebugExe);
var comp1 = CreateCompilation(source0 + source1, targetFramework: TargetFramework.Mscorlib40, options: TestOptions.DebugExe);
CompileAndVerify(comp1, expectedOutput: "123");
verifyField(comp1);
var comp1Ref = new[] { comp1.ToMetadataReference() };
var comp1ImageRef = new[] { comp1.EmitToImageReference() };
var comp4 = CreateCompilation(source0 + source2, targetFramework: TargetFramework.Mscorlib46, options: TestOptions.DebugExe);
var comp4 = CreateCompilation(source0 + source2, targetFramework: TargetFramework.Mscorlib40, options: TestOptions.DebugExe);
CompileAndVerify(comp4, expectedOutput: "123");
var comp5 = CreateCompilation(source2, targetFramework: TargetFramework.Mscorlib46, options: TestOptions.DebugExe, references: comp1Ref);
var comp5 = CreateCompilation(source2, targetFramework: TargetFramework.Mscorlib40, options: TestOptions.DebugExe, references: comp1Ref);
CompileAndVerify(comp5, expectedOutput: "123");
verifyField(comp5);
var comp6 = CreateCompilation(source2, targetFramework: TargetFramework.Mscorlib46, options: TestOptions.DebugExe, references: comp1ImageRef);
var comp6 = CreateCompilation(source2, targetFramework: TargetFramework.Mscorlib40, options: TestOptions.DebugExe, references: comp1ImageRef);
CompileAndVerify(comp6, expectedOutput: "123");
verifyField(comp6);
// Uncomment after https://github.com/dotnet/roslyn/issues/43549 is fixed.
//var comp7 = CreateCompilation(source2, targetFramework: TargetFramework.Mscorlib46, options: TestOptions.DebugExe, references: comp1Ref);
//CompileAndVerify(comp7, expectedOutput: "123");
//verifyField(comp7);
void verifyField(CSharpCompilation comp)
{
var field = comp.GetMember<FieldSymbol>("System.ValueTuple.F1");
Assert.NotNull(field.TupleUnderlyingField);
Assert.NotSame(field, field.TupleUnderlyingField);
var toEmit = field.ContainingType.GetFieldsToEmit().Where(f => f.Name == "F1").Single();
Assert.Same(toEmit, toEmit.TupleUnderlyingField);
Assert.Same(field.TupleUnderlyingField, toEmit);
}
}
[Fact]
[WorkItem(43524, "https://github.com/dotnet/roslyn/issues/43524")]
[WorkItem(1095184, "https://devdiv.visualstudio.com/DevDiv/_workitems/edit/1095184")]
[WorkItem(43549, "https://github.com/dotnet/roslyn/issues/43549")]
public void CustomFields_03()
{
var source0 = @"
namespace System
{
public struct ValueTuple
{
public static readonly int F1 = 4;
public static int CombineHashCodes(int h1, int h2)
{
return F1 + h1 + h2;
}
}
}
";
var source1 = @"
class Program
{
static void Main()
{
System.Console.WriteLine(System.ValueTuple.CombineHashCodes(2, 3));
}
}
";
var source2 = @"
class Program
{
public static void Main()
{
System.Console.WriteLine(System.ValueTuple.F1 + 2 + 3);
}
}
";
var comp1 = CreateCompilation(source0 + source1, targetFramework: TargetFramework.Mscorlib40, options: TestOptions.DebugExe);
CompileAndVerify(comp1, expectedOutput: "9");
verifyField(comp1);
var comp1Ref = new[] { comp1.ToMetadataReference() };
var comp1ImageRef = new[] { comp1.EmitToImageReference() };
var comp4 = CreateCompilation(source0 + source2, targetFramework: TargetFramework.Mscorlib40, options: TestOptions.DebugExe);
CompileAndVerify(comp4, expectedOutput: "9");
var comp5 = CreateCompilation(source2, targetFramework: TargetFramework.Mscorlib40, options: TestOptions.DebugExe, references: comp1Ref);
CompileAndVerify(comp5, expectedOutput: "9");
verifyField(comp5);
var comp6 = CreateCompilation(source2, targetFramework: TargetFramework.Mscorlib40, options: TestOptions.DebugExe, references: comp1ImageRef);
CompileAndVerify(comp6, expectedOutput: "9");
verifyField(comp6);
// Uncomment after https://github.com/dotnet/roslyn/issues/43549 is fixed.
//var comp7 = CreateCompilation(source2, targetFramework: TargetFramework.Mscorlib46, options: TestOptions.DebugExe, references: comp1Ref);
//CompileAndVerify(comp7, expectedOutput: "9");
//verifyField(comp7);
void verifyField(CSharpCompilation comp)
{
var field = comp.GetMember<FieldSymbol>("System.ValueTuple.F1");
Assert.NotNull(field.TupleUnderlyingField);
Assert.NotSame(field, field.TupleUnderlyingField);
var toEmit = field.ContainingType.GetFieldsToEmit().Single();
Assert.Same(toEmit, toEmit.TupleUnderlyingField);
Assert.Same(field.TupleUnderlyingField, toEmit);
}
}
[Fact]
[WorkItem(43524, "https://github.com/dotnet/roslyn/issues/43524")]
[WorkItem(1095184, "https://devdiv.visualstudio.com/DevDiv/_workitems/edit/1095184")]
[WorkItem(43549, "https://github.com/dotnet/roslyn/issues/43549")]
public void CustomFields_04()
{
var source0 = @"
namespace System
{
public struct ValueTuple
{
public int F1;
public int CombineHashCodes(int h1, int h2)
{
return F1 + h1 + h2;
}
}
}
";
var source1 = @"
class Program
{
static void Main()
{
System.ValueTuple tuple = default;
tuple.F1 = 4;
System.Console.WriteLine(tuple.CombineHashCodes(2, 3));
}
}
";
var source2 = @"
class Program
{
public static void Main()
{
System.ValueTuple tuple = default;
tuple.F1 = 4;
System.Console.WriteLine(tuple.F1 + 2 + 3);
}
}
";
var comp1 = CreateCompilation(source0 + source1, targetFramework: TargetFramework.Mscorlib40, options: TestOptions.DebugExe);
CompileAndVerify(comp1, expectedOutput: "9");
verifyField(comp1);
var comp1Ref = new[] { comp1.ToMetadataReference() };
var comp1ImageRef = new[] { comp1.EmitToImageReference() };
var comp4 = CreateCompilation(source0 + source2, targetFramework: TargetFramework.Mscorlib40, options: TestOptions.DebugExe);
CompileAndVerify(comp4, expectedOutput: "9");
var comp5 = CreateCompilation(source2, targetFramework: TargetFramework.Mscorlib40, options: TestOptions.DebugExe, references: comp1Ref);
CompileAndVerify(comp5, expectedOutput: "9");
verifyField(comp5);
var comp6 = CreateCompilation(source2, targetFramework: TargetFramework.Mscorlib40, options: TestOptions.DebugExe, references: comp1ImageRef);
CompileAndVerify(comp6, expectedOutput: "9");
verifyField(comp6);
// Uncomment after https://github.com/dotnet/roslyn/issues/43549 is fixed.
//var comp7 = CreateCompilation(source2, targetFramework: TargetFramework.Mscorlib46, options: TestOptions.DebugExe, references: comp1Ref);
//CompileAndVerify(comp7, expectedOutput: "9");
//verifyField(comp7);
void verifyField(CSharpCompilation comp)
{
var field = comp.GetMember<FieldSymbol>("System.ValueTuple.F1");
Assert.NotNull(field.TupleUnderlyingField);
Assert.NotSame(field, field.TupleUnderlyingField);
var toEmit = field.ContainingType.GetFieldsToEmit().Single();
Assert.Same(toEmit, toEmit.TupleUnderlyingField);
Assert.Same(field.TupleUnderlyingField, toEmit);
}
}
[Fact(Skip = "https://github.com/dotnet/roslyn/issues/43621")]
[WorkItem(43621, "https://github.com/dotnet/roslyn/issues/43621")]
public void CustomFields_05()
{
var source0 = @"
using System;
namespace System
{
public class C
{
public unsafe static void Main()
{
var s = new ValueTuple();
int* p = s.MessageType;
s.MessageType[0] = 12;
p[1] = p[0];
Console.WriteLine(s.MessageType[1]);
}
}
public unsafe struct ValueTuple
{
public fixed int MessageType[50];
}
}
";
var comp1 = CreateCompilation(source0, options: TestOptions.DebugExe.WithAllowUnsafe(true));
CompileAndVerify(comp1, expectedOutput: "12");
}
[Fact]
......@@ -22872,20 +22872,34 @@ class Program
End Class
"
Dim comp1 = CreateCompilation(source0 + source1, targetFramework:=TargetFramework.Mscorlib46, options:=TestOptions.DebugExe)
Dim verifyField = Sub(comp As VisualBasicCompilation)
Dim field = comp.GetMember(Of FieldSymbol)("System.ValueTuple.F1")
Assert.Null(field.TupleUnderlyingField)
Dim toEmit = field.ContainingType.GetFieldsToEmit().Where(Function(f) f.Name = "F1").Single()
Assert.Same(field, toEmit)
End Sub
Dim comp1 = CreateCompilation(source0 + source1, targetFramework:=TargetFramework.Mscorlib40, options:=TestOptions.DebugExe)
CompileAndVerify(comp1, expectedOutput:="123")
verifyField(comp1)
Dim comp1Ref = {comp1.ToMetadataReference()}
Dim comp1ImageRef = {comp1.EmitToImageReference()}
Dim comp4 = CreateCompilation(source0 + source2, targetFramework:=TargetFramework.Mscorlib46, options:=TestOptions.DebugExe)
Dim comp4 = CreateCompilation(source0 + source2, targetFramework:=TargetFramework.Mscorlib40, options:=TestOptions.DebugExe)
CompileAndVerify(comp4, expectedOutput:="123")
Dim comp5 = CreateCompilation(source2, targetFramework:=TargetFramework.Mscorlib46, options:=TestOptions.DebugExe, references:=comp1Ref)
Dim comp5 = CreateCompilation(source2, targetFramework:=TargetFramework.Mscorlib40, options:=TestOptions.DebugExe, references:=comp1Ref)
CompileAndVerify(comp5, expectedOutput:="123")
verifyField(comp5)
Dim comp6 = CreateCompilation(source2, targetFramework:=TargetFramework.Mscorlib46, options:=TestOptions.DebugExe, references:=comp1ImageRef)
Dim comp6 = CreateCompilation(source2, targetFramework:=TargetFramework.Mscorlib40, options:=TestOptions.DebugExe, references:=comp1ImageRef)
CompileAndVerify(comp6, expectedOutput:="123")
verifyField(comp6)
Dim comp7 = CreateCompilation(source2, targetFramework:=TargetFramework.Mscorlib46, options:=TestOptions.DebugExe, references:=comp1Ref)
CompileAndVerify(comp7, expectedOutput:="123")
verifyField(comp7)
End Sub
<Fact>
......@@ -22928,20 +22942,162 @@ class Program
End Class
"
Dim comp1 = CreateCompilation(source0 + source1, targetFramework:=TargetFramework.Mscorlib46, options:=TestOptions.DebugExe)
Dim verifyField = Sub(comp As VisualBasicCompilation)
Dim field = comp.GetMember(Of FieldSymbol)("System.ValueTuple.F1")
Assert.Null(field.TupleUnderlyingField)
Dim toEmit = field.ContainingType.GetFieldsToEmit().Where(Function(f) f.Name = "F1").Single()
Assert.Same(field, toEmit)
End Sub
Dim comp1 = CreateCompilation(source0 + source1, targetFramework:=TargetFramework.Mscorlib40, options:=TestOptions.DebugExe)
CompileAndVerify(comp1, expectedOutput:="123")
verifyField(comp1)
Dim comp1Ref = {comp1.ToMetadataReference()}
Dim comp1ImageRef = {comp1.EmitToImageReference()}
Dim comp4 = CreateCompilation(source0 + source2, targetFramework:=TargetFramework.Mscorlib46, options:=TestOptions.DebugExe)
Dim comp4 = CreateCompilation(source0 + source2, targetFramework:=TargetFramework.Mscorlib40, options:=TestOptions.DebugExe)
CompileAndVerify(comp4, expectedOutput:="123")
Dim comp5 = CreateCompilation(source2, targetFramework:=TargetFramework.Mscorlib46, options:=TestOptions.DebugExe, references:=comp1Ref)
Dim comp5 = CreateCompilation(source2, targetFramework:=TargetFramework.Mscorlib40, options:=TestOptions.DebugExe, references:=comp1Ref)
CompileAndVerify(comp5, expectedOutput:="123")
verifyField(comp5)
Dim comp6 = CreateCompilation(source2, targetFramework:=TargetFramework.Mscorlib46, options:=TestOptions.DebugExe, references:=comp1ImageRef)
Dim comp6 = CreateCompilation(source2, targetFramework:=TargetFramework.Mscorlib40, options:=TestOptions.DebugExe, references:=comp1ImageRef)
CompileAndVerify(comp6, expectedOutput:="123")
verifyField(comp6)
Dim comp7 = CreateCompilation(source2, targetFramework:=TargetFramework.Mscorlib46, options:=TestOptions.DebugExe, references:=comp1Ref)
CompileAndVerify(comp7, expectedOutput:="123")
verifyField(comp7)
End Sub
<Fact>
<WorkItem(43524, "https://github.com/dotnet/roslyn/issues/43524")>
<WorkItem(1095184, "https://devdiv.visualstudio.com/DevDiv/_workitems/edit/1095184")>
Public Sub CustomFields_03()
Dim source0 = "
namespace System
public structure ValueTuple
public shared readonly F1 As Integer = 4
public Shared Function CombineHashCodes(h1 As Integer, h2 As Integer) As Integer
return F1 + h1 + h2
End Function
End Structure
End Namespace
"
Dim source1 = "
class Program
shared sub Main()
System.Console.WriteLine(System.ValueTuple.CombineHashCodes(2, 3))
End Sub
End Class
"
Dim source2 = "
class Program
public shared Sub Main()
System.Console.WriteLine(System.ValueTuple.F1 + 2 + 3)
End Sub
End Class
"
Dim verifyField = Sub(comp As VisualBasicCompilation)
Dim field = comp.GetMember(Of FieldSymbol)("System.ValueTuple.F1")
Assert.Null(field.TupleUnderlyingField)
Dim toEmit = field.ContainingType.GetFieldsToEmit().Single()
Assert.Same(field, toEmit)
End Sub
Dim comp1 = CreateCompilation(source0 + source1, targetFramework:=TargetFramework.Mscorlib40, options:=TestOptions.DebugExe)
CompileAndVerify(comp1, expectedOutput:="9")
verifyField(comp1)
Dim comp1Ref = {comp1.ToMetadataReference()}
Dim comp1ImageRef = {comp1.EmitToImageReference()}
Dim comp4 = CreateCompilation(source0 + source2, targetFramework:=TargetFramework.Mscorlib40, options:=TestOptions.DebugExe)
CompileAndVerify(comp4, expectedOutput:="9")
Dim comp5 = CreateCompilation(source2, targetFramework:=TargetFramework.Mscorlib40, options:=TestOptions.DebugExe, references:=comp1Ref)
CompileAndVerify(comp5, expectedOutput:="9")
verifyField(comp5)
Dim comp6 = CreateCompilation(source2, targetFramework:=TargetFramework.Mscorlib40, options:=TestOptions.DebugExe, references:=comp1ImageRef)
CompileAndVerify(comp6, expectedOutput:="9")
verifyField(comp6)
Dim comp7 = CreateCompilation(source2, targetFramework:=TargetFramework.Mscorlib46, options:=TestOptions.DebugExe, references:=comp1Ref)
CompileAndVerify(comp7, expectedOutput:="9")
verifyField(comp7)
End Sub
<Fact>
<WorkItem(43524, "https://github.com/dotnet/roslyn/issues/43524")>
<WorkItem(1095184, "https://devdiv.visualstudio.com/DevDiv/_workitems/edit/1095184")>
Public Sub CustomFields_04()
Dim source0 = "
namespace System
public structure ValueTuple
public F1 as Integer
public Function CombineHashCodes(h1 as Integer, h2 as Integer) as Integer
return F1 + h1 + h2
End Function
End Structure
End Namespace
"
Dim source1 = "
class Program
shared sub Main()
Dim tuple as System.ValueTuple = Nothing
tuple.F1 = 4
System.Console.WriteLine(tuple.CombineHashCodes(2, 3))
End Sub
End Class
"
Dim source2 = "
class Program
public shared Sub Main()
Dim tuple as System.ValueTuple = Nothing
tuple.F1 = 4
System.Console.WriteLine(tuple.F1 + 2 + 3)
End Sub
End Class
"
Dim verifyField = Sub(comp As VisualBasicCompilation)
Dim field = comp.GetMember(Of FieldSymbol)("System.ValueTuple.F1")
Assert.Null(field.TupleUnderlyingField)
Dim toEmit = field.ContainingType.GetFieldsToEmit().Single()
Assert.Same(field, toEmit)
End Sub
Dim comp1 = CreateCompilation(source0 + source1, targetFramework:=TargetFramework.Mscorlib40, options:=TestOptions.DebugExe)
CompileAndVerify(comp1, expectedOutput:="9")
verifyField(comp1)
Dim comp1Ref = {comp1.ToMetadataReference()}
Dim comp1ImageRef = {comp1.EmitToImageReference()}
Dim comp4 = CreateCompilation(source0 + source2, targetFramework:=TargetFramework.Mscorlib40, options:=TestOptions.DebugExe)
CompileAndVerify(comp4, expectedOutput:="9")
Dim comp5 = CreateCompilation(source2, targetFramework:=TargetFramework.Mscorlib40, options:=TestOptions.DebugExe, references:=comp1Ref)
CompileAndVerify(comp5, expectedOutput:="9")
verifyField(comp5)
Dim comp6 = CreateCompilation(source2, targetFramework:=TargetFramework.Mscorlib40, options:=TestOptions.DebugExe, references:=comp1ImageRef)
CompileAndVerify(comp6, expectedOutput:="9")
verifyField(comp6)
Dim comp7 = CreateCompilation(source2, targetFramework:=TargetFramework.Mscorlib46, options:=TestOptions.DebugExe, references:=comp1Ref)
CompileAndVerify(comp7, expectedOutput:="9")
verifyField(comp7)
End Sub
<Fact>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册