diff --git a/CodeCompletion/FindReferences.cs b/CodeCompletion/FindReferences.cs index 7cf0825b8..3644db51f 100644 --- a/CodeCompletion/FindReferences.cs +++ b/CodeCompletion/FindReferences.cs @@ -1570,6 +1570,7 @@ namespace CodeCompletion } else { + if (_modern_proc_type.el != null) foreach (enumerator en in _modern_proc_type.el.enumerators) { en.name.visit(this); // Это исправил - SSM 15.1.16 diff --git a/Compiler/PCU/PCUReader.cs b/Compiler/PCU/PCUReader.cs index f539173fa..6e627a745 100644 --- a/Compiler/PCU/PCUReader.cs +++ b/Compiler/PCU/PCUReader.cs @@ -3069,7 +3069,7 @@ namespace PascalABCCompiler.PCU private common_parameter GetParameter(common_function_node func) { int offset = (int)br.BaseStream.Position-start_pos; - br.ReadByte(); + br.ReadByte(); string s = br.ReadString(); type_node tn = GetTypeReference(); concrete_parameter_type cpt = (concrete_parameter_type)br.ReadByte(); @@ -3089,7 +3089,9 @@ namespace PascalABCCompiler.PCU p.default_value = CreateExpressionWithOffset(); } p.attributes.AddRange(GetAttributes()); - //members[offset] = p; + //members[offset] = p; + if (members.ContainsKey(offset)) + return (common_parameter)members[offset]; AddMember(p, offset); return p; } @@ -3117,7 +3119,8 @@ namespace PascalABCCompiler.PCU p.default_value = CreateExpressionWithOffset(); } p.attributes.AddRange(GetAttributes()); - //members[offset] = p; + if (members.ContainsKey(offset)) + return (common_parameter)members[offset]; AddMember(p, offset); return p; } @@ -3982,6 +3985,13 @@ namespace PascalABCCompiler.PCU private common_parameter GetParameterByOffset(int offset) { + if (!members.ContainsKey(offset)) + { + int tmp = (int)br.BaseStream.Position; + br.BaseStream.Seek(start_pos + offset, SeekOrigin.Begin); + var loc_param = GetParameter(); + br.BaseStream.Seek(tmp, SeekOrigin.Begin); + } return (common_parameter)members[offset]; } diff --git a/TreeConverter/NetWrappers/NetHelper.cs b/TreeConverter/NetWrappers/NetHelper.cs index eb163cff8..89a150073 100644 --- a/TreeConverter/NetWrappers/NetHelper.cs +++ b/TreeConverter/NetWrappers/NetHelper.cs @@ -930,7 +930,8 @@ namespace PascalABCCompiler.NetHelper t = namespaces[name] as Type; if (t != null && cur_used_assemblies.ContainsKey(t.Assembly)) return true; foreach (Assembly a in namespace_assemblies.Keys) - if (cur_used_assemblies.ContainsKey(a) && (namespace_assemblies[a] as Hashtable).ContainsKey(name)) return true; + if (cur_used_assemblies != null && cur_used_assemblies.ContainsKey(a) && (namespace_assemblies[a] as Hashtable).ContainsKey(name)) + return true; return false; }