// Dynamic member lookup tests
delegate void D ();
+delegate void D2 (decimal d);
class Class
{
public const decimal Decimal = -0.3m;
+ public Class ()
+ {
+ }
+
+ public Class (sbyte extra)
+ {
+ IntValue = extra;
+ }
+
uint s = 77;
protected internal uint this[byte i] {
get {
{
return value;
}
+
+ public int Method (int a, byte b)
+ {
+ return a * b;
+ }
+
+ public void MethodInOut (ref int refValue, out string outValue)
+ {
+ refValue = 3;
+ outValue = "4";
+ }
public static void GenericVoid<T> (T i)
{
{
return i [0] * i.Length;
}
+
+ public static void ArglistMethod (__arglist)
+ {
+ }
}
-class Tester
+class EventClass
{
- delegate void EmptyDelegate ();
- delegate int IntDelegate ();
+ internal event Func<int> OutEvent;
+
+ public int CallEvent ()
+ {
+ return OutEvent ();
+ }
+}
+class Tester
+{
static void Assert<T> (T expected, T value, string name)
{
if (!EqualityComparer<T>.Default.Equals (expected, value)) {
// passed
}
}
+
+ event Func<int> e;
+ int field;
+
#pragma warning disable 169
Action<bool> f2 = Class.GenericVoid;
d = f2;
- Assert<object> (null, d (true), "#2");
+ d (true);
+
+ Func<string, int> f3 = (s) => 3;
+ d = f3;
+ d ("go");
}
void InvokeMember ()
{
-// dynamic d = new Class ();
-// Assert ("vv", d.Method ("vv"), "#1");
+ dynamic d = new Class ();
+ Assert ("vv", d.Method ("vv"), "#1");
+
+ byte b = 2;
+ Assert (6, d.Method (b: b++, a: b), "#1a");
+
+ var arg1 = 1;
+ var arg2 = "a";
+ d.MethodInOut (ref arg1, out arg2);
- dynamic d = 2;
+ d = 2;
Assert (2, Class.StaticMethod (d), "#2");
+ Class.StaticMethod (d);
+ }
+
+ void InvokeMember_Error ()
+ {
+ AssertError (() => {
+ dynamic d_arg = "a";
+ Class.ArglistMethod (d_arg);
+ }, "#1");
+ }
+
+ void InvokeConstructor ()
+ {
+ dynamic d = (sbyte) 8;
+ var r = new Class (d);
+ Assert (8, r.IntValue, "#1");
+
+ D2 method = (decimal e) => { };
+ d = method;
+ var r2 = new D2 (d);
+ }
+
+ void IsEvent ()
+ {
+ dynamic d = this;
+ d.e += new Func<int> (() => 3);
+ Assert (3, d.e (), "#1");
+
+ d.field += 5;
+ Assert (5, d.field, "#2");
+
+ int r = d.field += 7;
+ Assert (12, r, "#2a");
+ Assert (12, d.field, "#2b");
+
+ d = new EventClass ();
+ d.OutEvent += new Func<int> (() => 100);
+ Assert (100, d.CallEvent (), "#3");
}
void MemberGetTest ()
d = new int[4];
Assert (4, d.Length, "#3");
-
- // d.Event += delegate () { }; CS0019
}
void MemberGetError_Null ()
Assert (19, d.Prop, "#1a");
d.Prop = byte.MaxValue;
+ Assert (byte.MaxValue, d.Prop++, "#1b");
+ Assert (1, ++d.Prop, "#1c");
d.Prop++;
- Assert (0, d.Prop, "#1b");
+ Assert (2, d.Prop, "#1d");
+
+ d.Prop += 5;
+ Assert (7, d.Prop, "#1e");
d.StringStatic = "no";
Assert ("no", d.StringStatic, "#2");