From 59f894b9dce6157a8ca3e7de91039b8c64a86a25 Mon Sep 17 00:00:00 2001 From: stefanofraccaro Date: Tue, 27 Jan 2015 16:45:26 +0100 Subject: [PATCH] Update CodeDomConvertVisitor.cs The function ExecuteMathOperator does not handle correctly the CodeBinaryOperatorType.Subtract operator. I made this patch to workaround the problem. --- .../OutputVisitor/CodeDomConvertVisitor.cs | 28 ++++++++++++++++--- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/OutputVisitor/CodeDomConvertVisitor.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/OutputVisitor/CodeDomConvertVisitor.cs index bd82827d88f..7e1859182df 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/OutputVisitor/CodeDomConvertVisitor.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/OutputVisitor/CodeDomConvertVisitor.cs @@ -585,10 +585,30 @@ CodeObject IAstVisitor.VisitUnaryOperatorExpression(UnaryOperatorExp CodeBinaryOperatorType.ValueEquality, new CodePrimitiveExpression(false)); case UnaryOperatorType.Minus: - return new CodeBinaryOperatorExpression( - new CodePrimitiveExpression(0), - CodeBinaryOperatorType.Subtract, - Convert(unaryOperatorExpression.Expression)); + //HACK: workaround for CodeDomSerializerBase::ExecuteMathOperator() + string source = unaryOperatorExpression.Expression.ToString(); + switch (source[source.Length-1]) { + 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: return Convert(unaryOperatorExpression.Expression); default: