From 1dfda502ea39172c865b360b215ea683240cbf3f Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Sat, 24 Feb 2018 18:06:01 +0100 Subject: [PATCH] Remove redundant 'box' opcodes. This eliminates some unnecessary (object)-casts in generic code. --- .../IL/Transforms/ExpressionTransforms.cs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/ICSharpCode.Decompiler/IL/Transforms/ExpressionTransforms.cs b/ICSharpCode.Decompiler/IL/Transforms/ExpressionTransforms.cs index 59c8446ba..f844c6a8b 100644 --- a/ICSharpCode.Decompiler/IL/Transforms/ExpressionTransforms.cs +++ b/ICSharpCode.Decompiler/IL/Transforms/ExpressionTransforms.cs @@ -155,6 +155,17 @@ namespace ICSharpCode.Decompiler.IL.Transforms } } + protected internal override void VisitBox(Box inst) + { + inst.Argument.AcceptVisitor(this); + if (inst.Type.IsReferenceType == true && inst.Argument.ResultType == inst.ResultType) { + // For reference types, box is a no-op. + context.Step("box ref-type(arg) => arg", inst); + inst.Argument.AddILRange(inst.ILRange); + inst.ReplaceWith(inst.Argument); + } + } + protected internal override void VisitLdElema(LdElema inst) { base.VisitLdElema(inst);