Browse Source

Add `#if !NETCORE` around extension methods that are included with .NET Core 3

pull/2081/head
Daniel Grunwald 5 years ago
parent
commit
bdea1950a8
  1. 8
      ICSharpCode.Decompiler/IL/ILReader.cs
  2. 1
      ICSharpCode.Decompiler/IL/Instructions/DynamicInstructions.cs
  3. 2
      ICSharpCode.Decompiler/IL/Transforms/CopyPropagation.cs
  4. 8
      ICSharpCode.Decompiler/Util/CollectionExtensions.cs

8
ICSharpCode.Decompiler/IL/ILReader.cs

@ -515,10 +515,10 @@ namespace ICSharpCode.Decompiler.IL
var blockBuilder = new BlockBuilder(body, variableByExceptionHandler); var blockBuilder = new BlockBuilder(body, variableByExceptionHandler);
blockBuilder.CreateBlocks(mainContainer, instructionBuilder, isBranchTarget, cancellationToken); blockBuilder.CreateBlocks(mainContainer, instructionBuilder, isBranchTarget, cancellationToken);
var function = new ILFunction(this.method, body.GetCodeSize(), this.genericContext, mainContainer, kind); var function = new ILFunction(this.method, body.GetCodeSize(), this.genericContext, mainContainer, kind);
CollectionExtensions.AddRange(function.Variables, parameterVariables); function.Variables.AddRange(parameterVariables);
CollectionExtensions.AddRange(function.Variables, localVariables); function.Variables.AddRange(localVariables);
CollectionExtensions.AddRange(function.Variables, stackVariables); function.Variables.AddRange(stackVariables);
CollectionExtensions.AddRange(function.Variables, variableByExceptionHandler.Values); function.Variables.AddRange(variableByExceptionHandler.Values);
function.AddRef(); // mark the root node function.AddRef(); // mark the root node
var removedBlocks = new List<Block>(); var removedBlocks = new List<Block>();
foreach (var c in function.Descendants.OfType<BlockContainer>()) { foreach (var c in function.Descendants.OfType<BlockContainer>()) {

1
ICSharpCode.Decompiler/IL/Instructions/DynamicInstructions.cs

@ -18,6 +18,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions; using System.Linq.Expressions;
using ICSharpCode.Decompiler.IL.Patterns; using ICSharpCode.Decompiler.IL.Patterns;
using ICSharpCode.Decompiler.TypeSystem; using ICSharpCode.Decompiler.TypeSystem;

2
ICSharpCode.Decompiler/IL/Transforms/CopyPropagation.cs

@ -138,7 +138,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms
}; };
block.Instructions.Insert(i++, new StLoc(uninlinedArgs[j], arg)); block.Instructions.Insert(i++, new StLoc(uninlinedArgs[j], arg));
} }
CollectionExtensions.AddRange(v.Function.Variables, uninlinedArgs); v.Function.Variables.AddRange(uninlinedArgs);
// perform copy propagation: // perform copy propagation:
foreach (var expr in v.LoadInstructions.ToArray()) { foreach (var expr in v.LoadInstructions.ToArray()) {
var clone = copiedExpr.Clone(); var clone = copiedExpr.Clone();

8
ICSharpCode.Decompiler/Util/CollectionExtensions.cs

@ -12,10 +12,12 @@ namespace ICSharpCode.Decompiler.Util
value = pair.Value; value = pair.Value;
} }
#if !NETCORE
public static IEnumerable<(A, B)> Zip<A, B>(this IEnumerable<A> input1, IEnumerable<B> input2) public static IEnumerable<(A, B)> Zip<A, B>(this IEnumerable<A> input1, IEnumerable<B> input2)
{ {
return input1.Zip(input2, (a, b) => (a, b)); return input1.Zip(input2, (a, b) => (a, b));
} }
#endif
public static IEnumerable<(A, B)> ZipLongest<A, B>(this IEnumerable<A> input1, IEnumerable<B> input2) public static IEnumerable<(A, B)> ZipLongest<A, B>(this IEnumerable<A> input1, IEnumerable<B> input2)
{ {
@ -51,10 +53,12 @@ namespace ICSharpCode.Decompiler.Util
} }
} }
#if !NETCORE
public static HashSet<T> ToHashSet<T>(this IEnumerable<T> input) public static HashSet<T> ToHashSet<T>(this IEnumerable<T> input)
{ {
return new HashSet<T>(input); return new HashSet<T>(input);
} }
#endif
public static IEnumerable<T> SkipLast<T>(this IReadOnlyCollection<T> input, int count) public static IEnumerable<T> SkipLast<T>(this IReadOnlyCollection<T> input, int count)
{ {
@ -323,7 +327,7 @@ namespace ICSharpCode.Decompiler.Util
return first; return first;
} }
#region Aliases/shortcuts for Enumerable extension methods #region Aliases/shortcuts for Enumerable extension methods
public static bool Any<T>(this ICollection<T> list) => list.Count > 0; public static bool Any<T>(this ICollection<T> list) => list.Count > 0;
public static bool Any<T>(this T[] array, Predicate<T> match) => Array.Exists(array, match); public static bool Any<T>(this T[] array, Predicate<T> match) => Array.Exists(array, match);
public static bool Any<T>(this List<T> list, Predicate<T> match) => list.Exists(match); public static bool Any<T>(this List<T> list, Predicate<T> match) => list.Exists(match);
@ -335,6 +339,6 @@ namespace ICSharpCode.Decompiler.Util
public static T FirstOrDefault<T>(this List<T> list, Predicate<T> predicate) => list.Find(predicate); public static T FirstOrDefault<T>(this List<T> list, Predicate<T> predicate) => list.Find(predicate);
public static T Last<T>(this IList<T> list) => list[list.Count - 1]; public static T Last<T>(this IList<T> list) => list[list.Count - 1];
#endregion #endregion
} }
} }

Loading…
Cancel
Save