[corlib] Update SafeHandle dispose pattern to match .net. Fixes #25132
[mono.git] / mcs / mcs / field.cs
index 278f71e0f1830471ef1bda269a3856f7efafaaf2..824b5c781cd35c1ae8594baccd1240de36f31eda 100644 (file)
@@ -425,7 +425,7 @@ namespace Mono.CSharp
                        }
                        
                        // Create nested fixed buffer container
-                       string name = String.Format ("<{0}>__FixedBuffer{1}", Name, GlobalCounter++);
+                       string name = String.Format ("<{0}>__FixedBuffer{1}", TypeDefinition.FilterNestedName (Name), GlobalCounter++);
                        fixed_buffer_type = Parent.TypeBuilder.DefineNestedType (name,
                                TypeAttributes.NestedPublic | TypeAttributes.Sealed | TypeAttributes.BeforeFieldInit,
                                Compiler.BuiltinTypes.ValueType.GetMetaInfo ());
@@ -605,9 +605,23 @@ namespace Mono.CSharp
                        if (TypeSpec.IsReferenceType (MemberType))
                                return true;
 
-                       if (MemberType.IsEnum)
+                       if (MemberType.IsPointer)
                                return true;
 
+                       if (MemberType.IsEnum) {
+                               switch (EnumSpec.GetUnderlyingType (MemberType).BuiltinType) {
+                               case BuiltinTypeSpec.Type.SByte:
+                               case BuiltinTypeSpec.Type.Byte:
+                               case BuiltinTypeSpec.Type.Short:
+                               case BuiltinTypeSpec.Type.UShort:
+                               case BuiltinTypeSpec.Type.Int:
+                               case BuiltinTypeSpec.Type.UInt:
+                                       return true;
+                               default:
+                                       return false;
+                               }
+                       }
+
                        return false;
                }
 
@@ -709,7 +723,7 @@ namespace Mono.CSharp
                                loc = parameter.Location;
                        }
 
-                       public override TypeSpec ResolveAsType (IMemberContext mc)
+                       public override TypeSpec ResolveAsType (IMemberContext mc, bool allowUnboundTypeArguments)
                        {
                                return parameter.Type;
                        }