Пытаемся компилировать вот такой код:
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>>