12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- #ifndef ZP_OPTIMIZER_H
- #define ZP_OPTIMIZER_H
- #include "Parser.h"
- namespace zp
- {
- // forward declarations
- enum class Instruction : char;
- struct Block;
- struct InstructionBlock;
- struct UnionBlock;
- struct Loop;
- class AstVisitor;
- struct BlockInstruction;
- class Optimizer;
- }
- class zp::AstVisitor
- {
- public:
- std::unique_ptr<BlockInstruction> visit(Block& block);
- virtual std::unique_ptr<BlockInstruction>
- visitLoop(Loop& loop) = 0;
- virtual std::unique_ptr<BlockInstruction>
- visitInstructionBlock(InstructionBlock& ib) = 0;
- virtual std::unique_ptr<BlockInstruction>
- visitUnionBlock(UnionBlock& ub) = 0;
- };
- struct zp::BlockInstruction
- {
- };
- class zp::Optimizer :
- public AstVisitor
- {
- public:
- std::unique_ptr<BlockInstruction> visitLoop(Loop& loop) override;
- std::unique_ptr<BlockInstruction> visitInstructionBlock(InstructionBlock& ib) override;
- std::unique_ptr<BlockInstruction> visitUnionBlock(UnionBlock& ub) override;
- };
- #endif /* ZP_OPTIMIZER_H */
|