Browse Source

Update CodeDomConvertVisitor.cs

The function ExecuteMathOperator does not handle correctly the CodeBinaryOperatorType.Subtract operator.
I made this patch to workaround the problem.
pull/648/head
stefanofraccaro 11 years ago
parent
commit
59f894b9dc
  1. 28
      src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/OutputVisitor/CodeDomConvertVisitor.cs

28
src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/OutputVisitor/CodeDomConvertVisitor.cs

@ -585,10 +585,30 @@ namespace ICSharpCode.NRefactory.CSharp
CodeBinaryOperatorType.ValueEquality, CodeBinaryOperatorType.ValueEquality,
new CodePrimitiveExpression(false)); new CodePrimitiveExpression(false));
case UnaryOperatorType.Minus: case UnaryOperatorType.Minus:
return new CodeBinaryOperatorExpression( //HACK: workaround for CodeDomSerializerBase::ExecuteMathOperator()
new CodePrimitiveExpression(0), string source = unaryOperatorExpression.Expression.ToString();
CodeBinaryOperatorType.Subtract, switch (source[source.Length-1]) {
Convert(unaryOperatorExpression.Expression)); case 'F':
float fVal = float.Parse(source.Substring(0, source.Length-1));
return new CodeBinaryOperatorExpression(
new CodePrimitiveExpression(-fVal),
CodeBinaryOperatorType.Add,
new CodePrimitiveExpression(0));
case 'D':
double dVal = double.Parse(source.Substring(0, source.Length-1));
return new CodeBinaryOperatorExpression(
new CodePrimitiveExpression(-dVal),
CodeBinaryOperatorType.Add,
new CodePrimitiveExpression(0));
default:
long lVal = long.Parse(source);
return new CodeBinaryOperatorExpression(
new CodePrimitiveExpression(-lVal),
CodeBinaryOperatorType.Add,
new CodePrimitiveExpression(0));
}
case UnaryOperatorType.Plus: case UnaryOperatorType.Plus:
return Convert(unaryOperatorExpression.Expression); return Convert(unaryOperatorExpression.Expression);
default: default:

Loading…
Cancel
Save