2009-07-11 Michael Barker <mike@middlesoft.co.uk>
[mono.git] / mcs / class / dlr / Runtime / Microsoft.Dynamic / SimpleArgBuilder.cs
1 /* ****************************************************************************
2  *
3  * Copyright (c) Microsoft Corporation. 
4  *
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.
10  *
11  * You must not remove this notice, or any other, from this software.
12  *
13  *
14  * ***************************************************************************/
15 using System; using Microsoft;
16
17
18 #if !SILVERLIGHT
19
20 using System.Diagnostics;
21 #if CODEPLEX_40
22 using System.Linq.Expressions;
23 #else
24 using Microsoft.Linq.Expressions;
25 #endif
26
27 #if CODEPLEX_40
28 namespace System.Dynamic {
29 #else
30 namespace Microsoft.Scripting {
31 #endif
32     /// <summary>
33     /// SimpleArgBuilder produces the value produced by the user as the argument value.  It
34     /// also tracks information about the original parameter and is used to create extended
35     /// methods for params arrays and param dictionary functions.
36     /// </summary>
37     internal class SimpleArgBuilder : ArgBuilder {
38         private readonly Type _parameterType;
39
40         internal SimpleArgBuilder(Type parameterType) {
41             _parameterType = parameterType;
42         }
43
44         internal Type ParameterType {
45             get { return _parameterType; }
46         }
47
48         internal override Expression Marshal(Expression parameter) {
49             Debug.Assert(parameter != null);
50             return Helpers.Convert(parameter, _parameterType);
51         }
52
53         internal override Expression UnmarshalFromRef(Expression newValue) {
54             Debug.Assert(newValue != null && newValue.Type.IsAssignableFrom(_parameterType));
55
56             return base.UnmarshalFromRef(newValue);
57         }
58     }
59 }
60
61 #endif