public bool GetLocalName (string name, Block block, ref INamedBlockVariable variable)
{
if (names == null)
return false;
object value;
if (!names.TryGetValue (name, out value))
return false;
variable = value as INamedBlockVariable;
Block b = block;
if (variable != null) {
do {
if (variable.Block == b.Original)
return true;
b = b.Parent;
} while (b != null);
b = variable.Block;
do {
if (block == b)
return false;
b = b.Parent;
} while (b != null);
} else {
List<INamedBlockVariable> list = (List<INamedBlockVariable>) value;
for (int i = 0; i < list.Count; ++i) {
variable = list[i];
do {
if (variable.Block == b.Original)
return true;
b = b.Parent;
} while (b != null);
b = variable.Block;
do {
if (block == b)
return false;
b = b.Parent;
} while (b != null);
b = block;
}
}
variable = null;
return false;
}