ICE нашол.
От: WolfHound  
Дата: 27.04.10 23:32
Оценка: :)
Пытаемся компилировать вот такой код:
class SchemePointBase {}
class SchemePoint : SchemePointBase {}

interface ISchemeGlyph
{
  Points : IEnumerable[SchemePointBase] {get;}
}

class SchemeItemList[T] : List[T] {}

class PointList : SchemeItemList[SchemePoint] {}
class GlyphList : SchemeItemList[ISchemeGlyph] {}

class Scheme
{
  public Glyphs : GlyphList { get; set; }
  public Points : PointList { get; set; }
}

module Program
{
  Main() : void
  {
    def scheme = Scheme();
    def points = scheme.Points.Concat(scheme.Glyphs.MapLazy(_.Points).Flatten());
  }
}

И получаем:
---------------------------
Ошибка утверждения: Прервать=Выход, Повторить=Отладка, Пропустить=Продолжить
---------------------------
ICE! (Internal Compiler Error)

unresolved expression: an error



    at Typer2.Unfold(TExpr expr)  H:\work\nemerle\ncc\typing\Typer2.n(243)

    at Typer2.DoWalk(Context ctx, TExpr expr)  H:\work\nemerle\ncc\typing\Typer2.n(1023)

    at Typer2.Walk(Context ctx, TExpr expr)  H:\work\nemerle\ncc\typing\Typer2.n(150)

    at Typer2.DoWalk(Context ctx, TExpr expr)  H:\work\nemerle\ncc\typing\Typer2.n(1290)

    at Typer2.Walk(Context ctx, TExpr expr)  H:\work\nemerle\ncc\typing\Typer2.n(150)

    at Typer2.DoWalk(Context ctx, TExpr expr)  H:\work\nemerle\ncc\typing\Typer2.n(1446)

    at Typer2.Walk(Context ctx, TExpr expr)  H:\work\nemerle\ncc\typing\Typer2.n(150)

    at Typer2.DoWalk(Context ctx, TExpr expr)  H:\work\nemerle\ncc\typing\Typer2.n(1414)

    at Typer2.Walk(Context ctx, TExpr expr)  H:\work\nemerle\ncc\typing\Typer2.n(150)

    at Typer2.DoWalk(Context ctx, TExpr expr)  H:\work\nemerle\ncc\typing\Typer2.n(1415)

    at Typer2.Walk(Context ctx, TExpr expr)  H:\work\nemerle\ncc\typing\Typer2.n(150)

    at Typer2.DoWalk(Context ctx, TExpr expr)  H:\work\nemerle\ncc\typing\Typer2.n(1446)

    at Typer2.Walk(Context ctx, TExpr expr)  H:\work\nemerle\ncc\typing\Typer2.n(150)

    at Typer2.DoWalk(Context ctx, TExpr expr)  H:\work\nemerle\ncc\typing\Typer2.n(1465)

    at Typer2.Walk(Context ctx, TExpr expr)  H:\work\nemerle\ncc\typing\Typer2.n(150)

    at Typer2.Run()  H:\work\nemerle\ncc\typing\Typer2.n(122)

    at Typer.RunSecondPass(MethodBuilder meth)  H:\work\nemerle\ncc\typing\Typer.n(428)

    at Typer.RunFullTyping()  H:\work\nemerle\ncc\typing\Typer.n(235)

    at MethodBuilder.RunBodyTyper()  H:\work\nemerle\ncc\hierarchy\ClassMembers.n(931)

    at MethodBuilder.Compile()  H:\work\nemerle\ncc\generation\HierarchyEmitter.n(1080)

    at TypeBuilder.EmitImplementation()  H:\work\nemerle\ncc\generation\HierarchyEmitter.n(639)

    at _N_emit_impl__53895.apply_void(TypeBuilder _N__53894)  H:\work\nemerle\ncc\generation\HierarchyEmitter.n(362)

    at _N_maybe_f__54466.apply_void(TypeBuilder _N__54465)  H:\work\nemerle\ncc\hierarchy\TypesManager.n(258)

    at NList.Iter(list`1 l, FunctionVoid`1 f)  H:\work\nemerle\lib\list.n(889)

    at list`1.Iter(FunctionVoid`1 f)  H:\work\nemerle\lib\list.n(310)

    at TypesManager.Iter(list`1 builders, FunctionVoid`1 f)  H:\work\nemerle\ncc\hierarchy\TypesManager.n(265)

    at TypesManager.Iter(FunctionVoid`1 f)  H:\work\nemerle\ncc\hierarchy\TypesManager.n(276)

    at TypesManager.compile_all_tyinfos(Boolean aux_phase)  H:\work\nemerle\ncc\generation\HierarchyEmitter.n(388)

    at _N__N_lambda__53335__53438.apply_void()  H:\work\nemerle\ncc\generation\HierarchyEmitter.n(236)

    at Solver.Enqueue(FunctionVoid action)  H:\work\nemerle\ncc\typing\Solver.n(201)

    at TypesManager.EmitDecls()  H:\work\nemerle\ncc\generation\HierarchyEmitter.n(256)

    at ManagerClass.Run()  H:\work\nemerle\ncc\passes.n(548)

    at MainClass.main_with_catching()  H:\work\nemerle\ncc\main.n(89)

    at ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)  

    at ThreadHelper.ThreadStart()  


---------------------------
Прервать   Повтор   Пропустить   
---------------------------


Если сделать так то работает.
    def points = (scheme.Points :> IEnumerable[SchemePointBase]).Concat(scheme.Glyphs.MapLazy(_.Points).Flatten());


Версия компилятора 8830
... << RSDN@Home 1.2.0 alpha 4 rev. 1305>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.