[BUG] Ambiquous exception
От: rameel https://github.com/rsdn/CodeJam
Дата: 30.08.07 22:32
Оценка:
Компилятор ругается при попытке заюзать один из классов, находящихся в подключаемой сборке. Причем, ошибка не проявляется, если объявить так классы в текущем проекте.
// Проект А
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 >>
У меня дежавю
От: Блудов Павел Россия  
Дата: 31.08.07 02:12
Оценка: +1
Здравствуйте, rameel!

Это случайно не реинкарнация
[BUG]
Автор: rameel
Дата: 03.05.07
?
Помнится в тот раз Влад победил компилятор и научил его различать cls и cls['a].
Дело за малым — научить тому же LibrariesLoader'а.
... << RSDN@Home 1.2.0 alpha rev. 726>>
Re: У меня дежавю
От: rameel https://github.com/rsdn/CodeJam
Дата: 31.08.07 08:24
Оценка:
Здравствуйте, Блудов Павел, Вы писали:

БП>Это случайно не реинкарнация

БП>[BUG]
Автор: rameel
Дата: 03.05.07
?


Возможно, тем более что стек-трейс тот же.

БП>Помнится в тот раз Влад победил компилятор и научил его различать cls и cls['a].


Только вот тот проект все так же стреляется на GetInternalType

БП>Дело за малым — научить тому же LibrariesLoader'а.


Было бы хорошо, а то вот не взлюбил как-то Немерле BLToolkit. Э-хх
... << RSDN@Home 1.2.0 alpha rev. 730 >>
Собственно что происходит
От: Блудов Павел Россия  
Дата: 03.09.07 07:19
Оценка:
Здравствуйте, 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>>
Done
От: Блудов Павел Россия  
Дата: 14.09.07 08:40
Оценка: 120 (2)
Здравствуйте, rameel!

Забирайте из свина ревизию 7797.
... << RSDN@Home 1.2.0 alpha rev. 746>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.