Imported Upstream version 5.16.0.100

Former-commit-id: 38faa55fb9669e35e7d8448b15c25dc447f25767
This commit is contained in:
Xamarin Public Jenkins (auto-signing)
2018-08-07 15:19:03 +00:00
parent 0a9828183b
commit 7d7f676260
4419 changed files with 170950 additions and 90273 deletions

View File

@ -47,5 +47,48 @@ namespace MonoTests.System.Reflection.Emit
var builder = hello.DefineParameter(1, ParameterAttributes.In, "failParam");
builder.SetConstant(1);
}
public enum E : byte {
E1, E2
}
[Test]
public void SetConstantNullable ()
{
// SetConstant for a Nullable<X> parameter for various X.
var aName = new AssemblyName ("TestSetConstantNullable");
var ab = AppDomain.CurrentDomain.DefineDynamicAssembly (aName, AssemblyBuilderAccess.Run);
var mb = ab.DefineDynamicModule (aName.Name);
var tb = mb.DefineType ("TestItf", TypeAttributes.Abstract | TypeAttributes.Interface);
var paramTypes = new[] { typeof (int?), typeof (int?),
typeof (E?), typeof (E?) };
var methb = tb.DefineMethod ("Method", MethodAttributes.Public | MethodAttributes.Abstract | MethodAttributes.Virtual, typeof (void), paramTypes);
var pb = new ParameterBuilder [paramTypes.Length];
for (int idx = 0, pnum = 1; idx < paramTypes.Length; idx++, pnum++) {
pb [idx] = methb.DefineParameter (pnum, ParameterAttributes.Optional | ParameterAttributes.HasDefault, "arg" + idx);
}
pb [0].SetConstant (null);
pb [1].SetConstant (42);
pb [2].SetConstant (null);
pb [3].SetConstant (E.E2);
var t = tb.CreateType ();
var mi = t.GetMethod ("Method");
Assert.IsNotNull (mi);
var ps = mi.GetParameters ();
Assert.AreEqual (null, ps[0].DefaultValue);
Assert.AreEqual (42, ps[1].DefaultValue);
Assert.AreEqual (null, ps[2].DefaultValue);
Assert.AreEqual ((byte)E.E2, ps[3].DefaultValue);
}
}
}