Browse Source

Ensure ConvertVariable() always adds a resolve result to the IdentifierExpression

pull/728/head
Daniel Grunwald 11 years ago
parent
commit
83095dd4a1
  1. 13
      ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs

13
ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs

@ -88,14 +88,19 @@ namespace ICSharpCode.Decompiler.CSharp @@ -88,14 +88,19 @@ namespace ICSharpCode.Decompiler.CSharp
expr = new ThisReferenceExpression();
else
expr = new IdentifierExpression(variable.Name);
if (variable.Type.SkipModifiers().MetadataType == Mono.Cecil.MetadataType.ByReference)
{
// TODO: use LocalResolveResult instead
if (variable.Type.SkipModifiers().MetadataType == Mono.Cecil.MetadataType.ByReference) {
// When loading a by-ref parameter, use 'ref paramName'.
// We'll strip away the 'ref' when dereferencing.
// Ensure that the IdentifierExpression itself also gets a resolve result, as that might
// get used after the 'ref' is stripped away:
var elementType = variable.Type.SkipModifiers().GetElementType();
expr.WithRR(new ResolveResult(cecilMapper.GetType(elementType)));
expr = new DirectionExpression(FieldDirection.Ref, expr);
}
return expr
.WithRR(new ResolveResult(cecilMapper.GetType(variable.Type))); // TODO: use LocalResolveResult instead
return expr.WithRR(new ResolveResult(cecilMapper.GetType(variable.Type)));
}
ConvertedExpression IsType(IsInst inst)

Loading…
Cancel
Save