Например, вот такой код
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.
Здравствуйте, STDray, Вы писали:
STD>STD> def tb = typer.Manager.CoreEnv.Define(
STD>
STD>успешно компилируется, но класс Bar исчезает в неизвестном направление.
Для определения вложенного типа нужно использовать метод DefineNestedType у TypeBuilder-а, если не ошибаюсь.
STD>Надо решить, что правильно делать в таком случае — определять вложенный тип или выдавать ошибку, что квазицитаты не поддерживают определение вложенного типа и надо использовать DefineNestedType.
Видимо какой-то баг. Надо хотя разбираться в отладчике.
Здравствуйте, VladD2, Вы писали:
VD>Видимо какой-то баг. Надо хотя разбираться в отладчике.
Я так полагаю, что дело в том, что дерево имен и квазицитаты никак не связаны.
То есть
вот тут происходит регистрация определяемого типа, а обработки возможных вложенных типов нет.
Если тип должен создаваться, то, видимо, там после создания родительского типа, нужно будет пройтись по его элементам в поисках ClassMember.TypeDeclaration и их зарегистрировать. Тогда отдельный метод DefineNestedType перестанет быть нужным.