/* **************************************************************************** * * Copyright (c) Microsoft Corporation. * * This source code is subject to terms and conditions of the Microsoft Public License. A * copy of the license can be found in the License.html file at the root of this distribution. If * you cannot locate the Microsoft Public License, please send an email to * dlr@microsoft.com. By using this source code in any fashion, you are agreeing to be bound * by the terms of the Microsoft Public License. * * You must not remove this notice, or any other, from this software. * * * ***************************************************************************/ using System; using Microsoft; #if !SILVERLIGHT #if CODEPLEX_40 using System.Linq.Expressions; #else using Microsoft.Linq.Expressions; #endif #if CODEPLEX_40 namespace System.Dynamic { #else namespace Microsoft.Scripting { #endif /// /// ArgBuilder provides an argument value used by the MethodBinder. One ArgBuilder exists for each /// physical parameter defined on a method. /// /// Contrast this with ParameterWrapper which represents the logical argument passed to the method. /// internal abstract class ArgBuilder { /// /// Provides the Expression which provides the value to be passed to the argument. /// internal abstract Expression Marshal(Expression parameter); /// /// Provides the Expression which provides the value to be passed to the argument. /// This method is called when result is intended to be used ByRef. /// internal virtual Expression MarshalToRef(Expression parameter) { return Marshal(parameter); } /// /// Provides an Expression which will update the provided value after a call to the method. /// May return null if no update is required. /// internal virtual Expression UnmarshalFromRef(Expression newValue) { return newValue; } } } #endif