Browse Source

implemented unchecked/checked expression, pointer access and so on

pull/254/head
Siegfried Pammer 14 years ago
parent
commit
a6719771a6
  1. 4
      NRefactory/ICSharpCode.NRefactory.VB/Ast/Expressions/Expression.cs
  2. 4
      NRefactory/ICSharpCode.NRefactory.VB/Ast/Expressions/MemberAccessExpression.cs
  3. 12
      NRefactory/ICSharpCode.NRefactory.VB/OutputVisitor/OutputVisitor.cs
  4. 34
      NRefactory/ICSharpCode.NRefactory.VB/Visitors/CSharpToVBConverterVisitor.cs

4
NRefactory/ICSharpCode.NRefactory.VB/Ast/Expressions/Expression.cs

@ -37,7 +37,7 @@ namespace ICSharpCode.NRefactory.VB.Ast
/// </summary> /// </summary>
public MemberAccessExpression Member(string memberName) public MemberAccessExpression Member(string memberName)
{ {
return new MemberAccessExpression { Target = this, Member = memberName }; return new MemberAccessExpression { Target = this, MemberName = memberName };
} }
/// <summary> /// <summary>
@ -64,7 +64,7 @@ namespace ICSharpCode.NRefactory.VB.Ast
InvocationExpression ie = new InvocationExpression(); InvocationExpression ie = new InvocationExpression();
MemberAccessExpression mre = new MemberAccessExpression(); MemberAccessExpression mre = new MemberAccessExpression();
mre.Target = this; mre.Target = this;
mre.Member = methodName; mre.MemberName = methodName;
mre.TypeArguments.AddRange(typeArguments); mre.TypeArguments.AddRange(typeArguments);
ie.Target = mre; ie.Target = mre;
ie.Arguments.AddRange(arguments); ie.Arguments.AddRange(arguments);

4
NRefactory/ICSharpCode.NRefactory.VB/Ast/Expressions/MemberAccessExpression.cs

@ -16,7 +16,7 @@ namespace ICSharpCode.NRefactory.VB.Ast
set { SetChildByRole(Roles.Expression, value); } set { SetChildByRole(Roles.Expression, value); }
} }
public Identifier Member { public Identifier MemberName {
get { return GetChildByRole(Roles.Identifier); } get { return GetChildByRole(Roles.Identifier); }
set { SetChildByRole(Roles.Identifier, value); } set { SetChildByRole(Roles.Identifier, value); }
} }
@ -30,7 +30,7 @@ namespace ICSharpCode.NRefactory.VB.Ast
var expr = other as MemberAccessExpression; var expr = other as MemberAccessExpression;
return expr != null && return expr != null &&
Target.DoMatch(expr.Target, match) && Target.DoMatch(expr.Target, match) &&
Member.DoMatch(expr.Member, match) && MemberName.DoMatch(expr.MemberName, match) &&
TypeArguments.DoMatch(expr.TypeArguments, match); TypeArguments.DoMatch(expr.TypeArguments, match);
} }

12
NRefactory/ICSharpCode.NRefactory.VB/OutputVisitor/OutputVisitor.cs

@ -446,7 +446,7 @@ namespace ICSharpCode.NRefactory.VB
memberAccessExpression.Target.AcceptVisitor(this, data); memberAccessExpression.Target.AcceptVisitor(this, data);
WriteToken(".", MemberAccessExpression.Roles.Dot); WriteToken(".", MemberAccessExpression.Roles.Dot);
memberAccessExpression.Member.AcceptVisitor(this, data); memberAccessExpression.MemberName.AcceptVisitor(this, data);
WriteTypeArguments(memberAccessExpression.TypeArguments); WriteTypeArguments(memberAccessExpression.TypeArguments);
return EndNode(memberAccessExpression); return EndNode(memberAccessExpression);
@ -1644,10 +1644,12 @@ namespace ICSharpCode.NRefactory.VB
foreach (var specifier in arrayCreateExpression.AdditionalArraySpecifiers) { foreach (var specifier in arrayCreateExpression.AdditionalArraySpecifiers) {
specifier.AcceptVisitor(this, data); specifier.AcceptVisitor(this, data);
} }
Space(); if (!arrayCreateExpression.Initializer.IsNull) {
WriteToken("=", ArrayCreateExpression.Roles.Assign); Space();
Space(); WriteToken("=", ArrayCreateExpression.Roles.Assign);
arrayCreateExpression.Initializer.AcceptVisitor(this, data); Space();
arrayCreateExpression.Initializer.AcceptVisitor(this, data);
}
return EndNode(arrayCreateExpression); return EndNode(arrayCreateExpression);
} }

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

