Browse Source

GenerateForeachVariableName: Use root ILFunction and descendants as context for variable naming in GenerateForeachVariableName; Fixes #957: Invalid foreach naming

pull/960/head
Siegfried Pammer 8 years ago
parent
commit
4afb7230f1
  1. 5
      ICSharpCode.Decompiler/IL/Transforms/AssignVariableNames.cs

5
ICSharpCode.Decompiler/IL/Transforms/AssignVariableNames.cs

@ -378,11 +378,12 @@ namespace ICSharpCode.Decompiler.IL.Transforms
if (function == null) if (function == null)
throw new ArgumentNullException(nameof(function)); throw new ArgumentNullException(nameof(function));
var reservedVariableNames = new Dictionary<string, int>(); var reservedVariableNames = new Dictionary<string, int>();
foreach (var v in function.Descendants.OfType<ILFunction>().SelectMany(m => m.Variables)) { var rootFunction = function.Ancestors.OfType<ILFunction>().Single(f => f.Parent == null);
foreach (var v in rootFunction.Descendants.OfType<ILFunction>().SelectMany(m => m.Variables)) {
if (v != existingVariable) if (v != existingVariable)
AddExistingName(reservedVariableNames, v.Name); AddExistingName(reservedVariableNames, v.Name);
} }
foreach (var f in function.CecilMethod.DeclaringType.Fields.Select(f => f.Name)) foreach (var f in rootFunction.CecilMethod.DeclaringType.Fields.Select(f => f.Name))
AddExistingName(reservedVariableNames, f); AddExistingName(reservedVariableNames, f);
string baseName = GetNameFromInstruction(valueContext); string baseName = GetNameFromInstruction(valueContext);

Loading…
Cancel
Save