В последних билдах PEVerify выдает предупреждения (8651):
C:\Program Files\Nemerle>peverify Nemerle.Compiler.dll
Microsoft (R) .NET Framework PE Verifier. Version 3.5.30729.1
Copyright (c) Microsoft Corporation. All rights reserved.
[IL]: Error: [C:\Program Files\Nemerle\Nemerle.Compiler.dll : Nemerle.Compiler.LibraryReference+ExternalTypeInfo::imembe
r_of_memberinfo][offset 0x000000BC][found ref 'Nemerle.Compiler.MemberInfo'][expected ref 'Nemerle.Compiler.IMember'] Un
expected type on the stack.
1 Error(s) Verifying Nemerle.Compiler.dll
Собственно код этого метода:
protected imember_of_memberinfo (m : SR.MemberInfo) : IMember
{
match (m.MemberType)
{
| MemberKinds.Constructor
| MemberKinds.Method => ExternalMethodInfo (tenv, library, m :> SR.MethodBase) : IMember
| MemberKinds.Field => ExternalFieldInfo (tenv, library, m :> SR.FieldInfo)
| MemberKinds.Property => ExternalPropertyInfo(tenv, library, m :> SR.PropertyInfo)
| MemberKinds.Event => ExternalEventInfo (library, m :> SR.EventInfo)
| MemberKinds.NestedType => library.TypeInfoOfType(m :> System.Type)
| _ => null
}
}
По адресу 0xbc находится инструкция ret, на нее переходят все ветки.
Чуть позже попробую
ExternalMethodInfo (tenv, library, m :> SR.MethodBase) :> IMember
Теперь второй ахтунг:
C:\Program Files\Nemerle>peverify Nemerle.MSBuild.Tasks.dll
Microsoft (R) .NET Framework PE Verifier. Version 3.5.30729.1
Copyright (c) Microsoft Corporation. All rights reserved.
[IL]: Error: [C:\Program Files\Nemerle\Nemerle.MSBuild.Tasks.dll : Nemerle.Tools.MSBuildTask.Ext::Append][offset 0x00000
001] Method is not visible.
[IL]: Error: [C:\Program Files\Nemerle\Nemerle.MSBuild.Tasks.dll : Nemerle.Tools.MSBuildTask.Ext::AppendSwitchIfNotNull]
[offset 0x00000096] Method is not visible.
2 Error(s) Verifying Nemerle.MSBuild.Tasks.dll
Это ни как не связано с тем, что статические классы (Ext объявлен как module) в Nemerle можно наследовать от любых других (отличных от object)?
В C# это запрещено...