C# Класс System.Linq.Expressions.Compiler.LambdaCompiler

Показать файл Открыть проект Примеры использования класса

Приватные методы

Метод Описание
AddReturnLabel ( LambdaExpression lambda ) : void
AddToBuckets ( List buckets, SwitchLabel key ) : void
AddressOf ( BinaryExpression node, Type type ) : void
AddressOf ( IndexExpression node, Type type ) : void
AddressOf ( MemberExpression node, Type type ) : void
AddressOf ( MethodCallExpression node, Type type ) : void
AddressOf ( ParameterExpression node, Type type ) : void
AddressOf ( UnaryExpression node, Type type ) : void
AddressOfWriteBack ( IndexExpression node ) : WriteBack
AddressOfWriteBack ( MemberExpression node ) : WriteBack
AddressOfWriteBackCore ( IndexExpression node ) : WriteBack
AddressOfWriteBackCore ( MemberExpression node ) : WriteBack
CanOptimizeSwitchType ( Type valueType ) : bool
CheckRethrow ( ) : void
CheckTry ( ) : void
ConvertSwitchValue ( object value ) : decimal
DefineBlockLabels ( Expression node ) : void
DefineLabel ( LabelTarget node ) : LabelInfo
DefineSwitchCaseLabel ( SwitchCase @case, Label &label, bool &isGoto ) : void

Creates the label for this case. Optimization: if the body is just a goto, and we can branch to it, put the goto target directly in the jump table.

Emit ( BlockExpression node, CompilationFlags flags ) : void
EmitAddress ( Expression node, Type type ) : void
EmitAddress ( Expression node, Type type, CompilationFlags flags ) : void
EmitAddressWriteBack ( Expression node, Type type ) : WriteBack
EmitAndAlsoBinaryExpression ( Expression expr, CompilationFlags flags ) : void
EmitArguments ( MethodBase method, IArgumentProvider args ) : List

Emits arguments to a call, and returns an array of write-backs that should happen after the call.

EmitArguments ( MethodBase method, IArgumentProvider args, int skipParameters ) : List

Emits arguments to a call, and returns an array of write-backs that should happen after the call. For emitting dynamic expressions, we need to skip the first parameter of the method (the call site).

EmitAssign ( AssignBinaryExpression node, CompilationFlags emitAs ) : void
EmitAssignBinaryExpression ( Expression expr ) : void
EmitBinaryExpression ( Expression expr ) : void
EmitBinaryExpression ( Expression expr, CompilationFlags flags ) : void
EmitBinaryMethod ( BinaryExpression b, CompilationFlags flags ) : void
EmitBinaryOperator ( ExpressionType op, Type leftType, Type rightType, Type resultType, bool liftedToNull ) : void
EmitBinding ( MemberBinding binding, Type objectType ) : void
EmitBlockExpression ( Expression expr, CompilationFlags flags ) : void
EmitBranchAnd ( bool branch, BinaryExpression node, Label label ) : void
EmitBranchBlock ( bool branch, BlockExpression node, Label label ) : void
EmitBranchComparison ( bool branch, BinaryExpression node, Label label ) : void
EmitBranchLogical ( bool branch, BinaryExpression node, Label label ) : void
EmitBranchNot ( bool branch, UnaryExpression node, Label label ) : void
EmitBranchOp ( bool branch, Label label ) : void
EmitBranchOr ( bool branch, BinaryExpression node, Label label ) : void
EmitCall ( Type objectType, MethodInfo method ) : void
EmitCatchStart ( CatchBlock cb ) : void

Emits the start of a catch block. The exception value that is provided by the CLR is stored in the variable specified by the catch block or popped if no variable is provided.

EmitCoalesceBinaryExpression ( Expression expr ) : void
EmitConditionalExpression ( Expression expr, CompilationFlags flags ) : void
EmitConstant ( object value, Type type ) : void
EmitConstantExpression ( Expression expr ) : void
EmitConstantOne ( Type type ) : void
EmitConvert ( UnaryExpression node, CompilationFlags flags ) : void
EmitConvertArithmeticResult ( ExpressionType op, Type resultType ) : void
EmitConvertUnaryExpression ( Expression expr, CompilationFlags flags ) : void
EmitDebugInfoExpression ( Expression expr ) : void
EmitDefaultExpression ( Expression expr ) : void
EmitDynamicExpression ( Expression expr ) : void
EmitExpression ( Expression node ) : void

