Browse Source

Fix PrettifyAssignments for dynamic expressions

pull/1165/head
Siegfried Pammer 7 years ago
parent
commit
62da416d6c
  1. 8
      ICSharpCode.Decompiler/CSharp/Transforms/PrettifyAssignments.cs

8
ICSharpCode.Decompiler/CSharp/Transforms/PrettifyAssignments.cs

@ -37,6 +37,8 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
/// </remarks> /// </remarks>
class PrettifyAssignments : DepthFirstAstVisitor, IAstTransform class PrettifyAssignments : DepthFirstAstVisitor, IAstTransform
{ {
TransformContext context;
public override void VisitAssignmentExpression(AssignmentExpression assignment) public override void VisitAssignmentExpression(AssignmentExpression assignment)
{ {
base.VisitAssignmentExpression(assignment); base.VisitAssignmentExpression(assignment);
@ -52,13 +54,12 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
} }
} }
} }
// TODO: context.Settings.IntroduceIncrementAndDecrement if (context.Settings.IntroduceIncrementAndDecrement && assignment.Operator == AssignmentOperatorType.Add || assignment.Operator == AssignmentOperatorType.Subtract) {
if (assignment.Operator == AssignmentOperatorType.Add || assignment.Operator == AssignmentOperatorType.Subtract) {
// detect increment/decrement // detect increment/decrement
var rr = assignment.Right.GetResolveResult(); var rr = assignment.Right.GetResolveResult();
if (rr.IsCompileTimeConstant && rr.Type.IsCSharpPrimitiveIntegerType() && CSharpPrimitiveCast.Cast(rr.Type.GetTypeCode(), 1, false).Equals(rr.ConstantValue)) { if (rr.IsCompileTimeConstant && rr.Type.IsCSharpPrimitiveIntegerType() && CSharpPrimitiveCast.Cast(rr.Type.GetTypeCode(), 1, false).Equals(rr.ConstantValue)) {
// only if it's not a custom operator // only if it's not a custom operator
if (assignment.Annotation<IL.CallInstruction>() == null && assignment.Annotation<IL.UserDefinedCompoundAssign>() == null) { if (assignment.Annotation<IL.CallInstruction>() == null && assignment.Annotation<IL.UserDefinedCompoundAssign>() == null && assignment.Annotation<IL.DynamicCompoundAssign>() == null) {
UnaryOperatorType type; UnaryOperatorType type;
// When the parent is an expression statement, pre- or post-increment doesn't matter; // When the parent is an expression statement, pre- or post-increment doesn't matter;
// so we can pick post-increment which is more commonly used (for (int i = 0; i < x; i++)) // so we can pick post-increment which is more commonly used (for (int i = 0; i < x; i++))
@ -121,6 +122,7 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
void IAstTransform.Run(AstNode node, TransformContext context) void IAstTransform.Run(AstNode node, TransformContext context)
{ {
this.context = context;
node.AcceptVisitor(this); node.AcceptVisitor(this);
} }
} }

Loading…
Cancel
Save