Re[7]: Баг или еще не реализовано?
От: Аноним  
Дата: 11.09.06 14:44
Оценка:
Здравствуйте, VladD2, Вы писали:

Есть простой класс (листинг ниже) строю по мему TypeInfo, нахожу с помощью LookupMember Field1, пытаюсь по этому полю получить информацию GetFieldInfo и вылазит эксепшен:Nemerle.Completion2.Tests.SingatureGenerator.TestField : Nemerle.Core.AssertionException : assertion ``field_builder != null'' failed in file ncc\hierarchy\ClassMembers.n, line 442:
Стек трейс:
в Nemerle.Compiler.FieldBuilder.GetFieldInfo() в D:\Projects\Nemerle\ncc\hierarchy\ClassMembers.n:строка 442
в Nemerle.Compiler.FieldBuilder.Nemerle.Compiler.IField.GetFieldInfo() в D:\Projects\Nemerle\ncc\hierarchy\ClassMembers.n:строка 440
в Nemerle.Completion2.SingatureGenerator.GetFieldSingature(IField fieldInfo) в D:\Projects\Nemerle.VSIP\Nemerle.Compiler.Utils\Nemerle.Completion2\CodeModel\SinпatureGenerator.n:строка 86
в Nemerle.Completion2.Tests.SingatureGenerator.TestField() в D:\Projects\Nemerle.VSIP\Nemerle.Compiler.Utils\Nemerle.Completion2\CodeModel\Tests\SinпatureGenerator.n:строка 93

Field1
using System;
namespace Nemerle.Compiler.Utils.Nemerle.Completion2.CodeModel.Tests.Content
{
    public class Content
    {
        public Method1() : void
        {
            3;
        }

        public Method2(i: int) : double
        {
            2;
        }

        public mutable Field1 : string;

        public PropertyFull : string
        {
            get {"1";}
            set {def i = 1;}
        }

        public PropertyGet : double
        {
            get {1;}
        }

    }
}
Re[7]: Есть простая задачка для желающих
От: robot01  
Дата: 11.09.06 14:46
Оценка:
Предыдущее сообщение от меня? старого склеротика
Re[8]: Баг или еще не реализовано?
От: IT Россия linq2db.com
Дата: 11.09.06 23:14
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Есть простой класс (листинг ниже) строю по мему TypeInfo, нахожу с помощью LookupMember Field1, пытаюсь по этому полю получить информацию GetFieldInfo и вылазит эксепшен:Nemerle.Completion2.Tests.SingatureGenerator.TestField : Nemerle.Core.AssertionException : assertion ``field_builder != null'' failed in file ncc\hierarchy\ClassMembers.n, line 442:


А что в отладчике видать?
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[9]: Баг или еще не реализовано?
От: robot01  
Дата: 12.09.06 07:02
Оценка:
Здравствуйте, IT, Вы писали:

IT>А что в отладчике видать?


Не очень понял вопрос? в отладчике то и видать эксепшен..
Re[9]: Есть простая задачка для желающих
От: vdimas Россия  
Дата: 12.09.06 11:50
Оценка:
Здравствуйте, VladD2, Вы писали:

V>>Сорри, что встреваю, а что не так с NUnit при запуске тестов на отладку?


VD>GUI которое на фиг не упало.


Есть же консольный test-runner, стартует действительно, на пол-секунды быстрее, а во вторых есть удобный аттрибут Explicit, у нас тесты и фикстуры помечены им, кроме тех, которые должны отрабатывать всегда без принудительного запуска. Для твоего сценария надо просто убирать этот аттрибут из теста, который ты намереваешься многократно гонять в дебаге. Как раз получишь минимум движений. Для GUI test-runnera все в силе, когда запускается с опцией автоматического прогона тестов (т.е. телодвижений ничуть не больше), но раздельный вывод информации мне тоже нравится больше.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[10]: Баг или еще не реализовано?
От: IT Россия linq2db.com
Дата: 12.09.06 12:20
Оценка:
Здравствуйте, robot01, Вы писали:

IT>>А что в отладчике видать?


R>Не очень понял вопрос? в отладчике то и видать эксепшен..


Я имею ввиду чтр если побраузить объект в Quick Watch? Может у него данные в каком-нибудь другом месте лежать.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[11]: Баг или еще не реализовано?
От: robot01  
Дата: 12.09.06 12:53
Оценка:
Здравствуйте, IT, Вы писали:

IT>Я имею ввиду чтр если побраузить объект в Quick Watch? Может у него данные в каком-нибудь другом месте лежать.

