I'm looking into it. I've created another small patch, which seems to almost work, except for a problem with the register allocation, which I can't fix right now.
The line foreach (INode node in _devices), where _devices is a InternalSystem.Collections.Generic.List<INode> doesn't pass the AOT. With this patch it does pass, but fails later on in the register allocation in register.Version = ++this.method.RegisterVersions [this.stack.Count]; In SharpOS.AOT.IR.Block::SetRegister. The method compiled is: public INode Lookup(string name) { foreach (DeviceNode device in _devices) { if (device.Name == name) { return device; } } return null; } Where _devices is a class member of type InternalSystem.Collections.Generic.List<INode>. The AOT fails on the callvirt for InternalSystem.Collections.Generic.List<INode>::get_Count. The IL of the method (compiled with VS2005) is: .maxstack 2 .locals init ( [0] int32 i, [1] class SharpOS.Kernel.VFS.INode device, [2] class SharpOS.Kernel.VFS.INode CS$1$0000, [3] bool CS$4$0001) L_0000: nop L_0001: ldc.i4.0 L_0002: stloc.0 L_0003: br.s L_0030 L_0005: nop L_0006: ldarg.0 L_0007: ldfld class InternalSystem.Collections.Generic.List`1<class SharpOS.Kernel.DriverModel.DeviceNode> SharpOS.Kernel.DriverModel.DeviceManager::_devices L_000c: ldloc.0 L_000d: callvirt instance !0 InternalSystem.Collections.Generic.List`1<class SharpOS.Kernel.DriverModel.DeviceNode>::get_Item(int32) L_0012: stloc.1 L_0013: ldloc.1 L_0014: callvirt instance string SharpOS.Kernel.VFS.INode::get_Name() L_0019: ldarg.1 L_001a: call bool [mscorlib]System.String::op_Equality(string, string) L_001f: ldc.i4.0 L_0020: ceq L_0022: stloc.3 L_0023: ldloc.3 L_0024: brtrue.s L_002b L_0026: nop L_0027: ldloc.1 L_0028: stloc.2 L_0029: br.s L_0046 L_002b: nop L_002c: ldloc.0 L_002d: ldc.i4.1 L_002e: add L_002f: stloc.0 L_0030: ldloc.0 L_0031: ldarg.0 L_0032: ldfld class InternalSystem.Collections.Generic.List`1<class SharpOS.Kernel.DriverModel.DeviceNode> SharpOS.Kernel.DriverModel.DeviceManager::_devices L_0037: callvirt instance int32 InternalSystem.Collections.Generic.List`1<class SharpOS.Kernel.DriverModel.DeviceNode>::get_Count() L_003c: clt L_003e: stloc.3 L_003f: ldloc.3 L_0040: brtrue.s L_0005 L_0042: ldnull L_0043: stloc.2 L_0044: br.s L_0046 L_0046: ldloc.2 L_0047: ret The failure is on the CIL instruction on line L_0037. I have no clue how to fix this one, I haven't looked into the register allocation. grover -----Ursprüngliche Nachricht----- Von: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Im Auftrag von Sander van Rossen Gesendet: Samstag, 15. März 2008 14:04 An: sharpos-developers@lists.sourceforge.net Betreff: Re: [SharpOS Developers] AOT issues with generics? This is a known problem, generics haven't been fully implemented yet. ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ _______________________________________________ SharpOS-Developers mailing list SharpOS-Developers@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/sharpos-developers
class.patch
Description: Binary data
------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________ SharpOS-Developers mailing list SharpOS-Developers@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/sharpos-developers