X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fglsl%2Fsyntax.cpp;h=e7a3990e5c1478b3fcdf8e5727226b05ba688582;hb=22d5405729048ee2677a1e45e309e6328de64a26;hp=cb50fee18b79538c126482594a023ea8f3864001;hpb=b89239e1d616f0c1d8e432b7df1eca149585cf5e;p=libs%2Fgl.git diff --git a/source/glsl/syntax.cpp b/source/glsl/syntax.cpp index cb50fee1..e7a3990e 100644 --- a/source/glsl/syntax.cpp +++ b/source/glsl/syntax.cpp @@ -465,34 +465,24 @@ Module::Module(): { } -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