фикс бага компилятора
От: _Claus_  
Дата: 12.03.12 16:39
Оценка:
думаю как бы пофиксить баг, связанный с Null подстановкой в квазицитату.
компилятор падает в Typer.n стр. 1439, практически молча, не давая никаких наводок на причину.
имеет смысл ввести проверку в момент подстановки. кто знает куда — подскажите, отлаживать компилятор пока не научился.
Re: фикс бага компилятора
От: _NN_ www.nemerleweb.com
Дата: 12.03.12 16:49
Оценка:
Здравствуйте, _Claus_, Вы писали:

_C_>думаю как бы пофиксить баг, связанный с Null подстановкой в квазицитату.

_C_>компилятор падает в Typer.n стр. 1439, практически молча, не давая никаких наводок на причину.
_C_>имеет смысл ввести проверку в момент подстановки. кто знает куда — подскажите, отлаживать компилятор пока не научился.

Может имеет смысл науччить отлаживать компилятор ?

Один из вариантов:
1. Ставим в нужное нам место assert2(false) или System.Diagnostics.Debugger.Launch();
2. Собираем 1 проход компилятора (3.5 или 4.0 в зависимости от требования) , желательней в отладочном режиме:
msbuild NemerleAll.nproj /t:Stage1 /p:Configuration=Debug

3. Компилируем, а там окошко отладчика само появится и выбираем Visual Studio для отладки.

Все

Вариант другой, создаем проект, переносим нужные нам классы в проект и там собираем и отлаживаемся.
Потом кладем обратно в проект компилятора.

Вариант три: Открыть проект компилятора в VisualStudio SharpDevelop и наслаждаться отладкой

Кроме того, никто не мешает для целей отладки поставить там логгирование простейшим System.Console.WriteLine.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[2]: фикс бага компилятора
От: _Claus_  
Дата: 12.03.12 16:58
Оценка:
_NN>Может имеет смысл науччить отлаживать компилятор ?

спасибо, попробую на досуге. с данной багой все понятно. непонятно, где работает нужный код для его коррекции.
Re: еще бага компилятора (или общая)
От: _Claus_  
Дата: 12.03.12 23:14
Оценка:
схема макрокода, который поэтапно генерируется и к этому приводит:


def disp_fld = <[decl:
                public class $(Z : name) :
                {
                  static public LY : list[Y] = [];  // без = [] валится                                      
                  ..                  
                  static this()
                  {
                    LY ::= Y()
                  }   
                }
                ]>   
                  
              tb.DefineNestedType(disp_fld)


если б упало в райнтайме — было бы понятно и справедливо, но при компиляции — почему

