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

Attachment: 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

Reply via email to