Проблема с ncc
От: SergASh  
Дата: 28.08.07 10:41
Оценка:
Привет всем!

Вот такая нехитрая программка валит компилятор в первой строчке сопоставления. Если where на when попрваить и = на ==, то всё окей.

Перед тем как слать отчёт об ошибке хотел узнать это только у меня или у всех?

using System.Console;

using PT = Nemerle.Compiler.Parsetree;

namespace Test
{
  module Program
  {
    public ExtractParamExpression( expressions : list[PT.PExpr], 
                                   paramName : string, 
                                   defaultExpression : PT.PExpr = null ) : PT.PExpr
    {
      def extract( _ )
      {
        | <[ $(p : name) = $expr ]> :: _ where p.Id = paramName => expr;
        | _ :: exprs => extract( exprs );
        | [] => defaultExpression;
        | _ => Message.Fatal( "Unexpected element in attribute initialization list" ); 
      }
      extract( expressions );
    }
    Main() : void
    {
    }
  }
}
Re: Проблема с ncc
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.08.07 11:48
Оценка:
Здравствуйте, SergASh, Вы писали:

SAS>Перед тем как слать отчёт об ошибке хотел узнать это только у меня или у всех?


А ты компилируешь это дело в макро-сборке или в обычной?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Проблема с ncc
От: SergASh  
Дата: 28.08.07 13:00
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>А ты компилируешь это дело в макро-сборке или в обычной?


Первый раз обнаружил в макросборке, потом попробовал упростить и перенёс в обычную. С тем же результатом.

Вот проще пример, без макросов, на котором воспроизводится ошибка.
public Test() : void
{
  def check( _ )
  {
    | d where d = 0 => true;
    | _ => false;
  }
}
Re[3]: Проблема с ncc
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.08.07 13:52
Оценка:
Здравствуйте, SergASh, Вы писали:

SAS>Вот проще пример, без макросов, на котором воспроизводится ошибка.

SAS>
SAS>public Test() : void
SAS>{
SAS>  def check( _ )
SAS>  {
SAS>    | d where d = 0 => true;
SAS>    | _ => false;
SAS>  }
SAS>}
SAS>


Вылетает только Студия или компиляция тоже?

Есил первое надо отрепортить баг к интелисенс-энжину, если второе, то в компилятор.

В таком случае конечно должно выдаваться сообщение об ошибе, но не вылет.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Проблема с ncc
От: Сергей Туленцев Россия http://software.tulentsev.com
Дата: 28.08.07 16:45
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, SergASh, Вы писали:


SAS>>Вот проще пример, без макросов, на котором воспроизводится ошибка.

SAS>>
SAS>>public Test() : void
SAS>>{
SAS>>  def check( _ )
SAS>>  {
SAS>>    | d where d = 0 => true;
SAS>>    | _ => false;
SAS>>  }
SAS>>}
SAS>>


Насколько я разбираюсь в паттерн-мэтчинге, то это образец "Record"
Цитата из статьи

Образец «Запись»

Этот образец состоит из необязательных имени класса и ключевого слова where, за которым следуют один или более именованных образцов, разделенных запятыми и заключенных в круглые скобки. Он сопоставляется с любым экземпляром класса, значения полей которого сопоставимы с подобразцами.

using System.Console;

// Метаатрибут «Record» добавляет к классу реализацию конструктора, 
// инициализирующего поля класса.
[Record]
class Foo
{
  public Number : int;
  public Name   : string;
}

def StringOfFooMatch(foo : Foo) : string
{ | Foo where (Name = "", Number = k) => k.ToString()
  | (Name = s)                        => s
}

WriteLine(StringOfFooMatch(Foo(10, "")));
WriteLine(StringOfFooMatch(Foo(1, "Ivan")));


SergASh, видимо, хотел наложить ограничивающее условие. Это делается с помощщью ключевого слова when после которого идет булево выражение. Я думаю, так.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
--
Re[4]: Проблема с ncc
От: SergASh  
Дата: 28.08.07 17:14
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Вылетает только Студия или компиляция тоже?


Валится именно компилятор; я запускал и из командной строки, и из студии. Причём после закрытия окна Cancel/Debug сам NCC.EXE зависает.
Re[5]: Проблема с ncc
От: VladD2 Российская Империя www.nemerle.org
Дата: 29.08.07 11:06
Оценка:
Здравствуйте, SergASh, Вы писали:

SAS>Валится именно компилятор; я запускал и из командной строки, и из студии. Причём после закрытия окна Cancel/Debug сам NCC.EXE зависает.


Значит надо отрепортить баг компилятора.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.