------ Построение начато: проект: MacroTest, Конфигурация: Debug Any CPU ------
C:\Program Files\Nemerle\Net-4.0\Nemerle.MSBuild.targets(219,9): error : internal compiler error: assertion ``expr != null'' failed in file ncc\typing\Typer2.n, line 153
в Nemerle.Compiler.Typer2.Walk(Context ctx, TExpr expr) в C:\MyProjects\nemerle\ncc\typing\Typer2.n:строка 153
в Nemerle.Compiler.Typer2.DoWalk(Context ctx, TExpr expr) в C:\MyProjects\nemerle\ncc\typing\Typer2.n:строка 1441
в Nemerle.Compiler.Typer2.Walk(Context ctx, TExpr expr) в C:\MyProjects\nemerle\ncc\typing\Typer2.n:строка 158
в Nemerle.Compiler.Typer2.DoWalk(Context ctx, TExpr expr) в C:\MyProjects\nemerle\ncc\typing\Typer2.n:строка 1595
в Nemerle.Compiler.Typer2.Walk(Context ctx, TExpr expr) в C:\MyProjects\nemerle\ncc\typing\Typer2.n:строка 158
в Nemerle.Compiler.Typer2.DoWalk(Context ctx, TExpr expr) в C:\MyProjects\nemerle\ncc\typing\Typer2.n:строка 1562
в Nemerle.Compiler.Typer2.Walk(Context ctx, TExpr expr) в C:\MyProjects\nemerle\ncc\typing\Typer2.n:строка 158
в Nemerle.Compiler.Typer2.DoWalk(Context ctx, TExpr expr) в C:\MyProjects\nemerle\ncc\typing\Typer2.n:строка 1595
в Nemerle.Compiler.Typer2.Walk(Context ctx, TExpr expr) в C:\MyProjects\nemerle\ncc\typing\Typer2.n:строка 158
в Nemerle.Compiler.Typer2.DoWalk(Context ctx, TExpr expr) в C:\MyProjects\nemerle\ncc\typing\Typer2.n:строка 1610
в Nemerle.Compiler.Typer2.Walk(Context ctx, TExpr expr) в C:\MyProjects\nemerle\ncc\typing\Typer2.n:строка 158
в Nemerle.Compiler.Typer2.DoWalk(Context ctx, TExpr expr) в C:\MyProjects\nemerle\ncc\typing\Typer2.n:строка 1595
в Nemerle.Compiler.Typer2.Walk(Context ctx, TExpr expr) в C:\MyProjects\nemerle\ncc\typing\Typer2.n:строка 158
в Nemerle.Compiler.Typer2.DoWalk(Context ctx, TExpr expr) в C:\MyProjects\nemerle\ncc\typing\Typer2.n:строка 1595
в Nemerle.Compiler.Typer2.Walk(Context ctx, TExpr expr) в C:\MyProjects\nemerle\ncc\typing\Typer2.n:строка 158
в Nemerle.Compiler.Typer2.DoWalk(Context ctx, TExpr expr) в C:\MyProjects\nemerle\ncc\typing\Typer2.n:строка 1614
в Nemerle.Compiler.Typer2.Walk(Context ctx, TExpr expr) в C:\MyProjects\nemerle\ncc\typing\Typer2.n:строка 158
в Nemerle.Compiler.Typer2.Run() в C:\MyProjects\nemerle\ncc\typing\Typer2.n:строка 128
в Nemerle.Compiler.Typer.RunSecondPass(MethodBuilder meth) в C:\MyProjects\nemerle\ncc\typing\Typer.n:строка 458
в Nemerle.Compiler.Typer.RunFullTyping() в C:\MyProjects\nemerle\ncc\typing\Typer.n:строка 259
в Nemerle.Compiler.MethodBuilder.RunBodyTyper() в C:\MyProjects\nemerle\ncc\hierarchy\ClassMembers.n:строка 927
в Nemerle.Compiler.MethodBuilder.Compile() в C:\MyProjects\nemerle\ncc\generation\HierarchyEmitter.n:строка 1120
в Nemerle.Compiler.TypeBuilder.EmitImplementation() в C:\MyProjects\nemerle\ncc\generation\HierarchyEmitter.n:строка 658
в Nemerle.Compiler.TypesManager._N_emit_impl__60297.apply_void(TypeBuilder ti) в C:\MyProjects\nemerle\ncc\generation\HierarchyEmitter.n:строка 375
в Nemerle.Compiler.TypesManager._N_maybe_f__60542.apply_void(TypeBuilder ti) в C:\MyProjects\nemerle\ncc\hierarchy\TypesManager.n:строка 257
в Nemerle.Collections.NList.Iter[T](list`1 l, FunctionVoid`1 f) в C:\MyProjects\nemerle\lib\list.n:строка 944
в Nemerle.Core.list`1.Iter(FunctionVoid`1 f) в C:\MyProjects\nemerle\lib\list.n:строка 317
в Nemerle.Compiler.TypesManager.Iter(list`1 builders, FunctionVoid`1 f) в C:\MyProjects\nemerle\ncc\hierarchy\TypesManager.n:строка 264
в Nemerle.Compiler.TypesManager.Iter(FunctionVoid`1 f) в C:\MyProjects\nemerle\ncc\hierarchy\TypesManager.n:строка 275
в Nemerle.Compiler.TypesManager.compile_all_tyinfos(Boolean aux_phase) в C:\MyProjects\nemerle\ncc\generation\HierarchyEmitter.n:строка 402
в Nemerle.Compiler.TypesManager._N__N_lambda__59721__59824.apply_void() в C:\MyProjects\nemerle\ncc\generation\HierarchyEmitter.n:строка 245
в Nemerle.Compiler.Solver.Enqueue(FunctionVoid action) в C:\MyProjects\nemerle\ncc\typing\Solver.n:строка 199
в Nemerle.Compiler.TypesManager.EmitDecls() в C:\MyProjects\nemerle\ncc\generation\HierarchyEmitter.n:строка 244
в Nemerle.Compiler.ManagerClass.Run() в C:\MyProjects\nemerle\ncc\passes.n:строка 664
в Nemerle.CommandlineCompiler.MainClass.main_with_catching() в C:\MyProjects\nemerle\ncc\main.n:строка 131
Построение проекта "MacroTest.nproj" завершено с ошибкой.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.