StackOverflowException в ManagerClass
От: xtrevius  
Дата: 19.12.10 17:51
Оценка:
Не пойму как использовать ManagerClass для компиляции своих сборок.
Делаю так:
Main(argv:array[string]) : void
{
  def options = CompilationOptions();
  def manager = ManagerClass(options);

  manager.InitOutput(System.Console.Out);
  options.Sources = [argv[0]]; //если здесь указана сборка с функцией, с количеством строк больше 10 или около того...
  options.DoNotLoadMacros = true;
  options.CompileToMemory = true;
  options.LibraryPaths = [@"C:\Program Files\Nemerle", Assembly.GetEntryAssembly().Location];
  manager.Run(); //<-- то здесь Stack overflow
}

При запуске manager.Run в отдельном треде с увеличенным размером стека всё отрабатывает нормально, но только если угадать необходимый размер стека. В общем, пример в аттаче.
Это баг, или ячднт?

стектрейс:
  Скрытый текст
An unhandled exception of type 'System.StackOverflowException' occurred in mscorlib.dll
> Nemerle.Compiler.dll!Nemerle.Compiler.LibraryReference.TypeInfoOfType(System.Type framework_type = {Name = Cannot evaluate expression because the current thread is in a stack overflow state. FullName = Cannot evaluate expression because the current thread is in a stack overflow state.}) Line 232 + 0x1a bytes Unknown
Nemerle.Compiler.dll!Nemerle.Compiler.LibraryReference.ExternalMethodInfo.DeclaringType.get() Line 146 + 0x4a bytes Unknown
Nemerle.Compiler.dll!Nemerle.Compiler.ILEmitter.GetMethodInfo(Nemerle.Compiler.TypeVar from_type = {Nemerle.Compiler.FixedType.Class}, Nemerle.Compiler.IMethod meth = {Nemerle.Compiler.LibraryReference.ExternalMethodInfo}, Nemerle.Core.list<Nemerle.Compiler.TypeVar> typars = Length = Cannot evaluate expression because the current thread is in a stack overflow state.: Cannot evaluate expression because the current thread is in a stack overflow state.) Line 368 + 0x6a bytes Unknown
Nemerle.Compiler.dll!Nemerle.Compiler.ILEmitter.emit(Nemerle.Compiler.Typedtree.TExpr expr = {Nemerle.Compiler.Typedtree.TExpr.Call}) Line 1215 + 0x1b bytes Unknown
Nemerle.Compiler.dll!Nemerle.Compiler.ILEmitter.emit(Nemerle.Compiler.Typedtree.TExpr expr = {Nemerle.Compiler.Typedtree.TExpr.Sequence}) Line 523 Unknown
Nemerle.Compiler.dll!Nemerle.Compiler.ILEmitter.emit(Nemerle.Compiler.Typedtree.TExpr expr = {Nemerle.Compiler.Typedtree.TExpr.Sequence}) Line 524 + 0x14 bytes Unknown
Nemerle.Compiler.dll!Nemerle.Compiler.ILEmitter.emit(Nemerle.Compiler.Typedtree.TExpr expr = {Nemerle.Compiler.Typedtree.TExpr.Sequence}) Line 524 + 0x14 bytes Unknown
Nemerle.Compiler.dll!Nemerle.Compiler.ILEmitter.emit(Nemerle.Compiler.Typedtree.TExpr expr = {Nemerle.Compiler.Typedtree.TExpr.Sequence}) Line 524 + 0x14 bytes Unknown
Nemerle.Compiler.dll!Nemerle.Compiler.ILEmitter.emit(Nemerle.Compiler.Typedtree.TExpr expr = {Nemerle.Compiler.Typedtree.TExpr.Sequence}) Line 524 + 0x14 bytes Unknown
Nemerle.Compiler.dll!Nemerle.Compiler.ILEmitter.emit(Nemerle.Compiler.Typedtree.TExpr expr = {Nemerle.Compiler.Typedtree.TExpr.Sequence}) Line 524 + 0x14 bytes Unknown
Nemerle.Compiler.dll!Nemerle.Compiler.ILEmitter.emit(Nemerle.Compiler.Typedtree.TExpr expr = {Nemerle.Compiler.Typedtree.TExpr.Sequence}) Line 524 + 0x14 bytes Unknown
Nemerle.Compiler.dll!Nemerle.Compiler.ILEmitter.emit(Nemerle.Compiler.Typedtree.TExpr expr = {Nemerle.Compiler.Typedtree.TExpr.Sequence}) Line 524 + 0x14 bytes Unknown
Nemerle.Compiler.dll!Nemerle.Compiler.ILEmitter.emit(Nemerle.Compiler.Typedtree.TExpr expr = {Nemerle.Compiler.Typedtree.TExpr.Sequence}) Line 524 + 0x14 bytes Unknown
Nemerle.Compiler.dll!Nemerle.Compiler.ILEmitter.emit(Nemerle.Compiler.Typedtree.TExpr expr = {Nemerle.Compiler.Typedtree.TExpr.Sequence}) Line 524 + 0x14 bytes Unknown
Nemerle.Compiler.dll!Nemerle.Compiler.ILEmitter.emit(Nemerle.Compiler.Typedtree.TExpr expr = {Nemerle.Compiler.Typedtree.TExpr.DefValIn}) Line 558 + 0x14 bytes Unknown
Nemerle.Compiler.dll!Nemerle.Compiler.ILEmitter.emit(Nemerle.Compiler.Typedtree.TExpr expr = {Nemerle.Compiler.Typedtree.TExpr.Label}) Line 798 + 0x14 bytes Unknown
Nemerle.Compiler.dll!Nemerle.Compiler.ILEmitter.emit(Nemerle.Compiler.Typedtree.TExpr expr = {Nemerle.Compiler.Typedtree.TExpr.TypeConversion}) Line 827 + 0x14 bytes Unknown
Nemerle.Compiler.dll!Nemerle.Compiler.ILEmitter.Run() Line 117 Unknown
Nemerle.Compiler.dll!Nemerle.Compiler.MethodBuilder._N__N_lambda__62402__62522.apply_void() Line 851 Unknown
Nemerle.Compiler.dll!Nemerle.Compiler.TypeBuilder.BeforeFinalizeType() Line 1789 Unknown
Nemerle.Compiler.dll!Nemerle.Compiler.TypeBuilder.FinalizeType() Line 1795 Unknown
Nemerle.Compiler.dll!Nemerle.Compiler.TypeBuilder.EmitImplementation() Line 673 + 0xe bytes Unknown
Nemerle.Compiler.dll!Nemerle.Compiler.TypesManager._N_emit_impl__55566.apply_void(Nemerle.Compiler.TypeBuilder _N__55565 = {Nemerle.Compiler.TypeBuilder}) Line 366 Unknown
Nemerle.Compiler.dll!Nemerle.Compiler.TypesManager._N_maybe_f__55806.apply_void(Nemerle.Compiler.TypeBuilder _N__55805 = {Nemerle.Compiler.TypeBuilder}) Line 258 Unknown
[External Code]
Nemerle.Compiler.dll!Nemerle.Compiler.TypesManager.Iter(Nemerle.Core.list<Nemerle.Compiler.TypeBuilder> builders = Length = Cannot evaluate expression because the current thread is in a stack overflow state.: Cannot evaluate expression because the current thread is in a stack overflow state., Nemerle.Builtins.FunctionVoid<Nemerle.Compiler.TypeBuilder> f = {Nemerle.Compiler.TypesManager._N_emit_impl__55566}) Line 265 Unknown
Nemerle.Compiler.dll!Nemerle.Compiler.TypesManager.Iter(Nemerle.Builtins.FunctionVoid<Nemerle.Compiler.TypeBuilder> f = {Nemerle.Compiler.TypesManager._N_emit_impl__55566}) Line 276 Unknown
Nemerle.Compiler.dll!Nemerle.Compiler.TypesManager.compile_all_tyinfos(bool aux_phase = false) Line 398 Unknown
Nemerle.Compiler.dll!Nemerle.Compiler.TypesManager._N__N_lambda__55006__55109.apply_void() Line 236 Unknown
Nemerle.Compiler.dll!Nemerle.Compiler.Solver.Enqueue(Nemerle.Builtins.FunctionVoid action = {Nemerle.Compiler.TypesManager._N__N_lambda__55006__55109}) Line 201 Unknown
Nemerle.Compiler.dll!Nemerle.Compiler.TypesManager.EmitDecls() Line 256 Unknown
Nemerle.Compiler.dll!Nemerle.Compiler.ManagerClass.Run() Line 548 Unknown
ManagerStart.exe!Program._N__N_lambda__5829__6291.apply_void() Line 44 + 0x25 bytes Unknown

Windows 7 x64, Nemerle 1.0.0.9342
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.