Skip to content
Permalink
Browse files

Update tests to latest Roslyn implementation.

  • Loading branch information...
siegfriedpammer committed Jul 6, 2019
1 parent 475c5e8 commit 9590cfbf5950b62f67a5c221e9aeae99072b7c25
@@ -42,13 +42,13 @@
<ItemGroup>
<PackageReference Include="DiffLib" Version="2017.7.26.1241" />
<PackageReference Include="Microsoft.Build.Locator" Version="1.2.2" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="3.0.0-beta4-final" />
<PackageReference Include="Microsoft.CodeAnalysis.VisualBasic" Version="3.0.0-beta4-final" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="3.2.0-beta3-final" />
<PackageReference Include="Microsoft.CodeAnalysis.VisualBasic" Version="3.2.0-beta3-final" />
<PackageReference Include="Microsoft.DiaSymReader.Converter.Xml" Version="1.1.0-beta1-63314-01" />
<PackageReference Include="NUnit3TestAdapter" Version="3.13.0" />
<PackageReference Include="System.Collections.Immutable" Version="1.5.0" />
<PackageReference Include="NUnit" Version="3.11.0" />
<PackageReference Include="System.Memory" Version="4.5.1" />
<PackageReference Include="NUnit" Version="3.12.0" />
<PackageReference Include="System.Memory" Version="4.5.3" />
</ItemGroup>

<ItemGroup>
@@ -18,5 +18,14 @@ internal static class ILInstructionExtensions
target.AddILRange(range);
return target;
}

public static ILInstruction GetNextSibling(this ILInstruction instruction)
{
if (instruction?.Parent == null)
return null;
if (instruction.ChildIndex + 1 >= instruction.Parent.Children.Count)
return null;
return instruction.Parent.Children[instruction.ChildIndex + 1];
}
}
}
@@ -43,11 +43,11 @@ partial class Block : ILInstruction
{
public static readonly SlotInfo InstructionSlot = new SlotInfo("Instruction", isCollection: true);
public static readonly SlotInfo FinalInstructionSlot = new SlotInfo("FinalInstruction");

public readonly BlockKind Kind;
public readonly InstructionCollection<ILInstruction> Instructions;
ILInstruction finalInstruction;

/// <summary>
/// For blocks in a block container, this field holds
/// the number of incoming control flow edges to this block.
@@ -77,21 +77,21 @@ partial class Block : ILInstruction
SetChildInstruction(ref finalInstruction, value, Instructions.Count);
}
}

protected internal override void InstructionCollectionUpdateComplete()
{
base.InstructionCollectionUpdateComplete();
if (finalInstruction.Parent == this)
finalInstruction.ChildIndex = Instructions.Count;
}

public Block(BlockKind kind = BlockKind.ControlFlow) : base(OpCode.Block)
{
this.Kind = kind;
this.Instructions = new InstructionCollection<ILInstruction>(this, 0);
this.FinalInstruction = new Nop();
}

public override ILInstruction Clone()
{
Block clone = new Block(Kind);
@@ -100,7 +100,7 @@ public override ILInstruction Clone()
clone.FinalInstruction = this.FinalInstruction.Clone();
return clone;
}

internal override void CheckInvariant(ILPhase phase)
{
base.CheckInvariant(phase);
@@ -133,18 +133,17 @@ internal override void CheckInvariant(ILPhase phase)
break;
}
}

public override StackType ResultType {
get {
return finalInstruction.ResultType;
}
}

/// <summary>
/// Gets the name of this block.
/// </summary>
public string Label
{
public string Label {
get { return Disassembler.DisassemblerHelpers.OffsetToString(this.StartILOffset); }
}

@@ -179,35 +178,35 @@ public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
output.Write("}");
output.MarkFoldEnd();
}

protected override int GetChildCount()
{
return Instructions.Count + 1;
}

protected override ILInstruction GetChild(int index)
{
if (index == Instructions.Count)
return finalInstruction;
return Instructions[index];
}

protected override void SetChild(int index, ILInstruction value)
{
if (index == Instructions.Count)
FinalInstruction = value;
else
Instructions[index] = value;
}

protected override SlotInfo GetChildSlot(int index)
{
if (index == Instructions.Count)
return FinalInstructionSlot;
else
return InstructionSlot;
}

protected override InstructionFlags ComputeFlags()
{
var flags = InstructionFlags.None;
@@ -217,7 +216,7 @@ protected override InstructionFlags ComputeFlags()
flags |= FinalInstruction.Flags;
return flags;
}

public override InstructionFlags DirectFlags {
get {
return InstructionFlags.None;
@@ -280,6 +279,21 @@ public static ILInstruction Unwrap(ILInstruction inst)
return inst;
}

/// <summary>
/// Gets the closest parent Block.
/// Returns null, if the instruction is not a descendant of a Block.
/// </summary>
public static Block FindClosestBlock(ILInstruction inst)
{
var curr = inst;
while (curr != null) {
if (curr is Block)
return (Block)curr;
curr = curr.Parent;
}
return null;
}

public bool MatchInlineAssignBlock(out CallInstruction call, out ILInstruction value)
{
call = null;
@@ -271,6 +271,7 @@ protected internal override void VisitNewObj(NewObj inst)
}
Block block;
if (TransformSpanTCtorContainingStackAlloc(inst, out ILInstruction locallocSpan)) {
context.Step("new Span<T>(stackalloc) -> stackalloc Span<T>", inst);
inst.ReplaceWith(locallocSpan);
block = null;
ILInstruction stmt = locallocSpan;
@@ -281,7 +282,9 @@ protected internal override void VisitNewObj(NewObj inst)
}
stmt = stmt.Parent;
}
//ILInlining.InlineIfPossible(block, stmt.ChildIndex - 1, context);
// Special case to eliminate extra store
if (stmt.GetNextSibling() is StLoc)
ILInlining.InlineIfPossible(block, stmt.ChildIndex, context);
return;
}
if (TransformArrayInitializers.TransformSpanTArrayInitialization(inst, context, out block)) {
@@ -31,7 +31,7 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="NUnit" Version="3.11.0" />
<PackageReference Include="NUnit" Version="3.12.0" />
</ItemGroup>

<ItemGroup>
@@ -7,8 +7,14 @@
<bindingRedirect oldVersion="0.0.0.0-1.2.1.0" newVersion="1.2.1.0"/>
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.1.1" newVersion="4.0.1.1"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1"/>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2"/>
</startup>
</configuration>

0 comments on commit 9590cfb

Please sign in to comment.
You can’t perform that action at this time.