//\ssyy

        //(ssyy) возвращаемое значение заменено на definition_node из-за шаблонов
        public definition_node enter_in_type_method(SyntaxTree.method_name meth_name, string type_name, location loc, int num_template_args)
        {
            // num_template_args - это количество обобщенных аргументов в классе (не в методе!)
            SymbolInfo si = null;

            if (meth_name.ln!=null && meth_name.ln.Count > 1)
            {
                // обработать эту ситуацию особо тщательно: в ln - список возможных пространств имен с классом (возможно, обобщенным) на конце

                // если в ln какое-то имя кроме последнего, содержит обобщенные параметры - это ошибка
                for (var i = 0; i < meth_name.ln.Count - 1; i++)
                    if (meth_name.ln[i] is SyntaxTree.template_type_name)
                        AddError(new NameCannotHaveGenericParameters(meth_name.ln[i].name, syntax_tree_visitor.get_location(meth_name.ln[i]))); 
                
                var ntr = new SyntaxTree.named_type_reference();
                for (var i = 0; i < meth_name.ln.Count; i++)
                    ntr.Add(meth_name.ln[i]);
                if (num_template_args>0 && ! ntr.names[meth_name.ln.Count-1].name.Contains(compiler_string_consts.generic_params_infix))
                {
                     ntr.names[meth_name.ln.Count-1].name += compiler_string_consts.generic_params_infix + num_template_args;
                }
                si = find_definition_node(ntr, loc);
                // если не нашли, то ошибка будет неправильной с неправильным именем - надо исправить
            }
            else
            {
                if (num_template_args != 0)
                {
                    string template_type_name = type_name + compiler_string_consts.generic_params_infix + num_template_args.ToString();
                    si = find(template_type_name);
                    /*if (si == null || si.sym_info.general_node_type != general_node_type.template_type)
                    {
                        type_name = type_name + compiler_string_consts.generic_params_infix + num_template_args.ToString();
                        si = null;
                    }*/
                }
                if (si == null)
                {
                    si = find(type_name);
                }
            }

            if (si == null)
            {
                AddError(new UndefinedNameReference(type_name, loc));
            }
            definition_node dn = si.sym_info;
            if (dn.general_node_type == general_node_type.template_type)
            {
                _ctt = dn as template_class;
                if (_cmn != _ctt.cnn && _ctt.using_list2 == null)
                {
                    //Заполняем список using для внешних методов
                    _ctt.using_list2 = new using_namespace_list();
                    foreach(using_namespace un in syntax_tree_visitor.using_list)
                    {
                        _ctt.using_list2.AddElement(un);
                    }
                }
                return dn;
            }
            if (dn.general_node_type == general_node_type.generic_indicator)
            {
                dn = (dn as generic_indicator).generic;
            }
            if (dn is compiled_type_node)
            {
                _compiled_tn = dn as compiled_type_node;
                return dn;
            }
            if (dn.general_node_type != general_node_type.type_node)
            {
                AddError(loc, "TYPE_NAME_EXPECTED");
            }
#if DEBUG
            if (si.Next != null)
            {
                throw new CompilerInternalError("Must find only type, found some other.");
            }
#endif
            if (dn.semantic_node_type != semantic_node_type.common_type_node)
            {
                AddError(loc, "ONLY_COMMON_TYPE_METHOD_DEFINITION_ALLOWED");
            }

            //TODO: В случае создания вложенных классов этот код надо поправить.
            common_type_node ctn = dn as common_type_node;
            _ctn = ctn;
            return ctn;
        }