хммм в принципе объект с которым я работаю это FieldBuilder и у него есть внутреннее поле ty, где лежит все что нужно, НО я не уверен что приводить IField к FieldBuilder корректно... и еще я не уверен что ty будет заполняться если мы будем рабоать через рефликсию и не напряму парсить файл.... вообще очень много но....
Re[12]: Баг или еще не реализовано?
От: VladD2 Российская Империя www.nemerle.org
Дата: 12.09.06 13:28
Оценка:
Здравствуйте, robot01, Вы писали:

R>хммм в принципе объект с которым я работаю это FieldBuilder и у него есть внутреннее поле ty, где лежит все что нужно, НО я не уверен что приводить IField к FieldBuilder корректно... и еще я не уверен что ty будет заполняться если мы будем рабоать через рефликсию и не напряму парсить файл.... вообще очень много но....


Корректно. IField, как и другие интерфейсы наследники IMember, это общая информация о члене независящая от того является ли он членом класса импортированного из другой сборки или членом класса распознанным из кода. Но реализуются они разыми типами. Для распозного из кода члена всегда выступает какй-то Builder (для поля FieldBuilder, для метода MethodBuilder, и т.п.).

Вот только нужно не "приводить", а пользоваться паттерн-матчингом. Чтобы не грохнуло, если все же член импортирован из другой сборки.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Есть простая задачка для желающих
От: VladD2 Российская Империя www.nemerle.org
Дата: 12.09.06 13:28
Оценка: :)
Здравствуйте, vdimas, Вы писали:

V>Есть же консольный test-runner, стартует действительно, на пол-секунды быстрее, а во вторых есть удобный аттрибут Explicit, у нас тесты и фикстуры помечены им, кроме тех, которые должны отрабатывать всегда без принудительного запуска. Для твоего сценария надо просто убирать этот аттрибут из теста, который ты намереваешься многократно гонять в дебаге. Как раз получишь минимум движений. Для GUI test-runnera все в силе, когда запускается с опцией автоматического прогона тестов (т.е. телодвижений ничуть не больше), но раздельный вывод информации мне тоже нравится больше.


Ладно. В следующий раз разбирусь. Пока просто в лом дергаться. Все работает...
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Баг или еще не реализовано?
От: robot01  
Дата: 12.09.06 14:08
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Корректно. IField, как и другие интерфейсы наследники IMember, это общая информация о члене независящая от того является ли он членом класса импортированного из другой сборки или членом класса распознанным из кода. Но реализуются они разыми типами. Для распозного из кода члена всегда выступает какй-то Builder (для поля FieldBuilder, для метода MethodBuilder, и т.п.).


VD>Вот только нужно не "приводить", а пользоваться паттерн-матчингом. Чтобы не грохнуло, если все же член импортирован из другой сборки.


Я собственно догадался об это, вопрос заключался не в том какой тип за что отвечает первичный вопрос:Баг или еще не реализовано
Автор:
Дата: 11.09.06
.
Re[14]: Баг или еще не реализовано?
От: VladD2 Российская Империя www.nemerle.org
Дата: 12.09.06 14:30
Оценка:
Здравствуйте, robot01, Вы писали:

R>Я собственно догадался об это, вопрос заключался не в том какой тип за что отвечает первичный вопрос:Баг или еще не реализовано
Автор:
Дата: 11.09.06
.


Так вопрос снят?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Есть простая задачка для желающих
От: vdimas Россия  
Дата: 12.09.06 14:51
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Ладно. В следующий раз разбирусь. Пока просто в лом дергаться. Все работает...


[Test, Explicit]
public void SomeTest() {}

[TestFixture, Explicit]
public class SomeTestFixture : OurBaseTestFixture {

}


Фикстуры и тесты, помеченные Explicit не запускаются автоматом, поэтому для многократного автоматического захода в некий тест мы убираем/комментируем Explicit и попадаем в тест автоматом при запуске.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[15]: Баг или еще не реализовано?
От: robot01  
Дата: 13.09.06 07:28
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Так вопрос снят?


Нет вопрос не снят баг никуда не делся, а то что я описал (внутреннее поле ty) работет только для типов которые получаются разбором исходников.
Re[8]: Есть простая задачка для желающих
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.09.06 12:57
Оценка:
Здравствуйте, Nuald, Вы писали:

N>Думаю, проще было бы добавить такую проверку (или даже автоматическую настройку), чтобы люди не пугались, и не задавали глупые вопросы. Потом сделаю, но как только разберусь со следующей ошибкой — я запускаю ConsoleTest и у меня вылетает assert в Nemerle.Compiler.Utils\Nemerle.Completion2\Tests\Tests.n, line 55, "result is null", т.е. строчка

