Browse Source

Remove some parenthesis

pull/1/head^2
David Srbecký 18 years ago
parent
commit
29b95cd28c
  1. 7
      src/AstMetodBodyBuilder.cs
  2. 38
      src/StackExpression.cs

7
src/AstMetodBodyBuilder.cs

@ -76,7 +76,12 @@ namespace Decompiler @@ -76,7 +76,12 @@ namespace Decompiler
allArgs.AddRange(args);
// Args generated by nested expressions (which must be closed)
foreach(StackExpression nestedExpr in expr.LastArguments) {
allArgs.Add(new Ast.ParenthesizedExpression((Ast.Expression)MakeCodeDomExpression(methodDef, nestedExpr)));
Ast.Expression astExpr = (Ast.Expression)MakeCodeDomExpression(methodDef, nestedExpr);
if (nestedExpr.MustBeParenthesized) {
allArgs.Add(new Ast.ParenthesizedExpression(astExpr));
} else {
allArgs.Add(astExpr);
}
}
return MakeCodeDomExpression(methodDef, expr.ExpressionByteCode, allArgs.ToArray());
}

38
src/StackExpression.cs

@ -99,5 +99,43 @@ namespace Decompiler @@ -99,5 +99,43 @@ namespace Decompiler
{
this.expressionByteCode = expressionByteCode;
}
public bool MustBeParenthesized {
get {
switch(this.ExpressionByteCode.OpCode.Code) {
#region Arithmetic
case Code.Neg:
case Code.Not:
#endregion
#region Arrays
case Code.Newarr:
case Code.Ldlen:
case Code.Ldelem_I:
case Code.Ldelem_I1:
case Code.Ldelem_I2:
case Code.Ldelem_I4:
case Code.Ldelem_I8:
case Code.Ldelem_U1:
case Code.Ldelem_U2:
case Code.Ldelem_U4:
case Code.Ldelem_R4:
case Code.Ldelem_R8:
case Code.Ldelem_Ref:
#endregion
case Code.Call:
case Code.Ldarg:
case Code.Ldc_I4:
case Code.Ldc_I8:
case Code.Ldc_R4:
case Code.Ldc_R8:
case Code.Ldloc:
case Code.Ldnull:
case Code.Ldstr:
return false;
default:
return true;
}
}
}
}
}

Loading…
Cancel
Save