http://bugzilla.novell.com/show_bug.cgi?id=591225
http://bugzilla.novell.com/show_bug.cgi?id=591225#c0 Summary: Problem when using Reflection.Emit to create a class derived from an abstract class containing a Generic property Classification: Mono Product: Mono: Runtime Version: 2.6.x Platform: x86 OS/Version: All Status: NEW Severity: Normal Priority: P5 - None Component: generics AssignedTo: [email protected] ReportedBy: [email protected] QAContact: [email protected] Found By: --- Blocker: --- User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MS-RTC LM 8; InfoPath.2; .NET4.0C; .NET4.0E) It seems that when using the Reflection.Emit APIs to create a child class of an abstract generic class, the parent class isn't specialized when it comes time for the TypeBuilder to create the type. This seems to only be the case for abstract classes - generic interfaces work properly. Reproducible: Always Steps to Reproduce: 1.Download the latest F# CTP http://www.microsoft.com/downloads/details.aspx?FamilyID=b55f0532-ac3c-4106-918c-5586a953a7da&displaylang=en 2. Run FSI.exe through Mono 3. Enter the following code fragment into fsi.exe: [<AbstractClass>] type B<'a> = abstract A : 'a with get,set type C = inherit B<int> override x.A with get() = 3 and set(v : int) = ();; Actual Results: Result: error FS0193: Operation is not supported. Expected Results: Expected: No error. Here’s a partial stack trace captured from the NotSupportedException: error FS0192: internal error: CreateType: Exception type System.NotSupportedException: Operation is not supported. at System.Reflection.MonoGenericClass.GetConstructorImpl (BindingFlags bindingAttr, System.Reflect ion.Binder binder, CallingConventions callConvention, System.Type[] types, System.Reflection.Paramet erModifier[] modifiers) [0x00000] in <filename unknown>:0 at System.Type.GetConstructor (BindingFlags bindingAttr, System.Reflection.Binder binder, CallingC onventions callConvention, System.Type[] types, System.Reflection.ParameterModifier[] modifiers) [0x 00000] in <filename unknown>:0 at System.Type.GetConstructor (BindingFlags bindingAttr, System.Reflection.Binder binder, System.T ype[] types, System.Reflection.ParameterModifier[] modifiers) [0x00000] in <filename unknown>:0 at System.Reflection.Emit.TypeBuilder.DefineDefaultConstructor (MethodAttributes attributes) [0x00 000] in <filename unknown>:0 at System.Reflection.Emit.TypeBuilder.CreateType () [0x00000] in <filename unknown>:0 at Microsoft.FSharp.Compiler.AbstractIL.RuntimeWriter.TypeBuilder.CreateTypeAndLog (System.Reflect ion.Emit.TypeBuilder ) [0x00000] in <filename unknown>:0 at microsoft.fsharp.compiler.abstractil.runtimewriter+traversetype...@1816.invoke (Int32 priority, As far as I can tell, when setting the parent of type C to type B<int>, MakeGenericType is called on the System.Type object for B, but the type object returned is a MonoGenericClass, not a System.Type, as it should be. (I guess MonoGenericClass is equivalent to System.Reflection.Emit.TypeBuilderInstantiation on the Microsoft CLR?) It looks like the abstract parent class isn’t being properly specialized. -- Configure bugmail: http://bugzilla.novell.com/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are the QA contact for the bug. You are the assignee for the bug. _______________________________________________ mono-bugs maillist - [email protected] http://lists.ximian.com/mailman/listinfo/mono-bugs
