Browse Source

Add ILAstWritingOptions parameter to LockInstruction/UsingInstruction.WriteTo, fix merge errors.

pull/870/merge
Siegfried Pammer 8 years ago
parent
commit
4f7a479320
  1. 3
      ICSharpCode.Decompiler/IL/Instructions/ILFunction.cs
  2. 10
      ICSharpCode.Decompiler/IL/Instructions/LockInstruction.cs
  3. 20
      ICSharpCode.Decompiler/IL/Transforms/ILInlining.cs

3
ICSharpCode.Decompiler/IL/Instructions/ILFunction.cs

@ -107,13 +107,12 @@ namespace ICSharpCode.Decompiler.IL
} }
output.MarkFoldEnd(); output.MarkFoldEnd();
output.WriteLine(); output.WriteLine();
body.WriteTo(output, options);
foreach (string warning in Warnings) { foreach (string warning in Warnings) {
output.WriteLine("//" + warning); output.WriteLine("//" + warning);
} }
body.WriteTo(output); body.WriteTo(output, options);
output.WriteLine(); output.WriteLine();
output.Unindent(); output.Unindent();

10
ICSharpCode.Decompiler/IL/Instructions/LockInstruction.cs

@ -26,13 +26,13 @@ namespace ICSharpCode.Decompiler.IL
{ {
partial class LockInstruction partial class LockInstruction
{ {
public override void WriteTo(ITextOutput output) public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{ {
output.Write("lock ("); output.Write("lock (");
OnExpression.WriteTo(output); OnExpression.WriteTo(output, options);
output.WriteLine(") {"); output.WriteLine(") {");
output.Indent(); output.Indent();
Body.WriteTo(output); Body.WriteTo(output, options);
output.Unindent(); output.Unindent();
output.WriteLine(); output.WriteLine();
output.Write("}"); output.Write("}");
@ -44,10 +44,10 @@ namespace ICSharpCode.Decompiler.IL
public override void WriteTo(ITextOutput output, ILAstWritingOptions options) public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
{ {
output.Write("using ("); output.Write("using (");
ResourceExpression.WriteTo(output); ResourceExpression.WriteTo(output, options);
output.WriteLine(") {"); output.WriteLine(") {");
output.Indent(); output.Indent();
Body.WriteTo(output); Body.WriteTo(output, options);
output.Unindent(); output.Unindent();
output.WriteLine(); output.WriteLine();
output.Write("}"); output.Write("}");

20
ICSharpCode.Decompiler/IL/Transforms/ILInlining.cs

@ -307,26 +307,6 @@ namespace ICSharpCode.Decompiler.IL.Transforms
return FindLoadInNext(expr, v, expressionBeingMoved, out loadInst) == true; return FindLoadInNext(expr, v, expressionBeingMoved, out loadInst) == true;
} }
/// <summary>
/// Gets whether arg can be un-inlined out of stmt.
/// </summary>
internal static bool CanUninline(ILInstruction arg, ILInstruction stmt)
{
Debug.Assert(arg.IsDescendantOf(stmt));
for (ILInstruction inst = arg; inst != stmt; inst = inst.Parent) {
if (!inst.SlotInfo.CanInlineInto)
return false;
// Check whether re-ordering with predecessors is valid:
int childIndex = inst.ChildIndex;
for (int i = 0; i < childIndex; ++i) {
ILInstruction predecessor = inst.Parent.Children[i];
if (!SemanticHelper.MayReorder(arg, predecessor))
return false;
}
}
return true;
}
/// <summary> /// <summary>
/// Finds the position to inline to. /// Finds the position to inline to.
/// </summary> /// </summary>

Loading…
Cancel
Save