Skip to content

Commit 3858f06

Browse files
committed
Refactors expression evaluator operator evaluations
Streamlines operator evaluation logic by simplifying lambda expressions and using implicit typing, enhancing code readability. Improves bubbling up of exceptions and null handling during expression evaluation.
1 parent 3656130 commit 3858f06

File tree

1 file changed

+29
-29
lines changed

1 file changed

+29
-29
lines changed

CodingSeb.ExpressionEvaluator/ExpressionEvaluator.cs

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -242,56 +242,56 @@ protected enum TryBlockEvaluatedState
242242
{
243243
new Dictionary<ExpressionOperator, Func<dynamic, dynamic, object>>()
244244
{
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) },
250250
},
251251
new Dictionary<ExpressionOperator, Func<dynamic, dynamic, object>>()
252252
{
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 },
256256
},
257257
new Dictionary<ExpressionOperator, Func<dynamic, dynamic, object>>()
258258
{
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 },
261261
},
262262
new Dictionary<ExpressionOperator, Func<dynamic, dynamic, object>>()
263263
{
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 },
266266
},
267267
new Dictionary<ExpressionOperator, Func<dynamic, dynamic, object>>()
268268
{
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()) },
274274
},
275275
new Dictionary<ExpressionOperator, Func<dynamic, dynamic, object>>()
276276
{
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 },
279279
},
280280
new Dictionary<ExpressionOperator, Func<dynamic, dynamic, object>>()
281281
{
282-
{ExpressionOperator.LogicalAnd, (dynamic left, dynamic right) => left & right },
282+
{ExpressionOperator.LogicalAnd, (left, right) => left & right },
283283
},
284284
new Dictionary<ExpressionOperator, Func<dynamic, dynamic, object>>()
285285
{
286-
{ExpressionOperator.LogicalXor, (dynamic left, dynamic right) => left ^ right },
286+
{ExpressionOperator.LogicalXor, (left, right) => left ^ right },
287287
},
288288
new Dictionary<ExpressionOperator, Func<dynamic, dynamic, object>>()
289289
{
290-
{ExpressionOperator.LogicalOr, (dynamic left, dynamic right) => left | right },
290+
{ExpressionOperator.LogicalOr, (left, right) => left | right },
291291
},
292292
new Dictionary<ExpressionOperator, Func<dynamic, dynamic, object>>()
293293
{
294-
{ExpressionOperator.ConditionalAnd, (dynamic left, dynamic right) => {
294+
{ExpressionOperator.ConditionalAnd, (left, right) => {
295295
if ( left is BubbleExceptionContainer leftExceptionContainer)
296296
{
297297
leftExceptionContainer.Throw();
@@ -314,7 +314,7 @@ protected enum TryBlockEvaluatedState
314314
},
315315
new Dictionary<ExpressionOperator, Func<dynamic, dynamic, object>>()
316316
{
317-
{ExpressionOperator.ConditionalOr, (dynamic left, dynamic right) => {
317+
{ExpressionOperator.ConditionalOr, (left, right) => {
318318
if ( left is BubbleExceptionContainer leftExceptionContainer)
319319
{
320320
leftExceptionContainer.Throw();
@@ -337,7 +337,7 @@ protected enum TryBlockEvaluatedState
337337
},
338338
new Dictionary<ExpressionOperator, Func<dynamic, dynamic, object>>()
339339
{
340-
{ExpressionOperator.NullCoalescing, (dynamic left, dynamic right) => left ?? right },
340+
{ExpressionOperator.NullCoalescing, (left, right) => left ?? right },
341341
},
342342
};
343343

@@ -3206,7 +3206,7 @@ protected virtual object ProcessStack(Stack<object> stack)
32063206
.Select(e => e is NullConditionalNullValue ? null : e)
32073207
.ToList();
32083208

3209-
OperatorsEvaluations.ToList().ForEach((IDictionary<ExpressionOperator, Func<dynamic, dynamic, object>> operatorEvalutationsDict) =>
3209+
OperatorsEvaluations.ToList().ForEach(operatorEvalutationsDict =>
32103210
{
32113211
for (int i = list.Count - 1; i >= 0; i--)
32123212
{
@@ -3296,11 +3296,11 @@ void EvaluateFirstPreviousUnaryOp(int j)
32963296
{
32973297
list[i] = operatorEvalutationsDict[eOp](left, right);
32983298

3299-
if (left is BubbleExceptionContainer && right is string or null)
3299+
if (left is BubbleExceptionContainer && (right == null || right is string))
33003300
{
33013301
list[i] = left; //Bubble up the causing error
33023302
}
3303-
else if (right is BubbleExceptionContainer && left is string or null)
3303+
else if (right is BubbleExceptionContainer && (left is string || left is null))
33043304
{
33053305
list[i] = right; //Bubble up the causing error
33063306
}
@@ -3481,7 +3481,7 @@ protected virtual bool GetLambdaExpression(string expression, Stack<object> stac
34813481

34823482
bool inScriptAtDeclaration = inScript;
34833483

3484-
stack.Push(new InternalDelegate((object[] args) =>
3484+
stack.Push(new InternalDelegate(args =>
34853485
{
34863486
var vars = new Dictionary<string, object>(variables);
34873487

0 commit comments

Comments
 (0)