match не работает ?
От: _nn_ www.nemerleweb.com
Дата: 16.02.08 20:44
Оценка:
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");
  }
}


Что не так ?
http://rsdn.nemerleweb.com
http://nemerleweb.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.