1
1
/******************************************************************************************************
2
2
Title : ExpressionEvaluator (https://github.com/codingseb/ExpressionEvaluator)
3
- Version : 1.4.40 .0
3
+ Version : 1.4.41 .0
4
4
(if last digit (the forth) is not a zero, the version is an intermediate version and can be unstable)
5
5
6
6
Author : Coding Seb
@@ -242,56 +242,56 @@ protected enum TryBlockEvaluatedState
242
242
{
243
243
new Dictionary < ExpressionOperator , Func < dynamic , dynamic , object > > ( )
244
244
{
245
- { ExpressionOperator . UnaryPlus , ( dynamic _ , dynamic right ) => + right } ,
246
- { ExpressionOperator . UnaryMinus , ( dynamic _ , dynamic right ) => - right } ,
247
- { ExpressionOperator . LogicalNegation , ( dynamic _ , dynamic right ) => ! right } ,
248
- { ExpressionOperator . BitwiseComplement , ( dynamic _ , dynamic right ) => ~ right } ,
249
- { ExpressionOperator . Cast , ( dynamic left , dynamic right ) => ChangeType ( right , left ) } ,
245
+ { ExpressionOperator . UnaryPlus , ( _ , right ) => + right } ,
246
+ { ExpressionOperator . UnaryMinus , ( _ , right ) => - right } ,
247
+ { ExpressionOperator . LogicalNegation , ( _ , right ) => ! right } ,
248
+ { ExpressionOperator . BitwiseComplement , ( _ , right ) => ~ right } ,
249
+ { ExpressionOperator . Cast , ( left , right ) => ChangeType ( right , left ) } ,
250
250
} ,
251
251
new Dictionary < ExpressionOperator , Func < dynamic , dynamic , object > > ( )
252
252
{
253
- { ExpressionOperator . Multiply , ( dynamic left , dynamic right ) => left * right } ,
254
- { ExpressionOperator . Divide , ( dynamic left , dynamic right ) => left / right } ,
255
- { ExpressionOperator . Modulo , ( dynamic left , dynamic right ) => left % right } ,
253
+ { ExpressionOperator . Multiply , ( left , right ) => left * right } ,
254
+ { ExpressionOperator . Divide , ( left , right ) => left / right } ,
255
+ { ExpressionOperator . Modulo , ( left , right ) => left % right } ,
256
256
} ,
257
257
new Dictionary < ExpressionOperator , Func < dynamic , dynamic , object > > ( )
258
258
{
259
- { ExpressionOperator . Plus , ( dynamic left , dynamic right ) => left + right } ,
260
- { ExpressionOperator . Minus , ( dynamic left , dynamic right ) => left - right } ,
259
+ { ExpressionOperator . Plus , ( left , right ) => left + right } ,
260
+ { ExpressionOperator . Minus , ( left , right ) => left - right } ,
261
261
} ,
262
262
new Dictionary < ExpressionOperator , Func < dynamic , dynamic , object > > ( )
263
263
{
264
- { ExpressionOperator . ShiftBitsLeft , ( dynamic left , dynamic right ) => left << right } ,
265
- { ExpressionOperator . ShiftBitsRight , ( dynamic left , dynamic right ) => left >> right } ,
264
+ { ExpressionOperator . ShiftBitsLeft , ( left , right ) => left << right } ,
265
+ { ExpressionOperator . ShiftBitsRight , ( left , right ) => left >> right } ,
266
266
} ,
267
267
new Dictionary < ExpressionOperator , Func < dynamic , dynamic , object > > ( )
268
268
{
269
- { ExpressionOperator . Lower , ( dynamic left , dynamic right ) => left < right } ,
270
- { ExpressionOperator . Greater , ( dynamic left , dynamic right ) => left > right } ,
271
- { ExpressionOperator . LowerOrEqual , ( dynamic left , dynamic right ) => left <= right } ,
272
- { ExpressionOperator . GreaterOrEqual , ( dynamic left , dynamic right ) => left >= right } ,
273
- { ExpressionOperator . Is , ( dynamic left , dynamic right ) => left != null && ( ( ( ClassOrEnumType ) right ) . Type ) . IsAssignableFrom ( left . GetType ( ) ) } ,
269
+ { ExpressionOperator . Lower , ( left , right ) => left < right } ,
270
+ { ExpressionOperator . Greater , ( left , right ) => left > right } ,
271
+ { ExpressionOperator . LowerOrEqual , ( left , right ) => left <= right } ,
272
+ { ExpressionOperator . GreaterOrEqual , ( left , right ) => left >= right } ,
273
+ { ExpressionOperator . Is , ( left , right ) => left != null && ( ( ( ClassOrEnumType ) right ) . Type ) . IsAssignableFrom ( left . GetType ( ) ) } ,
274
274
} ,
275
275
new Dictionary < ExpressionOperator , Func < dynamic , dynamic , object > > ( )
276
276
{
277
- { ExpressionOperator . Equal , ( dynamic left , dynamic right ) => left == right } ,
278
- { ExpressionOperator . NotEqual , ( dynamic left , dynamic right ) => left != right } ,
277
+ { ExpressionOperator . Equal , ( left , right ) => left == right } ,
278
+ { ExpressionOperator . NotEqual , ( left , right ) => left != right } ,
279
279
} ,
280
280
new Dictionary < ExpressionOperator , Func < dynamic , dynamic , object > > ( )
281
281
{
282
- { ExpressionOperator . LogicalAnd , ( dynamic left , dynamic right ) => left & right } ,
282
+ { ExpressionOperator . LogicalAnd , ( left , right ) => left & right } ,
283
283
} ,
284
284
new Dictionary < ExpressionOperator , Func < dynamic , dynamic , object > > ( )
285
285
{
286
- { ExpressionOperator . LogicalXor , ( dynamic left , dynamic right ) => left ^ right } ,
286
+ { ExpressionOperator . LogicalXor , ( left , right ) => left ^ right } ,
287
287
} ,
288
288
new Dictionary < ExpressionOperator , Func < dynamic , dynamic , object > > ( )
289
289
{
290
- { ExpressionOperator . LogicalOr , ( dynamic left , dynamic right ) => left | right } ,
290
+ { ExpressionOperator . LogicalOr , ( left , right ) => left | right } ,
291
291
} ,
292
292
new Dictionary < ExpressionOperator , Func < dynamic , dynamic , object > > ( )
293
293
{
294
- { ExpressionOperator . ConditionalAnd , ( dynamic left , dynamic right ) => {
294
+ { ExpressionOperator . ConditionalAnd , ( left , right ) => {
295
295
if ( left is BubbleExceptionContainer leftExceptionContainer )
296
296
{
297
297
leftExceptionContainer . Throw ( ) ;
@@ -314,7 +314,7 @@ protected enum TryBlockEvaluatedState
314
314
} ,
315
315
new Dictionary < ExpressionOperator , Func < dynamic , dynamic , object > > ( )
316
316
{
317
- { ExpressionOperator . ConditionalOr , ( dynamic left , dynamic right ) => {
317
+ { ExpressionOperator . ConditionalOr , ( left , right ) => {
318
318
if ( left is BubbleExceptionContainer leftExceptionContainer )
319
319
{
320
320
leftExceptionContainer . Throw ( ) ;
@@ -337,7 +337,7 @@ protected enum TryBlockEvaluatedState
337
337
} ,
338
338
new Dictionary < ExpressionOperator , Func < dynamic , dynamic , object > > ( )
339
339
{
340
- { ExpressionOperator . NullCoalescing , ( dynamic left , dynamic right ) => left ?? right } ,
340
+ { ExpressionOperator . NullCoalescing , ( left , right ) => left ?? right } ,
341
341
} ,
342
342
} ;
343
343
@@ -3206,7 +3206,7 @@ protected virtual object ProcessStack(Stack<object> stack)
3206
3206
. Select ( e => e is NullConditionalNullValue ? null : e )
3207
3207
. ToList ( ) ;
3208
3208
3209
- OperatorsEvaluations . ToList ( ) . ForEach ( ( IDictionary < ExpressionOperator , Func < dynamic , dynamic , object > > operatorEvalutationsDict ) =>
3209
+ OperatorsEvaluations . ToList ( ) . ForEach ( operatorEvalutationsDict =>
3210
3210
{
3211
3211
for ( int i = list . Count - 1 ; i >= 0 ; i -- )
3212
3212
{
@@ -3296,11 +3296,11 @@ void EvaluateFirstPreviousUnaryOp(int j)
3296
3296
{
3297
3297
list [ i ] = operatorEvalutationsDict [ eOp ] ( left , right ) ;
3298
3298
3299
- if ( left is BubbleExceptionContainer && right is string )
3299
+ if ( left is BubbleExceptionContainer && ( right == null || right is string ) )
3300
3300
{
3301
3301
list [ i ] = left ; //Bubble up the causing error
3302
3302
}
3303
- else if ( right is BubbleExceptionContainer && left is string )
3303
+ else if ( right is BubbleExceptionContainer && ( left is string || left is null ) )
3304
3304
{
3305
3305
list [ i ] = right ; //Bubble up the causing error
3306
3306
}
@@ -3481,7 +3481,7 @@ protected virtual bool GetLambdaExpression(string expression, Stack<object> stac
3481
3481
3482
3482
bool inScriptAtDeclaration = inScript ;
3483
3483
3484
- stack . Push ( new InternalDelegate ( ( object [ ] args ) =>
3484
+ stack . Push ( new InternalDelegate ( args =>
3485
3485
{
3486
3486
var vars = new Dictionary < string , object > ( variables ) ;
3487
3487
0 commit comments