/// <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); }
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; }
/*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; }
/// <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; }