[dlr] Add interpreter increment emit
[mono.git] / mcs / class / dlr / Runtime / Microsoft.Dynamic / ConvertArgBuilder.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 #if CODEPLEX_40
21 using System.Linq.Expressions;
22 #else
23 using Microsoft.Linq.Expressions;
24 #endif
25
26 #if CODEPLEX_40
27 namespace System.Dynamic {
28 #else
29 namespace Microsoft.Scripting {
30 #endif
31     internal class ConvertArgBuilder : SimpleArgBuilder {
32         private readonly Type _marshalType;
33
34         internal ConvertArgBuilder(Type parameterType, Type marshalType)
35             : base(parameterType) {
36             _marshalType = marshalType;
37         }
38
39         internal override Expression Marshal(Expression parameter) {
40             parameter = base.Marshal(parameter);
41             return Expression.Convert(parameter, _marshalType);
42         }
43
44         internal override Expression UnmarshalFromRef(Expression newValue) {
45             return base.UnmarshalFromRef(Expression.Convert(newValue, ParameterType));
46         }
47     }
48 }
49
50 #endif