Generates code for this expression in a value position. This method will leave the value of the expression on the top of the stack typed as Type.

EmitExpression ( Expression node, CompilationFlags flags ) : void
EmitExpressionAddress ( Expression node, Type type ) : void
EmitExpressionAndBranch ( bool branchValue, Expression node, Label label ) : void
EmitExpressionAsType ( Expression node, Type type, CompilationFlags flags ) : void
EmitExpressionAsVoid ( Expression node ) : void

Emits an expression and discards the result. For some nodes this emits more optimal code then EmitExpression/Pop

EmitExpressionAsVoid ( Expression node, CompilationFlags flags ) : void
EmitExpressionEnd ( CompilationFlags flags ) : void
EmitExpressionStart ( Expression node ) : CompilationFlags
EmitExtensionExpression ( Expression expr ) : void
EmitGetArrayElement ( Type arrayType ) : void
EmitGetIndexCall ( IndexExpression node, Type objectType ) : void
EmitGotoExpression ( Expression expr, CompilationFlags flags ) : void
EmitIndexAssignment ( AssignBinaryExpression node, CompilationFlags flags ) : void
EmitIndexExpression ( Expression expr ) : void
EmitInlinedInvoke ( InvocationExpression invoke, CompilationFlags flags ) : void
EmitInstance ( Expression instance, Type &type ) : void
EmitInvocationExpression ( Expression expr, CompilationFlags flags ) : void
EmitLabelExpression ( Expression expr, CompilationFlags flags ) : void
EmitLambdaExpression ( Expression expr ) : void
EmitLambdaReferenceCoalesce ( BinaryExpression b ) : void
EmitLift ( ExpressionType nodeType, Type resultType, MethodCallExpression mc, ParameterExpression paramList, Expression argList ) : void
EmitLiftedAndAlso ( BinaryExpression b ) : void
EmitLiftedBinaryArithmetic ( ExpressionType op, Type leftType, Type rightType, Type resultType ) : void
EmitLiftedBinaryOp ( ExpressionType op, Type leftType, Type rightType, Type resultType, bool liftedToNull ) : void
EmitLiftedBooleanAnd ( ) : void
EmitLiftedBooleanOr ( ) : void
EmitLiftedOrElse ( BinaryExpression b ) : void
EmitLiftedRelational ( ExpressionType op, Type leftType, Type rightType, Type resultType, bool liftedToNull ) : void
EmitListInit ( ListInitExpression init ) : void
EmitListInit ( ReadOnlyCollection initializers, bool keepOnStack, Type objectType ) : void
EmitListInitExpression ( Expression expr ) : void
EmitLoopExpression ( Expression expr ) : void
EmitMemberAddress ( MemberInfo member, Type objectType ) : void
EmitMemberAssignment ( AssignBinaryExpression node, CompilationFlags flags ) : void
EmitMemberAssignment ( MemberAssignment binding, Type objectType ) : void
EmitMemberExpression ( Expression expr ) : void
EmitMemberGet ( MemberInfo member, Type objectType ) : void
EmitMemberInit ( MemberInitExpression init ) : void
EmitMemberInit ( ReadOnlyCollection bindings, bool keepOnStack, Type objectType ) : void
EmitMemberInitExpression ( Expression expr ) : void
EmitMemberListBinding ( MemberListBinding binding ) : void
EmitMemberMemberBinding ( MemberMemberBinding binding ) : void
EmitMethodAndAlso ( BinaryExpression b, CompilationFlags flags ) : void
EmitMethodCall ( Expression obj, MethodInfo method, IArgumentProvider methodCallExpr ) : void
EmitMethodCall ( Expression obj, MethodInfo method, IArgumentProvider methodCallExpr, CompilationFlags flags ) : void
EmitMethodCall ( MethodInfo mi, IArgumentProvider args, Type objectType ) : void
EmitMethodCall ( MethodInfo mi, IArgumentProvider args, Type objectType, CompilationFlags flags ) : void
EmitMethodCallExpression ( Expression expr ) : void
EmitMethodCallExpression ( Expression expr, CompilationFlags flags ) : void
EmitMethodOrElse ( BinaryExpression b, CompilationFlags flags ) : void
EmitNewArrayExpression ( Expression expr ) : void
EmitNewExpression ( Expression expr ) : void
EmitNullEquality ( ExpressionType op, Expression e, bool isLiftedToNull ) : void
EmitNullableCoalesce ( BinaryExpression b ) : void
EmitOrElseBinaryExpression ( Expression expr, CompilationFlags flags ) : void
EmitParameterExpression ( Expression expr ) : void
EmitQuote ( UnaryExpression quote ) : void
EmitQuoteUnaryExpression ( Expression expr ) : void
EmitReferenceCoalesceWithoutConversion ( BinaryExpression b ) : void
EmitRuntimeVariablesExpression ( Expression expr ) : void
EmitSaveExceptionOrPop ( CatchBlock cb ) : void
EmitSetArrayElement ( Type arrayType ) : void
EmitSetIndexCall ( IndexExpression node, Type objectType ) : void
EmitShiftMask ( Type leftType ) : void
EmitSwitchBucket ( SwitchInfo info, List bucket ) : void
EmitSwitchBuckets ( SwitchInfo info, List buckets, int first, int last ) : void
EmitSwitchCases ( SwitchExpression node, Label labels, bool isGoto, Label @default, Label end, CompilationFlags flags ) : void
EmitSwitchExpression ( Expression expr, CompilationFlags flags ) : void
EmitThrow ( UnaryExpression expr, CompilationFlags flags ) : void
EmitThrowUnaryExpression ( Expression expr ) : void
EmitTryExpression ( Expression expr ) : void
EmitTypeBinaryExpression ( Expression expr ) : void
EmitUnary ( UnaryExpression node, CompilationFlags flags ) : void
EmitUnaryExpression ( Expression expr, CompilationFlags flags ) : void
EmitUnaryMethod ( UnaryExpression node, CompilationFlags flags ) : void
EmitUnaryOperator ( ExpressionType op, Type operandType, Type resultType ) : void
EmitUnboxUnaryExpression ( Expression expr ) : void
EmitUnliftedAndAlso ( BinaryExpression b ) : void
EmitUnliftedBinaryOp ( ExpressionType op, Type leftType, Type rightType ) : void
EmitUnliftedEquality ( ExpressionType op, Type type ) : void
EmitUnliftedOrElse ( BinaryExpression b ) : void
EmitUnreachable ( Expression node, CompilationFlags flags ) : void
EmitVariableAssignment ( AssignBinaryExpression node, CompilationFlags flags ) : void
EmitWriteBack ( List writeBacks ) : void
EnsureLabel ( LabelTarget node ) : LabelInfo
EnterScope ( object node ) : void
ExitScope ( object node ) : void
FitsInBucket ( List buckets, decimal key, int count ) : bool
GetEqualityOperand ( Expression expression ) : Expression
GetInstanceLocal ( Type type ) : LocalBuilder
GetMemberType ( MemberInfo member ) : Type
GetTestValueType ( SwitchExpression node ) : Type

