Class CpsRewriterBase<TContinuationState>
Base class for expression tree rewriters to turn expressions into a Continuation Passing Style (CPS).
Inheritance
Namespace: System.Linq.CompilerServices
Assembly: Nuqleon.Linq.CompilerServices.dll
Syntax
public abstract class CpsRewriterBase<TContinuationState> : Object
Type Parameters
| Name | Description |
|---|---|
| TContinuationState | Type of the state object threaded through the CPS transformation. |
Constructors
CpsRewriterBase()
Declaration
protected CpsRewriterBase()
Methods
CheckAsyncMethod(MethodInfo, MethodInfo)
Checks whether the discovered asynchronous method matches the specified synchronous method.
Declaration
protected virtual void CheckAsyncMethod(MethodInfo synchronousMethod, MethodInfo asynchronousMethod)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Reflection.MethodInfo | synchronousMethod | Synchronous method to match. |
| System.Reflection.MethodInfo | asynchronousMethod | Asynchronous method; null if not found. |
FindAsyncMethod(MethodInfo)
Finds the asynchronous method to rewrite the given method to. The specified method has the UseAsyncMethodAttribute applied, but resolution of the method can be overridden by subclasses. By default, the GetContinuationParameters method is used to supply additional parameters that appear on the asynchronous method, used to find the right overload of a method with the same name as the synchronous one.
Declaration
protected virtual MethodInfo FindAsyncMethod(MethodInfo method)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Reflection.MethodInfo | method | Method to find the target asynchronous method for. |
Returns
| Type | Description |
|---|---|
| System.Reflection.MethodInfo | Asynchronous method to rewrite the call site for the specified method. |
GetAsyncMethodName(MethodInfo)
Gets the asynchronous method name for the given synchronous method. By default, the name is the same as the synchronous method. The GetContinuationParameters method will be called to find additional parameters that designate the asynchronous method overload to look for.
Declaration
protected virtual string GetAsyncMethodName(MethodInfo method)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Reflection.MethodInfo | method | Method to find the name of the corresponding asynchronous method for. |
Returns
| Type | Description |
|---|---|
| System.String | Name of the asynchronous method to search for. |
GetContinuationParameters(MethodInfo)
Gets the continuation parameter types that are used during method overload resolution by appending those to the parameters type of the synchronous method.
Declaration
protected abstract IEnumerable<Type> GetContinuationParameters(MethodInfo method)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Reflection.MethodInfo | method | Method to find continuation parameters for, e.g. by inspecting its return type and creating the corresponding callback parameter type. |
Returns
| Type | Description |
|---|---|
| System.Collections.Generic.IEnumerable<System.Type> | Continuation parameter types to check for when searching for an asynchronous method overload. |
InvokeContinuation(TContinuationState, Expression)
Creates an invocation of the given continuation.
Declaration
protected abstract Expression InvokeContinuation(TContinuationState continuation, Expression argument)
Parameters
| Type | Name | Description |
|---|---|---|
| TContinuationState | continuation | Continuation to invoke. |
| System.Linq.Expressions.Expression | argument | Argument to pass to the continuation's invocation. |
Returns
| Type | Description |
|---|---|
| System.Linq.Expressions.Expression | Expression representing the invocation of the continuation. |
MakeAsyncMethodCall(Expression, MethodInfo, IEnumerable<Expression>, TContinuationState)
Creates an asynchronous method call with the given continuation.
Declaration
protected abstract Expression MakeAsyncMethodCall(Expression instance, MethodInfo method, IEnumerable<Expression> arguments, TContinuationState continuation)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Linq.Expressions.Expression | instance | Instance of the method call. |
| System.Reflection.MethodInfo | method | Method to call. |
| System.Collections.Generic.IEnumerable<System.Linq.Expressions.Expression> | arguments | Arguments of the method call. |
| TContinuationState | continuation | Continuation to supply to the asynchronous method. |
Returns
| Type | Description |
|---|---|
| System.Linq.Expressions.Expression | Expression representing an asynchronous method call with the given continuation. |
MakeContinuation(Expression, ParameterExpression, TContinuationState)
Creates a new continuation with the given result parameter to run the specified remainder computation.
Declaration
protected abstract TContinuationState MakeContinuation(Expression remainder, ParameterExpression resultParameter, TContinuationState currentContinuation)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Linq.Expressions.Expression | remainder | Remainder of the expression to evaluate upon invocation of the continuation. |
| System.Linq.Expressions.ParameterExpression | resultParameter | Parameter with the result of the expression evaluation preceding the invocation of the continuation. |
| TContinuationState | currentContinuation | Current continuation being processed upon requesting a new continuation. |
Returns
| Type | Description |
|---|---|
| TContinuationState | Continuation object that will execute the remainder computation, given the specified result parameter. |
RewriteCore(Expression, TContinuationState)
Rewrites the given expression into a CPS-based expression using the specified initial CPS rewrite state.
Declaration
protected Expression RewriteCore(Expression expression, TContinuationState initialState)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Linq.Expressions.Expression | expression | Expression to rewrite to a CPS-based expression. |
| TContinuationState | initialState | Initial CPS rewrite state. |
Returns
| Type | Description |
|---|---|
| System.Linq.Expressions.Expression | Rewritten expression in CPS style. |
RewriteCore(Expression, TContinuationState, Boolean)
Rewrites the given expression into a CPS-based expression using the specified initial CPS rewrite state.
Declaration
protected Expression RewriteCore(Expression expression, TContinuationState initialState, bool inline)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Linq.Expressions.Expression | expression | Expression to rewrite to a CPS-based expression. |
| TContinuationState | initialState | Initial CPS rewrite state. |
| System.Boolean | inline | Indicates whether or not to inline invocations when possible. This optimization may defeat evaluation order for specific subclasses, so it can be disabled. |
Returns
| Type | Description |
|---|---|
| System.Linq.Expressions.Expression | Rewritten expression in CPS style. |