DynamicMetaObject GetFakeMetaObject (object value)
{
Type t = value == null ? typeof (object) : value.GetType ();
- var v = Expression.Variable (t);
- Expression e = Expression.Block (new[] { v }, Expression.Default (t));
+ Expression<Func<object>> et = () => value;
Expression restr = Expression.Constant (true);
- return new DynamicMetaObject (e, BindingRestrictions.GetExpressionRestriction (restr));
+ return new DynamicMetaObject (Expression.Convert (et.Body, t), BindingRestrictions.GetExpressionRestriction (restr));
}
public override DynamicMetaObject BindBinaryOperation (BinaryOperationBinder binder, DynamicMetaObject arg)
if (values.Count != expected.Length)
throw new ApplicationException (name + ": Array length does not match " + values.Count + " != " + expected.Length);
- for (int i = 0; i < expected.Length; i++)
- {
+ for (int i = 0; i < expected.Length; i++) {
Assert (flags.GetValue (expected[i]), flags.GetValue (values[i]), "flags");
}
}
d = checked (d + 3);
}
-
+
void BinaryAddChecked_2 (dynamic d, DynamicObjectMock mock)
{
mock.BinaryOperation = (binder, arg) => {
checked {
r = () => d + 3;
}
-
+
r ();
}
mock.ConvertOperation = (binder) => {
Assert (binder.Explicit, false, "Explicit");
Assert (binder.Type, typeof (int), "Type");
- return 2;
+ return 1;
};
- object[] o = new object [2];
+ object[] o = new object[2];
d = o[d];
}
return (byte) 2;
};
- object b = checked((byte) d);
+ object b = checked ((byte) d);
}
void Convert_4 (dynamic d, DynamicObjectMock mock)
var g = new int[d];
}
+ void Convert_5 (dynamic d, DynamicObjectMock mock)
+ {
+ int counter = 0;
+ mock.ConvertOperation = (binder) => {
+ Assert (binder.Explicit, false, "Explicit");
+ Assert (binder.Type, typeof (System.Collections.IEnumerable), "Type");
+ return new object[] { 1 };
+ };
+
+ foreach (int v in d) {
+// Console.WriteLine (v);
+ }
+ }
+
void GetIndex_1 (dynamic d, DynamicObjectMock mock)
{
mock.GetIndexOperation = (binder, args) => {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null) },
"ArgumentInfo");
- Assert ((IList<object>)args, new object[] { 0 }, "args");
+ Assert ((IList<object>) args, new object[] { 0 }, "args");
};
- var o = d [0];
+ var o = d[0];
}
void GetIndex_2 (dynamic d, DynamicObjectMock mock)
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null)
- }, "ArgumentInfo");
+ }, "ArgumentInfo");
Assert ((IList<object>) args, new object[] { "foo", null }, "args");
};
Assert ((IList<object>) args, new object[] { typeof (bool), -1 }, "args");
};
- d (typeof (bool), name:-1);
+ d (typeof (bool), name: -1);
}
-
+
void Invoke_5 (dynamic d, DynamicObjectMock mock)
{
mock.InvokeOperation = (binder, args) => {
Assert ((IList<object>) args, new object[] { typeof (bool), -1 }, "args");
};
- Action<object> a = (i) => {};
+ Action<object> a = (i) => { };
a (d);
}
-
+
void InvokeMember_1 (dynamic d, DynamicObjectMock mock)
{
mock.InvokeMemberOperation = (binder, args) => {
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.UseCompileTimeType | CSharpArgumentInfoFlags.Constant, null) // CSC bug?
- }, "ArgumentInfo");
+ }, "ArgumentInfo");
Assert (value, d_const, "value");
};
return true;
};
- object g = d ? 1 :4;
+ object g = d ? 1 : 4;
}
void UnaryIsTrue_2 (dynamic d, DynamicObjectMock mock)
object x = d || null;
}
-
+
#pragma warning restore 168, 169, 219
static bool RunTest (MethodInfo test)
Console.Write ("Running test {0, -25}", test.Name);
try {
var d = new DynamicObjectMock ();
- test.Invoke (new Tester (), new [] { d, d });
+ test.Invoke (new Tester (), new[] { d, d });
if (d.HitCounter < 1)
Assert (true, false, "HitCounter");
<test name="dtest-003.cs">
<type name="AssertDynamicObject">
<method name="System.Dynamic.DynamicMetaObject GetFakeMetaObject(System.Object)">
- <size>91</size>
+ <size>120</size>
</method>
<method name="System.Dynamic.DynamicMetaObject BindBinaryOperation(System.Dynamic.BinaryOperationBinder, System.Dynamic.DynamicMetaObject)">
<size>62</size>
<method name="System.Object <Convert_4>m__28(System.Dynamic.ConvertBinder)">
<size>50</size>
</method>
- <method name="Void <GetIndex_1>m__29(System.Dynamic.GetIndexBinder, System.Object[])">
+ <method name="Void .ctor()">
+ <size>7</size>
+ </method>
+ <method name="Void .ctor(Object)">
+ <size>7</size>
+ </method>
+ <method name="Void .cctor()">
+ <size>34</size>
+ </method>
+ </type>
+ <type name="Tester+<>c__DynamicSite0+Container0">
+ <method name="Void Invoke(System.Runtime.CompilerServices.CallSite, System.Object, Int32 ByRef)">
+ <size>0</size>
+ </method>
+ <method name="Void .ctor(Object, IntPtr)">
+ <size>0</size>
+ </method>
+ </type>
+ <type name="Tester+<>c__DynamicSite0+Container1">
+ <method name="Void Invoke(System.Runtime.CompilerServices.CallSite, System.Object, Int32 ByRef)">
+ <size>0</size>
+ </method>
+ <method name="Void .ctor(Object, IntPtr)">
+ <size>0</size>
+ </method>
+ </type>
+ <type name="Tester">
+ <method name="Void Convert_5(System.Object, DynamicObjectMock)">
+ <size>226</size>
+ </method>
+ <method name="System.Object <Convert_5>m__29(System.Dynamic.ConvertBinder)">
+ <size>59</size>
+ </method>
+ <method name="Void <GetIndex_1>m__2A(System.Dynamic.GetIndexBinder, System.Object[])">
<size>92</size>
</method>
- <method name="Void <GetIndex_2>m__2A(System.Dynamic.GetIndexBinder, System.Object[])">
+ <method name="Void <GetIndex_2>m__2B(System.Dynamic.GetIndexBinder, System.Object[])">
<size>111</size>
</method>
- <method name="Void <GetMember_1>m__2C(System.Dynamic.GetMemberBinder)">
+ <method name="Void <GetMember_1>m__2D(System.Dynamic.GetMemberBinder)">
<size>66</size>
</method>
- <method name="Void <Invoke_1>m__2D(System.Dynamic.InvokeBinder, System.Object[])">
+ <method name="Void <Invoke_1>m__2E(System.Dynamic.InvokeBinder, System.Object[])">
<size>101</size>
</method>
- <method name="Void <Invoke_2>m__2E(System.Dynamic.InvokeBinder, System.Object[])">
+ <method name="Void <Invoke_2>m__2F(System.Dynamic.InvokeBinder, System.Object[])">
<size>73</size>
</method>
- <method name="Void <Invoke_4>m__2F(System.Dynamic.InvokeBinder, System.Object[])">
+ <method name="Void <Invoke_4>m__30(System.Dynamic.InvokeBinder, System.Object[])">
<size>127</size>
</method>
- <method name="Void <Invoke_5>m__30(System.Dynamic.InvokeBinder, System.Object[])">
+ <method name="Void <Invoke_5>m__31(System.Dynamic.InvokeBinder, System.Object[])">
<size>127</size>
</method>
- <method name="Void <Invoke_5>m__31(System.Object)">
+ <method name="Void <Invoke_5>m__32(System.Object)">
<size>1</size>
</method>
- <method name="Void <InvokeMember_1>m__32(System.Dynamic.InvokeMemberBinder, System.Object[])">
+ <method name="Void <InvokeMember_1>m__33(System.Dynamic.InvokeMemberBinder, System.Object[])">
<size>110</size>
</method>
- <method name="Void <InvokeMember_3>m__34(System.Dynamic.InvokeMemberBinder, System.Object[])">
+ <method name="Void <InvokeMember_3>m__35(System.Dynamic.InvokeMemberBinder, System.Object[])">
<size>111</size>
</method>
- <method name="Void <InvokeMember_4>m__35(System.Dynamic.InvokeMemberBinder, System.Object[])">
+ <method name="Void <InvokeMember_4>m__36(System.Dynamic.InvokeMemberBinder, System.Object[])">
<size>110</size>
</method>
- <method name="Void <InvokeMember_7>m__37(System.Dynamic.InvokeMemberBinder, System.Object[])">
+ <method name="Void <InvokeMember_7>m__38(System.Dynamic.InvokeMemberBinder, System.Object[])">
<size>90</size>
</method>
- <method name="Void <SetIndex_1>m__38(System.Dynamic.SetIndexBinder, System.Object[], System.Object)">
+ <method name="Void <SetIndex_1>m__39(System.Dynamic.SetIndexBinder, System.Object[], System.Object)">
<size>124</size>
</method>
- <method name="Void <SetIndex_2>m__39(System.Dynamic.SetIndexBinder, System.Object[], System.Object)">
+ <method name="Void <SetIndex_2>m__3A(System.Dynamic.SetIndexBinder, System.Object[], System.Object)">
<size>139</size>
</method>
- <method name="Void <SetMember_1>m__3B(System.Dynamic.SetMemberBinder, System.Object)">
+ <method name="Void <SetMember_1>m__3C(System.Dynamic.SetMemberBinder, System.Object)">
<size>101</size>
</method>
- <method name="System.Object <UnaryPlus_1>m__3C(System.Dynamic.UnaryOperationBinder)">
+ <method name="System.Object <UnaryPlus_1>m__3D(System.Dynamic.UnaryOperationBinder)">
<size>47</size>
</method>
- <method name="System.Object <UnaryMinus_1>m__3D(System.Dynamic.UnaryOperationBinder)">
+ <method name="System.Object <UnaryMinus_1>m__3E(System.Dynamic.UnaryOperationBinder)">
<size>47</size>
</method>
- <method name="System.Object <UnaryNot_1>m__3E(System.Dynamic.UnaryOperationBinder)">
+ <method name="System.Object <UnaryNot_1>m__3F(System.Dynamic.UnaryOperationBinder)">
<size>47</size>
</method>
- <method name="System.Object <UnaryOnesComplement_1>m__3F(System.Dynamic.UnaryOperationBinder)">
+ <method name="System.Object <UnaryOnesComplement_1>m__40(System.Dynamic.UnaryOperationBinder)">
<size>47</size>
</method>
- <method name="System.Object <UnaryDecrement_1>m__40(System.Dynamic.UnaryOperationBinder)">
+ <method name="System.Object <UnaryDecrement_1>m__41(System.Dynamic.UnaryOperationBinder)">
<size>47</size>
</method>
- <method name="System.Object <UnaryDecrement_2>m__41(System.Dynamic.UnaryOperationBinder)">
+ <method name="System.Object <UnaryDecrement_2>m__42(System.Dynamic.UnaryOperationBinder)">
<size>51</size>
</method>
- <method name="System.Object <UnaryIncrement_1>m__42(System.Dynamic.UnaryOperationBinder)">
+ <method name="System.Object <UnaryIncrement_1>m__43(System.Dynamic.UnaryOperationBinder)">
<size>47</size>
</method>
- <method name="System.Object <UnaryIncrement_2>m__43(System.Dynamic.UnaryOperationBinder)">
+ <method name="System.Object <UnaryIncrement_2>m__44(System.Dynamic.UnaryOperationBinder)">
<size>51</size>
</method>
- <method name="System.Object <UnaryIsFalse_1>m__44(System.Dynamic.UnaryOperationBinder)">
+ <method name="System.Object <UnaryIsFalse_1>m__45(System.Dynamic.UnaryOperationBinder)">
<size>52</size>
</method>
- <method name="Void <UnaryIsFalse_1>m__45(System.Dynamic.BinaryOperationBinder, System.Object)">
+ <method name="Void <UnaryIsFalse_1>m__46(System.Dynamic.BinaryOperationBinder, System.Object)">
<size>68</size>
</method>
- <method name="System.Object <UnaryIsFalse_2>m__46(System.Dynamic.UnaryOperationBinder)">
+ <method name="System.Object <UnaryIsFalse_2>m__47(System.Dynamic.UnaryOperationBinder)">
<size>52</size>
</method>
- <method name="Void <UnaryIsFalse_2>m__47(System.Dynamic.BinaryOperationBinder, System.Object)">
+ <method name="Void <UnaryIsFalse_2>m__48(System.Dynamic.BinaryOperationBinder, System.Object)">
<size>68</size>
</method>
- <method name="System.Object <UnaryIsFalse_3>m__48(System.Dynamic.UnaryOperationBinder)">
+ <method name="System.Object <UnaryIsFalse_3>m__49(System.Dynamic.UnaryOperationBinder)">
<size>52</size>
</method>
- <method name="Void <UnaryIsFalse_3>m__49(System.Dynamic.BinaryOperationBinder, System.Object)">
+ <method name="Void <UnaryIsFalse_3>m__4A(System.Dynamic.BinaryOperationBinder, System.Object)">
<size>67</size>
</method>
- <method name="System.Object <UnaryIsTrue_1>m__4A(System.Dynamic.UnaryOperationBinder)">
+ <method name="System.Object <UnaryIsTrue_1>m__4B(System.Dynamic.UnaryOperationBinder)">
<size>52</size>
</method>
- <method name="System.Object <UnaryIsTrue_2>m__4B(System.Dynamic.UnaryOperationBinder)">
+ <method name="System.Object <UnaryIsTrue_2>m__4C(System.Dynamic.UnaryOperationBinder)">
<size>52</size>
</method>
- <method name="Void <UnaryIsTrue_2>m__4C(System.Dynamic.BinaryOperationBinder, System.Object)">
+ <method name="Void <UnaryIsTrue_2>m__4D(System.Dynamic.BinaryOperationBinder, System.Object)">
<size>68</size>
</method>
- <method name="Boolean <Main>m__4D(System.Reflection.MethodInfo)">
+ <method name="Boolean <Main>m__4E(System.Reflection.MethodInfo)">
<size>12</size>
</method>
- <method name="System.String <Main>m__4E(System.Reflection.MethodInfo)">
+ <method name="System.String <Main>m__4F(System.Reflection.MethodInfo)">
<size>7</size>
</method>
- <method name="Boolean <Main>m__4F(System.Reflection.MethodInfo)">
+ <method name="Boolean <Main>m__50(System.Reflection.MethodInfo)">
<size>7</size>
</method>
- <method name="Boolean <Main>m__50(Boolean)">
+ <method name="Boolean <Main>m__51(Boolean)">
<size>5</size>
</method>
+ </type>
+ <type name="AssertDynamicObject+<GetFakeMetaObject>c__AnonStorey0">
<method name="Void .ctor()">
<size>7</size>
</method>
- <method name="Void .ctor(Object)">
- <size>7</size>
- </method>
- <method name="Void .cctor()">
- <size>34</size>
- </method>
</type>
- <type name="Tester+<BinaryAddChecked_2>c__AnonStorey0">
+ <type name="Tester+<BinaryAddChecked_2>c__AnonStorey1">
<method name="System.Object <>m__A()">
<size>91</size>
</method>
<size>7</size>
</method>
</type>
- <type name="Tester+<GetIndex_3>c__AnonStorey1">
- <method name="Void <>m__2B(System.Dynamic.GetIndexBinder, System.Object[])">
+ <type name="Tester+<GetIndex_3>c__AnonStorey2">
+ <method name="Void <>m__2C(System.Dynamic.GetIndexBinder, System.Object[])">
<size>92</size>
</method>
<method name="Void .ctor()">
<size>7</size>
</method>
</type>
- <type name="Tester+<InvokeMember_2>c__AnonStorey2">
- <method name="Void <>m__33(System.Dynamic.InvokeMemberBinder, System.Object[])">
+ <type name="Tester+<InvokeMember_2>c__AnonStorey3">
+ <method name="Void <>m__34(System.Dynamic.InvokeMemberBinder, System.Object[])">
<size>109</size>
</method>
<method name="Void .ctor()">
<size>7</size>
</method>
</type>
- <type name="Tester+<>c__DynamicSite0+Container0">
- <method name="Void Invoke(System.Runtime.CompilerServices.CallSite, System.Object, Int32 ByRef)">
- <size>0</size>
- </method>
- <method name="Void .ctor(Object, IntPtr)">
- <size>0</size>
- </method>
- </type>
- <type name="Tester+<>c__DynamicSite0+Container1">
- <method name="Void Invoke(System.Runtime.CompilerServices.CallSite, System.Object, Int32 ByRef)">
- <size>0</size>
- </method>
- <method name="Void .ctor(Object, IntPtr)">
- <size>0</size>
- </method>
- </type>
- <type name="Tester+<InvokeMember_6>c__AnonStorey3">
- <method name="Void <>m__36(System.Dynamic.InvokeMemberBinder, System.Object[])">
+ <type name="Tester+<InvokeMember_6>c__AnonStorey4">
+ <method name="Void <>m__37(System.Dynamic.InvokeMemberBinder, System.Object[])">
<size>119</size>
</method>
<method name="Void .ctor()">
<size>7</size>
</method>
</type>
- <type name="Tester+<SetIndex_3>c__AnonStorey4">
- <method name="Void <>m__3A(System.Dynamic.SetIndexBinder, System.Object[], System.Object)">
+ <type name="Tester+<SetIndex_3>c__AnonStorey5">
+ <method name="Void <>m__3B(System.Dynamic.SetIndexBinder, System.Object[], System.Object)">
<size>119</size>
</method>
<method name="Void .ctor()">
<size>16</size>
</method>
<method name="Void ConvertExplicitTest()">
- <size>569</size>
+ <size>502</size>
</method>
<method name="Void ConvertExplicitCheckedTest()">
<size>87</size>
</method>
</type>
</test>
+ <test name="dtest-025.cs">
+ <type name="C">
+ <method name="Int32 Main()">
+ <size>187</size>
+ </method>
+ <method name="Void .ctor()">
+ <size>7</size>
+ </method>
+ </type>
+ </test>
<test name="dtest-error-01.cs">
<type name="Helper">
<method name="Int32* Foo(Int32)">