@ -304,7 +304,8 @@ namespace ICSharpCode.NRefactory.VB.Visitors
public AstNode VisitCheckedExpression(CSharp.CheckedExpression checkedExpression, object data) public AstNode VisitCheckedExpression(CSharp.CheckedExpression checkedExpression, object data)
{ {
throw new NotImplementedException(); blocks.Peek().AddChild(new Comment(" The following expression was wrapped in a checked-expression", false), AstNode.Roles.Comment);
return EndNode(checkedExpression, checkedExpression.Expression.AcceptVisitor(this, data));
} }
public AstNode VisitConditionalExpression(CSharp.ConditionalExpression conditionalExpression, object data) public AstNode VisitConditionalExpression(CSharp.ConditionalExpression conditionalExpression, object data)
@ -385,7 +386,7 @@ namespace ICSharpCode.NRefactory.VB.Visitors
var memberAccessExpression = new MemberAccessExpression(); var memberAccessExpression = new MemberAccessExpression();
memberAccessExpression.Target = (Expression)memberReferenceExpression.Target.AcceptVisitor(this, data); memberAccessExpression.Target = (Expression)memberReferenceExpression.Target.AcceptVisitor(this, data);
memberAccessExpression.Member = new Identifier(memberReferenceExpression.MemberName, AstLocation.Empty); memberAccessExpression.MemberName = new Identifier(memberReferenceExpression.MemberName, AstLocation.Empty);
ConvertNodes(memberReferenceExpression.TypeArguments, memberAccessExpression.TypeArguments); ConvertNodes(memberReferenceExpression.TypeArguments, memberAccessExpression.TypeArguments);
return EndNode(memberReferenceExpression, memberAccessExpression); return EndNode(memberReferenceExpression, memberAccessExpression);
@ -442,14 +443,14 @@ namespace ICSharpCode.NRefactory.VB.Visitors
public AstNode VisitPointerReferenceExpression(CSharp.PointerReferenceExpression pointerReferenceExpression, object data) public AstNode VisitPointerReferenceExpression(CSharp.PointerReferenceExpression pointerReferenceExpression, object data)
{ {
throw new NotImplementedException(); return EndNode(pointerReferenceExpression,((Expression)pointerReferenceExpression.Target.AcceptVisitor(this, data)).Invoke("Dereference").Member(pointerReferenceExpression.MemberName));
} }
public AstNode VisitPrimitiveExpression(CSharp.PrimitiveExpression primitiveExpression, object data) public AstNode VisitPrimitiveExpression(CSharp.PrimitiveExpression primitiveExpression, object data)
{ {
Expression expr; Expression expr;
if ((primitiveExpression.Value is string || primitiveExpression.Value is char) && primitiveExpression.Value.ToString().IndexOfAny(new[] {'\r', '\n'}) > -1) if ((primitiveExpression.Value is string || primitiveExpression.Value is char) && primitiveExpression.Value.ToString().IndexOfAny(new[] {'\r', '\n', '\t'}) > -1)
expr = ConvertToConcat(primitiveExpression.Value.ToString()); expr = ConvertToConcat(primitiveExpression.Value.ToString());
else else
expr = new PrimitiveExpression(primitiveExpression.Value); expr = new PrimitiveExpression(primitiveExpression.Value);
@ -503,7 +504,13 @@ namespace ICSharpCode.NRefactory.VB.Visitors
public AstNode VisitSizeOfExpression(CSharp.SizeOfExpression sizeOfExpression, object data) public AstNode VisitSizeOfExpression(CSharp.SizeOfExpression sizeOfExpression, object data)
{ {
throw new NotImplementedException(); return EndNode(
sizeOfExpression,
new InvocationExpression(
new IdentifierExpression() { Identifier = "__SizeOf" },
new TypeReferenceExpression((AstType)sizeOfExpression.Type.AcceptVisitor(this, data))
)
);
} }
public AstNode VisitStackAllocExpression(CSharp.StackAllocExpression stackAllocExpression, object data) public AstNode VisitStackAllocExpression(CSharp.StackAllocExpression stackAllocExpression, object data)
@ -597,7 +604,8 @@ namespace ICSharpCode.NRefactory.VB.Visitors
public AstNode VisitUncheckedExpression(CSharp.UncheckedExpression uncheckedExpression, object data) public AstNode VisitUncheckedExpression(CSharp.UncheckedExpression uncheckedExpression, object data)
{ {
throw new NotImplementedException(); blocks.Peek().AddChild(new Comment(" The following expression was wrapped in a unchecked-expression", false), AstNode.Roles.Comment);
return EndNode(uncheckedExpression, uncheckedExpression.Expression.AcceptVisitor(this, data));
} }
public AstNode VisitEmptyExpression(CSharp.EmptyExpression emptyExpression, object data) public AstNode VisitEmptyExpression(CSharp.EmptyExpression emptyExpression, object data)
@ -844,8 +852,12 @@ namespace ICSharpCode.NRefactory.VB.Visitors
public AstNode VisitCheckedStatement(CSharp.CheckedStatement checkedStatement, object data) public AstNode VisitCheckedStatement(CSharp.CheckedStatement checkedStatement, object data)
{ {
// overflow/underflow checks are on by default in VB blocks.Peek().AddChild(new Comment(" The following expression was wrapped in a checked-expression", false), AstNode.Roles.Comment);
throw new NotImplementedException(); var body = (BlockStatement)checkedStatement.Body.AcceptVisitor(this, data);
blocks.Peek().AddRange(body);
return EndNode<AstNode>(checkedStatement, null);
} }
public AstNode VisitContinueStatement(CSharp.ContinueStatement continueStatement, object data) public AstNode VisitContinueStatement(CSharp.ContinueStatement continueStatement, object data)
@ -906,9 +918,9 @@ namespace ICSharpCode.NRefactory.VB.Visitors
Identifiers = { new VariableIdentifier { Name = decl.Name } }, Identifiers = { new VariableIdentifier { Name = decl.Name } },
Type = new SimpleType("GCHandle"), Type = new SimpleType("GCHandle"),
Initializer = new InvocationExpression( Initializer = new InvocationExpression(
new MemberAccessExpression { Target = new IdentifierExpression { Identifier = "GCHandle" }, Member = "Alloc" }, new MemberAccessExpression { Target = new IdentifierExpression { Identifier = "GCHandle" }, MemberName = "Alloc" },
(Expression)decl.Initializer.AcceptVisitor(this, data), (Expression)decl.Initializer.AcceptVisitor(this, data),
new MemberAccessExpression { Target = new IdentifierExpression { Identifier = "GCHandleType" }, Member = "Pinned" } new MemberAccessExpression { Target = new IdentifierExpression { Identifier = "GCHandleType" }, MemberName = "Pinned" }
) )
}; };
variables.Variables.Add(v); variables.Variables.Add(v);
@ -1238,7 +1250,7 @@ namespace ICSharpCode.NRefactory.VB.Visitors
var result = new InvocationExpression( var result = new InvocationExpression(
new MemberAccessExpression() { new MemberAccessExpression() {
Target = new InstanceExpression(constructorInitializer.ConstructorInitializerType == CSharp.ConstructorInitializerType.This ? InstanceExpressionType.Me : InstanceExpressionType.MyBase, AstLocation.Empty), Target = new InstanceExpression(constructorInitializer.ConstructorInitializerType == CSharp.ConstructorInitializerType.This ? InstanceExpressionType.Me : InstanceExpressionType.MyBase, AstLocation.Empty),
Member = new Identifier("New", AstLocation.Empty) MemberName = new Identifier("New", AstLocation.Empty)
} }
); );
ConvertNodes(constructorInitializer.Arguments, result.Arguments); ConvertNodes(constructorInitializer.Arguments, result.Arguments);

Loading…
Cancel
Save