Собственно, вот он (компилятор из ноябрьской интеграции):
Target CoreCompile:
c:\Program Files\Nemerle\ncc.exe /no-color /no-stdlib /define:DEBUG;TRACE /debug+ /out:obj\Debug\Terminus.Core.dll /target:library Properties\AssemblyInfo.n Seq.n Set.n ISetReader.n Utils.n /ref:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorlib.dll /ref:"c:\Program Files\Nemerle\\Nemerle.dll" /ref:"C:\Program Files\Nemerle\Nemerle.Macros.dll" /ref:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Data.dll /ref:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.dll /ref:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll
c:\Program Files\Nemerle\Nemerle.MSBuild.targets(173,9): error : internal compiler error: got some unknown exception of type System.NullReferenceException: Object reference not set to an instance of an object.
at Nemerle.Compiler.TyVarEnv.bind_simple_named_type(GlobalEnv env, TypeBuilder curtc, Name name, list`1 idl, list`1 args)
at Nemerle.Compiler.TyVarEnv._N_type_class99328(_N_closure99293 _N_Bind_cp99327, PExpr tyexpr)
at Nemerle.Compiler.TyVarEnv._N_f299322(_N_closure99293 _N_Bind_cp99321, PExpr t, Boolean allow_ref)
at Nemerle.Compiler.TyVarEnv._N_f_99313.apply(PExpr _N_99312)
at Nemerle.Compiler.TyVarEnv.Bind(GlobalEnv env, TypeBuilder curtc, PExpr t, Boolean allow_tyvars, Boolean check_parms)
at Nemerle.Compiler.Typer.DoType(PExpr expression, TyVar expected, Boolean is_toplevel_in_seq)
at Nemerle.Compiler.Typer.TypeExpr(PExpr expr, TyVar expected, Boolean is_toplevel_in_seq)
at Nemerle.Compiler.Typer.TypeLocalDefinition(Boolean is_mutable, Name name, PExpr val)
at Nemerle.Compiler.Typer.DoType(PExpr expression, TyVar expected, Boolean is_toplevel_in_seq)
at Nemerle.Compiler.Typer.TypeExpr(PExpr expr, TyVar expected, Boolean is_toplevel_in_seq)
at Nemerle.Compiler.Typer.DoType(PExpr expression, TyVar expected, Boolean is_toplevel_in_seq)
at Nemerle.Compiler.Typer.TypeExpr(PExpr expr, TyVar expected, Boolean is_toplevel_in_seq)
at Nemerle.Compiler.Typer.TypeMatch(Match mtch, TyVar expected)
at Nemerle.Compiler.Typer.DoType(PExpr expression, TyVar expected, Boolean is_toplevel_in_seq)
at Nemerle.Compiler.Typer.TypeExpr(PExpr expr, TyVar expected, Boolean is_toplevel_in_seq)
at Nemerle.Compiler.Typer.TypeExpr(PExpr expr, TyVar expected, Boolean is_toplevel_in_seq)
at Nemerle.Compiler.Typer.DoType(PExpr expression, TyVar expected, Boolean is_toplevel_in_seq)
at Nemerle.Compiler.Typer.TypeExpr(PExpr expr, TyVar expected, Boolean is_toplevel_in_seq)
at Nemerle.Compiler.Typer.RunTyper()
at Nemerle.Compiler.Typer.RunFullTyping()
at Nemerle.Compiler.MethodBuilder.RunBodyTyper()
at Nemerle.Compiler.MethodBuilder.Compile()
at Nemerle.Compiler.TypeBuilder.EmitImplementation()
at Nemerle.Compiler.TypesManager._N_emit_impl_36366.apply_void(TypeBuilder _N_36365)
at Nemerle.Compiler.TypesManager._N_maybe_f_36973.apply_void(TypeBuilder _N_36972)
at Nemerle.Collections.List.Iter['a](list`1 l, FunctionVoid`1 f)
at Nemerle.Core.list`1.Iter(FunctionVoid`1 f)
at Nemerle.Compiler.TypesManager.Iter(list`1 builders, FunctionVoid`1 f)
at Nemerle.Compiler.TypesManager.compile_all_tyinfos(Boolean aux_phase)
at Nemerle.Compiler.TypesManager._N__N_l35778_35881.apply_void()
at Nemerle.Compiler.Solver.Enqueue(FunctionVoid action)
at Nemerle.Compiler.TypesManager.EmitDecls()
at Nemerle.Compiler.ManagerClass.Run()
at Nemerle.CommandlineCompiler.MainClass.main_with_catching()
Приведу исх. файл c сокращениями (другие для понимания сути ICE не нужны):
using System;
using System.Text;
using SCG = System.Collections.Generic;
namespace Terminus.Core
{
public class Set['a] : ISetReader['a]
{
variant Tree
{
| Node { mutable height : int; data : list['a]; hash : int; left : Tree; right : Tree; }
| Null
public Height : int
{
get
{
match (this)
{
| Node(_, _, _, l, r) as node =>
when (node.height == 0)
node.height = Math.Max(l.Height, r.Height) + 1;
node.height
| Tree.Null => 1
}
}
}
}
public static Empty : Set['a] = Set.['a](Tree.Null());
tree : Tree;
mutable count = -1;
this(tree : Tree)
{
this.tree = tree;
}
[skip]
// Вот этот метод, судя по всему, вызывает ICE
static MakeTree(data : list['a], hash : int, left : Tree, right : Tree) : Tree
{
if (left.Height + 1 < right.Height)
{
def rightNode = right :> Tree.Node;
Tree.Node(
0, rightNode.data, rightNode.hash,
Tree.Node(0, data, hash, left, rightNode.left),
rightNode.right)
}
else if (right.Height + 1 < left.Height)
{
def leftNode = left :> Tree.Node;
Tree.Node(
0, leftNode.data, leftNode.hash,
leftNode.left,
Tree.Node(0, data, hash, leftNode.left, right))
}
else
Tree.Node(0, data, hash, left, right)
}
[skip]
}
}
Такой же ICE вылетает и в сентябрьской интеграции. Более старые не пробовал. Компилить ncc вручную и разбираться тоже не пытался — времени нету.
PS: непонятно, как это в Nemerle с его option могут быть проблемы с NRE. Может, MS с его null, must die?
... << RSDN@Home 1.2.0 alpha rev. 710>>