N>
N>def result = _project.GetQuickTipInfo(file, line, col, GetTextFromFile(file, _, _, _, _));
N>

N>выдает null (хотя все NUnit-тесты проходят нормально). По идее file должен находится и открываться (Working Dir в опциях проекта указан правильно). С чем это может быть связано?

Незнаю. У меня все работает нормально. Проверь еще раз "Working Dir". У меня он таков:
D:\MyProjects\RSDN\Nemerle\Nemerle.VSIP\Nemerle.Compiler.Utils\

Так же обнови и перекомпилируй исходники компилятора и интеграции. Возможно у тебя рассинхронизация версий. Так же стоит почистить все старые версии бинарников. Может где зацепляется старье.

VD>>Если тебе что-то надо, то пиши свой тест и из под отладчика с ним возись. За одно в будущем все твои тесты будут автоматом проверяться и если что-то где-то испортится, то это будет сразу видно.


N>Мне проще это делать из под Решарпера — он умеет как просто запускать тесты, так их и отлаживать.


С решарпером другого гимора моного. Ну, да хочешь делай через него. Но тут я тебе не помошник. Я его просто не стал ставить когда выинт переставлял на ноуте.

VD>>В Nemerle.VsIntegration.Tests я не суюсь. Это не мои тесты. Мои на сегодня все зеленинькие.


N>Хм, а чьи? Может тогда проще их удалить, если никто не поддерживает. В принципе, могу привести в работоспособное состояние, если нужно.


Относятся к работе с дизайнером формам. Я туда не лазил. Формы у меня тоже не работают. Но удалять ничего не надо. Пусть автор разбираетя или те кто потом будут заниматься дизайнером форм.

VD>>Так что добавляй новый тест и делай в нем все что душе угодно. Есть только два условия. Ты не должен очень сильно занимать процессорное время и много выводить на консоль (все же тесты часто гоняются как напрямую так и через НЮнит).


N>Мы как-то делали обработку графики, и там был такой стресс-тест — надо было загрузить большую-большую картинку и ее обработать без вылетов о нехватке памяти и уложиться в определенный интервал времени. Это было частью NUnit-теста и занимало около 4-5 минут


Это ваши проблемы. Я такой тест сразу грохну. Мне минуты компиляции компилятора уже выше крыши.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: Баг или еще не реализовано?
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.09.06 12:57
Оценка:
Здравствуйте, robot01, Вы писали:

R>Нет вопрос не снят баг никуда не делся, а то что я описал (внутреннее поле ty) работет только для типов которые получаются разбором исходников.


Незнаю, поглядел код и не вижу проблемы.
IField унаследован от IMember. IMember имеет метод GetMemType(). Так что делаем так:
def tyInfo = member.GetMemType().TypeInfo;

и получаем универсальное описание для любого поля.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Есть простая задачка для желающих
От: Nuald Россия http://nuald.blogspot.com
Дата: 14.09.06 23:15
Оценка:
Здравствуйте, VladD2, Вы писали:

N>>Хм, а чьи? Может тогда проще их удалить, если никто не поддерживает. В принципе, могу привести в работоспособное состояние, если нужно.

VD>Относятся к работе с дизайнером формам. Я туда не лазил. Формы у меня тоже не работают. Но удалять ничего не надо. Пусть автор разбираетя или те кто потом будут заниматься дизайнером форм.

Я ничего удалять и не собираюсь, а наоборот, привести в работоспособное состояние. Посмотрю на досуге, как только разберусь с ConsoleTest.

N>>Мы как-то делали обработку графики, и там был такой стресс-тест — надо было загрузить большую-большую картинку и ее обработать без вылетов о нехватке памяти и уложиться в определенный интервал времени. Это было частью NUnit-теста и занимало около 4-5 минут

VD>Это ваши проблемы. Я такой тест сразу грохну. Мне минуты компиляции компилятора уже выше крыши.

Ну понятно дело — тесты должны быть короткими. Хотя как вспомню CCNET от Фаулера и Ко, у них тесты-то маленькие, но их такая куча Впрочем, я не фанатик TDD, так что мне наверное не понять.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[10]: Есть простая задачка для желающих
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.09.06 00:12
Оценка:
Здравствуйте, Nuald, Вы писали:

N>Я ничего удалять и не собираюсь, а наоборот, привести в работоспособное состояние. Посмотрю на досуге, как только разберусь с ConsoleTest.


Это пожалуйса. Главное чтобы не наоборот. Тут есть смысл с их автором пообщаться.

N>Ну понятно дело — тесты должны быть короткими. Хотя как вспомню CCNET от Фаулера и Ко, у них тесты-то маленькие, но их такая куча


