]> git.tdb.fi Git - libs/gl.git/blobdiff - source/glsl/compiler.cpp
Transform interface block contents into structs
[libs/gl.git] / source / glsl / compiler.cpp
index 7dbb501c777bd177b53e9ba37229913e5f07fd92..ccfbe691195eefd91aa4314281db6afc1bb97c97 100644 (file)
@@ -166,7 +166,8 @@ string Compiler::get_diagnostics() const
        string combined;
        for(list<Stage>::const_iterator i=module->stages.begin(); i!=module->stages.end(); ++i)
                for(vector<Diagnostic>::const_iterator j=i->diagnostics.begin(); j!=i->diagnostics.end(); ++j)
-                       append(combined, "\n", format("%s:%d: %s", module->source_map.get_name(j->source), j->line, j->message));
+                       if(j->source!=INTERNAL_SOURCE)
+                               append(combined, "\n", format("%s:%d: %s", module->source_map.get_name(j->source), j->line, j->message));
        return combined;
 }
 
@@ -174,7 +175,10 @@ void Compiler::append_module(Module &mod, DataFile::Collection *res)
 {
        module->source_map.merge_from(mod.source_map);
 
-       vector<Import *> imports = NodeGatherer<Import>().apply(mod.shared);
+       vector<Import *> imports;
+       for(NodeList<Statement>::const_iterator i=mod.shared.content.body.begin(); i!=mod.shared.content.body.end(); ++i)
+               if(Import *imp = dynamic_cast<Import *>(i->get()))
+                       imports.push_back(imp);
        for(vector<Import *>::iterator i=imports.begin(); i!=imports.end(); ++i)
                import(res, (*i)->module);
        NodeRemover().apply(mod.shared, set<Node *>(imports.begin(), imports.end()));
@@ -272,7 +276,7 @@ void Compiler::resolve(Stage &stage, unsigned flags)
                if(resolve<BlockHierarchyResolver>(stage, flags, RESOLVE_BLOCKS))
                        ;
                else if(resolve<TypeResolver>(stage, flags, RESOLVE_TYPES))
-                       flags |= RESOLVE_VARIABLES|RESOLVE_EXPRESSIONS;
+                       flags |= RESOLVE_BLOCKS|RESOLVE_VARIABLES|RESOLVE_EXPRESSIONS;
                else if(resolve<VariableResolver>(stage, flags, RESOLVE_VARIABLES))
                        flags |= RESOLVE_EXPRESSIONS;
                else if(resolve<FunctionResolver>(stage, flags, RESOLVE_FUNCTIONS))