X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fprogramcompiler.h;h=8ae22901e89dcbfb19bf08fc2a25929aaddf9188;hb=74bd3813b9744550c9ac5980588e561835b616d9;hp=8681d3638a032cabd389879922fe7378c4a45a76;hpb=f1c6ef565577ac322693255d764eea1f2cab9e77;p=libs%2Fgl.git diff --git a/source/programcompiler.h b/source/programcompiler.h index 8681d363..8ae22901 100644 --- a/source/programcompiler.h +++ b/source/programcompiler.h @@ -38,6 +38,7 @@ private: Formatter(); + virtual void apply(ProgramSyntax::Stage &); const std::string &get_result() const { return formatted; } virtual void visit(ProgramSyntax::Block &); virtual void visit(ProgramSyntax::Literal &); @@ -116,14 +117,24 @@ private: virtual void visit(ProgramSyntax::FunctionDeclaration &); }; - struct InterfaceGenerator: Visitor + 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 &); + virtual void visit(ProgramSyntax::Block &); + }; + + struct InterfaceGenerator: BlockModifier { std::string in_prefix; std::string out_prefix; unsigned scope_level; std::map iface_declarations; - bool remove_node; - std::list insert_nodes; InterfaceGenerator(); @@ -161,12 +172,10 @@ private: virtual void visit(ProgramSyntax::BinaryExpression &); }; - struct ConstantConditionEliminator: Visitor + struct ConstantConditionEliminator: BlockModifier { unsigned scope_level; ExpressionEvaluator::ValueMap variable_values; - bool remove_node; - ProgramSyntax::Block *replacement_block; ConstantConditionEliminator(); @@ -238,6 +247,22 @@ private: virtual void visit(ProgramSyntax::VariableDeclaration &); }; + struct LegacyConverter: BlockModifier + { + Version target_version; + std::string type; + std::string frag_out_name; + + LegacyConverter(); + LegacyConverter(const Version &); + + bool check_version(const Version &); + virtual void visit(ProgramSyntax::VariableReference &); + virtual void visit(ProgramSyntax::FunctionCall &); + virtual void visit(ProgramSyntax::VariableDeclaration &); + virtual void visit(ProgramSyntax::InterfaceBlock &); + }; + Resources *resources; ProgramParser parser; ProgramSyntax::Module *module;