Проблема с переходом к новой версии Nemerle на .Net4.0
Есть макрос
[Nemerle.MacroUsage(
Nemerle.MacroPhase.BeforeInheritance,
Nemerle.MacroTargets.Class
)]
public macro Persistent (typeBuilder : TypeBuilder, tableName:string)
{
def typer = Nemerle.Macros.ImplicitCTX();
_ = typer.Manager.CoreEnv;
def domAssembly = Impl.GetMetaData().DomMetaData;
def typeName = typeBuilder.Name;
def tableNameNorm = StringUtils.NormalizeDbName(typeName, tableName);
def fullName = typeBuilder.NamespaceNode.GetDisplayName();
domAssembly.SetPersistenceKind(typeName, PersistenceKind.Db);
domAssembly.SetTableName(typeName, tableNameNorm);
domAssembly.SetDomFullName(typeName, fullName);
def modifiers = typeBuilder.GetModifiers();
modifiers.AddCustomAttribute(<[ Nemerle.Extensions.StructuralHashCode ]>);
modifiers.AddCustomAttribute(<[ Nemerle.Extensions.StructuralEquality ]>);
}
При компиляции выдает ошибку error : Can't find EqualsImpl(...). После ковыряния кода старой и новой версии Nemerle нашел интересную особенность. В старой версии StructuralEquality вызывался один метод класса StructuralEquality_type_postaddMacro на фазе WithTypeMembers, все хорошо компилировалось, генерировался код и все хорошо работало. В новой же версии вызывается, на фазе BeforeInheritance, StructuralEquality_type_postscanMacro который подставляет в генерируемый код пустой метод EqualsImpl(...), а на фазе WithTypeMembers, StructuralEquality_type_postaddMacro который переопределяет EqualsImpl(...), а если нет выдает ошибку написанную выше. Так вот не понятно почему на фазе BeforeInheritance макроса Persistent не вызывается StructuralEquality_type_postscanMacro? И как это можно исправить?