Browse Source

Fixed C# parser bug when CheckedExpression occurs in an ExpressionStatement.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/3.0@5743 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
pull/1/head
Daniel Grunwald 15 years ago
parent
commit
5843430b26
  1. 2
      src/Libraries/NRefactory/Project/Src/Parser/CSharp/CSharpParser.cs
  2. 12
      src/Libraries/NRefactory/Test/Parser/Statements/CheckedStatementTests.cs
  3. 13
      src/Libraries/NRefactory/Test/Parser/Statements/UncheckedStatementTests.cs

2
src/Libraries/NRefactory/Project/Src/Parser/CSharp/CSharpParser.cs

@ -381,7 +381,7 @@ namespace ICSharpCode.NRefactory.Parser.CSharp @@ -381,7 +381,7 @@ namespace ICSharpCode.NRefactory.Parser.CSharp
/* True, if "checked" or "unchecked" are followed by "{" */
bool UnCheckedAndLBrace () {
return la.kind == Tokens.Checked || la.kind == Tokens.Unchecked &&
return (la.kind == Tokens.Checked || la.kind == Tokens.Unchecked) &&
Peek(1).kind == Tokens.OpenCurlyBrace;
}

12
src/Libraries/NRefactory/Test/Parser/Statements/CheckedStatementTests.cs

@ -23,10 +23,20 @@ namespace ICSharpCode.NRefactory.Tests.Ast @@ -23,10 +23,20 @@ namespace ICSharpCode.NRefactory.Tests.Ast
CheckedStatement checkedStatement = ParseUtilCSharp.ParseStatement<CheckedStatement>("checked { }");
Assert.IsFalse(checkedStatement.Block.IsNull);
}
[Test]
public void CSharpCheckedStatementAndExpressionTest()
{
CheckedStatement checkedStatement = ParseUtilCSharp.ParseStatement<CheckedStatement>("checked { checked(++i); }");
Assert.IsFalse(checkedStatement.Block.IsNull);
ExpressionStatement es = (ExpressionStatement)checkedStatement.Block.Children[0];
CheckedExpression ce = (CheckedExpression)es.Expression;
Assert.IsInstanceOf<UnaryOperatorExpression>(ce.Expression);
}
#endregion
#region VB.NET
// No VB.NET representation
// No VB.NET representation
#endregion
}
}

13
src/Libraries/NRefactory/Test/Parser/Statements/UncheckedStatementTests.cs

@ -23,10 +23,21 @@ namespace ICSharpCode.NRefactory.Tests.Ast @@ -23,10 +23,21 @@ namespace ICSharpCode.NRefactory.Tests.Ast
UncheckedStatement uncheckedStatement = ParseUtilCSharp.ParseStatement<UncheckedStatement>("unchecked { }");
Assert.IsFalse(uncheckedStatement.Block.IsNull);
}
[Test]
public void CSharpUncheckedStatementAndExpressionTest()
{
UncheckedStatement uncheckedStatement = ParseUtilCSharp.ParseStatement<UncheckedStatement>("unchecked { unchecked(++i); }");
Assert.IsFalse(uncheckedStatement.Block.IsNull);
ExpressionStatement es = (ExpressionStatement)uncheckedStatement.Block.Children[0];
UncheckedExpression ce = (UncheckedExpression)es.Expression;
Assert.IsInstanceOf<UnaryOperatorExpression>(ce.Expression);
}
#endregion
#region VB.NET
// No VB.NET representation
// No VB.NET representation
#endregion
}
}

Loading…
Cancel
Save