+
+string get_unused_variable_name(const Block &block, const string &base, const string &prefix_hint)
+{
+ string name = base;
+
+ bool prefixed = false;
+ unsigned number = 1;
+ unsigned size_without_number = name.size();
+ while(block.variables.count(name))
+ {
+ 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;
+ }
+ }
+
+ return name;
+}
+