Пример #1
0
        //TODO: Исправить этот метод, так чтобы он работал только с корневыми или со всеми пространствами имен.
        /// <summary>
        /// Просматривает список модулей, и объединяет одни и те-же пространства имен разных модулей.
        /// </summary>
        /// <param name="units">Список модулей.</param>
        /// <returns>Список пространств имен.</returns>
        private static common_namespace_node[] get_units_namespaces(common_unit_node_list units)
        {
            /*System.Collections.Generic.Dictionary<string, common_namespace_node> namespaces =
             *  new System.Collections.Generic.Dictionary<string, common_namespace_node>(
             *  SystemLibrary.SystemLibrary.string_comparer);
             *
             * foreach (common_unit_node un in units)
             * {
             *  foreach (common_namespace_node cnn in un.namespaces)
             *  {
             *      string full_name = cnn.namespace_full_name;
             *      common_namespace_node new_namespace;
             *      if (!(namespaces.TryGetValue(full_name,out new_namespace)))
             *      {
             *          new_namespace = cnn.clone();
             *          namespaces[full_name] = new_namespace;
             *      }
             *      else
             *      {
             *          new_namespace.merge_with_namespace(cnn);
             *      }
             *  }
             * }
             * common_namespace_node[] ret = new common_namespace_node[namespaces.Count];
             * namespaces.Values.CopyTo(ret, 0);
             * return ret;*/
            System.Collections.Hashtable ht       = new System.Collections.Hashtable();
            System.Collections.ArrayList al       = new System.Collections.ArrayList();
            common_namespace_node        main_cnn = null;

            foreach (common_unit_node un in units)
            {
                foreach (common_namespace_node cnn in un.namespaces)
                {
                    //if (cnn.namespace_full_name != "")
                    //{
                    if (ht[cnn.namespace_name] == null)
                    {
                        al.Add(cnn); ht[cnn.namespace_name] = cnn;
                    }
                    //else
                    //    throw new Errors.CompilerInternalError("MergeNamespaces", new Errors.LocatedError("Dupblicate nammespace name: "+cnn.namespace_name));
                    //}
                    //else main_cnn = cnn;
                }
            }
            int num = 0; if (main_cnn != null)

            {
                num++;
            }

            common_namespace_node[] namespaces_to_ret = new common_namespace_node[al.Count + num];
            if (main_cnn != null)
            {
                namespaces_to_ret[0] = main_cnn;
            }
            al.CopyTo(namespaces_to_ret, num);
            return(namespaces_to_ret);

            /*System.Collections.Hashtable ht = new System.Collections.Hashtable();
             * System.Collections.ArrayList al = new System.Collections.ArrayList();
             * foreach (common_unit_node un in units)
             * {
             *  foreach (common_namespace_node cnn in un.namespaces)
             *      if (ht[cnn.namespace_name] == null)
             *      {
             *          al.Add(cnn);
             *          ht[cnn.namespace_name] = cnn;
             *      }
             * }
             * common_namespace_node[] namespaces_to_ret = new common_namespace_node[al.Count];
             * al.CopyTo(namespaces_to_ret);
             * return namespaces_to_ret;*/
        }
Пример #2
0
        //TODO: Исправить этот метод, так чтобы он работал только с корневыми или со всеми пространствами имен.
        /// <summary>
        /// Просматривает список модулей, и объединяет одни и те-же пространства имен разных модулей.
        /// </summary>
        /// <param name="units">Список модулей.</param>
        /// <returns>Список пространств имен.</returns>
        private static common_namespace_node[] get_units_namespaces(common_unit_node_list units)
        {
            /*System.Collections.Generic.Dictionary<string, common_namespace_node> namespaces =
                new System.Collections.Generic.Dictionary<string, common_namespace_node>(
                SystemLibrary.SystemLibrary.string_comparer);

            foreach (common_unit_node un in units)
            {
                foreach (common_namespace_node cnn in un.namespaces)
                {
                    string full_name = cnn.namespace_full_name;
                    common_namespace_node new_namespace;
                    if (!(namespaces.TryGetValue(full_name,out new_namespace)))
                    {
                        new_namespace = cnn.clone();
                        namespaces[full_name] = new_namespace;
                    }
                    else
                    {
                        new_namespace.merge_with_namespace(cnn);
                    }
                }
            }
            common_namespace_node[] ret = new common_namespace_node[namespaces.Count];
            namespaces.Values.CopyTo(ret, 0);
            return ret;*/
            System.Collections.Hashtable ht = new System.Collections.Hashtable();
            System.Collections.ArrayList al = new System.Collections.ArrayList();
            common_namespace_node main_cnn = null;
            foreach (common_unit_node un in units)
            {
            	foreach (common_namespace_node cnn in un.namespaces)
                {
                    //if (cnn.namespace_full_name != "")
                    //{
                        if (ht[cnn.namespace_name] == null)
                        {
                            al.Add(cnn); ht[cnn.namespace_name] = cnn;
                        }
                        //else
                        //    throw new Errors.CompilerInternalError("MergeNamespaces", new Errors.LocatedError("Dupblicate nammespace name: "+cnn.namespace_name));
                    //}
                    //else main_cnn = cnn;
                }
            }
            int num = 0; if (main_cnn != null) num++;
            common_namespace_node[] namespaces_to_ret = new common_namespace_node[al.Count + num];
            if (main_cnn != null) namespaces_to_ret[0] = main_cnn;
            al.CopyTo(namespaces_to_ret, num);
            return namespaces_to_ret;
            /*System.Collections.Hashtable ht = new System.Collections.Hashtable();
            System.Collections.ArrayList al = new System.Collections.ArrayList();
            foreach (common_unit_node un in units)
            {
                foreach (common_namespace_node cnn in un.namespaces)
                    if (ht[cnn.namespace_name] == null)
                    {
                        al.Add(cnn); 
                        ht[cnn.namespace_name] = cnn;
                    }
            }
            common_namespace_node[] namespaces_to_ret = new common_namespace_node[al.Count];
            al.CopyTo(namespaces_to_ret);
            return namespaces_to_ret;*/
        }