Привет всем!
Возникла проблема с тем, чтобы в макросе по переданному в него 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