Browse Source

fix #367 - VB output issues

pull/368/merge
Siegfried Pammer 12 years ago
parent
commit
74238630cf
  1. 15
      ICSharpCode.Decompiler/DecompilerSettings.cs
  2. 4
      ICSharpCode.Decompiler/ILAst/ILAstOptimizer.cs
  3. 1
      ILSpy/VB/VBLanguage.cs
  4. 4
      NRefactory/ICSharpCode.NRefactory.VB/Ast/TypeMembers/FieldDeclaration.cs
  5. 22
      NRefactory/ICSharpCode.NRefactory.VB/OutputVisitor/OutputVisitor.cs
  6. 7
      NRefactory/ICSharpCode.NRefactory.VB/Visitors/CSharpToVBConverterVisitor.cs

15
ICSharpCode.Decompiler/DecompilerSettings.cs

@ -283,6 +283,21 @@ namespace ICSharpCode.Decompiler @@ -283,6 +283,21 @@ namespace ICSharpCode.Decompiler
}
}
bool makeAssignmentExpressions = true;
/// <summary>
/// Gets/Sets whether to use assignment expressions such as in while ((count = Do()) != 0) ;
/// </summary>
public bool MakeAssignmentExpressions {
get { return makeAssignmentExpressions; }
set {
if (makeAssignmentExpressions != value) {
makeAssignmentExpressions = value;
OnPropertyChanged("MakeAssignmentExpressions");
}
}
}
bool alwaysGenerateExceptionVariableForCatchBlocks = false;
/// <summary>

4
ICSharpCode.Decompiler/ILAst/ILAstOptimizer.cs

