Определение вложенных типов квацизитатой
От: STDray http://stdray.livejournal.com
Дата: 31.03.15 16:27
Оценка:
Например, вот такой код

   public DoTransform(typer : Typer, ) : void
   {
     Macros.DefineCTX(typer);
     def tb = typer.Manager.CoreEnv.Define(
       <[decl:
         public class Foo
         {
           [Record]
           public class Bar
           {
             public Age : int;
           }
           public Property : Bar
           {
             get { Bar(100); }
           }
         }
       ]>);
     tb.Compile();
   }


успешно компилируется, но класс Bar исчезает в неизвестном направление. Надо решить, что правильно делать в таком случае — определять вложенный тип или выдавать ошибку, что квазицитаты не поддерживают определение вложенного типа и надо использовать DefineNestedType.
Re: Определение вложенных типов квацизитатой
От: VladD2 Российская Империя www.nemerle.org
Дата: 31.03.15 17:14
Оценка:
Здравствуйте, STDray, Вы писали:

STD>
STD>     def tb = typer.Manager.CoreEnv.Define(
STD>


STD>успешно компилируется, но класс Bar исчезает в неизвестном направление.


Для определения вложенного типа нужно использовать метод DefineNestedType у TypeBuilder-а, если не ошибаюсь.

STD>Надо решить, что правильно делать в таком случае — определять вложенный тип или выдавать ошибку, что квазицитаты не поддерживают определение вложенного типа и надо использовать DefineNestedType.


Видимо какой-то баг. Надо хотя разбираться в отладчике.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Определение вложенных типов квацизитатой
От: STDray http://stdray.livejournal.com
Дата: 31.03.15 17:50
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Видимо какой-то баг. Надо хотя разбираться в отладчике.


Я так полагаю, что дело в том, что дерево имен и квазицитаты никак не связаны.
То есть вот тут происходит регистрация определяемого типа, а обработки возможных вложенных типов нет.
Если тип должен создаваться, то, видимо, там после создания родительского типа, нужно будет пройтись по его элементам в поисках ClassMember.TypeDeclaration и их зарегистрировать. Тогда отдельный метод DefineNestedType перестанет быть нужным.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.