File: System\Linq\Expressions\Interpreter\LightDelegateCreator.cs
Web Access
Project: src\src\libraries\System.Linq.Expressions\src\System.Linq.Expressions.csproj (System.Linq.Expressions)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System.Diagnostics;
using System.Runtime.CompilerServices;
 
namespace System.Linq.Expressions.Interpreter
{
    /// <summary>
    /// Manages creation of interpreted delegates.
    /// </summary>
    internal sealed class LightDelegateCreator
    {
        private readonly LambdaExpression _lambda;
 
        internal LightDelegateCreator(Interpreter interpreter, LambdaExpression lambda)
        {
            Debug.Assert(interpreter != null);
            Debug.Assert(lambda != null);
 
            Interpreter = interpreter;
            _lambda = lambda;
        }
 
        internal Interpreter Interpreter { get; }
 
        public Delegate CreateDelegate() => CreateDelegate(closure: null);
 
        internal Delegate CreateDelegate(IStrongBox[]? closure)
        {
            // we'll create an interpreted LightLambda
            return new LightLambda(this, closure).MakeDelegate(_lambda.Type);
        }
    }
}