[Nemerle] Сформировать тип функции по MethodBuilder'у
От: Anton V. Kolotaev  
Дата: 05.05.06 22:00
Оценка:
Привет всем!

Возникла проблема с тем, чтобы в макросе по переданному в него MethodBuilder'у сгенерировать поле в некотором классе с типом, который бы соответствовал бы типу функции, к которой был применен макрос. Т.е:

[Nemerle.MacroUsage(Nemerle.MacroPhase.WithTypedMembers, Nemerle.MacroTargets.Parameter)]
macro Virtual(_ : TypeBuilder, m : MethodBuilder, p : ParameterBuilder)
{
        // сформировали список параметров функции
        def pms = m.GetHeader().parms.FoldLeft([], fun(e, x) { 
            <[ parameter: $(e.name : dyn) : $(e.ty.ToString() : dyn) ]> :: x
        } );

        def builder = ImplicitCTX ().Env.Define(<[ decl:
            public module _disp_table
            {
              // поле, где будет храниться оригинальная функция
                mutable storage : ??? = null;    // (*)
                
                this() 
                {
                  // сохраняем оригинальную функцию
                    storage = fun(..$pms) : $(m.ReturnType.ToString() : dyn) { $(m.Body) }
                }    
            }
        ]>);

      builder.Compile();
}


Собственно вопрос в том, что должно быть в строчке (*)?

Я пробовал использовать Nemerle.Builtins.Function, однако успеха не достиг: хотя Function или FunctionVoid являются базовыми классами для любой функции, компилятор не дает приводит значение типа функции к своему непосредственному базовому классу Та жа фигня с Nemerle.Builtins.Tuple...

ЗЫ. Вопросы по Немерлу в каком лучше форуме задавать — здесь или в Прочем?
... << RSDN@Home 1.2.0 alpha rev. 648>>

30.01.07 18:24: Перенесено модератором из 'Декларативное программирование' — IT
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.