Browse Source

Fixed forum-16306: NRefactory can't parse ternary expressions containing -1

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/2.1@2484 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 19 years ago
parent
commit
0bb578ef69
  1. 2
      src/Libraries/NRefactory/Project/Src/Lexer/CSharp/KeywordList.txt
  2. 4
      src/Libraries/NRefactory/Project/Src/Lexer/CSharp/Tokens.cs
  3. 21
      src/Libraries/NRefactory/Test/Parser/Expressions/ConditionalExpressionTests.cs

2
src/Libraries/NRefactory/Project/Src/Lexer/CSharp/KeywordList.txt

@ -155,7 +155,7 @@ Pointer = "->" @@ -155,7 +155,7 @@ Pointer = "->"
#Sets
OverloadableUnaryOp("+", "!", "~", "++", "--", "true", "false")
OverloadableUnaryOp("-", "!", "~", "++", "--", "true", "false")
OverloadableBinaryOp("+", "-", "*", "/", "%", "&", "|", "^", "<<", "==", "!=", ">", "<", ">=", "<=")
TypeKW("char", "bool", "object", "string", "sbyte", "byte", "short", "ushort", "int", "uint", "long", "ulong", "float", "double", "decimal")

4
src/Libraries/NRefactory/Project/Src/Lexer/CSharp/Tokens.cs

@ -153,12 +153,12 @@ namespace ICSharpCode.NRefactory.Parser.CSharp @@ -153,12 +153,12 @@ namespace ICSharpCode.NRefactory.Parser.CSharp
}
return bitArray;
}
public static BitArray OverloadableUnaryOp = NewSet(Plus, Not, BitwiseComplement, Increment, Decrement, True, False);
public static BitArray OverloadableUnaryOp = NewSet(Minus, Not, BitwiseComplement, Increment, Decrement, True, False);
public static BitArray OverloadableBinaryOp = NewSet(Plus, Minus, Times, Div, Mod, BitwiseAnd, BitwiseOr, Xor, ShiftLeft, Equal, NotEqual, GreaterThan, LessThan, GreaterEqual, LessEqual);
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, Plus, 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);
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);

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

@ -47,6 +47,27 @@ namespace ICSharpCode.NRefactory.Tests.Ast @@ -47,6 +47,27 @@ namespace ICSharpCode.NRefactory.Tests.Ast
Assert.IsTrue(ce.TrueExpression is ParenthesizedExpression);
Assert.IsTrue(ce.FalseExpression is FieldReferenceExpression);
}
[Test]
public void CSharpConditionalExpressionNegativeValue()
{
ConditionalExpression ce = ParseUtilCSharp.ParseExpression<ConditionalExpression>("isNegative ? -1 : 1");
Assert.IsTrue(ce.Condition is IdentifierExpression);
Assert.IsTrue(ce.TrueExpression is UnaryOperatorExpression);
Assert.IsTrue(ce.FalseExpression is PrimitiveExpression);
}
[Test]
public void CSharpConditionalIsWithNegativeValue()
{
ConditionalExpression ce = ParseUtilCSharp.ParseExpression<ConditionalExpression>("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

Loading…
Cancel
Save