исключение на выводе типов
От: _Claus_  
Дата: 27.02.12 02:29
Оценка:
пытаюсь добавлять к классу поля на стадии BeforeInheritance, вставляя инициализацию в конструктор в фазе
WithTypedMembers (пробовал по всякому, но описываю этот способ).

добавляю


             def fld = <[decl:          
                  public $(fld_name : usesite)  : Dispatcher[$(x.ty), $tbty] 
                ]>
            
                tb.DefineWithSource(fld)



формирую код инициализации тут же

tb.UserData[id] = <[$(fld_name : usesite) = Dispatcher.[$(x.ty), $tbty] (this);]> :: tb.UserData[id] :> list[PExpr] ?? []


в WithTypedMembers


 def block = typeBuilder.UserData[id] :> list[PExpr]
      
      foreach(m is MethodBuilder in typeBuilder.GetMembers())
        when(m.Name == ".ctor")
          m.Body = <[ $(m.Body); { ..$block; }]>
      otherwise        
        typeBuilder.DefineWithSource(<[ decl: public this() { ..$block; } ]>)


получаю

Построение начато: проект: MacroTest, Конфигурация: Debug Any CPU ------
C:\Program Files\Nemerle\Net-4.0\Nemerle.MSBuild.targets(219,9): error : internal compiler error: got MatchFailureException exception
в Nemerle.Compiler.Typer.DoType(PExpr expression, TypeVar expected, Boolean is_toplevel_in_seq) в C:\MyProjects\nemerle\ncc\typing\Typer.n:строка 2257
в Nemerle.Compiler.Typer.TypeExpr(PExpr expr, TypeVar expected, Boolean is_toplevel_in_seq) в C:\MyProjects\nemerle\ncc\typing\Typer.n:строка 1463
в Nemerle.Compiler.Typer.TypeExpr(PExpr e, TypeVar expected) в C:\MyProjects\nemerle\ncc\typing\Typer.n:строка 1432
в Nemerle.Compiler.Typer.DoType(PExpr expression, TypeVar expected, Boolean is_toplevel_in_seq) в C:\MyProjects\nemerle\ncc\typing\Typer.n:строка 2241
в Nemerle.Compiler.Typer.TypeExpr(PExpr expr, TypeVar expected, Boolean is_toplevel_in_seq) в C:\MyProjects\nemerle\ncc\typing\Typer.n:строка 1463
в Nemerle.Compiler.Typer.TypeExpr(PExpr e, TypeVar expected) в C:\MyProjects\nemerle\ncc\typing\Typer.n:строка 1432
в Nemerle.Compiler.Typer.RunTyper() в C:\MyProjects\nemerle\ncc\typing\Typer.n:строка 408
в Nemerle.Compiler.Typer.RunFullTyping() в C:\MyProjects\nemerle\ncc\typing\Typer.n:строка 248
в 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...
Пока на собственное сообщение не было ответов, его можно удалить.