bug fix in pcu

This commit is contained in:
Бондарев Иван 2017-11-23 21:00:04 +01:00
parent 6ee2a20b22
commit 2e46be3190
3 changed files with 16 additions and 4 deletions

View file

@ -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

View file

@ -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];
}

View file

@ -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;
}