@@ -417,7 +417,7 @@ Expression ParseNullCoalescingOperator()
417
417
// => operator - Added Support for projection operator
418
418
Expression ParseLambdaOperator ( )
419
419
{
420
- Expression expr = ParseConditionalOr ( ) ;
420
+ Expression expr = ParseOrOperator ( ) ;
421
421
if ( _textParser . CurrentToken . Id == TokenId . Lambda && _it . Type == expr . Type )
422
422
{
423
423
_textParser . NextToken ( ) ;
@@ -445,29 +445,29 @@ Expression ParseIsNull()
445
445
}
446
446
447
447
// ||, or operator
448
- Expression ParseConditionalOr ( )
448
+ Expression ParseOrOperator ( )
449
449
{
450
- Expression left = ParseConditionalAnd ( ) ;
450
+ Expression left = ParseAndOperator ( ) ;
451
451
while ( _textParser . CurrentToken . Id == TokenId . DoubleBar || TokenIdentifierIs ( "or" ) )
452
452
{
453
453
Token op = _textParser . CurrentToken ;
454
454
_textParser . NextToken ( ) ;
455
- Expression right = ParseConditionalAnd ( ) ;
455
+ Expression right = ParseAndOperator ( ) ;
456
456
CheckAndPromoteOperands ( typeof ( ILogicalSignatures ) , op . Text , ref left , ref right , op . Pos ) ;
457
457
left = Expression . OrElse ( left , right ) ;
458
458
}
459
459
return left ;
460
460
}
461
461
462
462
// &&, and operator
463
- Expression ParseConditionalAnd ( )
463
+ Expression ParseAndOperator ( )
464
464
{
465
465
Expression left = ParseIn ( ) ;
466
466
while ( _textParser . CurrentToken . Id == TokenId . DoubleAmphersand || TokenIdentifierIs ( "and" ) )
467
467
{
468
468
Token op = _textParser . CurrentToken ;
469
469
_textParser . NextToken ( ) ;
470
- Expression right = ParseComparison ( ) ;
470
+ Expression right = ParseComparisonOperator ( ) ;
471
471
CheckAndPromoteOperands ( typeof ( ILogicalSignatures ) , op . Text , ref left , ref right , op . Pos ) ;
472
472
left = Expression . AndAlso ( left , right ) ;
473
473
}
@@ -479,7 +479,7 @@ Expression ParseConditionalAnd()
479
479
// Adapted from ticket submitted by github user mlewis9548
480
480
Expression ParseIn ( )
481
481
{
482
- Expression left = ParseLogicalAndOr ( ) ;
482
+ Expression left = ParseLogicalAndOrOperator ( ) ;
483
483
Expression accumulate = left ;
484
484
485
485
while ( TokenIdentifierIs ( "in" ) )
@@ -557,14 +557,14 @@ Expression ParseIn()
557
557
}
558
558
559
559
// &, | bitwise operators
560
- Expression ParseLogicalAndOr ( )
560
+ Expression ParseLogicalAndOrOperator ( )
561
561
{
562
- Expression left = ParseComparison ( ) ;
562
+ Expression left = ParseComparisonOperator ( ) ;
563
563
while ( _textParser . CurrentToken . Id == TokenId . Amphersand || _textParser . CurrentToken . Id == TokenId . Bar )
564
564
{
565
565
Token op = _textParser . CurrentToken ;
566
566
_textParser . NextToken ( ) ;
567
- Expression right = ParseComparison ( ) ;
567
+ Expression right = ParseComparisonOperator ( ) ;
568
568
569
569
if ( left . Type . GetTypeInfo ( ) . IsEnum )
570
570
{
@@ -600,9 +600,9 @@ Expression ParseLogicalAndOr()
600
600
}
601
601
602
602
// =, ==, !=, <>, >, >=, <, <= operators
603
- Expression ParseComparison ( )
603
+ Expression ParseComparisonOperator ( )
604
604
{
605
- Expression left = ParseShift ( ) ;
605
+ Expression left = ParseShiftOperator ( ) ;
606
606
while ( _textParser . CurrentToken . Id == TokenId . Equal || _textParser . CurrentToken . Id == TokenId . DoubleEqual ||
607
607
_textParser . CurrentToken . Id == TokenId . ExclamationEqual || _textParser . CurrentToken . Id == TokenId . LessGreater ||
608
608
_textParser . CurrentToken . Id == TokenId . GreaterThan || _textParser . CurrentToken . Id == TokenId . GreaterThanEqual ||
@@ -612,7 +612,7 @@ Expression ParseComparison()
612
612
TypeConverter typeConverter ;
613
613
Token op = _textParser . CurrentToken ;
614
614
_textParser . NextToken ( ) ;
615
- Expression right = ParseShift ( ) ;
615
+ Expression right = ParseShiftOperator ( ) ;
616
616
bool isEquality = op . Id == TokenId . Equal || op . Id == TokenId . DoubleEqual || op . Id == TokenId . ExclamationEqual ;
617
617
618
618
if ( isEquality && ( ! left . Type . GetTypeInfo ( ) . IsValueType && ! right . Type . GetTypeInfo ( ) . IsValueType || left . Type == typeof ( Guid ) && right . Type == typeof ( Guid ) ) )
@@ -728,7 +728,7 @@ private object ParseConstantExpressionToEnum(int pos, Type leftType, ConstantExp
728
728
}
729
729
730
730
// <<, >> operators
731
- Expression ParseShift ( )
731
+ Expression ParseShiftOperator ( )
732
732
{
733
733
Expression left = ParseAdditive ( ) ;
734
734
while ( _textParser . CurrentToken . Id == TokenId . DoubleLessThan || _textParser . CurrentToken . Id == TokenId . DoubleGreaterThan )
@@ -1113,6 +1113,7 @@ Expression ParseIif()
1113
1113
Expression [ ] args = ParseArgumentList ( ) ;
1114
1114
if ( args . Length != 3 )
1115
1115
throw ParseError ( errorPos , Res . IifRequiresThreeArgs ) ;
1116
+
1116
1117
return GenerateConditional ( args [ 0 ] , args [ 1 ] , args [ 2 ] , errorPos ) ;
1117
1118
}
1118
1119
@@ -1138,6 +1139,7 @@ Expression GenerateConditional(Expression test, Expression expr1, Expression exp
1138
1139
string type2 = expr2 != NullLiteral ? expr2 . Type . Name : "null" ;
1139
1140
if ( expr1As2 != null )
1140
1141
throw ParseError ( errorPos , Res . BothTypesConvertToOther , type1 , type2 ) ;
1142
+
1141
1143
throw ParseError ( errorPos , Res . NeitherTypeConvertsToOther , type1 , type2 ) ;
1142
1144
}
1143
1145
}
@@ -1257,6 +1259,7 @@ Expression ParseLambdaInvocation(LambdaExpression lambda)
1257
1259
MethodBase method ;
1258
1260
if ( FindMethod ( lambda . Type , "Invoke" , false , args , out method ) != 1 )
1259
1261
throw ParseError ( errorPos , Res . ArgsIncompatibleWithLambda ) ;
1262
+
1260
1263
return Expression . Invoke ( lambda , args ) ;
1261
1264
}
1262
1265
@@ -1268,6 +1271,7 @@ Expression ParseTypeAccess(Type type)
1268
1271
{
1269
1272
if ( ! type . GetTypeInfo ( ) . IsValueType || IsNullableType ( type ) )
1270
1273
throw ParseError ( errorPos , Res . TypeHasNoNullableForm , GetTypeName ( type ) ) ;
1274
+
1271
1275
type = typeof ( Nullable < > ) . MakeGenericType ( type ) ;
1272
1276
_textParser . NextToken ( ) ;
1273
1277
}
0 commit comments