diff --git a/src/Libraries/NRefactory/Project/Src/Lexer/CSharp/KeywordList.txt b/src/Libraries/NRefactory/Project/Src/Lexer/CSharp/KeywordList.txt index 78ac086439..3903be4821 100644 --- a/src/Libraries/NRefactory/Project/Src/Lexer/CSharp/KeywordList.txt +++ b/src/Libraries/NRefactory/Project/Src/Lexer/CSharp/KeywordList.txt @@ -161,7 +161,7 @@ OverloadableBinaryOp("+", "-", "*", "/", "%", "&", "|", "^", "<<", "==", "!=", " TypeKW("char", "bool", "object", "string", "sbyte", "byte", "short", "ushort", "int", "uint", "long", "ulong", "float", "double", "decimal") UnaryHead("+", "-", "!", "~", "*", "++", "--", "&") AssnStartOp("+", "-", "!", "~", "*") -CastFollower(Identifier, Literal, "(", "new", "this", "base", "null", "checked", "unchecked", "typeof", "sizeof", "delegate", @OverloadableUnaryOp) +CastFollower(Identifier, Literal, "(", "new", "this", "base", "null", "checked", "unchecked", "typeof", "sizeof", "delegate", @OverloadableUnaryOp, @UnaryOp) AssgnOps("=", "+=", "-=", "*=", "/=", "%=", "&=", "|=", "<<=") UnaryOp("+", "-", "!", "~", "*", "++", "--", "&") TypeDeclarationKW("class", "interface", "struct", "enum", "delegate") diff --git a/src/Libraries/NRefactory/Project/Src/Lexer/CSharp/Tokens.cs b/src/Libraries/NRefactory/Project/Src/Lexer/CSharp/Tokens.cs index 8a3c439214..01a8f24e53 100644 --- a/src/Libraries/NRefactory/Project/Src/Lexer/CSharp/Tokens.cs +++ b/src/Libraries/NRefactory/Project/Src/Lexer/CSharp/Tokens.cs @@ -158,7 +158,7 @@ namespace ICSharpCode.NRefactory.Parser.CSharp public static BitArray TypeKW = NewSet(Char, Bool, Object, String, Sbyte, Byte, Short, Ushort, Int, Uint, Long, Ulong, Float, Double, Decimal); public static BitArray UnaryHead = NewSet(Plus, Minus, Not, BitwiseComplement, Times, Increment, Decrement, BitwiseAnd); public static BitArray AssnStartOp = NewSet(Plus, Minus, Not, BitwiseComplement, Times); - public static BitArray CastFollower = NewSet(Identifier, Literal, OpenParenthesis, New, This, Base, Null, Checked, Unchecked, Typeof, Sizeof, Delegate, Minus, Not, BitwiseComplement, Increment, Decrement, True, False); + public static BitArray CastFollower = NewSet(Identifier, Literal, OpenParenthesis, New, This, Base, Null, Checked, Unchecked, Typeof, Sizeof, Delegate, Minus, Not, BitwiseComplement, Increment, Decrement, True, False, Plus, Minus, Not, BitwiseComplement, Times, Increment, Decrement, BitwiseAnd); public static BitArray AssgnOps = NewSet(Assign, PlusAssign, MinusAssign, TimesAssign, DivAssign, ModAssign, BitwiseAndAssign, BitwiseOrAssign, ShiftLeftAssign); public static BitArray UnaryOp = NewSet(Plus, Minus, Not, BitwiseComplement, Times, Increment, Decrement, BitwiseAnd); public static BitArray TypeDeclarationKW = NewSet(Class, Interface, Struct, Enum, Delegate); diff --git a/src/Libraries/NRefactory/Test/Parser/Expressions/ConditionalExpressionTests.cs b/src/Libraries/NRefactory/Test/Parser/Expressions/ConditionalExpressionTests.cs index 65623a03be..f78edc471c 100644 --- a/src/Libraries/NRefactory/Test/Parser/Expressions/ConditionalExpressionTests.cs +++ b/src/Libraries/NRefactory/Test/Parser/Expressions/ConditionalExpressionTests.cs @@ -38,6 +38,16 @@ namespace ICSharpCode.NRefactory.Tests.Ast Assert.IsTrue(ce.FalseExpression is FieldReferenceExpression); } + [Test] + public void CSharpConditionalIsWithNullableExpressionTest() + { + ConditionalExpression ce = ParseUtilCSharp.ParseExpression("a is b? ? a() : a.B"); + + Assert.IsTrue(ce.Condition is TypeOfIsExpression); + Assert.IsTrue(ce.TrueExpression is InvocationExpression); + Assert.IsTrue(ce.FalseExpression is FieldReferenceExpression); + } + [Test] public void CSharpConditionalIsExpressionTest2() { @@ -68,6 +78,16 @@ namespace ICSharpCode.NRefactory.Tests.Ast Assert.IsTrue(ce.TrueExpression is UnaryOperatorExpression); Assert.IsTrue(ce.FalseExpression is PrimitiveExpression); } + + [Test] + public void CSharpConditionalIsWithExplicitPositiveValue() + { + ConditionalExpression ce = ParseUtilCSharp.ParseExpression("a is b ? +1 : 1"); + + Assert.IsTrue(ce.Condition is TypeOfIsExpression); + Assert.IsTrue(ce.TrueExpression is UnaryOperatorExpression); + Assert.IsTrue(ce.FalseExpression is PrimitiveExpression); + } #endregion #region VB.NET