+
+string get_unused_variable_name(const Block &block, const string &base)
+{
+ string name = base;
+
+ unsigned number = 1;
+ unsigned base_size = name.size();
+ while(1)
+ {
+ 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;
+ }
+}
+
+int get_layout_value(const Layout &layout, const string &name, int def_value)
+{
+ for(vector<Layout::Qualifier>::const_iterator i=layout.qualifiers.begin(); i!=layout.qualifiers.end(); ++i)
+ if(i->name==name)
+ return i->value;
+ return def_value;
+}
+
+void add_to_chain(Assignment::Target &target, Assignment::Target::ChainType type, unsigned index)
+{
+ if(target.chain_len<7)
+ target.chain[target.chain_len] = type | min<unsigned>(index, 0x3F);
+ ++target.chain_len;
+}
+