ошибка в интеграции (поиск метода)
От: ascii32  
Дата: 11.12.07 13:20
Оценка:
Здравствуйте.
Студия кидает эксепшен в случае добавления символа $ после списка аргументов метода (выделено жирным в коде). После этого любое действие в файле вызывает этот эксепшен (наскольо я помню, где-то в районе лексера что-то отваливается)

[Nemerle.MacroUsage (Nemerle.MacroPhase.BeforeInheritance, Nemerle.MacroTargets.Class)]
macro SomeMacro (t : TypeBuilder, someMethod)
{
  def method = t.GetParsedMembers().Filter(fun(x){
    | <[ decl: .. $_ this( .. $_ )$_ ]> => true
    | _                                 => false
  });
  
  match (method)
  {
    | head :: _ => t.Define(<[ decl: public funct () : void { WriteLine("to be") }        ]>)
    | _         => t.Define(<[ decl: public funct () : void { WriteLine("or not to be") } ]>)
  }
}


Вывод ошибки слишком объемен, поэтому приводить здесь не буду. Использую VS2005, интеграция собрана из исходников. Точно такая-же ошибка вылетает и при использовании инсталятора "весенне-летней" давности, поэтому текущая версия интеграции/компилятора, я думаю, роли не играет.

P.S. Если можно, сразу вопрос, почему подобный код не ищет ничего, кроме конструкторов? Т.е. если заменить | <[ decl: .. $_ this( .. $_ )$_ ]> => true на | <[ decl: .. $_ some_method( .. $_ )$_ ]> => true , то даже при наличии в классе метода some_method, на консоль все равно выведется "or not to be" (т.е. метод не нашелся).
дайте слепому показать вам дорогу.
(Р. Бредбери "Смерть — дело одинокое")
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.