goto
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.05.13 17:41
Оценка: 30 (3)
Реализовал goto в виде макросов goto / label в пространстве имен Nemerle.Imperative.GoTo.

За одно поправил баги иногда приводящие к сообщению "non local goto".

Кроме того индексируемое свойство UserData теперь есть у MethodBuilder-ов. Так что в него можно сохранять данные относящиеся ко всему методу. Это свойство сбрасывается вначале типизации метода. Так что очищать специально его нет смысла.

Реализация.

Пример использования:
using System.Console;
using Nemerle.Imperative;
using Nemerle.Imperative.GoTo;

module Program
{
  Main(args : array[string]) : void
  {
    goto Start;
    label Label2;
    WriteLine("Label2:");
    goto End;
    label Start;
    WriteLine("Start:");
    
    when (args.Length == 0)
      goto Label1;
    
    WriteLine("args.Length != 0");
    return;
    
    label Label1;
    WriteLine("Label1:");

    goto Label2;
    label End;
    WriteLine("End:");
  }
}

/*
BEGIN-OUTPUT
Start:
Label1:
Label2:
End:
END-OUTPUT
*/
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.