Browse Source

Merge 3.0 to trunk.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@6366 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
pull/1/head
Daniel Grunwald 16 years ago
parent
commit
054c5397f3
  1. 2463
      src/Libraries/NRefactory/Project/Src/Parser/CSharp/Parser.cs
  2. 7
      src/Libraries/NRefactory/Project/Src/Parser/CSharp/cs.ATG
  3. 6
      src/Libraries/NRefactory/Project/Src/PrettyPrinter/CSharp/CSharpOutputVisitor.cs
  4. 8
      src/Libraries/NRefactory/Test/Output/CSharp/VBNetToCSharpConverterTest.cs
  5. 20
      src/Libraries/NRefactory/Test/Parser/Expressions/ConditionalExpressionTests.cs

2463
src/Libraries/NRefactory/Project/Src/Parser/CSharp/Parser.cs

File diff suppressed because it is too large Load Diff

7
src/Libraries/NRefactory/Project/Src/Parser/CSharp/cs.ATG

@ -192,18 +192,21 @@ CS @@ -192,18 +192,21 @@ CS
UsingDirective
(.
string qualident = null; TypeReference aliasedType = null;
string alias = null;
.)
=
"using" (. Location startPos = t.Location; .)
[ IF (IdentAndDoubleColon()) Identifier (. alias = t.val; .) "::" ]
Qualident<out qualident>
[ "=" NonArrayType<out aliasedType> ]
";" (.
if (qualident != null && qualident.Length > 0) {
string name = (alias != null && alias != "global") ? alias + "." + qualident : qualident;
INode node;
if (aliasedType != null) {
node = new UsingDeclaration(qualident, aliasedType);
node = new UsingDeclaration(name, aliasedType);
} else {
node = new UsingDeclaration(qualident);
node = new UsingDeclaration(name);
}
node.StartLocation = startPos;
node.EndLocation = t.EndLocation;

6
src/Libraries/NRefactory/Project/Src/PrettyPrinter/CSharp/CSharpOutputVisitor.cs

@ -2927,7 +2927,11 @@ namespace ICSharpCode.NRefactory.PrettyPrinter @@ -2927,7 +2927,11 @@ namespace ICSharpCode.NRefactory.PrettyPrinter
public override object TrackedVisitConditionalExpression(ConditionalExpression conditionalExpression, object data)
{
TrackVisit(conditionalExpression.Condition, data);
if (conditionalExpression.Condition is ConditionalExpression) {
TrackedVisitParenthesizedExpression(new ParenthesizedExpression(conditionalExpression.Condition), data);
} else {
TrackVisit(conditionalExpression.Condition, data);
}
if (this.prettyPrintOptions.ConditionalOperatorBeforeConditionSpace) {
outputFormatter.Space();
}

8
src/Libraries/NRefactory/Test/Output/CSharp/VBNetToCSharpConverterTest.cs

@ -783,6 +783,14 @@ static bool InitStaticVariableHelper(Microsoft.VisualBasic.CompilerServices.Stat @@ -783,6 +783,14 @@ static bool InitStaticVariableHelper(Microsoft.VisualBasic.CompilerServices.Stat
TestStatement("Dim x As Integer = CInt(obj)", "int x = Convert.ToInt32(obj);");
}
[Test]
public void ConditionalExprPrecedence()
{
TestStatement("Dim x As Integer = If(If(a,b,c),d,e)", "int x = (a ? b : c) ? d : e;");
TestStatement("Dim x As Integer = If(a,If(b,c,d),e)", "int x = a ? b ? c : d : e;");
TestStatement("Dim x As Integer = If(a,b,If(c,d,e))", "int x = a ? b : c ? d : e;");
}
[Test]
public void XmlElement()
{

20
src/Libraries/NRefactory/Test/Parser/Expressions/ConditionalExpressionTests.cs

@ -88,6 +88,26 @@ namespace ICSharpCode.NRefactory.Tests.Ast @@ -88,6 +88,26 @@ namespace ICSharpCode.NRefactory.Tests.Ast
Assert.IsTrue(ce.TrueExpression is UnaryOperatorExpression);
Assert.IsTrue(ce.FalseExpression is PrimitiveExpression);
}
[Test]
public void CSharpRepeatedConditionalExpr()
{
ConditionalExpression ce = ParseUtilCSharp.ParseExpression<ConditionalExpression>("a ? b : c ? d : e");
Assert.AreEqual("a", ((IdentifierExpression)ce.Condition).Identifier);
Assert.AreEqual("b", ((IdentifierExpression)ce.TrueExpression).Identifier);
Assert.IsTrue(ce.FalseExpression is ConditionalExpression);
}
[Test]
public void CSharpNestedConditionalExpr()
{
ConditionalExpression ce = ParseUtilCSharp.ParseExpression<ConditionalExpression>("a ? b ? c : d : e");
Assert.AreEqual("a", ((IdentifierExpression)ce.Condition).Identifier);
Assert.AreEqual("e", ((IdentifierExpression)ce.FalseExpression).Identifier);
Assert.IsTrue(ce.TrueExpression is ConditionalExpression);
}
#endregion
#region VB.NET

Loading…
Cancel
Save