]> git.tdb.fi Git - libs/gl.git/blobdiff - source/glsl/compiler.cpp
Further refactor block and scope management
[libs/gl.git] / source / glsl / compiler.cpp
index 347e16ad301dba1881b604713a68476095ccf0f2..db9017cfb675745779ca45e7654f092ad9d868e6 100644 (file)
@@ -114,7 +114,7 @@ void Compiler::append_module(Module &mod, DataFile::Collection *res)
        vector<Import *> imports = NodeGatherer<Import>().apply(mod.shared);
        for(vector<Import *>::iterator i=imports.begin(); i!=imports.end(); ++i)
                import(res, (*i)->module);
-       NodeRemover(set<Node *>(imports.begin(), imports.end())).apply(mod.shared);
+       NodeRemover().apply(mod.shared, set<Node *>(imports.begin(), imports.end()));
 
        append_stage(mod.shared);
        for(list<Stage>::iterator i=mod.stages.begin(); i!=mod.stages.end(); ++i)
@@ -171,6 +171,7 @@ void Compiler::generate(Stage &stage)
        inject_block(stage.content, module->shared.content);
 
        DeclarationReorderer().apply(stage);
+       BlockResolver().apply(stage);
        FunctionResolver().apply(stage);
        VariableResolver().apply(stage);
        InterfaceGenerator().apply(stage);
@@ -184,15 +185,14 @@ bool Compiler::optimize(Stage &stage)
 {
        ConstantConditionEliminator().apply(stage);
 
-       set<FunctionDeclaration *> inlineable = InlineableFunctionLocator().apply(stage);
-       FunctionInliner(inlineable).apply(stage);
+       FunctionInliner().apply(stage);
+       BlockResolver().apply(stage);
+       VariableResolver().apply(stage);
 
-       set<Node *> unused = UnusedVariableLocator().apply(stage);
-       set<Node *> unused2 = UnusedFunctionLocator().apply(stage);
-       unused.insert(unused2.begin(), unused2.end());
-       NodeRemover(unused).apply(stage);
+       bool result = UnusedVariableRemover().apply(stage);
+       result |= UnusedFunctionRemover().apply(stage);
 
-       return !unused.empty();
+       return result;
 }
 
 void Compiler::finalize(Stage &stage)