]> git.tdb.fi Git - libs/gl.git/blobdiff - source/glsl/resolve.cpp
Remove support for redeclaring user-defined variables
[libs/gl.git] / source / glsl / resolve.cpp
index c12a0f48cd389997a95da283b0bd583b6867729f..c03ecae08c80d5bbe9be4c942a8379482b2bbe14 100644 (file)
@@ -17,12 +17,6 @@ void BlockHierarchyResolver::enter(Block &block)
 }
 
 
-TypeResolver::TypeResolver():
-       stage(0),
-       iface_block(0),
-       r_any_resolved(false)
-{ }
-
 bool TypeResolver::apply(Stage &s)
 {
        stage = &s;
@@ -151,13 +145,6 @@ void TypeResolver::visit(FunctionDeclaration &func)
 }
 
 
-VariableResolver::VariableResolver():
-       stage(0),
-       r_any_resolved(false),
-       record_target(false),
-       r_self_referencing(false)
-{ }
-
 bool VariableResolver::apply(Stage &s)
 {
        stage = &s;
@@ -311,7 +298,7 @@ void VariableResolver::visit(MemberAccess &memacc)
                        static const char component_names[] = { 'x', 'r', 's', 'y', 'g', 't', 'z', 'b', 'p', 'w', 'a', 'q' };
 
                        bool ok = true;
-                       UInt8 components[4] = { };
+                       uint8_t components[4] = { };
                        for(unsigned i=0; (ok && i<memacc.member.size()); ++i)
                                ok = ((components[i] = (std::find(component_names, component_names+12, memacc.member[i])-component_names)/3) < 4);
 
@@ -412,23 +399,28 @@ void VariableResolver::visit(VariableDeclaration &var)
        else if(!current_block->parent && ptr->interface==var.interface && ptr->type==var.type)
        {
                if(ptr->source==BUILTIN_SOURCE)
-                       redeclared_builtins.push_back(&var);
-               else
-                       stage->diagnostics.push_back(Diagnostic(Diagnostic::WARN, var.source, var.line,
-                               format("Redeclaring non-builtin variable '%s' is deprecated", var.name)));
+               {
+                       redeclared_builtins.push_back(ptr);
 
-               if(var.init_expression)
-                       ptr->init_expression = var.init_expression;
-               if(var.layout)
+                       if(var.layout)
+                       {
+                               if(ptr->layout)
+                                       merge_layouts(*ptr->layout, *var.layout);
+                               else
+                                       ptr->layout = var.layout;
+                       }
+                       if(var.array_size)
+                               ptr->array_size = var.array_size;
+
+                       nodes_to_remove.insert(&var);
+                       r_any_resolved = true;
+               }
+               else if(ptr->array && !ptr->array_size && !var.layout && !var.init_expression)
                {
-                       if(ptr->layout)
-                               merge_layouts(*ptr->layout, *var.layout);
-                       else
-                               ptr->layout = var.layout;
+                       ptr->array_size = var.array_size;
+                       nodes_to_remove.insert(&var);
+                       r_any_resolved = true;
                }
-               nodes_to_remove.insert(&var);
-
-               r_any_resolved = true;
        }
 }
 
@@ -444,11 +436,6 @@ void VariableResolver::visit(InterfaceBlock &iface)
 }
 
 
-ExpressionResolver::ExpressionResolver():
-       stage(0),
-       r_any_resolved(false)
-{ }
-
 bool ExpressionResolver::apply(Stage &s)
 {
        stage = &s;