Browse Source

add EmptyExpression conversion, improve fixed-Statement conversion

pull/254/head
Siegfried Pammer 14 years ago
parent
commit
7d8d3195f0
  1. 2
      NRefactory/ICSharpCode.NRefactory.VB/Ast/Expressions/ArrayCreateExpression.cs
  2. 59
      NRefactory/ICSharpCode.NRefactory.VB/Ast/Expressions/EmptyExpression.cs
  3. 2
      NRefactory/ICSharpCode.NRefactory.VB/IAstVisitor.cs
  4. 1
      NRefactory/ICSharpCode.NRefactory.VB/ICSharpCode.NRefactory.VB.csproj
  5. 7
      NRefactory/ICSharpCode.NRefactory.VB/OutputVisitor/OutputVisitor.cs
  6. 13
      NRefactory/ICSharpCode.NRefactory.VB/Visitors/CSharpToVBConverterVisitor.cs

2
NRefactory/ICSharpCode.NRefactory.VB/Ast/Expressions/ArrayCreateExpression.cs

@ -61,6 +61,4 @@ namespace ICSharpCode.NRefactory.VB.Ast
return o != null && this.Type.DoMatch(o.Type, match) && this.Arguments.DoMatch(o.Arguments, match) && this.AdditionalArraySpecifiers.DoMatch(o.AdditionalArraySpecifiers, match) && this.Initializer.DoMatch(o.Initializer, match); return o != null && this.Type.DoMatch(o.Type, match) && this.Arguments.DoMatch(o.Arguments, match) && this.AdditionalArraySpecifiers.DoMatch(o.AdditionalArraySpecifiers, match) && this.Initializer.DoMatch(o.Initializer, match);
} }
} }
} }

59
NRefactory/ICSharpCode.NRefactory.VB/Ast/Expressions/EmptyExpression.cs

@ -0,0 +1,59 @@
// Copyright (c) 2011 AlphaSierraPapa for the SharpDevelop Team
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this
// software and associated documentation files (the "Software"), to deal in the Software
// without restriction, including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
// to whom the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or
// substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
using System;
namespace ICSharpCode.NRefactory.VB.Ast
{
public class EmptyExpression : Expression
{
AstLocation location;
public override AstLocation StartLocation {
get {
return location;
}
}
public override AstLocation EndLocation {
get {
return location;
}
}
public EmptyExpression()
{
}
public EmptyExpression(AstLocation location)
{
this.location = location;
}
public override S AcceptVisitor<T, S>(IAstVisitor<T, S> visitor, T data)
{
return visitor.VisitEmptyExpression(this, data);
}
protected internal override bool DoMatch(AstNode other, PatternMatching.Match match)
{
var o = other as EmptyExpression;
return o != null;
}
}
}

2
NRefactory/ICSharpCode.NRefactory.VB/IAstVisitor.cs

@ -112,6 +112,6 @@ namespace ICSharpCode.NRefactory.VB {
S VisitQueryExpression(QueryExpression queryExpression, T data); S VisitQueryExpression(QueryExpression queryExpression, T data);
S VisitEmptyExpression(EmptyExpression emptyExpression, T data);
} }
} }

1
NRefactory/ICSharpCode.NRefactory.VB/ICSharpCode.NRefactory.VB.csproj

@ -54,6 +54,7 @@
<Compile Include="Ast\Expressions\BinaryOperatorExpression.cs" /> <Compile Include="Ast\Expressions\BinaryOperatorExpression.cs" />
<Compile Include="Ast\Expressions\CastExpression.cs" /> <Compile Include="Ast\Expressions\CastExpression.cs" />
<Compile Include="Ast\Expressions\ConditionalExpression.cs" /> <Compile Include="Ast\Expressions\ConditionalExpression.cs" />
<Compile Include="Ast\Expressions\EmptyExpression.cs" />
<Compile Include="Ast\Expressions\Expression.cs" /> <Compile Include="Ast\Expressions\Expression.cs" />
<Compile Include="Ast\Expressions\FieldInitializerExpression.cs" /> <Compile Include="Ast\Expressions\FieldInitializerExpression.cs" />
<Compile Include="Ast\Expressions\GetTypeExpression.cs" /> <Compile Include="Ast\Expressions\GetTypeExpression.cs" />

7
NRefactory/ICSharpCode.NRefactory.VB/OutputVisitor/OutputVisitor.cs

@ -2404,5 +2404,12 @@ namespace ICSharpCode.NRefactory.VB
new OutputVisitor(writer, new VBFormattingOptions()).WritePrimitiveValue(primitiveExpression.Value); new OutputVisitor(writer, new VBFormattingOptions()).WritePrimitiveValue(primitiveExpression.Value);
return writer.ToString(); return writer.ToString();
} }
public object VisitEmptyExpression(EmptyExpression emptyExpression, object data)
{
StartNode(emptyExpression);
return EndNode(emptyExpression);
}
} }
} }

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

@ -594,7 +594,11 @@ namespace ICSharpCode.NRefactory.VB.Visitors
Operator = UnaryOperatorType.AddressOf Operator = UnaryOperatorType.AddressOf
}; };
break; break;
// case ICSharpCode.NRefactory.CSharp.UnaryOperatorType.Dereference: case ICSharpCode.NRefactory.CSharp.UnaryOperatorType.Dereference:
expr = new InvocationExpression();
((InvocationExpression)expr).Target = new IdentifierExpression() { Identifier = "__Dereference" };
((InvocationExpression)expr).Arguments.Add((Expression)unaryOperatorExpression.Expression.AcceptVisitor(this, data));
break;
default: default:
throw new Exception("Invalid value for UnaryOperatorType"); throw new Exception("Invalid value for UnaryOperatorType");
} }
@ -610,8 +614,7 @@ namespace ICSharpCode.NRefactory.VB.Visitors
public AstNode VisitEmptyExpression(CSharp.EmptyExpression emptyExpression, object data) public AstNode VisitEmptyExpression(CSharp.EmptyExpression emptyExpression, object data)
{ {
// TODO : not used in ILSpy currently return EndNode(emptyExpression, new EmptyExpression());
throw new NotImplementedException();
} }
public AstNode VisitQueryExpression(CSharp.QueryExpression queryExpression, object data) public AstNode VisitQueryExpression(CSharp.QueryExpression queryExpression, object data)
@ -931,6 +934,10 @@ namespace ICSharpCode.NRefactory.VB.Visitors
stmt.Body = (BlockStatement)fixedStatement.EmbeddedStatement.AcceptVisitor(this, data); stmt.Body = (BlockStatement)fixedStatement.EmbeddedStatement.AcceptVisitor(this, data);
foreach (var ident in stmt.Body.Descendants.OfType<IdentifierExpression>()) {
ident.ReplaceWith(expr => ((Expression)expr).Invoke("AddrOfPinnedObject"));
}
return EndNode(fixedStatement, stmt); return EndNode(fixedStatement, stmt);
} }

Loading…
Cancel
Save