Re: Пара вопросов по макросам
От: Иванков Дмитрий Россия  
Дата: 15.07.07 07:11
Оценка: 10 (1)
Здравствуйте, konsoletyper, Вы писали:

K>Первый вопрос. Почему не компилится вот такой код:


K>
K>  public macro AlgebraicType(t : TypeBuilder)
K>  {
K>    match (t.GetTydecl())
K>    {
K>      | <[decl: public variant $(nm : name) { $body } ]> =>
K>        Message.Warning($"$nm");
K>


Потому что не поддерживается такой шаблон.
Могу ошибаться, но поддерживаются только шаблоны выражений, которыми декларации не являются.

Так что
  public macro AlgebraicType(t : TypeBuilder)
  {
    match (t.GetTydecl())
    {
      | TopDeclaration.Variant =>
        Message.Warning($"$t");
...
        t.GetVariantOptions ()
...



K>Вместо этого вылетает исключение.

В принципе оно показывает местонахождение и описание проблемы.

K>Второй вопрос. Опишу задачу. Есть макрос, который должен брать некий тип A, и получать из него все публичные методы, такие, что типы параметров и тип возвращаемого значения могут быть либо bool, либо типа B. Причём, A и B должны быть найдены по имени (string). Как правильно решается данная задача? Как представлять A и B? Я в иерархии сборки Nemerle.Compiler.dll для одного только представления типа нашёл около 10 способов, и в чём фишка каждого не понятно.

macros/Late.n строки 158-168 вероятно помогут, там происходит преобразование PExpr->TypeInfo, публичные методы из TypeInfo кажется можно вытащить.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.