Как получить информацию о типе в метаатрибуте?
От: VladD2 Российская Империя www.nemerle.org
Дата: 06.04.10 16:02
Оценка:
#Имя: FAQ.nemerle.TypeInfoInMetaattribute001
Здравствуйте, evilbeaver, Вы писали:

E>Каким образом в макросе на тип при обработке FieldBuilder'ов можно получить информацию о типе поля. Допустим получить TypeBuilder этого типа.


На стадии MacroPhase.WithTypedMembers, то как правильно заметил hardcase, типы можно получать непосредственно из FieldBuilder через GetMemType().

Если на других стадиях, то типы придется связать вручную. На этих стадиях в качестве параметра макроса передается TypeDeclaration.Field. У него есть поле ty и ParsedType. ParsedType — это тип спарсеный из исходника. Он не может быть изменен макросом. "ty" — это изменяемое поле. Оно может быть изменено макросами.

Так вот чтобы связать тип нужно наприсать примерно такой код:
def tType : FixedType = typer.BindFixedType(field.ty);


FixedType — это тип описывающий информацию о типах внутри Немерла.

ЗЫ

Не стоит пытаться получить System.Type, так как он будет доступен только для типов импортированных из других сборок. Всю информацию о типах нужно получать из FixedType. Его описание можно найти здесь.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.