A.n
using System;
using System.Collections.Generic;
using System.Text;
using NN;
namespace NN
{
public class Test
{
[X]
public F() : void
{
}
}
}
Macro1.n
using Nemerle.Compiler;
using Nemerle.Compiler.Parsetree;
using System.Console;
namespace NN
{
[Nemerle.MacroUsage(Nemerle.MacroPhase.WithTypedMembers,
Nemerle.MacroTargets.Method)]
macro X(tb : TypeBuilder, meth : MethodBuilder, params _ : list [PExpr])
{
def parms = meth.GetParameters();
def mods = meth.GetModifiers();
match(meth.IsPublic)
{
false => Message.Error("Method must be public");
};
}
}
Получаю ошибку:
C:\Program Files\Nemerle\Nemerle.MSBuild.targets(173,9):Error: internal compiler error: got MatchFailureException exception
А если переписать Macro1.n c if, то работает:
using Nemerle.Compiler;
using Nemerle.Compiler.Parsetree;
using System.Console;
namespace NN
{
[Nemerle.MacroUsage(Nemerle.MacroPhase.WithTypedMembers,
Nemerle.MacroTargets.Method)]
macro X(tb : TypeBuilder, meth : MethodBuilder, params _ : list [PExpr])
{
def parms = meth.GetParameters();
def mods = meth.GetModifiers();
if(meth.IsPublic)
()
else
Message.Error("Method must be public");
}
}
Что не так ?