FastExpressionCompiler Versions Save

Fast Compiler for C# Expression Trees and the lightweight LightExpression alternative. Diagnostic and code generation tools for the expressions.

v4.2.0

2 weeks ago

v4.2.0 Feature and bug-fix release

  • 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

v4.1.0

3 months ago

v4.1.0 Small feature and bug-fix release

  • added: #379 Add direct net8.0 target as soon as Appveyor CI will support it
  • fixed: #380 Comparisons with nullable types
  • fixed: #381 NullReferenceException with V4.X when trying to map
  • fixed: #386 Value can not be null(parametr 'meth')

v4.0.1

5 months ago

v4.0.1 Bug-fix release

  • fixed: #374 CompileFast doesn't work with HasFlag

v4.0.0

6 months ago

v4.0.0 Major release

  • 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

v3.3.4

1 year ago

v3.3.4 Bug-fix release

  • 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

v3.3.3

1 year ago

v3.3.3 Bug-fix release

  • fixed: #336 Method TryCompileBoundToFirstClosureParam is returning passed Type array to pool may cause undefined behavior
  • fixed: #337 Switch LightExpression.Expression.ToString from System.Expression.ToString pseudo-code to ToCSharpString
  • fixed: #338 InvocationExpression is not properly converted to System Expression via ToExpression for non-lambda expression
  • fixed: #341 Equality comparison between nullable and null inside Any produces incorrect compiled expression

v3.3.2

1 year ago

v3.3.2 Bug-fix release

  • fixed: #335 FastExpressionCompiler.LightExpressions - MemberInit has recursive calls

v3.3.1

1 year ago

v3.3.1 Optimization and bug-fix release

  • fixed: #333 AccessViolationException and other suspicious behaviour on invoking result of CompileFast()
  • optim: LightExpression.Parameter consumes less memory for the common standard types.

v3.3.0

2 years ago

v3.3.0 Feature and bug-fix release

  • added: #235 [GodMode] Expression to IL intrinsic
  • added: #325 Add LightExpression.NewNoByRefArgs overloads for performance
  • added: #327 Replace direct il.Emit(OpCodes.Call, ...) with EmitMethodCall
  • added: #329 Optimize special case compilation for New and Call with no arguments
  • added: #330 Optimize nested lambda ClosureInfo memory footprint
  • fixed: #324 The LightExpression.New of IEnumerable is recursive
  • fixed: #328 Fix the performance of TryEmitConvert to String

v3.2.2

2 years ago

v3.2.2 Bug-fix release

  • fixed: #284 Invalid Program after Coalesce
  • fixed: #308 Wrong delegate type returned (with closure)
  • fixed: #310 InvalidProgramException when nullable result is ignored
  • fixed: #316 in parameter
  • fixed: #319 NRE in IndexExpression.get_ArgumentCount
  • fixed: #320 "Bad label content in ILGenerator" when creating through DynamicModule
  • fixed: #321 Call with out parameter to field type that is not value type fails