public static CallSiteBinder SetIndex (CSharpBinderFlags flags, Type context, IEnumerable<CSharpArgumentInfo> argumentInfo)
{
- return new CSharpSetIndexBinder (context, argumentInfo);
+ return new CSharpSetIndexBinder (flags, context, argumentInfo);
}
public static CallSiteBinder SetMember (CSharpBinderFlags flags, string name, Type context, IEnumerable<CSharpArgumentInfo> argumentInfo)
{
- return new CSharpSetMemberBinder (name, context, argumentInfo);
+ return new CSharpSetMemberBinder (flags, name, context, argumentInfo);
}
public static CallSiteBinder UnaryOperation (CSharpBinderFlags flags, ExpressionType operation, Type context, IEnumerable<CSharpArgumentInfo> argumentInfo)
{
class CSharpSetIndexBinder : SetIndexBinder
{
+ readonly CSharpBinderFlags flags;
IList<CSharpArgumentInfo> argumentInfo;
Type callingContext;
- public CSharpSetIndexBinder (Type callingContext, IEnumerable<CSharpArgumentInfo> argumentInfo)
+ public CSharpSetIndexBinder (CSharpBinderFlags flags, Type callingContext, IEnumerable<CSharpArgumentInfo> argumentInfo)
: base (CSharpArgumentInfo.CreateCallInfo (argumentInfo, 2))
{
+ this.flags = flags;
this.callingContext = callingContext;
this.argumentInfo = argumentInfo.ToReadOnly ();
}
expr = new Compiler.ElementAccess (expr, args, Compiler.Location.Null);
var source = ctx.CreateCompilerExpression (argumentInfo [indexes.Length + 1], value);
- expr = new Compiler.SimpleAssign (expr, source);
+
+ // Same conversion as in SetMemberBinder
+ if ((flags & CSharpBinderFlags.ValueFromCompoundAssignment) != 0) {
+ expr = new Compiler.RuntimeExplicitAssign (expr, source);
+ } else {
+ expr = new Compiler.SimpleAssign (expr, source);
+ }
expr = new Compiler.Cast (new Compiler.TypeExpression (ctx.ImportType (ReturnType), Compiler.Location.Null), expr, Compiler.Location.Null);
var binder = new CSharpBinder (this, expr, errorSuggestion);
{
class CSharpSetMemberBinder : SetMemberBinder
{
+ readonly CSharpBinderFlags flags;
IList<CSharpArgumentInfo> argumentInfo;
Type callingContext;
-
- public CSharpSetMemberBinder (string name, Type callingContext, IEnumerable<CSharpArgumentInfo> argumentInfo)
+
+ public CSharpSetMemberBinder (CSharpBinderFlags flags, string name, Type callingContext, IEnumerable<CSharpArgumentInfo> argumentInfo)
: base (name, false)
{
+ this.flags = flags;
this.callingContext = callingContext;
this.argumentInfo = argumentInfo.ToReadOnly ();
}
// Field assignment
expr = new Compiler.MemberAccess (expr, Name);
- expr = new Compiler.SimpleAssign (expr, source);
+
+ // Compound assignment under dynamic context does not convert result
+ // expression but when setting member type we need to do explicit
+ // conversion to ensure type match between member type and dynamic
+ // expression type
+ if ((flags & CSharpBinderFlags.ValueFromCompoundAssignment) != 0) {
+ expr = new Compiler.RuntimeExplicitAssign (expr, source);
+ } else {
+ expr = new Compiler.SimpleAssign (expr, source);
+ }
+
expr = new Compiler.Cast (new Compiler.TypeExpression (ctx.ImportType (ReturnType), Compiler.Location.Null), expr, Compiler.Location.Null);
var binder = new CSharpBinder (this, expr, errorSuggestion);
}
}
- public class SimpleAssign : Assign {
+ public class SimpleAssign : Assign
+ {
public SimpleAssign (Expression target, Expression source)
: this (target, source, target.Location)
{
}
}
+ public class RuntimeExplicitAssign : Assign
+ {
+ public RuntimeExplicitAssign (Expression target, Expression source)
+ : base (target, source, target.Location)
+ {
+ }
+
+ protected override Expression ResolveConversions (ResolveContext ec)
+ {
+ source = Convert.ExplicitConversion (ec, source, target.Type, loc);
+ if (source != null)
+ return this;
+
+ return base.ResolveConversions (ec);
+ }
+ }
+
//
// Compiler generated assign
//
source = new Binary (op, left, right, true, loc);
- if (target is DynamicMemberBinder) {
- Arguments targs = ((DynamicMemberBinder) target).Arguments;
+ if (target is DynamicMemberAssignable) {
+ Arguments targs = ((DynamicMemberAssignable) target).Arguments;
source = source.Resolve (ec);
- Arguments args = new Arguments (2);
+ Arguments args = new Arguments (targs.Count + 1);
args.AddRange (targs);
args.Add (new Argument (source));
- source = new DynamicMemberBinder (ma.Name, args, loc).ResolveLValue (ec, right);
-
- // Handles possible event addition/subtraction
- if (op == Binary.Operator.Addition || op == Binary.Operator.Subtraction) {
- args = new Arguments (2);
- args.AddRange (targs);
- args.Add (new Argument (right));
- string method_prefix = op == Binary.Operator.Addition ?
- Event.AEventAccessor.AddPrefix : Event.AEventAccessor.RemovePrefix;
-
- var invoke = DynamicInvocation.CreateSpecialNameInvoke (
- new MemberAccess (right, method_prefix + ma.Name, loc), args, loc).Resolve (ec);
-
- args = new Arguments (1);
- args.AddRange (targs);
- source = new DynamicEventCompoundAssign (ma.Name, args,
- (ExpressionStatement) source, (ExpressionStatement) invoke, loc).Resolve (ec);
+ if (target is DynamicMemberBinder) {
+ source = new DynamicMemberBinder (ma.Name, CSharpBinderFlags.ValueFromCompoundAssignment, args, loc).Resolve (ec);
+
+ // Handles possible event addition/subtraction
+ if (op == Binary.Operator.Addition || op == Binary.Operator.Subtraction) {
+ args = new Arguments (2);
+ args.AddRange (targs);
+ args.Add (new Argument (right));
+ string method_prefix = op == Binary.Operator.Addition ?
+ Event.AEventAccessor.AddPrefix : Event.AEventAccessor.RemovePrefix;
+
+ var invoke = DynamicInvocation.CreateSpecialNameInvoke (
+ new MemberAccess (right, method_prefix + ma.Name, loc), args, loc).Resolve (ec);
+
+ args = new Arguments (1);
+ args.AddRange (targs);
+ source = new DynamicEventCompoundAssign (ma.Name, args,
+ (ExpressionStatement) source, (ExpressionStatement) invoke, loc).Resolve (ec);
+ }
+ } else {
+ source = new DynamicIndexBinder (CSharpBinderFlags.ValueFromCompoundAssignment, args, loc).Resolve (ec);
}
return source;
protected override Expression ResolveConversions (ResolveContext ec)
{
+ //
+ // LAMESPEC: Under dynamic context no target conversion is happening
+ // This allows more natual dynamic behaviour but breaks compatibility
+ // with static binding
+ //
+ if (target is RuntimeValueExpression)
+ return this;
+
TypeSpec target_type = target.Type;
//
{
}
+ public DynamicIndexBinder (CSharpBinderFlags flags, Arguments args, Location loc)
+ : this (args, loc)
+ {
+ base.flags = flags;
+ }
+
protected override Expression CreateCallSiteBinder (ResolveContext ec, Arguments args, bool isSet)
{
Arguments binder_args = new Arguments (3);
- binder_args.Add (new Argument (new BinderFlags (0, this)));
+ binder_args.Add (new Argument (new BinderFlags (flags, this)));
binder_args.Add (new Argument (new TypeOf (new TypeExpression (ec.CurrentType, loc), loc)));
binder_args.Add (new Argument (new ImplicitlyTypedArrayCreation (args.CreateDynamicBinderArguments (ec), loc)));
+ isSet |= (flags & CSharpBinderFlags.ValueFromCompoundAssignment) != 0;
return new Invocation (GetBinder (isSet ? "SetIndex" : "GetIndex", loc), binder_args);
}
}
this.name = name;
}
+ public DynamicMemberBinder (string name, CSharpBinderFlags flags, Arguments args, Location loc)
+ : this (name, args, loc)
+ {
+ base.flags = flags;
+ }
+
protected override Expression CreateCallSiteBinder (ResolveContext ec, Arguments args, bool isSet)
{
Arguments binder_args = new Arguments (4);
- binder_args.Add (new Argument (new BinderFlags (0, this)));
+ binder_args.Add (new Argument (new BinderFlags (flags, this)));
binder_args.Add (new Argument (new StringLiteral (name, loc)));
binder_args.Add (new Argument (new TypeOf (new TypeExpression (ec.CurrentType, loc), loc)));
binder_args.Add (new Argument (new ImplicitlyTypedArrayCreation (args.CreateDynamicBinderArguments (ec), loc)));
+ isSet |= (flags & CSharpBinderFlags.ValueFromCompoundAssignment) != 0;
return new Invocation (GetBinder (isSet ? "SetMember" : "GetMember", loc), binder_args);
}
}
if (mock.GetMemberOperation == null)
throw new ApplicationException ("Unexpected BindGetMember");
- mock.GetMemberOperation (binder);
+ var r = mock.GetMemberOperation (binder);
- return GetFakeMetaObject (new object ());
+ return GetFakeMetaObject (r);
}
public override DynamicMetaObject BindInvoke (InvokeBinder binder, DynamicMetaObject[] args)
public Action<BinaryOperationBinder, object> BinaryOperation;
public Func<ConvertBinder, object> ConvertOperation;
public Action<GetIndexBinder, object[]> GetIndexOperation;
- public Action<GetMemberBinder> GetMemberOperation;
+ public Func<GetMemberBinder, object> GetMemberOperation;
public Action<InvokeBinder, object[]> InvokeOperation;
public Action<InvokeMemberBinder, object[]> InvokeMemberOperation;
public Action<SetIndexBinder, object[], object> SetIndexOperation;
{
mock.ConvertOperation = (binder) => {
Assert (binder.Explicit, true, "Explicit");
- // Assert (binder.IsChecked, true, "IsChecked");
+// Assert (binder.IsChecked, true, "IsChecked");
Assert (binder.Type, typeof (byte), "Type");
return (byte) 2;
};
};
foreach (int v in d) {
- // Console.WriteLine (v);
+// Console.WriteLine (v);
}
}
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null) },
"ArgumentInfo");
+
+ return null;
};
var g = d.Foo;
d ();
}
-
+
void Invoke_3 (dynamic d, DynamicObjectMock mock)
{
try {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null)},
"ArgumentInfo");
-// Assert (binder.Flags, CSharpCallFlags.None, "Flags");
Assert (binder.IgnoreCase, false, "IgnoreCase");
-// Assert (binder.TypeArguments, new Type[0], "TypeArguments");
-
Assert ((IList<object>) args, new object[] { 'a' }, "args");
};
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null)},
"ArgumentInfo");
-// Assert (binder.Flags, CSharpCallFlags.None, "Flags");
Assert (binder.IgnoreCase, false, "IgnoreCase");
-// Assert (binder.TypeArguments, new Type[0], "TypeArguments");
-
Assert ((IList<object>) args, new object[] { mock }, "args");
};
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.IsRef | CSharpArgumentInfoFlags.UseCompileTimeType, null) },
"ArgumentInfo");
- // Assert (binder.Flags, CSharpCallFlags.None, "Flags");
Assert (binder.IgnoreCase, false, "IgnoreCase");
- // Assert (binder.TypeArguments, new Type[0], "TypeArguments");
-
Assert ((IList<object>) args, new object[] { 9 }, "args");
};
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.IsOut | CSharpArgumentInfoFlags.UseCompileTimeType, null) },
"ArgumentInfo");
-// Assert (binder.Flags, CSharpCallFlags.None, "Flags");
Assert (binder.IgnoreCase, false, "IgnoreCase");
-// Assert (binder.TypeArguments, new Type[0], "TypeArguments");
-
Assert ((IList<object>) args, new object[] { 0 }, "args");
};
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant, null),
}, "ArgumentInfo");
- // Assert (binder.Flags, CSharpCallFlags.SimpleNameCall, "Flags");
- Assert (binder.IgnoreCase, false, "IgnoreCase");
- // Assert (binder.TypeArguments, Type.EmptyTypes, "TypeArguments");
+ Assert (binder.IgnoreCase, false, "IgnoreCase");
Assert ((IList<object>) args, new object[] { d, null }, "args");
};
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null)
}, "ArgumentInfo");
-// Assert (binder.Flags, CSharpCallFlags.None, "Flags");
- Assert (binder.IgnoreCase, false, "IgnoreCase");
-// Assert (binder.TypeArguments, new Type[] { typeof (object) }, "TypeArguments");
+ Assert (binder.IgnoreCase, false, "IgnoreCase");
Assert ((IList<object>) args, new object[0], "args");
};
d.Foo = d_const;
}
+ void SetMember_2 (dynamic d, DynamicObjectMock mock)
+ {
+ mock.GetMemberOperation = (binder) => {
+ Assert (binder.Name, "Foo", "Name");
+ Assert (binder.IgnoreCase, false, "IgnoreCase");
+ AssertArgument (binder, new[] {
+ CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null) },
+ "ArgumentInfo");
+
+ return mock;
+ };
+
+ mock.BinaryOperation = (binder, arg) => {
+ Assert (binder.Operation, ExpressionType.MultiplyAssign, "Operation");
+ AssertArgument (binder, new[] {
+ CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
+ CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant, null) },
+ "ArgumentInfo");
+
+ Assert (arg, null, "arg");
+ };
+
+ mock.SetMemberOperation = (binder, value) => {
+ Assert (binder.Name, "Foo", "Name");
+ Assert (binder.IgnoreCase, false, "IgnoreCase");
+ AssertArgument (binder, new[] {
+ CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
+ CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null)
+ }, "ArgumentInfo");
+ };
+
+ d.Foo *= null;
+ }
+
void UnaryPlus_1 (dynamic d, DynamicObjectMock mock)
{
mock.UnaryOperation = (binder) => {
--- /dev/null
+using System;
+
+public class Test
+{
+ byte Prop {
+ get { return 4; }
+ set { }
+ }
+
+ byte this [int arg] {
+ get { return 2; }
+ set { }
+ }
+
+ public static int Main ()
+ {
+ dynamic v = 'a';
+ dynamic a = new Test ();
+
+ string s = "-sdfas";
+
+ // dynamic compound assignment with different result type
+ v += s;
+
+ if (v != "a-sdfas")
+ return 1;
+
+ byte b = 4;
+ a.Prop *= b;
+ a[4] ^= b;
+
+ return 0;
+ }
+}
\ No newline at end of file
<size>96</size>
</method>
<method name="System.Dynamic.DynamicMetaObject BindGetMember(System.Dynamic.GetMemberBinder)">
- <size>56</size>
+ <size>53</size>
</method>
<method name="System.Dynamic.DynamicMetaObject BindInvoke(System.Dynamic.InvokeBinder, System.Dynamic.DynamicMetaObject[])">
<size>96</size>
<method name="Void <GetIndex_2>m__2B(System.Dynamic.GetIndexBinder, System.Object[])">
<size>111</size>
</method>
- <method name="Void <GetMember_1>m__2D(System.Dynamic.GetMemberBinder)">
- <size>66</size>
- </method>
<method name="Void <Invoke_1>m__2E(System.Dynamic.InvokeBinder, System.Object[])">
<size>101</size>
</method>
<method name="Void <SetMember_1>m__3D(System.Dynamic.SetMemberBinder, System.Object)">
<size>101</size>
</method>
- <method name="System.Object <UnaryPlus_1>m__3E(System.Dynamic.UnaryOperationBinder)">
+ </type>
+ <type name="Tester+<InvokeMember_2>c__AnonStorey3">
+ <method name="Void <>m__35(System.Dynamic.InvokeMemberBinder, System.Object[])">
+ <size>109</size>
+ </method>
+ </type>
+ <type name="Tester+<InvokeMember_6>c__AnonStorey4">
+ <method name="Void <>m__38(System.Dynamic.InvokeMemberBinder, System.Object[])">
+ <size>119</size>
+ </method>
+ </type>
+ <type name="Tester+<SetIndex_3>c__AnonStorey5">
+ <method name="Void <>m__3C(System.Dynamic.SetIndexBinder, System.Object[], System.Object)">
+ <size>119</size>
+ </method>
+ </type>
+ <type name="Tester+<InvokeMember_3>c__DynamicSite30+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+<InvokeMember_4>c__DynamicSite31+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">
+ <method name="Void SetMember_2(System.Object, DynamicObjectMock)">
+ <size>372</size>
+ </method>
+ <method name="System.Object <GetMember_1>m__2D(System.Dynamic.GetMemberBinder)">
+ <size>67</size>
+ </method>
+ <method name="Void <SetMember_2>m__3F(System.Dynamic.BinaryOperationBinder, System.Object)">
+ <size>68</size>
+ </method>
+ <method name="Void <SetMember_2>m__40(System.Dynamic.SetMemberBinder, System.Object)">
+ <size>76</size>
+ </method>
+ <method name="System.Object <UnaryPlus_1>m__41(System.Dynamic.UnaryOperationBinder)">
<size>47</size>
</method>
- <method name="System.Object <UnaryMinus_1>m__3F(System.Dynamic.UnaryOperationBinder)">
+ <method name="System.Object <UnaryMinus_1>m__42(System.Dynamic.UnaryOperationBinder)">
<size>47</size>
</method>
- <method name="System.Object <UnaryNot_1>m__40(System.Dynamic.UnaryOperationBinder)">
+ <method name="System.Object <UnaryNot_1>m__43(System.Dynamic.UnaryOperationBinder)">
<size>47</size>
</method>
- <method name="System.Object <UnaryOnesComplement_1>m__41(System.Dynamic.UnaryOperationBinder)">
+ <method name="System.Object <UnaryOnesComplement_1>m__44(System.Dynamic.UnaryOperationBinder)">
<size>47</size>
</method>
- <method name="System.Object <UnaryDecrement_1>m__42(System.Dynamic.UnaryOperationBinder)">
+ <method name="System.Object <UnaryDecrement_1>m__45(System.Dynamic.UnaryOperationBinder)">
<size>47</size>
</method>
- <method name="System.Object <UnaryDecrement_2>m__43(System.Dynamic.UnaryOperationBinder)">
+ <method name="System.Object <UnaryDecrement_2>m__46(System.Dynamic.UnaryOperationBinder)">
<size>51</size>
</method>
- <method name="System.Object <UnaryIncrement_1>m__44(System.Dynamic.UnaryOperationBinder)">
+ <method name="System.Object <UnaryIncrement_1>m__47(System.Dynamic.UnaryOperationBinder)">
<size>47</size>
</method>
- <method name="System.Object <UnaryIncrement_2>m__45(System.Dynamic.UnaryOperationBinder)">
+ <method name="System.Object <UnaryIncrement_2>m__48(System.Dynamic.UnaryOperationBinder)">
<size>51</size>
</method>
- <method name="System.Object <UnaryIsFalse_1>m__46(System.Dynamic.UnaryOperationBinder)">
+ <method name="System.Object <UnaryIsFalse_1>m__49(System.Dynamic.UnaryOperationBinder)">
<size>52</size>
</method>
- <method name="Void <UnaryIsFalse_1>m__47(System.Dynamic.BinaryOperationBinder, System.Object)">
+ <method name="Void <UnaryIsFalse_1>m__4A(System.Dynamic.BinaryOperationBinder, System.Object)">
<size>68</size>
</method>
- <method name="System.Object <UnaryIsFalse_2>m__48(System.Dynamic.UnaryOperationBinder)">
+ <method name="System.Object <UnaryIsFalse_2>m__4B(System.Dynamic.UnaryOperationBinder)">
<size>52</size>
</method>
- <method name="Void <UnaryIsFalse_2>m__49(System.Dynamic.BinaryOperationBinder, System.Object)">
+ <method name="Void <UnaryIsFalse_2>m__4C(System.Dynamic.BinaryOperationBinder, System.Object)">
<size>68</size>
</method>
- <method name="System.Object <UnaryIsFalse_3>m__4A(System.Dynamic.UnaryOperationBinder)">
+ <method name="System.Object <UnaryIsFalse_3>m__4D(System.Dynamic.UnaryOperationBinder)">
<size>52</size>
</method>
- <method name="Void <UnaryIsFalse_3>m__4B(System.Dynamic.BinaryOperationBinder, System.Object)">
+ <method name="Void <UnaryIsFalse_3>m__4E(System.Dynamic.BinaryOperationBinder, System.Object)">
<size>67</size>
</method>
- <method name="System.Object <UnaryIsTrue_1>m__4C(System.Dynamic.UnaryOperationBinder)">
+ <method name="System.Object <UnaryIsTrue_1>m__4F(System.Dynamic.UnaryOperationBinder)">
<size>52</size>
</method>
- <method name="System.Object <UnaryIsTrue_2>m__4D(System.Dynamic.UnaryOperationBinder)">
+ <method name="System.Object <UnaryIsTrue_2>m__50(System.Dynamic.UnaryOperationBinder)">
<size>52</size>
</method>
- <method name="Void <UnaryIsTrue_2>m__4E(System.Dynamic.BinaryOperationBinder, System.Object)">
+ <method name="Void <UnaryIsTrue_2>m__51(System.Dynamic.BinaryOperationBinder, System.Object)">
<size>68</size>
</method>
- <method name="Boolean <Main>m__4F(System.Reflection.MethodInfo)">
+ <method name="Boolean <Main>m__52(System.Reflection.MethodInfo)">
<size>12</size>
</method>
- <method name="System.String <Main>m__50(System.Reflection.MethodInfo)">
+ <method name="System.String <Main>m__53(System.Reflection.MethodInfo)">
<size>7</size>
</method>
- <method name="Boolean <Main>m__51(System.Reflection.MethodInfo)">
+ <method name="Boolean <Main>m__54(System.Reflection.MethodInfo)">
<size>7</size>
</method>
- <method name="Boolean <Main>m__52(Boolean)">
+ <method name="Boolean <Main>m__55(Boolean)">
<size>5</size>
</method>
</type>
- <type name="Tester+<InvokeMember_2>c__AnonStorey3">
- <method name="Void <>m__35(System.Dynamic.InvokeMemberBinder, System.Object[])">
- <size>109</size>
- </method>
- </type>
- <type name="Tester+<InvokeMember_6>c__AnonStorey4">
- <method name="Void <>m__38(System.Dynamic.InvokeMemberBinder, System.Object[])">
- <size>119</size>
- </method>
- </type>
- <type name="Tester+<SetIndex_3>c__AnonStorey5">
- <method name="Void <>m__3C(System.Dynamic.SetIndexBinder, System.Object[], System.Object)">
- <size>119</size>
- </method>
- </type>
- <type name="Tester+<InvokeMember_3>c__DynamicSite30+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+<InvokeMember_4>c__DynamicSite31+Container0">
- <method name="Void Invoke(System.Runtime.CompilerServices.CallSite, System.Object, Int32 ByRef)">
- <size>0</size>
+ <type name="Tester+<SetMember_2>c__AnonStorey6">
+ <method name="System.Object <>m__3E(System.Dynamic.GetMemberBinder)">
+ <size>72</size>
</method>
- <method name="Void .ctor(Object, IntPtr)">
- <size>0</size>
+ <method name="Void .ctor()">
+ <size>7</size>
</method>
</type>
</test>
<size>231</size>
</method>
<method name="Void IsEvent()">
- <size>2697</size>
+ <size>2673</size>
</method>
<method name="Void MemberGetTest()">
<size>810</size>
<size>36</size>
</method>
<method name="Void MemberSetTest()">
- <size>2970</size>
+ <size>2964</size>
</method>
<method name="Void MemberSetError_Null()">
<size>36</size>
</method>
</type>
</test>
+ <test name="dtest-033.cs">
+ <type name="Test">
+ <method name="Byte get_Prop()">
+ <size>2</size>
+ </method>
+ <method name="Void set_Prop(Byte)">
+ <size>1</size>
+ </method>
+ <method name="Byte get_Item(Int32)">
+ <size>2</size>
+ </method>
+ <method name="Void set_Item(Int32, Byte)">
+ <size>1</size>
+ </method>
+ <method name="Int32 Main()">
+ <size>804</size>
+ </method>
+ <method name="Void .ctor()">
+ <size>7</size>
+ </method>
+ </type>
+ </test>
<test name="dtest-collectioninit-01.cs">
<type name="Test">
<method name="Int32 Main()">