]> git.tdb.fi Git - libs/gl.git/blobdiff - source/glsl/syntax.cpp
Make variable renaming while inlining more robust
[libs/gl.git] / source / glsl / syntax.cpp
index 469ce5a602c2f22a464a5896c003c5aa209d29ef..c94e2e27042c63a6a7f0b2c91f3d26c5b00f1e30 100644 (file)
@@ -464,6 +464,41 @@ Module::Module():
        shared(Stage::SHARED)
 { }
 
+
+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(1)
+       {
+               bool unused = true;
+               for(const Block *b=█ (unused && b); b=b->parent)
+                       unused = !b->variables.count(name);
+               if(unused)
+                       return 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;
+               }
+       }
+}
+
 } // namespace SL
 } // namespace GL
 } // namespace Msp