@ -170,11 +170,15 @@ namespace ICSharpCode.Decompiler.ILAst @@ -170,11 +170,15 @@ namespace ICSharpCode.Decompiler.ILAst
modified |= block.RunOptimization(TransformObjectInitializers);
if (abortBeforeStep == ILAstOptimizationStep.MakeAssignmentExpression) return;
if (context.Settings.MakeAssignmentExpressions) {
modified |= block.RunOptimization(MakeAssignmentExpression);
}
modified |= block.RunOptimization(MakeCompoundAssignments);
if (abortBeforeStep == ILAstOptimizationStep.IntroducePostIncrement) return;
if (context.Settings.IntroduceIncrementAndDecrement) {
modified |= block.RunOptimization(IntroducePostIncrement);
}
if (abortBeforeStep == ILAstOptimizationStep.InlineExpressionTreeParameterDeclarations) return;
if (context.Settings.ExpressionTrees) {

1
ILSpy/VB/VBLanguage.cs

@ -424,6 +424,7 @@ namespace ICSharpCode.ILSpy.VB @@ -424,6 +424,7 @@ namespace ICSharpCode.ILSpy.VB
if (isSingleMember)
settings.UsingDeclarations = false;
settings.IntroduceIncrementAndDecrement = false;
settings.MakeAssignmentExpressions = false;
settings.QueryExpressions = false;
settings.AlwaysGenerateExceptionVariableForCatchBlocks = true;
return new AstBuilder(

4
NRefactory/ICSharpCode.NRefactory.VB/Ast/TypeMembers/FieldDeclaration.cs

@ -64,6 +64,10 @@ namespace ICSharpCode.NRefactory.VB.Ast @@ -64,6 +64,10 @@ namespace ICSharpCode.NRefactory.VB.Ast
public bool HasNullableSpecifier { get; set; }
public AstNodeCollection<Expression> ArraySizeSpecifiers {
get { return GetChildrenByRole (Roles.Argument); }
}
public AstNodeCollection<ArraySpecifier> ArraySpecifiers {
get { return GetChildrenByRole(ComposedType.ArraySpecifierRole); }
}

22
NRefactory/ICSharpCode.NRefactory.VB/OutputVisitor/OutputVisitor.cs

@ -897,10 +897,6 @@ namespace ICSharpCode.NRefactory.VB @@ -897,10 +897,6 @@ namespace ICSharpCode.NRefactory.VB
// formatter.Space();
// }
formatter.WriteToken(token);
if (token == ",") {
lastWritten = LastWritten.Whitespace;
Space();
}
// if (token == "+")
// lastWritten = LastWritten.Plus;
// else if (token == "-")
@ -1297,6 +1293,8 @@ namespace ICSharpCode.NRefactory.VB @@ -1297,6 +1293,8 @@ namespace ICSharpCode.NRefactory.VB
WriteIdentifier(variableIdentifier.Name.Name);
if (variableIdentifier.HasNullableSpecifier)
WriteToken("?", VariableIdentifier.Roles.QuestionMark);
if (variableIdentifier.ArraySizeSpecifiers.Count > 0)
WriteCommaSeparatedListInParenthesis(variableIdentifier.ArraySizeSpecifiers, false);
WriteArraySpecifiers(variableIdentifier.ArraySpecifiers);
return EndNode(variableIdentifier);
@ -1652,10 +1650,12 @@ namespace ICSharpCode.NRefactory.VB @@ -1652,10 +1650,12 @@ namespace ICSharpCode.NRefactory.VB
foreach (var specifier in arrayCreateExpression.AdditionalArraySpecifiers) {
specifier.AcceptVisitor(this, data);
}
if (!arrayCreateExpression.Initializer.IsNull) {
Space();
WriteToken("=", ArrayCreateExpression.Roles.Assign);
if (lastWritten != LastWritten.Whitespace)
Space();
if (arrayCreateExpression.Initializer.IsNull) {
WriteToken("{", ArrayInitializerExpression.Roles.LBrace);
WriteToken("}", ArrayInitializerExpression.Roles.RBrace);
} else {
arrayCreateExpression.Initializer.AcceptVisitor(this, data);
}
return EndNode(arrayCreateExpression);
@ -2189,6 +2189,8 @@ namespace ICSharpCode.NRefactory.VB @@ -2189,6 +2189,8 @@ namespace ICSharpCode.NRefactory.VB
variableInitializer.Identifier.AcceptVisitor(this, data);
if (!variableInitializer.Type.IsNull) {
if (lastWritten != LastWritten.Whitespace)
Space();
WriteKeyword("As");
variableInitializer.Type.AcceptVisitor(this, data);
}
@ -2207,6 +2209,8 @@ namespace ICSharpCode.NRefactory.VB @@ -2207,6 +2209,8 @@ namespace ICSharpCode.NRefactory.VB
StartNode(variableDeclaratorWithTypeAndInitializer);
WriteCommaSeparatedList(variableDeclaratorWithTypeAndInitializer.Identifiers);
if (lastWritten != LastWritten.Whitespace)
Space();
WriteKeyword("As");
variableDeclaratorWithTypeAndInitializer.Type.AcceptVisitor(this, data);
if (!variableDeclaratorWithTypeAndInitializer.Initializer.IsNull) {
@ -2224,6 +2228,8 @@ namespace ICSharpCode.NRefactory.VB @@ -2224,6 +2228,8 @@ namespace ICSharpCode.NRefactory.VB
StartNode(variableDeclaratorWithObjectCreation);
WriteCommaSeparatedList(variableDeclaratorWithObjectCreation.Identifiers);
if (lastWritten != LastWritten.Whitespace)
Space();
WriteKeyword("As");
variableDeclaratorWithObjectCreation.Initializer.AcceptVisitor(this, data);
@ -2672,7 +2678,7 @@ namespace ICSharpCode.NRefactory.VB @@ -2672,7 +2678,7 @@ namespace ICSharpCode.NRefactory.VB
WriteKeyword("RemoveHandler");
addRemoveHandlerStatement.EventExpression.AcceptVisitor(this, data);
WriteToken(",", VBTokenNode.Roles.Comma);
Comma(addRemoveHandlerStatement.DelegateExpression);
addRemoveHandlerStatement.DelegateExpression.AcceptVisitor(this, data);
return EndNode(addRemoveHandlerStatement);

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

@ -98,7 +98,8 @@ namespace ICSharpCode.NRefactory.VB.Visitors @@ -98,7 +98,8 @@ namespace ICSharpCode.NRefactory.VB.Visitors
Type = (AstType)arrayCreateExpression.Type.AcceptVisitor(this, data),
Initializer = (ArrayInitializerExpression)arrayCreateExpression.Initializer.AcceptVisitor(this, data)
};
ConvertNodes(arrayCreateExpression.Arguments, expr.Arguments);
ConvertNodes(arrayCreateExpression.Arguments, expr.Arguments,
n => new BinaryOperatorExpression(n, BinaryOperatorType.Subtract, new PrimitiveExpression(1)));
ConvertNodes(arrayCreateExpression.AdditionalArraySpecifiers, expr.AdditionalArraySpecifiers);
return EndNode(arrayCreateExpression, expr);
@ -2213,10 +2214,12 @@ namespace ICSharpCode.NRefactory.VB.Visitors @@ -2213,10 +2214,12 @@ namespace ICSharpCode.NRefactory.VB.Visitors
throw new NotImplementedException();
}
void ConvertNodes<T>(IEnumerable<CSharp.AstNode> nodes, VB.AstNodeCollection<T> result) where T : VB.AstNode
void ConvertNodes<T>(IEnumerable<CSharp.AstNode> nodes, VB.AstNodeCollection<T> result, Func<T, T> transform = null) where T: VB.AstNode
{
foreach (var node in nodes) {
T n = (T)node.AcceptVisitor(this, null);
if (transform != null)
n = transform(n);
if (n != null)
result.Add(n);
}

Loading…
Cancel
Save