Browse Source

implement BitNot and Unbox instruction

pull/728/head
Siegfried Pammer 11 years ago
parent
commit
65fddc6ce6
  1. 18
      ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs

18
ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs

@ -216,6 +216,14 @@ namespace ICSharpCode.Decompiler.CSharp @@ -216,6 +216,14 @@ namespace ICSharpCode.Decompiler.CSharp
return LogicNot(TranslateCondition(inst.Argument)).WithILInstruction(inst);
}
protected internal override TranslatedExpression VisitBitNot(BitNot inst)
{
var argument = Translate(inst.Argument);
return new UnaryOperatorExpression(UnaryOperatorType.BitNot, argument)
.WithRR(argument.ResolveResult)
.WithILInstruction(inst);
}
ExpressionWithResolveResult LogicNot(TranslatedExpression expr)
{
return new UnaryOperatorExpression(UnaryOperatorType.Not, expr.Expression)
@ -705,6 +713,16 @@ namespace ICSharpCode.Decompiler.CSharp @@ -705,6 +713,16 @@ namespace ICSharpCode.Decompiler.CSharp
.WithILInstruction(inst)
.WithRR(new ConversionResolveResult(inst.Type, arg.ResolveResult, Conversion.UnboxingConversion));
}
protected internal override TranslatedExpression VisitUnbox(Unbox inst)
{
var arg = Translate(inst.Argument);
var castExpression = new CastExpression(ConvertType(inst.Type), arg.Expression)
.WithRR(new ConversionResolveResult(inst.Type, arg.ResolveResult, Conversion.UnboxingConversion));
return new DirectionExpression(FieldDirection.Ref, castExpression)
.WithILInstruction(inst)
.WithRR(new ConversionResolveResult(new ByReferenceType(inst.Type), arg.ResolveResult, Conversion.UnboxingConversion));
}
protected internal override TranslatedExpression VisitBox(Box inst)
{

Loading…
Cancel
Save