Кучу можно отключить. А вот ждать когда закончится 1 длинный прийдется по любому.

N>Впрочем, я не фанатик TDD, так что мне наверное не понять.


Я тоже. И вообще разум рулит.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Есть простая задачка для желающих
От: Блудов Павел Россия  
Дата: 19.09.06 03:43
Оценка:
Здравствуйте, Nuald, Вы писали:

N>
N>def result = _project.GetQuickTipInfo(file, line, col, GetTextFromFile(file, _, _, _, _));
N>

N>выдает null (хотя все NUnit-тесты проходят нормально). По идее file должен находится и открываться (Working Dir в опциях проекта указан правильно). С чем это может быть связано?

Пробелов, случайно, нет в этом самом Working Dir?
Re[9]: Есть простая задачка для желающих
От: Nuald Россия http://nuald.blogspot.com
Дата: 19.09.06 04:03
Оценка:
Здравствуйте, Блудов Павел, Вы писали:

БП>Пробелов, случайно, нет в этом самом Working Dir?


Нет. Вообще, проблему я решил — слишком много было Nemerle.Compiler.dll по системе разбросано. По ходу, пока я разбирался со сборкой Немерле, NGen понаделал делов
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Как всё запущено в pdb...
От: Блудов Павел Россия  
Дата: 19.09.06 09:41
Оценка: 75 (2)
Здравствуйте, IT!

Вобщем так. Метода ВотВамТокенДайтеИмяФайлаИСтрокуСтолбец() попросту нет. Дело в том, что метод в dll может быть получен из нескольких исходных файлов.
Во-первых, inlining, во-вторых макросы c++ препроцессора, которых ешё никто не отменял.

Вместо этого есть метод ДайтеВсеКускиМетода(), который возвращает для каждого куска собственно документ, смещение в нем, начальные и конечные строки и столбцы.

Вот сампл по работе с ISymUnmanagedXXXX
    public class TestClass
    {
        public void TestMethod()
        {
        }
    }

    public class PdbTest
    {
        [STAThread]
        public static void Main(string[] args)
        {
            Guid IMetaDataImportGuid = typeof(IMetaDataImport).GUID;

            // Для интергации нужно использовать IVsSmartOpenScope::OpenScope
            // из VisualStudioIntegration\Common\IDL\compsvcspkg80.idl
            //
            IMetaDataDispenser metaDispenser = (IMetaDataDispenser)new CorMetaDataDispenser();
            IMetaDataImport metaDataImport = (IMetaDataImport)metaDispenser.OpenScope(ExecutableLocation, 0, ref IMetaDataImportGuid);

            // Получаем токен нужного метода
            //
            uint classToken = metaDataImport.FindTypeDefByName("dotNetJim.TestClass", 0);
            uint methodToken = metaDataImport.FindMethod(classToken, "TestMethod", null, 0);

            // Вот собственно работа с .pdb
            //
            ISymUnmanagedBinder binder = (ISymUnmanagedBinder)new CorSymBinder();
            ISymUnmanagedReader  reader = binder.GetReaderForFile2(metaDataImport, ExecutableLocation, null, 0x0F);
            ISymUnmanagedMethod  method = reader.GetMethod(methodToken);

            uint seqPoints = method.GetSequencePointCount();
            uint seqPointsReal;

            IntPtr[] documents  = new IntPtr[seqPoints];
            uint[]   lines      = new uint[seqPoints];
            uint[]   columns    = new uint[seqPoints];
            uint[]   endLines   = new uint[seqPoints];
            uint[]   endColumns = new uint[seqPoints];
            uint[]   offsets    = new uint[seqPoints];
            method.GetSequencePoints(seqPoints, out seqPointsReal, offsets, documents, lines, columns, endLines, endColumns);

            for (int i = 0; i < seqPointsReal; i++)
            {
                uint len;
                StringBuilder url = new StringBuilder(2048);
                ISymUnmanagedDocument doc = (ISymUnmanagedDocument)Marshal.GetObjectForIUnknown(documents[i]);
                doc.GetURL(url.Capacity, out len, url);
                Console.WriteLine("file {0}, line {1} col {2}", url, lines[i], columns[i]);
                Marshal.Release(documents[i]);
            }
        }

        public static string ExecutableLocation
        {
            get { return Assembly.GetEntryAssembly().Location; }
        }
    }


Как показало следствие, GetSequencePointCount возвращает для метода как минимум 2 точки: открывающая скобочка и закрывающая.
В принципе, можно всегда спрашивать первую SequencePoint и делать Goto на неё.

Unmanaged интерфейсы в след. сообщении.
... << RSDN@Home 1.2.0 alpha rev. 642>>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.