Компилятор ругается при попытке заюзать один из классов, находящихся в подключаемой сборке. Причем, ошибка не проявляется, если объявить так классы в текущем проекте.
// Проект А
public class EntityBase
{
}
public class EntityBase<T> : EntityBase
where T: EntityBase<T>
{
}
// Проект Б
public class Test : EntityBase
{
}
internal compiler error: assertion failed in file ncc\external\LibrariesLoader.n, line 480: C:\Program Files\Nemerle\Nemerle.MSBuild.targets 173 10
C:\Program Files\Nemerle\ncc.exe /no-color /no-stdlib /define:DEBUG;TRACE /debug+ /out:obj\Debug\Test.dll /target:library Properties\AssemblyInfo.n Class1.n /ref:..\..\..\Rsdn\BLToolkit\Source\bin\Debug\BLToolkit.2.dll /ref:C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorlib.dll /ref:"C:\Program Files\Nemerle\Nemerle.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
D:\Projects\NemerleProjects\Test\Test\Class1.n(7,22):Error: Internal compiler error, please report a bug to bugs.nemerle.org. You can try modifying program near this location.
C:\Program Files\Nemerle\Nemerle.MSBuild.targets(173,9):Error: internal compiler error: assertion failed in file ncc\external\LibrariesLoader.n, line 480:
not loaded internal type... file:///D:/Projects/Rsdn/BLToolkit/Source/bin/Debug/BLToolkit.2.dll:BLToolkit.Common.EntityBase`1
at Nemerle.Compiler.LibraryReferenceManager.GetInternalType(LibraryReference lib, Type t, Node node)
at Nemerle.Compiler.LibraryReference.TypeInfoOfType(Type framework_type)
at Nemerle.Compiler.LibraryReference.TypeOfType(Map`2 _tenv, Type framework_type)
at Nemerle.Compiler.TyCodec._N__N_l28788_28824.apply(Type _N_28823)
at Nemerle.Collections.List.MapFromArray['a,'b]('a[] x, Function`2 f)
at Nemerle.Compiler.TyCodec._N_set_constraints_28814.apply_void(Type _N_28812, StaticTyVar _N_28813)
at Nemerle.Builtins.FunctionVoid`2.apply_void(Tuple`2 o)
at Nemerle.Utility.NArray.Iter2['a,'b]('a[] a, list`1 b, FunctionVoid`2 f)
at Nemerle.Compiler.TyCodec.reflect_typarms(LibraryReference _lib, Map`2 tenv, Type _t)
at Nemerle.Compiler.TyCodec.ReflectTypeBuilder(LibraryReference lib, Map`2 tenv, Type original)
at Nemerle.Compiler.LibraryReference.NetType..ctor(LibraryReference lib, Type h, Node ns_node)
at Nemerle.Compiler.LibraryReference.ConstructTypeInfo(Type reflected_type, Node ns_node)
at Nemerle.Compiler.ExternalType.ConstructTypeInfo(Node node, Boolean fix_node)
at Nemerle.Compiler.NamespaceTree.Node._N__N_l57556_57579.apply(ExternalType _N_57577, list`1 _N_57578)
at Nemerle.Collections.List.FoldLeft['a,'b](list`1 l, 'b acc, Function`3 f)
at Nemerle.Core.list`1.FoldLeft['b]('b acc, Function`3 f)
at Nemerle.Compiler.NamespaceTree.Node.LoadValue(NotLoadedList val)
at Nemerle.Compiler.NamespaceTree.Node._N_make_list57679(_N_closure57667 _N_LookupTypes_cp57678, TypeInfoCache val, Node path)
at Nemerle.Compiler.NamespaceTree.Node.LookupTypes(list`1 split, Boolean for_completion)
at Nemerle.Compiler.GlobalEnv._N_lookup_members_55538.apply(Node _N_55536, list`1 _N_55537)
at Nemerle.Collections.List.FoldLeft['a,'b](list`1 l, 'b acc, Function`3 f)
at Nemerle.Compiler.GlobalEnv.LookupSymbol(list`1 name, TypeBuilder _parent, Boolean for_completion)
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_class99257(_N_closure99222 _N_Bind_cp99256, PExpr tyexpr)
at Nemerle.Compiler.TyVarEnv._N_f299251(_N_closure99222 _N_Bind_cp99250, PExpr t, Boolean allow_ref)
at Nemerle.Compiler.TyVarEnv._N_f_99242.apply(PExpr _N_99241)
at Nemerle.Compiler.TyVarEnv.Bind(GlobalEnv env, TypeBuilder curtc, PExpr t, Boolean allow_tyvars, Boolean check_parms)
at Nemerle.Compiler.TyVarEnv.MonoBind(GlobalEnv env, TypeBuilder curtc, PExpr t, Boolean check_parms)
at Nemerle.Compiler.TypeBuilder._N_bind_to_class_39772.apply(PExpr _N_39771)
at Nemerle.Compiler.TypeBuilder.bind_types()
at Nemerle.Compiler.TypesManager._N__N_l37591_37666.apply_void(TypeBuilder _N_37665)
at Nemerle.Compiler.TypesManager.SourceTopIter(FunctionVoid`1 f)
at Nemerle.Compiler.TypesManager.Run()
at Nemerle.Compiler.ManagerClass.Run()
at Nemerle.CommandlineCompiler.MainClass.main_with_catching()
ЗЫ. Хотел заюзать один из классов BLToolkit'а и получил по рукам
... << RSDN@Home 1.2.0 alpha rev. 730 >>
Здравствуйте, rameel!
Это случайно не реинкарнация
[BUG]Автор: rameel
Дата: 03.05.07
?
Помнится в тот раз Влад победил компилятор и научил его различать cls и cls['a].
Дело за малым — научить тому же LibrariesLoader'а.
... << RSDN@Home 1.2.0 alpha rev. 726>>
Здравствуйте, Блудов Павел, Вы писали:
БП>Это случайно не реинкарнация
БП>[BUG]Автор: rameel
Дата: 03.05.07
?
Возможно, тем более что стек-трейс тот же.
БП>Помнится в тот раз Влад победил компилятор и научил его различать cls и cls['a].
Только вот тот проект все так же стреляется на GetInternalType
БП>Дело за малым — научить тому же LibrariesLoader'а.
Было бы хорошо, а то вот не взлюбил как-то Немерле BLToolkit. Э-хх
... << RSDN@Home 1.2.0 alpha rev. 730 >>
Здравствуйте, rameel, Вы писали:
R>Было бы хорошо, а то вот не взлюбил как-то Немерле BLToolkit. Э-хх
В nemerle\ncc\hierarchy\NamespaceTree.n, в LookupType имеем:
| TypeInfoCache.NotLoadedList as val =>
def cached = Path (split).LoadValue (val);
search (cached)
Где LoadValue это val.elems.FoldLeft(ConstructTypeInfo), а search выбирает из них тот, у которого нужное количество аргуметов типа.
Проблема в том, что
reflect_typarms, вызываемый из
ConstructTypeInfo вызывает
_lib.TypeOfType, что повторно приводит в LookupType.
StackOverflow не происходит, т.к. в ExternalType.ConstructTypeInfo tycon уже не равен null, но получается такая картина: в ветке Namespace оказываются два типа, один Foo с 0 аргументами типа, другой Foo['a] с
0 (нулём) аргументами типа, т.к. в reflect_typarms вызов ещё не вернулся.
Я попробую это пофиксить, в крайнем случае Влад и Игорем помогут.
... << RSDN@Home 1.2.0 alpha rev. 726>>
Здравствуйте, rameel!
Забирайте из свина ревизию 7797.
... << RSDN@Home 1.2.0 alpha rev. 746>>