InterfaceBlock::InterfaceBlock(const InterfaceBlock &other):
Statement(other),
interface(other.interface),
- name(other.name),
+ block_name(other.block_name),
members(other.members),
instance_name(other.instance_name),
array(other.array),
{ }
-string get_unused_variable_name(const Block &block, const string &base, const string &prefix_hint)
+string get_unused_variable_name(const Block &block, const string &base)
{
string name = base;
- bool prefixed = false;
unsigned number = 1;
- unsigned size_without_number = name.size();
- while(block.variables.count(name))
+ unsigned base_size = name.size();
+ while(1)
{
- if(!prefixed && !prefix_hint.empty())
- {
- if(name.front()!='_')
- name = "_"+name;
- name = prefix_hint+name;
- if(name.front()!='_')
- name = "_"+name;
- prefixed = true;
- size_without_number = name.size();
- }
- else
- {
- name.erase(size_without_number);
- name += format("_%d", number);
- ++number;
- }
+ bool unused = true;
+ for(const Block *b=█ (unused && b); b=b->parent)
+ unused = !b->variables.count(name);
+ if(unused)
+ return name;
+
+ name.erase(base_size);
+ name += format("_%d", number);
+ ++number;
}
-
- return name;
}
} // namespace SL