X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fprogramcompiler.h;h=fea7a73fb78c3e8a0b68d12c7a9aa25f73018840;hb=eb6a546dcffc1b67f0a23d8b075fbdc86a2872a0;hp=daf2a5db7904988f9e782e300b25e88ebcc47835;hpb=a5772e203cc30ce3b449614d03a293fd5b5985ad;p=libs%2Fgl.git diff --git a/source/programcompiler.h b/source/programcompiler.h index daf2a5db..fea7a73f 100644 --- a/source/programcompiler.h +++ b/source/programcompiler.h @@ -26,6 +26,19 @@ private: void get_result() const { } }; + struct BlockModifier: Visitor + { + bool remove_node; + std::list > insert_nodes; + + BlockModifier(); + + void flatten_block(ProgramSyntax::Block &); + void apply_and_increment(ProgramSyntax::Block &, std::list >::iterator &); + using Visitor::visit; + virtual void visit(ProgramSyntax::Block &); + }; + struct Formatter: Visitor { typedef std::string ResultType; @@ -77,12 +90,11 @@ private: virtual void visit(T &n) { nodes.push_back(&n); } }; - struct DeclarationCombiner: Visitor + struct DeclarationCombiner: BlockModifier { bool toplevel; std::map > functions; std::map variables; - bool remove_node; DeclarationCombiner(); @@ -125,19 +137,6 @@ private: virtual void visit(ProgramSyntax::FunctionDeclaration &); }; - struct BlockModifier: Visitor - { - bool remove_node; - std::list > insert_nodes; - - BlockModifier(); - - void flatten_block(ProgramSyntax::Block &); - void apply_and_increment(ProgramSyntax::Block &, std::list >::iterator &); - using Visitor::visit; - virtual void visit(ProgramSyntax::Block &); - }; - struct InterfaceGenerator: BlockModifier { std::string in_prefix; @@ -377,8 +376,9 @@ private: public: ProgramCompiler(); - void compile(const std::string &); - void compile(IO::Base &, Resources * = 0); + void compile(const std::string &, const std::string & = ""); + void compile(IO::Base &, Resources * = 0, const std::string & = ""); + void compile(IO::Base &, const std::string &); void add_shaders(Program &); private: