// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
+using System.Collections.Generic;
using System.Globalization;
using System.Reflection;
using System.Runtime.CompilerServices;
if (type_info == null)
type_info = new MonoTypeInfo ();
if ((ctor = type_info.default_ctor) == null) {
- BindingFlags flags = BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic;
+ const BindingFlags flags = BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic;
- ctor = type_info.default_ctor = GetConstructor (flags, null, CallingConventions.Any, Type.EmptyTypes, null);
+ ctor = type_info.default_ctor = GetConstructor (flags, null, CallingConventions.Any, Type.EmptyTypes, null);
}
return ctor;
CallingConventions callConvention,
Type[] types,
ParameterModifier[] modifiers)
+ {
+ ConstructorInfo[] methods = GetConstructors (bindingAttr);
+ return GetConstructorImpl (methods, bindingAttr, binder, callConvention, types, modifiers);
+ }
+
+ internal static ConstructorInfo GetConstructorImpl (ConstructorInfo[] methods, BindingFlags bindingAttr,
+ Binder binder,
+ CallingConventions callConvention,
+ Type[] types,
+ ParameterModifier[] modifiers)
{
if (bindingAttr == BindingFlags.Default)
bindingAttr = BindingFlags.Public | BindingFlags.Instance;
- ConstructorInfo[] methods = GetConstructors (bindingAttr);
ConstructorInfo found = null;
MethodBase[] match;
int count = 0;
internal override MethodInfo GetMethod (MethodInfo fromNoninstanciated)
{
+ if (fromNoninstanciated == null)
+ throw new ArgumentNullException ("fromNoninstanciated");
return GetCorrespondingInflatedMethod (fromNoninstanciated);
}
internal override ConstructorInfo GetConstructor (ConstructorInfo fromNoninstanciated)
{
+ if (fromNoninstanciated == null)
+ throw new ArgumentNullException ("fromNoninstanciated");
return GetCorrespondingInflatedConstructor (fromNoninstanciated);
}
ParameterModifier[] modifiers,
CultureInfo culture, string[] namedParameters)
{
-#if NET_2_0
const string bindingflags_arg = "bindingFlags";
-#else
- const string bindingflags_arg = "invokeAttr";
-#endif
if ((invokeAttr & BindingFlags.CreateInstance) != 0) {
} else if ((invokeAttr & BindingFlags.SetField) != 0) {
FieldInfo f = GetField (name, invokeAttr);
if (f != null) {
-#if NET_2_0
if (args == null)
throw new ArgumentNullException ("providedArgs");
-#endif
if ((args == null) || args.Length != 1)
throw new ArgumentException ("Only the field value can be specified to set a field value.", bindingflags_arg);
f.SetValue (target, args [0]);
public override MemberTypes MemberType {
get {
- if (DeclaringType != null)
+ if (DeclaringType != null && !IsGenericParameter)
return MemberTypes.NestedType;
else
return MemberTypes.TypeInfo;
return getFullName (false, false);
}
-#if NET_2_0 || BOOTSTRAP_NET_2_0
[MethodImplAttribute(MethodImplOptions.InternalCall)]
public extern override Type [] GetGenericArguments ();
[MethodImplAttribute(MethodImplOptions.InternalCall)]
get;
}
+
+ public override Type GetGenericTypeDefinition () {
+ Type res = GetGenericTypeDefinition_impl ();
+ if (res == null)
+ throw new InvalidOperationException ();
+
+ return res;
+ }
+
+#if NET_4_0
+ public override IList<CustomAttributeData> GetCustomAttributesData () {
+ return CustomAttributeData.GetCustomAttributes (this);
+ }
+
+
+ public override Array GetEnumValues () {
+ if (!IsEnum)
+ throw new ArgumentException ("Type is not an enumeration", "enumType");
+
+ return Enum.GetValues (this);
+ }
#endif
- private MethodBase CheckMethodSecurity (MethodBase mb)
+ static MethodBase CheckMethodSecurity (MethodBase mb)
{
#if NET_2_1
return mb;
newArgs [parameters.Length - 1] = paramArray;
args = newArgs;
}
+
+#if NET_4_0
+ //seclevel { transparent = 0, safe-critical = 1, critical = 2}
+ [MethodImplAttribute(MethodImplOptions.InternalCall)]
+ public extern int get_core_clr_security_level ();
+
+ public override bool IsSecurityTransparent
+ {
+ get { return get_core_clr_security_level () == 0; }
+ }
+
+ public override bool IsSecurityCritical
+ {
+ get { return get_core_clr_security_level () > 0; }
+ }
+
+ public override bool IsSecuritySafeCritical
+ {
+ get { return get_core_clr_security_level () == 1; }
+ }
+#endif
+
}
}