public override void visit(SyntaxTree.unnamed_type_object unn) // SSM 27.06.13
        {
            var l = unn.ne_list;
            var names = l.name_expr.Select(x=>x.name).ToList();
            var strnames = names.Select(id=>id.name).ToList(); // преобразование idents в строки
            var semantic_types = l.name_expr.Select(x => convert_strong(x.expr).type).ToList();
            var types = semantic_types.Select(x => SyntaxTreeBuilder.BuildSemanticType(x)).ToList();

            contextChanger.SaveContextAndUpToGlobalLevel();

            var tt = context._cmn.types.Where(t => t.name.StartsWith("AnonymousType#")); // найти все анонимные типы, полученные в текущей компиляции

            var typ = tt.FirstOrDefault(t => SameTypeAutoClasses(strnames, semantic_types, t)); // найти структурно совпадающий уже существующий анонимный тип

            // Генерация глобальных описаний - перенесена с синтаксического уровня
            if (typ != null)
                unn.set_name(typ.name); // если нашли, то просто меняем имя на имя этого класса
            else
            {
                var td = SyntaxTreeBuilder.BuildAutoClass(unn.name(), names, types, unn.is_class);
                visit(td);
            }

            contextChanger.RestoreCurrentContext();

            // Сахарный узел. Переадресация дальнейшей генерации узлу new_ex
            visit(unn.new_ex);
        }