Browse Source

C# parser bugfix: casts to non-builtin nullable types

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/2.0@1144 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 20 years ago
parent
commit
c020c5848d
  1. 2055
      src/Libraries/NRefactory/Project/Src/Parser/CSharp/Parser.cs
  2. 3
      src/Libraries/NRefactory/Project/Src/Parser/CSharp/cs.ATG
  3. 12
      src/Libraries/NRefactory/Test/Parser/Expressions/CastExpressionTests.cs

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

File diff suppressed because it is too large Load Diff

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

@ -140,6 +140,9 @@ bool IsTypeNameForTypeCast(ref Token pt)
} }
pt = Peek(); pt = Peek();
} }
if (pt.kind == Tokens.Question) {
pt = Peek();
}
if (pt.kind == Tokens.Times || pt.kind == Tokens.OpenSquareBracket) { if (pt.kind == Tokens.Times || pt.kind == Tokens.OpenSquareBracket) {
return IsPointerOrDims(ref pt); return IsPointerOrDims(ref pt);
} }

12
src/Libraries/NRefactory/Test/Parser/Expressions/CastExpressionTests.cs

@ -37,7 +37,7 @@ namespace ICSharpCode.NRefactory.Tests.AST
} }
[Test] [Test]
public void NullableCastExpression() public void NullablePrimitiveCastExpression()
{ {
CastExpression ce = ParseUtilCSharp.ParseExpression<CastExpression>("(int?)o"); CastExpression ce = ParseUtilCSharp.ParseExpression<CastExpression>("(int?)o");
Assert.AreEqual("System.Nullable", ce.CastTo.SystemType); Assert.AreEqual("System.Nullable", ce.CastTo.SystemType);
@ -46,6 +46,16 @@ namespace ICSharpCode.NRefactory.Tests.AST
Assert.AreEqual(CastType.Cast, ce.CastType); Assert.AreEqual(CastType.Cast, ce.CastType);
} }
[Test]
public void NullableCastExpression()
{
CastExpression ce = ParseUtilCSharp.ParseExpression<CastExpression>("(MyType?)o");
Assert.AreEqual("System.Nullable", ce.CastTo.SystemType);
Assert.AreEqual("MyType", ce.CastTo.GenericTypes[0].Type);
Assert.IsTrue(ce.Expression is IdentifierExpression);
Assert.AreEqual(CastType.Cast, ce.CastType);
}
[Test] [Test]
public void NullableTryCastExpression() public void NullableTryCastExpression()
{ {

Loading…
Cancel
Save