Re: PEVerify выдает предупреждения
От: Иванков Дмитрий Россия  
Дата: 22.03.10 11:02
Оценка:
Здравствуйте, hardcase, Вы писали:

H>В последних билдах PEVerify выдает предупреждения (8651):

Не только в последних, насколько я помню.

H>
H>[IL]: Error: [C:\Program Files\Nemerle\Nemerle.Compiler.dll : Nemerle.Compiler.LibraryReference+ExternalTypeInfo::imembe
H>r_of_memberinfo][offset 0x000000BC][found ref 'Nemerle.Compiler.MemberInfo'][expected ref 'Nemerle.Compiler.IMember'] Un
H>expected type on the stack.
H>


Тут, насколько помню происходит следующее: ncc видит, что не надо делать преобразование типа и кладёт во всех ветках на не-совсем-типизированный стек значение. В то время как у верификатора по стандарту есть алгоритм вывода типов ячеек стека, который выводит по первым веткам не интерфейс IMember, а общий класс MemberInfo, а потом находит противоречие с ним. Собственно hint на первой ветке не случайно, алгоритм вывода типов Nemerle тут тоже бы ошибся, но при этом хинт не достигает IL.
В багтрекере это есть, ссылку сходу не дам.

H>
H>[IL]: Error: [C:\Program Files\Nemerle\Nemerle.MSBuild.Tasks.dll : Nemerle.Tools.MSBuildTask.Ext::Append][offset 0x00000
H>001] Method is not visible.
H>[IL]: Error: [C:\Program Files\Nemerle\Nemerle.MSBuild.Tasks.dll : Nemerle.Tools.MSBuildTask.Ext::AppendSwitchIfNotNull]
H>[offset 0x00000096] Method is not visible.
H>


Тут мы в статическом методе зовём protected базовый метод, чего вообще-то делать нельзя и тут кривой дизайн, ну или мягче, несовместимость расширяемости наследованием и методами-расширениями.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.