Fix TypeBuilder's base type in ref (#42947)
authorStephen Toub <stoub@microsoft.com>
Fri, 9 Oct 2020 10:14:22 +0000 (06:14 -0400)
committerGitHub <noreply@github.com>
Fri, 9 Oct 2020 10:14:22 +0000 (06:14 -0400)
* Fix Type/Enum/GenericTypeParameterBuilders' base types in ref

* Fix mono's EnumBuilder.IsAssignableFrom implementation

With the ref change, a test started failing because the C# compiler started generating a call to TypeInfo's IsAssignableFrom(TypeInfo) rather than Type's IsAssignableFrom(TypeInfo).

src/libraries/System.Reflection.Emit/ref/System.Reflection.Emit.cs
src/mono/netcore/System.Private.CoreLib/src/System/Reflection/Emit/EnumBuilder.Mono.cs

index eb020bb..6d08e0f 100644 (file)
@@ -84,7 +84,7 @@ namespace System.Reflection.Emit
         public void SetImplementationFlags(System.Reflection.MethodImplAttributes attributes) { }
         public override string ToString() { throw null; }
     }
-    public sealed partial class EnumBuilder : System.Type
+    public sealed partial class EnumBuilder : System.Reflection.TypeInfo
     {
         internal EnumBuilder() { }
         public override System.Reflection.Assembly Assembly { get { throw null; } }
@@ -192,7 +192,7 @@ namespace System.Reflection.Emit
         public void SetOffset(int iOffset) { }
         public override void SetValue(object? obj, object? val, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, System.Globalization.CultureInfo? culture) { }
     }
-    public sealed partial class GenericTypeParameterBuilder : System.Type
+    public sealed partial class GenericTypeParameterBuilder : System.Reflection.TypeInfo
     {
         internal GenericTypeParameterBuilder() { }
         public override System.Reflection.Assembly Assembly { get { throw null; } }
@@ -422,7 +422,7 @@ namespace System.Reflection.Emit
         public override void SetValue(object? obj, object? value, object?[]? index) { }
         public override void SetValue(object? obj, object? value, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object?[]? index, System.Globalization.CultureInfo? culture) { }
     }
-    public sealed partial class TypeBuilder : System.Type
+    public sealed partial class TypeBuilder : System.Reflection.TypeInfo
     {
         internal TypeBuilder() { }
         public const int UnspecifiedTypeSize = 0;
index 8296758..e3e638a 100644 (file)
@@ -471,7 +471,8 @@ namespace System.Reflection.Emit
 
         public override bool IsAssignableFrom([NotNullWhen(true)] TypeInfo? typeInfo)
         {
-            return base.IsAssignableFrom(typeInfo);
+            if (typeInfo == null) return false;
+            return IsAssignableFrom(typeInfo.AsType());
         }
 
         public override bool IsTypeDefinition => true;