Browse Source

Fix bugs in ILReader

pull/1198/head
Siegfried Pammer 7 years ago
parent
commit
5e7d2cc1df
  1. 12
      ICSharpCode.Decompiler/IL/ILReader.cs

12
ICSharpCode.Decompiler/IL/ILReader.cs

@ -89,7 +89,7 @@ namespace ICSharpCode.Decompiler.IL @@ -89,7 +89,7 @@ namespace ICSharpCode.Decompiler.IL
this.resolveContext = new SimpleTypeResolveContext(this.method);
this.methodReturnStackType = TypeSystem.Implementation.DynamicAwareTypeReference.Create(methodSignature.ReturnType, methodDefinition.GetCustomAttributes(), metadata).Resolve(resolveContext).GetStackType();
InitParameterVariables();
InitLocalVariables();
localVariables = InitLocalVariables();
if (body.LocalVariablesInitialized) {
foreach (var v in localVariables) {
v.HasInitialValue = true;
@ -125,16 +125,17 @@ namespace ICSharpCode.Decompiler.IL @@ -125,16 +125,17 @@ namespace ICSharpCode.Decompiler.IL
return typeSystem.ResolveAsField(fieldReference);
}
void InitLocalVariables()
ILVariable[] InitLocalVariables()
{
if (body.LocalSignature.IsNil) return;
if (body.LocalSignature.IsNil) return Empty<ILVariable>.Array;
var standaloneSignature = metadata.GetStandaloneSignature(body.LocalSignature);
Debug.Assert(standaloneSignature.GetKind() == StandaloneSignatureKind.LocalVariables);
var variableTypes = standaloneSignature.DecodeLocalSignature(TypeSystem.Implementation.TypeReferenceSignatureDecoder.Instance, default);
localVariables = new ILVariable[variableTypes.Length];
var localVariables = new ILVariable[variableTypes.Length];
foreach (var (index, type) in variableTypes.WithIndex()) {
localVariables[index] = CreateILVariable(index, type);
}
return localVariables;
}
void InitParameterVariables()
@ -147,7 +148,8 @@ namespace ICSharpCode.Decompiler.IL @@ -147,7 +148,8 @@ namespace ICSharpCode.Decompiler.IL
}
while (paramIndex < parameterVariables.Length) {
var type = methodSignature.ParameterTypes[paramIndex - offset];
parameterVariables[paramIndex++] = CreateILVariable(paramIndex, type, method.Parameters[paramIndex - offset].Name);
parameterVariables[paramIndex] = CreateILVariable(paramIndex - offset, type, method.Parameters[paramIndex - offset].Name);
paramIndex++;
}
Debug.Assert(paramIndex == parameterVariables.Length);
}

Loading…
Cancel
Save