А можно ли внутри макроса, применяемого к классу, узнать, помечен ли метод этого класса другим макросом-атрибутом?
[Foo]
class A
{
[Bar]
public Some() : void
{
}
}
Внутри Foo надо найти Bar.
Спасибо.
Здравствуйте, PowRTocH, Вы писали:
PRT>А можно ли внутри макроса, применяемого к классу, узнать, помечен ли метод этого класса другим макросом-атрибутом?
PRT>Внутри Foo надо найти Bar.
PRT>Спасибо.
Надежный способ сделать так — декларировать макрос [Bar] на ранней стадии компиляции, и при его исполнении добавлять в UserData класса-родителя ссылку на себя:
[Nemerle.MacroUsage (Nemerle.MacroPhase.BeforeTypedMembers,
Nemerle.MacroTargets.Method)]
macro Bar (t : TypeBuilder, f : MethodBuilder, expr)
{
if ( t.UserData.Contains["bar"] )
{
def bars = t.UserData["bar"] :> List.[object];
bars.Add(f);
}
else
t.UserData.Add( "bar", List.[object](f) )
}
А макрос Foo декларировать на более поздней стадии, и использовать информацию из UserData.
Код я не проверял, не компилировал, так что там может быть ошибка.