Fast Compiler for C# Expression Trees and the lightweight LightExpression alternative. Diagnostic and code generation tools for the expressions.
feat: #133 Optimize Switch Expression
feat: #393 Support ToCSharpString of the block in the ternary expression
feat: #396 Optimize conditional expressions with the DefaultExpression left or right operand the same way as ConstantExpression
fix: #390 System.AccessViolationException when mapping using Mapster
fix: #391 ToCSharpString outputs ? for Nullable which does not produce the compile-able code
fix: #392 ToExpressionString wrongly declares Label instead of LabelTarget array
fix: #394 Calling a user defined == operator runs into a CLR invalid program exception
fix: #397 Fix and optimize the Switch support
fix: #399 Coalesce nullable with 0 is not working
fix: #400 Fix the direct assignment of Try to Member expression because indirect assignment through tmp var works
fix: #401 Invoke inlining is not working with collections in AutoMapper tests
fix: #404 An expression with a single parameter concatenated to a string causes 'Exception has been thrown by the target of an invocation' during delegate invocation
fix: #405 NullReferenceException with V4.X when using long?[]
fix: #406 NullReferenceException with V4.X
fix: #407 NullReferenceException when setting the Enum field
fix: #408 Dictionary mapping failing when the InvocationExpression inlining is involved
fixed: #352 xxxAssign doesn't work with MemberAccess
fixed: #353 NullReferenceException when calling CompileFast() results
fixed: #357 Invalid program exception
fixed: #366 FastExpressionCompiler[v3.3.4] gives incorrect results in some linq operations
fixed: #368 Fix duplicate nested lambda compilation
fixed: #374 CompileFast doesn't work with HasFlag
added: #264 Optimize the array index emit to emit specific Ldelem_ code instead of generic Ldelem
added: #273 Implement IArgumentProvider for the BlockExpression to minimize the consumed memory
added: #346 Is it possible to implement ref local variables?
added: #359 Improve the performance of variable lookup
added: #367 Better diagnostics and debugging with error codes from Collect and Compile rounds
added: #369 Decrease memory occupied by the LightExpression Block by storing Expression in SmallList (partly on stack)
added: #370 Optimize any nested lambda compilation (LINQ) by compiling right after collect one-by-one
added: #372 Support LightExpression.Expression.TryConvertDelegateIntrinsic for converting one type of delegate to another
added: #373 Support custom C# printing for the LightExpression.Expression
fixed: #345 EmitCall is for the varargs method and should not be used for normal convention
fixed: #347 InvalidProgramException on compiling an expression that returns a record which implements IList
fixed: #349 Error when loading struct parameters closed by the nested lambda e.g. predicate in Linq
fixed: #355 Error with converting to/from signed/unsigned integers (Thanks to @TYoungSL for the PR!)
fixed: the C# output for if-else test condition, and inc/dec operations; and for label at the end of the lambda
fixed: ref assignment C# output
perf: Replace ILGenerator.Emit(OpCodes.Call, ..) with EmitMethodCall performance