1 /* ****************************************************************************
3 * Copyright (c) Microsoft Corporation.
5 * This source code is subject to terms and conditions of the Microsoft Public License. A
6 * copy of the license can be found in the License.html file at the root of this distribution. If
7 * you cannot locate the Microsoft Public License, please send an email to
8 * dlr@microsoft.com. By using this source code in any fashion, you are agreeing to be bound
9 * by the terms of the Microsoft Public License.
11 * You must not remove this notice, or any other, from this software.
14 * ***************************************************************************/
15 using System; using Microsoft;
21 using System.Linq.Expressions;
23 using Microsoft.Linq.Expressions;
27 namespace System.Dynamic {
29 namespace Microsoft.Scripting {
32 /// ArgBuilder provides an argument value used by the MethodBinder. One ArgBuilder exists for each
33 /// physical parameter defined on a method.
35 /// Contrast this with ParameterWrapper which represents the logical argument passed to the method.
37 internal abstract class ArgBuilder {
39 /// Provides the Expression which provides the value to be passed to the argument.
41 internal abstract Expression Marshal(Expression parameter);
44 /// Provides the Expression which provides the value to be passed to the argument.
45 /// This method is called when result is intended to be used ByRef.
47 internal virtual Expression MarshalToRef(Expression parameter) {
48 return Marshal(parameter);
52 /// Provides an Expression which will update the provided value after a call to the method.
53 /// May return null if no update is required.
55 internal virtual Expression UnmarshalFromRef(Expression newValue) {