Browse Source

improve conversion of VB array bounds expressions

pull/703/head
Siegfried Pammer 9 years ago
parent
commit
fe6e17c14d
  1. 15
      NRefactory.VB/ICSharpCode.NRefactory.VB/Visitors/CSharpToVBConverterVisitor.cs

15
NRefactory.VB/ICSharpCode.NRefactory.VB/Visitors/CSharpToVBConverterVisitor.cs

@ -98,12 +98,23 @@ namespace ICSharpCode.NRefactory.VB.Visitors @@ -98,12 +98,23 @@ namespace ICSharpCode.NRefactory.VB.Visitors
Type = (AstType)arrayCreateExpression.Type.AcceptVisitor(this, data),
Initializer = (ArrayInitializerExpression)arrayCreateExpression.Initializer.AcceptVisitor(this, data)
};
ConvertNodes(arrayCreateExpression.Arguments, expr.Arguments,
n => new BinaryOperatorExpression(n, BinaryOperatorType.Subtract, new PrimitiveExpression(1)));
ConvertNodes(arrayCreateExpression.Arguments, expr.Arguments, ReduceArrayUpperBoundExpression);
ConvertNodes(arrayCreateExpression.AdditionalArraySpecifiers, expr.AdditionalArraySpecifiers);
return EndNode(arrayCreateExpression, expr);
}
Expression ReduceArrayUpperBoundExpression(Expression expression)
{
if (expression is PrimitiveExpression)
{
var numericLiteral = expression as PrimitiveExpression;
int? upperBound = numericLiteral.Value as int?;
if (upperBound.HasValue)
return new PrimitiveExpression(upperBound.Value - 1);
}
return new BinaryOperatorExpression(expression, BinaryOperatorType.Subtract, new PrimitiveExpression(1));
}
public AstNode VisitArrayInitializerExpression(CSharp.ArrayInitializerExpression arrayInitializerExpression, object data)
{

Loading…
Cancel
Save