public override List <SymbolInfo> Find(string name) { List <SymbolInfo> sil = SymbolTable.Find(this, name); if (PartialScope != null) { if (sil == null) { sil = SymbolTable.Find(PartialScope, name); } else { sil.AddRange(SymbolTable.Find(PartialScope, name)); } } if (sil == null) { return(sil); } //если это заглушка, то разворачиваем сущность foreach (SymbolInfo tsi in sil) { if (tsi.sym_info.semantic_node_type == semantic_node_type.wrap_def) { wrapped_definition_node wdn = (wrapped_definition_node)tsi.sym_info; tsi.sym_info = wdn.PCUReader.CreateInterfaceInClassMember(wdn.offset, name); } } return(sil); }
public override List <SymbolInfo> FindOnlyInScope(string name) { List <SymbolInfo> sil = SymbolTable.FindOnlyInScope(this, name, false); if (sil == null) { return(sil); } foreach (SymbolInfo tsi in sil) { if (tsi.sym_info.semantic_node_type == semantic_node_type.wrap_def) { wrapped_definition_node wdn = (wrapped_definition_node)tsi.sym_info; if (wdn.is_synonim) { tsi.sym_info = wdn.PCUReader.CreateTypeSynonim(wdn.offset, name); } else { tsi.sym_info = wdn.PCUReader.CreateInterfaceMember(wdn.offset, name); } } } return(sil); }
public override SymbolInfo FindOnlyInScope(string name) { SymbolInfo si = SymbolTable.FindOnlyInScope(this, name, false); if (si == null) { return(si); } SymbolInfo tsi = si; while (tsi != null) { if (tsi.sym_info.semantic_node_type == semantic_node_type.wrap_def) { wrapped_definition_node wdn = (wrapped_definition_node)tsi.sym_info; if (wdn.is_synonim) { tsi.sym_info = wdn.PCUReader.CreateTypeSynonim(wdn.offset, name); } else { tsi.sym_info = wdn.PCUReader.CreateInterfaceMember(wdn.offset, name); } } tsi = tsi.Next; } return(si); }
public override List <SymbolInfo> find_in_type(string name, Scope CurrentScope, type_node orig_generic_or_null = null, bool no_search_in_extension_methods = false) { List <SymbolInfo> sil = scope.FindOnlyInType(name, CurrentScope); if (sil == null) { if (base_type != null && base_type.IsDelegate) { return(base_type.find_in_type(name, CurrentScope, null, no_search_in_extension_methods)); } else if (name == compiler_string_consts.deconstruct_method_name) { return(SystemLibrary.SystemLibrary.object_type.find_in_type(name, CurrentScope, null, no_search_in_extension_methods)); } return(sil); } foreach (SymbolInfo si in sil) { if (si.sym_info.semantic_node_type == semantic_node_type.wrap_def) { wrapped_definition_node wdn = (wrapped_definition_node)si.sym_info; si.sym_info = wdn.PCUReader.CreateInterfaceInClassMember(wdn.offset, name); } } return(sil); }
public override SymbolInfo find_in_type(string name, Scope CurrentScope, bool no_search_in_extension_methods = false) { SymbolInfo si = scope.FindOnlyInType(name, CurrentScope); if (si == null) { if (base_type != null && base_type.IsDelegate) { return(base_type.find_in_type(name, CurrentScope, no_search_in_extension_methods)); } return(si); } SymbolInfo tsi = si; while (tsi != null) { if (tsi.sym_info.semantic_node_type == semantic_node_type.wrap_def) { wrapped_definition_node wdn = (wrapped_definition_node)tsi.sym_info; tsi.sym_info = wdn.PCUReader.CreateInterfaceInClassMember(wdn.offset, name); } tsi = tsi.Next; } return(si); }
public override SymbolInfoList Find(string name) { SymbolInfoList sil = SymbolTable.Find(this, name); if (sil == null) { return(null); } foreach (SymbolInfo tsi in sil.list) { if (tsi.sym_info.semantic_node_type == semantic_node_type.wrap_def) { wrapped_definition_node wdn = (wrapped_definition_node)tsi.sym_info; if (wdn.is_synonim) { tsi.sym_info = wdn.PCUReader.CreateTypeSynonim(wdn.offset, name); } else { tsi.sym_info = wdn.PCUReader.CreateImplementationMember(wdn.offset); } } } return(sil); }
public void RestoreMembers(string name) { List <SymbolInfo> sil = SymbolTable.FindOnlyInThisClass(this, name); //если это заглушка, то разворачиваем сущность foreach (SymbolInfo tsi in sil) { if (tsi.sym_info.semantic_node_type == semantic_node_type.wrap_def) { PCUSymbolInfo pcu_tsi = tsi as PCUSymbolInfo; if (needRestore(pcu_tsi, name) || pr.comp.CompilerOptions.OutputFileType == CompilerOptions.OutputType.ClassLibrary || name == "op_Equality" || name == "op_Inequality") { wrapped_definition_node wdn = (wrapped_definition_node)tsi.sym_info; tsi.sym_info = wdn.PCUReader.CreateInterfaceInClassMember(wdn.offset, name); } else { } } } }
public void RestoreMembers(string name) { SymbolInfoList sil = SymbolTable.FindOnlyInThisClass(this, name); //если это заглушка, то разворачиваем сущность foreach (SymbolInfo tsi in sil.list) { if (tsi.sym_info.semantic_node_type == semantic_node_type.wrap_def) { PCUSymbolInfo pcu_tsi = tsi as PCUSymbolInfo; if (!(pcu_tsi != null && pcu_tsi.semantic_node_type == semantic_node_type.common_method_node && !pcu_tsi.virtual_slot) || pr.comp.CompilerOptions.OutputFileType == CompilerOptions.OutputType.ClassLibrary) { wrapped_definition_node wdn = (wrapped_definition_node)tsi.sym_info; tsi.sym_info = wdn.PCUReader.CreateInterfaceInClassMember(wdn.offset, name); } else { } } } }
public override SymbolInfo Find(string name) { SymbolInfo si = SymbolTable.Find(this, name); if (PartialScope != null) { if (si == null) { si = SymbolTable.Find(PartialScope, name); } else { SymbolInfo tmp_si = si; while (tmp_si.Next != null) { tmp_si = tmp_si.Next; } tmp_si.Next = SymbolTable.Find(PartialScope, name); } } if (si == null) { return(si); } //если это заглушка, то разворачиваем сущность SymbolInfo tsi = si; while (tsi != null) { if (tsi.sym_info.semantic_node_type == semantic_node_type.wrap_def) { wrapped_definition_node wdn = (wrapped_definition_node)tsi.sym_info; tsi.sym_info = wdn.PCUReader.CreateInterfaceInClassMember(wdn.offset, name); } tsi = tsi.Next; } return(si); }
public override SymbolInfoList find_in_type(string name, Scope CurrentScope, bool no_search_in_extension_methods = false) { SymbolInfoList sil = scope.FindOnlyInType(name, CurrentScope); if (sil == null) { if (base_type != null && base_type.IsDelegate) { return(base_type.find_in_type(name, CurrentScope, no_search_in_extension_methods)); } return(sil); } foreach (SymbolInfo si in sil.list) { if (si.sym_info.semantic_node_type == semantic_node_type.wrap_def) { wrapped_definition_node wdn = (wrapped_definition_node)si.sym_info; si.sym_info = wdn.PCUReader.CreateInterfaceInClassMember(wdn.offset, name); } } return(sil); }
public override List <SymbolInfo> find_in_type(string name, Scope CurrentScope, type_node orig_generic_or_null = null, bool no_search_in_extension_methods = false) { List <SymbolInfo> sil = scope.FindOnlyInType(name, CurrentScope); if (sil == null) { if (base_type != null && base_type.IsDelegate) { return(base_type.find_in_type(name, CurrentScope, null, no_search_in_extension_methods)); } else if (name == compiler_string_consts.deconstruct_method_name) { return(SystemLibrary.SystemLibrary.object_type.find_in_type(name, CurrentScope, null, no_search_in_extension_methods)); } // SSM перенес из common_type_node (types.cs 2116) - без этого не работали методы расширения последовательностей для типов в pcu, реализующих IEnumerable<T> if (ImplementingInterfaces != null) { Dictionary <definition_node, definition_node> cache = new Dictionary <definition_node, definition_node>(); List <SymbolInfo> props = new List <SymbolInfo>(); foreach (type_node ii_tn in ImplementingInterfaces) { List <SymbolInfo> isi = ii_tn.find_in_type(name, CurrentScope); if (isi != null) { if (sil == null) { sil = new List <SymbolInfo>(); } foreach (SymbolInfo si in isi) { if (!cache.ContainsKey(si.sym_info)) { if (si.sym_info is function_node && (si.sym_info as function_node).is_extension_method && sil.FindIndex(ssi => ssi.sym_info == si.sym_info) == -1) // SSM 12.12.18 - за счёт методов интерфейсов тоже могут добавляться одинаковые - исключаем их { sil.Add(si); } cache.Add(si.sym_info, si.sym_info); } } } } if (sil != null && sil.Count == 0) { sil = null; } } return(sil); } if (this.base_generic_instance != null && sil != null) { var bsil = base_generic_instance.ConvertSymbolInfo(sil); if (orig_generic_or_null == null && name != "op_Implicit") { return(bsil); } } foreach (SymbolInfo si in sil) { if (si.sym_info.semantic_node_type == semantic_node_type.wrap_def) { wrapped_definition_node wdn = (wrapped_definition_node)si.sym_info; si.sym_info = wdn.PCUReader.CreateInterfaceInClassMember(wdn.offset, name); } } return(sil); }