X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fprogramcompiler.h;h=0bff354a50571128a0fa31bed3dbe8c935a0b1dc;hp=0ea485a9765d2faa7cafca338b622c5955b936da;hb=HEAD;hpb=a36992487d018d8801ead6980b362b00a2f5f5c5 diff --git a/source/programcompiler.h b/source/programcompiler.h deleted file mode 100644 index 0ea485a9..00000000 --- a/source/programcompiler.h +++ /dev/null @@ -1,105 +0,0 @@ -#ifndef MSP_GL_PROGRAMCOMPILER_H_ -#define MSP_GL_PROGRAMCOMPILER_H_ - -#include -#include "programparser.h" -#include "programsyntax.h" - -namespace Msp { -namespace GL { - -class Program; - -class ProgramCompiler -{ -public: - struct Formatter: ProgramSyntax::NodeVisitor - { - std::string formatted; - unsigned indent; - bool parameter_list; - bool else_if; - - Formatter(); - - virtual void visit(ProgramSyntax::Block &); - virtual void visit(ProgramSyntax::Literal &); - virtual void visit(ProgramSyntax::ParenthesizedExpression &); - virtual void visit(ProgramSyntax::VariableReference &); - virtual void visit(ProgramSyntax::MemberAccess &); - virtual void visit(ProgramSyntax::UnaryExpression &); - virtual void visit(ProgramSyntax::BinaryExpression &); - virtual void visit(ProgramSyntax::FunctionCall &); - virtual void visit(ProgramSyntax::ExpressionStatement &); - virtual void visit(ProgramSyntax::Layout &); - virtual void visit(ProgramSyntax::StructDeclaration &); - virtual void visit(ProgramSyntax::VariableDeclaration &); - virtual void visit(ProgramSyntax::InterfaceBlock &); - virtual void visit(ProgramSyntax::FunctionDeclaration &); - virtual void visit(ProgramSyntax::Conditional &); - virtual void visit(ProgramSyntax::Iteration &); - virtual void visit(ProgramSyntax::Return &); - }; - -private: - struct VariableResolver: ProgramSyntax::TraversingVisitor - { - std::vector blocks; - ProgramSyntax::StructDeclaration *type; - bool anonymous; - - VariableResolver(); - - virtual void visit(ProgramSyntax::Block &); - virtual void visit(ProgramSyntax::VariableReference &); - virtual void visit(ProgramSyntax::MemberAccess &); - virtual void visit(ProgramSyntax::BinaryExpression &); - virtual void visit(ProgramSyntax::StructDeclaration &); - virtual void visit(ProgramSyntax::VariableDeclaration &); - virtual void visit(ProgramSyntax::InterfaceBlock &); - }; - - struct UnusedVariableLocator: ProgramSyntax::TraversingVisitor - { - std::set unused_variables; - - virtual void visit(ProgramSyntax::VariableReference &); - virtual void visit(ProgramSyntax::MemberAccess &); - virtual void visit(ProgramSyntax::VariableDeclaration &); - }; - - struct NodeRemover: ProgramSyntax::TraversingVisitor - { - std::set to_remove; - unsigned n_removed; - bool immutable_block; - bool remove_block; - - NodeRemover(); - - virtual void visit(ProgramSyntax::Block &); - virtual void visit(ProgramSyntax::StructDeclaration &); - virtual void visit(ProgramSyntax::InterfaceBlock &); - }; - - ProgramParser parser; - ProgramSyntax::Module *module; - -public: - ProgramCompiler(); - - void compile(const std::string &); - void compile(IO::Base &); - void add_shaders(Program &); - -private: - void process(); - void process(ProgramSyntax::Context &); - static void inject_block(ProgramSyntax::Block &, const ProgramSyntax::Block &); - std::string format_context(ProgramSyntax::Context &); -}; - -} // namespace GL -} // namespace Msp - -#endif