Gets the common test value type of the SwitchExpression.

HasVariables ( object node ) : bool
IsChecked ( ExpressionType op ) : bool
MergeBuckets ( List buckets ) : void
MethodHasByRefParameter ( MethodInfo mi ) : bool
NotEmpty ( Expression node ) : bool

returns true if the expression is not empty, otherwise false.

PopLabelBlock ( LabelScopeKind kind ) : void
PushLabelBlock ( LabelScopeKind type ) : void
ReferenceLabel ( LabelTarget node ) : LabelInfo
Significant ( Expression node ) : bool

returns true if the expression is NOT empty and is not debug info, or a block that contains only insignificant expressions.

TryEmitHashtableSwitch ( SwitchExpression node, CompilationFlags flags ) : bool
TryEmitSwitchInstruction ( SwitchExpression node, CompilationFlags flags ) : bool
TryPushLabelBlock ( Expression node ) : bool
UpdateEmitAsTailCallFlag ( CompilationFlags flags, CompilationFlags newValue ) : CompilationFlags

Update the flag with a new EmitAsTailCall flag

UpdateEmitAsTypeFlag ( CompilationFlags flags, CompilationFlags newValue ) : CompilationFlags

Update the flag with a new EmitAsType flag

UpdateEmitExpressionStartFlag ( CompilationFlags flags, CompilationFlags newValue ) : CompilationFlags

Update the flag with a new EmitExpressionStart flag

UseVirtual ( MethodInfo mi ) : bool
ValidateLift ( IReadOnlyList variables, IReadOnlyList arguments ) : void