Browse Source

Fixed parser error when 'await' is used as statement expression.

pull/18/head
Daniel Grunwald 14 years ago
parent
commit
a7958379ee
  1. 2
      src/Libraries/NRefactory/Project/Src/Parser/CSharp/CSharpParser.cs
  2. 17
      src/Libraries/NRefactory/Test/Parser/Expressions/UnaryOperatorExpressionTests.cs

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

@ -469,7 +469,7 @@ namespace ICSharpCode.NRefactory.Parser.CSharp @@ -469,7 +469,7 @@ namespace ICSharpCode.NRefactory.Parser.CSharp
/* True, if lookahead is a primitive type keyword, or */
/* if it is a type declaration followed by an ident */
bool IsLocalVarDecl () {
if (IsYieldStatement()) {
if (IsYieldStatement() || la.kind == Tokens.Await) {
return false;
}
if ((Tokens.TypeKW[la.kind] && Peek(1).kind != Tokens.Dot) || la.kind == Tokens.Void) {

17
src/Libraries/NRefactory/Test/Parser/Expressions/UnaryOperatorExpressionTests.cs

@ -109,6 +109,23 @@ namespace ICSharpCode.NRefactory.Tests.Ast @@ -109,6 +109,23 @@ namespace ICSharpCode.NRefactory.Tests.Ast
Assert.AreEqual(UnaryOperatorType.Await, nested.Op);
Assert.IsTrue(nested.Expression is IdentifierExpression);
}
[Test]
public void AwaitStaticMethodCall()
{
var uoe = ParseUtilCSharp.ParseExpression<UnaryOperatorExpression>("await Task.WhenAll(a, b)");
Assert.AreEqual(UnaryOperatorType.Await, uoe.Op);
Assert.IsTrue(uoe.Expression is InvocationExpression);
}
[Test]
public void AwaitStaticMethodCallStatement()
{
var es = ParseUtilCSharp.ParseStatement<ExpressionStatement>("await Task.WhenAll(a, b);");
UnaryOperatorExpression uoe = (UnaryOperatorExpression)es.Expression;
Assert.AreEqual(UnaryOperatorType.Await, uoe.Op);
Assert.IsTrue(uoe.Expression is InvocationExpression);
}
#endregion
#region VB.NET

Loading…
Cancel
Save