Browse Source

fix first part of #653

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

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

@ -513,8 +513,10 @@ namespace ICSharpCode.NRefactory.VB.Visitors @@ -513,8 +513,10 @@ namespace ICSharpCode.NRefactory.VB.Visitors
{
Expression expr;
if (!string.IsNullOrEmpty(primitiveExpression.Value as string) || primitiveExpression.Value is char)
if (!string.IsNullOrEmpty(primitiveExpression.Value as string))
expr = ConvertToConcat(primitiveExpression.Value.ToString());
else if (primitiveExpression.Value is char)
expr = ConvertToSpecialChar((char)primitiveExpression.Value);
else
expr = new PrimitiveExpression(primitiveExpression.Value);
@ -530,24 +532,15 @@ namespace ICSharpCode.NRefactory.VB.Visitors @@ -530,24 +532,15 @@ namespace ICSharpCode.NRefactory.VB.Visitors
string part;
switch (literal[i]) {
case '\0':
part = literal.Substring(start, i - start);
if (!string.IsNullOrEmpty(part))
parts.Push(new PrimitiveExpression(part));
parts.Push(new IdentifierExpression("vbNullChar"));
start = i + 1;
break;
case '\b':
part = literal.Substring(start, i - start);
if (!string.IsNullOrEmpty(part))
parts.Push(new PrimitiveExpression(part));
parts.Push(new IdentifierExpression("vbBack"));
start = i + 1;
break;
case '\f':
case '\n':
case '\t':
case '\v':
part = literal.Substring(start, i - start);
if (!string.IsNullOrEmpty(part))
parts.Push(new PrimitiveExpression(part));
parts.Push(new IdentifierExpression("vbFormFeed"));
parts.Push(ConvertToSpecialChar(literal[i]));
start = i + 1;
break;
case '\r':
@ -561,27 +554,6 @@ namespace ICSharpCode.NRefactory.VB.Visitors @@ -561,27 +554,6 @@ namespace ICSharpCode.NRefactory.VB.Visitors
parts.Push(new IdentifierExpression("vbCr"));
start = i + 1;
break;
case '\n':
part = literal.Substring(start, i - start);
if (!string.IsNullOrEmpty(part))
parts.Push(new PrimitiveExpression(part));
parts.Push(new IdentifierExpression("vbLf"));
start = i + 1;
break;
case '\t':
part = literal.Substring(start, i - start);
if (!string.IsNullOrEmpty(part))
parts.Push(new PrimitiveExpression(part));
parts.Push(new IdentifierExpression("vbTab"));
start = i + 1;
break;
case '\v':
part = literal.Substring(start, i - start);
if (!string.IsNullOrEmpty(part))
parts.Push(new PrimitiveExpression(part));
parts.Push(new IdentifierExpression("vbVerticalTab"));
start = i + 1;
break;
default:
if ((int)literal[i] > 255) {
part = literal.Substring(start, i - start);
@ -608,6 +580,30 @@ namespace ICSharpCode.NRefactory.VB.Visitors @@ -608,6 +580,30 @@ namespace ICSharpCode.NRefactory.VB.Visitors
return current;
}
Expression ConvertToSpecialChar(char ch)
{
switch (ch) {
case '\0':
return new IdentifierExpression("vbNullChar");
case '\b':
return new IdentifierExpression("vbBack");
case '\f':
return new IdentifierExpression("vbFormFeed");
case '\r':
return new IdentifierExpression("vbCr");
case '\n':
return new IdentifierExpression("vbLf");
case '\t':
return new IdentifierExpression("vbTab");
case '\v':
return new IdentifierExpression("vbVerticalTab");
default:
if (ch > 255)
return new InvocationExpression(new IdentifierExpression("ChrW"), new PrimitiveExpression((int)ch));
return new PrimitiveExpression(ch);
}
}
public AstNode VisitSizeOfExpression(CSharp.SizeOfExpression sizeOfExpression, object data)
{

Loading…
Cancel
Save