Example #1
0
        /// <summary>
        /// Поиск символа в пространстве имен.
        /// </summary>
        /// <param name="name">Имя для поиска.</param>
        /// <returns>Первый элемент списка найденных имен. null если ни чего не найдено.</returns>
        public override SymbolInfoList find(string name)
        {
            bool           is_ns = NetHelper.NetHelper.IsNetNamespace(_name + "." + name);
            SymbolInfoList sil   = null;

            if (is_ns)
            {
                compiled_namespace_node cnn = compiled_namespace_node.get_compiled_namespace(_name + "." + name, _tcst);
                sil = new SymbolInfoList(new SymbolInfo(cnn));
            }
            else
            {
                //Kolay changed next string.   throwOnError=false  ignoreCase=true,   .
                //Type t = Type.GetType(_name+"."+name,false,true);
                if (common_namespace != null)
                {
                    sil = common_namespace.scope.FindOnlyInScope(name);
                    if (sil != null)
                    {
                        return(sil);
                    }
                }
                Type t = NetHelper.NetHelper.FindType(_name + "." + name);
                if (t != null)
                {
                    sil = new SymbolInfoList(new SymbolInfo(compiled_type_node.get_type_node(t, _tcst)));
                }
                else
                {
                    t = NetHelper.NetHelper.FindType(_name + "." + _name);
                    if (t != null && NetHelper.NetHelper.IsEntryType(t))
                    {
                        sil = NetHelper.NetHelper.FindName(t, name);
                        if (sil == null)
                        {
                            type_node tn = NetHelper.NetHelper.FindCompiledPascalType(_name + "." + name);
                            if (tn != null)
                            {
                                sil = new SymbolInfoList(new SymbolInfo(tn));
                            }
                            else
                            {
                                template_class tc = NetHelper.NetHelper.FindCompiledTemplateType(_name + "." + name);
                                if (tc != null)
                                {
                                    sil = new SymbolInfoList(new SymbolInfo(tc));
                                }
                            }
                        }
                    }
                }
            }
            return(sil);
        }
Example #2
0
        public static compiled_namespace_node get_compiled_namespace(string full_name, SymbolTable.TreeConverterSymbolTable tcst)
        {
            compiled_namespace_node cnn = null;

            if (!compiled_namespaces.TryGetValue(full_name, out cnn))
            {
                cnn = new compiled_namespace_node(full_name, tcst);
                compiled_namespaces.Add(full_name, cnn);
            }
            cnn._tcst = tcst;
            return(cnn);
        }
		public SymbolInfo(compiled_namespace_node value)
		{
			//_name_information_type=name_information_type.nit_compiled_namespace;
			_sym_info=value;
			_access_level=access_level.al_public;
			_symbol_kind=symbol_kind.sk_none;
		}
Example #4
0
		/*public override base_scope top_scope
		{
			get
			{
				return _up_scope;
			}
		}*/

		public override SymbolInfo Find(string name, SymbolTable.Scope CurrentScope)
		{
			SymbolInfo si=null;
			string full_ns=null;
            if (NetHelper.IsNetNamespace(name, _unar, out full_ns) == true)
            {
                compiled_namespace_node cnn = new compiled_namespace_node(full_ns, _tcst);
                si = new SymbolInfo(cnn);
            }
            else
            {
                //Type t = Type.GetType("System."+name,false,true);
                Type t = null;
                int i = 0;
                t = NetHelper.FindType(name, _unar);
                if (t != null)
                {
                    compiled_type_node ctn = compiled_type_node.get_type_node(t, _tcst);
                    si = new SymbolInfo(ctn);
                }
                else
                {
                    if (entry_type != null)
                    {
                        type_node pas_tn = NetHelper.FindCompiledPascalType(entry_type.Namespace + "." + name);
                        if (pas_tn != null)
                        {
                            si = new SymbolInfo(pas_tn);
                            return si;
                        }
                        else
                        {
                            template_class tc = NetHelper.FindCompiledTemplateType(entry_type.Namespace + "." + name);
                            if (tc != null)
                            {
                                si = new SymbolInfo(tc);
                                return si;
                            }
                        }
                    }
                    if (SemanticRules.AllowGlobalVisibilityForPABCDll && entry_type != null)
                    {
                        t = NetHelper.FindType(entry_type.Namespace + "." + name);
                        if (t != null) si = new SymbolInfo(compiled_type_node.get_type_node(t));
                        else
                        {
                            object[] attrs = entry_type.GetCustomAttributes(false);
                            for (int j = 0; j < attrs.Length; j++)
                                if (attrs[j].GetType().Name == PascalABCCompiler.TreeConverter.compiler_string_consts.global_attr_name)
                                {
                                    si = NetHelper.FindName(entry_type, name);
                                    if (si != null) break;
                                }
                        }
                        if (si == null && UnitTypes.Count > 1)
                        {
                            for (int j = 0; j < _unar.Count; j++)
                            {
                                t = in_type_list(_unar[j].namespace_name);
                                if (t != null)
                                {
                                    si = NetHelper.FindName(t, name);
                                    if (si != null)
                                        break;
                                }
                            }
                        }
                    }
                }
            }
			return si;
		}
Example #5
0
        /// <summary>
        /// Поиск символа в пространстве имен.
        /// </summary>
        /// <param name="name">Имя для поиска.</param>
        /// <returns>Первый элемент списка найденных имен. null если ни чего не найдено.</returns>
		public override SymbolInfo find(string name)
		{
            bool is_ns = NetHelper.NetHelper.IsNetNamespace(_name + "." + name);
            SymbolInfo si = null;
            if (is_ns == true)
            {
                compiled_namespace_node cnn = new compiled_namespace_node(_name + "." + name,_tcst);
                si = new SymbolInfo(cnn);
            }
            else
            {
                //Kolay changed next string.   throwOnError=false  ignoreCase=true,   .
                //Type t = Type.GetType(_name+"."+name,false,true);
                Type t = NetHelper.NetHelper.FindType(_name + "." + name);
                if (t != null)
                {
                    si = new SymbolInfo(compiled_type_node.get_type_node(t,_tcst));
                }
                else
                {
                	t = NetHelper.NetHelper.FindType(_name+"."+_name);
                	if (t != null && NetHelper.NetHelper.IsEntryType(t))
                	{
                		si = NetHelper.NetHelper.FindName(t,name);
                        if (si == null)
                        {
                            type_node tn = NetHelper.NetHelper.FindCompiledPascalType(_name + "." + name);
                            if (tn != null)
                                si = new SymbolInfo(tn);
                            else
                            {
                                template_class tc = NetHelper.NetHelper.FindCompiledTemplateType(_name + "." + name);
                                if (tc != null)
                                    si = new SymbolInfo(tc);
                            }
                        }
                	}
                }
            }
            return si;

		}